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.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import io.swagger.annotations.ApiParam;
|
|
||||||
import org.qinan.safetyeval.client.api.institution.EvalProjectMemberApi;
|
import org.qinan.safetyeval.client.api.institution.EvalProjectMemberApi;
|
||||||
import org.qinan.safetyeval.client.co.institution.EvalProjectMemberCO;
|
import org.qinan.safetyeval.client.co.institution.EvalProjectMemberCO;
|
||||||
import org.qinan.safetyeval.client.dto.PageResponse;
|
import org.qinan.safetyeval.client.dto.PageResponse;
|
||||||
import org.qinan.safetyeval.client.dto.SingleResponse;
|
import org.qinan.safetyeval.client.dto.SingleResponse;
|
||||||
import org.qinan.safetyeval.client.dto.institution.EvalProjectMemberAddCmd;
|
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.client.dto.institution.EvalProjectMemberPageQuery;
|
||||||
import org.qinan.safetyeval.infrastructure.dataobject.base.Req;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
|
@ -25,30 +22,15 @@ public class EvalProjectMemberController {
|
||||||
@Resource
|
@Resource
|
||||||
private EvalProjectMemberApi evalProjectMemberApi;
|
private EvalProjectMemberApi evalProjectMemberApi;
|
||||||
|
|
||||||
@ApiOperation("新增成员")
|
@ApiOperation("保存成员(id空新增/非空修改)")
|
||||||
@PostMapping("/save")
|
@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);
|
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("分页查询成员")
|
@ApiOperation("分页查询成员")
|
||||||
@GetMapping("/page")
|
@GetMapping("/page")
|
||||||
public PageResponse<EvalProjectMemberCO> page(@Validated EvalProjectMemberPageQuery query) {
|
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.constant.ReviewDimensionEnum;
|
||||||
import org.qinan.safetyeval.domain.entity.EvalInternalReviewEntity;
|
import org.qinan.safetyeval.domain.entity.EvalInternalReviewEntity;
|
||||||
import org.qinan.safetyeval.domain.entity.EvalProjectEntity;
|
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.BizException;
|
||||||
import org.qinan.safetyeval.domain.exception.ErrorCode;
|
import org.qinan.safetyeval.domain.exception.ErrorCode;
|
||||||
import org.qinan.safetyeval.domain.gateway.EvalInternalReviewGateway;
|
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.gateway.EvalReviewItemGateway;
|
||||||
import org.qinan.safetyeval.domain.item.model.EvalReviewItemE;
|
import org.qinan.safetyeval.domain.item.model.EvalReviewItemE;
|
||||||
import org.qinan.safetyeval.domain.service.ProjectStageSyncService;
|
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.dataobject.EvalInternalReviewDO;
|
||||||
import org.qinan.safetyeval.infrastructure.mapper.EvalInternalReviewMapper;
|
import org.qinan.safetyeval.infrastructure.mapper.EvalInternalReviewMapper;
|
||||||
import org.qinan.safetyeval.infrastructure.persistence.queryservice.EvalReviewItemQueryService;
|
import org.qinan.safetyeval.infrastructure.persistence.queryservice.EvalReviewItemQueryService;
|
||||||
import org.qinan.safetyeval.infrastructure.support.NodeWriteAuthority;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
|
@ -52,8 +49,6 @@ public class EvalInternalReviewExecutor implements EvalInternalReviewApi {
|
||||||
@Resource
|
@Resource
|
||||||
private EvalProjectNodeSupport evalProjectNodeSupport;
|
private EvalProjectNodeSupport evalProjectNodeSupport;
|
||||||
@Resource
|
@Resource
|
||||||
private EvalProjectMemberGateway evalProjectMemberGateway;
|
|
||||||
@Resource
|
|
||||||
private EvalReviewItemQueryService evalReviewItemQueryService;
|
private EvalReviewItemQueryService evalReviewItemQueryService;
|
||||||
@Resource
|
@Resource
|
||||||
private EvalInternalReviewConvertor evalInternalReviewConvertor;
|
private EvalInternalReviewConvertor evalInternalReviewConvertor;
|
||||||
|
|
@ -157,14 +152,10 @@ public class EvalInternalReviewExecutor implements EvalInternalReviewApi {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SingleResponse<EvalInternalReviewDetailCO> getDetailByProject(Long projectId) {
|
public SingleResponse<EvalInternalReviewDetailCO> getDetailByProject(Long projectId) {
|
||||||
// 1. 查询项目成员中的内审人信息
|
// 查询内审记录,未查询到则内审记录字段为空(成员角色模型已变更,不再按旧角色筛选内审人)
|
||||||
List<EvalProjectMemberEntity> members = evalProjectMemberGateway
|
|
||||||
.listByProjectIdAndRoleCode(projectId, NodeWriteAuthority.ROLE_INTERNAL_REVIEWER);
|
|
||||||
|
|
||||||
// 2. 查询内审记录,未查询到则内审记录字段为空
|
|
||||||
EvalInternalReviewEntity entity = evalInternalReviewGateway.getByProjectId(projectId, null);
|
EvalInternalReviewEntity entity = evalInternalReviewGateway.getByProjectId(projectId, null);
|
||||||
EvalInternalReviewDetailCO detailCO = new EvalInternalReviewDetailCO();
|
EvalInternalReviewDetailCO detailCO = new EvalInternalReviewDetailCO();
|
||||||
detailCO.setReviewers(evalInternalReviewConvertor.toMemberCOs(members));
|
detailCO.setReviewers(java.util.Collections.emptyList());
|
||||||
if (entity != null) {
|
if (entity != null) {
|
||||||
detailCO.setInternalReview(evalInternalReviewConvertor.toInternalCO(entity));
|
detailCO.setInternalReview(evalInternalReviewConvertor.toInternalCO(entity));
|
||||||
// 3. 通过内审记录id查询审核项列表
|
// 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.EvalReportDraftEntity;
|
||||||
import org.qinan.safetyeval.domain.entity.EvalReportEntity;
|
import org.qinan.safetyeval.domain.entity.EvalReportEntity;
|
||||||
import org.qinan.safetyeval.domain.entity.EvalSignTaskEntity;
|
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.BizException;
|
||||||
import org.qinan.safetyeval.domain.exception.ErrorCode;
|
import org.qinan.safetyeval.domain.exception.ErrorCode;
|
||||||
import org.qinan.safetyeval.domain.gateway.EvalProcessControlGateway;
|
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.EvalReportDraftGateway;
|
||||||
import org.qinan.safetyeval.domain.gateway.EvalReportGateway;
|
import org.qinan.safetyeval.domain.gateway.EvalReportGateway;
|
||||||
import org.qinan.safetyeval.domain.gateway.EvalSignTaskGateway;
|
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.gateway.EvalReviewItemGateway;
|
||||||
import org.qinan.safetyeval.domain.item.model.EvalReviewItemE;
|
import org.qinan.safetyeval.domain.item.model.EvalReviewItemE;
|
||||||
import org.qinan.safetyeval.domain.query.EvalReportDraftQuery;
|
import org.qinan.safetyeval.domain.query.EvalReportDraftQuery;
|
||||||
|
|
@ -177,13 +179,13 @@ public class EvalProcessControlExecutor implements EvalProcessControlApi {
|
||||||
@Override
|
@Override
|
||||||
public SingleResponse<EvalProcessControlDetailCO> getDetailByProject(Long projectId) {
|
public SingleResponse<EvalProcessControlDetailCO> getDetailByProject(Long projectId) {
|
||||||
// 1. 查询项目成员中的过程控制负责人信息
|
// 1. 查询项目成员中的过程控制负责人信息
|
||||||
List<EvalProjectMemberEntity> members = evalProjectMemberGateway
|
// List<EvalProjectMemberEntity> members = evalProjectMemberGateway
|
||||||
.listByProjectIdAndRoleCode(projectId, NodeWriteAuthority.ROLE_PROCESS_OWNER);
|
// .listByProjectIdAndRoleCode(projectId, NodeWriteAuthority.ROLE_PROCESS_OWNER);
|
||||||
|
|
||||||
// 2. 查询过程控制记录,未查询到则过程控制记录字段为空
|
// 2. 查询过程控制记录,未查询到则过程控制记录字段为空
|
||||||
EvalProcessControlEntity entity = evalProcessControlGateway.getByProjectId(projectId, null);
|
EvalProcessControlEntity entity = evalProcessControlGateway.getByProjectId(projectId, null);
|
||||||
EvalProcessControlDetailCO detailCO = new EvalProcessControlDetailCO();
|
EvalProcessControlDetailCO detailCO = new EvalProcessControlDetailCO();
|
||||||
detailCO.setControllers(evalProcessControlConvertor.toMemberCOs(members));
|
// detailCO.setControllers(evalProcessControlConvertor.toMemberCOs(members));
|
||||||
if (entity != null) {
|
if (entity != null) {
|
||||||
detailCO.setProcessControl(EvalNodeCoConverter.toProcessCO(entity));
|
detailCO.setProcessControl(EvalNodeCoConverter.toProcessCO(entity));
|
||||||
// 3. 通过过程控制记录id查询审核项列表
|
// 3. 通过过程控制记录id查询审核项列表
|
||||||
|
|
|
||||||
|
|
@ -1,26 +1,27 @@
|
||||||
package org.qinan.safetyeval.app.executor.institution;
|
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.api.institution.EvalProjectMemberApi;
|
||||||
import org.qinan.safetyeval.client.co.institution.EvalProjectMemberCO;
|
import org.qinan.safetyeval.client.co.institution.EvalProjectMemberCO;
|
||||||
import org.qinan.safetyeval.client.dto.PageResponse;
|
import org.qinan.safetyeval.client.dto.PageResponse;
|
||||||
import org.qinan.safetyeval.client.dto.SingleResponse;
|
import org.qinan.safetyeval.client.dto.SingleResponse;
|
||||||
import org.qinan.safetyeval.client.dto.institution.EvalProjectMemberAddCmd;
|
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.client.dto.institution.EvalProjectMemberPageQuery;
|
||||||
import org.qinan.safetyeval.domain.entity.EvalProjectEntity;
|
|
||||||
import org.qinan.safetyeval.domain.entity.EvalProjectMemberEntity;
|
import org.qinan.safetyeval.domain.entity.EvalProjectMemberEntity;
|
||||||
import org.qinan.safetyeval.domain.exception.ErrorCode;
|
import org.qinan.safetyeval.domain.exception.ErrorCode;
|
||||||
import org.qinan.safetyeval.domain.query.EvalProjectMemberQuery;
|
import org.qinan.safetyeval.domain.query.EvalProjectMemberQuery;
|
||||||
import org.qinan.safetyeval.domain.query.PageResult;
|
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.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.qinan.safetyeval.infrastructure.support.InstitutionOrgSupport;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class EvalProjectMemberExecutor implements EvalProjectMemberApi {
|
public class EvalProjectMemberExecutor implements EvalProjectMemberApi {
|
||||||
|
|
@ -31,95 +32,39 @@ public class EvalProjectMemberExecutor implements EvalProjectMemberApi {
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
@Autowired(required = false)
|
@Autowired(required = false)
|
||||||
private EvalProjectDomainService evalProjectDomainService;
|
private InstitutionOrgSupport institutionOrgSupport;
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
@Autowired(required = false)
|
@Autowired(required = false)
|
||||||
private InstitutionOrgSupport institutionOrgSupport;
|
private EvalProjectMemberCmdConvertor evalProjectMemberCmdConvertor;
|
||||||
|
@Autowired
|
||||||
|
private EvalProjectMemberMapper evalProjectMemberMapper;
|
||||||
@Override
|
@Override
|
||||||
public SingleResponse<EvalProjectMemberCO> save(EvalProjectMemberAddCmd cmd) {
|
@Transactional(rollbackFor = Exception.class)
|
||||||
Long orgId = institutionOrgSupport.resolveCurrentOrgId();
|
public SingleResponse<Boolean> save(List<EvalProjectMemberAddCmd> cmdList) {
|
||||||
assertProjectInOrg(Long.parseLong(cmd.getProjectId()), orgId);
|
evalProjectMemberMapper.delete(new LambdaQueryWrapper<EvalProjectMemberDO>()
|
||||||
EvalProjectMemberEntity entity = new EvalProjectMemberEntity();
|
.eq(EvalProjectMemberDO::getProjectId, cmdList.get(0).getProjectId()));
|
||||||
entity.setProjectId(Long.parseLong(cmd.getProjectId()));
|
for (EvalProjectMemberAddCmd cmd : cmdList) {
|
||||||
entity.setPersonnelId(Long.parseLong(cmd.getPersonnelId()));
|
Long orgId = institutionOrgSupport.resolveCurrentOrgId();
|
||||||
entity.setRoleCode(cmd.getRoleCode());
|
EvalProjectMemberEntity entity = evalProjectMemberCmdConvertor.convertAddCmdToE(cmd);
|
||||||
entity.setRoleName(cmd.getRoleName());
|
if (entity.getId() == null) {
|
||||||
entity.setLeaderFlag(cmd.getLeaderFlag());
|
entity.setOrgId(orgId);
|
||||||
EvalProjectMemberEntity result = evalProjectMemberDomainService.add(entity, orgId);
|
} else {
|
||||||
return SingleResponse.success(toCO(result));
|
EvalProjectMemberEntity existing = evalProjectMemberDomainService.get(entity.getId());
|
||||||
}
|
institutionOrgSupport.assertOrgAccess(existing.getOrgId(), ErrorCode.EVAL_PROJECT_MEMBER_NOT_FOUND);
|
||||||
|
}
|
||||||
@Override
|
evalProjectMemberDomainService.saveOrUpdate(entity);
|
||||||
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()));
|
|
||||||
}
|
}
|
||||||
entity.setRoleCode(cmd.getRoleCode());
|
return SingleResponse.success(true);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageResponse<EvalProjectMemberCO> page(EvalProjectMemberPageQuery query) {
|
public PageResponse<EvalProjectMemberCO> page(EvalProjectMemberPageQuery query) {
|
||||||
Long orgId = institutionOrgSupport.resolveCurrentOrgId();
|
EvalProjectMemberQuery domainQuery = evalProjectMemberCmdConvertor.convertPageQueryToQ(query);
|
||||||
EvalProjectMemberQuery domainQuery = new EvalProjectMemberQuery();
|
domainQuery.setOrgId(institutionOrgSupport.resolveCurrentOrgId());
|
||||||
domainQuery.setPageNum(query.getCurrent());
|
|
||||||
domainQuery.setPageSize(query.getSize());
|
|
||||||
domainQuery.setOrgId(orgId);
|
|
||||||
if (query.getProjectId() != null) {
|
|
||||||
domainQuery.setProjectId(Long.parseLong(query.getProjectId()));
|
|
||||||
}
|
|
||||||
PageResult<EvalProjectMemberEntity> pageResult = evalProjectMemberDomainService.page(domainQuery);
|
PageResult<EvalProjectMemberEntity> pageResult = evalProjectMemberDomainService.page(domainQuery);
|
||||||
return PageResponse.of(
|
return PageResponse.of(
|
||||||
pageResult.getRecords().stream().map(this::toCO).collect(Collectors.toList()),
|
evalProjectMemberCmdConvertor.convertEListToCOList(pageResult.getRecords()),
|
||||||
pageResult.getTotal());
|
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.ProjectStageEnum;
|
||||||
import org.qinan.safetyeval.domain.constant.ReviewDimensionEnum;
|
import org.qinan.safetyeval.domain.constant.ReviewDimensionEnum;
|
||||||
import org.qinan.safetyeval.domain.entity.EvalProjectEntity;
|
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.entity.EvalTechReviewEntity;
|
||||||
import org.qinan.safetyeval.domain.exception.BizException;
|
import org.qinan.safetyeval.domain.exception.BizException;
|
||||||
import org.qinan.safetyeval.domain.exception.ErrorCode;
|
import org.qinan.safetyeval.domain.exception.ErrorCode;
|
||||||
|
|
@ -31,12 +30,10 @@ import org.qinan.safetyeval.infrastructure.convertor.EvalTechReviewConvertor;
|
||||||
import org.qinan.safetyeval.infrastructure.dataobject.EvalTechReviewDO;
|
import org.qinan.safetyeval.infrastructure.dataobject.EvalTechReviewDO;
|
||||||
import org.qinan.safetyeval.infrastructure.mapper.EvalTechReviewMapper;
|
import org.qinan.safetyeval.infrastructure.mapper.EvalTechReviewMapper;
|
||||||
import org.qinan.safetyeval.infrastructure.persistence.queryservice.EvalReviewItemQueryService;
|
import org.qinan.safetyeval.infrastructure.persistence.queryservice.EvalReviewItemQueryService;
|
||||||
import org.qinan.safetyeval.infrastructure.support.NodeWriteAuthority;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static org.qinan.safetyeval.domain.exception.ErrorCode.ASSIGN_SIGN_TASK;
|
import static org.qinan.safetyeval.domain.exception.ErrorCode.ASSIGN_SIGN_TASK;
|
||||||
|
|
@ -152,13 +149,13 @@ public class EvalTechReviewExecutor implements EvalTechReviewApi {
|
||||||
@Override
|
@Override
|
||||||
public SingleResponse<EvalTechReviewDetailCO> getDetailByProject(Long projectId) {
|
public SingleResponse<EvalTechReviewDetailCO> getDetailByProject(Long projectId) {
|
||||||
// 1. 查询项目成员中的技审人信息
|
// 1. 查询项目成员中的技审人信息
|
||||||
List<EvalProjectMemberEntity> members = evalProjectMemberGateway
|
// List<EvalProjectMemberEntity> members = evalProjectMemberGateway
|
||||||
.listByProjectIdAndRoleCode(projectId, NodeWriteAuthority.ROLE_TECH_REVIEWER);
|
// .listByProjectIdAndRoleCode(projectId, NodeWriteAuthority.ROLE_TECH_REVIEWER);
|
||||||
|
|
||||||
// 2. 查询技审记录,未查询到则技审记录字段为空
|
// 2. 查询技审记录,未查询到则技审记录字段为空
|
||||||
EvalTechReviewEntity entity = evalTechReviewGateway.getByProjectId(projectId, null);
|
EvalTechReviewEntity entity = evalTechReviewGateway.getByProjectId(projectId, null);
|
||||||
EvalTechReviewDetailCO detailCO = new EvalTechReviewDetailCO();
|
EvalTechReviewDetailCO detailCO = new EvalTechReviewDetailCO();
|
||||||
detailCO.setReviewers(evalTechReviewConvertor.toMemberCOs(members));
|
// detailCO.setReviewers(evalTechReviewConvertor.toMemberCOs(members));
|
||||||
if (entity != null) {
|
if (entity != null) {
|
||||||
detailCO.setTechReview(evalTechReviewConvertor.toTechCO(entity));
|
detailCO.setTechReview(evalTechReviewConvertor.toTechCO(entity));
|
||||||
// 3. 通过技审记录id查询审核项列表
|
// 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.PageResponse;
|
||||||
import org.qinan.safetyeval.client.dto.SingleResponse;
|
import org.qinan.safetyeval.client.dto.SingleResponse;
|
||||||
import org.qinan.safetyeval.client.dto.institution.EvalProjectMemberAddCmd;
|
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.client.dto.institution.EvalProjectMemberPageQuery;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface EvalProjectMemberApi {
|
public interface EvalProjectMemberApi {
|
||||||
|
|
||||||
SingleResponse<EvalProjectMemberCO> save(EvalProjectMemberAddCmd cmd);
|
SingleResponse<Boolean> save(List<EvalProjectMemberAddCmd> cmd);
|
||||||
|
|
||||||
SingleResponse<EvalProjectMemberCO> modify(EvalProjectMemberModifyCmd cmd);
|
|
||||||
|
|
||||||
SingleResponse<Void> delete(Long id);
|
|
||||||
|
|
||||||
SingleResponse<List<EvalProjectMemberCO>> listByProject(Long projectId);
|
|
||||||
|
|
||||||
PageResponse<EvalProjectMemberCO> page(EvalProjectMemberPageQuery query);
|
PageResponse<EvalProjectMemberCO> page(EvalProjectMemberPageQuery query);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@ package org.qinan.safetyeval.client.co.institution;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class EvalProjectMemberCO {
|
public class EvalProjectMemberCO {
|
||||||
|
|
||||||
|
|
@ -18,12 +20,18 @@ public class EvalProjectMemberCO {
|
||||||
@ApiModelProperty("人员姓名")
|
@ApiModelProperty("人员姓名")
|
||||||
private String personnelName;
|
private String personnelName;
|
||||||
|
|
||||||
@ApiModelProperty(value = "项目角色编码:LEADER项目负责人 PROCESS_OWNER过程控制负责人 RISK_OWNER风险分析负责人 CONTRACT_OWNER合同办理人 SURVEY_OWNER踏勘负责人 DRAFT_OWNER报告编制人 INTERNAL_REVIEWER内部审核人 TECH_REVIEWER技术审核人 MEMBER项目组成员", example = "LEADER")
|
@ApiModelProperty("部门名称")
|
||||||
private String roleCode;
|
private String deptName;
|
||||||
|
|
||||||
@ApiModelProperty(value = "项目角色名称:项目负责人/过程控制负责人/风险分析负责人/合同办理人/踏勘负责人/报告编制人/内部审核人/技术审核人/项目组成员", example = "项目负责人")
|
@ApiModelProperty("岗位")
|
||||||
private String roleName;
|
private String posName;
|
||||||
|
|
||||||
@ApiModelProperty(value = "是否负责人:1是 2否", example = "2")
|
@ApiModelProperty("人员能力")
|
||||||
private Integer leaderFlag;
|
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 io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class EvalProjectMemberAddCmd {
|
public class EvalProjectMemberAddCmd {
|
||||||
|
|
||||||
|
// @ApiModelProperty("主键ID,为空新增,不为空修改")
|
||||||
|
// private String id;
|
||||||
|
|
||||||
@ApiModelProperty("项目ID")
|
@ApiModelProperty("项目ID")
|
||||||
private String projectId;
|
private String projectId;
|
||||||
|
|
||||||
@ApiModelProperty("人员ID")
|
@ApiModelProperty("人员ID")
|
||||||
private String personnelId;
|
private String personnelId;
|
||||||
|
|
||||||
@ApiModelProperty(value = "项目角色编码:LEADER项目负责人 PROCESS_OWNER过程控制负责人 RISK_OWNER风险分析负责人 CONTRACT_OWNER合同办理人 SURVEY_OWNER踏勘负责人 DRAFT_OWNER报告编制人 INTERNAL_REVIEWER内部审核人 TECH_REVIEWER技术审核人 MEMBER项目组成员", example = "LEADER")
|
@ApiModelProperty("人员姓名")
|
||||||
private String roleCode;
|
private String personnelName;
|
||||||
|
|
||||||
@ApiModelProperty(value = "项目角色名称:项目负责人/过程控制负责人/风险分析负责人/合同办理人/踏勘负责人/报告编制人/内部审核人/技术审核人/项目组成员", example = "项目负责人")
|
@ApiModelProperty("部门名称")
|
||||||
private String roleName;
|
private String deptName;
|
||||||
|
|
||||||
@ApiModelProperty(value = "是否负责人:1是 2否", example = "2")
|
@ApiModelProperty("岗位")
|
||||||
private Integer leaderFlag;
|
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 lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class EvalProjectMemberEntity {
|
public class EvalProjectMemberEntity {
|
||||||
|
|
||||||
|
|
@ -10,8 +12,10 @@ public class EvalProjectMemberEntity {
|
||||||
private Long projectId;
|
private Long projectId;
|
||||||
private Long personnelId;
|
private Long personnelId;
|
||||||
private String personnelName;
|
private String personnelName;
|
||||||
private String roleCode;
|
private String deptName;
|
||||||
private String roleName;
|
private String posName;
|
||||||
private Integer leaderFlag;
|
private String capacity;
|
||||||
|
private String responsibility;
|
||||||
|
private List<String> role;
|
||||||
private Long tenantId;
|
private Long tenantId;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,17 +14,7 @@ public interface EvalProjectMemberGateway {
|
||||||
|
|
||||||
EvalProjectMemberEntity modify(EvalProjectMemberEntity entity);
|
EvalProjectMemberEntity modify(EvalProjectMemberEntity entity);
|
||||||
|
|
||||||
void delete(Long id);
|
|
||||||
|
|
||||||
PageResult<EvalProjectMemberEntity> page(EvalProjectMemberQuery query);
|
PageResult<EvalProjectMemberEntity> page(EvalProjectMemberQuery query);
|
||||||
|
|
||||||
List<EvalProjectMemberEntity> listByProjectId(Long projectId, Long orgId);
|
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 pageSize;
|
||||||
private Long orgId;
|
private Long orgId;
|
||||||
private Long projectId;
|
private Long projectId;
|
||||||
private Long personnelId;
|
|
||||||
private String roleCode;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,12 @@
|
||||||
package org.qinan.safetyeval.domain.service;
|
package org.qinan.safetyeval.domain.service;
|
||||||
|
|
||||||
import org.qinan.safetyeval.domain.entity.EvalProjectMemberEntity;
|
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.BizException;
|
||||||
import org.qinan.safetyeval.domain.exception.ErrorCode;
|
import org.qinan.safetyeval.domain.exception.ErrorCode;
|
||||||
import org.qinan.safetyeval.domain.gateway.EvalProjectMemberGateway;
|
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.EvalProjectMemberQuery;
|
||||||
import org.qinan.safetyeval.domain.query.PageResult;
|
import org.qinan.safetyeval.domain.query.PageResult;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.StringUtils;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -17,22 +14,19 @@ import java.util.List;
|
||||||
@Service
|
@Service
|
||||||
public class EvalProjectMemberDomainService {
|
public class EvalProjectMemberDomainService {
|
||||||
|
|
||||||
private static final String ROLE_LEADER = "LEADER";
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private EvalProjectMemberGateway evalProjectMemberGateway;
|
private EvalProjectMemberGateway evalProjectMemberGateway;
|
||||||
|
|
||||||
@Resource
|
public EvalProjectMemberEntity saveOrUpdate(EvalProjectMemberEntity entity) {
|
||||||
private EvalProjectDomainService evalProjectDomainService;
|
if (entity.getId() == null) {
|
||||||
|
return evalProjectMemberGateway.save(entity);
|
||||||
@Resource
|
}
|
||||||
private OrgPersonnelGateway orgPersonnelGateway;
|
EvalProjectMemberEntity existing = evalProjectMemberGateway.get(entity.getId());
|
||||||
|
if (existing == null) {
|
||||||
public EvalProjectMemberEntity add(EvalProjectMemberEntity entity, Long orgId) {
|
throw new BizException(ErrorCode.EVAL_PROJECT_MEMBER_NOT_FOUND);
|
||||||
EvalProjectMemberEntity prepared = prepareMember(entity, orgId);
|
}
|
||||||
EvalProjectMemberEntity saved = evalProjectMemberGateway.save(prepared);
|
entity.setOrgId(existing.getOrgId());
|
||||||
syncLeader(saved, orgId);
|
return evalProjectMemberGateway.modify(entity);
|
||||||
return saved;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public EvalProjectMemberEntity get(Long id) {
|
public EvalProjectMemberEntity get(Long id) {
|
||||||
|
|
@ -43,33 +37,6 @@ public class EvalProjectMemberDomainService {
|
||||||
return existing;
|
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) {
|
public PageResult<EvalProjectMemberEntity> page(EvalProjectMemberQuery query) {
|
||||||
return evalProjectMemberGateway.page(query);
|
return evalProjectMemberGateway.page(query);
|
||||||
}
|
}
|
||||||
|
|
@ -77,75 +44,4 @@ public class EvalProjectMemberDomainService {
|
||||||
public List<EvalProjectMemberEntity> listByProjectId(Long projectId, Long orgId) {
|
public List<EvalProjectMemberEntity> listByProjectId(Long projectId, Long orgId) {
|
||||||
return evalProjectMemberGateway.listByProjectId(projectId, 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;
|
package org.qinan.safetyeval.infrastructure.convertor;
|
||||||
|
|
||||||
import org.mapstruct.Mapper;
|
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.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.client.dto.institution.EvalInternalReviewConfirmCmd;
|
||||||
import org.qinan.safetyeval.domain.entity.EvalInternalReviewEntity;
|
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);
|
EvalInternalReviewCO toInternalCO(EvalInternalReviewEntity entity);
|
||||||
|
|
||||||
EvalProjectMemberCO toMemberCO(EvalProjectMemberEntity entity);
|
|
||||||
|
|
||||||
List<EvalProjectMemberCO> toMemberCOs(List<EvalProjectMemberEntity> entities);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将 ConfirmCmd 转换为新的 entity(projectId、reviewerPersonnelId 由 String 转 Long)。
|
* 将 ConfirmCmd 转换为新的 entity(projectId、reviewerPersonnelId 由 String 转 Long)。
|
||||||
*/
|
*/
|
||||||
EvalInternalReviewEntity applyConfirmCmd(EvalInternalReviewConfirmCmd cmd);
|
EvalInternalReviewEntity applyConfirmCmd(EvalInternalReviewConfirmCmd cmd);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,37 @@
|
||||||
package org.qinan.safetyeval.infrastructure.convertor;
|
package org.qinan.safetyeval.infrastructure.convertor;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
import org.qinan.safetyeval.domain.entity.EvalProjectMemberEntity;
|
import org.qinan.safetyeval.domain.entity.EvalProjectMemberEntity;
|
||||||
import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectMemberDO;
|
import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectMemberDO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Mapper(componentModel = "spring")
|
@Mapper(componentModel = "spring")
|
||||||
public interface EvalProjectMemberDoConvertor {
|
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);
|
EvalProjectMemberDO convertEToDo(EvalProjectMemberEntity entity);
|
||||||
|
|
||||||
|
@Mapping(target = "role", expression = "java(jsonToList(dataObject.getRole()))")
|
||||||
EvalProjectMemberEntity convertDoToE(EvalProjectMemberDO dataObject);
|
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 projectId;
|
||||||
private Long personnelId;
|
private Long personnelId;
|
||||||
private String personnelName;
|
private String personnelName;
|
||||||
/** 项目角色编码:LEADER项目负责人 PROCESS_OWNER过程控制负责人 RISK_OWNER风险分析负责人 CONTRACT_OWNER合同办理人 SURVEY_OWNER踏勘负责人 DRAFT_OWNER报告编制人 INTERNAL_REVIEWER内部审核人 TECH_REVIEWER技术审核人 MEMBER项目组成员,示例:LEADER */
|
private String deptName;
|
||||||
private String roleCode;
|
private String posName;
|
||||||
/** 项目角色名称:项目负责人/过程控制负责人/风险分析负责人/合同办理人/踏勘负责人/报告编制人/内部审核人/技术审核人/项目组成员,示例:项目负责人 */
|
private String capacity;
|
||||||
private String roleName;
|
private String responsibility;
|
||||||
/** 是否负责人:1是 2否,示例:2 */
|
/**
|
||||||
private Integer leaderFlag;
|
* 0:未发送 1:已发送
|
||||||
|
*/
|
||||||
|
private Integer msgSendState;
|
||||||
|
/** 角色 JSON 数组,示例:["角色1","角色2"] */
|
||||||
|
private String role;
|
||||||
private String deleteEnum;
|
private String deleteEnum;
|
||||||
private String remarks;
|
private String remarks;
|
||||||
private String createName;
|
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.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import org.qinan.safetyeval.domain.constant.MsgConstant;
|
||||||
import org.qinan.safetyeval.domain.entity.EvalProjectMemberEntity;
|
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.EvalProjectMemberGateway;
|
||||||
|
import org.qinan.safetyeval.domain.gateway.SafetyMessageGateway;
|
||||||
import org.qinan.safetyeval.domain.query.EvalProjectMemberQuery;
|
import org.qinan.safetyeval.domain.query.EvalProjectMemberQuery;
|
||||||
import org.qinan.safetyeval.domain.query.PageResult;
|
import org.qinan.safetyeval.domain.query.PageResult;
|
||||||
import org.qinan.safetyeval.infrastructure.convertor.EvalProjectMemberDoConvertor;
|
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.mapper.EvalProjectMemberMapper;
|
||||||
import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults;
|
import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults;
|
||||||
import org.qinan.safetyeval.infrastructure.support.OrgContextResolver;
|
import org.qinan.safetyeval.infrastructure.support.OrgContextResolver;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.Collections;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
@ -31,12 +36,27 @@ public class EvalProjectMemberGatewayImpl implements EvalProjectMemberGateway {
|
||||||
@Resource
|
@Resource
|
||||||
private EvalProjectMemberDoConvertor evalProjectMemberDoConvertor;
|
private EvalProjectMemberDoConvertor evalProjectMemberDoConvertor;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SafetyMessageGateway safetyMessageGateway;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public EvalProjectMemberEntity save(EvalProjectMemberEntity entity) {
|
public EvalProjectMemberEntity save(EvalProjectMemberEntity entity) {
|
||||||
EvalProjectMemberDO dataObject = toDO(entity);
|
EvalProjectMemberDO dataObject = evalProjectMemberDoConvertor.convertEToDo(entity);
|
||||||
|
dataObject.setOrgId(orgContextResolver.resolveOrgId(entity.getOrgId()));
|
||||||
InsertFieldDefaults.apply(dataObject);
|
InsertFieldDefaults.apply(dataObject);
|
||||||
evalProjectMemberMapper.insert(dataObject);
|
evalProjectMemberMapper.insert(dataObject);
|
||||||
entity.setId(dataObject.getId());
|
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;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -50,19 +70,16 @@ public class EvalProjectMemberGatewayImpl implements EvalProjectMemberGateway {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public EvalProjectMemberEntity modify(EvalProjectMemberEntity entity) {
|
public EvalProjectMemberEntity modify(EvalProjectMemberEntity entity) {
|
||||||
EvalProjectMemberDO dataObject = toDO(entity);
|
EvalProjectMemberDO dataObject = evalProjectMemberDoConvertor.convertEToDo(entity);
|
||||||
dataObject.setId(entity.getId());
|
dataObject.setId(entity.getId());
|
||||||
|
dataObject.setOrgId(orgContextResolver.resolveOrgId(entity.getOrgId()));
|
||||||
InsertFieldDefaults.applyForUpdate(dataObject);
|
InsertFieldDefaults.applyForUpdate(dataObject);
|
||||||
evalProjectMemberMapper.updateById(dataObject);
|
evalProjectMemberMapper.updateById(dataObject);
|
||||||
return get(entity.getId());
|
return get(entity.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void delete(Long id) {
|
|
||||||
evalProjectMemberMapper.deleteById(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageResult<EvalProjectMemberEntity> page(EvalProjectMemberQuery query) {
|
public PageResult<EvalProjectMemberEntity> page(EvalProjectMemberQuery query) {
|
||||||
Page<EvalProjectMemberDO> page = new Page<>(query.getPageNum(), query.getPageSize());
|
Page<EvalProjectMemberDO> page = new Page<>(query.getPageNum(), query.getPageSize());
|
||||||
|
|
@ -83,60 +100,6 @@ public class EvalProjectMemberGatewayImpl implements EvalProjectMemberGateway {
|
||||||
.collect(Collectors.toList());
|
.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) {
|
private LambdaQueryWrapper<EvalProjectMemberDO> buildQueryWrapper(EvalProjectMemberQuery query) {
|
||||||
LambdaQueryWrapper<EvalProjectMemberDO> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<EvalProjectMemberDO> wrapper = new LambdaQueryWrapper<>();
|
||||||
wrapper.eq(EvalProjectMemberDO::getDeleteEnum, "false");
|
wrapper.eq(EvalProjectMemberDO::getDeleteEnum, "false");
|
||||||
|
|
@ -146,19 +109,7 @@ public class EvalProjectMemberGatewayImpl implements EvalProjectMemberGateway {
|
||||||
if (query.getProjectId() != null) {
|
if (query.getProjectId() != null) {
|
||||||
wrapper.eq(EvalProjectMemberDO::getProjectId, query.getProjectId());
|
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);
|
wrapper.orderByDesc(EvalProjectMemberDO::getCreateTime);
|
||||||
return wrapper;
|
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 org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 八节点写权限:LEADER 或节点对应角色;签字任务额外允许 DRAFT_OWNER 与任意项目成员。
|
* 八节点写权限:成员角色模型变更后,暂仅校验是否为项目成员。
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class NodeWriteAuthority {
|
public class NodeWriteAuthority {
|
||||||
|
|
@ -59,26 +55,11 @@ public class NodeWriteAuthority {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canWrite(Long projectId, Long orgId, String nodeCode) {
|
public boolean canWrite(Long projectId, Long orgId, String nodeCode) {
|
||||||
Long personnelId = resolveCurrentPersonnelId();
|
|
||||||
if (personnelId == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
List<EvalProjectMemberEntity> members = evalProjectMemberDomainService.listByProjectId(projectId, orgId);
|
List<EvalProjectMemberEntity> members = evalProjectMemberDomainService.listByProjectId(projectId, orgId);
|
||||||
if (CollectionUtils.isEmpty(members)) {
|
if (CollectionUtils.isEmpty(members)) {
|
||||||
return EvalNodeCodes.NODE_03.equals(nodeCode) || EvalNodeCodes.SIGN.equals(nodeCode);
|
return EvalNodeCodes.NODE_03.equals(nodeCode) || EvalNodeCodes.SIGN.equals(nodeCode);
|
||||||
}
|
}
|
||||||
EvalProjectMemberEntity mine = members.stream()
|
return isProjectMember(projectId, orgId);
|
||||||
.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());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void assertWrite(Long projectId, Long orgId, String nodeCode) {
|
public void assertWrite(Long projectId, Long orgId, String nodeCode) {
|
||||||
|
|
@ -101,39 +82,4 @@ public class NodeWriteAuthority {
|
||||||
throw new BizException(ErrorCode.EVAL_NODE_FORBIDDEN);
|
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