init
parent
1289bd0cc7
commit
7bb48050e8
|
|
@ -10,12 +10,10 @@ import org.qinan.safetyeval.client.co.institution.EnumOptionCO;
|
|||
import org.qinan.safetyeval.client.co.institution.EvalProjectCO;
|
||||
import org.qinan.safetyeval.client.co.institution.EvalProjectEnumsCO;
|
||||
import org.qinan.safetyeval.client.co.institution.EvalProjectParticipantItemCO;
|
||||
import org.qinan.safetyeval.client.co.institution.EvalProjectProgressCO;
|
||||
import org.qinan.safetyeval.client.dto.institution.EvalProjectAddCmd;
|
||||
import org.qinan.safetyeval.client.dto.institution.EvalProjectPageQuery;
|
||||
import org.qinan.safetyeval.client.dto.institution.EvalProjectProgressPageQuery;
|
||||
import org.qinan.safetyeval.domain.constant.ChongqingDistrictEnum;
|
||||
import org.qinan.safetyeval.domain.constant.EvalProjectProgressStatEnum;
|
||||
import org.qinan.safetyeval.domain.constant.EvalTypeEnum;
|
||||
import org.qinan.safetyeval.domain.entity.EvalProjectEntity;
|
||||
import org.qinan.safetyeval.domain.query.EvalProjectQuery;
|
||||
|
|
@ -64,14 +62,6 @@ public interface EvalProjectCmdConvertor {
|
|||
|
||||
List<EvalProjectCO> convertEListToCOList(List<EvalProjectEntity> list);
|
||||
|
||||
@Mapping(target = "id", expression = "java(entity.getId() == null ? null : String.valueOf(entity.getId()))")
|
||||
@Mapping(target = "evalTypeName", ignore = true)
|
||||
@Mapping(target = "progressStatusCode", ignore = true)
|
||||
@Mapping(target = "progressStatusName", ignore = true)
|
||||
EvalProjectProgressCO convertEToProgressCO(EvalProjectEntity entity);
|
||||
|
||||
List<EvalProjectProgressCO> convertEListToProgressCOList(List<EvalProjectEntity> list);
|
||||
|
||||
@AfterMapping
|
||||
default void fillDisplayFields(EvalProjectEntity entity, @MappingTarget EvalProjectCO co) {
|
||||
if (entity == null || co == null) {
|
||||
|
|
@ -103,45 +93,6 @@ public interface EvalProjectCmdConvertor {
|
|||
}
|
||||
}
|
||||
|
||||
@AfterMapping
|
||||
default void fillProgressDisplayFields(EvalProjectEntity entity, @MappingTarget EvalProjectProgressCO co) {
|
||||
if (entity == null || co == null) {
|
||||
return;
|
||||
}
|
||||
EvalTypeEnum evalType = EvalTypeEnum.ofCode(entity.getEvalTypeCode());
|
||||
if (evalType != null) {
|
||||
co.setEvalTypeName(evalType.getValue());
|
||||
}
|
||||
String statusCode = computeProgressStatus(entity.getPlanEndDate());
|
||||
co.setProgressStatusCode(statusCode);
|
||||
co.setProgressStatusName(progressStatusNameOf(statusCode));
|
||||
}
|
||||
|
||||
/**
|
||||
* 项目进度状态规则(参考原型页面):
|
||||
* 超过项目结束日期为 DELAY(延期);
|
||||
* 距离结束日期3天以内(含3天)为 NEAR(临期);
|
||||
* 距离结束日期超过3天为 NORMAL(正常)。
|
||||
*/
|
||||
default String computeProgressStatus(LocalDate planEndDate) {
|
||||
if (planEndDate == null) {
|
||||
return null;
|
||||
}
|
||||
LocalDate today = LocalDate.now();
|
||||
if (today.isAfter(planEndDate)) {
|
||||
return EvalProjectProgressStatEnum.DELAY.getCode();
|
||||
}
|
||||
if (planEndDate.isAfter(today.plusDays(3))) {
|
||||
return EvalProjectProgressStatEnum.NORMAL.getCode();
|
||||
}
|
||||
return EvalProjectProgressStatEnum.NEAR.getCode();
|
||||
}
|
||||
|
||||
default String progressStatusNameOf(String code) {
|
||||
EvalProjectProgressStatEnum statEnum = EvalProjectProgressStatEnum.ofCode(code);
|
||||
return statEnum == null ? null : statEnum.getValue();
|
||||
}
|
||||
|
||||
default String toParticipantsJson(List<EvalProjectParticipantItemCO> participants) {
|
||||
if (participants == null) {
|
||||
return null;
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@ import org.qinan.safetyeval.domain.exception.ErrorCode;
|
|||
import org.qinan.safetyeval.domain.query.EvalProjectQuery;
|
||||
import org.qinan.safetyeval.domain.query.PageResult;
|
||||
import org.qinan.safetyeval.domain.service.EvalProjectDomainService;
|
||||
import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMapper;
|
||||
import org.qinan.safetyeval.infrastructure.adapter.ThreadLocalUserInfoAdapter;
|
||||
import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMapper;
|
||||
import org.qinan.safetyeval.infrastructure.support.InstitutionOrgSupport;
|
||||
import org.qinan.safetyeval.infrastructure.support.ProjectNoGenerator;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
|
@ -27,8 +27,12 @@ import org.springframework.context.annotation.Lazy;
|
|||
import org.springframework.dao.DuplicateKeyException;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
|
||||
@Service
|
||||
public class EvalProjectExecutor implements EvalProjectApi {
|
||||
|
||||
|
|
@ -47,6 +51,7 @@ public class EvalProjectExecutor implements EvalProjectApi {
|
|||
@Lazy
|
||||
@Autowired(required = false)
|
||||
private EvalProjectCmdConvertor evalProjectCmdConvertor;
|
||||
|
||||
@Autowired
|
||||
private EvalProjectMapper evalProjectMapper;
|
||||
|
||||
|
|
@ -100,11 +105,41 @@ public class EvalProjectExecutor implements EvalProjectApi {
|
|||
@Override
|
||||
public PageResponse<EvalProjectProgressCO> progressPage(EvalProjectProgressPageQuery query) {
|
||||
EvalProjectQuery domainQuery = evalProjectCmdConvertor.convertProgressPageQueryToQ(query);
|
||||
domainQuery.setOrgId( ThreadLocalUserInfoAdapter.getOrgId());
|
||||
PageResult<EvalProjectEntity> pageResult = evalProjectDomainService.page(domainQuery);
|
||||
return PageResponse.of(
|
||||
evalProjectCmdConvertor.convertEListToProgressCOList(pageResult.getRecords()),
|
||||
pageResult.getTotal());
|
||||
domainQuery.setOrgId(ThreadLocalUserInfoAdapter.getOrgId());
|
||||
Page<EvalProjectProgressCO> page = new Page<>(domainQuery.getPageNum(), domainQuery.getPageSize());
|
||||
IPage<EvalProjectProgressCO> result = evalProjectMapper.selectProgressPage(page, domainQuery);
|
||||
if (result.getRecords() != null) {
|
||||
result.getRecords().forEach(this::fillProgressStatus);
|
||||
}
|
||||
return PageResponse.of(result.getRecords(), result.getTotal());
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据项目结束日期计算剩余天数、进度状态码、进度状态名称。
|
||||
* 规则(参考原型页面):
|
||||
* - 剩余天数 = planEndDate - 今天
|
||||
* - 剩余天数 < 0:DELAY(延期)
|
||||
* - 0 ≤ 剩余天数 ≤ 3:NEAR(临期)
|
||||
* - 剩余天数 > 3:NORMAL(正常)
|
||||
*/
|
||||
private void fillProgressStatus(EvalProjectProgressCO co) {
|
||||
if (co == null || co.getPlanEndDate() == null) {
|
||||
return;
|
||||
}
|
||||
LocalDate today = LocalDate.now();
|
||||
long days = today.until(co.getPlanEndDate()).getDays();
|
||||
co.setRemainingDays((int) days);
|
||||
|
||||
EvalProjectProgressStatEnum statEnum;
|
||||
if (days < 0) {
|
||||
statEnum = EvalProjectProgressStatEnum.DELAY;
|
||||
} else if (days <= 3) {
|
||||
statEnum = EvalProjectProgressStatEnum.NEAR;
|
||||
} else {
|
||||
statEnum = EvalProjectProgressStatEnum.NORMAL;
|
||||
}
|
||||
co.setProgressStatusCode(statEnum.getCode());
|
||||
co.setProgressStatusName(statEnum.getValue());
|
||||
}
|
||||
|
||||
private EvalProjectEntity saveWithProjectNo(EvalProjectEntity entity, Long orgId) {
|
||||
|
|
|
|||
|
|
@ -20,6 +20,9 @@ public class EvalProjectProgressCO {
|
|||
@ApiModelProperty("项目名称")
|
||||
private String projectName;
|
||||
|
||||
@ApiModelProperty("客户名称")
|
||||
private String customerName;
|
||||
|
||||
@ApiModelProperty("客户负责人")
|
||||
private String customerContactName;
|
||||
|
||||
|
|
@ -32,6 +35,9 @@ public class EvalProjectProgressCO {
|
|||
@ApiModelProperty("项目结束日期")
|
||||
private LocalDate planEndDate;
|
||||
|
||||
@ApiModelProperty("剩余天数(截止日期-当前日期,负数表示已超期)")
|
||||
private Integer remainingDays;
|
||||
|
||||
@ApiModelProperty("项目进度状态码:NORMAL正常 NEAR临期 DELAY延期")
|
||||
private String progressStatusCode;
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,9 @@ public class EvalProjectProgressPageQuery extends BasePageQuery {
|
|||
@ApiModelProperty("项目名称")
|
||||
private String projectName;
|
||||
|
||||
@ApiModelProperty("客户名称")
|
||||
private String customerName;
|
||||
|
||||
@ApiModelProperty("项目进度状态:NORMAL正常 NEAR临期 DELAY延期")
|
||||
private String progressStatus;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ public class EvalProjectQuery {
|
|||
private Long pageSize;
|
||||
private Long orgId;
|
||||
private String projectName;
|
||||
private String customerName;
|
||||
private String projectLeaderName;
|
||||
private String customerContactName;
|
||||
private Long customerId;
|
||||
|
|
|
|||
|
|
@ -1,9 +1,13 @@
|
|||
package org.qinan.safetyeval.infrastructure.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.qinan.safetyeval.client.co.institution.EvalProjectProgressCO;
|
||||
import org.qinan.safetyeval.domain.query.EvalProjectQuery;
|
||||
import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectDO;
|
||||
|
||||
@Mapper
|
||||
|
|
@ -11,4 +15,9 @@ public interface EvalProjectMapper extends BaseMapper<EvalProjectDO> {
|
|||
|
||||
@Select("SELECT MAX(project_no) FROM eval_project WHERE project_no LIKE CONCAT(#{prefix}, '%')")
|
||||
String selectMaxProjectNoByPrefix(@Param("prefix") String prefix);
|
||||
|
||||
/**
|
||||
* 项目进度管理分页查询(关联 eval_customer 获取客户名称,直接返回 EvalProjectProgressCO)
|
||||
*/
|
||||
IPage<EvalProjectProgressCO> selectProgressPage(Page<EvalProjectProgressCO> page, @Param("query") EvalProjectQuery query);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.qinan.safetyeval.infrastructure.mapper.EvalProjectMapper">
|
||||
|
||||
<!-- 项目进度管理分页查询(关联 eval_customer 获取客户名称;进度状态/剩余天数由业务代码计算) -->
|
||||
<select id="selectProgressPage"
|
||||
resultType="org.qinan.safetyeval.client.co.institution.EvalProjectProgressCO">
|
||||
SELECT
|
||||
p.id,
|
||||
p.project_no,
|
||||
p.project_name,
|
||||
c.customer_name,
|
||||
p.customer_contact_name,
|
||||
p.project_leader_name,
|
||||
p.plan_end_date
|
||||
FROM eval_project p
|
||||
LEFT JOIN eval_customer c
|
||||
ON c.id = p.customer_id
|
||||
AND c.delete_enum = 'false'
|
||||
WHERE p.delete_enum = 'false'
|
||||
<if test="query.orgId != null">
|
||||
AND p.org_id = #{query.orgId}
|
||||
</if>
|
||||
<if test="query.projectName != null and query.projectName != ''">
|
||||
AND p.project_name LIKE CONCAT('%', #{query.projectName}, '%')
|
||||
</if>
|
||||
<if test="query.customerName != null and query.customerName != ''">
|
||||
AND c.customer_name LIKE CONCAT('%', #{query.customerName}, '%')
|
||||
</if>
|
||||
<if test="query.progressStatus != null and query.progressStatus == 'DELAY'">
|
||||
AND p.plan_end_date < CURDATE()
|
||||
</if>
|
||||
<if test="query.progressStatus != null and query.progressStatus == 'NEAR'">
|
||||
AND p.plan_end_date >= CURDATE()
|
||||
AND p.plan_end_date <= DATE_ADD(CURDATE(), INTERVAL 3 DAY)
|
||||
</if>
|
||||
<if test="query.progressStatus != null and query.progressStatus == 'NORMAL'">
|
||||
AND p.plan_end_date > DATE_ADD(CURDATE(), INTERVAL 3 DAY)
|
||||
</if>
|
||||
ORDER BY p.id DESC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue