车车 4 luni în urmă
părinte
comite
1271855f1d
21 a modificat fișierele cu 1312 adăugiri și 252 ștergeri
  1. 74 95
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/SopController.java
  2. 94 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/SopUserController.java
  3. 94 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/SopWorkflowStepController.java
  4. 38 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopUserPageReqVO.java
  5. 47 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopUserRespVO.java
  6. 35 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopUserSaveReqVO.java
  7. 86 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopWorkflowStepPageReqVO.java
  8. 111 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopWorkflowStepRespVO.java
  9. 83 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopWorkflowStepSaveReqVO.java
  10. 55 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/sop/SopUserDO.java
  11. 119 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/sop/SopWorkflowStepDO.java
  12. 30 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/sop/SopUserMapper.java
  13. 46 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/sop/SopWorkflowStepMapper.java
  14. 57 63
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopService.java
  15. 82 94
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopServiceImpl.java
  16. 57 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopUserService.java
  17. 61 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopUserServiceImpl.java
  18. 57 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopWorkflowStepService.java
  19. 62 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopWorkflowStepServiceImpl.java
  20. 12 0
      yudao-module-iscs/src/main/resources/mapper/SopUserMapper.xml
  21. 12 0
      yudao-module-iscs/src/main/resources/mapper/SopWorkflowStepMapper.xml

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

@@ -1,95 +1,74 @@
-package cn.iocoder.yudao.module.iscs.controller.admin.sop;
-
-import org.springframework.web.bind.annotation.*;
-import jakarta.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.security.access.prepost.PreAuthorize;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.Operation;
-
-import jakarta.validation.constraints.*;
-import jakarta.validation.*;
-import jakarta.servlet.http.*;
-import java.util.*;
-import java.io.IOException;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-
-import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
-
-import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
-import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
-
-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.service.sop.SopService;
-
-@Tag(name = "管理后台 - SOP信息")
-@RestController
-@RequestMapping("/iscs/sop")
-@Validated
-public class SopController {
-
-    @Resource
-    private SopService sopService;
-
-    @PostMapping("/insertSop")
-    @Operation(summary = "创建SOP信息")
-    @PreAuthorize("@ss.hasPermission('iscs:sop:create')")
-    public CommonResult<Long> insertSop(@Valid @RequestBody SopSaveReqVO createReqVO) {
-        return success(sopService.createSop(createReqVO));
-    }
-
-    @PutMapping("/updateSop")
-    @Operation(summary = "更新SOP信息")
-    @PreAuthorize("@ss.hasPermission('iscs:sop:update')")
-    public CommonResult<Boolean> updateSop(@Valid @RequestBody SopSaveReqVO updateReqVO) {
-        sopService.updateSop(updateReqVO);
-        return success(true);
-    }
-
-    @DeleteMapping("/deleteSopList")
-    @Parameter(name = "ids", description = "编号", required = true)
-    @Operation(summary = "批量删除SOP信息")
-                @PreAuthorize("@ss.hasPermission('iscs:sop:delete')")
-    public CommonResult<Boolean> deleteSopList(@RequestParam("ids") List<Long> ids) {
-        sopService.deleteSopListByIds(ids);
-        return success(true);
-    }
-
-    @GetMapping("/selectSopById")
-    @Operation(summary = "获得SOP信息")
-    @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('iscs:sop:query')")
-    public CommonResult<SopRespVO> selectSopById(@RequestParam("id") Long id) {
-        SopDO sop = sopService.getSop(id);
-        return success(BeanUtils.toBean(sop, SopRespVO.class));
-    }
-
-    @GetMapping("/getSopPage")
-    @Operation(summary = "获得SOP信息分页")
-    @PreAuthorize("@ss.hasPermission('iscs:sop:query')")
-    public CommonResult<PageResult<SopRespVO>> getSopPage(@Valid SopPageReqVO pageReqVO) {
-        PageResult<SopDO> pageResult = sopService.getSopPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, SopRespVO.class));
-    }
-
-    @GetMapping("/exportSopExcel")
-    @Operation(summary = "导出SOP信息 Excel")
-    @PreAuthorize("@ss.hasPermission('iscs:sop:export')")
-    @ApiAccessLog(operateType = EXPORT)
-    public void exportSopExcel(@Valid SopPageReqVO pageReqVO,
-              HttpServletResponse response) throws IOException {
-        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
-        List<SopDO> list = sopService.getSopPage(pageReqVO).getList();
-        // 导出 Excel
-        ExcelUtils.write(response, "SOP信息.xls", "数据", SopRespVO.class,
-                        BeanUtils.toBean(list, SopRespVO.class));
-    }
-
-}
+package cn.iocoder.yudao.module.iscs.controller.admin.sop;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+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.SopPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopRespVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopDO;
+import cn.iocoder.yudao.module.iscs.service.sop.SopService;
+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("/iscs/sop")
+@Validated
+public class SopController {
+
+    @Resource
+    private SopService sopService;
+
+    @PostMapping("/insertSop")
+    @Operation(summary = "创建SOP信息")
+    @PreAuthorize("@ss.hasPermission('iscs:sop:create')")
+    public CommonResult<Long> insertSop(@Valid @RequestBody SopSaveReqVO createReqVO) {
+        return success(sopService.createSop(createReqVO));
+    }
+
+    @PutMapping("/updateSop")
+    @Operation(summary = "更新SOP信息")
+    @PreAuthorize("@ss.hasPermission('iscs:sop:update')")
+    public CommonResult<Boolean> updateSop(@Valid @RequestBody SopSaveReqVO updateReqVO) {
+        sopService.updateSop(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/deleteSopList")
+    @Parameter(name = "ids", description = "编号", required = true)
+    @Operation(summary = "批量删除SOP信息")
+                @PreAuthorize("@ss.hasPermission('iscs:sop:delete')")
+    public CommonResult<Boolean> deleteSopList(@RequestParam("ids") List<Long> ids) {
+        sopService.deleteSopListByIds(ids);
+        return success(true);
+    }
+
+    @GetMapping("/selectSopById")
+    @Operation(summary = "获得SOP信息")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('iscs:sop:query')")
+    public CommonResult<SopRespVO> selectSopById(@RequestParam("id") Long id) {
+        SopDO sop = sopService.getSop(id);
+        return success(BeanUtils.toBean(sop, SopRespVO.class));
+    }
+
+    @GetMapping("/getSopPage")
+    @Operation(summary = "获得SOP信息分页")
+    @PreAuthorize("@ss.hasPermission('iscs:sop:query')")
+    public CommonResult<PageResult<SopRespVO>> getSopPage(@Valid SopPageReqVO pageReqVO) {
+        PageResult<SopDO> pageResult = sopService.getSopPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, SopRespVO.class));
+    }
+
+}

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

