luotaiqian 2026-07-27 13:51:05 +08:00
parent 48be6c639e
commit a863916fc6
12 changed files with 145 additions and 1 deletions

View File

@ -244,6 +244,7 @@ create table `eval_project` (
`checkin_radius_meters` int default null comment '打卡有效范围(米,手填)', `checkin_radius_meters` int default null comment '打卡有效范围(米,手填)',
`participants_json` json default null comment '参与人员JSON:[{"name":"名称","id":1}]', `participants_json` json default null comment '参与人员JSON:[{"name":"名称","id":1}]',
`project_leader_name` varchar(50) default null comment '项目负责人(手填)', `project_leader_name` varchar(50) default null comment '项目负责人(手填)',
`clock_in_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'NOT_CLOCKED_IN' COMMENT '人员打卡状态 未打卡 → NOT_CLOCKED_IN人员未到齐 → NOT_ALL_PRESENT正常 → NORMAL',
`archive_flag` int not null default 0 comment '项目归档(1归档0未归档)', `archive_flag` int not null default 0 comment '项目归档(1归档0未归档)',
`is_statutory` tinyint not null default 0 comment '是否法定项目 1是 0否', `is_statutory` tinyint not null default 0 comment '是否法定项目 1是 0否',
`delete_enum` varchar(32) default null comment '删除标识true false', `delete_enum` varchar(32) default null comment '删除标识true false',

View File

@ -8,6 +8,7 @@ import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorCO;
import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorPageCO; import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorPageCO;
import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorStatCO; import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorStatCO;
import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectNodeOverviewCO; import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectNodeOverviewCO;
import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectSurveyStatCO;
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.regulator.RegulatorEvalProjectMonitorPageQuery; import org.qinan.safetyeval.client.dto.regulator.RegulatorEvalProjectMonitorPageQuery;
@ -53,6 +54,12 @@ public class RegulatorEvalProjectMonitorController {
return regulatorEvalProjectMonitorApi.selectRegulatorMonitorStat(); return regulatorEvalProjectMonitorApi.selectRegulatorMonitorStat();
} }
@ApiOperation("项目踏勘监管统计")
@GetMapping("/survey-stat")
public SingleResponse<RegulatorEvalProjectSurveyStatCO> selectRegulatorSurveyStat() {
return regulatorEvalProjectMonitorApi.selectRegulatorSurveyStat();
}
@ApiOperation("实时监控分页") @ApiOperation("实时监控分页")
@GetMapping("/realtime-page") @GetMapping("/realtime-page")
public PageResponse<RegulatorEvalProjectMonitorPageCO> realtimePage(@Validated RegulatorEvalProjectMonitorRealtimePageQuery query) { public PageResponse<RegulatorEvalProjectMonitorPageCO> realtimePage(@Validated RegulatorEvalProjectMonitorRealtimePageQuery query) {

View File

@ -9,12 +9,14 @@ import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorCO;
import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorPageCO; import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorPageCO;
import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorStatCO; import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorStatCO;
import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectNodeOverviewCO; import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectNodeOverviewCO;
import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectSurveyStatCO;
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.regulator.RegulatorEvalProjectMonitorPageQuery; import org.qinan.safetyeval.client.dto.regulator.RegulatorEvalProjectMonitorPageQuery;
import org.qinan.safetyeval.client.dto.regulator.RegulatorEvalProjectMonitorRealtimePageQuery; import org.qinan.safetyeval.client.dto.regulator.RegulatorEvalProjectMonitorRealtimePageQuery;
import org.qinan.safetyeval.domain.constant.EvalTypeEnum; import org.qinan.safetyeval.domain.constant.EvalTypeEnum;
import org.qinan.safetyeval.domain.constant.IndustryEnum; import org.qinan.safetyeval.domain.constant.IndustryEnum;
import org.qinan.safetyeval.domain.constant.ProjectProcessWaringStatusEnum;
import org.qinan.safetyeval.domain.entity.EvalProjectEntity; import org.qinan.safetyeval.domain.entity.EvalProjectEntity;
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;
@ -25,6 +27,7 @@ import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@ -73,6 +76,11 @@ public class RegulatorEvalProjectMonitorExecutor implements RegulatorEvalProject
return SingleResponse.success(evalProjectMapper.selectRegulatorMonitorStat()); return SingleResponse.success(evalProjectMapper.selectRegulatorMonitorStat());
} }
@Override
public SingleResponse<RegulatorEvalProjectSurveyStatCO> selectRegulatorSurveyStat() {
return SingleResponse.success(evalProjectMapper.selectRegulatorSurveyStat());
}
@Override @Override
public PageResponse<RegulatorEvalProjectMonitorPageCO> realtimePage(RegulatorEvalProjectMonitorRealtimePageQuery query) { public PageResponse<RegulatorEvalProjectMonitorPageCO> realtimePage(RegulatorEvalProjectMonitorRealtimePageQuery query) {
Page<RegulatorEvalProjectMonitorPageCO> page = new Page<>(query.getCurrent(), query.getSize()); Page<RegulatorEvalProjectMonitorPageCO> page = new Page<>(query.getCurrent(), query.getSize());
@ -84,6 +92,13 @@ public class RegulatorEvalProjectMonitorExecutor implements RegulatorEvalProject
} }
private void fillDisplayFields(RegulatorEvalProjectMonitorPageCO co) { private void fillDisplayFields(RegulatorEvalProjectMonitorPageCO co) {
LocalDate planEndDate = co.getPlanEndDate();
// 当前时间大于等于计划完成日期,则项目逾期:预警状态与过程预警状态置为异常
if (planEndDate != null && !planEndDate.isAfter(LocalDate.now())) {
co.setWaringStatus(ProjectProcessWaringStatusEnum.ABNORMAL.getValue());
co.setProcessWaringStatus(ProjectProcessWaringStatusEnum.ABNORMAL.getValue());
} else {
co.setWaringStatus(ProjectProcessWaringStatusEnum.NORMAL.getValue());
}
} }
} }

View File

@ -4,6 +4,7 @@ import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorCO;
import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorPageCO; import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorPageCO;
import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorStatCO; import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorStatCO;
import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectNodeOverviewCO; import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectNodeOverviewCO;
import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectSurveyStatCO;
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.regulator.RegulatorEvalProjectMonitorPageQuery; import org.qinan.safetyeval.client.dto.regulator.RegulatorEvalProjectMonitorPageQuery;
@ -19,5 +20,7 @@ public interface RegulatorEvalProjectMonitorApi {
SingleResponse<RegulatorEvalProjectMonitorStatCO> selectRegulatorMonitorStat(); SingleResponse<RegulatorEvalProjectMonitorStatCO> selectRegulatorMonitorStat();
SingleResponse<RegulatorEvalProjectSurveyStatCO> selectRegulatorSurveyStat();
PageResponse<RegulatorEvalProjectMonitorPageCO> realtimePage(RegulatorEvalProjectMonitorRealtimePageQuery query); PageResponse<RegulatorEvalProjectMonitorPageCO> realtimePage(RegulatorEvalProjectMonitorRealtimePageQuery query);
} }

View File

@ -72,6 +72,9 @@ public class EvalProjectCO {
@ApiModelProperty("项目节点完成进度") @ApiModelProperty("项目节点完成进度")
private String projectNode; private String projectNode;
@ApiModelProperty("人员打卡状态NOT_CLOCKED_IN未打卡 NOT_ALL_PRESENT人员未到齐 NORMAL正常")
private String clockInStatus;
@ApiModelProperty(value = "项目归档1归档 0未归档", example = "0") @ApiModelProperty(value = "项目归档1归档 0未归档", example = "0")
private Integer archiveFlag; private Integer archiveFlag;

View File

@ -0,0 +1,23 @@
package org.qinan.safetyeval.client.co.regulator;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* -
*/
@Data
public class RegulatorEvalProjectSurveyStatCO {
@ApiModelProperty("告知书已归档数(正常)")
private Integer notificationArchivedCount;
@ApiModelProperty("告知异常数")
private Integer notificationAbnormalCount;
@ApiModelProperty("人员打卡正常数")
private Integer clockInNormalCount;
@ApiModelProperty("打卡异常数")
private Integer clockInAbnormalCount;
}

View File

@ -0,0 +1,38 @@
package org.qinan.safetyeval.domain.constant;
/** 人员打卡状态NOT_CLOCKED_IN未打卡 NOT_ALL_PRESENT人员未到齐 NORMAL正常 */
public enum ClockInStatusEnum {
NOT_CLOCKED_IN("NOT_CLOCKED_IN", "未打卡"),
NOT_ALL_PRESENT("NOT_ALL_PRESENT", "人员未到齐"),
NORMAL("NORMAL", "正常"),
;
private final String code;
private final String value;
ClockInStatusEnum(String code, String value) {
this.code = code;
this.value = value;
}
public String getCode() {
return code;
}
public String getValue() {
return value;
}
public static ClockInStatusEnum ofCode(String code) {
if (code == null) {
return null;
}
for (ClockInStatusEnum item : values()) {
if (item.code.equals(code)) {
return item;
}
}
return null;
}
}

View File

@ -0,0 +1,23 @@
package org.qinan.safetyeval.domain.constant;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
*
*/
@Getter
@RequiredArgsConstructor
public enum ProjectProcessWaringStatusEnum {
NORMAL("normal", "正常"),
ABNORMAL("abnormal", "异常"),
;
@JsonValue
@EnumValue
private final String value;
private final String label;
}

View File

@ -28,6 +28,8 @@ public class EvalProjectEntity {
private String projectLeaderName; private String projectLeaderName;
/** 项目节点完成进度 */ /** 项目节点完成进度 */
private String projectNode; private String projectNode;
/** 人员打卡状态NOT_CLOCKED_IN未打卡 NOT_ALL_PRESENT人员未到齐 NORMAL正常 */
private String clockInStatus;
/** 1归档 0未归档 */ /** 1归档 0未归档 */
private Integer archiveFlag; private Integer archiveFlag;
/** 是否法定项目 1是 0否 */ /** 是否法定项目 1是 0否 */

View File

@ -29,6 +29,8 @@ public class EvalProjectDO {
private String participantsJson; private String participantsJson;
private String projectLeaderName; private String projectLeaderName;
private String projectNode; private String projectNode;
/** 人员打卡状态NOT_CLOCKED_IN未打卡 NOT_ALL_PRESENT人员未到齐 NORMAL正常 */
private String clockInStatus;
private Integer archiveFlag; private Integer archiveFlag;
/** 是否法定项目 1是 0否 */ /** 是否法定项目 1是 0否 */
private Boolean isStatutory; private Boolean isStatutory;

View File

@ -10,6 +10,7 @@ import org.qinan.safetyeval.client.co.institution.EvalProjectProgressCO;
import org.qinan.safetyeval.client.co.institution.RiskWarningCO; import org.qinan.safetyeval.client.co.institution.RiskWarningCO;
import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorPageCO; import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorPageCO;
import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorStatCO; import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorStatCO;
import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectSurveyStatCO;
import org.qinan.safetyeval.client.dto.regulator.RegulatorEvalProjectMonitorRealtimePageQuery; import org.qinan.safetyeval.client.dto.regulator.RegulatorEvalProjectMonitorRealtimePageQuery;
import org.qinan.safetyeval.domain.query.EvalProjectQuery; import org.qinan.safetyeval.domain.query.EvalProjectQuery;
import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectDO; import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectDO;
@ -39,6 +40,11 @@ public interface EvalProjectMapper extends BaseMapper<EvalProjectDO> {
*/ */
RegulatorEvalProjectMonitorStatCO selectRegulatorMonitorStat(); RegulatorEvalProjectMonitorStatCO selectRegulatorMonitorStat();
/**
* -+
*/
RegulatorEvalProjectSurveyStatCO selectRegulatorSurveyStat();
/** /**
* - org_info * - org_info
*/ */

View File

@ -93,6 +93,27 @@
AND is_statutory = 1 AND is_statutory = 1
</select> </select>
<!-- 监管端-项目踏勘监管统计:未删除且法定项目(is_statutory=1)告知书归档关联eval_survey_attach人员打卡状态取clock_in_status -->
<select id="selectRegulatorSurveyStat"
resultType="org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectSurveyStatCO">
SELECT
IFNULL(SUM(CASE WHEN EXISTS (
SELECT 1 FROM eval_survey_attach sa
WHERE sa.project_id = p.id
AND sa.attach_type_code = 'PRACTICE_NOTIFICATION'
) THEN 1 ELSE 0 END), 0) AS notificationArchivedCount,
IFNULL(SUM(CASE WHEN EXISTS (
SELECT 1 FROM eval_survey_attach sa
WHERE sa.project_id = p.id
AND sa.attach_type_code = 'PRACTICE_NOTIFICATION'
) THEN 0 ELSE 1 END), 0) AS notificationAbnormalCount,
IFNULL(SUM(CASE WHEN p.clock_in_status = 'NORMAL' THEN 1 ELSE 0 END), 0) AS clockInNormalCount,
IFNULL(SUM(CASE WHEN p.clock_in_status = 'NORMAL' THEN 0 ELSE 1 END), 0) AS clockInAbnormalCount
FROM eval_project p
WHERE p.delete_enum = 'false'
AND p.is_statutory = 1
</select>
<!-- 监管端-安评项目实时监控分页:未删除且法定项目(is_statutory=1),关联 org_info 获取评价机构名称,关联 eval_project_process_waring 获取预警信息 --> <!-- 监管端-安评项目实时监控分页:未删除且法定项目(is_statutory=1),关联 org_info 获取评价机构名称,关联 eval_project_process_waring 获取预警信息 -->
<select id="selectRegulatorMonitorPage" <select id="selectRegulatorMonitorPage"
resultType="org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorPageCO"> resultType="org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorPageCO">