From 071fd41976808c7cf6e3664641b9bcdbc8597f5d Mon Sep 17 00:00:00 2001 From: luotaiqian <1147642922@qq.com> Date: Fri, 24 Jul 2026 11:35:35 +0800 Subject: [PATCH] waring --- .../EvalInternalReviewExecutor.java | 51 ++++++++++-- .../EvalProcessControlExecutor.java | 80 +++++++++++++------ .../institution/EvalTechReviewExecutor.java | 47 +++++++++-- .../EvalInternalReviewDetailCO.java | 3 + .../EvalProcessControlDetailCO.java | 3 + .../institution/EvalTechReviewDetailCO.java | 3 + .../co/institution/SignTaskPersonCo.java | 14 ++++ .../domain/exception/ErrorCode.java | 1 + .../domain/gateway/EvalSignTaskGateway.java | 5 ++ .../gatewayimpl/EvalSignTaskGatewayImpl.java | 24 ++++++ .../mapper/EvalSignTaskMapper.java | 11 +++ .../resources/mapper/EvalSignTaskMapper.xml | 17 ++++ 12 files changed, 226 insertions(+), 33 deletions(-) create mode 100644 safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/SignTaskPersonCo.java create mode 100644 safety-eval-infrastructure/src/main/resources/mapper/EvalSignTaskMapper.xml 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 8bbf739..8703c51 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 @@ -9,19 +9,23 @@ import org.qinan.safetyeval.app.item.convertor.EvalReviewItemCmdConvertor; import org.qinan.safetyeval.client.api.institution.EvalInternalReviewApi; import org.qinan.safetyeval.client.co.institution.EvalInternalReviewCO; import org.qinan.safetyeval.client.co.institution.EvalInternalReviewDetailCO; +import org.qinan.safetyeval.client.co.institution.SignTaskPersonCo; import org.qinan.safetyeval.client.dto.SingleResponse; import org.qinan.safetyeval.client.dto.institution.EvalInternalReviewAssignCmd; import org.qinan.safetyeval.client.dto.institution.EvalInternalReviewConfirmCmd; import org.qinan.safetyeval.client.dto.institution.EvalInternalReviewSaveCmd; +import org.qinan.safetyeval.client.dto.institution.SignTaskPersonCmd; import org.qinan.safetyeval.client.item.request.EvalReviewItemAddCmd; import org.qinan.safetyeval.client.item.response.EvalReviewItemCo; import org.qinan.safetyeval.domain.constant.*; import org.qinan.safetyeval.domain.entity.EvalInternalReviewEntity; import org.qinan.safetyeval.domain.entity.EvalProjectEntity; import org.qinan.safetyeval.domain.entity.EvalProjectMemberEntity; +import org.qinan.safetyeval.domain.entity.EvalSignTaskEntity; import org.qinan.safetyeval.domain.exception.BizException; import org.qinan.safetyeval.domain.exception.ErrorCode; import org.qinan.safetyeval.domain.gateway.EvalInternalReviewGateway; +import org.qinan.safetyeval.domain.gateway.EvalSignTaskGateway; import org.qinan.safetyeval.domain.item.gateway.EvalReviewItemGateway; import org.qinan.safetyeval.domain.item.model.EvalReviewItemE; import org.qinan.safetyeval.domain.service.ProjectStageSyncService; @@ -30,8 +34,10 @@ import org.qinan.safetyeval.infrastructure.convertor.EvalInternalReviewConvertor import org.qinan.safetyeval.infrastructure.convertor.EvalProjectMemberDoConvertor; import org.qinan.safetyeval.infrastructure.dataobject.EvalInternalReviewDO; import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectMemberDO; +import org.qinan.safetyeval.infrastructure.dataobject.EvalSignTaskDO; import org.qinan.safetyeval.infrastructure.mapper.EvalInternalReviewMapper; import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMemberMapper; +import org.qinan.safetyeval.infrastructure.mapper.EvalSignTaskMapper; import org.qinan.safetyeval.infrastructure.persistence.queryservice.EvalReviewItemQueryService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -66,6 +72,10 @@ public class EvalInternalReviewExecutor implements EvalInternalReviewApi { private EvalProjectMemberMapper evalProjectMemberMapper; @Resource private EvalProjectMemberDoConvertor evalProjectMemberDoConvertor; + @Resource + private EvalSignTaskGateway evalSignTaskGateway; + @Resource + private EvalSignTaskMapper evalSignTaskMapper; @Override public SingleResponse getOrSave(EvalInternalReviewSaveCmd cmd) { @@ -162,18 +172,46 @@ public class EvalInternalReviewExecutor implements EvalInternalReviewApi { entity.setReviewerSignatureTaskStatus(SignatureTaskStatusEnum.DISPATCHED.getCode()); evalInternalReviewGateway.save(entity); } else { - // 已存在数据,若已下发则提示不要重复下发 - if (SignatureTaskStatusEnum.DISPATCHED.getCode().equals(entity.getReviewerSignatureTaskStatus())) { - throw new BizException(ErrorCode.SIGN_TASK_ALREADY_DISPATCHED); - } entity.setReviewerSignatureTaskStatus(SignatureTaskStatusEnum.DISPATCHED.getCode()); evalInternalReviewGateway.modify(entity); } - // todo 保存任务 + // 保存签字任务到 eval_sign_task + upsertSignTask(entity.getId(), projectId, project.getOrgId(), + ProjectStageEnum.INTERNAL_REVIEW, cmd.getSignTaskPersonCmd()); return SingleResponse.success(); } + private void upsertSignTask(Long bizRefId, Long projectId, Long orgId, + ProjectStageEnum stage, SignTaskPersonCmd person) { + EvalSignTaskDO existTask = evalSignTaskMapper.selectOne(new LambdaQueryWrapper() + .select(EvalSignTaskDO::getId) + .eq(EvalSignTaskDO::getProjectId, projectId) + .eq(EvalSignTaskDO::getBizRefId, bizRefId) + .eq(EvalSignTaskDO::getDeleteEnum, BooleanQAEnum.FALSE.getValue()) + .last(" limit 1 ")); + if (existTask != null && existTask.getTaskStatusCode() != null && existTask.getTaskStatusCode() == 2) { + throw new BizException(ErrorCode.SIGN_TASK_ALREADY_COMPLETED); + } + if (existTask != null) { + EvalSignTaskDO update = new EvalSignTaskDO(); + update.setId(existTask.getId()); + update.setSignerPersonnelId(person.getSignerPersonnelId()); + update.setTaskStatusCode(1); + evalSignTaskMapper.updateById(update); + } else { + EvalSignTaskDO task = new EvalSignTaskDO(); + task.setOrgId(orgId); + task.setProjectId(projectId); + task.setNodeCode(stage.getNode()); + task.setBizRefId(bizRefId); + task.setSignerPersonnelId(person.getSignerPersonnelId()); + task.setTaskTitle(stage.getMsg() + "签字任务"); + task.setTaskStatusCode(1); + evalSignTaskMapper.insert(task); + } + } + @Override public SingleResponse getByProject(Long projectId) { evalProjectNodeSupport.assertRead(projectId); @@ -206,6 +244,9 @@ public class EvalInternalReviewExecutor implements EvalInternalReviewApi { // 3. 通过内审记录id查询审核项列表 detailCO.setReviewItems(evalReviewItemQueryService.listByBizIdAndBizType( entity.getId(), ReviewDimensionEnum.TypeEnum.EVAL_INTERNAL_REVIEW.getCode())); + // 4. 查询签字任务人员 + SignTaskPersonCo personCo = evalSignTaskMapper.selectSignerPerson(entity.getId(), projectId); + detailCO.setSignTaskPersonCo(personCo); } else { // 未查询到内审记录,按审核维度枚举构建默认审核项 detailCO.setReviewItems(ReviewDimensionEnum.getListByType(ReviewDimensionEnum.TypeEnum.EVAL_INTERNAL_REVIEW) 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 90baeb4..0bbc25e 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 @@ -1,9 +1,9 @@ package org.qinan.safetyeval.app.executor.institution; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONArray; -import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.qinan.safetyeval.app.executor.institution.support.EvalCmdCopy; @@ -39,9 +39,11 @@ import org.qinan.safetyeval.infrastructure.convertor.EvalProjectMemberDoConverto import org.qinan.safetyeval.infrastructure.dataobject.EvalProcessControlDO; import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectDocDO; import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectMemberDO; +import org.qinan.safetyeval.infrastructure.dataobject.EvalSignTaskDO; import org.qinan.safetyeval.infrastructure.mapper.EvalProcessControlMapper; import org.qinan.safetyeval.infrastructure.mapper.EvalProjectDocMapper; import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMemberMapper; +import org.qinan.safetyeval.infrastructure.mapper.EvalSignTaskMapper; import org.qinan.safetyeval.infrastructure.persistence.queryservice.*; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.springframework.stereotype.Service; @@ -104,6 +106,8 @@ public class EvalProcessControlExecutor implements EvalProcessControlApi { private EvalProcessControlMapper evalProcessControlMapper; @Resource private EvalProjectDocMapper evalProjectDocMapper; + @Resource + private EvalSignTaskMapper evalSignTaskMapper; @Override public SingleResponse getOrSave(EvalProcessControlSaveCmd cmd) { @@ -190,17 +194,45 @@ public class EvalProcessControlExecutor implements EvalProcessControlApi { 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 保存任务 + // 保存签字任务到 eval_sign_task + upsertSignTask(entity.getId(), projectId, project.getOrgId(), + ProjectStageEnum.PROCESS_CONTROL, cmd.getSignTaskPersonCmd()); return SingleResponse.success(); } + private void upsertSignTask(Long bizRefId, Long projectId, Long orgId, + ProjectStageEnum stage, SignTaskPersonCmd person) { + EvalSignTaskDO existTask = evalSignTaskMapper.selectOne(new LambdaQueryWrapper() + .select(EvalSignTaskDO::getId) + .eq(EvalSignTaskDO::getProjectId, projectId) + .eq(EvalSignTaskDO::getBizRefId, bizRefId) + .eq(EvalSignTaskDO::getDeleteEnum, BooleanQAEnum.FALSE.getValue()) + .last(" limit 1 ")); + if (existTask != null && existTask.getTaskStatusCode() != null && existTask.getTaskStatusCode() == 2) { + throw new BizException(ErrorCode.SIGN_TASK_ALREADY_COMPLETED); + } + if (existTask != null) { + EvalSignTaskDO update = new EvalSignTaskDO(); + update.setId(existTask.getId()); + update.setSignerPersonnelId(person.getSignerPersonnelId()); + update.setTaskStatusCode(1); + evalSignTaskMapper.updateById(update); + } else { + EvalSignTaskDO task = new EvalSignTaskDO(); + task.setOrgId(orgId); + task.setProjectId(projectId); + task.setNodeCode(stage.getNode()); + task.setBizRefId(bizRefId); + task.setSignerPersonnelId(person.getSignerPersonnelId()); + task.setTaskTitle(stage.getMsg() + "签字任务"); + task.setTaskStatusCode(1); + evalSignTaskMapper.insert(task); + } + } + @Override public SingleResponse getByProject(String projectId) { Long pid = Long.parseLong(projectId); @@ -235,6 +267,9 @@ public class EvalProcessControlExecutor implements EvalProcessControlApi { // 3. 通过过程控制记录id查询审核项列表 detailCO.setReviewItems(evalReviewItemQueryService.listByBizIdAndBizType( entity.getId(), ReviewDimensionEnum.TypeEnum.EVAL_PROCESS_CONTROL.getCode())); + // 4. 查询签字任务人员 + SignTaskPersonCo personCo = evalSignTaskMapper.selectSignerPerson(entity.getId(), projectId); + detailCO.setSignTaskPersonCo(personCo); } else { // 未查询到过程控制记录,按审核维度枚举构建默认审核项 detailCO.setReviewItems(ReviewDimensionEnum.getListByType(ReviewDimensionEnum.TypeEnum.EVAL_PROCESS_CONTROL) @@ -352,25 +387,24 @@ public class EvalProcessControlExecutor implements EvalProcessControlApi { } String trimmed = raw.trim(); JSONArray result = new JSONArray(); - if (trimmed.startsWith("[")) { - try { - JSONArray arr = JSON.parseArray(trimmed); - for (int i = 0; i < arr.size(); i++) { - Object item = arr.get(i); - if (item instanceof JSONObject) { - result.add(item); - } else { - result.add(buildUrlNameObj(String.valueOf(item))); - } + + if (JSONUtil.isTypeJSONArray(trimmed)) { + // 字符串数组 ["url1","url2"] 或 对象数组 [{"url":"xxx","name":"xxx"}] + JSONArray arr = JSONUtil.parseArray(trimmed); + for (Object item : arr) { + if (item instanceof JSONObject) { + // 已是 {url, name} 对象,直接保留 + result.add(item); + } else { + // 字符串元素,构造为 {url, name} + result.add(buildUrlNameObj(String.valueOf(item))); } - co.setProjectDocUrl(result.toJSONString()); - return; - } catch (Exception ignored) { - // 非合法JSON数组,按纯字符串处理 } + } else { + // 纯字符串URL + result.add(buildUrlNameObj(trimmed)); } - result.add(buildUrlNameObj(trimmed)); - co.setProjectDocUrl(result.toJSONString()); + co.setProjectDocUrl(result.toString()); } private JSONObject buildUrlNameObj(String url) { 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 1722992..1d3d85b 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 @@ -8,10 +8,12 @@ import org.qinan.safetyeval.app.item.convertor.EvalReviewItemCmdConvertor; 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.co.institution.SignTaskPersonCo; 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.dto.institution.SignTaskPersonCmd; import org.qinan.safetyeval.client.item.request.EvalReviewItemAddCmd; import org.qinan.safetyeval.client.item.response.EvalReviewItemCo; import org.qinan.safetyeval.domain.constant.*; @@ -28,8 +30,10 @@ import org.qinan.safetyeval.domain.support.EvalNodeCodes; import org.qinan.safetyeval.infrastructure.convertor.EvalProjectMemberDoConvertor; import org.qinan.safetyeval.infrastructure.convertor.EvalTechReviewConvertor; import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectMemberDO; +import org.qinan.safetyeval.infrastructure.dataobject.EvalSignTaskDO; import org.qinan.safetyeval.infrastructure.dataobject.EvalTechReviewDO; import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMemberMapper; +import org.qinan.safetyeval.infrastructure.mapper.EvalSignTaskMapper; import org.qinan.safetyeval.infrastructure.mapper.EvalTechReviewMapper; import org.qinan.safetyeval.infrastructure.persistence.queryservice.EvalReviewItemQueryService; import org.springframework.stereotype.Service; @@ -65,6 +69,8 @@ public class EvalTechReviewExecutor implements EvalTechReviewApi { private ProjectStageSyncService projectStageSyncService; @Resource private EvalTechReviewMapper evalTechReviewMapper; + @Resource + private EvalSignTaskMapper evalSignTaskMapper; @Override public SingleResponse getOrSave(EvalTechReviewSaveCmd cmd) { @@ -170,17 +176,45 @@ public class EvalTechReviewExecutor implements EvalTechReviewApi { 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 保存任务 + // 保存签字任务到 eval_sign_task + upsertSignTask(entity.getId(), projectId, project.getOrgId(), + ProjectStageEnum.TECHNICAL_REVIEW, cmd.getSignTaskPersonCmd()); return SingleResponse.success(); } + private void upsertSignTask(Long bizRefId, Long projectId, Long orgId, + ProjectStageEnum stage, SignTaskPersonCmd person) { + EvalSignTaskDO existTask = evalSignTaskMapper.selectOne(new LambdaQueryWrapper() + .select(EvalSignTaskDO::getId) + .eq(EvalSignTaskDO::getProjectId, projectId) + .eq(EvalSignTaskDO::getBizRefId, bizRefId) + .eq(EvalSignTaskDO::getDeleteEnum, BooleanQAEnum.FALSE.getValue()) + .last(" limit 1 ")); + if (existTask != null && existTask.getTaskStatusCode() != null && existTask.getTaskStatusCode() == 2) { + throw new BizException(ErrorCode.SIGN_TASK_ALREADY_COMPLETED); + } + if (existTask != null) { + EvalSignTaskDO update = new EvalSignTaskDO(); + update.setId(existTask.getId()); + update.setSignerPersonnelId(person.getSignerPersonnelId()); + update.setTaskStatusCode(1); + evalSignTaskMapper.updateById(update); + } else { + EvalSignTaskDO task = new EvalSignTaskDO(); + task.setOrgId(orgId); + task.setProjectId(projectId); + task.setNodeCode(stage.getNode()); + task.setBizRefId(bizRefId); + task.setSignerPersonnelId(person.getSignerPersonnelId()); + task.setTaskTitle(stage.getMsg() + "签字任务"); + task.setTaskStatusCode(1); + evalSignTaskMapper.insert(task); + } + } + @Override public SingleResponse getDetailByProject(Long projectId) { // 1. 查询项目成员中的技审人信息(role包含TECHNICAL_LEAD) @@ -194,6 +228,9 @@ public class EvalTechReviewExecutor implements EvalTechReviewApi { detailCO.setTechReview(evalTechReviewConvertor.toTechCO(entity)); // 3. 通过技审记录id查询审核项列表 detailCO.setReviewItems(evalReviewItemQueryService.listByBizIdAndBizType(entity.getId(), ReviewDimensionEnum.TypeEnum.EVAL_TECH_REVIEW.getCode())); + // 4. 查询签字任务人员 + SignTaskPersonCo personCo = evalSignTaskMapper.selectSignerPerson(entity.getId(), projectId); + detailCO.setSignTaskPersonCo(personCo); } else { // 未查询到技审记录,按审核维度枚举构建默认审核项 detailCO.setReviewItems(ReviewDimensionEnum.getListByType(ReviewDimensionEnum.TypeEnum.EVAL_TECH_REVIEW).stream().map(dimension -> { diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalInternalReviewDetailCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalInternalReviewDetailCO.java index c046b6c..0727230 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalInternalReviewDetailCO.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalInternalReviewDetailCO.java @@ -20,4 +20,7 @@ public class EvalInternalReviewDetailCO { @ApiModelProperty("审核项列表") private List reviewItems; + + @ApiModelProperty("签字任务人员") + private SignTaskPersonCo signTaskPersonCo; } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProcessControlDetailCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProcessControlDetailCO.java index 98c2d65..b1ed748 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProcessControlDetailCO.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProcessControlDetailCO.java @@ -20,4 +20,7 @@ public class EvalProcessControlDetailCO { @ApiModelProperty("审核项列表") private List reviewItems; + + @ApiModelProperty("签字任务人员") + private SignTaskPersonCo signTaskPersonCo; } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalTechReviewDetailCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalTechReviewDetailCO.java index f03d68a..0e29b98 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalTechReviewDetailCO.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalTechReviewDetailCO.java @@ -20,4 +20,7 @@ public class EvalTechReviewDetailCO { @ApiModelProperty("审核项列表") private List reviewItems; + + @ApiModelProperty("签字任务人员") + private SignTaskPersonCo signTaskPersonCo; } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/SignTaskPersonCo.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/SignTaskPersonCo.java new file mode 100644 index 0000000..792cdb0 --- /dev/null +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/SignTaskPersonCo.java @@ -0,0 +1,14 @@ +package org.qinan.safetyeval.client.co.institution; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SignTaskPersonCo { + + @ApiModelProperty("待签人员id") + private Long signerPersonnelId; + + @ApiModelProperty("待签人员姓名") + private String signerName; +} 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 1bc9066..4bfc1af 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 @@ -120,6 +120,7 @@ public enum ErrorCode { ASSIGN_SIGN_TASK("04-02-001", "请先下发签字任务"), SIGN_TASK_NOT_COMPLETE("04-02-002", "签字任务未完成"), SIGN_TASK_ALREADY_DISPATCHED("04-02-003", "签字任务已下发,请勿重复下发"), + SIGN_TASK_ALREADY_COMPLETED("04-02-004", "签字任务已完成,无法再次下发"), // gbs GBS_USER_ERROR("04-01-001", "gbs用户未登录"), diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/EvalSignTaskGateway.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/EvalSignTaskGateway.java index 97a8acb..af2f894 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/EvalSignTaskGateway.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/EvalSignTaskGateway.java @@ -11,4 +11,9 @@ public interface EvalSignTaskGateway { EvalSignTaskEntity get(Long id); PageResult page(EvalSignTaskQuery query); + + /** + * 根据业务引用ID和业务类型查询签字任务 + */ + EvalSignTaskEntity getByBizRefIdAndType(Long bizRefId, String bizTypeCode, Long projectId); } diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalSignTaskGatewayImpl.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalSignTaskGatewayImpl.java index 6c788d6..1b0620b 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalSignTaskGatewayImpl.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalSignTaskGatewayImpl.java @@ -10,6 +10,7 @@ import org.qinan.safetyeval.domain.query.PageResult; import org.qinan.safetyeval.infrastructure.convertor.EvalSignTaskDoConvertor; import org.qinan.safetyeval.infrastructure.dataobject.EvalSignTaskDO; import org.qinan.safetyeval.infrastructure.mapper.EvalSignTaskMapper; +import org.qinan.safetyeval.infrastructure.support.EvalBeanCopy; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.qinan.safetyeval.infrastructure.support.OrgContextResolver; import org.springframework.stereotype.Component; @@ -74,4 +75,27 @@ public class EvalSignTaskGatewayImpl implements EvalSignTaskGateway { wrapper.orderByDesc(EvalSignTaskDO::getCreateTime); return wrapper; } + + @Override + public EvalSignTaskEntity getByBizRefIdAndType(Long bizRefId, String bizTypeCode, Long projectId) { + EvalSignTaskDO dataObject = evalSignTaskMapper.selectOne(new LambdaQueryWrapper() + .eq(EvalSignTaskDO::getDeleteEnum, "false") + .eq(EvalSignTaskDO::getBizRefId, bizRefId) + .eq(EvalSignTaskDO::getProjectId, projectId) + .last("LIMIT 1")); + return toEntity(dataObject); + } + + private EvalSignTaskDO toDO(EvalSignTaskEntity entity) { + EvalSignTaskDO dataObject = EvalBeanCopy.toNew(entity, EvalSignTaskDO.class); + dataObject.setOrgId(orgContextResolver.resolveOrgId(entity.getOrgId())); + return dataObject; + } + + private EvalSignTaskEntity toEntity(EvalSignTaskDO dataObject) { + if (dataObject == null) { + return null; + } + return EvalBeanCopy.toNew(dataObject, EvalSignTaskEntity.class); + } } diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/EvalSignTaskMapper.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/EvalSignTaskMapper.java index cb3dc4a..24d152a 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/EvalSignTaskMapper.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/EvalSignTaskMapper.java @@ -2,8 +2,19 @@ package org.qinan.safetyeval.infrastructure.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.qinan.safetyeval.client.co.institution.SignTaskPersonCo; import org.qinan.safetyeval.infrastructure.dataobject.EvalSignTaskDO; @Mapper public interface EvalSignTaskMapper extends BaseMapper { + + /** + * 关联 org_personnel 查询签字人员信息(id + 姓名) + * + * @param bizRefId 业务引用ID + * @param projectId 项目ID + * @return 签字人员信息 + */ + SignTaskPersonCo selectSignerPerson(@Param("bizRefId") Long bizRefId, @Param("projectId") Long projectId); } diff --git a/safety-eval-infrastructure/src/main/resources/mapper/EvalSignTaskMapper.xml b/safety-eval-infrastructure/src/main/resources/mapper/EvalSignTaskMapper.xml new file mode 100644 index 0000000..afcd6d2 --- /dev/null +++ b/safety-eval-infrastructure/src/main/resources/mapper/EvalSignTaskMapper.xml @@ -0,0 +1,17 @@ + + + + + + + +