dev
luotaiqian 2026-07-22 14:12:38 +08:00
parent a568c8b87e
commit 4ea9576af8
8 changed files with 226 additions and 1 deletions

View File

@ -5,8 +5,11 @@ import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse; import com.alibaba.cola.dto.SingleResponse;
import org.qinan.safetyeval.app.waring.service.EvalProjectWaringServiceI; import org.qinan.safetyeval.app.waring.service.EvalProjectWaringServiceI;
import org.qinan.safetyeval.client.waring.response.EvalProjectWaringCo; import org.qinan.safetyeval.client.waring.response.EvalProjectWaringCo;
import org.qinan.safetyeval.client.waring.response.EvalProjectWaringRemindCo;
import org.qinan.safetyeval.client.waring.response.EvalProjectWaringStatCo;
import org.qinan.safetyeval.client.waring.request.EvalProjectWaringAddCmd; import org.qinan.safetyeval.client.waring.request.EvalProjectWaringAddCmd;
import org.qinan.safetyeval.client.waring.request.EvalProjectWaringPageQry; import org.qinan.safetyeval.client.waring.request.EvalProjectWaringPageQry;
import org.qinan.safetyeval.client.waring.request.EvalProjectWaringRemindPageQry;
import org.qinan.safetyeval.client.waring.request.EvalProjectWaringUpdateCmd; import org.qinan.safetyeval.client.waring.request.EvalProjectWaringUpdateCmd;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -68,4 +71,16 @@ public class EvalProjectWaringController implements Serializable{
return Response.buildSuccess(); return Response.buildSuccess();
} }
@GetMapping("/stat")
@ApiOperation("安评业务提醒统计")
public SingleResponse<EvalProjectWaringStatCo> stat() {
return SingleResponse.of(evalProjectWaringServiceI.statEvalProjectWaring());
}
@GetMapping("/remind-page")
@ApiOperation("安评业务提醒分页")
public PageResponse<EvalProjectWaringRemindCo> remindPage(@Validated EvalProjectWaringRemindPageQry qry) {
return evalProjectWaringServiceI.remindPageEvalProjectWaring(qry);
}
} }

View File

@ -2,8 +2,11 @@ package org.qinan.safetyeval.app.waring.service;
import com.alibaba.cola.dto.PageResponse; import com.alibaba.cola.dto.PageResponse;
import org.qinan.safetyeval.client.waring.response.EvalProjectWaringCo; import org.qinan.safetyeval.client.waring.response.EvalProjectWaringCo;
import org.qinan.safetyeval.client.waring.response.EvalProjectWaringRemindCo;
import org.qinan.safetyeval.client.waring.response.EvalProjectWaringStatCo;
import org.qinan.safetyeval.client.waring.request.EvalProjectWaringAddCmd; import org.qinan.safetyeval.client.waring.request.EvalProjectWaringAddCmd;
import org.qinan.safetyeval.client.waring.request.EvalProjectWaringPageQry; import org.qinan.safetyeval.client.waring.request.EvalProjectWaringPageQry;
import org.qinan.safetyeval.client.waring.request.EvalProjectWaringRemindPageQry;
import org.qinan.safetyeval.client.waring.request.EvalProjectWaringUpdateCmd; import org.qinan.safetyeval.client.waring.request.EvalProjectWaringUpdateCmd;
/** /**
@ -54,5 +57,17 @@ public interface EvalProjectWaringServiceI {
*/ */
boolean deletedEvalProjectWaringByIds(Long[] ids); boolean deletedEvalProjectWaringByIds(Long[] ids);
/**
*
* @return
*/
EvalProjectWaringStatCo statEvalProjectWaring();
/**
*
* @param evalProjectWaringRemindPageQry
* @return
*/
PageResponse<EvalProjectWaringRemindCo> remindPageEvalProjectWaring(EvalProjectWaringRemindPageQry evalProjectWaringRemindPageQry);
} }

View File

