Merge remote-tracking branch 'origin/dev' into dev

dev
luotaiqian 2026-07-22 16:33:07 +08:00
commit f824dc5c1a
11 changed files with 96 additions and 44 deletions

View File

@ -5,12 +5,7 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.qinan.safetyeval.client.api.institution.EvalProjectApi;
import org.qinan.safetyeval.client.co.institution.CustomerEvalProjectCO;
import org.qinan.safetyeval.client.co.institution.EvalProjectCO;
import org.qinan.safetyeval.client.co.institution.EvalProjectEnumsCO;
import org.qinan.safetyeval.client.co.institution.EvalProjectProgressCO;
import org.qinan.safetyeval.client.co.institution.EvalProjectProgressStatCO;
import org.qinan.safetyeval.client.co.institution.RiskWarningCO;
import org.qinan.safetyeval.client.co.institution.RiskWarningStatCO;
import org.qinan.safetyeval.client.co.institution.*;
import org.qinan.safetyeval.client.dto.PageResponse;
import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.client.dto.institution.EvalProjectAddCmd;
@ -51,6 +46,12 @@ public class EvalProjectController {
return evalProjectApi.page(query);
}
@ApiOperation("我的项目统计")
@GetMapping("/projectStatistics")
public SingleResponse<EvalProjectStatisticsCO> projectStatistics() {
return evalProjectApi.projectStatistics();
}
@ApiOperation("安评项目枚举映射")
@GetMapping("/enums")
public SingleResponse<EvalProjectEnumsCO> enums() {

View File

@ -50,7 +50,7 @@ public class EvalRiskAnalysisController {
@ApiOperation("保存参与人")
@PostMapping("/participant/save")
public SingleResponse<EvalRiskParticipantCO> saveParticipant(@Validated @RequestBody EvalRiskParticipantSaveCmd cmd) {
public SingleResponse<Boolean> saveParticipant(@Validated @RequestBody List<EvalRiskParticipantSaveCmd> cmd) {
return evalRiskAnalysisApi.saveParticipant(cmd);
}

View File

@ -9,8 +9,6 @@ import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.client.dto.institution.EvalContractSaveCmd;
import org.qinan.safetyeval.domain.entity.EvalContractEntity;
import org.qinan.safetyeval.domain.entity.EvalProjectEntity;
import org.qinan.safetyeval.domain.exception.BizException;
import org.qinan.safetyeval.domain.exception.ErrorCode;
import org.qinan.safetyeval.domain.gateway.EvalContractGateway;
import org.qinan.safetyeval.domain.support.EvalNodeCodes;
import org.springframework.stereotype.Service;
@ -59,11 +57,10 @@ public class EvalContractExecutor implements EvalContractApi {
@Override
public SingleResponse<EvalContractCO> getByProject(String projectId) {
Long pid = Long.parseLong(projectId);
evalProjectNodeSupport.assertRead(pid);
EvalProjectEntity project = evalProjectNodeSupport.requireProject(pid);
EvalContractEntity entity = evalContractGateway.getByProjectId(pid, project.getOrgId());
if (entity == null) {
throw new BizException(ErrorCode.EVAL_CONTRACT_NOT_FOUND);
return SingleResponse.success(null);
}
return SingleResponse.success(evalContractCmdConvertor.convertEToCO(entity));
}

View File

@ -1,14 +1,11 @@
package org.qinan.safetyeval.app.executor.institution;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.qinan.safetyeval.app.convertor.EvalProjectCmdConvertor;
import org.qinan.safetyeval.client.api.institution.EvalProjectApi;
import org.qinan.safetyeval.client.co.institution.CustomerEvalProjectCO;
import org.qinan.safetyeval.client.co.institution.EvalProjectCO;
import org.qinan.safetyeval.client.co.institution.EvalProjectEnumsCO;
import org.qinan.safetyeval.client.co.institution.EvalProjectProgressCO;
import org.qinan.safetyeval.client.co.institution.EvalProjectProgressStatCO;
import org.qinan.safetyeval.client.co.institution.RiskWarningCO;
import org.qinan.safetyeval.client.co.institution.RiskWarningStatCO;
import org.qinan.safetyeval.client.co.institution.*;
import org.qinan.safetyeval.client.dto.PageResponse;
import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.client.dto.institution.EvalProjectAddCmd;
@ -37,9 +34,6 @@ import java.time.LocalDate;
import java.util.List;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@Service
public class EvalProjectExecutor implements EvalProjectApi {
@ -169,6 +163,17 @@ public class EvalProjectExecutor implements EvalProjectApi {
return co;
}
@Override
public SingleResponse<EvalProjectStatisticsCO> projectStatistics() {
EvalProjectPageQuery evalProjectPageQuery = new EvalProjectPageQuery();
evalProjectPageQuery.setMyProject(true);
List<EvalProjectCO> data = page(evalProjectPageQuery).getData();
EvalProjectStatisticsCO co = new EvalProjectStatisticsCO();
long pendingMyHandlingSum = data.stream().map(item -> item.getParticipants().stream().map(EvalProjectParticipantItemCO::getId).distinct().count()).distinct().count();
co.setParticipatingProjectSum(pendingMyHandlingSum);
return null;
}
/**
*
*

View File

@ -65,11 +65,10 @@ public class EvalRiskAnalysisExecutor implements EvalRiskAnalysisApi {
@Override
public SingleResponse<EvalRiskAnalysisCO> getByProject(String projectId) {
Long pid = Long.parseLong(projectId);
evalProjectNodeSupport.assertRead(pid);
EvalProjectEntity project = evalProjectNodeSupport.requireProject(pid);
EvalRiskAnalysisEntity entity = evalRiskAnalysisGateway.getByProjectId(pid, project.getOrgId());
if (entity == null) {
throw new BizException(ErrorCode.EVAL_RISK_NOT_FOUND);
return SingleResponse.success(null);
}
return SingleResponse.success(toDetailCO(entity));
}
@ -80,29 +79,30 @@ public class EvalRiskAnalysisExecutor implements EvalRiskAnalysisApi {
}
@Override
public SingleResponse<EvalRiskParticipantCO> saveParticipant(EvalRiskParticipantSaveCmd cmd) {
EvalRiskAnalysisEntity risk = requireRisk(cmd.getRiskId());
evalProjectNodeSupport.assertWrite(risk.getProjectId(), EvalNodeCodes.NODE_01);
EvalRiskParticipantEntity entity = evalRiskAnalysisCmdConvertor.convertParticipantCmdToE(cmd);
entity.setRiskId(risk.getId());
entity.setProjectId(risk.getProjectId());
if (entity.getSignStatusCode() == null) {
entity.setSignStatusCode(1);
}
EvalRiskParticipantEntity result;
if (entity.getId() == null) {
if (entity.getSortOrder() == null) {
entity.setSortOrder(0);
public SingleResponse<Boolean> saveParticipant(List<EvalRiskParticipantSaveCmd> cmdList) {
for (EvalRiskParticipantSaveCmd cmd : cmdList) {
EvalRiskAnalysisEntity risk = requireRisk(cmd.getRiskId());
// evalProjectNodeSupport.assertWrite(risk.getProjectId(), EvalNodeCodes.NODE_01);
EvalRiskParticipantEntity entity = evalRiskAnalysisCmdConvertor.convertParticipantCmdToE(cmd);
entity.setRiskId(risk.getId());
entity.setProjectId(risk.getProjectId());
if (entity.getSignStatusCode() == null) {
entity.setSignStatusCode(1);
}
result = evalRiskParticipantGateway.save(entity);
} else {
EvalRiskParticipantEntity existing = requireParticipant(entity.getId());
if (!risk.getId().equals(existing.getRiskId())) {
throw new BizException(ErrorCode.EVAL_RISK_NOT_FOUND);
if (entity.getId() == null) {
if (entity.getSortOrder() == null) {
entity.setSortOrder(0);
}
evalRiskParticipantGateway.save(entity);
} else {
EvalRiskParticipantEntity existing = requireParticipant(entity.getId());
if (!risk.getId().equals(existing.getRiskId())) {
throw new BizException(ErrorCode.EVAL_RISK_NOT_FOUND);
}
evalRiskParticipantGateway.modify(entity);
}
result = evalRiskParticipantGateway.modify(entity);
}
return SingleResponse.success(evalRiskAnalysisCmdConvertor.convertParticipantEToCO(result));
return SingleResponse.success(true);
}
@Override
@ -117,7 +117,7 @@ public class EvalRiskAnalysisExecutor implements EvalRiskAnalysisApi {
@Override
public SingleResponse<List<EvalRiskParticipantCO>> listParticipants(String riskId) {
EvalRiskAnalysisEntity risk = requireRisk(riskId);
evalProjectNodeSupport.assertRead(risk.getProjectId());
// evalProjectNodeSupport.assertRead(risk.getProjectId());
return SingleResponse.success(evalRiskAnalysisCmdConvertor.convertParticipantListToCOList(
evalRiskParticipantGateway.listByRiskId(risk.getId())));
}

View File

@ -1,5 +1,6 @@
package org.qinan.safetyeval.client.api.institution;
import org.qinan.safetyeval.client.co.institution.*;
import org.qinan.safetyeval.client.co.institution.CustomerEvalProjectCO;
import org.qinan.safetyeval.client.co.institution.EvalProjectCO;
import org.qinan.safetyeval.client.co.institution.EvalProjectEnumsCO;
@ -37,5 +38,8 @@ public interface EvalProjectApi {
PageResponse<RiskWarningCO> riskWarningPage(RiskWarningPageQuery query);
SingleResponse<EvalProjectStatisticsCO> projectStatistics();
PageResponse<CustomerEvalProjectCO> customerPage(CustomerEvalProjectPageQuery query);
}

View File

@ -17,7 +17,7 @@ public interface EvalRiskAnalysisApi {
SingleResponse<EvalRiskAnalysisEnumsCO> enums();
SingleResponse<EvalRiskParticipantCO> saveParticipant(EvalRiskParticipantSaveCmd cmd);
SingleResponse<Boolean> saveParticipant(List<EvalRiskParticipantSaveCmd> cmd);
SingleResponse<Void> deleteParticipant(Long id);

View File

@ -0,0 +1,34 @@
package org.qinan.safetyeval.client.co.institution;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class EvalProjectStatisticsCO {
/**
*
*/
@ApiModelProperty("延期项目")
private Long delayedProjectSum = 0L;
/**
*
*/
@ApiModelProperty("现场任务")
private Long onSiteTaskSum = 0L;
/**
*
*/
@ApiModelProperty("待我处理")
private Long pendingMyHandlingSum = 0L;
/**
*
*/
@ApiModelProperty("参与项目")
private Long participatingProjectSum = 0L;
}

View File

@ -18,5 +18,8 @@ public class EvalProjectPageQuery extends BasePageQuery {
@ApiModelProperty("客户负责人")
private String customerContactName;
@ApiModelProperty("是否查询我的项目")
private Boolean myProject = false;
private Long customerId;
}

View File

@ -29,4 +29,7 @@ public class EvalProjectQuery {
@ApiModelProperty("项目进度状态NORMAL正常 NEAR临期 DELAY延期")
private String progressStatus;
@ApiModelProperty("是否查询我的项目")
private Boolean myProject = false;
}

View File

@ -11,6 +11,7 @@ import org.qinan.safetyeval.domain.entity.EvalProjectEntity;
import org.qinan.safetyeval.domain.gateway.EvalProjectGateway;
import org.qinan.safetyeval.domain.query.EvalProjectQuery;
import org.qinan.safetyeval.domain.query.PageResult;
import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter;
import org.qinan.safetyeval.infrastructure.convertor.EvalProjectDoConvertor;
import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectDO;
import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMapper;
@ -45,6 +46,7 @@ public class EvalProjectGatewayImpl implements EvalProjectGateway {
dataObject.setArchiveFlag(0);
}
InsertFieldDefaults.apply(dataObject);
dataObject.setProjectNode("[{\"type\":\"RISK_ANALYSIS\",\"state\":0},{\"type\":\"BUSINESS_CONTRACT\",\"state\":0},{\"type\":\"PROJECT_GROUP\",\"state\":0},{\"type\":\"SITE_SURVEY\",\"state\":0},{\"type\":\"REPORT_PREPARATION\",\"state\":0},{\"type\":\"INTERNAL_REVIEW\",\"state\":0},{\"type\":\"TECHNICAL_REVIEW\",\"state\":0},{\"type\":\"PROCESS_CONTROL\",\"state\":0}]");
evalProjectMapper.insert(dataObject);
entity.setId(dataObject.getId());
return entity;
@ -157,6 +159,9 @@ public class EvalProjectGatewayImpl implements EvalProjectGateway {
if (!CollectionUtils.isEmpty(query.getProjectIds())) {
wrapper.in(EvalProjectDO::getId, query.getProjectIds());
}
if (Boolean.TRUE.equals(query.getMyProject())) {
wrapper.apply("JSON_CONTAINS(participants_json, JSON_OBJECT('id', {0}))", AuthUserContextAdapter.getCurrentUserId());
}
applyProgressStatusFilter(wrapper, query.getProgressStatus());
wrapper.orderByDesc(EvalProjectDO::getId);
return wrapper;