Просмотр исходного кода

新增任务日志记录 + 优化sql缓慢问题

车车 3 месяцев назад
Родитель
Сommit
78557a186d
17 измененных файлов с 211 добавлено и 41 удалено
  1. 2 2
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/workdesign/workflowworklog/WorkflowWorkLogController.java
  2. 6 3
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/workdesign/workflowworklog/vo/WorkflowWorkLogPageReqVO.java
  3. 22 4
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/workdesign/workflowworklog/vo/WorkflowWorkLogRespVO.java
  4. 1 1
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/workdesign/workflowworklog/vo/WorkflowWorkLogSaveReqVO.java
  5. 6 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/workdesign/workhandle/WorkflowWorkTicketController.java
  6. 3 5
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/mappoint/workdesign/WorkflowWorkLogService.java
  7. 113 7
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/mappoint/workdesign/WorkflowWorkLogServiceImpl.java
  8. 1 1
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/workdesign/WorkflowWorkLogDO.java
  9. 1 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/workdesign/WorkflowWorkLogMapper.java
  10. 1 1
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/enums/WorkTypeEnum.java
  11. 26 1
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/WorkflowWorkHandleServiceImpl.java
  12. 6 4
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/WorkflowWorkNodeServiceImpl.java
  13. 10 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/WorkflowWorkServiceImpl.java
  14. 10 9
      yudao-module-iscs/src/main/resources/mapper/workdesign/WorkflowWorkMapper.xml
  15. 1 1
      yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/usercharacteristic/UserCharacteristicController.java
  16. 1 1
      yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/usercharacteristic/UserCharacteristicServiceImpl.java
  17. 1 1
      yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/util/login/ArcSoftMothodUtil.java

+ 2 - 2
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/workdesign/workflowworklog/WorkflowWorkLogController.java

@@ -52,8 +52,8 @@ public class WorkflowWorkLogController {
     @Operation(summary = "获得作业流程操作日志分页")
     @PreAuthorize("@ss.hasPermission('isc:workflow-work-log:query')")
     public CommonResult<PageResult<WorkflowWorkLogRespVO>> getWorkflowWorkLogPage(@Valid WorkflowWorkLogPageReqVO pageReqVO) {
-        PageResult<WorkflowWorkLogDO> pageResult = workflowWorkLogService.getWorkflowWorkLogPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, WorkflowWorkLogRespVO.class));
+        PageResult<WorkflowWorkLogRespVO> pageResult = workflowWorkLogService.getWorkflowWorkLogPage(pageReqVO);
+        return success(pageResult);
     }
 
 

+ 6 - 3
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/workdesign/workflowworklog/vo/WorkflowWorkLogPageReqVO.java

@@ -1,10 +1,10 @@
 package cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowworklog.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;
@@ -13,6 +13,9 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @Data
 public class WorkflowWorkLogPageReqVO extends PageParam {
 
+    @Schema(description = "作业ID", example = "12724")
+    private String workId;
+
     @Schema(description = "作业/任务节点ID,关联作业主表或任务节点表主键", example = "12724")
     private String nodeId;
 

+ 22 - 4
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/workdesign/workflowworklog/vo/WorkflowWorkLogRespVO.java

@@ -1,11 +1,11 @@
 package cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowworklog.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 = "管理后台 - 作业流程操作日志 Response VO")
 @Data
@@ -56,4 +56,22 @@ public class WorkflowWorkLogRespVO {
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
+
+    /**
+     * 节点名称
+     */
+    private String nodeName;
+    /**
+     * 节点图标
+     */
+    private String nodeIcon;
+    /**
+     * 节点类型
+     */
+    private String type;
+    /**
+     * 节点状态:pending(未开始)、running(执行中)、approved(通过)、rejected(驳回)
+     */
+    private String approvalStatus;
+
 }

+ 1 - 1
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/workdesign/workflowworklog/vo/WorkflowWorkLogSaveReqVO.java

