luotaiqian 2026-07-21 16:29:46 +08:00
parent 766fc59573
commit 0d5850f63b
18 changed files with 164 additions and 51 deletions

View File

@ -5,6 +5,7 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.qinan.safetyeval.client.api.institution.EvalInternalReviewApi;
import org.qinan.safetyeval.client.co.institution.EvalInternalReviewCO;
import org.qinan.safetyeval.client.co.institution.EvalInternalReviewDetailCO;
import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.client.dto.institution.EvalInternalReviewSaveCmd;
import org.springframework.validation.annotation.Validated;
@ -31,4 +32,10 @@ public class EvalInternalReviewController {
public SingleResponse<EvalInternalReviewCO> get(@ApiParam("项目ID") @RequestParam Long projectId) {
return evalInternalReviewApi.getByProject(projectId);
}
@ApiOperation("按项目查询详情(内审人成员+审核项)")
@GetMapping("/detail")
public SingleResponse<EvalInternalReviewDetailCO> detail(@ApiParam("项目ID") @RequestParam Long projectId) {
return evalInternalReviewApi.getDetailByProject(projectId);
}
}

View File

@ -5,17 +5,27 @@ import org.qinan.safetyeval.app.executor.institution.support.EvalNodeCoConverter
import org.qinan.safetyeval.app.executor.institution.support.EvalProjectNodeSupport;
import org.qinan.safetyeval.client.api.institution.EvalInternalReviewApi;
import org.qinan.safetyeval.client.co.institution.EvalInternalReviewCO;
import org.qinan.safetyeval.client.co.institution.EvalInternalReviewDetailCO;
import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.client.dto.institution.EvalInternalReviewSaveCmd;
import org.qinan.safetyeval.client.item.response.EvalReviewItemCo;
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.support.EvalNodeCodes;
import org.qinan.safetyeval.infrastructure.convertor.EvalInternalReviewConvertor;
import org.qinan.safetyeval.infrastructure.persistence.queryservice.EvalReviewItemQueryService;
import org.qinan.safetyeval.infrastructure.support.NodeWriteAuthority;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class EvalInternalReviewExecutor implements EvalInternalReviewApi {
@ -24,6 +34,12 @@ public class EvalInternalReviewExecutor implements EvalInternalReviewApi {
private EvalInternalReviewGateway evalInternalReviewGateway;
@Resource
private EvalProjectNodeSupport evalProjectNodeSupport;
@Resource
private EvalProjectMemberGateway evalProjectMemberGateway;
@Resource
private EvalReviewItemQueryService evalReviewItemQueryService;
@Resource
private EvalInternalReviewConvertor evalInternalReviewConvertor;
@Override
public SingleResponse<EvalInternalReviewCO> getOrSave(EvalInternalReviewSaveCmd cmd) {
@ -56,4 +72,36 @@ public class EvalInternalReviewExecutor implements EvalInternalReviewApi {
}
return SingleResponse.success(EvalNodeCoConverter.toInternalCO(entity));
}
@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));
if (entity != null) {
detailCO.setInternalReview(evalInternalReviewConvertor.toInternalCO(entity));
// 3. 通过内审记录id查询审核项列表
detailCO.setReviewItems(evalReviewItemQueryService.listByBizIdAndBizType(
entity.getId(), ReviewDimensionEnum.TypeEnum.EVAL_INTERNAL_REVIEW.getCode()));
} else {
// 未查询到内审记录,按审核维度枚举构建默认审核项
detailCO.setReviewItems(ReviewDimensionEnum.getListByType(ReviewDimensionEnum.TypeEnum.EVAL_INTERNAL_REVIEW)
.stream()
.map(dimension -> {
EvalReviewItemCo item = new EvalReviewItemCo();
item.setBizType(ReviewDimensionEnum.TypeEnum.EVAL_INTERNAL_REVIEW.getCode());
item.setReviewDimensionCode(dimension.getCode());
item.setReviewDimensionName(dimension.getLabel());
item.setReviewFocus(dimension.getReviewFocus());
return item;
})
.collect(Collectors.toList()));
}
return SingleResponse.success(detailCO);
}
}

View File

@ -1,10 +1,12 @@
package org.qinan.safetyeval.client.api.institution;
import org.qinan.safetyeval.client.co.institution.EvalInternalReviewCO;
import org.qinan.safetyeval.client.co.institution.EvalInternalReviewDetailCO;
import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.client.dto.institution.EvalInternalReviewSaveCmd;
public interface EvalInternalReviewApi {
SingleResponse<EvalInternalReviewCO> getOrSave(EvalInternalReviewSaveCmd cmd);
SingleResponse<EvalInternalReviewCO> getByProject(Long projectId);
SingleResponse<EvalInternalReviewDetailCO> getDetailByProject(Long projectId);
}

View File

@ -0,0 +1,20 @@
package org.qinan.safetyeval.client.dto.institution;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.qinan.safetyeval.client.item.request.EvalReviewItemAddCmd;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;
@Data
public class EvalInternalReviewConfirmCmd {
@ApiModelProperty("审核项列表")
@NotNull
@Size(min = 1, max = 16)
@Valid
private List<EvalReviewItemAddCmd> reviewItems;
}

View File

@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
/**
@ -21,44 +21,43 @@ public class EvalReviewItemAddCmd implements Serializable {
* ->eval_internal_review ; ->eval_tech_review
*/
@ApiModelProperty(value = "业务类型 内审->eval_internal_review ; 技审->eval_tech_review", required = true)
@NotBlank(message = "业务类型 内审->eval_internal_review ; 技审->eval_tech_review不能为空")
@Size(max = 64)
private String bizType;
/**
* id
*/
@ApiModelProperty(value = "业务id", required = true)
@NotNull(message = "业务id不能为空")
private Long bizId;
/**
* code
*/
@ApiModelProperty(value = "审核维度code")
@Size(max = 128)
private String reviewDimensionCode;
/**
*
*/
@ApiModelProperty(value = "审核维度 名称")
@Size(max = 256)
private String reviewDimensionName;
/**
*
*/
@ApiModelProperty(value = "审核重点")
@Size(max = 512)
private String reviewFocus;
/**
* ,conform_to to_be_revised
* ,conform_to not_conform_to
*/
@ApiModelProperty(value = "结论 ,conform_to 符合to_be_revised 需修改", required = true)
@NotBlank(message = "结论 ,conform_to 符合to_be_revised 需修改不能为空")
@ApiModelProperty(value = "结论 ,conform_to 符合not_conform_to 不符合", required = true)
@NotBlank(message = "结论 ,conform_to 符合not_conform_to 不符合不能为空")
@Size(max = 64)
private String reviewConclusion;
/**
*
*/
@ApiModelProperty(value = "审核意见")
@Size(max = 1024)
private String reviewOpinion;
/**
*
*/
@ApiModelProperty(value = "环境")
private String env;
}

View File