@ -1,16 +1,23 @@
package org.qinan.safetyeval.app.waring.service.impl; package org.qinan.safetyeval.app.waring.service.impl;
import com.alibaba.cola.dto.PageResponse; import com.alibaba.cola.dto.PageResponse;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jjb.saas.framework.repository.common.PageHelper;
import org.qinan.safetyeval.app.waring.executor.command.EvalProjectWaringAddCmdExe; import org.qinan.safetyeval.app.waring.executor.command.EvalProjectWaringAddCmdExe;
import org.qinan.safetyeval.app.waring.executor.command.EvalProjectWaringDelCmdExe; import org.qinan.safetyeval.app.waring.executor.command.EvalProjectWaringDelCmdExe;
import org.qinan.safetyeval.app.waring.executor.command.EvalProjectWaringUpdateCmdExe; import org.qinan.safetyeval.app.waring.executor.command.EvalProjectWaringUpdateCmdExe;
import org.qinan.safetyeval.app.waring.executor.query.EvalProjectWaringListQueryExe; import org.qinan.safetyeval.app.waring.executor.query.EvalProjectWaringListQueryExe;
import org.qinan.safetyeval.app.waring.executor.query.EvalProjectWaringPageQueryExe; import org.qinan.safetyeval.app.waring.executor.query.EvalProjectWaringPageQueryExe;
import org.qinan.safetyeval.app.waring.service.EvalProjectWaringServiceI; import org.qinan.safetyeval.app.waring.service.EvalProjectWaringServiceI;
import org.qinan.safetyeval.client.waring.response.EvalProjectWaringCo;
import org.qinan.safetyeval.client.waring.request.EvalProjectWaringAddCmd; import org.qinan.safetyeval.client.waring.request.EvalProjectWaringAddCmd;
import org.qinan.safetyeval.client.waring.request.EvalProjectWaringPageQry; import org.qinan.safetyeval.client.waring.request.EvalProjectWaringPageQry;
import org.qinan.safetyeval.client.waring.request.EvalProjectWaringRemindPageQry;
import org.qinan.safetyeval.client.waring.request.EvalProjectWaringUpdateCmd; import org.qinan.safetyeval.client.waring.request.EvalProjectWaringUpdateCmd;
import org.qinan.safetyeval.client.waring.response.EvalProjectWaringCo;
import org.qinan.safetyeval.client.waring.response.EvalProjectWaringRemindCo;
import org.qinan.safetyeval.client.waring.response.EvalProjectWaringStatCo;
import org.qinan.safetyeval.infrastructure.adapter.ThreadLocalUserInfoAdapter;
import org.qinan.safetyeval.infrastructure.persistence.mapper.EvalProjectWaringMapper;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -28,6 +35,8 @@ public class EvalProjectWaringServiceImpl implements EvalProjectWaringServiceI {
private final EvalProjectWaringAddCmdExe evalProjectWaringAddCommandExe; private final EvalProjectWaringAddCmdExe evalProjectWaringAddCommandExe;
private final EvalProjectWaringDelCmdExe evalProjectWaringDelCommandExe; private final EvalProjectWaringDelCmdExe evalProjectWaringDelCommandExe;
private final EvalProjectWaringPageQueryExe evalProjectWaringPageQueryExe; private final EvalProjectWaringPageQueryExe evalProjectWaringPageQueryExe;
private final EvalProjectWaringMapper evalProjectWaringMapper;
@Override @Override
public PageResponse<EvalProjectWaringCo> listEvalProjectWaringPage(EvalProjectWaringPageQry evalProjectWaringPageQry) { public PageResponse<EvalProjectWaringCo> listEvalProjectWaringPage(EvalProjectWaringPageQry evalProjectWaringPageQry) {
return evalProjectWaringPageQueryExe.execute(evalProjectWaringPageQry); return evalProjectWaringPageQueryExe.execute(evalProjectWaringPageQry);
@ -58,4 +67,20 @@ public class EvalProjectWaringServiceImpl implements EvalProjectWaringServiceI {
return evalProjectWaringDelCommandExe.execute(ids); return evalProjectWaringDelCommandExe.execute(ids);
} }
@Override
public EvalProjectWaringStatCo statEvalProjectWaring() {
Long orgId = ThreadLocalUserInfoAdapter.getOrgId();
EvalProjectWaringStatCo co = evalProjectWaringMapper.selectStat(orgId);
return co != null ? co : new EvalProjectWaringStatCo();
}
@SuppressWarnings("unchecked")
@Override
public PageResponse<EvalProjectWaringRemindCo> remindPageEvalProjectWaring(EvalProjectWaringRemindPageQry evalProjectWaringRemindPageQry) {
Long orgId = ThreadLocalUserInfoAdapter.getOrgId();
IPage<EvalProjectWaringRemindCo> page = PageHelper.queryToPage(evalProjectWaringRemindPageQry);
IPage<EvalProjectWaringRemindCo> result = evalProjectWaringMapper.selectRemindPage(page, orgId, evalProjectWaringRemindPageQry);
return PageHelper.pageToResponse(result, result.getRecords());
}
} }

View File

@ -0,0 +1,28 @@
package org.qinan.safetyeval.client.waring.request;
import com.alibaba.cola.dto.PageQuery;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
*
*/
@Data
public class EvalProjectWaringRemindPageQry extends PageQuery implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("客户名称")
private String customerName;
@ApiModelProperty("行业")
private String industryCode;
@ApiModelProperty("提醒等级")
private String waringStatus;
@ApiModelProperty("项目名称")
private String projectName;
}

View File