@@ -25,7 +25,7 @@ public class WorkflowWorkLogSaveReqVO {
     private String step;
 
     @Schema(description = "操作用户/任务负责人ID,关联用户表主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "9545")
-    private String userId;
+    private Long userId;
 
     @Schema(description = "操作用户/任务负责人昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
     private String nickName;

+ 6 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/workdesign/workhandle/WorkflowWorkTicketController.java

@@ -3,10 +3,12 @@ package cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workhandle;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workhandle.vo.*;
 import cn.iocoder.yudao.module.iscs.service.workdesign.WorkflowWorkHandleService;
+import cn.iocoder.yudao.module.iscs.service.workdesign.WorkflowWorkService;
 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.annotation.security.PermitAll;
 import jakarta.validation.Valid;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -24,6 +26,8 @@ public class WorkflowWorkTicketController {
 
     @Resource
     private WorkflowWorkHandleService workflowWorkHandleService;
+    @Resource
+    private WorkflowWorkService workflowWorkService;
 
     @PostMapping("/insertWorkTicket")
     @Operation(summary = "下发作业票")
@@ -62,12 +66,14 @@ public class WorkflowWorkTicketController {
         return success(workflowWorkHandleService.updatePointUnlock(vo));
     }
 
+    @PermitAll
     @PostMapping("/updateBackLock")
     @Operation(summary = "归还挂锁(任意时间)")
     public CommonResult<List<BackDataVO>> updateBackLock(@Valid @RequestBody List<HandleLockVO> list) {
         return success(workflowWorkHandleService.updateBackLock(list));
     }
 
+    @PermitAll
     @PostMapping("/updateLockBack")
     @Operation(summary = "归还钥匙(任意时间)")
     public CommonResult<BackDataVO> updateLockBack(@Valid @RequestBody KeyBackVO vo) {

+ 3 - 5
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/mappoint/workdesign/WorkflowWorkLogService.java

@@ -2,10 +2,9 @@ package cn.iocoder.yudao.module.iscs.dal.dataobject.mappoint.workdesign;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowworklog.vo.WorkflowWorkLogPageReqVO;
-import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowworklog.vo.WorkflowWorkLogSaveReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowworklog.vo.WorkflowWorkLogRespVO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.WorkflowWorkLogDO;
 import com.baomidou.mybatisplus.extension.service.IService;
-import jakarta.validation.Valid;
 
 import java.util.List;
 
@@ -19,10 +18,9 @@ public interface WorkflowWorkLogService extends IService<WorkflowWorkLogDO> {
     /**
      * 创建作业流程操作日志
      *
-     * @param createReqVO 创建信息
      * @return 编号
      */
-    Long createWorkflowWorkLog(@Valid WorkflowWorkLogSaveReqVO createReqVO);
+    Long createWorkflowWorkLog(Long nodeId, String step);
 
     /**
     * 批量删除作业流程操作日志
@@ -45,6 +43,6 @@ public interface WorkflowWorkLogService extends IService<WorkflowWorkLogDO> {
      * @param pageReqVO 分页查询
      * @return 作业流程操作日志分页
      */
-    PageResult<WorkflowWorkLogDO> getWorkflowWorkLogPage(WorkflowWorkLogPageReqVO pageReqVO);
+    PageResult<WorkflowWorkLogRespVO> getWorkflowWorkLogPage(WorkflowWorkLogPageReqVO pageReqVO);
 
 }

+ 113 - 7
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/mappoint/workdesign/WorkflowWorkLogServiceImpl.java

@@ -3,16 +3,24 @@ package cn.iocoder.yudao.module.iscs.dal.dataobject.mappoint.workdesign;
 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.workdesign.workflowworklog.vo.WorkflowWorkLogPageReqVO;
-import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowworklog.vo.WorkflowWorkLogSaveReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowworklog.vo.WorkflowWorkLogRespVO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.WorkflowWorkLogDO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.WorkflowWorkNodeDO;
 import cn.iocoder.yudao.module.iscs.dal.mysql.workdesign.WorkflowWorkLogMapper;
+import cn.iocoder.yudao.module.iscs.service.workdesign.WorkflowWorkNodeService;
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
+import cn.iocoder.yudao.module.system.service.user.AdminUserService;
 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.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
 
+import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
+
 /**
  * 作业流程操作日志 Service 实现类
  *
@@ -24,17 +32,104 @@ public class WorkflowWorkLogServiceImpl extends ServiceImpl<WorkflowWorkLogMappe
 
     @Resource
     private WorkflowWorkLogMapper workflowWorkLogMapper;
+    @Resource
+    private AdminUserService adminUserService;
+    @Resource
+    private WorkflowWorkNodeService workflowWorkNodeService;
 
     @Override
-    public Long createWorkflowWorkLog(WorkflowWorkLogSaveReqVO createReqVO) {
+    public Long createWorkflowWorkLog(Long nodeId, String step) {
+        if (nodeId == null) {
+            return null;
+        }
+        Long userId = getLoginUserId();
+        LocalDateTime now = LocalDateTime.now();
+
+        WorkflowWorkLogDO workflowWorkLogDO = new WorkflowWorkLogDO();
+        workflowWorkLogDO.setNodeId(nodeId);
+        workflowWorkLogDO.setUserId(userId);
+        workflowWorkLogDO.setStep(step);
+        // workflowWorkLogDO.setTaskStartTime();
+        workflowWorkLogDO.setTaskFinishTime(now);
+        if (userId != null) {
+            // 获取用户信息
+            AdminUserDO user = adminUserService.getUser(userId);
+            workflowWorkLogDO.setAvatar(user != null ? user.getAvatar() : "");
+            workflowWorkLogDO.setNickName(user != null ? user.getNickname() : "");
+        }
+        // 获取节点信息
+        WorkflowWorkNodeDO nodeDO = workflowWorkNodeService.getById(nodeId);
+        workflowWorkLogDO.setWorkId(nodeDO.getWorkId());
+        // 开始初始化
+        String content = initContent(workflowWorkLogDO, nodeDO);
+        workflowWorkLogDO.setTaskContent(content);
         // 插入
-        WorkflowWorkLogDO workflowWorkLog = BeanUtils.toBean(createReqVO, WorkflowWorkLogDO.class);
-        workflowWorkLogMapper.insert(workflowWorkLog);
+        workflowWorkLogMapper.insert(workflowWorkLogDO);
 
         // 返回
-        return workflowWorkLog.getId();
+        return workflowWorkLogDO.getId();
+    }
+
+    private String initContent(WorkflowWorkLogDO workflowWorkLogDO, WorkflowWorkNodeDO nodeDO) {
+        String content = "";
+        LocalDateTime taskFinishTime = workflowWorkLogDO.getTaskFinishTime();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        // 创建作业-createJob
+        if ("createJob".equals(nodeDO.getType())) {
+            content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "已启动";
+        }
+
+        // 确认-confirm
+        if ("confirm".equals(nodeDO.getType())) {
+            content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "已审批";
+        }
+
+        // 审核-review
+        if ("review".equals(nodeDO.getType())) {
+            content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "已审批";
+        }
+
+        // 录入信息-inputInfo
+        if ("inputInfo".equals(nodeDO.getType())) {
+            content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "已审批";
+        }
+
+        // 隔离/方案-isolation
+        if ("isolation".equals(nodeDO.getType())) {
+            if ("2".equals(nodeDO.getNodeProgress())) {
+                content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "取锁完成";
+            }
+            if ("3".equals(nodeDO.getNodeProgress())) {
+                content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "上锁完成/归还钥匙完成";
+            }
+            // 下面的会覆盖上面,顺序重要
+            if ("approved".equals(nodeDO.getApprovalStatus())) {
+                content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "共锁完成";
+            }
+        }
+
+        // 解除隔离-releaseIsolation
+        if ("releaseIsolation".equals(nodeDO.getType())) {
+            if ("2".equals(nodeDO.getNodeProgress())) {
+                content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "解除共锁完成";
+            }
+            if ("3".equals(nodeDO.getNodeProgress())) {
+                content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "解锁完成";
+            }
+            // 下面的会覆盖上面,顺序重要
+            if ("approved".equals(nodeDO.getApprovalStatus())) {
+                content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "归还钥匙完成";
+            }
+        }
+
+        // 完成/结束-complete
+        if ("complete".equals(nodeDO.getType())) {
+            content = nodeDO.getNodeName() + ":" + taskFinishTime.format(formatter) + "任务" + nodeDO.getNodeName() + "已完成";
+        }
+        return content;
     }
 
+
     @Override
     public void deleteWorkflowWorkLogListByIds(List<Long> ids) {
         // 删除
@@ -47,8 +142,19 @@ public class WorkflowWorkLogServiceImpl extends ServiceImpl<WorkflowWorkLogMappe
     }
 
     @Override
-    public PageResult<WorkflowWorkLogDO> getWorkflowWorkLogPage(WorkflowWorkLogPageReqVO pageReqVO) {
-        return workflowWorkLogMapper.selectPage(pageReqVO);
+    public PageResult<WorkflowWorkLogRespVO> getWorkflowWorkLogPage(WorkflowWorkLogPageReqVO pageReqVO) {
+        PageResult<WorkflowWorkLogDO> workflowWorkLogDOPageResult = workflowWorkLogMapper.selectPage(pageReqVO);
+        PageResult<WorkflowWorkLogRespVO> bean = BeanUtils.toBean(workflowWorkLogDOPageResult, WorkflowWorkLogRespVO.class);
+
+        List<WorkflowWorkLogRespVO> list = bean.getList();
+        for (WorkflowWorkLogRespVO vo : list) {
+            WorkflowWorkNodeDO nodeDO = workflowWorkNodeService.getById(vo.getNodeId());
+            vo.setType(nodeDO.getType());
+            vo.setNodeIcon(nodeDO.getNodeIcon());
+            vo.setNodeName(nodeDO.getNodeName());
+            vo.setApprovalStatus(nodeDO.getApprovalStatus());
+        }
+        return bean;
     }
 
 }

+ 1 - 1
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/workdesign/WorkflowWorkLogDO.java

@@ -47,7 +47,7 @@ public class WorkflowWorkLogDO extends BaseDO {
     /**
      * 操作用户/任务负责人ID,关联用户表主键
      */
-    private String userId;
+    private Long userId;
     /**
      * 操作用户/任务负责人昵称
      */

+ 1 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/workdesign/WorkflowWorkLogMapper.java

@@ -17,6 +17,7 @@ public interface WorkflowWorkLogMapper extends BaseMapperX<WorkflowWorkLogDO> {
 
     default PageResult<WorkflowWorkLogDO> selectPage(WorkflowWorkLogPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<WorkflowWorkLogDO>()
+                .eqIfPresent(WorkflowWorkLogDO::getWorkId, reqVO.getWorkId())
                 .eqIfPresent(WorkflowWorkLogDO::getNodeId, reqVO.getNodeId())
                 .eqIfPresent(WorkflowWorkLogDO::getParentNodeId, reqVO.getParentNodeId())
                 .eqIfPresent(WorkflowWorkLogDO::getStep, reqVO.getStep())

+ 1 - 1
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/enums/WorkTypeEnum.java

@@ -12,7 +12,7 @@ public enum WorkTypeEnum {
     INPUTINFO("inputInfo"),                // 录入信息
     ISOLATION("isolation"),                // 隔离/方案
     RELEASEISOLATION("releaseIsolation"),  // 解除隔离
-    RETURNLOCK("returnLock"),              // 还锁
+    // RETURNLOCK("returnLock"),              // 还锁
     COMPLETE("complete");                  // 完成/结束
 
 

+ 26 - 1
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/WorkflowWorkHandleServiceImpl.java

@@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowworknode
 import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workhandle.vo.*;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.key.KeyDO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.lock.LockDO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.mappoint.workdesign.WorkflowWorkLogService;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.*;
 import cn.iocoder.yudao.module.iscs.enums.WorkTypeEnum;
 import cn.iocoder.yudao.module.iscs.service.key.KeyService;
@@ -56,6 +57,8 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
     private LockService iscsLockService;
     @Autowired
     private WorkflowWorkPointService workflowWorkPointService;
+    @Autowired
+    private WorkflowWorkLogService workflowWorkLogService;
 
     @Transactional
     @Override
@@ -127,6 +130,9 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
                         .eq(WorkflowWorkNodeDO::getId, nodeDO.getId())
                         .set(WorkflowWorkNodeDO::getNodeProgress, "2"));
                 workflowWorkNodeService.sendMessageToAdmin(nodeDO.getId());
+
+                // isc_workflow_work_log日志记录
+                workflowWorkLogService.createWorkflowWorkLog(nodeDO.getId(), "1");
             }
         }
 
@@ -139,6 +145,9 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
                         .eq(WorkflowWorkNodeDO::getId, nodeDO.getId())
                         .set(WorkflowWorkNodeDO::getNodeProgress, "3"));
                 workflowWorkNodeService.sendMessageToAdmin(nodeDO.getId());
+
+                // isc_workflow_work_log日志记录
+                workflowWorkLogService.createWorkflowWorkLog(nodeDO.getId(), "2");
             }
         }
         return true;
@@ -234,6 +243,9 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
                                 .set(WorkflowWorkTicketKeyDO::getKeyStatus, "2")
                                 .set(WorkflowWorkTicketKeyDO::getToHardwareCode, keyBackVO.getHardwareCode())
                                 .set(WorkflowWorkTicketKeyDO::getGiveBackTime, now));
+
+                        // isc_workflow_work_log日志记录
+                        workflowWorkLogService.createWorkflowWorkLog(nodeDO.getId(), "2");
                     }
                 }
             }
