diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/EvalProjectMemberController.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/EvalProjectMemberController.java index c960e8c..142aefd 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/EvalProjectMemberController.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/EvalProjectMemberController.java @@ -2,15 +2,12 @@ package org.qinan.safetyeval.adapter.web.institution; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; import org.qinan.safetyeval.client.api.institution.EvalProjectMemberApi; import org.qinan.safetyeval.client.co.institution.EvalProjectMemberCO; import org.qinan.safetyeval.client.dto.PageResponse; import org.qinan.safetyeval.client.dto.SingleResponse; import org.qinan.safetyeval.client.dto.institution.EvalProjectMemberAddCmd; -import org.qinan.safetyeval.client.dto.institution.EvalProjectMemberModifyCmd; import org.qinan.safetyeval.client.dto.institution.EvalProjectMemberPageQuery; -import org.qinan.safetyeval.infrastructure.dataobject.base.Req; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -25,30 +22,15 @@ public class EvalProjectMemberController { @Resource private EvalProjectMemberApi evalProjectMemberApi; - @ApiOperation("新增成员") + @ApiOperation("保存成员(id空新增/非空修改)") @PostMapping("/save") - public SingleResponse save(@Validated @RequestBody EvalProjectMemberAddCmd cmd) { + public SingleResponse save(@Validated @RequestBody List cmd) { + if (cmd == null || cmd.isEmpty()) { + return SingleResponse.success(true); + } return evalProjectMemberApi.save(cmd); } - @ApiOperation("修改成员") - @PostMapping("/modify") - public SingleResponse modify(@Validated @RequestBody EvalProjectMemberModifyCmd cmd) { - return evalProjectMemberApi.modify(cmd); - } - - @ApiOperation("删除成员") - @PostMapping("/delete") - public SingleResponse delete(@RequestBody Req req) { - return evalProjectMemberApi.delete(req.getData()); - } - - @ApiOperation("按项目查询成员列表") - @GetMapping("/list") - public SingleResponse> list(@ApiParam("项目ID") @RequestParam String projectId) { - return evalProjectMemberApi.listByProject(Long.parseLong(projectId)); - } - @ApiOperation("分页查询成员") @GetMapping("/page") public PageResponse page(@Validated EvalProjectMemberPageQuery query) { diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/convertor/EvalProjectMemberCmdConvertor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/convertor/EvalProjectMemberCmdConvertor.java new file mode 100644 index 0000000..e0b13d2 --- /dev/null +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/convertor/EvalProjectMemberCmdConvertor.java @@ -0,0 +1,35 @@ +package org.qinan.safetyeval.app.convertor; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.qinan.safetyeval.client.co.institution.EvalProjectMemberCO; +import org.qinan.safetyeval.client.dto.institution.EvalProjectMemberAddCmd; +import org.qinan.safetyeval.client.dto.institution.EvalProjectMemberPageQuery; +import org.qinan.safetyeval.domain.entity.EvalProjectMemberEntity; +import org.qinan.safetyeval.domain.query.EvalProjectMemberQuery; + +import java.util.List; + +@Mapper(componentModel = "spring") +public interface EvalProjectMemberCmdConvertor { + +// @Mapping(target = "id", expression = "java(cmd.getId() == null || cmd.getId().isEmpty() ? null : Long.parseLong(cmd.getId()))") + @Mapping(target = "orgId", ignore = true) + @Mapping(target = "projectId", expression = "java(cmd.getProjectId() == null ? null : Long.parseLong(cmd.getProjectId()))") + @Mapping(target = "personnelId", expression = "java(cmd.getPersonnelId() == null ? null : Long.parseLong(cmd.getPersonnelId()))") + @Mapping(target = "tenantId", ignore = true) + EvalProjectMemberEntity convertAddCmdToE(EvalProjectMemberAddCmd cmd); + + @Mapping(target = "pageNum", source = "current") + @Mapping(target = "pageSize", source = "size") + @Mapping(target = "orgId", ignore = true) + @Mapping(target = "projectId", expression = "java(query.getProjectId() == null ? null : Long.parseLong(query.getProjectId()))") + EvalProjectMemberQuery convertPageQueryToQ(EvalProjectMemberPageQuery query); + + @Mapping(target = "id", expression = "java(entity.getId() == null ? null : String.valueOf(entity.getId()))") + @Mapping(target = "projectId", expression = "java(entity.getProjectId() == null ? null : String.valueOf(entity.getProjectId()))") + @Mapping(target = "personnelId", expression = "java(entity.getPersonnelId() == null ? null : String.valueOf(entity.getPersonnelId()))") + EvalProjectMemberCO convertEToCO(EvalProjectMemberEntity entity); + + List convertEListToCOList(List list); +} 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 2f44327..d8ea46c 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 @@ -20,11 +20,9 @@ import org.qinan.safetyeval.domain.constant.ProjectStageEnum; import org.qinan.safetyeval.domain.constant.ReviewDimensionEnum; 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.exception.BizException; import org.qinan.safetyeval.domain.exception.ErrorCode; import org.qinan.safetyeval.domain.gateway.EvalInternalReviewGateway; -import org.qinan.safetyeval.domain.gateway.EvalProjectMemberGateway; import org.qinan.safetyeval.domain.item.gateway.EvalReviewItemGateway; import org.qinan.safetyeval.domain.item.model.EvalReviewItemE; import org.qinan.safetyeval.domain.service.ProjectStageSyncService; @@ -33,7 +31,6 @@ import org.qinan.safetyeval.infrastructure.convertor.EvalInternalReviewConvertor import org.qinan.safetyeval.infrastructure.dataobject.EvalInternalReviewDO; import org.qinan.safetyeval.infrastructure.mapper.EvalInternalReviewMapper; import org.qinan.safetyeval.infrastructure.persistence.queryservice.EvalReviewItemQueryService; -import org.qinan.safetyeval.infrastructure.support.NodeWriteAuthority; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -52,8 +49,6 @@ public class EvalInternalReviewExecutor implements EvalInternalReviewApi { @Resource private EvalProjectNodeSupport evalProjectNodeSupport; @Resource - private EvalProjectMemberGateway evalProjectMemberGateway; - @Resource private EvalReviewItemQueryService evalReviewItemQueryService; @Resource private EvalInternalReviewConvertor evalInternalReviewConvertor; @@ -157,14 +152,10 @@ public class EvalInternalReviewExecutor implements EvalInternalReviewApi { @Override public SingleResponse getDetailByProject(Long projectId) { - // 1. 查询项目成员中的内审人信息 - List members = evalProjectMemberGateway - .listByProjectIdAndRoleCode(projectId, NodeWriteAuthority.ROLE_INTERNAL_REVIEWER); - - // 2. 查询内审记录,未查询到则内审记录字段为空 + // 查询内审记录,未查询到则内审记录字段为空(成员角色模型已变更,不再按旧角色筛选内审人) EvalInternalReviewEntity entity = evalInternalReviewGateway.getByProjectId(projectId, null); EvalInternalReviewDetailCO detailCO = new EvalInternalReviewDetailCO(); - detailCO.setReviewers(evalInternalReviewConvertor.toMemberCOs(members)); + detailCO.setReviewers(java.util.Collections.emptyList()); if (entity != null) { detailCO.setInternalReview(evalInternalReviewConvertor.toInternalCO(entity)); // 3. 通过内审记录id查询审核项列表 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 2cae32e..9ce3d9b 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 @@ -24,6 +24,7 @@ import org.qinan.safetyeval.domain.entity.EvalProcessControlEntity; import org.qinan.safetyeval.domain.entity.EvalReportDraftEntity; import org.qinan.safetyeval.domain.entity.EvalReportEntity; import org.qinan.safetyeval.domain.entity.EvalSignTaskEntity; +import org.qinan.safetyeval.domain.entity.*; import org.qinan.safetyeval.domain.exception.BizException; import org.qinan.safetyeval.domain.exception.ErrorCode; import org.qinan.safetyeval.domain.gateway.EvalProcessControlGateway; @@ -31,6 +32,7 @@ import org.qinan.safetyeval.domain.gateway.EvalProjectMemberGateway; import org.qinan.safetyeval.domain.gateway.EvalReportDraftGateway; import org.qinan.safetyeval.domain.gateway.EvalReportGateway; import org.qinan.safetyeval.domain.gateway.EvalSignTaskGateway; +import org.qinan.safetyeval.domain.gateway.*; import org.qinan.safetyeval.domain.item.gateway.EvalReviewItemGateway; import org.qinan.safetyeval.domain.item.model.EvalReviewItemE; import org.qinan.safetyeval.domain.query.EvalReportDraftQuery; @@ -177,13 +179,13 @@ public class EvalProcessControlExecutor implements EvalProcessControlApi { @Override public SingleResponse getDetailByProject(Long projectId) { // 1. 查询项目成员中的过程控制负责人信息 - List members = evalProjectMemberGateway - .listByProjectIdAndRoleCode(projectId, NodeWriteAuthority.ROLE_PROCESS_OWNER); +// List members = evalProjectMemberGateway +// .listByProjectIdAndRoleCode(projectId, NodeWriteAuthority.ROLE_PROCESS_OWNER); // 2. 查询过程控制记录,未查询到则过程控制记录字段为空 EvalProcessControlEntity entity = evalProcessControlGateway.getByProjectId(projectId, null); EvalProcessControlDetailCO detailCO = new EvalProcessControlDetailCO(); - detailCO.setControllers(evalProcessControlConvertor.toMemberCOs(members)); +// detailCO.setControllers(evalProcessControlConvertor.toMemberCOs(members)); if (entity != null) { detailCO.setProcessControl(EvalNodeCoConverter.toProcessCO(entity)); // 3. 通过过程控制记录id查询审核项列表 diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProjectMemberExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProjectMemberExecutor.java index 783771b..3c1e494 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProjectMemberExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProjectMemberExecutor.java @@ -1,26 +1,27 @@ package org.qinan.safetyeval.app.executor.institution; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.qinan.safetyeval.app.convertor.EvalProjectMemberCmdConvertor; import org.qinan.safetyeval.client.api.institution.EvalProjectMemberApi; import org.qinan.safetyeval.client.co.institution.EvalProjectMemberCO; import org.qinan.safetyeval.client.dto.PageResponse; import org.qinan.safetyeval.client.dto.SingleResponse; import org.qinan.safetyeval.client.dto.institution.EvalProjectMemberAddCmd; -import org.qinan.safetyeval.client.dto.institution.EvalProjectMemberModifyCmd; import org.qinan.safetyeval.client.dto.institution.EvalProjectMemberPageQuery; -import org.qinan.safetyeval.domain.entity.EvalProjectEntity; import org.qinan.safetyeval.domain.entity.EvalProjectMemberEntity; import org.qinan.safetyeval.domain.exception.ErrorCode; import org.qinan.safetyeval.domain.query.EvalProjectMemberQuery; import org.qinan.safetyeval.domain.query.PageResult; -import org.qinan.safetyeval.domain.service.EvalProjectDomainService; import org.qinan.safetyeval.domain.service.EvalProjectMemberDomainService; +import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectMemberDO; +import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMemberMapper; import org.qinan.safetyeval.infrastructure.support.InstitutionOrgSupport; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; -import java.util.stream.Collectors; @Service public class EvalProjectMemberExecutor implements EvalProjectMemberApi { @@ -31,95 +32,39 @@ public class EvalProjectMemberExecutor implements EvalProjectMemberApi { @Lazy @Autowired(required = false) - private EvalProjectDomainService evalProjectDomainService; + private InstitutionOrgSupport institutionOrgSupport; @Lazy @Autowired(required = false) - private InstitutionOrgSupport institutionOrgSupport; - + private EvalProjectMemberCmdConvertor evalProjectMemberCmdConvertor; + @Autowired + private EvalProjectMemberMapper evalProjectMemberMapper; @Override - public SingleResponse save(EvalProjectMemberAddCmd cmd) { - Long orgId = institutionOrgSupport.resolveCurrentOrgId(); - assertProjectInOrg(Long.parseLong(cmd.getProjectId()), orgId); - EvalProjectMemberEntity entity = new EvalProjectMemberEntity(); - entity.setProjectId(Long.parseLong(cmd.getProjectId())); - entity.setPersonnelId(Long.parseLong(cmd.getPersonnelId())); - entity.setRoleCode(cmd.getRoleCode()); - entity.setRoleName(cmd.getRoleName()); - entity.setLeaderFlag(cmd.getLeaderFlag()); - EvalProjectMemberEntity result = evalProjectMemberDomainService.add(entity, orgId); - return SingleResponse.success(toCO(result)); - } - - @Override - public SingleResponse modify(EvalProjectMemberModifyCmd cmd) { - Long orgId = institutionOrgSupport.resolveCurrentOrgId(); - EvalProjectMemberEntity existing = evalProjectMemberDomainService.get(Long.parseLong(cmd.getId())); - institutionOrgSupport.assertOrgAccess(existing.getOrgId(), ErrorCode.EVAL_PROJECT_MEMBER_NOT_FOUND); - EvalProjectMemberEntity entity = new EvalProjectMemberEntity(); - entity.setId(Long.parseLong(cmd.getId())); - if (cmd.getPersonnelId() != null) { - entity.setPersonnelId(Long.parseLong(cmd.getPersonnelId())); + @Transactional(rollbackFor = Exception.class) + public SingleResponse save(List cmdList) { + evalProjectMemberMapper.delete(new LambdaQueryWrapper() + .eq(EvalProjectMemberDO::getProjectId, cmdList.get(0).getProjectId())); + for (EvalProjectMemberAddCmd cmd : cmdList) { + Long orgId = institutionOrgSupport.resolveCurrentOrgId(); + EvalProjectMemberEntity entity = evalProjectMemberCmdConvertor.convertAddCmdToE(cmd); + if (entity.getId() == null) { + entity.setOrgId(orgId); + } else { + EvalProjectMemberEntity existing = evalProjectMemberDomainService.get(entity.getId()); + institutionOrgSupport.assertOrgAccess(existing.getOrgId(), ErrorCode.EVAL_PROJECT_MEMBER_NOT_FOUND); + } + evalProjectMemberDomainService.saveOrUpdate(entity); } - entity.setRoleCode(cmd.getRoleCode()); - entity.setRoleName(cmd.getRoleName()); - entity.setLeaderFlag(cmd.getLeaderFlag()); - EvalProjectMemberEntity result = evalProjectMemberDomainService.modify(entity, orgId); - return SingleResponse.success(toCO(result)); - } - - @Override - public SingleResponse delete(Long id) { - Long orgId = institutionOrgSupport.resolveCurrentOrgId(); - EvalProjectMemberEntity existing = evalProjectMemberDomainService.get(id); - institutionOrgSupport.assertOrgAccess(existing.getOrgId(), ErrorCode.EVAL_PROJECT_MEMBER_NOT_FOUND); - evalProjectMemberDomainService.delete(id, orgId); - return SingleResponse.success(); - } - - @Override - public SingleResponse> listByProject(Long projectId) { - Long orgId = institutionOrgSupport.resolveCurrentOrgId(); - assertProjectInOrg(projectId, orgId); - List list = evalProjectMemberDomainService.listByProjectId(projectId, orgId).stream() - .map(this::toCO) - .collect(Collectors.toList()); - return SingleResponse.success(list); + return SingleResponse.success(true); } @Override public PageResponse page(EvalProjectMemberPageQuery query) { - Long orgId = institutionOrgSupport.resolveCurrentOrgId(); - EvalProjectMemberQuery domainQuery = new EvalProjectMemberQuery(); - domainQuery.setPageNum(query.getCurrent()); - domainQuery.setPageSize(query.getSize()); - domainQuery.setOrgId(orgId); - if (query.getProjectId() != null) { - domainQuery.setProjectId(Long.parseLong(query.getProjectId())); - } + EvalProjectMemberQuery domainQuery = evalProjectMemberCmdConvertor.convertPageQueryToQ(query); + domainQuery.setOrgId(institutionOrgSupport.resolveCurrentOrgId()); PageResult pageResult = evalProjectMemberDomainService.page(domainQuery); return PageResponse.of( - pageResult.getRecords().stream().map(this::toCO).collect(Collectors.toList()), + evalProjectMemberCmdConvertor.convertEListToCOList(pageResult.getRecords()), pageResult.getTotal()); } - - private void assertProjectInOrg(Long projectId, Long orgId) { - EvalProjectEntity project = evalProjectDomainService.get(projectId); - institutionOrgSupport.assertOrgAccess(project.getOrgId(), ErrorCode.EVAL_PROJECT_NOT_FOUND); - } - - private EvalProjectMemberCO toCO(EvalProjectMemberEntity entity) { - if (entity == null) { - return null; - } - EvalProjectMemberCO co = new EvalProjectMemberCO(); - co.setId(entity.getId() != null ? String.valueOf(entity.getId()) : null); - co.setProjectId(entity.getProjectId() != null ? String.valueOf(entity.getProjectId()) : null); - co.setPersonnelId(entity.getPersonnelId() != null ? String.valueOf(entity.getPersonnelId()) : null); - co.setPersonnelName(entity.getPersonnelName()); - co.setRoleCode(entity.getRoleCode()); - co.setRoleName(entity.getRoleName()); - co.setLeaderFlag(entity.getLeaderFlag()); - return co; - } } 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 b36c6d5..ced8b85 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 @@ -17,7 +17,6 @@ import org.qinan.safetyeval.client.item.response.EvalReviewItemCo; import org.qinan.safetyeval.domain.constant.ProjectStageEnum; import org.qinan.safetyeval.domain.constant.ReviewDimensionEnum; import org.qinan.safetyeval.domain.entity.EvalProjectEntity; -import org.qinan.safetyeval.domain.entity.EvalProjectMemberEntity; import org.qinan.safetyeval.domain.entity.EvalTechReviewEntity; import org.qinan.safetyeval.domain.exception.BizException; import org.qinan.safetyeval.domain.exception.ErrorCode; @@ -31,12 +30,10 @@ import org.qinan.safetyeval.infrastructure.convertor.EvalTechReviewConvertor; import org.qinan.safetyeval.infrastructure.dataobject.EvalTechReviewDO; import org.qinan.safetyeval.infrastructure.mapper.EvalTechReviewMapper; import org.qinan.safetyeval.infrastructure.persistence.queryservice.EvalReviewItemQueryService; -import org.qinan.safetyeval.infrastructure.support.NodeWriteAuthority; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.List; import java.util.stream.Collectors; import static org.qinan.safetyeval.domain.exception.ErrorCode.ASSIGN_SIGN_TASK; @@ -152,13 +149,13 @@ public class EvalTechReviewExecutor implements EvalTechReviewApi { @Override public SingleResponse getDetailByProject(Long projectId) { // 1. 查询项目成员中的技审人信息 - List members = evalProjectMemberGateway - .listByProjectIdAndRoleCode(projectId, NodeWriteAuthority.ROLE_TECH_REVIEWER); +// List members = evalProjectMemberGateway +// .listByProjectIdAndRoleCode(projectId, NodeWriteAuthority.ROLE_TECH_REVIEWER); // 2. 查询技审记录,未查询到则技审记录字段为空 EvalTechReviewEntity entity = evalTechReviewGateway.getByProjectId(projectId, null); EvalTechReviewDetailCO detailCO = new EvalTechReviewDetailCO(); - detailCO.setReviewers(evalTechReviewConvertor.toMemberCOs(members)); +// detailCO.setReviewers(evalTechReviewConvertor.toMemberCOs(members)); if (entity != null) { detailCO.setTechReview(evalTechReviewConvertor.toTechCO(entity)); // 3. 通过技审记录id查询审核项列表 diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalProjectMemberApi.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalProjectMemberApi.java index 21e9c5e..d76878f 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalProjectMemberApi.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalProjectMemberApi.java @@ -4,20 +4,13 @@ import org.qinan.safetyeval.client.co.institution.EvalProjectMemberCO; import org.qinan.safetyeval.client.dto.PageResponse; import org.qinan.safetyeval.client.dto.SingleResponse; import org.qinan.safetyeval.client.dto.institution.EvalProjectMemberAddCmd; -import org.qinan.safetyeval.client.dto.institution.EvalProjectMemberModifyCmd; import org.qinan.safetyeval.client.dto.institution.EvalProjectMemberPageQuery; import java.util.List; public interface EvalProjectMemberApi { - SingleResponse save(EvalProjectMemberAddCmd cmd); - - SingleResponse modify(EvalProjectMemberModifyCmd cmd); - - SingleResponse delete(Long id); - - SingleResponse> listByProject(Long projectId); + SingleResponse save(List cmd); PageResponse page(EvalProjectMemberPageQuery query); } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectMemberCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectMemberCO.java index 6d17b7e..c6676e7 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectMemberCO.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectMemberCO.java @@ -3,6 +3,8 @@ package org.qinan.safetyeval.client.co.institution; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + @Data public class EvalProjectMemberCO { @@ -18,12 +20,18 @@ public class EvalProjectMemberCO { @ApiModelProperty("人员姓名") private String personnelName; - @ApiModelProperty(value = "项目角色编码:LEADER项目负责人 PROCESS_OWNER过程控制负责人 RISK_OWNER风险分析负责人 CONTRACT_OWNER合同办理人 SURVEY_OWNER踏勘负责人 DRAFT_OWNER报告编制人 INTERNAL_REVIEWER内部审核人 TECH_REVIEWER技术审核人 MEMBER项目组成员", example = "LEADER") - private String roleCode; + @ApiModelProperty("部门名称") + private String deptName; - @ApiModelProperty(value = "项目角色名称:项目负责人/过程控制负责人/风险分析负责人/合同办理人/踏勘负责人/报告编制人/内部审核人/技术审核人/项目组成员", example = "项目负责人") - private String roleName; + @ApiModelProperty("岗位") + private String posName; - @ApiModelProperty(value = "是否负责人:1是 2否", example = "2") - private Integer leaderFlag; + @ApiModelProperty("人员能力") + private String capacity; + + @ApiModelProperty("职责") + private String responsibility; + + @ApiModelProperty(value = "角色数组", example = "[\"角色1\",\"角色2\"]") + private List role; } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectMemberAddCmd.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectMemberAddCmd.java index 2784e7d..754376b 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectMemberAddCmd.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectMemberAddCmd.java @@ -3,21 +3,35 @@ package org.qinan.safetyeval.client.dto.institution; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + @Data public class EvalProjectMemberAddCmd { +// @ApiModelProperty("主键ID,为空新增,不为空修改") +// private String id; + @ApiModelProperty("项目ID") private String projectId; @ApiModelProperty("人员ID") private String personnelId; - @ApiModelProperty(value = "项目角色编码:LEADER项目负责人 PROCESS_OWNER过程控制负责人 RISK_OWNER风险分析负责人 CONTRACT_OWNER合同办理人 SURVEY_OWNER踏勘负责人 DRAFT_OWNER报告编制人 INTERNAL_REVIEWER内部审核人 TECH_REVIEWER技术审核人 MEMBER项目组成员", example = "LEADER") - private String roleCode; + @ApiModelProperty("人员姓名") + private String personnelName; - @ApiModelProperty(value = "项目角色名称:项目负责人/过程控制负责人/风险分析负责人/合同办理人/踏勘负责人/报告编制人/内部审核人/技术审核人/项目组成员", example = "项目负责人") - private String roleName; + @ApiModelProperty("部门名称") + private String deptName; - @ApiModelProperty(value = "是否负责人:1是 2否", example = "2") - private Integer leaderFlag; + @ApiModelProperty("岗位") + private String posName; + + @ApiModelProperty("人员能力") + private String capacity; + + @ApiModelProperty("职责") + private String responsibility; + + @ApiModelProperty(value = "角色数组", example = "['1','2']") + private List role; } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectMemberModifyCmd.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectMemberModifyCmd.java deleted file mode 100644 index da83e8b..0000000 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectMemberModifyCmd.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.qinan.safetyeval.client.dto.institution; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -@Data -public class EvalProjectMemberModifyCmd { - - @ApiModelProperty("主键ID") - private String id; - - @ApiModelProperty("人员ID") - private String personnelId; - - @ApiModelProperty(value = "项目角色编码:LEADER项目负责人 PROCESS_OWNER过程控制负责人 RISK_OWNER风险分析负责人 CONTRACT_OWNER合同办理人 SURVEY_OWNER踏勘负责人 DRAFT_OWNER报告编制人 INTERNAL_REVIEWER内部审核人 TECH_REVIEWER技术审核人 MEMBER项目组成员", example = "LEADER") - private String roleCode; - - @ApiModelProperty(value = "项目角色名称:项目负责人/过程控制负责人/风险分析负责人/合同办理人/踏勘负责人/报告编制人/内部审核人/技术审核人/项目组成员", example = "项目负责人") - private String roleName; - - @ApiModelProperty(value = "是否负责人:1是 2否", example = "2") - private Integer leaderFlag; -} 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 new file mode 100644 index 0000000..e265d8a --- /dev/null +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/MsgConstant.java @@ -0,0 +1,6 @@ +package org.qinan.safetyeval.domain.constant; + +public interface MsgConstant { + String MSG_TYPE_SYSTEM = "system"; + Long MSG_TYPE_SYSTEM_ID = 0L; +} diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/EvalProjectMemberEntity.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/EvalProjectMemberEntity.java index 0848cfa..3049c9e 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/EvalProjectMemberEntity.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/EvalProjectMemberEntity.java @@ -2,6 +2,8 @@ package org.qinan.safetyeval.domain.entity; import lombok.Data; +import java.util.List; + @Data public class EvalProjectMemberEntity { @@ -10,8 +12,10 @@ public class EvalProjectMemberEntity { private Long projectId; private Long personnelId; private String personnelName; - private String roleCode; - private String roleName; - private Integer leaderFlag; + private String deptName; + private String posName; + private String capacity; + private String responsibility; + private List role; private Long tenantId; } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/EvalProjectMemberGateway.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/EvalProjectMemberGateway.java index 891ecab..f27b93b 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/EvalProjectMemberGateway.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/EvalProjectMemberGateway.java @@ -14,17 +14,7 @@ public interface EvalProjectMemberGateway { EvalProjectMemberEntity modify(EvalProjectMemberEntity entity); - void delete(Long id); - PageResult page(EvalProjectMemberQuery query); List listByProjectId(Long projectId, Long orgId); - - List listByProjectIdAndRoleCode(Long projectId, String roleCode); - - List listProjectIdsByPersonnelId(Long personnelId, Long orgId); - - List listByPersonnelId(Long personnelId, Long orgId); - - void clearLeadersOnProject(Long projectId, Long excludeMemberId, Long orgId); } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/EvalProjectMemberQuery.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/EvalProjectMemberQuery.java index 7cab39a..01168c6 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/EvalProjectMemberQuery.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/EvalProjectMemberQuery.java @@ -9,6 +9,4 @@ public class EvalProjectMemberQuery { private Long pageSize; private Long orgId; private Long projectId; - private Long personnelId; - private String roleCode; } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/EvalProjectMemberDomainService.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/EvalProjectMemberDomainService.java index 05cf1c0..1cfc525 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/EvalProjectMemberDomainService.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/EvalProjectMemberDomainService.java @@ -1,15 +1,12 @@ package org.qinan.safetyeval.domain.service; import org.qinan.safetyeval.domain.entity.EvalProjectMemberEntity; -import org.qinan.safetyeval.domain.entity.OrgPersonnelEntity; import org.qinan.safetyeval.domain.exception.BizException; import org.qinan.safetyeval.domain.exception.ErrorCode; import org.qinan.safetyeval.domain.gateway.EvalProjectMemberGateway; -import org.qinan.safetyeval.domain.gateway.OrgPersonnelGateway; import org.qinan.safetyeval.domain.query.EvalProjectMemberQuery; import org.qinan.safetyeval.domain.query.PageResult; import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.util.List; @@ -17,22 +14,19 @@ import java.util.List; @Service public class EvalProjectMemberDomainService { - private static final String ROLE_LEADER = "LEADER"; - @Resource private EvalProjectMemberGateway evalProjectMemberGateway; - @Resource - private EvalProjectDomainService evalProjectDomainService; - - @Resource - private OrgPersonnelGateway orgPersonnelGateway; - - public EvalProjectMemberEntity add(EvalProjectMemberEntity entity, Long orgId) { - EvalProjectMemberEntity prepared = prepareMember(entity, orgId); - EvalProjectMemberEntity saved = evalProjectMemberGateway.save(prepared); - syncLeader(saved, orgId); - return saved; + public EvalProjectMemberEntity saveOrUpdate(EvalProjectMemberEntity entity) { + if (entity.getId() == null) { + return evalProjectMemberGateway.save(entity); + } + EvalProjectMemberEntity existing = evalProjectMemberGateway.get(entity.getId()); + if (existing == null) { + throw new BizException(ErrorCode.EVAL_PROJECT_MEMBER_NOT_FOUND); + } + entity.setOrgId(existing.getOrgId()); + return evalProjectMemberGateway.modify(entity); } public EvalProjectMemberEntity get(Long id) { @@ -43,33 +37,6 @@ public class EvalProjectMemberDomainService { return existing; } - public EvalProjectMemberEntity modify(EvalProjectMemberEntity entity, Long orgId) { - EvalProjectMemberEntity existing = get(entity.getId()); - evalProjectDomainService.assertModifiable(evalProjectDomainService.get(existing.getProjectId())); - entity.setProjectId(existing.getProjectId()); - entity.setOrgId(existing.getOrgId()); - if (entity.getPersonnelId() != null) { - OrgPersonnelEntity personnel = requirePersonnelInOrg(entity.getPersonnelId(), orgId); - entity.setPersonnelName(personnel.getUserName()); - } else { - entity.setPersonnelId(existing.getPersonnelId()); - entity.setPersonnelName(existing.getPersonnelName()); - } - normalizeLeaderFlag(entity); - EvalProjectMemberEntity saved = evalProjectMemberGateway.modify(entity); - syncLeader(saved, orgId); - return saved; - } - - public void delete(Long id, Long orgId) { - EvalProjectMemberEntity existing = get(id); - evalProjectDomainService.assertModifiable(evalProjectDomainService.get(existing.getProjectId())); - evalProjectMemberGateway.delete(id); - if (isLeader(existing)) { - refreshProjectLeader(existing.getProjectId(), orgId); - } - } - public PageResult page(EvalProjectMemberQuery query) { return evalProjectMemberGateway.page(query); } @@ -77,75 +44,4 @@ public class EvalProjectMemberDomainService { public List listByProjectId(Long projectId, Long orgId) { return evalProjectMemberGateway.listByProjectId(projectId, orgId); } - - public List listProjectIdsByPersonnelId(Long personnelId, Long orgId) { - return evalProjectMemberGateway.listProjectIdsByPersonnelId(personnelId, orgId); - } - - public List listByPersonnelId(Long personnelId, Long orgId) { - return evalProjectMemberGateway.listByPersonnelId(personnelId, orgId); - } - - private EvalProjectMemberEntity prepareMember(EvalProjectMemberEntity entity, Long orgId) { - evalProjectDomainService.assertModifiable(evalProjectDomainService.get(entity.getProjectId())); - entity.setOrgId(orgId); - OrgPersonnelEntity personnel = requirePersonnelInOrg(entity.getPersonnelId(), orgId); - entity.setPersonnelName(personnel.getUserName()); - if (entity.getLeaderFlag() == null) { - entity.setLeaderFlag(2); - } - normalizeLeaderFlag(entity); - return entity; - } - - private OrgPersonnelEntity requirePersonnelInOrg(Long personnelId, Long orgId) { - OrgPersonnelEntity personnel = orgPersonnelGateway.get(personnelId); - if (personnel == null) { - throw new BizException(ErrorCode.ORG_PERSONNEL_NOT_FOUND); - } - if (!orgId.equals(personnel.getOrgId())) { - throw new BizException(ErrorCode.EVAL_PERSONNEL_ORG_MISMATCH); - } - return personnel; - } - - private void normalizeLeaderFlag(EvalProjectMemberEntity entity) { - if (isLeader(entity)) { - entity.setLeaderFlag(1); - if (!StringUtils.hasText(entity.getRoleCode())) { - entity.setRoleCode(ROLE_LEADER); - } - if (!StringUtils.hasText(entity.getRoleName())) { - entity.setRoleName("负责人"); - } - } else if (entity.getLeaderFlag() == null) { - entity.setLeaderFlag(2); - } - } - - private boolean isLeader(EvalProjectMemberEntity entity) { - return (entity.getLeaderFlag() != null && entity.getLeaderFlag() == 1) - || ROLE_LEADER.equalsIgnoreCase(entity.getRoleCode()); - } - - private void syncLeader(EvalProjectMemberEntity member, Long orgId) { - if (isLeader(member)) { - evalProjectMemberGateway.clearLeadersOnProject(member.getProjectId(), member.getId(), orgId); - member.setLeaderFlag(1); - evalProjectMemberGateway.modify(member); - evalProjectDomainService.updateLeader(member.getProjectId(), member.getPersonnelId(), member.getPersonnelName()); - } else { - refreshProjectLeader(member.getProjectId(), orgId); - } - } - - private void refreshProjectLeader(Long projectId, Long orgId) { - List members = evalProjectMemberGateway.listByProjectId(projectId, orgId); - EvalProjectMemberEntity leader = members.stream().filter(this::isLeader).findFirst().orElse(null); - if (leader != null) { - evalProjectDomainService.updateLeader(projectId, leader.getPersonnelId(), leader.getPersonnelName()); - } else { - evalProjectDomainService.updateLeader(projectId, null, null); - } - } } diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/convertor/EvalInternalReviewConvertor.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/convertor/EvalInternalReviewConvertor.java index 722f225..c889e85 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/convertor/EvalInternalReviewConvertor.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/convertor/EvalInternalReviewConvertor.java @@ -1,16 +1,9 @@ package org.qinan.safetyeval.infrastructure.convertor; import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.MappingTarget; import org.qinan.safetyeval.client.co.institution.EvalInternalReviewCO; -import org.qinan.safetyeval.client.co.institution.EvalProjectMemberCO; -import org.qinan.safetyeval.client.dto.institution.EvalInternalReviewAssignCmd; import org.qinan.safetyeval.client.dto.institution.EvalInternalReviewConfirmCmd; import org.qinan.safetyeval.domain.entity.EvalInternalReviewEntity; -import org.qinan.safetyeval.domain.entity.EvalProjectMemberEntity; - -import java.util.List; /** * 内审相关对象转换器。 @@ -20,14 +13,8 @@ public interface EvalInternalReviewConvertor { EvalInternalReviewCO toInternalCO(EvalInternalReviewEntity entity); - EvalProjectMemberCO toMemberCO(EvalProjectMemberEntity entity); - - List toMemberCOs(List entities); - /** * 将 ConfirmCmd 转换为新的 entity(projectId、reviewerPersonnelId 由 String 转 Long)。 */ EvalInternalReviewEntity applyConfirmCmd(EvalInternalReviewConfirmCmd cmd); - - } diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/convertor/EvalProjectMemberDoConvertor.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/convertor/EvalProjectMemberDoConvertor.java index e0af2c7..edab48f 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/convertor/EvalProjectMemberDoConvertor.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/convertor/EvalProjectMemberDoConvertor.java @@ -1,13 +1,37 @@ package org.qinan.safetyeval.infrastructure.convertor; +import cn.hutool.json.JSONUtil; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; import org.qinan.safetyeval.domain.entity.EvalProjectMemberEntity; import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectMemberDO; +import java.util.List; + @Mapper(componentModel = "spring") public interface EvalProjectMemberDoConvertor { + @Mapping(target = "role", expression = "java(listToJson(entity.getRole()))") + @Mapping(target = "deleteEnum", ignore = true) + @Mapping(target = "remarks", ignore = true) + @Mapping(target = "createName", ignore = true) + @Mapping(target = "updateName", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "createTime", ignore = true) + @Mapping(target = "updateTime", ignore = true) + @Mapping(target = "createId", ignore = true) + @Mapping(target = "updateId", ignore = true) + @Mapping(target = "env", ignore = true) EvalProjectMemberDO convertEToDo(EvalProjectMemberEntity entity); + @Mapping(target = "role", expression = "java(jsonToList(dataObject.getRole()))") EvalProjectMemberEntity convertDoToE(EvalProjectMemberDO dataObject); + + default String listToJson(List list) { + return list == null ? null : JSONUtil.toJsonStr(list); + } + + default List jsonToList(String json) { + return json == null ? null : JSONUtil.toList(json, String.class); + } } diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/EvalProjectMemberDO.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/EvalProjectMemberDO.java index f01d839..f7da4d0 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/EvalProjectMemberDO.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/EvalProjectMemberDO.java @@ -14,12 +14,16 @@ public class EvalProjectMemberDO { private Long projectId; private Long personnelId; private String personnelName; - /** 项目角色编码:LEADER项目负责人 PROCESS_OWNER过程控制负责人 RISK_OWNER风险分析负责人 CONTRACT_OWNER合同办理人 SURVEY_OWNER踏勘负责人 DRAFT_OWNER报告编制人 INTERNAL_REVIEWER内部审核人 TECH_REVIEWER技术审核人 MEMBER项目组成员,示例:LEADER */ - private String roleCode; - /** 项目角色名称:项目负责人/过程控制负责人/风险分析负责人/合同办理人/踏勘负责人/报告编制人/内部审核人/技术审核人/项目组成员,示例:项目负责人 */ - private String roleName; - /** 是否负责人:1是 2否,示例:2 */ - private Integer leaderFlag; + private String deptName; + private String posName; + private String capacity; + private String responsibility; + /** + * 0:未发送 1:已发送 + */ + private Integer msgSendState; + /** 角色 JSON 数组,示例:["角色1","角色2"] */ + private String role; private String deleteEnum; private String remarks; private String createName; diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalProjectMemberGatewayImpl.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalProjectMemberGatewayImpl.java index 809227d..7838411 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalProjectMemberGatewayImpl.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalProjectMemberGatewayImpl.java @@ -3,8 +3,11 @@ package org.qinan.safetyeval.infrastructure.gatewayimpl; 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.MsgConstant; import org.qinan.safetyeval.domain.entity.EvalProjectMemberEntity; +import org.qinan.safetyeval.domain.entity.SafetyMessageEntity; import org.qinan.safetyeval.domain.gateway.EvalProjectMemberGateway; +import org.qinan.safetyeval.domain.gateway.SafetyMessageGateway; import org.qinan.safetyeval.domain.query.EvalProjectMemberQuery; import org.qinan.safetyeval.domain.query.PageResult; import org.qinan.safetyeval.infrastructure.convertor.EvalProjectMemberDoConvertor; @@ -12,10 +15,12 @@ import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectMemberDO; import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMemberMapper; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.qinan.safetyeval.infrastructure.support.OrgContextResolver; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.Collections; +import java.time.LocalDateTime; import java.util.List; import java.util.stream.Collectors; @@ -31,12 +36,27 @@ public class EvalProjectMemberGatewayImpl implements EvalProjectMemberGateway { @Resource private EvalProjectMemberDoConvertor evalProjectMemberDoConvertor; + @Autowired + private SafetyMessageGateway safetyMessageGateway; + @Override + @Transactional(rollbackFor = Exception.class) public EvalProjectMemberEntity save(EvalProjectMemberEntity entity) { - EvalProjectMemberDO dataObject = toDO(entity); + EvalProjectMemberDO dataObject = evalProjectMemberDoConvertor.convertEToDo(entity); + dataObject.setOrgId(orgContextResolver.resolveOrgId(entity.getOrgId())); InsertFieldDefaults.apply(dataObject); evalProjectMemberMapper.insert(dataObject); entity.setId(dataObject.getId()); + // 站内信通知 + SafetyMessageEntity safetyMessageEntity = new SafetyMessageEntity(); + safetyMessageEntity.setSendName(MsgConstant.MSG_TYPE_SYSTEM); + safetyMessageEntity.setSendId(MsgConstant.MSG_TYPE_SYSTEM_ID); + safetyMessageEntity.setSendType("系统发送"); + safetyMessageEntity.setSendContent("您被添加为项目成员,请及时处理"); + safetyMessageEntity.setReceiveId(entity.getPersonnelId()); + safetyMessageEntity.setSendState(0); + safetyMessageEntity.setCreateTime(LocalDateTime.now()); + safetyMessageGateway.save(safetyMessageEntity); return entity; } @@ -50,19 +70,16 @@ public class EvalProjectMemberGatewayImpl implements EvalProjectMemberGateway { } @Override + @Transactional(rollbackFor = Exception.class) public EvalProjectMemberEntity modify(EvalProjectMemberEntity entity) { - EvalProjectMemberDO dataObject = toDO(entity); + EvalProjectMemberDO dataObject = evalProjectMemberDoConvertor.convertEToDo(entity); dataObject.setId(entity.getId()); + dataObject.setOrgId(orgContextResolver.resolveOrgId(entity.getOrgId())); InsertFieldDefaults.applyForUpdate(dataObject); evalProjectMemberMapper.updateById(dataObject); return get(entity.getId()); } - @Override - public void delete(Long id) { - evalProjectMemberMapper.deleteById(id); - } - @Override public PageResult page(EvalProjectMemberQuery query) { Page page = new Page<>(query.getPageNum(), query.getPageSize()); @@ -83,60 +100,6 @@ public class EvalProjectMemberGatewayImpl implements EvalProjectMemberGateway { .collect(Collectors.toList()); } - @Override - public List listByProjectIdAndRoleCode(Long projectId, String roleCode) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(EvalProjectMemberDO::getDeleteEnum, "false"); - wrapper.eq(EvalProjectMemberDO::getProjectId, projectId); - wrapper.eq(EvalProjectMemberDO::getRoleCode, roleCode); - - wrapper.orderByDesc(EvalProjectMemberDO::getCreateTime); - return evalProjectMemberMapper.selectList(wrapper).stream() - .map(evalProjectMemberDoConvertor::convertDoToE) - .collect(Collectors.toList()); - } - - @Override - public List listProjectIdsByPersonnelId(Long personnelId, Long orgId) { - return listByPersonnelId(personnelId, orgId).stream() - .map(EvalProjectMemberEntity::getProjectId) - .distinct() - .collect(Collectors.toList()); - } - - @Override - public List listByPersonnelId(Long personnelId, Long orgId) { - if (personnelId == null) { - return Collections.emptyList(); - } - EvalProjectMemberQuery query = new EvalProjectMemberQuery(); - query.setPersonnelId(personnelId); - query.setOrgId(orgId); - return evalProjectMemberMapper.selectList(buildQueryWrapper(query)).stream() - .map(evalProjectMemberDoConvertor::convertDoToE) - .collect(Collectors.toList()); - } - - @Override - public void clearLeadersOnProject(Long projectId, Long excludeMemberId, Long orgId) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(EvalProjectMemberDO::getDeleteEnum, "false"); - wrapper.eq(EvalProjectMemberDO::getProjectId, projectId); - wrapper.eq(EvalProjectMemberDO::getLeaderFlag, 1); - if (orgId != null) { - wrapper.eq(EvalProjectMemberDO::getOrgId, orgId); - } - if (excludeMemberId != null) { - wrapper.ne(EvalProjectMemberDO::getId, excludeMemberId); - } - List leaders = evalProjectMemberMapper.selectList(wrapper); - for (EvalProjectMemberDO leader : leaders) { - leader.setLeaderFlag(2); - InsertFieldDefaults.applyForUpdate(leader); - evalProjectMemberMapper.updateById(leader); - } - } - private LambdaQueryWrapper buildQueryWrapper(EvalProjectMemberQuery query) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(EvalProjectMemberDO::getDeleteEnum, "false"); @@ -146,19 +109,7 @@ public class EvalProjectMemberGatewayImpl implements EvalProjectMemberGateway { if (query.getProjectId() != null) { wrapper.eq(EvalProjectMemberDO::getProjectId, query.getProjectId()); } - if (query.getPersonnelId() != null) { - wrapper.eq(EvalProjectMemberDO::getPersonnelId, query.getPersonnelId()); - } - if (query.getRoleCode() != null) { - wrapper.eq(EvalProjectMemberDO::getRoleCode, query.getRoleCode()); - } wrapper.orderByDesc(EvalProjectMemberDO::getCreateTime); return wrapper; } - - private EvalProjectMemberDO toDO(EvalProjectMemberEntity entity) { - EvalProjectMemberDO dataObject = evalProjectMemberDoConvertor.convertEToDo(entity); - dataObject.setOrgId(orgContextResolver.resolveOrgId(entity.getOrgId())); - return dataObject; - } } diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/support/NodeWriteAuthority.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/support/NodeWriteAuthority.java index 5b03175..8f1a39e 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/support/NodeWriteAuthority.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/support/NodeWriteAuthority.java @@ -14,14 +14,10 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import javax.annotation.Resource; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; import java.util.List; -import java.util.Set; /** - * 八节点写权限:LEADER 或节点对应角色;签字任务额外允许 DRAFT_OWNER 与任意项目成员。 + * 八节点写权限:成员角色模型变更后,暂仅校验是否为项目成员。 */ @Component public class NodeWriteAuthority { @@ -59,26 +55,11 @@ public class NodeWriteAuthority { } public boolean canWrite(Long projectId, Long orgId, String nodeCode) { - Long personnelId = resolveCurrentPersonnelId(); - if (personnelId == null) { - return false; - } List members = evalProjectMemberDomainService.listByProjectId(projectId, orgId); if (CollectionUtils.isEmpty(members)) { return EvalNodeCodes.NODE_03.equals(nodeCode) || EvalNodeCodes.SIGN.equals(nodeCode); } - EvalProjectMemberEntity mine = members.stream() - .filter(m -> personnelId.equals(m.getPersonnelId())) - .findFirst() - .orElse(null); - if (mine == null) { - return false; - } - if (isLeader(mine)) { - return true; - } - Set allowed = allowedRoles(nodeCode); - return allowed.contains(mine.getRoleCode()); + return isProjectMember(projectId, orgId); } public void assertWrite(Long projectId, Long orgId, String nodeCode) { @@ -101,39 +82,4 @@ public class NodeWriteAuthority { throw new BizException(ErrorCode.EVAL_NODE_FORBIDDEN); } } - - private Set allowedRoles(String nodeCode) { - if (!StringUtils.hasText(nodeCode)) { - return Collections.emptySet(); - } - switch (nodeCode) { - case EvalNodeCodes.NODE_01: - return new HashSet<>(Arrays.asList(ROLE_RISK_OWNER, ROLE_LEADER)); - case EvalNodeCodes.NODE_02: - return new HashSet<>(Arrays.asList(ROLE_CONTRACT_OWNER, ROLE_LEADER)); - case EvalNodeCodes.NODE_03: - return new HashSet<>(Collections.singletonList(ROLE_LEADER)); - case EvalNodeCodes.NODE_04: - return new HashSet<>(Arrays.asList(ROLE_SURVEY_OWNER, ROLE_LEADER)); - case EvalNodeCodes.NODE_05: - return new HashSet<>(Arrays.asList(ROLE_DRAFT_OWNER, ROLE_LEADER)); - case EvalNodeCodes.NODE_06: - return new HashSet<>(Arrays.asList(ROLE_INTERNAL_REVIEWER, ROLE_LEADER)); - case EvalNodeCodes.NODE_07: - return new HashSet<>(Arrays.asList(ROLE_TECH_REVIEWER, ROLE_LEADER)); - case EvalNodeCodes.NODE_08: - return new HashSet<>(Arrays.asList(ROLE_PROCESS_OWNER, ROLE_LEADER)); - case EvalNodeCodes.SIGN: - return new HashSet<>(Arrays.asList(ROLE_LEADER, ROLE_DRAFT_OWNER, ROLE_MEMBER, - ROLE_RISK_OWNER, ROLE_CONTRACT_OWNER, ROLE_SURVEY_OWNER, - ROLE_INTERNAL_REVIEWER, ROLE_TECH_REVIEWER, ROLE_PROCESS_OWNER)); - default: - return Collections.emptySet(); - } - } - - private boolean isLeader(EvalProjectMemberEntity member) { - return (member.getLeaderFlag() != null && member.getLeaderFlag() == 1) - || ROLE_LEADER.equalsIgnoreCase(member.getRoleCode()); - } }