车车 4 месяцев назад
Родитель
Сommit
2937887ad1
26 измененных файлов с 557 добавлено и 26 удалено
  1. 74 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/SopGroupController.java
  2. 8 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/SopPointsController.java
  3. 29 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopGroupPageReqVO.java
  4. 35 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopGroupRespVO.java
  5. 26 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopGroupSaveReqVO.java
  6. 3 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopPageReqVO.java
  7. 6 3
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopPointsPageReqVO.java
  8. 7 4
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopPointsRespVO.java
  9. 5 3
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopPointsSaveReqVO.java
  10. 20 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopPointsUpdateGroupVO.java
  11. 3 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopRespVO.java
  12. 3 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopSaveReqVO.java
  13. 6 3
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopUserPageReqVO.java
  14. 7 4
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopUserRespVO.java
  15. 5 3
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopUserSaveReqVO.java
  16. 9 6
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/sop/SopDO.java
  17. 43 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/sop/SopGroupDO.java
  18. 4 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/sop/SopPointsDO.java
  19. 4 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/sop/SopUserDO.java
  20. 51 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/sop/SopGroupMapper.java
  21. 57 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopGroupService.java
  22. 99 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopGroupServiceImpl.java
  23. 3 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopPointsService.java
  24. 19 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopPointsServiceImpl.java
  25. 19 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopServiceImpl.java
  26. 12 0
      yudao-module-iscs/src/main/resources/mapper/SopGroupMapper.xml

+ 74 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/SopGroupController.java

