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