From 513437f432c227191f7a05d41d9127f080f4659b Mon Sep 17 00:00:00 2001 From: zf <1603559716@qq.com> Date: 星期二, 12 九月 2023 17:22:30 +0800 Subject: [PATCH] Merge branch 'master' of https://sinanoaq.cn:8888/r/swspkmas into zf1 --- ruoyi-system/src/main/java/com/ruoyi/system/service/SysOperateTypeService.java | 99 +++++ ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java | 5 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperateTypeServiceImpl.java | 381 ++++++++++++++++++++++ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java | 4 ruoyi-common/src/main/java/com/ruoyi/common/enums/coalmineEnums/EnableStatusEnum.java | 32 + ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java | 4 ruoyi-system/src/main/java/com/ruoyi/system/domain/req/OperateTypeEditReqDTO.java | 29 + ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOperateTypeController.java | 132 +++++++ ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOperateTypeWholeNameBO.java | 22 + ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDistrictController.java | 9 ruoyi-system/src/main/java/com/ruoyi/system/domain/req/OperateTypeListReqDTO.java | 16 ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java | 1 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java | 22 + ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperateTypeMapper.java | 27 + ruoyi-system/src/main/resources/mapper/system/SysOperateTypeMapper.xml | 65 +++ ruoyi-common/src/main/java/com/ruoyi/common/enums/coalmineEnums/DeleteStatusEnum.java | 32 + ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperateType.java | 55 +++ ruoyi-system/src/main/java/com/ruoyi/system/domain/req/OperateTypeAddReqDTO.java | 26 + 18 files changed, 957 insertions(+), 4 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java index 1431bc3..30f4f9c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java @@ -1,5 +1,6 @@ package com.ruoyi; +import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDistrictController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDistrictController.java index f2c2312..876cf76 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDistrictController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDistrictController.java @@ -8,6 +8,10 @@ import com.ruoyi.system.domain.SysDistrict; import com.ruoyi.system.domain.resp.DistrictTreeRespDTO; import com.ruoyi.system.service.SysDistrictService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.io.Serializable; @@ -19,8 +23,9 @@ * @author hz * @since 2023-09-07 13:13:47 */ +@Api(tags = "获取区划信息接口") @RestController -@RequestMapping("/system/sysDistrict/") +@RequestMapping("/system/district/") public class SysDistrictController { /** * 获取所有 @@ -29,6 +34,7 @@ private SysDistrictService sysDistrictService; @GetMapping("/list") + @ApiOperation(value = "区划信息", notes = "获取所有", httpMethod = "GET") public AjaxResult selectAll() { List<SysDistrict> sysDistricts = sysDistrictService.selectAll(); return AjaxResult.success(sysDistricts); @@ -38,6 +44,7 @@ * 树状返回 * */ + @ApiOperation(value = "区划信息", notes = "获取树形", httpMethod = "GET") @GetMapping("/tree") public AjaxResult selectAllByTree() { List<DistrictTreeRespDTO> sysDistricts = sysDistrictService.selectAllByTree(); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOperateTypeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOperateTypeController.java new file mode 100644 index 0000000..afc0c4f --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOperateTypeController.java @@ -0,0 +1,132 @@ +package com.ruoyi.web.controller.system; + + + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.SysOperateType; +import com.ruoyi.system.domain.req.OperateTypeEditReqDTO; +import com.ruoyi.system.domain.req.OperateTypeListReqDTO; +import com.ruoyi.system.domain.req.OperateTypeAddReqDTO; +import com.ruoyi.system.service.SysOperateTypeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +import static com.ruoyi.common.core.domain.AjaxResult.error; +import static com.ruoyi.common.core.domain.AjaxResult.success; + +/** + * @author hz + * @since 2023-09-07 17:10:06 + */ +@Api(tags = "获取作业类型与操作管理接口") +@RestController +@RequestMapping("/system/operateType") +public class SysOperateTypeController extends BaseController { + /** + * 服务对象 + */ + @Resource + private SysOperateTypeService sysOperateTypeService; + + /** + * 获取作业类型列表 + */ + @ApiOperation(value = "获取作业类型列表",httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "name", dataTypeClass = String.class,value = "作业类型名称"), + }) + @PostMapping("/list") + public AjaxResult list(@RequestBody OperateTypeListReqDTO reqDTO) { + List<SysOperateType> operateTypes = sysOperateTypeService.selectOperateTypeList(reqDTO); + return success(operateTypes); + } + + /** + * 根据作业类型编号获取详细信息 + */ + @ApiOperation(value = "获取操作类型信息",httpMethod = "GET") + @ApiImplicitParam(name = "operateTypeId",dataTypeClass = Long.class,value = "操作类型id",required = true) + @GetMapping(value = "/getInfoById/{id}") + public AjaxResult getInfo(@PathVariable Long id) + { + return success(sysOperateTypeService.selectOperateTypeById(id)); + } + + /** + * 新增作业类型 + */ + @PostMapping("/add") + @Log(title = "作业类型管理", businessType = BusinessType.INSERT) + @ApiOperation(value = "新增作业类型",httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "parentId",dataTypeClass = Long.class, value = "父作业类型id",required = true), + @ApiImplicitParam(name = "code", dataTypeClass = String.class,value = "作业类型代码",required = true), + @ApiImplicitParam(name = "name", dataTypeClass = String.class,value = "作业类型名称",required = true), + }) + public AjaxResult add(@Validated @RequestBody OperateTypeAddReqDTO type) { + if (!sysOperateTypeService.checkOperateTypeNameUnique(type.getName(),type.getParentId())) { + return error("新增作业类型'" + type.getName() + "'失败,作业类型名称已存在"); + } + return toAjax(sysOperateTypeService.insertOperateType(type)); + } + + /** + * 修改作业类型 + */ + @Log(title = "作业类型管理", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + @ApiOperation(value = "修改作业类型",httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", dataTypeClass = Long.class,value = "作业类型id",required = true), + @ApiImplicitParam(name = "parentId", dataTypeClass = Long.class,value = "父作业类型id",required = true), + @ApiImplicitParam(name = "code", dataTypeClass = String.class,value = "作业类型代码",required = true), + @ApiImplicitParam(name = "name", dataTypeClass = String.class,value = "作业类型名称",required = true), + }) + public AjaxResult edit(@Validated @RequestBody OperateTypeEditReqDTO reqDTO) + { + Long id = reqDTO.getId(); + if (!sysOperateTypeService.checkOperateTypeNameUnique(reqDTO.getName(),reqDTO.getParentId())) + { + return error("修改作业类型'" + reqDTO.getName() + "'失败,作业类型名称已存在"); + } + else if (reqDTO.getParentId().equals(id)) + { + return error("修改作业类型'" + reqDTO.getName() + "'失败,上级作业类型不能是自己"); + } + return toAjax(sysOperateTypeService.updateOperateType(reqDTO)); + } + + /** + * 删除作业类型 + */ + @Log(title = "作业类型管理", businessType = BusinessType.DELETE) + @GetMapping("/removeById/{id}") + @ApiOperation(value = "删除操作类型信息",httpMethod = "GET") + @ApiImplicitParam(name = "id",dataTypeClass = Long.class,value = "操作类型id",required = true) + public AjaxResult remove(@PathVariable Long id) + { + if (sysOperateTypeService.hasChildByOperateTypeId(id)) + { + return warn("存在下级作业类型,不允许删除"); + } + // TODO (HZ,2023/9/11 9:31,后面完善 由于不知道和哪些表关联) + //if (sysOperateTypeService.checkDeptExistUser(deptId)) + //{ + // return warn("作业类型存在用户,不允许删除"); + //} + return toAjax(sysOperateTypeService.deleteOperateTypeById(id)); + } +} + diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java index 7c06bcf..05bd4cc 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java @@ -30,8 +30,12 @@ public static final String SYS_DISTRICT_LIST_KEY = "sys_district_list"; + public static final String SYS_DISTRICT_TREE_KEY = "sys_district_tree"; + + public static final String SYS_OPERATE_TYPE_NAME_KEY = "sys_operate_type_name"; + /** * 防重提交 redis key */ diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java index 53ad695..db31b62 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java @@ -29,6 +29,10 @@ @Excel(name = "部门编号", type = Type.IMPORT) private Long deptId; + private Long districtId; + + private String unit; + /** 用户账号 */ @Excel(name = "登录名称") private String userName; @@ -297,11 +301,29 @@ this.roleId = roleId; } + public Long getDistrictId() { + return districtId; + } + + public void setDistrictId(Long districtId) { + this.districtId = districtId; + } + + public String getUnit() { + return unit; + } + + public void setUnit(String unit) { + this.unit = unit; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) .append("userId", getUserId()) .append("deptId", getDeptId()) + .append("unit", getUnit()) + .append("districtId", getDistrictId()) .append("userName", getUserName()) .append("nickName", getNickName()) .append("email", getEmail()) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/coalmineEnums/DeleteStatusEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/coalmineEnums/DeleteStatusEnum.java new file mode 100644 index 0000000..c4ec7f3 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/coalmineEnums/DeleteStatusEnum.java @@ -0,0 +1,32 @@ +package com.ruoyi.common.enums.coalmineEnums; + +public enum DeleteStatusEnum { + + NO((byte)0,"有效"), + YES((byte)2,"删除"), + ; + + private Byte status; + private String desc; + + DeleteStatusEnum(Byte status, String desc) { + this.status = status; + this.desc = desc; + } + + public Byte getStatus() { + return status; + } + + public void setStatus(Byte status) { + this.status = status; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/coalmineEnums/EnableStatusEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/coalmineEnums/EnableStatusEnum.java new file mode 100644 index 0000000..7ab58f9 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/coalmineEnums/EnableStatusEnum.java @@ -0,0 +1,32 @@ +package com.ruoyi.common.enums.coalmineEnums; + +public enum EnableStatusEnum { + + NO((byte)0,"停用"), + YES((byte)1,"启用"), + ; + + private Byte status; + private String desc; + + EnableStatusEnum(Byte status, String desc) { + this.status = status; + this.desc = desc; + } + + public Byte getStatus() { + return status; + } + + public void setStatus(Byte status) { + this.status = status; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java index 1d6d9e5..59347bd 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java @@ -157,9 +157,10 @@ @ExceptionHandler(MethodArgumentNotValidException.class) public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { - log.error(e.getMessage(), e); + //log.error(e.getMessage(), e); + log.error(e.getBindingResult().getFieldError()+""); String message = e.getBindingResult().getFieldError().getDefaultMessage(); - return AjaxResult.error(message); + return AjaxResult.error(ResultConstants.PARAM_ERROR.getCode(),message); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperateType.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperateType.java new file mode 100644 index 0000000..2e5e5dc --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperateType.java @@ -0,0 +1,55 @@ +package com.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.data.annotation.Id; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * @author hz + * @since 2023-09-07 17:10:09 + */ +@Data +public class SysOperateType implements Serializable { + + @Id + @TableId(type = IdType.AUTO) + private Long id; + + private Long parentId; + /** 祖级列表 */ + private String ancestors; + + private String code; + + private String name; + + private Integer type; + + /** 删除标志(0代表存在 2代表删除) */ + private Byte delFlag; + + /** 创建者 */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** 更新者 */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** 更新时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOperateTypeWholeNameBO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOperateTypeWholeNameBO.java new file mode 100644 index 0000000..de03a95 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOperateTypeWholeNameBO.java @@ -0,0 +1,22 @@ +package com.ruoyi.system.domain.bo; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author Mr.huang + * @decription + * @date 2023/9/11 17:14 + */ +@Data +public class SysOperateTypeWholeNameBO implements Serializable { + + private Integer type; + + private String qualificationType; + + private String jobCategory; + + private String operationItems; +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/req/OperateTypeAddReqDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/req/OperateTypeAddReqDTO.java new file mode 100644 index 0000000..602c1fb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/req/OperateTypeAddReqDTO.java @@ -0,0 +1,26 @@ +package com.ruoyi.system.domain.req; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * @author Mr.huang + * @decription + * @date 2023/9/8 10:49 + */ +@Data +public class OperateTypeAddReqDTO implements Serializable { + + @NotNull(message = "父id不能为空") + private Long parentId; + + @NotBlank(message = "code不能为空") + private String code; + + @NotBlank(message = "name不能为空") + private String name; + +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/req/OperateTypeEditReqDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/req/OperateTypeEditReqDTO.java new file mode 100644 index 0000000..cb3b285 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/req/OperateTypeEditReqDTO.java @@ -0,0 +1,29 @@ +package com.ruoyi.system.domain.req; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * @author Mr.huang + * @decription + * @date 2023/9/8 10:49 + */ +@Data +public class OperateTypeEditReqDTO implements Serializable { + + @NotNull(message = "id不能为空") + private Long id; + + @NotNull(message = "父id不能为空") + private Long parentId; + + @NotBlank(message = "code不能为空") + private String code; + + @NotBlank(message = "name不能为空") + private String name; + +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/req/OperateTypeListReqDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/req/OperateTypeListReqDTO.java new file mode 100644 index 0000000..fe5197e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/req/OperateTypeListReqDTO.java @@ -0,0 +1,16 @@ +package com.ruoyi.system.domain.req; + +import cn.hutool.bloomfilter.filter.SDBMFilter; +import lombok.Data; + +/** + * @author Mr.huang + * @decription + * @date 2023/9/8 10:07 + */ +@Data +public class OperateTypeListReqDTO{ + + private String name; + +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperateTypeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperateTypeMapper.java new file mode 100644 index 0000000..4b5f4fe --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperateTypeMapper.java @@ -0,0 +1,27 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.core.domain.entity.SysDept; +import com.ruoyi.system.domain.SysOperateType; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * @author hz + * @since 2023-09-07 17:10:08 + */ +@Mapper +public interface SysOperateTypeMapper extends BaseMapper<SysOperateType> { + + SysOperateType selectOperateTypeById(Long id); + + List<SysOperateType> selectChildrenOperateTypeById(Long id); + + void updateOperateTypeChildren(List<SysOperateType> sysOperateTypes); + + int hasChildByOperateTypeId(Long id); + + List<SysOperateType> selectOperateTypeByIds(List<Long> list); +} + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysOperateTypeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysOperateTypeService.java new file mode 100644 index 0000000..44ae4e8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysOperateTypeService.java @@ -0,0 +1,99 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.system.domain.SysOperateType; +import com.ruoyi.system.domain.bo.SysOperateTypeWholeNameBO; +import com.ruoyi.system.domain.req.OperateTypeEditReqDTO; +import com.ruoyi.system.domain.req.OperateTypeListReqDTO; +import com.ruoyi.system.domain.req.OperateTypeAddReqDTO; + +import java.util.List; + +/** + * @author hz + * @since 2023-09-07 17:10:09 + */ +public interface SysOperateTypeService extends IService<SysOperateType> { + + /** + * 查询作业类型管理数据 + */ + public List<SysOperateType> selectOperateTypeList(OperateTypeListReqDTO reqDTO); + + ///** + // * 查询作业类型树结构信息 + // */ + //public List<TreeSelect> selectDeptTreeList(SysDept dept); + // + ///** + // * 构建前端所需要树结构 + // */ + //public List<SysDept> buildDeptTree(List<SysDept> depts); + // + ///** + // * 构建前端所需要下拉树结构 + // */ + //public List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts); + + /** + * 根据作业类型ID查询信息 + */ + public SysOperateType selectOperateTypeById(Long deptId); + + ///** + // * 根据ID查询所有子作业类型(正常状态) + // */ + //public int selectNormalChildrenDeptById(Long deptId); + + /** + * 是否存在作业类型子节点 + */ + public boolean hasChildByOperateTypeId(Long id); + // + ///** + // * 查询作业类型是否存在用户 + // */ + //public boolean checkDeptExistUser(Long deptId); + + /** + * 校验作业类型名称是否唯一 + */ + public boolean checkOperateTypeNameUnique(String name,Long parentId); + + /** + * 新增保存作业类型信息 + */ + public int insertOperateType(OperateTypeAddReqDTO type); + + /** + * 修改保存作业类型信息 + */ + public int updateOperateType(OperateTypeEditReqDTO reqDTO); + + /** + * 删除作业类型管理信息 + */ + public int deleteOperateTypeById(Long id); + + /** + * 根据id获取作业类型完整姓名 + */ + public SysOperateTypeWholeNameBO getOperateTypeWholeNameById(Long id); + + /** + * 加载字典缓存数据 + */ + public void loadingOperateTypeCache(); + + /** + * 清空字典缓存数据 + */ + public void clearOperateTypeCache(); + + /** + * 重置字典缓存数据 + */ + public void resetOperateTypeCache(); + +} + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java index f7fb088..65a88a9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java @@ -45,7 +45,9 @@ @DataScope(deptAlias = "d") public List<SysDept> selectDeptList(SysDept dept) { - return deptMapper.selectDeptList(dept); + List<SysDept> sysDepts = deptMapper.selectDeptList(dept); + return sysDepts; + //return deptMapper.selectDeptList(dept); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperateTypeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperateTypeServiceImpl.java new file mode 100644 index 0000000..d1de2a7 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperateTypeServiceImpl.java @@ -0,0 +1,381 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.constant.ResultConstants; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum; +import com.ruoyi.common.exception.BusinessException; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.system.domain.SysOperateType; +import com.ruoyi.system.domain.bo.SysOperateTypeWholeNameBO; +import com.ruoyi.system.domain.req.OperateTypeEditReqDTO; +import com.ruoyi.system.domain.req.OperateTypeListReqDTO; +import com.ruoyi.system.domain.req.OperateTypeAddReqDTO; +import com.ruoyi.system.mapper.SysOperateTypeMapper; +import com.ruoyi.system.mapper.SysRoleMapper; +import com.ruoyi.system.service.SysOperateTypeService; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author hz + * @since 2023-09-07 17:10:10 + */ +@Service("sysOperateTypeService") +public class SysOperateTypeServiceImpl extends ServiceImpl<SysOperateTypeMapper, SysOperateType> implements SysOperateTypeService { + + @Autowired + private SysOperateTypeMapper operateTypeMapper; + + @Autowired + private SysRoleMapper roleMapper; + + @PostConstruct + public void init() + { + loadingOperateTypeCache(); + } + + @Override + public void loadingOperateTypeCache() { + LambdaQueryWrapper<SysOperateType> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysOperateType::getDelFlag, DeleteStatusEnum.YES.getStatus()); + List<SysOperateType> sysOperateTypes = operateTypeMapper.selectList(wrapper); + if (!CollectionUtils.isEmpty(sysOperateTypes)){ + Map<Long, SysOperateTypeWholeNameBO> map = new HashMap<>(); + for (SysOperateType sysOperateType : sysOperateTypes) { + SysOperateTypeWholeNameBO nameBO = this.getOperateTypeWholeNameById(sysOperateType.getId()); + map.put(sysOperateType.getId(),nameBO); + } + SpringUtils.getBean(RedisCache.class).setCacheObject(CacheConstants.SYS_OPERATE_TYPE_NAME_KEY, map); + } + } + + @Override + public void clearOperateTypeCache() { + if (SpringUtils.getBean(RedisCache.class).hasKey(CacheConstants.SYS_OPERATE_TYPE_NAME_KEY)){ + SpringUtils.getBean(RedisCache.class).deleteObject(CacheConstants.SYS_OPERATE_TYPE_NAME_KEY); + } + } + + @Override + public void resetOperateTypeCache() { + clearOperateTypeCache(); + loadingOperateTypeCache(); + } + + /** + * 查询作业类型管理数据 + */ + @Override + public List<SysOperateType> selectOperateTypeList(OperateTypeListReqDTO reqDTO) { + LambdaQueryWrapper<SysOperateType> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysOperateType::getDelFlag, DeleteStatusEnum.YES.getStatus()); + if (reqDTO != null && !StringUtils.isBlank(reqDTO.getName())){ + wrapper.eq(SysOperateType::getName,reqDTO.getName()); + } + return operateTypeMapper.selectList(wrapper); + } + + ///** + // * 查询作业类型树结构信息 + // */ + //@Override + //public List<TreeSelect> selectDeptTreeList(SysDept dept) + //{ + // List<SysDept> depts = SpringUtils.getAopProxy(this).selectDeptList(dept); + // return buildDeptTreeSelect(depts); + //} + // + ///** + // * 构建前端所需要树结构 + // */ + //@Override + //public List<SysDept> buildDeptTree(List<SysDept> depts) + //{ + // List<SysDept> returnList = new ArrayList<SysDept>(); + // List<Long> tempList = depts.stream().map(SysDept::getDeptId).collect(Collectors.toList()); + // for (SysDept dept : depts) + // { + // // 如果是顶级节点, 遍历该父节点的所有子节点 + // if (!tempList.contains(dept.getParentId())) + // { + // recursionFn(depts, dept); + // returnList.add(dept); + // } + // } + // if (returnList.isEmpty()) + // { + // returnList = depts; + // } + // return returnList; + //} + // + ///** + // * 构建前端所需要下拉树结构 + // */ + //@Override + //public List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts) + //{ + // List<SysDept> deptTrees = buildDeptTree(depts); + // return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + //} + // + ///** + // * 根据角色ID查询作业类型树信息 + // */ + //@Override + //public List<Long> selectDeptListByRoleId(Long roleId) + //{ + // SysRole role = roleMapper.selectRoleById(roleId); + // return operateTypeMapper.selectDeptListByRoleId(roleId, role.isDeptCheckStrictly()); + //} + // + /** + * 根据作业类型ID查询信息 + */ + @Override + public SysOperateType selectOperateTypeById(Long operateTypeId) { + if (operateTypeId == null) + throw new BusinessException(this.getClass(), ResultConstants.PARAM_ERROR); + return operateTypeMapper.selectOperateTypeById(operateTypeId); + } + // + ///** + // * 根据ID查询所有子作业类型(正常状态) + // */ + //@Override + //public int selectNormalChildrenDeptById(Long deptId) + //{ + // return operateTypeMapper.selectNormalChildrenDeptById(deptId); + //} + // + /** + * 是否存在子节点 + */ + @Override + public boolean hasChildByOperateTypeId(Long id) + { + int result = operateTypeMapper.hasChildByOperateTypeId(id); + return result > 0; + } + // + ///** + // * 查询作业类型是否存在用户 + // */ + //@Override + //public boolean checkDeptExistUser(Long deptId) + //{ + // int result = operateTypeMapper.checkDeptExistUser(deptId); + // return result > 0; + //} + // + /** + * 校验作业类型名称是否唯一 + */ + @Override + public boolean checkOperateTypeNameUnique(String name,Long parentId) { + if (StringUtils.isBlank(name) || StringUtils.isNull(parentId)) + throw new BusinessException(this.getClass(),ResultConstants.PARAM_ERROR); + LambdaQueryWrapper<SysOperateType> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysOperateType::getDelFlag,DeleteStatusEnum.NO.getStatus()) + .eq(SysOperateType::getName,name) + .eq(SysOperateType::getParentId,parentId) + .last(" limit 1"); + SysOperateType sysOperateType = operateTypeMapper.selectOne(wrapper); + if (StringUtils.isNotNull(sysOperateType)) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 新增保存作业类型信息 + */ + @Override + public int insertOperateType(OperateTypeAddReqDTO type) { + SysOperateType operateType = new SysOperateType(); + BeanUtils.copyProperties(type,operateType); + if (type.getParentId() != 0) { + SysOperateType info = operateTypeMapper.selectOperateTypeById(type.getParentId()); + // 如果父节点不为正常状态,则不允许新增子节点 + if (info == null) { + throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL, "作业类型不存在,不允许新增"); + } + operateType.setAncestors(info.getAncestors() + "," + type.getParentId()); + int length = getOperateTypeValue(operateType.getAncestors()).length; + operateType.setType(length); + }else { + operateType.setAncestors("0"); + operateType.setType(1); + } + resetOperateTypeCache(); + return operateTypeMapper.insert(operateType); + } + + private String[] getOperateTypeValue(String ancestors) { + String[] arr = ancestors.split(","); + return arr; + } + + /** + * 修改保存作业类型信息 + */ + @Override + public int updateOperateType(OperateTypeEditReqDTO reqDTO) + { + SysOperateType newParentOperateType = operateTypeMapper.selectOperateTypeById(reqDTO.getParentId()); + SysOperateType oldOperateType = operateTypeMapper.selectOperateTypeById(reqDTO.getId()); + if ((StringUtils.isNotNull(newParentOperateType) || reqDTO.getParentId() == 0) && StringUtils.isNotNull(oldOperateType)) + { + String newAncestors; + if (reqDTO.getParentId() == 0){ + newAncestors = "0"; + }else { + newAncestors = newParentOperateType.getAncestors() + "," + newParentOperateType.getId(); + } + String oldAncestors = oldOperateType.getAncestors(); + BeanUtils.copyProperties(reqDTO,oldOperateType); + oldOperateType.setAncestors(newAncestors); + updateOperateTypeChildren(reqDTO.getId(), newAncestors, oldAncestors); + } + int result = operateTypeMapper.updateById(oldOperateType); + resetOperateTypeCache(); + return result; + } + // + ///** + // * 修改该作业类型的父级作业类型状态 + // * + // * @param dept 当前作业类型 + // */ + //private void updateParentDeptStatusNormal(SysDept dept) + //{ + // String ancestors = dept.getAncestors(); + // Long[] deptIds = Convert.toLongArray(ancestors); + // operateTypeMapper.updateDeptStatusNormal(deptIds); + //} + // + /** + * 修改子元素关系 + */ + public void updateOperateTypeChildren(Long OperateTypeId, String newAncestors, String oldAncestors) + { + List<SysOperateType> children = operateTypeMapper.selectChildrenOperateTypeById(OperateTypeId); + for (SysOperateType child : children) + { + child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors)); + } + if (children.size() > 0) + { + operateTypeMapper.updateOperateTypeChildren(children); + } + } + + /** + * 删除作业类型管理信息 + */ + @Override + public int deleteOperateTypeById(Long id) + { + SysOperateType sysOperateType = operateTypeMapper.selectOperateTypeById(id); + if (sysOperateType == null) + return 1; + sysOperateType.setDelFlag(DeleteStatusEnum.YES.getStatus()); + resetOperateTypeCache(); + return this.operateTypeMapper.updateById(sysOperateType); + } + + @Override + public SysOperateTypeWholeNameBO getOperateTypeWholeNameById(Long id) { + SysOperateType sysOperateType = operateTypeMapper.selectOperateTypeById(id); + if (sysOperateType == null) + return null; + Integer type = sysOperateType.getType(); + SysOperateTypeWholeNameBO bo = new SysOperateTypeWholeNameBO(); + bo.setType(sysOperateType.getType()); + if (type == 1) { + bo.setQualificationType(sysOperateType.getName()); + return bo; + } + String[] value = getOperateTypeValue(sysOperateType.getAncestors()); + List<Long> list = new ArrayList<>(); + for (int i = 0; i < value.length; i++) { + if (i>0){ + list.add(Long.valueOf(value[i])); + } + } + list.add(id); + List<SysOperateType> sysOperateTypes = operateTypeMapper.selectOperateTypeByIds(list); + for (SysOperateType operateType : sysOperateTypes) { + if (operateType.getType() == 1) + bo.setQualificationType(operateType.getName()); + if (operateType.getType() == 2) + bo.setJobCategory(operateType.getName()); + if (operateType.getType() == 3) + bo.setOperationItems(operateType.getName()); + } + return bo; + } + // + ///** + // * 递归列表 + // */ + //private void recursionFn(List<SysDept> list, SysDept t) + //{ + // // 得到子节点列表 + // List<SysDept> childList = getChildList(list, t); + // t.setChildren(childList); + // for (SysDept tChild : childList) + // { + // if (hasChild(list, tChild)) + // { + // recursionFn(list, tChild); + // } + // } + //} + // + ///** + // * 得到子节点列表 + // */ + //private List<SysDept> getChildList(List<SysDept> list, SysDept t) + //{ + // List<SysDept> tlist = new ArrayList<SysDept>(); + // Iterator<SysDept> it = list.iterator(); + // while (it.hasNext()) + // { + // SysDept n = (SysDept) it.next(); + // if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue()) + // { + // tlist.add(n); + // } + // } + // return tlist; + //} + // + ///** + // * 判断是否有子节点 + // */ + //private boolean hasChild(List<SysDept> list, SysDept t) + //{ + // return getChildList(list, t).size() > 0; + //} + +} + diff --git a/ruoyi-system/src/main/resources/mapper/system/SysOperateTypeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysOperateTypeMapper.xml new file mode 100644 index 0000000..379d507 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysOperateTypeMapper.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.system.mapper.SysOperateTypeMapper"> + + <resultMap type="com.ruoyi.system.domain.SysOperateType" id="SysOperateTypeResult"> + <id property="id" column="id" /> + <result property="parentId" column="parent_id" /> + <result property="ancestors" column="ancestors" /> + <result property="code" column="code" /> + <result property="name" column="name" /> + <result property="type" column="type" /> + <result property="delFlag" column="del_flag" /> + <result property="createBy" column="create_by" /> + <result property="createTime" column="create_time" /> + <result property="updateBy" column="update_by" /> + <result property="updateTime" column="update_time" /> + </resultMap> + + <sql id="selectOperateTypeCommon"> + select id, parent_id, ancestors, code, name, type, del_flag, create_by, create_time,update_by,update_time + from sys_operate_type + </sql> + <update id="updateOperateTypeChildren"> + update sys_dept set ancestors = + <foreach collection="sysOperateTypes" item="item" index="index" + separator=" " open="case id" close="end"> + when #{item.id} then #{item.ancestors} + </foreach> + where id in + <foreach collection="sysOperateTypes" item="item" index="index" + separator="," open="(" close=")"> + #{item.id} + </foreach> + </update> + <delete id="deleteOperateTypeById"> + update sys_operate_type set del_flag = '2' where id = #{id} + </delete> + + <select id="selectOperateTypeById" resultType="com.ruoyi.system.domain.SysOperateType"> + <include refid="selectOperateTypeCommon"/> + where del_flag = '0' + <if test="id != null"> + AND id = #{id} + </if> + </select> + + <select id="selectChildrenOperateTypeById" resultType="com.ruoyi.system.domain.SysOperateType"> + select * from sys_operate_type where find_in_set(#{id}, ancestors) + </select> + <select id="hasChildByOperateTypeId" resultType="java.lang.Integer"> + select count(1) from sys_operate_type + where del_flag = '0' and parent_id = #{id} limit 1 + </select> + + <select id="selectOperateTypeByIds" resultType="com.ruoyi.system.domain.SysOperateType"> + <include refid="selectOperateTypeCommon"/> + where del_flag = '0' and id in + <foreach collection="list" item="id" index="index" + separator="," open="(" close=")"> + #{id} + </foreach> + </select> +</mapper> \ No newline at end of file -- Gitblit v1.9.2