@@ -0,0 +1,94 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.sop;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopUserPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopUserRespVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopUserSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopUserDO;
+import cn.iocoder.yudao.module.iscs.service.sop.SopUserService;
+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.servlet.http.HttpServletResponse;
+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.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+
+@Tag(name = "管理后台 - SOP用户")
+@RestController
+@RequestMapping("/iscs/sop-user")
+@Validated
+public class SopUserController {
+
+    @Resource
+    private SopUserService sopUserService;
+
+    @PostMapping("/insertSopUser")
+    @Operation(summary = "创建SOP用户")
+    @PreAuthorize("@ss.hasPermission('iscs:sop-user:create')")
+    public CommonResult<Long> insertSopUser(@Valid @RequestBody SopUserSaveReqVO createReqVO) {
+        return success(sopUserService.createSopUser(createReqVO));
+    }
+
+    @PutMapping("/updateSopUser")
+    @Operation(summary = "更新SOP用户")
+    @PreAuthorize("@ss.hasPermission('iscs:sop-user:update')")
+    public CommonResult<Boolean> updateSopUser(@Valid @RequestBody SopUserSaveReqVO updateReqVO) {
+        sopUserService.updateSopUser(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/deleteSopUserList")
+    @Parameter(name = "ids", description = "编号", required = true)
+    @Operation(summary = "批量删除SOP用户")
+                @PreAuthorize("@ss.hasPermission('iscs:sop-user:delete')")
+    public CommonResult<Boolean> deleteSopUserList(@RequestParam("ids") List<Long> ids) {
+        sopUserService.deleteSopUserListByIds(ids);
+        return success(true);
+    }
+
+    @GetMapping("/selectSopUserById")
+    @Operation(summary = "获得SOP用户")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('iscs:sop-user:query')")
+    public CommonResult<SopUserRespVO> selectSopUserById(@RequestParam("id") Long id) {
+        SopUserDO sopUser = sopUserService.getSopUser(id);
+        return success(BeanUtils.toBean(sopUser, SopUserRespVO.class));
+    }
+
+    @GetMapping("/getSopUserPage")
+    @Operation(summary = "获得SOP用户分页")
+    @PreAuthorize("@ss.hasPermission('iscs:sop-user:query')")
+    public CommonResult<PageResult<SopUserRespVO>> getSopUserPage(@Valid SopUserPageReqVO pageReqVO) {
+        PageResult<SopUserDO> pageResult = sopUserService.getSopUserPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, SopUserRespVO.class));
+    }
+
+    @GetMapping("/exportSopUserExcel")
+    @Operation(summary = "导出SOP用户 Excel")
+    @PreAuthorize("@ss.hasPermission('iscs:sop-user:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportSopUserExcel(@Valid SopUserPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<SopUserDO> list = sopUserService.getSopUserPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "SOP用户.xls", "数据", SopUserRespVO.class,
+                        BeanUtils.toBean(list, SopUserRespVO.class));
+    }
+
+}

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

