luotaiqian 2026-07-24 15:40:24 +08:00
parent 5cb71429cd
commit 2bae6d28a7
7 changed files with 154 additions and 56 deletions

View File

@ -314,32 +314,27 @@ public class EvalProcessControlExecutor implements EvalProcessControlApi {
assertPreNodesCompleted(project); assertPreNodesCompleted(project);
EvalProcessControlEntity entity = evalProcessControlGateway.getByProjectId(projectId, project.getOrgId()); 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); throw new BizException(ErrorCode.EVAL_ARCHIVE_ALREADY_DONE);
} }
// 验证签字是否完成 // 验证签字是否完成
assertSignTaskCompleted(projectId, project.getOrgId()); if (!SignatureTaskStatusEnum.COMPLETED.getCode().equals(entity.getReviewerSignatureTaskStatus())) {
throw new BizException(ErrorCode.EVAL_ARCHIVE_SIGN_INCOMPLETE);
// 验证归档交接单是否已生成
if (entity == null || !"created".equals(entity.getHandoverFormStatus())) {
throw new BizException(ErrorCode.EVAL_HANDOVER_FORM_NOT_CREATED);
} }
if (entity == null) {
entity = new EvalProcessControlEntity(); entity = new EvalProcessControlEntity();
entity.setId(entity.getId());
entity.setOrgId(project.getOrgId()); entity.setOrgId(project.getOrgId());
entity.setProjectId(projectId); entity.setProjectId(projectId);
}
entity.setPrecheckPassFlag(1); entity.setPrecheckPassFlag(1);
entity.setArchiveFlag(1); entity.setArchiveFlag(1);
entity.setStatusCode(3); entity.setStatusCode(3);
evalProjectNodeSupport.fillNodeStatus(3, entity); evalProjectNodeSupport.fillNodeStatus(3, entity);
entity.setControlTime(LocalDateTime.now()); 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); EvalReportEntity report = buildReport(project);
evalReportGateway.saveInternal(report); evalReportGateway.saveInternal(report);

View File

@ -1,7 +1,5 @@
package org.qinan.safetyeval.app.executor.institution; 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 com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.qinan.safetyeval.app.convertor.EvalSignTaskCmdConvertor; import org.qinan.safetyeval.app.convertor.EvalSignTaskCmdConvertor;
import org.qinan.safetyeval.client.api.institution.EvalSignTaskApi; 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.client.dto.institution.EvalSignTaskSaveCmd;
import org.qinan.safetyeval.domain.constant.*; import org.qinan.safetyeval.domain.constant.*;
import org.qinan.safetyeval.domain.entity.EvalSignTaskEntity; 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.BizException;
import org.qinan.safetyeval.domain.exception.ErrorCode; import org.qinan.safetyeval.domain.exception.ErrorCode;
import org.qinan.safetyeval.domain.gateway.SafetyMessageGateway; import org.qinan.safetyeval.domain.gateway.SafetyMessageGateway;
@ -30,11 +27,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@ -53,8 +46,6 @@ public class EvalSignTaskExecutor implements EvalSignTaskApi {
@Autowired @Autowired
private SafetyMessageGateway safetyMessageGateway; private SafetyMessageGateway safetyMessageGateway;
@Autowired @Autowired
private EvalProjectMemberMapper evalProjectMemberMapper;
@Autowired
private EvalRiskParticipantMapper evalRiskParticipantMapper; private EvalRiskParticipantMapper evalRiskParticipantMapper;
@Autowired @Autowired
private EvalInternalReviewMapper evalInternalReviewMapper; private EvalInternalReviewMapper evalInternalReviewMapper;
@ -69,37 +60,8 @@ public class EvalSignTaskExecutor implements EvalSignTaskApi {
EvalSignTaskEntity entity = evalSignTaskCmdConvertor.convertSaveCmdToE(cmd); EvalSignTaskEntity entity = evalSignTaskCmdConvertor.convertSaveCmdToE(cmd);
entity.setOrgId(orgId); entity.setOrgId(orgId);
EvalSignTaskEntity result = evalSignTaskDomainService.add(entity); EvalSignTaskEntity result = evalSignTaskDomainService.add(entity);
// todo 消息发送 // 发送签字任务通知消息
SafetyMessageEntity safetyMessageEntity = new SafetyMessageEntity(); safetyMessageGateway.saveSignMsg(cmd.getTaskTitle(), cmd.getNodeCode(), cmd.getProjectId(), cmd.getSignerPersonnelId());
safetyMessageEntity.setSendName(MsgConstant.MSG_TYPE_SYSTEM);
safetyMessageEntity.setSendId(MsgConstant.MSG_TYPE_SYSTEM_ID);
safetyMessageEntity.setSendType(NoticeTypeEnum.SIGN_TASK_NOTICE.getMsg());
Map<String, Object> params = new HashMap<>();
params.put("title", cmd.getTaskTitle());
Map<String, String> 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<EvalProjectMemberDO> evalProjectMemberDOS = evalProjectMemberMapper.selectList(new LambdaQueryWrapper<EvalProjectMemberDO>()
.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);
return SingleResponse.success(evalSignTaskCmdConvertor.convertEToCO(result)); return SingleResponse.success(evalSignTaskCmdConvertor.convertEToCO(result));
} }