@@ -292,6 +304,9 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
             approvalNodeReqVO.setApprovalStatus("approved");
             approvalNodeReqVO.setApprovalOpinion("approved");
             workflowWorkService.updateNodeApproval(approvalNodeReqVO);
+
+            // isc_workflow_work_log日志记录
+            workflowWorkLogService.createWorkflowWorkLog(vo.getNodeId(), null);
         }
         return true;
     }
@@ -329,6 +344,10 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
                 .eq(WorkflowWorkNodeDO::getId, nodeDO.getId())
                 .set(WorkflowWorkNodeDO::getNodeProgress, "2"));
         workflowWorkNodeService.sendMessageToAdmin(nodeDO.getId());
+
+        // isc_workflow_work_log日志记录
+        workflowWorkLogService.createWorkflowWorkLog(vo.getNodeId(), "1");
+
         return true;
     }
 
@@ -433,6 +452,8 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
                                 .set(WorkflowWorkTicketKeyDO::getKeyStatus, "2")
                                 .set(WorkflowWorkTicketKeyDO::getToHardwareCode, keyBackVO.getHardwareCode())
                                 .set(WorkflowWorkTicketKeyDO::getGiveBackTime, now));
+                        // isc_workflow_work_log日志记录
+                        workflowWorkLogService.createWorkflowWorkLog(nodeId, "1");
                     }
                 }
             }
