diff --git a/docs/db/phase2/init-phase2.sql b/docs/db/phase2/init-phase2.sql index eb33381..e9cc7d8 100644 --- a/docs/db/phase2/init-phase2.sql +++ b/docs/db/phase2/init-phase2.sql @@ -772,6 +772,55 @@ create table `eval_sign_record` ( ) engine=innodb default charset=utf8mb4 collate=utf8mb4_0900_ai_ci comment='项目签字记录表'; +CREATE TABLE IF NOT EXISTS `qual_on_site_review` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键', + `biz_type` varchar(64) DEFAULT NULL COMMENT '资质类型:add 新增 ,change:变更', + `biz_id` bigint DEFAULT NULL COMMENT '业务id', + `org_id` bigint NOT NULL COMMENT '受审查机构ID (关联机构表)', + `review_date_start` datetime NOT NULL COMMENT '现场审查开始时间', + `review_location` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '审查地点', + `review_members` varchar(512) DEFAULT NULL COMMENT '审查组成员名单', + `material_requirements` text COMMENT '材料准备要求', + `supervisor_contact` varchar(64) DEFAULT NULL COMMENT '监管联系人姓名', + `contact_phone` varchar(32) DEFAULT NULL COMMENT '监管联系电话', + `status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '1' COMMENT '现场审查状态(AGENCY_PENDING_CONFIRMATION机构待确认、AGENCY_CONFIRMED机构已确认、REVIEW_PASSED核查通过、REVIEW_FAILED核查不通过)', + `review_opinion` varchar(256) DEFAULT NULL COMMENT '核查意见', + `delete_enum` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '删除标识true false', + `remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '备注', + `create_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建人姓名', + `update_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '更新人姓名', + `tenant_id` bigint DEFAULT NULL COMMENT '租户id', + `version` int DEFAULT NULL COMMENT '版本', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_time` datetime DEFAULT NULL COMMENT '修改时间', + `create_id` bigint DEFAULT NULL COMMENT '创建人id', + `update_id` bigint DEFAULT NULL COMMENT '修改人id', + `env` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '环境', + PRIMARY KEY (`id`), + KEY `idx_review_date_start` (`review_date_start`), + KEY `idx_org_id` (`org_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='资质现场核查'; + +CREATE TABLE IF NOT EXISTS `qual_on_site_review_file` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键', + `qual_on_site_review_id` bigint NOT NULL COMMENT '资质现场核查id', + `file_name` varchar(128) NOT NULL COMMENT '文件名称', + `file_url` varchar(1024) NOT NULL COMMENT '文件url', + `delete_enum` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '删除标识true false', + `remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '备注', + `create_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建人姓名', + `update_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '更新人姓名', + `tenant_id` bigint DEFAULT NULL COMMENT '租户id', + `version` int DEFAULT NULL COMMENT '版本', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_time` datetime DEFAULT NULL COMMENT '修改时间', + `create_id` bigint DEFAULT NULL COMMENT '创建人id', + `update_id` bigint DEFAULT NULL COMMENT '修改人id', + `env` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '环境', + PRIMARY KEY (`id`), + KEY `idx_qual_on_site_review_id` (`qual_on_site_review_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='资质现场核查-文件信息'; + set foreign_key_checks = 1; -- ============================================= diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/QualOnSiteReviewController.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/QualOnSiteReviewController.java index 9a3a2dc..7af4556 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/QualOnSiteReviewController.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/QualOnSiteReviewController.java @@ -16,6 +16,7 @@ import org.qinan.safetyeval.client.review.request.QualOnSiteReviewUpdateCmd; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewCo; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewMonitorCo; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewOrgCo; +import org.qinan.safetyeval.client.review.response.QualOnSiteReviewStatisticsCo; import org.qinan.safetyeval.domain.constant.QualOnSiteReviewStatusEnum; import org.qinan.safetyeval.infrastructure.adapter.ThreadLocalUserInfoAdapter; import org.springframework.validation.annotation.Validated; @@ -59,6 +60,12 @@ public class QualOnSiteReviewController implements Serializable { return qualOnSiteReviewServiceI.orgPage(qry); } + @GetMapping("/statistics") + @ApiOperation("资质现场核查统计") + public SingleResponse statistics(@RequestParam(required = false) Long orgId) { + return SingleResponse.of(qualOnSiteReviewServiceI.statistics(orgId)); + } + @GetMapping("/{id}") @ApiOperation("查询资质现场核查详情页面") public SingleResponse getInfo(@PathVariable("id") Long id) { diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/executor/query/QualOnSiteReviewPageQueryExe.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/executor/query/QualOnSiteReviewPageQueryExe.java index c78b1fa..944d30d 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/executor/query/QualOnSiteReviewPageQueryExe.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/executor/query/QualOnSiteReviewPageQueryExe.java @@ -9,6 +9,7 @@ import org.qinan.safetyeval.client.review.request.QualOnSiteReviewPageQry; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewCo; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewMonitorCo; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewOrgCo; +import org.qinan.safetyeval.client.review.response.QualOnSiteReviewStatisticsCo; import org.qinan.safetyeval.infrastructure.persistence.mapper.QualOnSiteReviewMapper; import org.qinan.safetyeval.infrastructure.persistence.queryservice.QualOnSiteReviewQueryService; import org.springframework.stereotype.Component; @@ -62,4 +63,14 @@ public class QualOnSiteReviewPageQueryExe { return org.qinan.safetyeval.client.dto.PageResponse.of(list, page.getTotal()); } + /** + * 资质现场核查统计 + * + * @param orgId 机构ID(为空时统计全部) + * @return 统计结果 + */ + public QualOnSiteReviewStatisticsCo executeStatistics(Long orgId) { + return qualOnSiteReviewMapper.statistics(orgId); + } + } diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/service/QualOnSiteReviewServiceI.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/service/QualOnSiteReviewServiceI.java index c3b023b..7009e7b 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/service/QualOnSiteReviewServiceI.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/service/QualOnSiteReviewServiceI.java @@ -10,6 +10,7 @@ import org.qinan.safetyeval.client.review.request.QualOnSiteReviewUpdateCmd; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewCo; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewMonitorCo; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewOrgCo; +import org.qinan.safetyeval.client.review.response.QualOnSiteReviewStatisticsCo; /** * 资质现场核查 @@ -90,5 +91,13 @@ public interface QualOnSiteReviewServiceI { */ boolean uploadReviewResult(QualOnSiteReviewResultUploadCmd qualOnSiteReviewResultUploadCmd); + /** + * 资质现场核查统计 + * + * @param orgId 机构ID(为空时统计全部) + * @return 统计结果 + */ + QualOnSiteReviewStatisticsCo statistics(Long orgId); + } diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/service/impl/QualOnSiteReviewServiceImpl.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/service/impl/QualOnSiteReviewServiceImpl.java index 869854c..d4f607b 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/service/impl/QualOnSiteReviewServiceImpl.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/service/impl/QualOnSiteReviewServiceImpl.java @@ -17,6 +17,7 @@ import org.qinan.safetyeval.client.review.request.QualOnSiteReviewUpdateCmd; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewCo; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewMonitorCo; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewOrgCo; +import org.qinan.safetyeval.client.review.response.QualOnSiteReviewStatisticsCo; import org.springframework.stereotype.Service; /** @@ -80,4 +81,9 @@ public class QualOnSiteReviewServiceImpl implements QualOnSiteReviewServiceI { return qualOnSiteReviewUpdateCommandExe.execute(qualOnSiteReviewResultUploadCmd); } + @Override + public QualOnSiteReviewStatisticsCo statistics(Long orgId) { + return qualOnSiteReviewPageQueryExe.executeStatistics(orgId); + } + } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewAddCmd.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewAddCmd.java index c972875..2f40f70 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewAddCmd.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewAddCmd.java @@ -25,6 +25,12 @@ public class QualOnSiteReviewAddCmd implements Serializable { @ApiModelProperty(value = "资质类型:add 新增 ,change:变更") @Size(max = 64, message = "资质类型不能超过64个字符") private String bizType; + /** + * 受审查机构ID (关联机构表) + */ + @ApiModelProperty(value = "受审查机构ID (关联机构表)", required = true) + @NotNull(message = "受审查机构ID不能为空") + private Long orgId; /** * 业务id */ diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewCo.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewCo.java index fb2165d..f1c6611 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewCo.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewCo.java @@ -23,6 +23,12 @@ public class QualOnSiteReviewCo extends ClientObject { */ @ApiModelProperty(value = "资质类型:add 新增 ,change:变更") private String bizType; + /** + * 受审查机构ID (关联机构表) + */ + @ApiModelProperty(value = "受审查机构ID (关联机构表)") + @JsonFormat(shape = JsonFormat.Shape.STRING) + private Long orgId; /** * 业务id */ diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewStatisticsCo.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewStatisticsCo.java new file mode 100644 index 0000000..36d0179 --- /dev/null +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewStatisticsCo.java @@ -0,0 +1,36 @@ +package org.qinan.safetyeval.client.review.response; + +import com.alibaba.cola.dto.ClientObject; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 资质现场核查统计Co + * + * @Author: ltq + * @Date: 2026-07-21 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class QualOnSiteReviewStatisticsCo extends ClientObject { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "通知总数") + private Integer totalCount; + + @ApiModelProperty(value = "本年度累计") + private Integer annualCumulativeCount; + + @ApiModelProperty(value = "待开展审查") + private Integer pendingReviewCount; + + @ApiModelProperty(value = "未来30日内") + private Integer nextThirtyDaysCount; + + @ApiModelProperty(value = "已完成") + private Integer completedCount; + + @ApiModelProperty(value = "审查结果已归档") + private Integer archivedCount; +} diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/persistence/mapper/QualOnSiteReviewMapper.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/persistence/mapper/QualOnSiteReviewMapper.java index dcc335a..10d12c2 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/persistence/mapper/QualOnSiteReviewMapper.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/persistence/mapper/QualOnSiteReviewMapper.java @@ -9,6 +9,7 @@ import org.qinan.safetyeval.client.review.request.QualOnSiteReviewOrgPageQry; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewCo; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewMonitorCo; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewOrgCo; +import org.qinan.safetyeval.client.review.response.QualOnSiteReviewStatisticsCo; import org.qinan.safetyeval.infrastructure.persistence.domainobject.QualOnSiteReviewDO; import java.util.List; @@ -27,4 +28,12 @@ public interface QualOnSiteReviewMapper extends BaseMapper { List orgPage(@Param("page") Page page, @Param("query") QualOnSiteReviewOrgPageQry query); + + /** + * 资质现场核查统计(单条SQL聚合) + * + * @param orgId 机构ID(为空时统计全部) + * @return 统计结果 + */ + QualOnSiteReviewStatisticsCo statistics(@Param("orgId") Long orgId); } diff --git a/safety-eval-infrastructure/src/main/resources/mapper/QualOnSiteReviewMapper.xml b/safety-eval-infrastructure/src/main/resources/mapper/QualOnSiteReviewMapper.xml index 6416c03..3a108fe 100644 --- a/safety-eval-infrastructure/src/main/resources/mapper/QualOnSiteReviewMapper.xml +++ b/safety-eval-infrastructure/src/main/resources/mapper/QualOnSiteReviewMapper.xml @@ -105,4 +105,21 @@ order by review.id desc + + + \ No newline at end of file