@@ -0,0 +1,94 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.sop;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopWorkflowStepPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopWorkflowStepRespVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopWorkflowStepSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopWorkflowStepDO;
+import cn.iocoder.yudao.module.iscs.service.sop.SopWorkflowStepService;
+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.servlet.http.HttpServletResponse;
+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.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+
+@Tag(name = "管理后台 - 工作流步骤")
+@RestController
+@RequestMapping("/iscs/sop-workflow-step")
+@Validated
+public class SopWorkflowStepController {
+
+    @Resource
+    private SopWorkflowStepService sopWorkflowStepService;
+
+    @PostMapping("/insertSopWorkflowStep")
+    @Operation(summary = "创建工作流步骤")
+    @PreAuthorize("@ss.hasPermission('iscs:sop-workflow-step:create')")
+    public CommonResult<Long> insertSopWorkflowStep(@Valid @RequestBody SopWorkflowStepSaveReqVO createReqVO) {
+        return success(sopWorkflowStepService.createSopWorkflowStep(createReqVO));
+    }
+
+    @PutMapping("/updateSopWorkflowStep")
+    @Operation(summary = "更新工作流步骤")
+    @PreAuthorize("@ss.hasPermission('iscs:sop-workflow-step:update')")
+    public CommonResult<Boolean> updateSopWorkflowStep(@Valid @RequestBody SopWorkflowStepSaveReqVO updateReqVO) {
+        sopWorkflowStepService.updateSopWorkflowStep(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/deleteSopWorkflowStepList")
+    @Parameter(name = "ids", description = "编号", required = true)
+    @Operation(summary = "批量删除工作流步骤")
+                @PreAuthorize("@ss.hasPermission('iscs:sop-workflow-step:delete')")
+    public CommonResult<Boolean> deleteSopWorkflowStepList(@RequestParam("ids") List<Long> ids) {
+        sopWorkflowStepService.deleteSopWorkflowStepListByIds(ids);
+        return success(true);
+    }
+
+    @GetMapping("/selectSopWorkflowStepById")
+    @Operation(summary = "获得工作流步骤")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('iscs:sop-workflow-step:query')")
+    public CommonResult<SopWorkflowStepRespVO> selectSopWorkflowStepById(@RequestParam("id") Long id) {
+        SopWorkflowStepDO sopWorkflowStep = sopWorkflowStepService.getSopWorkflowStep(id);
+        return success(BeanUtils.toBean(sopWorkflowStep, SopWorkflowStepRespVO.class));
+    }
+
+    @GetMapping("/getSopWorkflowStepPage")
+    @Operation(summary = "获得工作流步骤分页")
+    @PreAuthorize("@ss.hasPermission('iscs:sop-workflow-step:query')")
+    public CommonResult<PageResult<SopWorkflowStepRespVO>> getSopWorkflowStepPage(@Valid SopWorkflowStepPageReqVO pageReqVO) {
+        PageResult<SopWorkflowStepDO> pageResult = sopWorkflowStepService.getSopWorkflowStepPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, SopWorkflowStepRespVO.class));
+    }
+
+    @GetMapping("/exportSopWorkflowStepExcel")
+    @Operation(summary = "导出工作流步骤 Excel")
+    @PreAuthorize("@ss.hasPermission('iscs:sop-workflow-step:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportSopWorkflowStepExcel(@Valid SopWorkflowStepPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<SopWorkflowStepDO> list = sopWorkflowStepService.getSopWorkflowStepPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "工作流步骤.xls", "数据", SopWorkflowStepRespVO.class,
+                        BeanUtils.toBean(list, SopWorkflowStepRespVO.class));
+    }
+
+}

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