@@ -491,6 +512,9 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
         approvalNodeReqVO.setApprovalOpinion("approved");
         workflowWorkService.updateNodeApproval(approvalNodeReqVO);
 
+        // isc_workflow_work_log日志记录
+        workflowWorkLogService.createWorkflowWorkLog(nodeId, null);
+
         return true;
     }
 
@@ -608,7 +632,8 @@ public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService
         // 开始查询
         WorkflowWorkNodeDO nodeDO = workflowWorkNodeService.getById(nodeId);
         Assert.notNull(nodeDO, "任务不存在");
-        WorkflowWorkTicketDO ticketDO = ticketService.getOne(Wrappers.<WorkflowWorkTicketDO>lambdaQuery().eq(WorkflowWorkTicketDO::getNodeId, nodeId));
+        WorkflowWorkTicketDO ticketDO = ticketService.getOne(Wrappers.<WorkflowWorkTicketDO>lambdaQuery()
+                .eq(WorkflowWorkTicketDO::getNodeId, nodeDO.getId()));
         WorkflowWorkTicketRespVO bean = BeanUtils.toBean(ticketDO, WorkflowWorkTicketRespVO.class);
         return bean;
     }

+ 6 - 4
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/WorkflowWorkNodeServiceImpl.java

@@ -246,7 +246,7 @@ public class WorkflowWorkNodeServiceImpl extends ServiceImpl<WorkflowWorkNodeMap
             try {
                 sendByType(nodeDO);
             } catch (Exception e) {
-                log.error("发送异常---------------" + nodeDO.getId() + "----" + e);
+                log.error("发送异常---------------" + nodeDO.getId() + "----" + e.getMessage() + "----" + Arrays.toString(e.getStackTrace()));
             }
 
         }