@@ -0,0 +1,74 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.sop;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopGroupPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopGroupRespVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopGroupSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopGroupDO;
+import cn.iocoder.yudao.module.iscs.service.sop.SopGroupService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+
+@Tag(name = "管理后台 - SOP分组")
+@RestController
+@RequestMapping("/iscc/sop-group")
+@Validated
+public class SopGroupController {
+
+    @Resource
+    private SopGroupService sopGroupService;
+
+    @PostMapping("/insertSopGroup")
+    @Operation(summary = "创建SOP分组")
+    @PreAuthorize("@ss.hasPermission('iscc:sop-group:create')")
+    public CommonResult<Long> insertSopGroup(@Valid @RequestBody SopGroupSaveReqVO createReqVO) {
+        return success(sopGroupService.createSopGroup(createReqVO));
+    }
+
+    @PutMapping("/updateSopGroup")
+    @Operation(summary = "更新SOP分组")
+    @PreAuthorize("@ss.hasPermission('iscc:sop-group:update')")
+    public CommonResult<Boolean> updateSopGroup(@Valid @RequestBody SopGroupSaveReqVO updateReqVO) {
+        sopGroupService.updateSopGroup(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/deleteSopGroupList")
+    @Parameter(name = "ids", description = "编号", required = true)
+    @Operation(summary = "批量删除SOP分组")
+                @PreAuthorize("@ss.hasPermission('iscc:sop-group:delete')")
+    public CommonResult<Boolean> deleteSopGroupList(@RequestParam("ids") List<Long> ids) {
+        sopGroupService.deleteSopGroupListByIds(ids);
+        return success(true);
+    }
+
+    @GetMapping("/selectSopGroupById")
+    @Operation(summary = "获得SOP分组")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('iscc:sop-group:query')")
+    public CommonResult<SopGroupRespVO> selectSopGroupById(@RequestParam("id") Long id) {
+        SopGroupDO sopGroup = sopGroupService.getSopGroup(id);
+        return success(BeanUtils.toBean(sopGroup, SopGroupRespVO.class));
+    }
+
+    @GetMapping("/getSopGroupList")
+    @Operation(summary = "获得SOP分组分页")
+    @PreAuthorize("@ss.hasPermission('iscc:sop-group:query')")
+    public CommonResult<List<SopGroupRespVO>> getSopGroupList(@Valid SopGroupPageReqVO pageReqVO) {
+        List<SopGroupRespVO> pageResult = sopGroupService.getSopGroupList(pageReqVO);
+        return success(pageResult);
+    }
+
+}

+ 8 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/SopPointsController.java

@@ -80,4 +80,12 @@ public class SopPointsController {
         return success(list);
     }
 
+    /*@PutMapping("/updateSopPointsGroup")
+    @Operation(summary = "更新SOP隔离点-设置分组信息")
+    @PreAuthorize("@ss.hasPermission('iscs:sop-points:update')")
+    public CommonResult<Boolean> updateSopPointsGroup(@Valid @RequestBody SopPointsUpdateGroupVO vo) {
+        sopPointsService.updateSopPointsGroup(vo);
+        return success(true);
+    }*/
+
 }

+ 29 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopGroupPageReqVO.java

@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.sop.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - SOP分组分页 Request VO")
+@Data
+public class SopGroupPageReqVO extends PageParam {
+
+    @Schema(description = "SOP ID", example = "14720")
+    private Long sopId;
+
+    @Schema(description = "分组名称", example = "张三")
+    private String groupName;
+
+    @Schema(description = "备注", example = "你说的对")
+    private String remark;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 35 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopGroupRespVO.java

@@ -0,0 +1,35 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.sop.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - SOP分组 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class SopGroupRespVO {
+
+    @Schema(description = "分组 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26293")
+    @ExcelProperty("分组 ID")
+    private Long id;
+
+    @Schema(description = "SOP ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14720")
+    @ExcelProperty("SOP ID")
+    private Long sopId;
+
+    @Schema(description = "分组名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
+    @ExcelProperty("分组名称")
+    private String groupName;
+
+    @Schema(description = "备注", example = "你说的对")
+    @ExcelProperty("备注")
+    private String remark;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 26 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopGroupSaveReqVO.java

@@ -0,0 +1,26 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.sop.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Schema(description = "管理后台 - SOP分组新增/修改 Request VO")
+@Data
+public class SopGroupSaveReqVO {
+
+    @Schema(description = "分组 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26293")
+    private Long id;
+
+    @Schema(description = "SOP ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14720")
+    @NotNull(message = "SOP ID不能为空")
+    private Long sopId;
+
+    @Schema(description = "分组名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
+    @NotEmpty(message = "分组名称不能为空")
+    private String groupName;
+
+    @Schema(description = "备注", example = "你说的对")
+    private String remark;
+
+}

+ 3 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopPageReqVO.java

@@ -17,6 +17,9 @@ public class SopPageReqVO extends PageParam {
     @Schema(description = "SOP类型(字典值)", example = "2")
     private String sopType;
 
+    @Schema(description = "工作流模式", example = "2")
+    private Long modeId;
+
     @Schema(description = "所属车间ID", example = "6321")
     private Long workshopId;
 

+ 6 - 3
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopPointsPageReqVO.java

@@ -1,10 +1,10 @@
 package cn.iocoder.yudao.module.iscs.controller.admin.sop.vo;
 
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
+
 import java.time.LocalDateTime;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -16,6 +16,9 @@ public class SopPointsPageReqVO extends PageParam {
     @Schema(description = "SOPID", example = "26968")
     private Long sopId;
 
+    @Schema(description = "groupId", example = "20004")
+    private Long groupId;
+
     @Schema(description = "所属车间ID", example = "10763")
     private Long workshopId;
 

+ 7 - 4
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopPointsRespVO.java

@@ -1,11 +1,11 @@
 package cn.iocoder.yudao.module.iscs.controller.admin.sop.vo;
 
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import org.springframework.format.annotation.DateTimeFormat;
+import lombok.Data;
+
 import java.time.LocalDateTime;
-import com.alibaba.excel.annotation.*;
 
 @Schema(description = "管理后台 - SOP隔离点 Response VO")
 @Data
@@ -20,6 +20,9 @@ public class SopPointsRespVO {
     @ExcelProperty("SOPID")
     private Long sopId;
 
+    @Schema(description = "groupId", example = "20004")
+    private Long groupId;
+
     @Schema(description = "所属车间ID", example = "10763")
     @ExcelProperty("所属车间ID")
     private Long workshopId;

+ 5 - 3
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopPointsSaveReqVO.java

@@ -1,9 +1,8 @@
 package cn.iocoder.yudao.module.iscs.controller.admin.sop.vo;
 
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import jakarta.validation.constraints.*;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
 
 @Schema(description = "管理后台 - SOP隔离点新增/修改 Request VO")
 @Data
@@ -16,6 +15,9 @@ public class SopPointsSaveReqVO {
     @NotNull(message = "SOPID不能为空")
     private Long sopId;
 
+    @Schema(description = "groupId", example = "20004")
+    private Long groupId;
+
     @Schema(description = "所属车间ID", example = "10763")
     private Long workshopId;
 

+ 20 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopPointsUpdateGroupVO.java

@@ -0,0 +1,20 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.sop.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.util.List;
+
+@Schema(description = "管理后台 - SOP隔离点新增/修改 Request VO")
+@Data
+public class SopPointsUpdateGroupVO {
+
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10639")
+    private List<Long> ids;
+
+    @Schema(description = "groupId", example = "20004")
+    @NotNull(message = "分组不能为空")
+    private Long groupId;
+
+}

+ 3 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopRespVO.java

@@ -29,6 +29,9 @@ public class SopRespVO {
     @ExcelProperty("SOP类型(字典值)")
     private String sopType;
 
+    @Schema(description = "工作流模式", example = "2")
+    private Long modeId;
+
     @Schema(description = "所属车间ID", example = "6321")
     @ExcelProperty("所属车间ID")
     private Long workshopId;

+ 3 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopSaveReqVO.java

@@ -22,6 +22,9 @@ public class SopSaveReqVO {
     @Schema(description = "SOP类型(字典值)", example = "2")
     private String sopType;
 
+    @Schema(description = "工作流模式", example = "2")
+    private Long modeId;
+
     @Schema(description = "所属车间ID", example = "6321")
     private Long workshopId;
 

+ 6 - 3
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopUserPageReqVO.java

@@ -1,10 +1,10 @@
 package cn.iocoder.yudao.module.iscs.controller.admin.sop.vo;
 
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
+
 import java.time.LocalDateTime;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -16,6 +16,9 @@ public class SopUserPageReqVO extends PageParam {
     @Schema(description = "sopID", example = "20004")
     private Long sopId;
 
+    @Schema(description = "groupId", example = "20004")
+    private Long groupId;
+
     @Schema(description = "用户ID", example = "6206")
     private Long userId;
 

+ 7 - 4
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopUserRespVO.java

@@ -1,11 +1,11 @@
 package cn.iocoder.yudao.module.iscs.controller.admin.sop.vo;
 
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import org.springframework.format.annotation.DateTimeFormat;
+import lombok.Data;
+
 import java.time.LocalDateTime;
-import com.alibaba.excel.annotation.*;
 
 @Schema(description = "管理后台 - SOP用户 Response VO")
 @Data
@@ -20,6 +20,9 @@ public class SopUserRespVO {
     @ExcelProperty("sopID")
     private Long sopId;
 
+    @Schema(description = "groupId", example = "20004")
+    private Long groupId;
+
     @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6206")
     @ExcelProperty("用户ID")
     private Long userId;

+ 5 - 3
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopUserSaveReqVO.java

@@ -1,9 +1,8 @@
 package cn.iocoder.yudao.module.iscs.controller.admin.sop.vo;
 
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import jakarta.validation.constraints.*;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
 
 @Schema(description = "管理后台 - SOP用户新增/修改 Request VO")
 @Data
@@ -16,6 +15,9 @@ public class SopUserSaveReqVO {
     @NotNull(message = "sopID不能为空")
     private Long sopId;
 
+    @Schema(description = "groupId", example = "20004")
+    private Long groupId;
+
     @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6206")
     @NotNull(message = "用户ID不能为空")
     private Long userId;

+ 9 - 6
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/sop/SopDO.java

@@ -1,11 +1,10 @@
 package cn.iocoder.yudao.module.iscs.dal.dataobject.sop;
 
-import lombok.*;
-import java.util.*;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-import com.baomidou.mybatisplus.annotation.*;
 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
 
 /**
  * SOP信息 DO
@@ -39,6 +38,10 @@ public class SopDO extends BaseDO {
      * SOP类型(字典值)
      */
     private String sopType;
+    /**
+     * 工作流模式ID
+     */
+    private Long modeId;
     /**
      * 所属车间ID
      */
@@ -73,4 +76,4 @@ public class SopDO extends BaseDO {
     private String remark;
 
 
-}
+}

+ 43 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/sop/SopGroupDO.java

@@ -0,0 +1,43 @@
+package cn.iocoder.yudao.module.iscs.dal.dataobject.sop;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * SOP分组 DO
+ *
+ * @author 芋道源码
+ */
+@TableName("isc_sop_group")
+@KeySequence("isc_sop_group_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SopGroupDO extends BaseDO {
+
+    /**
+     * 分组 ID
+     */
+    @TableId
+    private Long id;
+    /**
+     * SOP ID
+     */
+    private Long sopId;
+    /**
+     * 分组名称
+     */
+    private String groupName;
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 4 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/sop/SopPointsDO.java

@@ -30,6 +30,10 @@ public class SopPointsDO extends BaseDO {
      * SOPID
      */
     private Long sopId;
+    /**
+     * groupId
+     */
+    private Long groupId;
     /**
      * 所属车间ID
      */

+ 4 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/sop/SopUserDO.java

@@ -30,6 +30,10 @@ public class SopUserDO extends BaseDO {
      * sopID
      */
     private Long sopId;
+    /**
+     * groupId
+     */
+    private Long groupId;
     /**
      * 用户ID
      */

+ 51 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/sop/SopGroupMapper.java

@@ -0,0 +1,51 @@
+package cn.iocoder.yudao.module.iscs.dal.mysql.sop;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopGroupPageReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopGroupDO;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * SOP分组 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface SopGroupMapper extends BaseMapperX<SopGroupDO> {
+
+    default PageResult<SopGroupDO> selectPage(SopGroupPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<SopGroupDO>()
+                .eqIfPresent(SopGroupDO::getSopId, reqVO.getSopId())
+                .likeIfPresent(SopGroupDO::getGroupName, reqVO.getGroupName())
+                .eqIfPresent(SopGroupDO::getRemark, reqVO.getRemark())
+                .betweenIfPresent(SopGroupDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(SopGroupDO::getId));
+    }
+
+    default List<SopGroupDO> selectList(SopGroupPageReqVO reqVO) {
+        return selectList(new LambdaQueryWrapperX<SopGroupDO>()
+                .eqIfPresent(SopGroupDO::getSopId, reqVO.getSopId())
+                .likeIfPresent(SopGroupDO::getGroupName, reqVO.getGroupName())
+                .eqIfPresent(SopGroupDO::getRemark, reqVO.getRemark())
+                .betweenIfPresent(SopGroupDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(SopGroupDO::getId));
+    }
+
+    @Delete({
+            "<script>",
+            "DELETE FROM isc_sop_group",
+            "WHERE id IN",
+            "<foreach item='id' collection='ids' open='(' separator=',' close=')'>",
+            "#{id}",
+            "</foreach>",
+            "</script>"
+    })
+    Boolean physicalDeleteByIds(@Param(value = "ids") List<Long> ids);
+
+}

+ 57 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopGroupService.java

@@ -0,0 +1,57 @@
+package cn.iocoder.yudao.module.iscs.service.sop;
+
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopGroupPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopGroupRespVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopGroupSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopGroupDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import jakarta.validation.Valid;
+
+import java.util.List;
+
+/**
+ * SOP分组 Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface SopGroupService extends IService<SopGroupDO> {
+
+    /**
+     * 创建SOP分组
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createSopGroup(@Valid SopGroupSaveReqVO createReqVO);
+
+    /**
+     * 更新SOP分组
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateSopGroup(@Valid SopGroupSaveReqVO updateReqVO);
+
+    /**
+    * 批量删除SOP分组
+    *
+    * @param ids 编号
+    */
+    void deleteSopGroupListByIds(List<Long> ids);
+
+    /**
+     * 获得SOP分组
+     *
+     * @param id 编号
+     * @return SOP分组
+     */
+    SopGroupDO getSopGroup(Long id);
+
+    /**
+     * 获得SOP分组list
+     *
+     * @param pageReqVO 分页查询
+     * @return SOP分组分页
+     */
+    List<SopGroupRespVO> getSopGroupList(SopGroupPageReqVO pageReqVO);
+
+}

+ 99 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopGroupServiceImpl.java

@@ -0,0 +1,99 @@
+package cn.iocoder.yudao.module.iscs.service.sop;
+
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopGroupPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopGroupRespVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopGroupSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopGroupDO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopPointsDO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopUserDO;
+import cn.iocoder.yudao.module.iscs.dal.mysql.sop.SopGroupMapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import jakarta.annotation.Resource;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+
+/**
+ * SOP分组 Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+public class SopGroupServiceImpl extends ServiceImpl<SopGroupMapper, SopGroupDO> implements SopGroupService {
+
+    @Resource
+    private SopGroupMapper sopGroupMapper;
+    @Lazy
+    @Resource
+    private SopUserService sopUserService;
+    @Lazy
+    @Resource
+    private SopPointsService sopPointsService;
+
+    @Override
+    public Long createSopGroup(SopGroupSaveReqVO createReqVO) {
+        // 重复分组
+        List<SopGroupDO> list = list(Wrappers.<SopGroupDO>lambdaQuery()
+                .eq(SopGroupDO::getSopId, createReqVO.getSopId())
+                .eq(SopGroupDO::getGroupName, createReqVO.getGroupName()));
+        Assert.isTrue(list.isEmpty(), "该分组已存在");
+        // 插入
+        SopGroupDO sopGroup = BeanUtils.toBean(createReqVO, SopGroupDO.class);
+        sopGroupMapper.insert(sopGroup);
+
+        // 返回
+        return sopGroup.getId();
+    }
+
+    @Override
+    public void updateSopGroup(SopGroupSaveReqVO updateReqVO) {
+        // 重复分组
+        List<SopGroupDO> list = list(Wrappers.<SopGroupDO>lambdaQuery()
+                .eq(SopGroupDO::getSopId, updateReqVO.getSopId())
+                .eq(SopGroupDO::getGroupName, updateReqVO.getGroupName())
+                .ne(SopGroupDO::getSopId, updateReqVO.getId()));
+        Assert.isTrue(list.isEmpty(), "该分组已存在");
+        // 更新
+        SopGroupDO updateObj = BeanUtils.toBean(updateReqVO, SopGroupDO.class);
+        sopGroupMapper.updateById(updateObj);
+    }
+
+    @Transactional
+    @Override
+        public void deleteSopGroupListByIds(List<Long> ids) {
+        // 1.同时将sop的隔离点清除分组
+        List<SopPointsDO> list1 = sopPointsService.list(Wrappers.<SopPointsDO>lambdaQuery()
+                .in(SopPointsDO::getGroupId, ids));
+        if (!list1.isEmpty()) {
+            List<Long> sopPointIds = list1.stream().map(SopPointsDO::getId).toList();
+            sopPointsService.deleteSopPointsListByIds(sopPointIds);
+        }
+        // 2.同时将sop的人员清除分组
+        List<SopUserDO> list2 = sopUserService.list(Wrappers.<SopUserDO>lambdaQuery()
+                .in(SopUserDO::getGroupId, ids));
+        if (!list2.isEmpty()) {
+            List<Long> sopUserIds = list2.stream().map(SopUserDO::getId).toList();
+            sopUserService.deleteSopUserListByIds(sopUserIds);
+        }
+        // 3.删除
+        sopGroupMapper.physicalDeleteByIds(ids);
+        }
+
+    @Override
+    public SopGroupDO getSopGroup(Long id) {
+        return sopGroupMapper.selectById(id);
+    }
+
+    @Override
+    public List<SopGroupRespVO> getSopGroupList(SopGroupPageReqVO pageReqVO) {
+        return BeanUtils.toBean(sopGroupMapper.selectList(pageReqVO), SopGroupRespVO.class);
+    }
+
+}

+ 3 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopPointsService.java

@@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopPointsPageReqVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopPointsRespVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopPointsSaveReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopPointsUpdateGroupVO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopPointsDO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import jakarta.validation.Valid;
@@ -61,5 +62,7 @@ public interface SopPointsService extends IService<SopPointsDO> {
      */
     List<SopPointsRespVO> getSopPointsList(SopPointsPageReqVO pageReqVO);
 
+    Boolean updateSopPointsGroup(SopPointsUpdateGroupVO vo);
+
 
 }

+ 19 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopPointsServiceImpl.java

@@ -7,8 +7,11 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopPointsPageReqVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopPointsRespVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopPointsSaveReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopPointsUpdateGroupVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopGroupDO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopPointsDO;
 import cn.iocoder.yudao.module.iscs.dal.mysql.sop.SopPointsMapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
@@ -30,6 +33,8 @@ public class SopPointsServiceImpl extends ServiceImpl<SopPointsMapper, SopPoints
 
     @Resource
     private SopPointsMapper sopPointsMapper;
+    @Resource
+    private SopGroupService sopGroupService;
 
     @Override
     public Boolean createSopPoints(List<SopPointsSaveReqVO> list) {
@@ -88,4 +93,18 @@ public class SopPointsServiceImpl extends ServiceImpl<SopPointsMapper, SopPoints
         return BeanUtils.toBean(sopPointsMapper.selectList(pageReqVO), SopPointsRespVO.class);
     }
 
+    @Override
+    public Boolean updateSopPointsGroup(SopPointsUpdateGroupVO vo) {
+        Assert.isTrue(vo.getIds().isEmpty(), "请选择sop点位信息");
+        Assert.notNull(vo.getGroupId(), "分组信息不可为空!");
+        // 检查分组信息是否存在
+        SopGroupDO byId = sopGroupService.getById(vo.getGroupId());
+        Assert.isTrue(byId != null, "分组信息不存在!");
+        // 开始设置
+        update(Wrappers.<SopPointsDO>lambdaUpdate()
+                .in(SopPointsDO::getSopId, vo.getIds())
+                .set(SopPointsDO::getGroupId, vo.getGroupId()));
+        return true;
+    }
+
 }

+ 19 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopServiceImpl.java

@@ -6,10 +6,13 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.*;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopDO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopGroupDO;
 import cn.iocoder.yudao.module.iscs.dal.mysql.sop.SopMapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import jakarta.annotation.Resource;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
@@ -36,13 +39,23 @@ public class SopServiceImpl extends ServiceImpl<SopMapper, SopDO> implements Sop
     private SopPointsService sopPointsService;
     @Resource
     private SopWorkflowStepService sopWorkflowStepService;
+    @Resource
+    private SopGroupService sopGroupService;
 
     @Transactional
     @Override
     public Boolean createSop(SopSaveReqVO vo) {
+        Assert.isTrue(StringUtils.isNotBlank(vo.getSopName()), "SOP名称不可为空!");
+        List<SopDO> list = list(Wrappers.<SopDO>lambdaQuery().eq(SopDO::getSopName, vo.getSopName()));
+        Assert.isTrue(list.isEmpty(), "该SOP名称已被使用!");
         // 插入
         SopDO sop = BeanUtils.toBean(vo, SopDO.class);
         sopMapper.insert(sop);
+        // 生成默认分组
+        SopGroupDO sopGroupDO = new SopGroupDO();
+        sopGroupDO.setSopId(sop.getId());
+        sopGroupDO.setGroupName("默认分组");
+        sopGroupService.save(sopGroupDO);
         // 新增人员信息
         if (!vo.getSopUserList().isEmpty()) {
             vo.getSopUserList().forEach(o -> o.setSopId(sop.getId()));
@@ -64,6 +77,12 @@ public class SopServiceImpl extends ServiceImpl<SopMapper, SopDO> implements Sop
 
     @Override
     public void updateSop(SopSaveReqVO updateReqVO) {
+        Assert.notNull(updateReqVO.getId(), "ID不可为空!");
+        Assert.isTrue(StringUtils.isNotBlank(updateReqVO.getSopName()), "SOP名称不可为空!");
+        List<SopDO> list = list(Wrappers.<SopDO>lambdaQuery()
+                .eq(SopDO::getSopName, updateReqVO.getSopName())
+                .ne(SopDO::getId, updateReqVO.getId()));
+        Assert.isTrue(list.isEmpty(), "该SOP名称已被使用!");
         // 校验存在
         validateSopExists(updateReqVO.getId());
         // 更新

+ 12 - 0
yudao-module-iscs/src/main/resources/mapper/SopGroupMapper.xml

@@ -0,0 +1,12 @@
+<?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="cn.iocoder.yudao.module.iscs.dal.mysql.sop.SopGroupMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>