@@ -0,0 +1,38 @@
+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 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 SopUserPageReqVO extends PageParam {
+
+    @Schema(description = "sopID", example = "20004")
+    private Long sopId;
+
+    @Schema(description = "用户ID", example = "6206")
+    private Long userId;
+
+    @Schema(description = "用户名称", example = "赵六")
+    private String userName;
+
+    @Schema(description = "用户类型(0内部 1外部)", example = "1")
+    private String userType;
+
+    @Schema(description = "作业票角色(sys_role表中role_key)")
+    private String userRole;
+
+    @Schema(description = "备注", example = "随便")
+    private String remark;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

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

@@ -0,0 +1,47 @@
+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 SopUserRespVO {
+
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19467")
+    @ExcelProperty("主键ID")
+    private Long id;
+
+    @Schema(description = "sopID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20004")
+    @ExcelProperty("sopID")
+    private Long sopId;
+
+    @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6206")
+    @ExcelProperty("用户ID")
+    private Long userId;
+
+    @Schema(description = "用户名称", example = "赵六")
+    @ExcelProperty("用户名称")
+    private String userName;
+
+    @Schema(description = "用户类型(0内部 1外部)", example = "1")
+    @ExcelProperty("用户类型(0内部 1外部)")
+    private String userType;
+
+    @Schema(description = "作业票角色(sys_role表中role_key)")
+    @ExcelProperty("作业票角色(sys_role表中role_key)")
+    private String userRole;
+
+    @Schema(description = "备注", example = "随便")
+    @ExcelProperty("备注")
+    private String remark;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 35 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/sop/vo/SopUserSaveReqVO.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 jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - SOP用户新增/修改 Request VO")
+@Data
+public class SopUserSaveReqVO {
+
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19467")
+    private Long id;
+
+    @Schema(description = "sopID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20004")
+    @NotNull(message = "sopID不能为空")
+    private Long sopId;
+
+    @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6206")
+    @NotNull(message = "用户ID不能为空")
+    private Long userId;
+
+    @Schema(description = "用户名称", example = "赵六")
+    private String userName;
+
+    @Schema(description = "用户类型(0内部 1外部)", example = "1")
+    private String userType;
+
+    @Schema(description = "作业票角色(sys_role表中role_key)")
+    private String userRole;
+
+    @Schema(description = "备注", example = "随便")
+    private String remark;
+
+}

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

@@ -0,0 +1,86 @@
+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 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 = "管理后台 - 工作流步骤分页 Request VO")
+@Data
+public class SopWorkflowStepPageReqVO extends PageParam {
+
+    @Schema(description = "sopID", example = "32212")
+    private Long sopId;
+
+    @Schema(description = "步骤ID", example = "23983")
+    private Long stepId;
+
+    @Schema(description = "步骤序号")
+    private Integer stepIndex;
+
+    @Schema(description = "名称", example = "赵六")
+    private String stepName;
+
+    @Schema(description = "图标")
+    private String stepIcon;
+
+    @Schema(description = "标题")
+    private String stepTitle;
+
+    @Schema(description = "短标题")
+    private String stepTitleShort;
+
+    @Schema(description = "描述信息", example = "随便")
+    private String stepDescription;
+
+    @Schema(description = "是否自动执行", example = "1")
+    private Integer confirmType;
+
+    @Schema(description = "确认角色编码")
+    private String confirmRoleCode;
+
+    @Schema(description = "确认人员")
+    private Long confirmUser;
+
+    @Schema(description = "开启取消作业")
+    private Boolean enableCancelJob;
+
+    @Schema(description = "开启设置锁定人")
+    private Boolean enableSetLocker;
+
+    @Schema(description = "开启设置共锁人")
+    private Boolean enableSetColocker;
+
+    @Schema(description = "开启添加共锁人")
+    private Boolean enableAddColocker;
+
+    @Schema(description = "添加共锁人后跳转步骤")
+    private Integer gotoStepAfterAddingColocker;
+
+    @Schema(description = "开启减少共锁人")
+    private Boolean enableReduceColocker;
+
+    @Schema(description = "开启上锁")
+    private Boolean enableLock;
+
+    @Schema(description = "开启共锁")
+    private Boolean enableColock;
+
+    @Schema(description = "开启解除共锁")
+    private Boolean enableReleaseColock;
+
+    @Schema(description = "开启解锁")
+    private Boolean enableUnlock;
+
+    @Schema(description = "开启结束作业")
+    private Boolean enableEndJob;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

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

@@ -0,0 +1,111 @@
+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 = "管理后台 - 工作流步骤 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class SopWorkflowStepRespVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27376")
+    @ExcelProperty("ID")
+    private Long id;
+
+    @Schema(description = "sopID", requiredMode = Schema.RequiredMode.REQUIRED, example = "32212")
+    @ExcelProperty("sopID")
+    private Long sopId;
+
+    @Schema(description = "步骤ID", example = "23983")
+    @ExcelProperty("步骤ID")
+    private Long stepId;
+
+    @Schema(description = "步骤序号", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("步骤序号")
+    private Integer stepIndex;
+
+    @Schema(description = "名称", example = "赵六")
+    @ExcelProperty("名称")
+    private String stepName;
+
+    @Schema(description = "图标")
+    @ExcelProperty("图标")
+    private String stepIcon;
+
+    @Schema(description = "标题")
+    @ExcelProperty("标题")
+    private String stepTitle;
+
+    @Schema(description = "短标题")
+    @ExcelProperty("短标题")
+    private String stepTitleShort;
+
+    @Schema(description = "描述信息", example = "随便")
+    @ExcelProperty("描述信息")
+    private String stepDescription;
+
+    @Schema(description = "是否自动执行", example = "1")
+    @ExcelProperty("是否自动执行")
+    private Integer confirmType;
+
+    @Schema(description = "确认角色编码")
+    @ExcelProperty("确认角色编码")
+    private String confirmRoleCode;
+
+    @Schema(description = "确认人员")
+    @ExcelProperty("确认人员")
+    private Long confirmUser;
+
+    @Schema(description = "开启取消作业")
+    @ExcelProperty("开启取消作业")
+    private Boolean enableCancelJob;
+
+    @Schema(description = "开启设置锁定人")
+    @ExcelProperty("开启设置锁定人")
+    private Boolean enableSetLocker;
+
+    @Schema(description = "开启设置共锁人")
+    @ExcelProperty("开启设置共锁人")
+    private Boolean enableSetColocker;
+
+    @Schema(description = "开启添加共锁人")
+    @ExcelProperty("开启添加共锁人")
+    private Boolean enableAddColocker;
+
+    @Schema(description = "添加共锁人后跳转步骤")
+    @ExcelProperty("添加共锁人后跳转步骤")
+    private Integer gotoStepAfterAddingColocker;
+
+    @Schema(description = "开启减少共锁人")
+    @ExcelProperty("开启减少共锁人")
+    private Boolean enableReduceColocker;
+
+    @Schema(description = "开启上锁")
+    @ExcelProperty("开启上锁")
+    private Boolean enableLock;
+
+    @Schema(description = "开启共锁")
+    @ExcelProperty("开启共锁")
+    private Boolean enableColock;
+
+    @Schema(description = "开启解除共锁")
+    @ExcelProperty("开启解除共锁")
+    private Boolean enableReleaseColock;
+
+    @Schema(description = "开启解锁")
+    @ExcelProperty("开启解锁")
+    private Boolean enableUnlock;
+
+    @Schema(description = "开启结束作业")
+    @ExcelProperty("开启结束作业")
+    private Boolean enableEndJob;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

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

@@ -0,0 +1,83 @@
+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.*;
+
+@Schema(description = "管理后台 - 工作流步骤新增/修改 Request VO")
+@Data
+public class SopWorkflowStepSaveReqVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27376")
+    private Long id;
+
+    @Schema(description = "sopID", requiredMode = Schema.RequiredMode.REQUIRED, example = "32212")
+    @NotNull(message = "sopID不能为空")
+    private Long sopId;
+
+    @Schema(description = "步骤ID", example = "23983")
+    private Long stepId;
+
+    @Schema(description = "步骤序号", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "步骤序号不能为空")
+    private Integer stepIndex;
+
+    @Schema(description = "名称", example = "赵六")
+    private String stepName;
+
+    @Schema(description = "图标")
+    private String stepIcon;
+
+    @Schema(description = "标题")
+    private String stepTitle;
+
+    @Schema(description = "短标题")
+    private String stepTitleShort;
+
+    @Schema(description = "描述信息", example = "随便")
+    private String stepDescription;
+
+    @Schema(description = "是否自动执行", example = "1")
+    private Integer confirmType;
+
+    @Schema(description = "确认角色编码")
+    private String confirmRoleCode;
+
+    @Schema(description = "确认人员")
+    private Long confirmUser;
+
+    @Schema(description = "开启取消作业")
+    private Boolean enableCancelJob;
+
+    @Schema(description = "开启设置锁定人")
+    private Boolean enableSetLocker;
+
+    @Schema(description = "开启设置共锁人")
+    private Boolean enableSetColocker;
+
+    @Schema(description = "开启添加共锁人")
+    private Boolean enableAddColocker;
+
+    @Schema(description = "添加共锁人后跳转步骤")
+    private Integer gotoStepAfterAddingColocker;
+
+    @Schema(description = "开启减少共锁人")
+    private Boolean enableReduceColocker;
+
+    @Schema(description = "开启上锁")
+    private Boolean enableLock;
+
+    @Schema(description = "开启共锁")
+    private Boolean enableColock;
+
+    @Schema(description = "开启解除共锁")
+    private Boolean enableReleaseColock;
+
+    @Schema(description = "开启解锁")
+    private Boolean enableUnlock;
+
+    @Schema(description = "开启结束作业")
+    private Boolean enableEndJob;
+
+}

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

@@ -0,0 +1,55 @@
+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_user")
+@KeySequence("isc_sop_user_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SopUserDO extends BaseDO {
+
+    /**
+     * 主键ID
+     */
+    @TableId
+    private Long id;
+    /**
+     * sopID
+     */
+    private Long sopId;
+    /**
+     * 用户ID
+     */
+    private Long userId;
+    /**
+     * 用户名称
+     */
+    private String userName;
+    /**
+     * 用户类型(0内部 1外部)
+     */
+    private String userType;
+    /**
+     * 作业票角色(sys_role表中role_key)
+     */
+    private String userRole;
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

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

@@ -0,0 +1,119 @@
+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.*;
+
+/**
+ * 工作流步骤 DO
+ *
+ * @author 芋道源码
+ */
+@TableName("isc_sop_workflow_step")
+@KeySequence("isc_sop_workflow_step_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SopWorkflowStepDO extends BaseDO {
+
+    /**
+     * ID
+     */
+    @TableId
+    private Long id;
+    /**
+     * sopID
+     */
+    private Long sopId;
+    /**
+     * 步骤ID
+     */
+    private Long stepId;
+    /**
+     * 步骤序号
+     */
+    private Integer stepIndex;
+    /**
+     * 名称
+     */
+    private String stepName;
+    /**
+     * 图标
+     */
+    private String stepIcon;
+    /**
+     * 标题
+     */
+    private String stepTitle;
+    /**
+     * 短标题
+     */
+    private String stepTitleShort;
+    /**
+     * 描述信息
+     */
+    private String stepDescription;
+    /**
+     * 是否自动执行
+     */
+    private Integer confirmType;
+    /**
+     * 确认角色编码
+     */
+    private String confirmRoleCode;
+    /**
+     * 确认人员
+     */
+    private Long confirmUser;
+    /**
+     * 开启取消作业
+     */
+    private Boolean enableCancelJob;
+    /**
+     * 开启设置锁定人
+     */
+    private Boolean enableSetLocker;
+    /**
+     * 开启设置共锁人
+     */
+    private Boolean enableSetColocker;
+    /**
+     * 开启添加共锁人
+     */
+    private Boolean enableAddColocker;
+    /**
+     * 添加共锁人后跳转步骤
+     */
+    private Integer gotoStepAfterAddingColocker;
+    /**
+     * 开启减少共锁人
+     */
+    private Boolean enableReduceColocker;
+    /**
+     * 开启上锁
+     */
+    private Boolean enableLock;
+    /**
+     * 开启共锁
+     */
+    private Boolean enableColock;
+    /**
+     * 开启解除共锁
+     */
+    private Boolean enableReleaseColock;
+    /**
+     * 开启解锁
+     */
+    private Boolean enableUnlock;
+    /**
+     * 开启结束作业
+     */
+    private Boolean enableEndJob;
+
+
+}

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

@@ -0,0 +1,30 @@
+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.SopUserPageReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopUserDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * SOP用户 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface SopUserMapper extends BaseMapperX<SopUserDO> {
+
+    default PageResult<SopUserDO> selectPage(SopUserPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<SopUserDO>()
+                .eqIfPresent(SopUserDO::getSopId, reqVO.getSopId())
+                .eqIfPresent(SopUserDO::getUserId, reqVO.getUserId())
+                .likeIfPresent(SopUserDO::getUserName, reqVO.getUserName())
+                .eqIfPresent(SopUserDO::getUserType, reqVO.getUserType())
+                .eqIfPresent(SopUserDO::getUserRole, reqVO.getUserRole())
+                .eqIfPresent(SopUserDO::getRemark, reqVO.getRemark())
+                .betweenIfPresent(SopUserDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(SopUserDO::getId));
+    }
+
+}

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

@@ -0,0 +1,46 @@
+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.SopWorkflowStepPageReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopWorkflowStepDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 工作流步骤 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface SopWorkflowStepMapper extends BaseMapperX<SopWorkflowStepDO> {
+
+    default PageResult<SopWorkflowStepDO> selectPage(SopWorkflowStepPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<SopWorkflowStepDO>()
+                .eqIfPresent(SopWorkflowStepDO::getSopId, reqVO.getSopId())
+                .eqIfPresent(SopWorkflowStepDO::getStepId, reqVO.getStepId())
+                .eqIfPresent(SopWorkflowStepDO::getStepIndex, reqVO.getStepIndex())
+                .likeIfPresent(SopWorkflowStepDO::getStepName, reqVO.getStepName())
+                .eqIfPresent(SopWorkflowStepDO::getStepIcon, reqVO.getStepIcon())
+                .eqIfPresent(SopWorkflowStepDO::getStepTitle, reqVO.getStepTitle())
+                .eqIfPresent(SopWorkflowStepDO::getStepTitleShort, reqVO.getStepTitleShort())
+                .eqIfPresent(SopWorkflowStepDO::getStepDescription, reqVO.getStepDescription())
+                .eqIfPresent(SopWorkflowStepDO::getConfirmType, reqVO.getConfirmType())
+                .eqIfPresent(SopWorkflowStepDO::getConfirmRoleCode, reqVO.getConfirmRoleCode())
+                .eqIfPresent(SopWorkflowStepDO::getConfirmUser, reqVO.getConfirmUser())
+                .eqIfPresent(SopWorkflowStepDO::getEnableCancelJob, reqVO.getEnableCancelJob())
+                .eqIfPresent(SopWorkflowStepDO::getEnableSetLocker, reqVO.getEnableSetLocker())
+                .eqIfPresent(SopWorkflowStepDO::getEnableSetColocker, reqVO.getEnableSetColocker())
+                .eqIfPresent(SopWorkflowStepDO::getEnableAddColocker, reqVO.getEnableAddColocker())
+                .eqIfPresent(SopWorkflowStepDO::getGotoStepAfterAddingColocker, reqVO.getGotoStepAfterAddingColocker())
+                .eqIfPresent(SopWorkflowStepDO::getEnableReduceColocker, reqVO.getEnableReduceColocker())
+                .eqIfPresent(SopWorkflowStepDO::getEnableLock, reqVO.getEnableLock())
+                .eqIfPresent(SopWorkflowStepDO::getEnableColock, reqVO.getEnableColock())
+                .eqIfPresent(SopWorkflowStepDO::getEnableReleaseColock, reqVO.getEnableReleaseColock())
+                .eqIfPresent(SopWorkflowStepDO::getEnableUnlock, reqVO.getEnableUnlock())
+                .eqIfPresent(SopWorkflowStepDO::getEnableEndJob, reqVO.getEnableEndJob())
+                .betweenIfPresent(SopWorkflowStepDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(SopWorkflowStepDO::getId));
+    }
+
+}

+ 57 - 63
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopService.java

@@ -1,63 +1,57 @@
-package cn.iocoder.yudao.module.iscs.service.sop;
-
-import java.util.*;
-import jakarta.validation.*;
-import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.*;
-import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopDO;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
- * SOP信息 Service 接口
- *
- * @author 芋道源码
- */
-public interface SopService extends IService<SopDO> {
-
-    /**
-     * 创建SOP信息
-     *
-     * @param createReqVO 创建信息
-     * @return 编号
-     */
-    Long createSop(@Valid SopSaveReqVO createReqVO);
-
-    /**
-     * 更新SOP信息
-     *
-     * @param updateReqVO 更新信息
-     */
-    void updateSop(@Valid SopSaveReqVO updateReqVO);
-
-    /**
-     * 删除SOP信息
-     *
-     * @param id 编号
-     */
-    void deleteSop(Long id);
-
-    /**
-    * 批量删除SOP信息
-    *
-    * @param ids 编号
-    */
-    void deleteSopListByIds(List<Long> ids);
-
-    /**
-     * 获得SOP信息
-     *
-     * @param id 编号
-     * @return SOP信息
-     */
-    SopDO getSop(Long id);
-
-    /**
-     * 获得SOP信息分页
-     *
-     * @param pageReqVO 分页查询
-     * @return SOP信息分页
-     */
-    PageResult<SopDO> getSopPage(SopPageReqVO pageReqVO);
-
-}
+package cn.iocoder.yudao.module.iscs.service.sop;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import jakarta.validation.Valid;
+
+import java.util.List;
+
+/**
+ * SOP信息 Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface SopService extends IService<SopDO> {
+
+    /**
+     * 创建SOP信息
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createSop(@Valid SopSaveReqVO createReqVO);
+
+    /**
+     * 更新SOP信息
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateSop(@Valid SopSaveReqVO updateReqVO);
+
+    /**
+    * 批量删除SOP信息
+    *
+    * @param ids 编号
+    */
+    void deleteSopListByIds(List<Long> ids);
+
+    /**
+     * 获得SOP信息
+     *
+     * @param id 编号
+     * @return SOP信息
+     */
+    SopDO getSop(Long id);
+
+    /**
+     * 获得SOP信息分页
+     *
+     * @param pageReqVO 分页查询
+     * @return SOP信息分页
+     */
+    PageResult<SopDO> getSopPage(SopPageReqVO pageReqVO);
+
+}

+ 82 - 94
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopServiceImpl.java

@@ -1,94 +1,82 @@
-package cn.iocoder.yudao.module.iscs.service.sop;
-
-import cn.hutool.core.collection.CollUtil;
-import org.springframework.stereotype.Service;
-import jakarta.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.*;
-import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.*;
-import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopDO;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-
-import cn.iocoder.yudao.module.iscs.dal.mysql.sop.SopMapper;
-
-import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
-import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.diffList;
-import static cn.iocoder.yudao.module.iscs.enums.ErrorCodeConstants.*;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-
-/**
- * SOP信息 Service 实现类
- *
- * @author 芋道源码
- */
-@Service
-@Validated
-public class SopServiceImpl extends ServiceImpl<SopMapper, SopDO> implements SopService {
-
-    @Resource
-    private SopMapper sopMapper;
-
-    @Override
-    public Long createSop(SopSaveReqVO createReqVO) {
-        // 插入
-        SopDO sop = BeanUtils.toBean(createReqVO, SopDO.class);
-        sopMapper.insert(sop);
-
-        // 返回
-        return sop.getId();
-    }
-
-    @Override
-    public void updateSop(SopSaveReqVO updateReqVO) {
-        // 校验存在
-        validateSopExists(updateReqVO.getId());
-        // 更新
-        SopDO updateObj = BeanUtils.toBean(updateReqVO, SopDO.class);
-        sopMapper.updateById(updateObj);
-    }
-
-    @Override
-    public void deleteSop(Long id) {
-        // 校验存在
-        validateSopExists(id);
-        // 删除
-        sopMapper.deleteById(id);
-    }
-
-    @Override
-        public void deleteSopListByIds(List<Long> ids) {
-        // 校验存在
-        validateSopExists(ids);
-        // 删除
-        sopMapper.deleteByIds(ids);
-        }
-
-    private void validateSopExists(List<Long> ids) {
-        List<SopDO> list = sopMapper.selectByIds(ids);
-        if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
-            throw exception(SOP_NOT_EXISTS);
-        }
-    }
-
-    private void validateSopExists(Long id) {
-        if (sopMapper.selectById(id) == null) {
-            throw exception(SOP_NOT_EXISTS);
-        }
-    }
-
-    @Override
-    public SopDO getSop(Long id) {
-        return sopMapper.selectById(id);
-    }
-
-    @Override
-    public PageResult<SopDO> getSopPage(SopPageReqVO pageReqVO) {
-        return sopMapper.selectPage(pageReqVO);
-    }
-
-}
+package cn.iocoder.yudao.module.iscs.service.sop;
+
+import cn.hutool.core.collection.CollUtil;
+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.SopPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopDO;
+import cn.iocoder.yudao.module.iscs.dal.mysql.sop.SopMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.iscs.enums.ErrorCodeConstants.SOP_NOT_EXISTS;
+
+/**
+ * SOP信息 Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+public class SopServiceImpl extends ServiceImpl<SopMapper, SopDO> implements SopService {
+
+    @Resource
+    private SopMapper sopMapper;
+
+    @Override
+    public Long createSop(SopSaveReqVO createReqVO) {
+        // 插入
+        SopDO sop = BeanUtils.toBean(createReqVO, SopDO.class);
+        sopMapper.insert(sop);
+
+        // 返回
+        return sop.getId();
+    }
+
+    @Override
+    public void updateSop(SopSaveReqVO updateReqVO) {
+        // 校验存在
+        validateSopExists(updateReqVO.getId());
+        // 更新
+        SopDO updateObj = BeanUtils.toBean(updateReqVO, SopDO.class);
+        sopMapper.updateById(updateObj);
+    }
+
+    @Override
+        public void deleteSopListByIds(List<Long> ids) {
+        // 校验存在
+        validateSopExists(ids);
+        // 删除
+        sopMapper.deleteByIds(ids);
+        }
+
+    private void validateSopExists(List<Long> ids) {
+        List<SopDO> list = sopMapper.selectByIds(ids);
+        if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+            throw exception(SOP_NOT_EXISTS);
+        }
+    }
+
+    private void validateSopExists(Long id) {
+        if (sopMapper.selectById(id) == null) {
+            throw exception(SOP_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public SopDO getSop(Long id) {
+        return sopMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<SopDO> getSopPage(SopPageReqVO pageReqVO) {
+        return sopMapper.selectPage(pageReqVO);
+    }
+
+}

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

@@ -0,0 +1,57 @@
+package cn.iocoder.yudao.module.iscs.service.sop;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopUserPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopUserSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopUserDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import jakarta.validation.Valid;
+
+import java.util.List;
+
+/**
+ * SOP用户 Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface SopUserService extends IService<SopUserDO> {
+
+    /**
+     * 创建SOP用户
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createSopUser(@Valid SopUserSaveReqVO createReqVO);
+
+    /**
+     * 更新SOP用户
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateSopUser(@Valid SopUserSaveReqVO updateReqVO);
+
+    /**
+    * 批量删除SOP用户
+    *
+    * @param ids 编号
+    */
+    void deleteSopUserListByIds(List<Long> ids);
+
+    /**
+     * 获得SOP用户
+     *
+     * @param id 编号
+     * @return SOP用户
+     */
+    SopUserDO getSopUser(Long id);
+
+    /**
+     * 获得SOP用户分页
+     *
+     * @param pageReqVO 分页查询
+     * @return SOP用户分页
+     */
+    PageResult<SopUserDO> getSopUserPage(SopUserPageReqVO pageReqVO);
+
+}