@ -0,0 +1,49 @@
package org.qinan.safetyeval.client.waring.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
*
*/
@Data
public class EvalProjectWaringRemindCo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("预警id")
private Long id;
@ApiModelProperty("项目id")
private Long projectId;
@ApiModelProperty("客户名称")
private String customerName;
@ApiModelProperty("行业")
private String industryCode;
@ApiModelProperty("最近报告完成日")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime archiveDate;
@ApiModelProperty("周期")
private Long cycleDate;
@ApiModelProperty("下次应开展")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime reassessmentDate;
@ApiModelProperty("提醒等级")
private String waringStatus;
@ApiModelProperty("项目名称")
private String projectName;
@ApiModelProperty("业务负责人")
private String projectLeaderName;
}

View File

@ -0,0 +1,27 @@
package org.qinan.safetyeval.client.waring.response;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
*
*/
@Data
public class EvalProjectWaringStatCo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("首次预警数")
private Integer firstWaringCount;
@ApiModelProperty("二次提醒数")
private Integer secondWaringCount;
@ApiModelProperty("紧急预警数")
private Integer emergencyWaringCount;
@ApiModelProperty("纳入提醒客户数")
private Integer remindCount;
}

View File

@ -2,6 +2,10 @@ package org.qinan.safetyeval.infrastructure.persistence.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.qinan.safetyeval.infrastructure.persistence.domainobject.EvalProjectWaringDO; import org.qinan.safetyeval.infrastructure.persistence.domainobject.EvalProjectWaringDO;
import org.qinan.safetyeval.client.waring.request.EvalProjectWaringRemindPageQry;
import org.qinan.safetyeval.client.waring.response.EvalProjectWaringRemindCo;
import org.qinan.safetyeval.client.waring.response.EvalProjectWaringStatCo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -12,4 +16,16 @@ import org.apache.ibatis.annotations.Param;
*/ */
@Mapper @Mapper
public interface EvalProjectWaringMapper extends BaseMapper<EvalProjectWaringDO> { public interface EvalProjectWaringMapper extends BaseMapper<EvalProjectWaringDO> {
/**
* SQL
*/
EvalProjectWaringStatCo selectStat(@Param("orgId") Long orgId);
/**
* eval_projecteval_customer
*/
IPage<EvalProjectWaringRemindCo> selectRemindPage(IPage<EvalProjectWaringRemindCo> page,
@Param("orgId") Long orgId,
@Param("query") EvalProjectWaringRemindPageQry query);
} }

View File

@ -32,4 +32,54 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select id, org_id, project_id, archive_date, waring_status, waring_start_time, reassessment_date, cycle_date, delete_enum, remarks, create_name, update_name, tenant_id, version, create_time, update_time, create_id, update_id, env, project_node, industry_code from eval_project_waring select id, org_id, project_id, archive_date, waring_status, waring_start_time, reassessment_date, cycle_date, delete_enum, remarks, create_name, update_name, tenant_id, version, create_time, update_time, create_id, update_id, env, project_node, industry_code from eval_project_waring
</sql> </sql>
<!-- 安评业务提醒统计单条SQL聚合 -->
<select id="selectStat"
resultType="org.qinan.safetyeval.client.waring.response.EvalProjectWaringStatCo">
SELECT
SUM(CASE WHEN waring_status = 'first_waring' THEN 1 ELSE 0 END) AS first_waring_count,
SUM(CASE WHEN waring_status = 'second_waring' THEN 1 ELSE 0 END) AS second_waring_count,
SUM(CASE WHEN waring_status IN ('emergency_waring', 'overdue_warning') THEN 1 ELSE 0 END) AS emergency_waring_count,
SUM(CASE WHEN waring_status != 'end_warning' THEN 1 ELSE 0 END) AS remind_count
FROM eval_project_waring
WHERE delete_enum = 'false' AND org_id = #{orgId}
</select>
<!-- 安评业务提醒分页查询(关联 eval_project、eval_customer -->
<select id="selectRemindPage"
resultType="org.qinan.safetyeval.client.waring.response.EvalProjectWaringRemindCo">
SELECT
w.id,
w.project_id,
c.customer_name,
p.industry_code,
w.archive_date,
w.cycle_date,
w.reassessment_date,
w.waring_status,
p.project_name,
p.project_leader_name
FROM eval_project_waring w
LEFT JOIN eval_project p
ON p.id = w.project_id
AND p.delete_enum = 'false'
LEFT JOIN eval_customer c
ON c.id = p.customer_id
AND c.delete_enum = 'false'
WHERE w.delete_enum = 'false'
AND w.org_id = #{orgId}
<if test="query.customerName != null and query.customerName != ''">
AND c.customer_name LIKE CONCAT('%', #{query.customerName}, '%')
</if>
<if test="query.industryCode != null and query.industryCode != ''">
AND p.industry_code = #{query.industryCode}
</if>
<if test="query.waringStatus != null and query.waringStatus != ''">
AND w.waring_status = #{query.waringStatus}
</if>
<if test="query.projectName != null and query.projectName != ''">
AND p.project_name LIKE CONCAT('%', #{query.projectName}, '%')
</if>
ORDER BY w.id DESC
</select>
</mapper> </mapper>