@@ -348,7 +348,9 @@ public class WorkflowWorkNodeServiceImpl extends ServiceImpl<WorkflowWorkNodeMap
             if (StringUtils.isNotBlank(nodeDO.getIsolationNodeUuid())) {
                 String nodeProgress = nodeDO.getNodeProgress();
                 // 先找到对应的上锁node
-                WorkflowWorkNodeDO parentNode = getOne(Wrappers.<WorkflowWorkNodeDO>lambdaQuery().eq(WorkflowWorkNodeDO::getUuid, nodeDO.getIsolationNodeUuid()));
+                WorkflowWorkNodeDO parentNode = getOne(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
+                        .eq(WorkflowWorkNodeDO::getWorkId, nodeDO.getWorkId())
+                        .eq(WorkflowWorkNodeDO::getUuid, nodeDO.getIsolationNodeUuid()));
                 // 再找关联的人员信息
                 List<WorkflowWorkNodeUserDO> nodeUserDOList = workflowWorkNodeUserService.list(Wrappers.<WorkflowWorkNodeUserDO>lambdaQuery().eq(WorkflowWorkNodeUserDO::getNodeId, parentNode.getId()));
                 // 共锁人
@@ -390,7 +392,7 @@ public class WorkflowWorkNodeServiceImpl extends ServiceImpl<WorkflowWorkNodeMap
             }
         }
 