+ 61 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopUserServiceImpl.java

@@ -0,0 +1,61 @@
+package cn.iocoder.yudao.module.iscs.service.sop;
+
+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.SopUserPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopUserSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopUserDO;
+import cn.iocoder.yudao.module.iscs.dal.mysql.sop.SopUserMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+
+/**
+ * SOP用户 Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+public class SopUserServiceImpl extends ServiceImpl<SopUserMapper, SopUserDO> implements SopUserService {
+
+    @Resource
+    private SopUserMapper sopUserMapper;
+
+    @Override
+    public Long createSopUser(SopUserSaveReqVO createReqVO) {
+        // 插入
+        SopUserDO sopUser = BeanUtils.toBean(createReqVO, SopUserDO.class);
+        sopUserMapper.insert(sopUser);
+
+        // 返回
+        return sopUser.getId();
+    }
+
+    @Override
+    public void updateSopUser(SopUserSaveReqVO updateReqVO) {
+        // 更新
+        SopUserDO updateObj = BeanUtils.toBean(updateReqVO, SopUserDO.class);
+        sopUserMapper.updateById(updateObj);
+    }
+
+    @Override
+        public void deleteSopUserListByIds(List<Long> ids) {
+        // 删除
+        sopUserMapper.deleteByIds(ids);
+        }
+
+    @Override
+    public SopUserDO getSopUser(Long id) {
+        return sopUserMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<SopUserDO> getSopUserPage(SopUserPageReqVO pageReqVO) {
+        return sopUserMapper.selectPage(pageReqVO);
+    }
+
+}

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

@@ -0,0 +1,57 @@
+package cn.iocoder.yudao.module.iscs.service.sop;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopWorkflowStepPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopWorkflowStepSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopWorkflowStepDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import jakarta.validation.Valid;
+
+import java.util.List;
+
+/**
+ * 工作流步骤 Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface SopWorkflowStepService extends IService<SopWorkflowStepDO> {
+
+    /**
+     * 创建工作流步骤
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createSopWorkflowStep(@Valid SopWorkflowStepSaveReqVO createReqVO);
+
+    /**
+     * 更新工作流步骤
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateSopWorkflowStep(@Valid SopWorkflowStepSaveReqVO updateReqVO);
+
+    /**
+    * 批量删除工作流步骤
+    *
+    * @param ids 编号
+    */
+    void deleteSopWorkflowStepListByIds(List<Long> ids);
+
+    /**
+     * 获得工作流步骤
+     *
+     * @param id 编号
+     * @return 工作流步骤
+     */
+    SopWorkflowStepDO getSopWorkflowStep(Long id);
+
+    /**
+     * 获得工作流步骤分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 工作流步骤分页
+     */
+    PageResult<SopWorkflowStepDO> getSopWorkflowStepPage(SopWorkflowStepPageReqVO pageReqVO);
+
+}