View File

@ -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;
}

View File

@ -3,4 +3,11 @@ package org.qinan.safetyeval.domain.constant;
public interface MsgConstant { public interface MsgConstant {
String MSG_TYPE_SYSTEM = "system"; String MSG_TYPE_SYSTEM = "system";
Long MSG_TYPE_SYSTEM_ID = 0L; 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";
} }

View File

@ -10,6 +10,8 @@ package org.qinan.safetyeval.domain.exception;
*/ */
public enum ErrorCode { public enum ErrorCode {
DATA_NOT_EXIST("01-02-101", "数据不存在"),
// ---- 部门 ---- // ---- 部门 ----
ORG_DEPARTMENT_NOT_FOUND("01-02-001", "部门不存在"), ORG_DEPARTMENT_NOT_FOUND("01-02-001", "部门不存在"),

View File

@ -11,6 +11,26 @@ import org.qinan.safetyeval.domain.query.SafetyMessageQuery;
*/ */
public interface SafetyMessageGateway { 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 save(SafetyMessageEntity entity);
SafetyMessageEntity get(Long id); SafetyMessageEntity get(Long id);

View File

@ -1,20 +1,33 @@
package org.qinan.safetyeval.infrastructure.gatewayimpl; package org.qinan.safetyeval.infrastructure.gatewayimpl;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.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.gateway.SafetyMessageGateway;
import org.qinan.safetyeval.domain.query.PageResult; import org.qinan.safetyeval.domain.query.PageResult;
import org.qinan.safetyeval.domain.query.SafetyMessageQuery; import org.qinan.safetyeval.domain.query.SafetyMessageQuery;
import org.qinan.safetyeval.infrastructure.convertor.SafetyMessageDoConvertor; 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.dataobject.SafetyMessageDO;
import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMemberMapper;
import org.qinan.safetyeval.infrastructure.mapper.SafetyMessageMapper; import org.qinan.safetyeval.infrastructure.mapper.SafetyMessageMapper;
import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* Gateway * Gateway
@ -28,6 +41,87 @@ public class SafetyMessageGatewayImpl implements SafetyMessageGateway {
private SafetyMessageMapper safetyMessageMapper; private SafetyMessageMapper safetyMessageMapper;
@Resource @Resource
private SafetyMessageDoConvertor safetyMessageDoConvertor; 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<String, Object> params = new HashMap<>();
params.put(MsgConstant.MSG_CONTENT_KEY_TITLE, taskTitle);
Map<String, String> 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<EvalProjectMemberDO> evalProjectMemberDOS = evalProjectMemberMapper.selectList(new LambdaQueryWrapper<EvalProjectMemberDO>()
.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<String, Object> params = new HashMap<>();
params.put(MsgConstant.MSG_CONTENT_KEY_TITLE, taskTitle);
Map<String, String> 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<EvalProjectMemberDO> evalProjectMemberDOS = evalProjectMemberMapper.selectList(new LambdaQueryWrapper<EvalProjectMemberDO>()
.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 @Override
public SafetyMessageEntity save(SafetyMessageEntity entity) { public SafetyMessageEntity save(SafetyMessageEntity entity) {