From 3f02f406cffef24aaab2a3c852768f46b0d84a23 Mon Sep 17 00:00:00 2001 From: lizhi <1370025557@qq.com> Date: Mon, 27 Jun 2022 17:20:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=BA=E5=9F=9F=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kicc/common/data/entity/TreeEntity.java | 4 +- .../cloud/kicc/system/api/entity/Address.java | 41 +++++-- .../system/controller/AddressController.java | 109 +++++++++++++++--- .../kicc/system/service/AddressService.java | 2 + .../service/impl/AddressServiceImpl.java | 54 +++++++++ .../src/main/resources/mapper/Address.xml | 39 +++++-- 6 files changed, 213 insertions(+), 36 deletions(-) diff --git a/kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/entity/TreeEntity.java b/kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/entity/TreeEntity.java index 0192c5bb..043ce539 100644 --- a/kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/entity/TreeEntity.java +++ b/kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/entity/TreeEntity.java @@ -19,7 +19,9 @@ import java.util.List; public class TreeEntity extends CommonEntity { private static final long serialVersionUID = 1L; - + /** 编号 **/ + @ApiModelProperty("编号") + private String id; /** 父级编号 **/ @ApiModelProperty("父级编号") private String parentId; diff --git a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Address.java b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Address.java index f0a889e8..fe5123d4 100644 --- a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Address.java +++ b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Address.java @@ -1,12 +1,19 @@ package com.cloud.kicc.system.api.entity; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.cloud.kicc.common.data.entity.CommonEntity; import com.cloud.kicc.common.data.entity.TreeEntity; +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.apache.poi.ss.formula.functions.T; + +import java.util.ArrayList; +import java.util.List; /** * @Author: TangSheng @@ -17,17 +24,35 @@ import lombok.experimental.Accessors; @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) -@TableName(value="sys_address") -public class Address extends TreeEntity
{ - +@TableName(value="sys_area") +public class Address extends CommonEntity { + /** 编号 **/ + @ApiModelProperty("id") + @TableId(value = "id") + private String id; @ApiModelProperty("编码") - @TableId(value = "code") private String code; + /** 父级编号 **/ + @ApiModelProperty("父级编号") + private String parentId; + + /** 名称 */ + @ApiModelProperty("名称") + protected String name; + + /** 排序 **/ + @ApiModelProperty("排序") + private Integer sort; + + @ApiModelProperty("子级集合") + @TableField(exist = false) + @JsonInclude(JsonInclude.Include.NON_EMPTY) + protected List
children = new ArrayList(); - @ApiModelProperty("层级") - private Integer level; +// @ApiModelProperty("层级") +// private Integer level; - //@ApiModelProperty("排序") - //private boolean lastLevel; +// @ApiModelProperty("排序") +// private boolean lastLevel; } diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/AddressController.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/AddressController.java index cd48eaab..4d402f0a 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/AddressController.java +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/AddressController.java @@ -1,15 +1,23 @@ package com.cloud.kicc.system.controller; +import cn.hutool.core.lang.tree.Tree; +import cn.hutool.core.lang.tree.TreeNode; +import cn.hutool.core.lang.tree.TreeNodeConfig; +import cn.hutool.core.lang.tree.TreeUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.cloud.kicc.common.core.api.R; import com.cloud.kicc.common.core.constant.AppConstants; import com.cloud.kicc.system.api.entity.Address; +import com.cloud.kicc.system.api.entity.Dept; +import com.cloud.kicc.system.api.entity.User; import com.cloud.kicc.system.service.AddressService; +import com.cloud.kicc.system.service.UserService; +import com.sun.org.apache.bcel.internal.generic.NEW; import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -28,7 +36,7 @@ import java.util.List; @RequestMapping(AppConstants.APP_SYSTEM + "/address") @Api(value = "app", tags = "地址管理模块") public class AddressController { - + private final UserService userService; private final AddressService addressService; /** @@ -37,7 +45,6 @@ public class AddressController { * @return */ @PostMapping("/add") - @ApiOperation(value = "新增") public R add(@RequestBody Address address){ addressService.save(address); return R.ok(address); @@ -49,21 +56,29 @@ public class AddressController { * @return */ @PutMapping("/update") - @ApiOperation(value = "修改") public R update(@RequestBody Address address){ addressService.updateById(address); - return R.ok(address); + new Thread(() -> { + List userList = userService.list(new LambdaQueryWrapper().eq(User::getDeptId, address.getId())); + for (User user : userList) { + user.setDeptName(address.getName()); + userService.updateById(user); + } + }).start(); + return R.ok(); } /** * 删除地址节点 - * @param ids 节点id + * @param id 节点id * @return */ - @ApiOperation(value = "删除") - @DeleteMapping("/remove/{ids}") - public R remove(@PathVariable("ids") String[] ids){ - addressService.removeBatchByIds(Arrays.asList(ids)); + @DeleteMapping("/remove/{id}") + public R remove(@PathVariable("id") String id){ + if(addressService.getMap(Wrappers.
lambdaQuery().eq(Address::getParentId,id))!=null){ + return R.error("存在下级区域,不允许删除"); + } + addressService.removeById(id); return R.ok(); } @@ -72,22 +87,82 @@ public class AddressController { * @param id * @return */ - @ApiOperation(value = "根据Id列表查询list") - @GetMapping("/query/{id}") + @GetMapping("/{id:\\w+}") public R getById(@PathVariable("id") String id) { return R.ok(addressService.getById(id)); } + + /** + * 查询根据条件 + * @return + */ +// @GetMapping("/list") +// public R list(Address address) { +// List
addressList = addressService.queryList(address); +// return R.ok(addressList, addressList.size()); +// } + @GetMapping("/list") + public R list(Address address){ + List
addressList = addressService.list(getQueryWrapper(address)); + //配置 + TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); + treeNodeConfig.setIdKey("code"); + treeNodeConfig.setParentIdKey("parent_id"); + treeNodeConfig.setNameKey("name"); + treeNodeConfig.setWeightKey("sort"); + //最大递归深度 + treeNodeConfig.setDeep(3); + //转换器 + List> treeNodes = TreeUtil.build(addressList,"0",treeNodeConfig,(treeNode,tree)->{ + tree.setId(treeNode.getCode()); + tree.setParentId(treeNode.getParentId()); + tree.setName(treeNode.getName()); + tree.setWeight(treeNode.getSort()); + }); + return R.ok(addressList,addressList.size()); + } + /** + * 加载地址机构树 + * */ + @GetMapping("/addrTree") + public R addrTree(){ + List
addrList = addressService.list(new LambdaQueryWrapper
().orderByAsc(Address::getSort)); + return R.ok(addressService.buildTree(addrList,"0")); + } /** * 根据parentIds列表查询list + * @param parentIds * @return */ - @ApiOperation(value = "根据parentId列表查询list") - @GetMapping("/queryByParentId") - public R queryByParentId( Address address) { - List
addressList = addressService.list(Wrappers.
lambdaQuery().eq(Address::getParentId, address.getParentId())); + @GetMapping("/queryByParentIds/{ids}") + public R queryByParentIds(@PathVariable("ids") String[] parentIds) { + if (ObjectUtil.isEmpty(parentIds)) { + return R.ok(new ArrayList<>(), 0); + } + List
addressList = addressService.queryListByParentIds(Arrays.asList(parentIds)); return R.ok(addressList, addressList.size()); } -} + private LambdaQueryWrapper
getQueryWrapper(Address address) { + return Wrappers.
lambdaQuery() + .like(StrUtil.isNotBlank(address.getName()), Address::getName,address.getName()) + .eq(StrUtil.isNotBlank(address.getParentId()), Address::getParentId, address.getParentId()) + .between(StrUtil.isNotBlank(address.getBeginTime()) && StrUtil.isNotBlank(address.getEndTime()), Address::getCreateTime, address.getBeginTime(), address.getEndTime()) + .like(StrUtil.isNotBlank(address.getCode()),Address::getCode, address.getCode()) + .orderByAsc(Address::getSort); + } +// /** +// * 根据parentIds列表查询list +// * @return +// */ +// @ApiOperation(value = "根据parentId列表查询list") +// @GetMapping("/list") +// public R queryByParentId( Address address) { +// List
addressList = addressService.list(Wrappers.
lambdaQuery().eq(Address::getParentId, address.getParentId())); +// return R.ok(addressList, addressList.size()); +// } + + +} \ No newline at end of file diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/AddressService.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/AddressService.java index 35669fc3..40458c47 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/AddressService.java +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/AddressService.java @@ -3,6 +3,7 @@ package com.cloud.kicc.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.cloud.kicc.system.api.entity.Address; +import com.cloud.kicc.system.api.entity.Dept; import java.util.List; @@ -27,5 +28,6 @@ public interface AddressService extends IService
{ * @return */ List
queryListByParentIds(List list); + List
buildTree(List
list, String parentId); } \ No newline at end of file diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/AddressServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/AddressServiceImpl.java index e3b861a8..1f052642 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/AddressServiceImpl.java +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/AddressServiceImpl.java @@ -1,14 +1,18 @@ package com.cloud.kicc.system.service.impl; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.cloud.kicc.system.api.entity.Address; +import com.cloud.kicc.system.api.entity.Dept; import com.cloud.kicc.system.mapper.AddressMapper; import com.cloud.kicc.system.service.AddressService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Iterator; import java.util.List; @@ -34,4 +38,54 @@ public class AddressServiceImpl extends ServiceImpl impl return this.baseMapper.queryListByParentIds(list); } + @Override + public List
buildTree(List
list, String parentId){ + List
addrList = new ArrayList(); + for (Iterator
iterator = list.iterator(); iterator.hasNext(); ) { + Address t = iterator.next(); + if (StrUtil.equals(t.getParentId(), parentId)) { + recursion(list, t); + addrList.add(t); + } + } + return addrList; + } + + /** 递归列表 */ + private void recursion(List
list, Address addr) { + // 得到子节点列表 + List
childList = getChildList(list, addr); + addr.setChildren(childList); + for (Address tChild : childList) { + if (hasChild(list, tChild)) { + // 判断是否有子节点 + Iterator
it = childList.iterator(); + while (it.hasNext()) { + Address n = (Address) it.next(); + recursion(list, n); + } + } + } + } + + /** 得到子节点列表 */ + private List
getChildList(List
list, Address addr) { + List
addrList = new ArrayList() ; + Iterator
it = list.iterator(); + while (it.hasNext()) { + Address n = it.next(); + if (StrUtil.equals(n.getParentId(), addr.getId())) { + addrList.add(n); + } + } + return addrList; + } + + /** 判断是否有子节点 */ + private boolean hasChild(List
list, Address t) { + return getChildList(list, t).size() > 0 ? true : false; + } + + + } \ No newline at end of file diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/resources/mapper/Address.xml b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/resources/mapper/Address.xml index 1aa3adcf..f9782f3c 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/resources/mapper/Address.xml +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/resources/mapper/Address.xml @@ -3,10 +3,11 @@ - + - - + + + @@ -21,19 +22,19 @@ + + + + + + + + + + + + + + + + + +