luotaiqian 2026-07-21 09:25:41 +08:00
parent ca3c003587
commit b018e2e71c
10 changed files with 156 additions and 0 deletions

View File

@ -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;
-- =============================================

View File

@ -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<QualOnSiteReviewStatisticsCo> statistics(@RequestParam(required = false) Long orgId) {
return SingleResponse.of(qualOnSiteReviewServiceI.statistics(orgId));
}
@GetMapping("/{id}")
@ApiOperation("查询资质现场核查详情页面")
public SingleResponse<QualOnSiteReviewCo> getInfo(@PathVariable("id") Long id) {

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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;
}

View File

@ -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<QualOnSiteReviewDO> {
List<QualOnSiteReviewOrgCo> orgPage(@Param("page") Page<QualOnSiteReviewOrgCo> page,
@Param("query") QualOnSiteReviewOrgPageQry query);
/**
* SQL
*
* @param orgId ID
* @return
*/
QualOnSiteReviewStatisticsCo statistics(@Param("orgId") Long orgId);
}

View File

@ -105,4 +105,21 @@
</if>
order by review.id desc
</select>
<!-- 资质现场核查统计单条SQL聚合返回全部指标 -->
<select id="statistics"
resultType="org.qinan.safetyeval.client.review.response.QualOnSiteReviewStatisticsCo">
select
count(*) as totalCount,
SUM(CASE WHEN YEAR(create_time) = YEAR(CURDATE()) THEN 1 ELSE 0 END) AS annualCumulativeCount,
SUM(CASE WHEN status IN ('AGENCY_PENDING_CONFIRMATION', 'AGENCY_CONFIRMED') THEN 1 ELSE 0 END) AS pendingReviewCount,
SUM(CASE WHEN review_date_start BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 30 DAY) THEN 1 ELSE 0 END) AS nextThirtyDaysCount,
SUM(CASE WHEN status = 'REVIEW_PASSED' THEN 1 ELSE 0 END) AS completedCount,
SUM(CASE WHEN status = 'REVIEW_FAILED' THEN 1 ELSE 0 END) AS archivedCount
from qual_on_site_review
where delete_enum = 'false'
<if test="orgId != null">
and org_id = #{orgId}
</if>
</select>
</mapper>