@ -40,9 +40,9 @@ public class EvalReviewItemPageQry extends PageQuery {
@ApiModelProperty(value = "审核重点")
private String reviewFocus;
/**
* ,conform_to to_be_revised
* ,conform_to not_conform_to
*/
@ApiModelProperty(value = "结论 ,conform_to 符合,to_be_revised 需修改")
@ApiModelProperty(value = "结论 ,conform_to 符合,not_conform_to 不符合")
private String reviewConclusion;
/**
*

View File

@ -47,10 +47,10 @@ public class EvalReviewItemUpdateCmd implements Serializable {
@ApiModelProperty(value = "审核重点")
private String reviewFocus;
/**
* ,conform_to to_be_revised
* ,conform_to not_conform_to
*/
@ApiModelProperty(value = "结论 ,conform_to 符合,to_be_revised 需修改", required = true)
@NotBlank(message = "结论 ,conform_to 符合,to_be_revised 需修改不能为空")
@ApiModelProperty(value = "结论 ,conform_to 符合,not_conform_to 不符合", required = true)
@NotBlank(message = "结论 ,conform_to 符合,not_conform_to 不符合不能为空")
private String reviewConclusion;
/**
*

View File

@ -42,9 +42,9 @@ public class EvalReviewItemCo extends ClientObject {
@ApiModelProperty(value = "审核重点")
private String reviewFocus;
/**
* ,conform_to to_be_revised
* ,conform_to not_conform_to
*/
@ApiModelProperty(value = "结论 ,conform_to 符合,to_be_revised 需修改")
@ApiModelProperty(value = "结论 ,conform_to 符合,not_conform_to 不符合")
private String reviewConclusion;
/**
*

View File

@ -20,6 +20,8 @@ public interface EvalProjectMemberGateway {
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);

View File

@ -41,7 +41,7 @@ public class EvalReviewItemE extends BaseE {
*/
private String reviewFocus;
/**
* ,conform_to to_be_revised
* ,conform_to not_conform_to
*/
private String reviewConclusion;
/**

View File

@ -10,4 +10,5 @@ public class EvalProjectMemberQuery {
private Long orgId;
private Long projectId;
private Long personnelId;
private String roleCode;
}

View File

@ -7,6 +7,7 @@ import org.qinan.safetyeval.domain.entity.EvalProjectMemberEntity;
import org.qinan.safetyeval.domain.gateway.EvalProjectMemberGateway;
import org.qinan.safetyeval.domain.query.EvalProjectMemberQuery;
import org.qinan.safetyeval.domain.query.PageResult;
import org.qinan.safetyeval.infrastructure.convertor.EvalProjectMemberDoConvertor;
import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectMemberDO;
import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMemberMapper;
import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults;
@ -27,6 +28,9 @@ public class EvalProjectMemberGatewayImpl implements EvalProjectMemberGateway {
@Resource
private OrgContextResolver orgContextResolver;
@Resource
private EvalProjectMemberDoConvertor evalProjectMemberDoConvertor;
@Override
public EvalProjectMemberEntity save(EvalProjectMemberEntity entity) {
EvalProjectMemberDO dataObject = toDO(entity);
@ -42,7 +46,7 @@ public class EvalProjectMemberGatewayImpl implements EvalProjectMemberGateway {
if (dataObject == null || !"false".equals(dataObject.getDeleteEnum())) {
return null;
}
return toEntity(dataObject);
return evalProjectMemberDoConvertor.convertDoToE(dataObject);
}
@Override
@ -64,7 +68,7 @@ public class EvalProjectMemberGatewayImpl implements EvalProjectMemberGateway {
Page<EvalProjectMemberDO> page = new Page<>(query.getPageNum(), query.getPageSize());
IPage<EvalProjectMemberDO> result = evalProjectMemberMapper.selectPage(page, buildQueryWrapper(query));
List<EvalProjectMemberEntity> entities = result.getRecords().stream()
.map(this::toEntity)
.map(evalProjectMemberDoConvertor::convertDoToE)
.collect(Collectors.toList());
return PageResult.of(entities, result.getTotal(), result.getCurrent(), result.getSize());
}
@ -75,7 +79,20 @@ public class EvalProjectMemberGatewayImpl implements EvalProjectMemberGateway {
query.setProjectId(projectId);
query.setOrgId(orgId);
return evalProjectMemberMapper.selectList(buildQueryWrapper(query)).stream()
.map(this::toEntity)
.map(evalProjectMemberDoConvertor::convertDoToE)
.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());
}
@ -96,7 +113,7 @@ public class EvalProjectMemberGatewayImpl implements EvalProjectMemberGateway {
query.setPersonnelId(personnelId);
query.setOrgId(orgId);
return evalProjectMemberMapper.selectList(buildQueryWrapper(query)).stream()
.map(this::toEntity)
.map(evalProjectMemberDoConvertor::convertDoToE)
.collect(Collectors.toList());
}
@ -132,37 +149,16 @@ public class EvalProjectMemberGatewayImpl implements EvalProjectMemberGateway {
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 = new EvalProjectMemberDO();
EvalProjectMemberDO dataObject = evalProjectMemberDoConvertor.convertEToDo(entity);
dataObject.setOrgId(orgContextResolver.resolveOrgId(entity.getOrgId()));
dataObject.setProjectId(entity.getProjectId());
dataObject.setPersonnelId(entity.getPersonnelId());
dataObject.setPersonnelName(entity.getPersonnelName());
dataObject.setRoleCode(entity.getRoleCode());
dataObject.setRoleName(entity.getRoleName());
dataObject.setLeaderFlag(entity.getLeaderFlag());
dataObject.setTenantId(entity.getTenantId());
return dataObject;
}
private EvalProjectMemberEntity toEntity(EvalProjectMemberDO dataObject) {
if (dataObject == null) {
return null;
}
EvalProjectMemberEntity entity = new EvalProjectMemberEntity();
entity.setId(dataObject.getId());
entity.setOrgId(dataObject.getOrgId());
entity.setProjectId(dataObject.getProjectId());
entity.setPersonnelId(dataObject.getPersonnelId());
entity.setPersonnelName(dataObject.getPersonnelName());
entity.setRoleCode(dataObject.getRoleCode());
entity.setRoleName(dataObject.getRoleName());
entity.setLeaderFlag(dataObject.getLeaderFlag());
entity.setTenantId(dataObject.getTenantId());
return entity;
}
}

View File

@ -38,7 +38,7 @@ public class EvalReviewItemDO extends BaseDO {
*/
private String reviewFocus;
/**
* ,conform_to to_be_revised
* ,conform_to not_conform_to
*/
private String reviewConclusion;
/**

View File

@ -5,6 +5,8 @@ import org.qinan.safetyeval.client.item.request.EvalReviewItemPageQry;
import org.qinan.safetyeval.client.item.response.EvalReviewItemCo;
import org.qinan.safetyeval.infrastructure.persistence.domainobject.EvalReviewItemDO;
import java.util.List;
/**
*
*
@ -28,4 +30,13 @@ public interface EvalReviewItemQueryService {
* @return
*/
PageResponse<EvalReviewItemCo> listEvalReviewItemPage(EvalReviewItemPageQry evalReviewItemPageQry);
/**
* id
*
* @param bizId id
* @param bizType
* @return CO
*/
List<EvalReviewItemCo> listByBizIdAndBizType(Long bizId, String bizType);
}

