diff --git a/docs/db/phase2/init-phase2.sql b/docs/db/phase2/init-phase2.sql index 78285b8..94df832 100644 --- a/docs/db/phase2/init-phase2.sql +++ b/docs/db/phase2/init-phase2.sql @@ -244,6 +244,7 @@ create table `eval_project` ( `checkin_radius_meters` int default null comment '打卡有效范围(米,手填)', `participants_json` json default null comment '参与人员JSON:[{"name":"名称","id":1}]', `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未归档)', `is_statutory` tinyint not null default 0 comment '是否法定项目 1是 0否', `delete_enum` varchar(32) default null comment '删除标识true false', diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/regulator/RegulatorEvalProjectMonitorController.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/regulator/RegulatorEvalProjectMonitorController.java index eb0710a..ef79ac7 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/regulator/RegulatorEvalProjectMonitorController.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/regulator/RegulatorEvalProjectMonitorController.java @@ -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.RegulatorEvalProjectMonitorStatCO; 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.SingleResponse; import org.qinan.safetyeval.client.dto.regulator.RegulatorEvalProjectMonitorPageQuery; @@ -53,6 +54,12 @@ public class RegulatorEvalProjectMonitorController { return regulatorEvalProjectMonitorApi.selectRegulatorMonitorStat(); } + @ApiOperation("项目踏勘监管统计") + @GetMapping("/survey-stat") + public SingleResponse selectRegulatorSurveyStat() { + return regulatorEvalProjectMonitorApi.selectRegulatorSurveyStat(); + } + @ApiOperation("实时监控分页") @GetMapping("/realtime-page") public PageResponse realtimePage(@Validated RegulatorEvalProjectMonitorRealtimePageQuery query) { diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/regulator/RegulatorEvalProjectMonitorExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/regulator/RegulatorEvalProjectMonitorExecutor.java index e7ab01a..b402f6a 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/regulator/RegulatorEvalProjectMonitorExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/regulator/RegulatorEvalProjectMonitorExecutor.java @@ -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.RegulatorEvalProjectMonitorStatCO; 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.SingleResponse; import org.qinan.safetyeval.client.dto.regulator.RegulatorEvalProjectMonitorPageQuery; import org.qinan.safetyeval.client.dto.regulator.RegulatorEvalProjectMonitorRealtimePageQuery; import org.qinan.safetyeval.domain.constant.EvalTypeEnum; 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.exception.BizException; import org.qinan.safetyeval.domain.exception.ErrorCode; @@ -25,6 +27,7 @@ import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMapper; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.time.LocalDate; import java.util.stream.Collectors; @Service @@ -73,6 +76,11 @@ public class RegulatorEvalProjectMonitorExecutor implements RegulatorEvalProject return SingleResponse.success(evalProjectMapper.selectRegulatorMonitorStat()); } + @Override + public SingleResponse selectRegulatorSurveyStat() { + return SingleResponse.success(evalProjectMapper.selectRegulatorSurveyStat()); + } + @Override public PageResponse realtimePage(RegulatorEvalProjectMonitorRealtimePageQuery query) { Page page = new Page<>(query.getCurrent(), query.getSize()); @@ -84,6 +92,13 @@ public class RegulatorEvalProjectMonitorExecutor implements RegulatorEvalProject } 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()); + } } } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/regulator/RegulatorEvalProjectMonitorApi.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/regulator/RegulatorEvalProjectMonitorApi.java index b1625c0..bb49d27 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/regulator/RegulatorEvalProjectMonitorApi.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/regulator/RegulatorEvalProjectMonitorApi.java @@ -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.RegulatorEvalProjectMonitorStatCO; 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.SingleResponse; import org.qinan.safetyeval.client.dto.regulator.RegulatorEvalProjectMonitorPageQuery; @@ -19,5 +20,7 @@ public interface RegulatorEvalProjectMonitorApi { SingleResponse selectRegulatorMonitorStat(); + SingleResponse selectRegulatorSurveyStat(); + PageResponse realtimePage(RegulatorEvalProjectMonitorRealtimePageQuery query); } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectCO.java index 177fca1..00c749c 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectCO.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectCO.java @@ -72,6 +72,9 @@ public class EvalProjectCO { @ApiModelProperty("项目节点完成进度") private String projectNode; + @ApiModelProperty("人员打卡状态:NOT_CLOCKED_IN未打卡 NOT_ALL_PRESENT人员未到齐 NORMAL正常") + private String clockInStatus; + @ApiModelProperty(value = "项目归档:1归档 0未归档", example = "0") private Integer archiveFlag; diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/regulator/RegulatorEvalProjectSurveyStatCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/regulator/RegulatorEvalProjectSurveyStatCO.java new file mode 100644 index 0000000..4b23ffe --- /dev/null +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/regulator/RegulatorEvalProjectSurveyStatCO.java @@ -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; +} diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/ClockInStatusEnum.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/ClockInStatusEnum.java new file mode 100644 index 0000000..93c6e92 --- /dev/null +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/ClockInStatusEnum.java @@ -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; + } +} diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/ProjectProcessWaringStatusEnum.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/ProjectProcessWaringStatusEnum.java new file mode 100644 index 0000000..a24da92 --- /dev/null +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/ProjectProcessWaringStatusEnum.java @@ -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; +} diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/EvalProjectEntity.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/EvalProjectEntity.java index ce2e008..7e95a4b 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/EvalProjectEntity.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/EvalProjectEntity.java @@ -28,6 +28,8 @@ public class EvalProjectEntity { private String projectLeaderName; /** 项目节点完成进度 */ private String projectNode; + /** 人员打卡状态:NOT_CLOCKED_IN未打卡 NOT_ALL_PRESENT人员未到齐 NORMAL正常 */ + private String clockInStatus; /** 1归档 0未归档 */ private Integer archiveFlag; /** 是否法定项目 1是 0否 */ diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/EvalProjectDO.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/EvalProjectDO.java index 2bcc1fb..1248d78 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/EvalProjectDO.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/EvalProjectDO.java @@ -29,6 +29,8 @@ public class EvalProjectDO { private String participantsJson; private String projectLeaderName; private String projectNode; + /** 人员打卡状态:NOT_CLOCKED_IN未打卡 NOT_ALL_PRESENT人员未到齐 NORMAL正常 */ + private String clockInStatus; private Integer archiveFlag; /** 是否法定项目 1是 0否 */ private Boolean isStatutory; diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/EvalProjectMapper.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/EvalProjectMapper.java index 3270063..3062af5 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/EvalProjectMapper.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/EvalProjectMapper.java @@ -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.regulator.RegulatorEvalProjectMonitorPageCO; 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.domain.query.EvalProjectQuery; import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectDO; @@ -39,6 +40,11 @@ public interface EvalProjectMapper extends BaseMapper { */ RegulatorEvalProjectMonitorStatCO selectRegulatorMonitorStat(); + /** + * 监管端-项目踏勘监管统计(未删除且法定项目,告知书归档+人员打卡) + */ + RegulatorEvalProjectSurveyStatCO selectRegulatorSurveyStat(); + /** * 监管端-安评项目实时监控分页(未删除且法定项目,关联 org_info 获取评价机构名称) */ diff --git a/safety-eval-infrastructure/src/main/resources/mapper/EvalProjectMapper.xml b/safety-eval-infrastructure/src/main/resources/mapper/EvalProjectMapper.xml index b307d86..cdf5a97 100644 --- a/safety-eval-infrastructure/src/main/resources/mapper/EvalProjectMapper.xml +++ b/safety-eval-infrastructure/src/main/resources/mapper/EvalProjectMapper.xml @@ -93,6 +93,27 @@ AND is_statutory = 1 + + +