-        if (nodeDO.getType().equals(WorkTypeEnum.RETURNLOCK.value)) {
+        /*if (nodeDO.getType().equals(WorkTypeEnum.RETURNLOCK.value)) {
             // 还锁
             if (nodeDO.getWorkerUserId() != null) {
                 AdminUserDO user = adminUserService.getUser(nodeDO.getWorkerUserId());
@@ -400,7 +402,7 @@ public class WorkflowWorkNodeServiceImpl extends ServiceImpl<WorkflowWorkNodeMap
                     sendMessage(nodeDO, user.getId(), "MESSAGE_010", templateParams);
                 }
             }
-        }
+        }*/
 
         if (nodeDO.getType().equals(WorkTypeEnum.COMPLETE.value)) {
             // 完成/结束

+ 10 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/WorkflowWorkServiceImpl.java

@@ -15,6 +15,7 @@ import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workhandle.vo.Wo
 import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workhandle.vo.WorkflowWorkTicketKeyRespVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workhandle.vo.WorkflowWorkTicketLockRespVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workhandle.vo.WorkflowWorkTicketRespVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.mappoint.workdesign.WorkflowWorkLogService;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.*;
 import cn.iocoder.yudao.module.iscs.dal.mysql.workdesign.WorkflowWorkMapper;
 import cn.iocoder.yudao.module.iscs.utils.MonthTimeUtil;
@@ -65,6 +66,9 @@ public class WorkflowWorkServiceImpl extends ServiceImpl<WorkflowWorkMapper, Wor
     private WorkflowWorkTicketKeyService workflowWorkTicketKeyService;
     @Resource
     private WorkflowWorkTicketService workflowWorkTicketService;
+    @Resource
+    private WorkflowWorkLogService workflowWorkLogService;
+
 
     @Transactional
     @Override
@@ -285,8 +289,12 @@ public class WorkflowWorkServiceImpl extends ServiceImpl<WorkflowWorkMapper, Wor
                             .set(WorkflowWorkNodeDO::getApprovalStatus, "approved")
                             .set(WorkflowWorkNodeDO::getStartTime, LocalDateTime.now())
                             .set(WorkflowWorkNodeDO::getEndTime, LocalDateTime.now()));
+
+                    // isc_workflow_work_log日志记录
+                    workflowWorkLogService.createWorkflowWorkLog(nodeDO.getId(), null);
                     // 发送消息
                     workflowWorkNodeService.sendMessageToAdmin(nodeDO.getId());
+
                     // 开启第二(审批)节点
                     workflowWorkNodeService.update(Wrappers.<WorkflowWorkNodeDO>lambdaUpdate()
                             .eq(WorkflowWorkNodeDO::getWorkId, vo.getWorkId())
@@ -410,6 +418,8 @@ public class WorkflowWorkServiceImpl extends ServiceImpl<WorkflowWorkMapper, Wor
                     .set(WorkflowWorkNodeDO::getEndTime, now)
             );
 
+            // isc_workflow_work_log日志记录
+            workflowWorkLogService.createWorkflowWorkLog(nodeDO.getId(), null);
 
             // 开启后面的节点
             if (StringUtils.isNotBlank(nodeDO.getChildrenUuid())) {

+ 10 - 9
yudao-module-iscs/src/main/resources/mapper/workdesign/WorkflowWorkMapper.xml

@@ -108,11 +108,11 @@
             AND work_node.approval_status = "running"
             AND (
             -- 条件1:节点自身负责人ID匹配
-            work_node.worker_user_id = #{vo.loginUserId}
+            work_node.worker_user_id = #{loginUserId}
             -- 条件2:关联表中上锁人ID匹配
-            OR work_node.lock_person = #{vo.loginUserId}
+            OR work_node.lock_person = #{loginUserId}
             -- 条件3:关联表中公锁人ID匹配
-            OR JSON_CONTAINS(CAST(work_node.colock_persons AS JSON), CAST(#{vo.loginUserId} AS JSON), '$') )
+            OR JSON_CONTAINS(CAST(work_node.colock_persons AS JSON), CAST(#{loginUserId} AS JSON), '$') )
         </where>
     </select>
     <select id="getMyCompletedCount" resultType="java.lang.Long">
@@ -126,11 +126,11 @@
             AND work_node.end_time &gt;= #{startTime} AND work_node.end_time &lt;= #{endTime}
             AND (
             -- 条件1:节点自身负责人ID匹配
-            work_node.worker_user_id = #{vo.loginUserId}
+            work_node.worker_user_id = #{loginUserId}
             -- 条件2:关联表中上锁人ID匹配
-            OR work_node.lock_person = #{vo.loginUserId}
+            OR work_node.lock_person = #{loginUserId}
             -- 条件3:关联表中公锁人ID匹配
-            OR JSON_CONTAINS(CAST(work_node.colock_persons AS JSON), CAST(#{vo.loginUserId} AS JSON), '$') )
+            OR JSON_CONTAINS(CAST(work_node.colock_persons AS JSON), CAST(#{loginUserId} AS JSON), '$') )
         </where>
 
     </select>
@@ -196,15 +196,16 @@
         isc_workflow_work ww
         <where>
             ww.deleted = b'0'
-            AND ( EXISTS ( SELECT 1 FROM isc_workflow_work_node wwn WHERE wwn.work_id = ww.id AND wwn.deleted = b'0'
+            AND ( EXISTS ( SELECT 1 FROM isc_workflow_work_node work_node
+            WHERE work_node.work_id = ww.id
+            AND work_node.deleted = b'0'
             AND (
             -- 条件1:节点自身负责人ID匹配
             work_node.worker_user_id = #{vo.loginUserId}
             -- 条件2:关联表中上锁人ID匹配
             OR work_node.lock_person = #{vo.loginUserId}
             -- 条件3:关联表中公锁人ID匹配
-            OR JSON_CONTAINS(CAST(work_node.colock_persons AS JSON), CAST(#{vo.loginUserId} AS JSON), '$') )
-            )
+            OR JSON_CONTAINS(CAST(work_node.colock_persons AS JSON), CAST(#{vo.loginUserId} AS JSON), '$') ) )
             -- 我的创建
             OR ww.creator = #{vo.loginUserId} )
             <if test="vo.key != null and vo.key.trim != ''">

+ 1 - 1
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/usercharacteristic/UserCharacteristicController.java

@@ -54,7 +54,7 @@ public class UserCharacteristicController {
 
     @GetMapping("/getUserCharacteristicPage")
     @Operation(summary = "获得用户特征表(指纹、面部)分页")
-    @PreAuthorize("@ss.hasPermission('iscs:user-characteristic:query')")
+    // @PreAuthorize("@ss.hasPermission('iscs:user-characteristic:query')")
     public CommonResult<PageResult<UserCharacteristicRespVO>> getUserCharacteristicPage(@Valid UserCharacteristicPageReqVO pageReqVO) {
         PageResult<UserCharacteristicDO> pageResult = userCharacteristicService.getUserCharacteristicPage(pageReqVO);
         return success(BeanUtils.toBean(pageResult, UserCharacteristicRespVO.class));

+ 1 - 1
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/usercharacteristic/UserCharacteristicServiceImpl.java

@@ -237,7 +237,7 @@ public class UserCharacteristicServiceImpl extends ServiceImpl<UserCharacteristi
         characteristicDO.setImageUrl(faceCutVO.getImageUrl());
         characteristicDO.setImagePath(faceCutVO.getImagePath());
         save(characteristicDO);
-        return null;
+        return faceCutVO;
     }
 
 }

+ 1 - 1
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/util/login/ArcSoftMothodUtil.java

@@ -99,7 +99,7 @@ public class ArcSoftMothodUtil {
     /**
      * 图片人脸检测
      */
-    public static FaceCutVO saveArcData( String imageUrl, String imagePath) {
+    public static FaceCutVO saveArcData(String imageUrl, String imagePath) {
         int errorCode;
         // 3--------------------------开始读取照片的特征值-------------------------------
         ImageInfo imageInfo = getRGBData(new File(imagePath));