diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProcessControlExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProcessControlExecutor.java index 107cfc4..dafcb64 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProcessControlExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProcessControlExecutor.java @@ -314,32 +314,27 @@ public class EvalProcessControlExecutor implements EvalProcessControlApi { assertPreNodesCompleted(project); EvalProcessControlEntity entity = evalProcessControlGateway.getByProjectId(projectId, project.getOrgId()); - if (entity != null && entity.getArchiveFlag() != null && entity.getArchiveFlag() == 1) { + if (entity == null) { + throw new BizException(ErrorCode.DATA_NOT_EXIST); + } + if (entity.getArchiveFlag() != null && entity.getArchiveFlag() == 1) { throw new BizException(ErrorCode.EVAL_ARCHIVE_ALREADY_DONE); } // 验证签字是否完成 - assertSignTaskCompleted(projectId, project.getOrgId()); - - // 验证归档交接单是否已生成 - if (entity == null || !"created".equals(entity.getHandoverFormStatus())) { - throw new BizException(ErrorCode.EVAL_HANDOVER_FORM_NOT_CREATED); + if (!SignatureTaskStatusEnum.COMPLETED.getCode().equals(entity.getReviewerSignatureTaskStatus())) { + throw new BizException(ErrorCode.EVAL_ARCHIVE_SIGN_INCOMPLETE); } - if (entity == null) { - entity = new EvalProcessControlEntity(); - entity.setOrgId(project.getOrgId()); - entity.setProjectId(projectId); - } + entity = new EvalProcessControlEntity(); + entity.setId(entity.getId()); + entity.setOrgId(project.getOrgId()); + entity.setProjectId(projectId); entity.setPrecheckPassFlag(1); entity.setArchiveFlag(1); entity.setStatusCode(3); evalProjectNodeSupport.fillNodeStatus(3, entity); entity.setControlTime(LocalDateTime.now()); - if (entity.getId() == null) { - entity = evalProcessControlGateway.save(entity); - } else { - entity = evalProcessControlGateway.modify(entity); - } + entity = evalProcessControlGateway.modify(entity); EvalReportEntity report = buildReport(project); evalReportGateway.saveInternal(report); diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalSignTaskExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalSignTaskExecutor.java index 7c051a9..9a6b45e 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalSignTaskExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalSignTaskExecutor.java @@ -1,7 +1,5 @@ package org.qinan.safetyeval.app.executor.institution; -import com.alibaba.fastjson2.JSON; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.qinan.safetyeval.app.convertor.EvalSignTaskCmdConvertor; import org.qinan.safetyeval.client.api.institution.EvalSignTaskApi; @@ -15,7 +13,6 @@ import org.qinan.safetyeval.client.dto.institution.EvalSignTaskPageQuery; import org.qinan.safetyeval.client.dto.institution.EvalSignTaskSaveCmd; import org.qinan.safetyeval.domain.constant.*; import org.qinan.safetyeval.domain.entity.EvalSignTaskEntity; -import org.qinan.safetyeval.domain.entity.SafetyMessageEntity; import org.qinan.safetyeval.domain.exception.BizException; import org.qinan.safetyeval.domain.exception.ErrorCode; import org.qinan.safetyeval.domain.gateway.SafetyMessageGateway; @@ -30,11 +27,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.time.LocalDateTime; import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import java.util.stream.Collectors; @Service @@ -53,8 +46,6 @@ public class EvalSignTaskExecutor implements EvalSignTaskApi { @Autowired private SafetyMessageGateway safetyMessageGateway; @Autowired - private EvalProjectMemberMapper evalProjectMemberMapper; - @Autowired private EvalRiskParticipantMapper evalRiskParticipantMapper; @Autowired private EvalInternalReviewMapper evalInternalReviewMapper; @@ -69,37 +60,8 @@ public class EvalSignTaskExecutor implements EvalSignTaskApi { EvalSignTaskEntity entity = evalSignTaskCmdConvertor.convertSaveCmdToE(cmd); entity.setOrgId(orgId); EvalSignTaskEntity result = evalSignTaskDomainService.add(entity); - // todo 消息发送 - SafetyMessageEntity safetyMessageEntity = new SafetyMessageEntity(); - safetyMessageEntity.setSendName(MsgConstant.MSG_TYPE_SYSTEM); - safetyMessageEntity.setSendId(MsgConstant.MSG_TYPE_SYSTEM_ID); - safetyMessageEntity.setSendType(NoticeTypeEnum.SIGN_TASK_NOTICE.getMsg()); - Map params = new HashMap<>(); - params.put("title", cmd.getTaskTitle()); - Map fillMap = new HashMap<>(); - ProjectStageEnum projectStageEnum = ProjectStageEnum.fromNode(cmd.getNodeCode()); - if (projectStageEnum == null) { - throw new BizException(ErrorCode.EVAL_PROJECT_NODE_NOT_FOUND); - } - fillMap.put("fileName", projectStageEnum.getMsg()); - fillMap.put("version", "v1"); - if (ProjectStageEnum.RISK_ANALYSIS.getMsg().equals(cmd.getNodeCode())) { - fillMap.put("role", ""); - } else { - // 查询角色 - List evalProjectMemberDOS = evalProjectMemberMapper.selectList(new LambdaQueryWrapper() - .select(EvalProjectMemberDO::getRole) - .eq(EvalProjectMemberDO::getProjectId, cmd.getProjectId()) - .eq(EvalProjectMemberDO::getPersonnelId, cmd.getSignerPersonnelId()) - .last("limit 1")); - fillMap.put("role", ProjectStageEnum.fromVals(evalProjectMemberDOS.get(0).getRole())); - } - params.put("content", NoticeTypeEnum.SIGN_TASK_NOTICE.fillTemplate(fillMap)); - safetyMessageEntity.setSendContent(JSON.toJSONString(params)); - safetyMessageEntity.setReceiveId(Long.valueOf(cmd.getSignerPersonnelId())); - safetyMessageEntity.setSendState(0); - safetyMessageEntity.setCreateTime(LocalDateTime.now()); - safetyMessageGateway.save(safetyMessageEntity); + // 发送签字任务通知消息 + safetyMessageGateway.saveSignMsg(cmd.getTaskTitle(), cmd.getNodeCode(), cmd.getProjectId(), cmd.getSignerPersonnelId()); return SingleResponse.success(evalSignTaskCmdConvertor.convertEToCO(result)); } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/MessageSendStateEnum.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/MessageSendStateEnum.java new file mode 100644 index 0000000..99b23be --- /dev/null +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/MessageSendStateEnum.java @@ -0,0 +1,18 @@ +package org.qinan.safetyeval.domain.constant; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 消息发送状态枚举 + */ +@AllArgsConstructor +@Getter +public enum MessageSendStateEnum { + + UNSENT(0, "未发送"), + SENT(1, "已发送"); + + private final Integer code; + private final String desc; +} diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/MsgConstant.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/MsgConstant.java index e265d8a..a81aa91 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/MsgConstant.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/MsgConstant.java @@ -3,4 +3,11 @@ package org.qinan.safetyeval.domain.constant; public interface MsgConstant { String MSG_TYPE_SYSTEM = "system"; Long MSG_TYPE_SYSTEM_ID = 0L; + + /** 签字任务默认版本号 */ + String SIGN_TASK_DEFAULT_VERSION = "v1"; + + /** 消息内容JSON字段名 */ + String MSG_CONTENT_KEY_TITLE = "title"; + String MSG_CONTENT_KEY_CONTENT = "content"; } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/exception/ErrorCode.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/exception/ErrorCode.java index 1458797..f96b236 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/exception/ErrorCode.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/exception/ErrorCode.java @@ -10,6 +10,8 @@ package org.qinan.safetyeval.domain.exception; */ public enum ErrorCode { + + DATA_NOT_EXIST("01-02-101", "数据不存在"), // ---- 部门 ---- ORG_DEPARTMENT_NOT_FOUND("01-02-001", "部门不存在"), diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/SafetyMessageGateway.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/SafetyMessageGateway.java index 9a56f15..c61f201 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/SafetyMessageGateway.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/SafetyMessageGateway.java @@ -11,6 +11,26 @@ import org.qinan.safetyeval.domain.query.SafetyMessageQuery; */ public interface SafetyMessageGateway { + /** + * 发送签字任务通知消息 + * + * @param taskTitle 任务标题 + * @param nodeCode 节点编码 + * @param projectId 项目ID + * @param signerPersonnelId 签字人员ID + */ + void saveSignMsg(String taskTitle, String nodeCode, String projectId, String signerPersonnelId); + + /** + * 发送签字任务通知消息 + * + * @param taskTitle 任务标题 + * @param nodeCode 节点编码 + * @param projectId 项目ID + * @param signerPersonnelId 签字人员ID + */ + void saveSpecSignMsg(String taskTitle, String nodeCode, String projectId, String signerPersonnelId); + SafetyMessageEntity save(SafetyMessageEntity entity); SafetyMessageEntity get(Long id); diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/SafetyMessageGatewayImpl.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/SafetyMessageGatewayImpl.java index 494a0b8..102c7e1 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/SafetyMessageGatewayImpl.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/SafetyMessageGatewayImpl.java @@ -1,20 +1,33 @@ package org.qinan.safetyeval.infrastructure.gatewayimpl; +import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.qinan.safetyeval.domain.constant.MessageSendStateEnum; +import org.qinan.safetyeval.domain.constant.MsgConstant; +import org.qinan.safetyeval.domain.constant.NoticeTypeEnum; +import org.qinan.safetyeval.domain.constant.ProjectStageEnum; import org.qinan.safetyeval.domain.entity.SafetyMessageEntity; +import org.qinan.safetyeval.domain.exception.BizException; +import org.qinan.safetyeval.domain.exception.ErrorCode; import org.qinan.safetyeval.domain.gateway.SafetyMessageGateway; import org.qinan.safetyeval.domain.query.PageResult; import org.qinan.safetyeval.domain.query.SafetyMessageQuery; import org.qinan.safetyeval.infrastructure.convertor.SafetyMessageDoConvertor; +import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectMemberDO; import org.qinan.safetyeval.infrastructure.dataobject.SafetyMessageDO; +import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMemberMapper; import org.qinan.safetyeval.infrastructure.mapper.SafetyMessageMapper; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 消息中心 Gateway 实现 @@ -28,6 +41,87 @@ public class SafetyMessageGatewayImpl implements SafetyMessageGateway { private SafetyMessageMapper safetyMessageMapper; @Resource private SafetyMessageDoConvertor safetyMessageDoConvertor; + @Resource + private EvalProjectMemberMapper evalProjectMemberMapper; + + @Override + public void saveSignMsg(String taskTitle, String nodeCode, String projectId, String signerPersonnelId) { + SafetyMessageEntity safetyMessageEntity = new SafetyMessageEntity(); + safetyMessageEntity.setSendName(MsgConstant.MSG_TYPE_SYSTEM); + safetyMessageEntity.setSendId(MsgConstant.MSG_TYPE_SYSTEM_ID); + safetyMessageEntity.setSendType(NoticeTypeEnum.SIGN_TASK_NOTICE.getMsg()); + + Map params = new HashMap<>(); + params.put(MsgConstant.MSG_CONTENT_KEY_TITLE, taskTitle); + + Map fillMap = new HashMap<>(); + ProjectStageEnum projectStageEnum = ProjectStageEnum.fromNode(nodeCode); + if (projectStageEnum == null) { + throw new BizException(ErrorCode.EVAL_PROJECT_NODE_NOT_FOUND); + } + fillMap.put("fileName", projectStageEnum.getMsg()); + fillMap.put("version", MsgConstant.SIGN_TASK_DEFAULT_VERSION); + + if (projectStageEnum == ProjectStageEnum.RISK_ANALYSIS) { + fillMap.put("role", ""); + } else { + // 查询角色 + List evalProjectMemberDOS = evalProjectMemberMapper.selectList(new LambdaQueryWrapper() + .select(EvalProjectMemberDO::getRole) + .eq(EvalProjectMemberDO::getProjectId, projectId) + .eq(EvalProjectMemberDO::getPersonnelId, signerPersonnelId) + .last("limit 1")); + fillMap.put("role", ProjectStageEnum.fromVals(evalProjectMemberDOS.get(0).getRole())); + } + + params.put(MsgConstant.MSG_CONTENT_KEY_CONTENT, NoticeTypeEnum.SIGN_TASK_NOTICE.fillTemplate(fillMap)); + safetyMessageEntity.setSendContent(JSON.toJSONString(params)); + safetyMessageEntity.setReceiveId(Long.valueOf(signerPersonnelId)); + safetyMessageEntity.setSendState(MessageSendStateEnum.UNSENT.getCode()); + safetyMessageEntity.setCreateTime(LocalDateTime.now()); + + save(safetyMessageEntity); + } + + + @Override + public void saveSpecSignMsg(String taskTitle, String nodeCode, String projectId, String signerPersonnelId) { + SafetyMessageEntity safetyMessageEntity = new SafetyMessageEntity(); + safetyMessageEntity.setSendName(MsgConstant.MSG_TYPE_SYSTEM); + safetyMessageEntity.setSendId(MsgConstant.MSG_TYPE_SYSTEM_ID); + safetyMessageEntity.setSendType(NoticeTypeEnum.SIGN_TASK_NOTICE.getMsg()); + + Map params = new HashMap<>(); + params.put(MsgConstant.MSG_CONTENT_KEY_TITLE, taskTitle); + + Map fillMap = new HashMap<>(); + ProjectStageEnum projectStageEnum = ProjectStageEnum.fromNode(nodeCode); + if (projectStageEnum == null) { + throw new BizException(ErrorCode.EVAL_PROJECT_NODE_NOT_FOUND); + } + fillMap.put("fileName", projectStageEnum.getMsg()); + fillMap.put("version", MsgConstant.SIGN_TASK_DEFAULT_VERSION); + + if (projectStageEnum == ProjectStageEnum.RISK_ANALYSIS) { + fillMap.put("role", ""); + } else { + // 查询角色 + List evalProjectMemberDOS = evalProjectMemberMapper.selectList(new LambdaQueryWrapper() + .select(EvalProjectMemberDO::getRole) + .eq(EvalProjectMemberDO::getProjectId, projectId) + .eq(EvalProjectMemberDO::getPersonnelId, signerPersonnelId) + .last("limit 1")); + fillMap.put("role", ProjectStageEnum.fromVals(evalProjectMemberDOS.get(0).getRole())); + } + + params.put(MsgConstant.MSG_CONTENT_KEY_CONTENT, NoticeTypeEnum.SIGN_TASK_NOTICE.fillTemplate(fillMap)); + safetyMessageEntity.setSendContent(JSON.toJSONString(params)); + safetyMessageEntity.setReceiveId(Long.valueOf(signerPersonnelId)); + safetyMessageEntity.setSendState(MessageSendStateEnum.UNSENT.getCode()); + safetyMessageEntity.setCreateTime(LocalDateTime.now()); + + save(safetyMessageEntity); + } @Override public SafetyMessageEntity save(SafetyMessageEntity entity) {