feat: 项目组
parent
bab37f01c2
commit
ae140a7c6e
|
|
@ -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<EvalProjectMemberCO> save(@Validated @RequestBody EvalProjectMemberAddCmd cmd) {
|
||||
public SingleResponse<Boolean> save(@Validated @RequestBody List<EvalProjectMemberAddCmd> cmd) {
|
||||
if (cmd == null || cmd.isEmpty()) {
|
||||
return SingleResponse.success(true);
|
||||
}
|
||||
return evalProjectMemberApi.save(cmd);
|
||||
}
|
||||
|
||||
@ApiOperation("修改成员")
|
||||
@PostMapping("/modify")
|
||||
public SingleResponse<EvalProjectMemberCO> modify(@Validated @RequestBody EvalProjectMemberModifyCmd cmd) {
|
||||
return evalProjectMemberApi.modify(cmd);
|
||||
}
|
||||
|
||||
@ApiOperation("删除成员")
|
||||
@PostMapping("/delete")
|
||||
public SingleResponse<Void> delete(@RequestBody Req<Long> req) {
|
||||
return evalProjectMemberApi.delete(req.getData());
|
||||
}
|
||||
|
||||
@ApiOperation("按项目查询成员列表")
|
||||
@GetMapping("/list")
|
||||
public SingleResponse<List<EvalProjectMemberCO>> list(@ApiParam("项目ID") @RequestParam String projectId) {
|
||||
return evalProjectMemberApi.listByProject(Long.parseLong(projectId));
|
||||
}
|
||||
|
||||
@ApiOperation("分页查询成员")
|
||||
@GetMapping("/page")
|
||||
public PageResponse<EvalProjectMemberCO> page(@Validated EvalProjectMemberPageQuery query) {
|
||||
|
|
|
|||
|
|
@ -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<EvalProjectMemberCO> convertEListToCOList(List<EvalProjectMemberEntity> list);
|
||||
}
|
||||
|
|
@ -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<EvalInternalReviewDetailCO> getDetailByProject(Long projectId) {
|
||||
// 1. 查询项目成员中的内审人信息
|
||||
List<EvalProjectMemberEntity> 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查询审核项列表
|
||||
|
|
|
|||
|
|
@ -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<EvalProcessControlDetailCO> getDetailByProject(Long projectId) {
|
||||
// 1. 查询项目成员中的过程控制负责人信息
|
||||
List<EvalProjectMemberEntity> members = evalProjectMemberGateway
|
||||
.listByProjectIdAndRoleCode(projectId, NodeWriteAuthority.ROLE_PROCESS_OWNER);
|
||||
// List<EvalProjectMemberEntity> 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查询审核项列表
|
||||
|
|
|
|||
|
|
@ -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<EvalProjectMemberCO> 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<EvalProjectMemberCO> 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<Boolean> save(List<EvalProjectMemberAddCmd> cmdList) {
|
||||
evalProjectMemberMapper.delete(new LambdaQueryWrapper<EvalProjectMemberDO>()
|
||||
.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<Void> 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<List<EvalProjectMemberCO>> listByProject(Long projectId) {
|
||||
Long orgId = institutionOrgSupport.resolveCurrentOrgId();
|
||||
assertProjectInOrg(projectId, orgId);
|
||||
List<EvalProjectMemberCO> list = evalProjectMemberDomainService.listByProjectId(projectId, orgId).stream()
|
||||
.map(this::toCO)
|
||||
.collect(Collectors.toList());
|
||||
return SingleResponse.success(list);
|
||||
return SingleResponse.success(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResponse<EvalProjectMemberCO> 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<EvalProjectMemberEntity> 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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<EvalTechReviewDetailCO> getDetailByProject(Long projectId) {
|
||||
// 1. 查询项目成员中的技审人信息
|
||||
List<EvalProjectMemberEntity> members = evalProjectMemberGateway
|
||||
.listByProjectIdAndRoleCode(projectId, NodeWriteAuthority.ROLE_TECH_REVIEWER);
|
||||
// List<EvalProjectMemberEntity> 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查询审核项列表
|
||||
|
|
|
|||
|
|
@ -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<EvalProjectMemberCO> save(EvalProjectMemberAddCmd cmd);
|
||||
|
||||
SingleResponse<EvalProjectMemberCO> modify(EvalProjectMemberModifyCmd cmd);
|
||||
|
||||
SingleResponse<Void> delete(Long id);
|
||||
|
||||
SingleResponse<List<EvalProjectMemberCO>> listByProject(Long projectId);
|
||||
SingleResponse<Boolean> save(List<EvalProjectMemberAddCmd> cmd);
|
||||
|
||||
PageResponse<EvalProjectMemberCO> page(EvalProjectMemberPageQuery query);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<String> role;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<String> role;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
package org.qinan.safetyeval.domain.constant;
|
||||
|
||||
public interface MsgConstant {
|
||||
String MSG_TYPE_SYSTEM = "system";
|
||||
Long MSG_TYPE_SYSTEM_ID = 0L;
|
||||
}
|
||||
|
|
@ -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<String> role;
|
||||
private Long tenantId;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,17 +14,7 @@ public interface EvalProjectMemberGateway {
|
|||
|
||||
EvalProjectMemberEntity modify(EvalProjectMemberEntity entity);
|
||||
|
||||
void delete(Long id);
|
||||
|
||||
PageResult<EvalProjectMemberEntity> page(EvalProjectMemberQuery query);
|
||||
|
||||
List<EvalProjectMemberEntity> listByProjectId(Long projectId, Long orgId);
|
||||
|
||||
List<EvalProjectMemberEntity> listByProjectIdAndRoleCode(Long projectId, String roleCode);
|
||||
|
||||
List<Long> listProjectIdsByPersonnelId(Long personnelId, Long orgId);
|
||||
|
||||
List<EvalProjectMemberEntity> listByPersonnelId(Long personnelId, Long orgId);
|
||||
|
||||
void clearLeadersOnProject(Long projectId, Long excludeMemberId, Long orgId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,4 @@ public class EvalProjectMemberQuery {
|
|||
private Long pageSize;
|
||||
private Long orgId;
|
||||
private Long projectId;
|
||||
private Long personnelId;
|
||||
private String roleCode;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<EvalProjectMemberEntity> page(EvalProjectMemberQuery query) {
|
||||
return evalProjectMemberGateway.page(query);
|
||||
}
|
||||
|
|
@ -77,75 +44,4 @@ public class EvalProjectMemberDomainService {
|
|||
public List<EvalProjectMemberEntity> listByProjectId(Long projectId, Long orgId) {
|
||||
return evalProjectMemberGateway.listByProjectId(projectId, orgId);
|
||||
}
|
||||
|
||||
public List<Long> listProjectIdsByPersonnelId(Long personnelId, Long orgId) {
|
||||
return evalProjectMemberGateway.listProjectIdsByPersonnelId(personnelId, orgId);
|
||||
}
|
||||
|
||||
public List<EvalProjectMemberEntity> 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<EvalProjectMemberEntity> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<EvalProjectMemberCO> toMemberCOs(List<EvalProjectMemberEntity> entities);
|
||||
|
||||
/**
|
||||
* 将 ConfirmCmd 转换为新的 entity(projectId、reviewerPersonnelId 由 String 转 Long)。
|
||||
*/
|
||||
EvalInternalReviewEntity applyConfirmCmd(EvalInternalReviewConfirmCmd cmd);
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<String> list) {
|
||||
return list == null ? null : JSONUtil.toJsonStr(list);
|
||||
}
|
||||
|
||||
default List<String> jsonToList(String json) {
|
||||
return json == null ? null : JSONUtil.toList(json, String.class);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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<EvalProjectMemberEntity> page(EvalProjectMemberQuery query) {
|
||||
Page<EvalProjectMemberDO> page = new Page<>(query.getPageNum(), query.getPageSize());
|
||||
|
|
@ -83,60 +100,6 @@ public class EvalProjectMemberGatewayImpl implements EvalProjectMemberGateway {
|
|||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<EvalProjectMemberEntity> listByProjectIdAndRoleCode(Long projectId, String roleCode) {
|
||||
LambdaQueryWrapper<EvalProjectMemberDO> 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<Long> listProjectIdsByPersonnelId(Long personnelId, Long orgId) {
|
||||
return listByPersonnelId(personnelId, orgId).stream()
|
||||
.map(EvalProjectMemberEntity::getProjectId)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<EvalProjectMemberEntity> 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<EvalProjectMemberDO> 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<EvalProjectMemberDO> leaders = evalProjectMemberMapper.selectList(wrapper);
|
||||
for (EvalProjectMemberDO leader : leaders) {
|
||||
leader.setLeaderFlag(2);
|
||||
InsertFieldDefaults.applyForUpdate(leader);
|
||||
evalProjectMemberMapper.updateById(leader);
|
||||
}
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<EvalProjectMemberDO> buildQueryWrapper(EvalProjectMemberQuery query) {
|
||||
LambdaQueryWrapper<EvalProjectMemberDO> 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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<EvalProjectMemberEntity> 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<String> 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<String> 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());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue