diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/EvalProcessControlController.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/EvalProcessControlController.java index e46e44e..cb6d675 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/EvalProcessControlController.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/EvalProcessControlController.java @@ -8,10 +8,7 @@ import org.qinan.safetyeval.client.co.institution.EvalProcessControlCO; import org.qinan.safetyeval.client.co.institution.EvalProcessControlDetailCO; import org.qinan.safetyeval.client.co.institution.EvalProjectFileCO; import org.qinan.safetyeval.client.dto.SingleResponse; -import org.qinan.safetyeval.client.dto.institution.EvalProcessArchiveCmd; -import org.qinan.safetyeval.client.dto.institution.EvalProcessControlConfirmCmd; -import org.qinan.safetyeval.client.dto.institution.EvalProcessControlSaveCmd; -import org.qinan.safetyeval.client.dto.institution.EvalProcessHandoverFormCmd; +import org.qinan.safetyeval.client.dto.institution.*; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -44,6 +41,12 @@ public class EvalProcessControlController { return evalProcessControlApi.confirm(cmd); } + @ApiOperation("下发签字任务") + @PostMapping("/assign") + public SingleResponse assign(@Validated @RequestBody EvalProcessControlAssignCmd cmd) { + return evalProcessControlApi.assign(cmd); + } + @ApiOperation("按项目查询详情(过程控制负责人成员+审核项)") @GetMapping("/detail") public SingleResponse detail(@ApiParam("项目ID") @RequestParam Long projectId) { diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/EvalTechReviewController.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/EvalTechReviewController.java index 93b1442..2a0a144 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/EvalTechReviewController.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/EvalTechReviewController.java @@ -7,6 +7,7 @@ import org.qinan.safetyeval.client.api.institution.EvalTechReviewApi; import org.qinan.safetyeval.client.co.institution.EvalTechReviewCO; import org.qinan.safetyeval.client.co.institution.EvalTechReviewDetailCO; import org.qinan.safetyeval.client.dto.SingleResponse; +import org.qinan.safetyeval.client.dto.institution.EvalTechReviewAssignCmd; import org.qinan.safetyeval.client.dto.institution.EvalTechReviewConfirmCmd; import org.qinan.safetyeval.client.dto.institution.EvalTechReviewSaveCmd; import org.springframework.validation.annotation.Validated; @@ -40,6 +41,12 @@ public class EvalTechReviewController { return evalTechReviewApi.confirm(cmd); } + @ApiOperation("下发签字任务") + @PostMapping("/assign") + public SingleResponse assign(@Validated @RequestBody EvalTechReviewAssignCmd cmd) { + return evalTechReviewApi.assign(cmd); + } + @ApiOperation("按项目查询详情(技审人成员+审核项)") @GetMapping("/detail") public SingleResponse detail(@ApiParam("项目ID") @RequestParam Long projectId) { diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalInternalReviewExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalInternalReviewExecutor.java index 67cb046..bf274d9 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalInternalReviewExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalInternalReviewExecutor.java @@ -100,13 +100,11 @@ public class EvalInternalReviewExecutor implements EvalInternalReviewApi { // 修改数据是否存在 EvalInternalReviewEntity entity = evalInternalReviewConvertor.applyConfirmCmd(cmd); - EvalInternalReviewDO evalInternalReviewDO = null; - if (cmd.getId() != null) { - evalInternalReviewDO = evalInternalReviewMapper.selectOne(new LambdaQueryWrapper() - .select(EvalInternalReviewDO::getId, EvalInternalReviewDO::getReviewerSignatureUrl)); - if (evalInternalReviewDO == null) { - throw new BizException(ErrorCode.EVAL_INTERNAL_REVIEW_NOT_FOUND); - } + EvalInternalReviewDO evalInternalReviewDO = evalInternalReviewMapper.selectOne(new LambdaQueryWrapper() + .select(EvalInternalReviewDO::getId, EvalInternalReviewDO::getReviewerSignatureUrl) + .eq(EvalInternalReviewDO::getProjectId, cmd.getProjectId())); + if (cmd.getId() != null && evalInternalReviewDO == null) { + throw new BizException(ErrorCode.EVAL_INTERNAL_REVIEW_NOT_FOUND); } // 是否签字完成 @@ -120,7 +118,7 @@ public class EvalInternalReviewExecutor implements EvalInternalReviewApi { projectStageSyncService.onNodeCompleted(projectId, ProjectStageEnum.INTERNAL_REVIEW.getNode()); } - if (cmd.getId() != null) { + if (evalInternalReviewDO != null) { entity = evalInternalReviewGateway.modify(entity); } else { // id为空,新增数据 @@ -128,7 +126,6 @@ public class EvalInternalReviewExecutor implements EvalInternalReviewApi { entity = evalInternalReviewGateway.save(entity); } - // 审核项:根据bizId和bizType先删后增 String bizType = ReviewDimensionEnum.TypeEnum.EVAL_INTERNAL_REVIEW.getCode(); evalReviewItemGateway.deletedEvalReviewItemByBizIdAndBizType(entity.getId(), bizType); @@ -187,10 +184,10 @@ public class EvalInternalReviewExecutor implements EvalInternalReviewApi { public SingleResponse getDetailByProject(Long projectId) { // 1. 查询项目成员中的内审人信息(role包含INTERNAL_AUDITOR) List reviewers = evalProjectMemberMapper.selectList( - new LambdaQueryWrapper() - .eq(EvalProjectMemberDO::getProjectId, projectId) - .eq(EvalProjectMemberDO::getDeleteEnum, BooleanQAEnum.FALSE.getValue()) - .like(EvalProjectMemberDO::getRole, ProjectRoleEnum.INTERNAL_AUDITOR.getVal())) + new LambdaQueryWrapper() + .eq(EvalProjectMemberDO::getProjectId, projectId) + .eq(EvalProjectMemberDO::getDeleteEnum, BooleanQAEnum.FALSE.getValue()) + .like(EvalProjectMemberDO::getRole, ProjectRoleEnum.INTERNAL_AUDITOR.getVal())) .stream() .map(evalProjectMemberDoConvertor::convertDoToE) .collect(Collectors.toList()); 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 066fb59..e0e6572 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 @@ -11,6 +11,7 @@ import org.qinan.safetyeval.client.co.institution.EvalProcessControlDetailCO; import org.qinan.safetyeval.client.co.institution.EvalProjectFileCO; import org.qinan.safetyeval.client.dto.SingleResponse; import org.qinan.safetyeval.client.dto.institution.EvalProcessArchiveCmd; +import org.qinan.safetyeval.client.dto.institution.EvalProcessControlAssignCmd; import org.qinan.safetyeval.client.dto.institution.EvalProcessControlConfirmCmd; import org.qinan.safetyeval.client.dto.institution.EvalProcessControlSaveCmd; import org.qinan.safetyeval.client.dto.institution.EvalProcessHandoverFormCmd; @@ -152,6 +153,36 @@ public class EvalProcessControlExecutor implements EvalProcessControlApi { return SingleResponse.success(); } + @Override + @Transactional(rollbackFor = Exception.class) + public SingleResponse assign(EvalProcessControlAssignCmd cmd) { + Long projectId = cmd.getProjectId(); + EvalProjectEntity project = evalProjectNodeSupport.requireProject(projectId); + // 判断项目是否归档 + if (project.getArchiveFlag() != null && project.getArchiveFlag() == 1) { + throw new BizException(ErrorCode.EVAL_PROJECT_ARCHIVED); + } + EvalProcessControlEntity entity = evalProcessControlGateway.getByProjectId(projectId, project.getOrgId()); + if (entity == null) { + // 没有数据则新增,并下发签字任务 + entity = new EvalProcessControlEntity(); + entity.setOrgId(project.getOrgId()); + entity.setProjectId(projectId); + entity.setStatusCode(1); + entity.setReviewerSignatureTaskStatus(SignatureTaskStatusEnum.DISPATCHED.getCode()); + evalProcessControlGateway.save(entity); + } else { + // 已存在数据,若已下发则提示不要重复下发 + if (SignatureTaskStatusEnum.DISPATCHED.getCode().equals(entity.getReviewerSignatureTaskStatus())) { + throw new BizException(ErrorCode.SIGN_TASK_ALREADY_DISPATCHED); + } + entity.setReviewerSignatureTaskStatus(SignatureTaskStatusEnum.DISPATCHED.getCode()); + evalProcessControlGateway.modify(entity); + } + // todo 保存任务 + return SingleResponse.success(); + } + @Override public SingleResponse getByProject(String projectId) { Long pid = Long.parseLong(projectId); diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalTechReviewExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalTechReviewExecutor.java index e8aaf8b..1c01217 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalTechReviewExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalTechReviewExecutor.java @@ -10,14 +10,12 @@ import org.qinan.safetyeval.client.api.institution.EvalTechReviewApi; import org.qinan.safetyeval.client.co.institution.EvalTechReviewCO; import org.qinan.safetyeval.client.co.institution.EvalTechReviewDetailCO; import org.qinan.safetyeval.client.dto.SingleResponse; +import org.qinan.safetyeval.client.dto.institution.EvalTechReviewAssignCmd; import org.qinan.safetyeval.client.dto.institution.EvalTechReviewConfirmCmd; import org.qinan.safetyeval.client.dto.institution.EvalTechReviewSaveCmd; import org.qinan.safetyeval.client.item.request.EvalReviewItemAddCmd; import org.qinan.safetyeval.client.item.response.EvalReviewItemCo; -import org.qinan.safetyeval.domain.constant.BooleanQAEnum; -import org.qinan.safetyeval.domain.constant.ProjectRoleEnum; -import org.qinan.safetyeval.domain.constant.ProjectStageEnum; -import org.qinan.safetyeval.domain.constant.ReviewDimensionEnum; +import org.qinan.safetyeval.domain.constant.*; import org.qinan.safetyeval.domain.entity.EvalProjectEntity; import org.qinan.safetyeval.domain.entity.EvalProjectMemberEntity; import org.qinan.safetyeval.domain.entity.EvalTechReviewEntity; @@ -113,18 +111,15 @@ public class EvalTechReviewExecutor implements EvalTechReviewApi { } EvalTechReviewEntity entity = evalTechReviewConvertor.applyConfirmCmd(cmd); - EvalTechReviewDO evalTechReviewDO = null; - if (cmd.getId() != null) { - evalTechReviewDO = evalTechReviewMapper.selectOne(new LambdaQueryWrapper() - .eq(EvalTechReviewDO::getId, cmd.getId()) - .select(EvalTechReviewDO::getId, EvalTechReviewDO::getReviewerSignatureUrl)); - if (evalTechReviewDO == null) { - throw new BizException(ErrorCode.EVAL_TECH_REVIEW_NOT_FOUND); - } + EvalTechReviewDO evalTechReviewDO = evalTechReviewMapper.selectOne(new LambdaQueryWrapper() + .eq(EvalTechReviewDO::getProjectId, cmd.getProjectId()) + .select(EvalTechReviewDO::getId, EvalTechReviewDO::getReviewerSignatureUrl)); + if (cmd.getId() != null && evalTechReviewDO == null) { + throw new BizException(ErrorCode.EVAL_TECH_REVIEW_NOT_FOUND); } // 审核结果编码:1通过 2退回修改 - if (cmd.getResultCode() != null && cmd.getResultCode() == 1) { + if (cmd.getResultCode().equals(EvalReviewEnum.PASSED.getCode())) { if (evalTechReviewDO == null) { throw new BizException(ASSIGN_SIGN_TASK); } @@ -154,6 +149,36 @@ public class EvalTechReviewExecutor implements EvalTechReviewApi { return SingleResponse.success(); } + @Override + @Transactional(rollbackFor = Exception.class) + public SingleResponse assign(EvalTechReviewAssignCmd cmd) { + Long projectId = cmd.getProjectId(); + EvalProjectEntity project = evalProjectNodeSupport.requireProject(projectId); + // 判断项目是否归档 + if (project.getArchiveFlag() != null && project.getArchiveFlag() == 1) { + throw new BizException(ErrorCode.EVAL_PROJECT_ARCHIVED); + } + EvalTechReviewEntity entity = evalTechReviewGateway.getByProjectId(projectId, project.getOrgId()); + if (entity == null) { + // 没有数据则新增,并下发签字任务 + entity = new EvalTechReviewEntity(); + entity.setOrgId(project.getOrgId()); + entity.setProjectId(projectId); + entity.setStatusCode(1); + entity.setReviewerSignatureTaskStatus(SignatureTaskStatusEnum.DISPATCHED.getCode()); + evalTechReviewGateway.save(entity); + } else { + // 已存在数据,若已下发则提示不要重复下发 + if (SignatureTaskStatusEnum.DISPATCHED.getCode().equals(entity.getReviewerSignatureTaskStatus())) { + throw new BizException(ErrorCode.SIGN_TASK_ALREADY_DISPATCHED); + } + entity.setReviewerSignatureTaskStatus(SignatureTaskStatusEnum.DISPATCHED.getCode()); + evalTechReviewGateway.modify(entity); + } + // todo 保存任务 + return SingleResponse.success(); + } + @Override public SingleResponse getDetailByProject(Long projectId) { // 1. 查询项目成员中的技审人信息(role包含TECHNICAL_LEAD) diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalProcessControlApi.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalProcessControlApi.java index 13f1d8f..eb01585 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalProcessControlApi.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalProcessControlApi.java @@ -5,6 +5,7 @@ import org.qinan.safetyeval.client.co.institution.EvalProcessControlDetailCO; import org.qinan.safetyeval.client.co.institution.EvalProjectFileCO; import org.qinan.safetyeval.client.dto.SingleResponse; import org.qinan.safetyeval.client.dto.institution.EvalProcessArchiveCmd; +import org.qinan.safetyeval.client.dto.institution.EvalProcessControlAssignCmd; import org.qinan.safetyeval.client.dto.institution.EvalProcessControlConfirmCmd; import org.qinan.safetyeval.client.dto.institution.EvalProcessControlSaveCmd; import org.qinan.safetyeval.client.dto.institution.EvalProcessHandoverFormCmd; @@ -14,6 +15,7 @@ import java.util.List; public interface EvalProcessControlApi { SingleResponse getOrSave(EvalProcessControlSaveCmd cmd); SingleResponse confirm(EvalProcessControlConfirmCmd cmd); + SingleResponse assign(EvalProcessControlAssignCmd cmd); SingleResponse getByProject(String projectId); SingleResponse getDetailByProject(Long projectId); SingleResponse generateHandoverForm(EvalProcessHandoverFormCmd cmd); diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalTechReviewApi.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalTechReviewApi.java index f3ef6ba..4e4e405 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalTechReviewApi.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalTechReviewApi.java @@ -3,6 +3,7 @@ package org.qinan.safetyeval.client.api.institution; import org.qinan.safetyeval.client.co.institution.EvalTechReviewCO; import org.qinan.safetyeval.client.co.institution.EvalTechReviewDetailCO; import org.qinan.safetyeval.client.dto.SingleResponse; +import org.qinan.safetyeval.client.dto.institution.EvalTechReviewAssignCmd; import org.qinan.safetyeval.client.dto.institution.EvalTechReviewConfirmCmd; import org.qinan.safetyeval.client.dto.institution.EvalTechReviewSaveCmd; @@ -10,5 +11,6 @@ public interface EvalTechReviewApi { SingleResponse getOrSave(EvalTechReviewSaveCmd cmd); SingleResponse getByProject(String projectId); SingleResponse confirm(EvalTechReviewConfirmCmd cmd); + SingleResponse assign(EvalTechReviewAssignCmd cmd); SingleResponse getDetailByProject(Long projectId); } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProcessControlAssignCmd.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProcessControlAssignCmd.java new file mode 100644 index 0000000..a2d472f --- /dev/null +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProcessControlAssignCmd.java @@ -0,0 +1,14 @@ +package org.qinan.safetyeval.client.dto.institution; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class EvalProcessControlAssignCmd { + + @ApiModelProperty("项目id") + private Long projectId; + + @ApiModelProperty(value = "审核签字任务状态 dispatched 下发,non_dispatched 未下发", example = "non_dispatched", hidden = true) + private String reviewerSignatureTaskStatus; +} diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalTechReviewAssignCmd.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalTechReviewAssignCmd.java new file mode 100644 index 0000000..58795a3 --- /dev/null +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalTechReviewAssignCmd.java @@ -0,0 +1,14 @@ +package org.qinan.safetyeval.client.dto.institution; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class EvalTechReviewAssignCmd { + + @ApiModelProperty("项目id") + private Long projectId; + + @ApiModelProperty(value = "审核签字任务状态 dispatched 下发,non_dispatched 未下发", example = "non_dispatched", hidden = true) + private String reviewerSignatureTaskStatus; +}