java树形结构⼯具类(查询省市区树形结构数据等多级联级数据)⼀.树形结构数据⼀般都是以⼦⽗id的形式存在数据库中,查询的时候只是带有⼦id和parent_id的List集合
并不是树形结构,所以我们现在要将普通的List集合转换为树结构数据(本⼯具类扩展操作树结构数据⽅法)
1.⼯具类(TreeNodeUtil)
代码⽰例:
package com.ywb.;
import com.alibaba.druid.util.StringUtils;
import com.ywb.pms.vo.BaseTreeNode;
import llections.CollectionUtils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @Author: ywb
* @Date: 2019/8/19 14:32
* @Version 1.0
*/
public class TreeNodeUtil {
/**
* 获取关联⽗节点数据集合列表
* 由对应的⼦节点到根节点(root)
*
* @param id        要搜索对应⽗节点节点的id
* @param listNodes 要处理列表集合节点数据(不是组合成树状图后的数据)
*/
public static <T extends BaseTreeNode> List<T> getParentList(List<T> listNodes, String id) {
if (StringUtils.isEmpty(id) || CollectionUtils.isEmpty(listNodes)) {
return null;
}
// 数据保存的对象
List<T> treeNodes = new ArrayList<>();
int length = listNodes.size();
// 防⽌死循环问题
byte[] nodeIndex = new byte[length];
T t;
for (int i = 0; i < length; i++) {
t = (i);
// 循环到节点id,赋值id等于该节点pid
if (id.Id()) && nodeIndex[i] == 0) {
nodeIndex[i] = 1;
treeNodes.add(t);
id = t.getpId();
/
/ ⽗主键为空,null,"0",结束循环
if (StringUtils.isEmpty(id) || "null".equals(id) || "0".equals(id)) {
break;
}
i = -1;
}
}
return treeNodes;
}
/**
* 获取关联⼦节点数据集合列表
* 由对应的⼦节点向⼦节点搜索
*
* @param listNodes 要处理列表集合节点数据(不是组合成树状图后的数据)
* @param ids      要搜索对应⼦节点的id集合
*/
public static <T extends BaseTreeNode> List<T> getChildList(List<T> listNodes, List<String> ids) {
return CollectionUtils.isEmpty(ids) ? null : getChildList(listNodes, Array(new String[ids.size()]));
}
/**
*
* @param listNodes 要处理列表集合节点数据(不是组合成树状图后的数据)
* @param id 要搜索对应⼦节点的id
* @param <T>
* @return
*/
public static <T extends BaseTreeNode> List<T> getChildList(List<T> listNodes, String id) {
return StringUtils.isEmpty(id) ? null : getChildList(listNodes, new String[]{id});
}
/**
*
* @param listNodes 要处理列表集合节点数据(不是组合成树状图后的数据)
* @param ids 要搜索对应⼦节点的id(数组)
* @param <T>
* @return
*/
public static <T extends BaseTreeNode> List<T> getChildList(List<T> listNodes, String[] ids) { if (ids == null || ids.length == 0 || CollectionUtils.isEmpty(listNodes)) {
return null;
}
// 数据保存的对象
List<T> treeNodes = new ArrayList<>();
int length = listNodes.size();
// 防⽌死循环问题
byte[] nodeIndex = new byte[length];
// 循环获取要获取节点
T t;
for (String id : ids) {
for (int i = 0; i < length; i++) {
t = (i);
if (id.Id())) {
treeNodes.add(t);
nodeIndex[i] = 1;
}
}
}
String tempId;
int index = 0;
while (index < treeNodes.size()) {
tempId = (index).getId();
if (!StringUtils.isEmpty(tempId)) {
for (int i = 0; i < length; i++) {
t = (i);
if (tempId.pId()) && nodeIndex[i] == 0) {
nodeIndex[i] = 1;
treeNodes.add(t);
}
}
}
index++;
}
return treeNodes;
}
/**
* 封装整个树状图数据
*
* @param listNodes 要处理列表集合节点数据
*/
public static <T extends BaseTreeNode> List<T> assembleTree(List<T> listNodes) {
List<T> newTreeNodes = new ArrayList<>();
// 循环赋值最上⾯的节点数据
// 赋值最上⾯节点的值
newTreeNodes.addAll(listNodes.stream()
.filter(t -> StringUtils.pId()) || "null".pId()) || "0".pId()))                .List()));
// 循环处理⼦节点数据
for (T t : newTreeNodes) {
//递归
assembleTree(t, listNodes);
}
return newTreeNodes;
}
/**
* 封装层单个树⼦节点数据
*
* @param id        根⽬录节点id
* @param listNodes 要处理的列表数据
*/
public static <T extends BaseTreeNode> T assembleTreeById(String id, List<T> listNodes) { if (StringUtils.isEmpty(id) || CollectionUtils.isEmpty(listNodes)) {
return null;
}
// 获取对应的节点
T node = null;
for (T temp : listNodes) {
if (id.Id())) {
node = temp;
break;
}
}
assembleTree(node, listNodes);
return node;
}
/
**
* 根据节点封装树状图集合数据
*
* @param node      处理的节点(当前节点)
* @param listNodes 要处理的列表数据
*/
static <T extends BaseTreeNode> void assembleTree(T node, List<T> listNodes) {
if (node != null && !CollectionUtils.isEmpty(listNodes)) {
// 循环节点数据,如果是⼦节点则添加起来
listNodes.stream().filter(t -> Objects.pId(), Id())).forEachOrdered(node::addChild);
// 循环处理⼦节点数据,递归
if (!CollectionUtils.Child())) {
for (Object t : Child()) {
//递归
assembleTree((T) t, listNodes);
}
}
}
}
/**
* 主键输出
*
* @param treeNodes 节点
* @return String 注解集合
字符串转数组工具类的方法*/
public static <T extends BaseTreeNode> String idToString(List<T> treeNodes) {
return idToString(treeNodes, ",");
}
/**
* 主键输出
*
* @param treeNodes 节点
* @param c      拼接字符串
* @return String 注解集合
*/
public static <T extends BaseTreeNode> String idToString(List<T> treeNodes, String c) {
StringBuilder pks = new StringBuilder();
if (treeNodes != null) {
for (T t : treeNodes) {
pks.Id()).append(c);
}
}
return pks.length() > 0 ? pks.delete(pks.length() - c.length(), pks.length()).toString() : "";
}
}
2.实体需要继承的java类
/**
* @author : Latent
* @createdDate : 2019/8/12
* @updatedDate
*/
public class BaseTreeNode {
/**
* ⼦Id
*/
private String id;
/**
* ⽗ID
*/
private String pId;
private List<BaseTreeNode> child;
public BaseTreeNode() {
}
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getpId() {
return this.pId;
}
public void setpId(String pId) {
this.pId = pId;
}
public List<BaseTreeNode> getChild() {
return this.child;
}
public void setChild(List<BaseTreeNode> child) {
this.child = child;
}
public void addChild(BaseTreeNode baseTreeNode) {
if (this.child == null) {
this.setChild(new ArrayList());
}
/**
* @author : Latent
* @createdDate : 2019/8/15
* @updatedDate
*/
@Data
public class AddressDto extends BaseTreeNode {
/**
* 地址名称
*/
String addressName;
/**
* 地址编码
*/
String addressCode;
/**
* 类型
*/
String addressType;
}
4.Service类
@Override
public List<AddressDto> getlistAddress() {
List<AddressDto> list = dao.listAddress("");
//将集合转换成树状结构
List<AddressDto>  listDto = TreeNodeUtil.assembleTree(list);
return listDto;
5.数据库(部分数据)
-- ----------------------------
-- Table structure for address_info
-- ----------------------------
DROP TABLE IF EXISTS `address_info`;
CREATE TABLE `address_info`  (
`address_pk` char(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '插⼊时间',
`delete_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否删除',
`address_code` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址编码',
`address_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址名',
`address_type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址类型',
`p_address_pk` char(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '上级主键',
`baidu_city_code` varchar(5) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '百度地图编码',
`is_audit_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否通过审核',
`update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '最新修改时间',
`area_code` char(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '区',
`sort_num` int(11) NULL DEFAULT NULL COMMENT '排序',
`audit_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`address_pk`) USING BTREE,
INDEX `FK20mbxgi8i8n1egyg4mee8y2ow`(`p_address_pk`) USING BTREE
) ENGINE = InnoDB CHARACTER SET= utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-
- Records of upms_address
-- ----------------------------
INSERT INTO `address_info` VALUES ('002a3308-273e-4a8b-bdd2-f51271922211', '2017-07-21 23:09:23', 'Y', 'YT', '烟台市', 'CITY', '35a564c8-75a5-4e3f-a5a3-9707355ffbb6', '326', NULL, '
INSERT INTO `address_info` VALUES ('00513404-d9bd-41d9-a679-f07f86cf8252', '2017-07-25 18:21:22', 'Y', 'LN', '辽宁省', 'PROVINCE', NULL, NULL, NULL, '2018-03-29 03:55:25', NULL,
INSERT INTO `address_info` VALUES ('00932ca7-7f7c-43c6-9a2a-a69ef9c9096d', '2017-07-25 17:14:45', 'Y', 'SC', '四川省', 'PROVINCE', NULL, NULL, NULL, '2018-03-29 03:55:25', NULL, INSERT INTO `address_info` VALUES ('00c1f147-8d86-4211-a3c8-d6b023b17388', '2016-06-27 17:40:57', 'Y', 'SQ', '肇庆', 'CITY', '668811cd-2158-421c-9270-4b6219aa4804', NULL, NULL, INSERT INTO `address_info` VALUES ('00e44393-c92d-45fb-9923-76704aca8cc6', '2017-07-25 16:58:51', 'Y', 'HK', '海⼝市', 'CITY', '9e605f4d-1dec-4105-b3c8-a7dad023cabe', '125', NULL, INSERT INTO `address_info` VALUES ('00f30856-594f-404d-af36-d0d727f2d120', '2017-07-25 17:08:16', 'Y', 'ZSQD', '中沙岛', 'CITY', '9e605f4d-1dec-4105-b3c8-a7dad023cabe', '1498', NULL INSERT INTO `address_info` VALUES ('011c99be-b57f-4134-8263-f92a6bde33e8', '2017-07-24 23:05:32', 'Y', 'HS', '黄⽯市', 'CITY', '
0678bf05-47e1-4b21-bd5b-ab2ee0d4e32c', '311', NULL, INSERT INTO `address_info` VALUES ('0292fd00-b24d-4eae-b22e-53f6366c6a55', '2017-07-25 17:11:42', 'Y', 'LG', '临⾼县', 'CITY', '9e605f4d-1dec-4105-b3c8-a7dad023cabe', '2033', NULL
INSERT INTO `address_info` VALUES ('0323c938-b222-443b-bb23-cba047d8bd26', '2017-07-21 22:33:37', 'Y', 'LD', '娄底市', 'CITY', 'a7842f5d-be1a-4113-bdc6-613609a2bf17', '221', NULL, INSERT INTO `address_info` VALUES ('032caf42-28a8-4161-8665-7d60da75ff3f', '2017-07-24 23:12:43', 'Y', 'YC', '宜春市', 'CITY', 'c0546c2d-ae74-4dd0-acaf-f2d7e444b4ff', '278', NULL, '2018-03-29 03 INSERT INTO `address_info` VALUES ('03787b88-1186-4f8f-ba53-a6b75439a49c', '2017-07-24 23:04:25', 'Y', 'YC', '宜昌市', 'CITY', '0678bf05-47e1-4b21-bd5b-ab2ee0d4e32c', '270', NULL, INSERT INTO `address_info` VALUES ('044e41bc-6db3-4565-977f-d8f6bea0ee64', '2017-07-24 23:24:29', 'Y', 'AL', '阿⾥地区', 'CITY', '16bc37b6-cca1-477a-9708-bf791bfdb90d', '103', NULL INSERT INTO `address_info` VALUES ('059f7386-ee96-407d-9e50-efecb339f846', '2017-07-25 18:05:00', 'Y', 'YL', '⽟林市', 'CITY', '22a54667-fa5c-4342-a3a2-2a0cf866e441', '361', NULL, '2018-03-29 INSERT INTO `address_info` VALUES ('05e098e9-0b78-4cb6-9841-605e8df374cb', '2018-04-26 15:56:54', 'N', 'ES', '恩施', 'CITY', '6684e528-c123-4980-a784-90a35ce8ab55', '373', 'N', '2018-04-26 15 INSERT INTO `address_info` VALUES ('062cfb72-e51c-44ea-8649-ffdcf3ba939e', '2017-07-24 22:07:33', 'Y', 'CD', '承
德市', 'CITY', 'a7e13d9e-8e7a-45ab-9828-27e772882774', '207', NULL, ' INSERT INTO `address_info` VALUES ('0678bf05-47e1-4b21-bd5b-ab2ee0d4e32c', '2017-07-24 23:01:32', 'Y', 'HB', '湖北省', 'PROVINCE', NULL, NULL, NULL, '2018-03-29 03:55:25', NULL INSERT INTO `address_info` VALUES ('0689c9f7-3e2a-4c96-b3b2-a41b2dd15864', '2016-06-01 11:13:51', 'Y', 'zz', '郑州', 'CITY', '1ec283ec-22cc-422f-ac9a-4cf4e018edab', NULL, NULL, '2018-03-29 0 INSERT INTO `address_info` VALUES ('06be4ab2-1432-47ca-a501-5064d063b3b7', '2017-07-24 21:47:14', 'Y', 'SX', '⼭西省', 'PROVINCE', NULL, NULL, NULL, '2018-03-29 03:55:25', NULL INSERT INTO `address_info` VALUES ('06c1bc9d-6a8d-4d4f-a528-0244c1322e7e', '2017-07-24 22:14:03', 'Y', 'SQ', '宿迁市', 'CITY', '40ca140c-7539-4c55-bd64-f2711ee2d1db', '277', NULL, INSERT INTO `address_info` VALUES ('070982ba-9c07-42dc-afb4-d747a8f53bd4', '2017-07-21 22:32:17', 'Y', 'HY', '衡阳市', 'CITY', 'a7842f5d-be1a-4113-bdc6-613609a2bf17', '159', NULL, '
INSERT INTO `address_info` VALUES ('0756ae21-3e71-4b4e-a979-a1a7746b38c9', '2017-07-25 17:59:34', 'Y', 'GL', '桂林市', 'CITY', '22a54667-fa5c-4342-a3a2-2a0cf866e441', '142', NULL, INSERT INTO `address_info` VALUES ('07a6a88c-31eb-456e-8588-103b3ed2ee79', '2017-07-24 23:35:19', 'Y', 'ALE', '阿拉尔市', 'CITY', '69f0ce1a-f967-4c9d-a9f6-6e451dfa3956', '731', NULL
INSERT INTO `address_info` VALUES ('0837fa39-df89-4a33-83f9-ed10bf430ed0', '2017-07-21 23:13:
45', 'Y', 'BY', '⽩银市', 'CITY', 'b33004bd-34c7-4023-a6b4-4862aa006b01', '35', NULL, '2018-03-29 INSERT INTO `address_info` VALUES ('08442620-a076-4a4c-8f81-50200372709d', '2017-07-25 18:35:03', 'Y', 'QN', '黔南布依族苗族⾃治州', 'CITY', '1759947f-809f-40f0-901e-1ad041991098 INSERT INTO `address_info` VALUES ('087c79ab-c63f-4970-8631-38e33e158d21', '2017-07-24 22:20:44', 'Y', 'HF', '合肥市', 'CITY', '1945ba57-474f-4b3b-aaf9-0e95c116eb13', '127', NULL, INSERT INTO `address_info` VALUES ('08d811a4-f1f3-4cf4-90dc-528ccb89010e', '2017-07-24 23:06:46', 'Y', 'ESTJZ', '恩施⼟家族苗族⾃治州', 'CITY', '0678bf05-47e1-4b21-bd5b-ab2ee0d4e32c INSERT INTO `address_info` VALUES ('08dfb45b-41fc-4719-b726-57110bd97832', '2016-03-30 10:14:44', 'Y', 'BJ', '北京', 'PROVINCE', NULL, NULL, NULL, '2018-03-29 03:55:25', NULL, NULL INSERT INTO `address_info` VALUES ('09077956-0a60-4f89-a1b3-109d8038b18f', '2017-07-24 22:55:24', 'Y', 'CZ', '潮州', 'CITY', '668811cd-2158-421c-9270-4b6219aa4804', '201', NULL, '2018-03-29 INSERT INTO `address_info` VALUES ('097effa5-74ad-4016-ba88-2f0720617d8d', '2017-07-25 17:06:54', 'Y', 'BT', '保亭黎族苗族⾃治县', 'CITY', '9e605f4d-1dec-4105-b3c8-a7dad023cabe', INSERT INTO `address_info` VALUES ('09aeb664-ef91-44c2-9c77-0d181b25dc89', '2017-07-24 22:31:59', 'Y', 'SX', '绍兴市', 'CITY', '6ee8d443-99a4-4d9f-b184-71aad2f2fa70', '293', NULL, ' INSERT INTO `address_info` VALUES ('09f425ad-0304-429c-98c4-8227719c19a6', '2016-06-27 17:27:42', 'Y', 'GS', '⽢肃省', 'PROVINCE', NULL, NULL, NULL, '2018-03-29 03:55:25', NULL INSERT INTO `address_info`
VALUES ('0b51a07d-0363-4b37-9429-a496bdf22581', '2017-07-21 22:51:36', 'Y', 'PDS', '平顶⼭市', 'CITY', '521636ef-6cec-4763-962d-ebb3ef301430', '213', NULL INSERT INTO `address_info` VALUES ('0b739b4f-3e3e-472e-a0b4-d9e24fe5212a', '2017-07-13 21:36:50', 'Y', 'YN、', '云南省', 'PROVINCE', NULL, NULL, NULL, '2018-03-29 03:55:25', NULL INSERT INTO `address_info` VALUES ('0b9d8ef5-aa1e-4186-9ea4-df1d10877a86', '2017-07-21 22:44:38', 'Y', 'XX', '新乡市', 'CITY', '521636ef-6cec-4763-962d-ebb3ef301430', '152', NULL, ' INSERT INTO `address_info` VALUES ('0bf9a75f-7cfe-4509-a17f-12dd5bb757ca', '2017-07-24 21:34:34', 'Y', 'YSZZ', '⽟树藏族⾃治州', 'CITY', 'a87e8d52-be87-4ca2-9585-87ba0004cedd', '71 INSERT INTO `address_info` VALUES ('0cea279a-1624-4d4e-a8ee-9b8d70b54766', '2017-07-25 18:32:44', 'Y', 'TR', '铜仁地区', 'CITY', '1759947f-809f-40f0-901e-1ad041991098', '205', NULL INSERT INTO `address_info` VALUES ('0d1a7cc9-052a-420c-8078-48bc2ca839f3', '2017-07-19 23:14:11', 'Y', 'CD', '成都', 'PROVINCE', NULL, '75', NULL, '2018-03-29 03:55:25', NULL, NULL INSERT INTO `address_info` VALUES ('0d219938-584e-4326-8224-cf79ed5fdd07', '2017-07-24 22:34:06', 'Y', 'DG', '东莞', 'CITY', '668811cd-2158-421c-9270-4b6219aa4804', '119', NULL, '2018-03-29 INSERT INTO `address_info` VALUES ('0db76d4e-dafc-44fe-8991-2657f4a1e7fc', '2016-06-27 17:42:04', 'Y', 'HY', '河源', 'CITY', '668811cd-2158-421c-9270-4b6219aa4804', NULL, NULL, '2018-03-29 INSERT INTO `address_info` VALUES ('0dd4a2df-ef7a-446b-b098-440c91ac698d', '2017-07-25 18:48:52', 'Y', 'PD', '屏东县', 'CITY', 'a1274f9f-193e-40f9-a569-
acf719f69c47', '9012', NULL, '2018-03-29 INSERT INTO `address_info` VALUES ('0e2c0813-39b9-4437-aea2-20622e36e79f', '2017-07-24 23:32:08', 'Y', 'YLHSK', '伊犁哈萨克⾃治州', 'CITY', '69f0ce1a-f967-4c9d-a9f6-6e451dfa3956 INSERT INTO `address_info` VALUES ('0ec5e764-f0b3-49a5-8b06-cf4c9f60d69c', '2017-07-24 22:54:08', 'Y', 'ZJ', '湛江', 'CITY', '668811cd-2158-421c-9270-4b6219aa4804', '198', NULL, '2018-03-29 0 INSERT INTO `address_info` VALUES ('0ff962eb-ad51-403f-a514-84f38e3f53e2', '2017-07-24 22:15:05', 'Y', 'WX', '⽆锡市', 'CITY', '40ca140c-7539-4c55-bd64-f2711ee2d1db', '317', NULL, '2018-03-29 INSERT INTO `address_info` VALUES ('10580daa-6143-40d4-aa2f-6a7aed4503f7', '2017-07-15 19:29:08', 'Y', 'SH', '上海', 'PROVINCE', NULL, '289', NULL, '2018-03-29 03:55:25', NULL, NULL INSERT INTO `address_info` VALUES ('10d948cc-be28-4bc6-affc-bf0b37dbfd69', '2017-07-25 17:53:26', 'Y', 'XSBN', '西双版纳傣族⾃治州', 'CITY', '6b197334-dcdd-4350-9b49-6a2ca4dc1c8d INSERT INTO `address_info` VALUES ('110101', '2018-06-27 09:11:10', 'N', NULL, '东城区', 'AREA', '2b5facc8-fe2b-46dd-9e06-f491390f8ec1', NULL, NULL, '2018-06-27 09:11:10', '110101', INSERT INTO `address_info` VALUES ('110102', '2018-06-27 09:11:10', 'N', NULL, '西城区', 'AREA', '2b5facc8-fe2b-46dd-9e06-f491390f8ec1', NULL, NULL, '2018-06-27 09:11:10', '110102', INSERT INTO `address_info` VALUES ('110105', '2018-06-27 09:11:10', 'N', NULL, '朝阳区', 'AREA', '2b5facc8-fe2b-46dd-9e06-f491390f8ec1', NULL, NULL, '2018-06-27 09:11:10', '110105',
5.转换后的数据结构
{
"code": 1,
"msg": "success",
"sign": null,
"data": [
{
"id": "120000",
"pId": "",
"child": [
{
"id": "120100",
"pId": "120000",
"child": [
{
"id": "120101",
"pId": "120100",
"child": null,
"addressName": "和平区",
"addressCode": null,
"addressType": "AREA"
},
{
"id": "120102",
"pId": "120100",
"child": null,
"addressName": "河东区",
"addressCode": null,
"addressType": "AREA"
},
{
"id": "120103",
"pId": "120100",
"child": null,
"addressName": "河西区",
"addressCode": null,
"addressType": "AREA"
},
{
"id": "120104",
"pId": "120100",
"child": null,
"addressName": "南开区",
"addressCode": null,
"addressType": "AREA"
},
{
"id": "120105",
"pId": "120100",
"child": null,
"addressName": "河北区",
"addressCode": null,
"addressType": "AREA"
},
{
"id": "120106",
"pId": "120100",
"child": null,
"addressName": "红桥区",
"addressCode": null,
"addressType": "AREA"
},

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。