From 82e5fd5d8ae868e7333790965568d37c95de49e8 Mon Sep 17 00:00:00 2001 From: guo Date: Tue, 9 Apr 2024 10:45:15 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=BB=84=E7=BB=87=E6=9C=BA?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/basicdata/entity/SystemUser.java | 3 + .../xz/controller/XzProjectOrgController.java | 197 +++++++++--------- .../xmgl/modules/xz/entity/XzProjectOrg.java | 20 +- .../modules/xz/mapper/XzProjectOrgMapper.java | 1 + .../xz/mapper/xml/XzProjectOrgMapper.xml | 5 + .../xz/service/IXzProjectOrgService.java | 2 + .../service/impl/XzProjectOrgServiceImpl.java | 95 +++++++-- 7 files changed, 203 insertions(+), 120 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/SystemUser.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/SystemUser.java index 9e00e9e77..6f1b87a09 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/SystemUser.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/SystemUser.java @@ -132,6 +132,9 @@ public class SystemUser implements Serializable { @ApiModelProperty(value = "新用户和供应商的总公司sn") private String headquartersSn; + @ApiModelProperty(value = "星纵-项目组织机构id") + private Long xzProjectOrgId; + @TableField(exist = false) @ApiModelProperty(value = "角色ID") private java.lang.Long roleId; diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzProjectOrgController.java b/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzProjectOrgController.java index 2e675bc33..53bee57b4 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzProjectOrgController.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzProjectOrgController.java @@ -1,27 +1,22 @@ package com.zhgd.xmgl.modules.xz.controller; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiImplicitParams; - -import java.util.HashMap; - -import springfox.documentation.annotations.ApiIgnore; - -import java.util.List; - +import com.baomidou.mybatisplus.core.metadata.IPage; import com.zhgd.jeecg.common.api.vo.Result; -import org.apache.commons.collections.MapUtils; import com.zhgd.xmgl.modules.xz.entity.XzProjectOrg; import com.zhgd.xmgl.modules.xz.service.IXzProjectOrgService; - -import org.simpleframework.xml.core.Validate; -import com.baomidou.mybatisplus.core.metadata.IPage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; - +import org.apache.commons.collections.MapUtils; +import org.simpleframework.xml.core.Validate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; + +import java.util.HashMap; +import java.util.List; /** @@ -36,93 +31,99 @@ import org.springframework.web.bind.annotation.*; @Slf4j @Api(tags = "星纵-项目组织机构相关Api") public class XzProjectOrgController { - @Autowired - private IXzProjectOrgService xzProjectOrgService; + @Autowired + private IXzProjectOrgService xzProjectOrgService; - /** - * 分页列表查询 - * - * @return - */ - @ApiOperation(value = "分页列表查询星纵-项目组织机构信息", notes = "分页列表查询星纵-项目组织机构信息", httpMethod = "GET") - @ApiImplicitParams({ - @ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "query", required = true, dataType = "Integer"), - @ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "query", required = true, dataType = "Integer"), - }) - @GetMapping(value = "/page") - public Result> queryPageList(@ApiIgnore @RequestParam HashMap paramMap) { - return Result.success(xzProjectOrgService.queryPageList(paramMap)); - } + /** + * 分页列表查询 + * + * @return + */ + @ApiOperation(value = "分页列表查询星纵-项目组织机构信息", notes = "分页列表查询星纵-项目组织机构信息", httpMethod = "GET") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "query", required = true, dataType = "Integer"), + @ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "query", required = true, dataType = "Integer"), + }) + @GetMapping(value = "/page") + public Result> queryPageList(@ApiIgnore @RequestParam HashMap paramMap) { + return Result.success(xzProjectOrgService.queryPageList(paramMap)); + } - /** - * 列表查询 - * - * @return - */ - @ApiOperation(value = "列表查询星纵-项目组织机构信息", notes = "列表查询星纵-项目组织机构信息", httpMethod = "GET") - @GetMapping(value = "/list") - public Result> queryList(@ApiIgnore @RequestParam HashMap paramMap) { - return Result.success(xzProjectOrgService.queryList(paramMap)); - } + /** + * 列表查询 + * + * @return + */ + @ApiOperation(value = "列表查询星纵-项目组织机构信息", notes = "列表查询星纵-项目组织机构信息", httpMethod = "GET") + @GetMapping(value = "/list") + public Result> queryList(@ApiIgnore @RequestParam HashMap paramMap) { + return Result.success(xzProjectOrgService.queryList(paramMap)); + } - /** - * 添加 - * - * @param xzProjectOrg - * @return - */ - @ApiOperation(value = "添加星纵-项目组织机构信息", notes = "添加星纵-项目组织机构信息", httpMethod = "POST") - @PostMapping(value = "/add") - public Result add(@RequestBody @Validate XzProjectOrg xzProjectOrg) { - xzProjectOrgService.add(xzProjectOrg); - return Result.ok(); - } + @ApiOperation(value = "树形列表查询星纵-项目组织机构信息", notes = "树形列表查询星纵-项目组织机构信息", httpMethod = "GET") + @GetMapping(value = "tree/list") + public Result> treeList(@ApiIgnore @RequestParam HashMap paramMap) { + return Result.success(xzProjectOrgService.treeList(paramMap)); + } - /** - * 编辑 - * - * @param xzProjectOrg - * @return - */ - @ApiOperation(value = "编辑星纵-项目组织机构信息", notes = "编辑星纵-项目组织机构信息", httpMethod = "POST") - @PostMapping(value = "/edit") - public Result edit(@RequestBody XzProjectOrg xzProjectOrg) { - xzProjectOrgService.edit(xzProjectOrg); - return Result.ok(); - } + /** + * 添加 + * + * @param xzProjectOrg + * @return + */ + @ApiOperation(value = "添加星纵-项目组织机构信息", notes = "添加星纵-项目组织机构信息", httpMethod = "POST") + @PostMapping(value = "/add") + public Result add(@RequestBody @Validate XzProjectOrg xzProjectOrg) { + xzProjectOrgService.add(xzProjectOrg); + return Result.ok(); + } - /** - * 通过id删除 - * - * @return - */ - @ApiOperation(value = "删除星纵-项目组织机构信息", notes = "删除星纵-项目组织机构信息", httpMethod = "POST") - @ApiImplicitParam(name = "id", value = "星纵-项目组织机构ID", paramType = "body", required = true, dataType = "String", example = "{\"id\":\"1\"}") - @PostMapping(value = "/delete") - public Result delete(@ApiIgnore @RequestBody HashMap map) { - xzProjectOrgService.delete(MapUtils.getString(map, "id")); - return Result.ok(); - } + /** + * 编辑 + * + * @param xzProjectOrg + * @return + */ + @ApiOperation(value = "编辑星纵-项目组织机构信息", notes = "编辑星纵-项目组织机构信息", httpMethod = "POST") + @PostMapping(value = "/edit") + public Result edit(@RequestBody XzProjectOrg xzProjectOrg) { + xzProjectOrgService.edit(xzProjectOrg); + return Result.ok(); + } - /** - * 通过id查询 - * - * @param id - * @return - */ - @ApiOperation(value = "通过id查询星纵-项目组织机构信息", notes = "通过id查询星纵-项目组织机构信息", httpMethod = "GET") - @ApiImplicitParam(name = "id", value = "星纵-项目组织机构ID", paramType = "query", required = true, dataType = "Integer") - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name = "id", required = true) String id) { - Result result = new Result(); - XzProjectOrg xzProjectOrg = xzProjectOrgService.getById(id); - if (xzProjectOrg == null) { - result.error500("未找到对应实体"); - } else { - result.setResult(xzProjectOrg); - result.setSuccess(true); - } - return result; - } + /** + * 通过id删除 + * + * @return + */ + @ApiOperation(value = "删除星纵-项目组织机构信息", notes = "删除星纵-项目组织机构信息", httpMethod = "POST") + @ApiImplicitParam(name = "id", value = "星纵-项目组织机构ID", paramType = "body", required = true, dataType = "String", example = "{\"id\":\"1\"}") + @PostMapping(value = "/delete") + public Result delete(@ApiIgnore @RequestBody HashMap map) { + xzProjectOrgService.delete(MapUtils.getString(map, "id")); + return Result.ok(); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @ApiOperation(value = "通过id查询星纵-项目组织机构信息", notes = "通过id查询星纵-项目组织机构信息", httpMethod = "GET") + @ApiImplicitParam(name = "id", value = "星纵-项目组织机构ID", paramType = "query", required = true, dataType = "Integer") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + XzProjectOrg xzProjectOrg = xzProjectOrgService.getById(id); + if (xzProjectOrg == null) { + result.error500("未找到对应实体"); + } else { + result.setResult(xzProjectOrg); + result.setSuccess(true); + } + return result; + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/entity/XzProjectOrg.java b/src/main/java/com/zhgd/xmgl/modules/xz/entity/XzProjectOrg.java index c0816cd7c..e42f12ad3 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/entity/XzProjectOrg.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/entity/XzProjectOrg.java @@ -1,17 +1,18 @@ package com.zhgd.xmgl.modules.xz.entity; -import java.io.Serializable; -import java.util.Date; - import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.List; /** * @Description: 星纵-项目组织机构 @@ -78,7 +79,7 @@ public class XzProjectOrg implements Serializable { */ @Excel(name = "部门状态(0正常 1停用)", width = 15) @ApiModelProperty(value = "部门状态(0正常 1停用)") - private java.lang.String status; + private java.lang.Integer status; /** * 创建时间 yyyy-MM-dd HH:mm:ss */ @@ -95,4 +96,9 @@ public class XzProjectOrg implements Serializable { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "更新时间 yyyy-MM-dd HH:mm:ss") private java.util.Date updateTime; + private String projectSn; + + @TableField(exist = false) + private List children; + } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/mapper/XzProjectOrgMapper.java b/src/main/java/com/zhgd/xmgl/modules/xz/mapper/XzProjectOrgMapper.java index 6955766a6..23c75475c 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/mapper/XzProjectOrgMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/mapper/XzProjectOrgMapper.java @@ -13,4 +13,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; @Mapper public interface XzProjectOrgMapper extends BaseMapper { + void deleteChildren(String id); } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/mapper/xml/XzProjectOrgMapper.xml b/src/main/java/com/zhgd/xmgl/modules/xz/mapper/xml/XzProjectOrgMapper.xml index f5ab8f0b4..b3ca3fc8d 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/mapper/xml/XzProjectOrgMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/xz/mapper/xml/XzProjectOrgMapper.xml @@ -1,4 +1,9 @@ + + delete + from xz_project_org + where find_in_set(#{id}, ancestors) + diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/service/IXzProjectOrgService.java b/src/main/java/com/zhgd/xmgl/modules/xz/service/IXzProjectOrgService.java index d45567f1a..5074af3d0 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/service/IXzProjectOrgService.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/service/IXzProjectOrgService.java @@ -24,4 +24,6 @@ public interface IXzProjectOrgService extends IService { void edit(XzProjectOrg xzProjectOrg); void delete(String id); + + List treeList(HashMap paramMap); } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzProjectOrgServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzProjectOrgServiceImpl.java index 3b63c5da5..5796922ea 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzProjectOrgServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzProjectOrgServiceImpl.java @@ -1,24 +1,30 @@ package com.zhgd.xmgl.modules.xz.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.zhgd.jeecg.common.execption.OpenAlertException; -import com.zhgd.xmgl.modules.xz.entity.XzProjectOrg; -import com.zhgd.xmgl.modules.xz.mapper.XzProjectOrgMapper; -import com.zhgd.xmgl.modules.xz.service.IXzProjectOrgService; -import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.zhgd.jeecg.common.system.query.QueryGenerator; -import com.zhgd.xmgl.util.PageUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zhgd.jeecg.common.execption.OpenAlertException; +import com.zhgd.jeecg.common.system.query.QueryGenerator; +import com.zhgd.xmgl.modules.stuff.entity.StuffType; +import com.zhgd.xmgl.modules.xz.entity.XzProjectOrg; +import com.zhgd.xmgl.modules.xz.mapper.XzProjectOrgMapper; +import com.zhgd.xmgl.modules.xz.service.IXzProjectOrgService; +import com.zhgd.xmgl.util.PageUtil; +import com.zhgd.xmgl.util.RefUtil; +import org.apache.commons.collections.MapUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.sql.Struct; import java.util.HashMap; import java.util.List; - -import com.zhgd.xmgl.util.RefUtil; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.beans.factory.annotation.Autowired; +import java.util.Objects; +import java.util.stream.Collectors; /** * @Description: 星纵-项目组织机构 @@ -61,16 +67,33 @@ public class XzProjectOrgServiceImpl extends ServiceImpl() - .eq(XzProjectOrg::getId, xzProjectOrg.getParentId())); - if (pOrg != null) { - xzProjectOrg.setAncestors(pOrg.getAncestors() + "," + pOrg.getId()); + boolean top = xzProjectOrg.getParentId() == null || xzProjectOrg.getParentId() == 0; + if (top) { + xzProjectOrg.setParentId(0L); + xzProjectOrg.setAncestors("0"); + } else { + XzProjectOrg pOrg = xzProjectOrgMapper.selectOne(new LambdaQueryWrapper() + .eq(XzProjectOrg::getId, xzProjectOrg.getParentId())); + if (Objects.equals(pOrg.getStatus(), 1)) { + throw new OpenAlertException("部门状态为停用,无法添加下级"); + } + if (pOrg != null) { + xzProjectOrg.setAncestors(pOrg.getAncestors() + "," + pOrg.getId()); + } } baseMapper.insert(xzProjectOrg); } @Override public void edit(XzProjectOrg xzProjectOrg) { + List cOrgs = xzProjectOrgMapper.selectList(new LambdaQueryWrapper() + .eq(XzProjectOrg::getParentId, xzProjectOrg.getId()) + .eq(XzProjectOrg::getStatus, 0) + ); + if (CollUtil.isNotEmpty(cOrgs)) { + throw new OpenAlertException("该部门有下级部门未停用,不能停用"); + } + xzProjectOrg.setAncestors(null); baseMapper.updateById(xzProjectOrg); } @@ -80,8 +103,50 @@ public class XzProjectOrgServiceImpl extends ServiceImpl xzProjectOrgs = xzProjectOrgMapper.selectList(new LambdaQueryWrapper() + .eq(XzProjectOrg::getParentId, id)); + if (CollUtil.isNotEmpty(xzProjectOrgs)) { + throw new OpenAlertException("该部门有下级部门,无法删除"); + } baseMapper.deleteById(id); } + @Override + public List treeList(HashMap paramMap) { + Integer status = MapUtils.getInteger(paramMap, "status"); + String deptName = MapUtils.getString(paramMap, "deptName"); + String projectSn = MapUtils.getString(paramMap, "projectSn"); + if (StrUtil.isBlank(projectSn)) { + throw new OpenAlertException("projectSn不能为空"); + } + List allList = queryList(paramMap); + List treeList = null; + if (status != null || StrUtil.isNotBlank(deptName)) { + //有查询条件,不组装tree + treeList = allList; + } else { + //组装tree + //获取父节点 + treeList = allList.stream() + .filter(m -> m.getParentId() == 0) + .peek(m -> m.setChildren(getChildren(m, allList)))//peek:执行类似map,但操作之后的数据并不返回到Stream中 + .collect(Collectors.toList()); + } + return treeList; + } + + private List getChildren(XzProjectOrg st, List allList) { + List list = allList.stream() + .filter(m -> Objects.equals(m.getParentId(), st.getId())) + .peek(m -> m.setChildren(getChildren(m, allList))) + .collect(Collectors.toList()); + list.sort((o1, o2) -> { + if (o1.getOrderNum() == null || o2.getOrderNum() == null) { + return 0; + } + return o1.getOrderNum().compareTo(o2.getOrderNum()); + }); + return list; + } }