+ 62 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopWorkflowStepServiceImpl.java

@@ -0,0 +1,62 @@
+package cn.iocoder.yudao.module.iscs.service.sop;
+
+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.SopWorkflowStepPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopWorkflowStepSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopWorkflowStepDO;
+import cn.iocoder.yudao.module.iscs.dal.mysql.sop.SopWorkflowStepMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+
+/**
+ * 工作流步骤 Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+public class SopWorkflowStepServiceImpl extends ServiceImpl<SopWorkflowStepMapper, SopWorkflowStepDO> implements SopWorkflowStepService {
+
+    @Resource
+    private SopWorkflowStepMapper sopWorkflowStepMapper;
+
+    @Override
+    public Long createSopWorkflowStep(SopWorkflowStepSaveReqVO createReqVO) {
+        // 插入
+        SopWorkflowStepDO sopWorkflowStep = BeanUtils.toBean(createReqVO, SopWorkflowStepDO.class);
+        sopWorkflowStepMapper.insert(sopWorkflowStep);
+
+        // 返回
+        return sopWorkflowStep.getId();
+    }
+
+    @Override
+    public void updateSopWorkflowStep(SopWorkflowStepSaveReqVO updateReqVO) {
+        // 更新
+        SopWorkflowStepDO updateObj = BeanUtils.toBean(updateReqVO, SopWorkflowStepDO.class);
+        sopWorkflowStepMapper.updateById(updateObj);
+    }
+
+
+    @Override
+        public void deleteSopWorkflowStepListByIds(List<Long> ids) {
+        // 删除
+        sopWorkflowStepMapper.deleteByIds(ids);
+        }
+
+    @Override
+    public SopWorkflowStepDO getSopWorkflowStep(Long id) {
+        return sopWorkflowStepMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<SopWorkflowStepDO> getSopWorkflowStepPage(SopWorkflowStepPageReqVO pageReqVO) {
+        return sopWorkflowStepMapper.selectPage(pageReqVO);
+    }
+
+}

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

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