View File

@ -39,4 +39,10 @@ public class EvalReviewItemQueryServiceImpl implements EvalReviewItemQueryServic
return PageHelper.pageToResponse(evalReviewItemDoPage, evalReviewItemCoS);
}
@Override
public List<EvalReviewItemCo> listByBizIdAndBizType(Long bizId, String bizType) {
List<EvalReviewItemDO> evalReviewItemDOS = evalReviewItemRepository.listByBizIdAndBizType(bizId, bizType);
return evalReviewItemDoConvertor.converDosToCos(evalReviewItemDOS);
}
}

View File

@ -5,6 +5,8 @@ import com.jjb.saas.framework.repository.repo.BaseRepository;
import org.qinan.safetyeval.client.item.request.EvalReviewItemPageQry;
import org.qinan.safetyeval.infrastructure.persistence.domainobject.EvalReviewItemDO;
import java.util.List;
/**
*
*
@ -29,6 +31,15 @@ public interface EvalReviewItemRepository extends BaseRepository<EvalReviewItemD
*/
IPage<EvalReviewItemDO> listEvalReviewItemPage(IPage iPage, EvalReviewItemPageQry evalReviewItemPageQry);
/**
* id
*
* @param bizId id
* @param bizType
* @return
*/
List<EvalReviewItemDO> listByBizIdAndBizType(Long bizId, String bizType);
/**
*
*

View File

@ -13,6 +13,7 @@ import org.qinan.safetyeval.infrastructure.persistence.repository.EvalReviewItem
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
/**
*
@ -62,6 +63,15 @@ public class EvalReviewItemRepositoryImpl extends BaseRepositoryImpl<EvalReviewI
return evalReviewItemMapper.selectPage(iPage, evalReviewItemDoQueryWrapper);
}
@Override
public List<EvalReviewItemDO> listByBizIdAndBizType(Long bizId, String bizType) {
return super.lambdaQuery()
.eq(EvalReviewItemDO::getBizId, bizId)
.eq(EvalReviewItemDO::getBizType, bizType)
.eq(EvalReviewItemDO::getDeleteEnum, BooleanEnum.FALSE.getValue())
.list();
}
@Override
public Boolean addEvalReviewItem(EvalReviewItemDO evalReviewItemDO) {
return super.save(evalReviewItemDO);

View File

@ -31,8 +31,8 @@ public class NodeWriteAuthority {
private static final String ROLE_CONTRACT_OWNER = "CONTRACT_OWNER";
private static final String ROLE_SURVEY_OWNER = "SURVEY_OWNER";
private static final String ROLE_DRAFT_OWNER = "DRAFT_OWNER";
private static final String ROLE_INTERNAL_REVIEWER = "INTERNAL_REVIEWER";
private static final String ROLE_TECH_REVIEWER = "TECH_REVIEWER";
public static final String ROLE_INTERNAL_REVIEWER = "INTERNAL_REVIEWER";
public static final String ROLE_TECH_REVIEWER = "TECH_REVIEWER";
private static final String ROLE_PROCESS_OWNER = "PROCESS_OWNER";
private static final String ROLE_MEMBER = "MEMBER";