Browse Source

执法端-计划

dev-V1.0.1
庄锐波 5 months ago
parent
commit
2087c4201e
  1. 28
      doc/庄锐波-工作周报.md
  2. 210
      script/sql/zfjd-refactoring-v1/013-计划任务表设计.sql
  3. 32
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/report/RegistrationController.java
  4. 2
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/EnforcementRegistrationVo.java
  5. 81
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/report/RegistrationExportVo.java
  6. 8
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementRegistrationMapper.java
  7. 6
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/IEnforcementRegistrationReport.java
  8. 62
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/impl/EnforcementRegistrationReportImpl.java

28
doc/庄锐波-工作周报.md

@ -157,4 +157,30 @@
**下周工作:**
* (执法端与企业端)计划,预约,任务,预告的功能开发及自测,预计完成时间6-5
* 预计6-8号可以由测试人员进行功能测试.
* 预计6-8号可以由测试人员进行功能测试.
## 时间:2026-06-01 至 2026-06-07
**本周工作:**
* (执法端与企业端)计划,预约,任务,预告的功能开发及自测,已基本完成,下周可以安排测试
**下周工作:**
* 迁移一期中的以下功能,预计时间需要2周左右
```text
执法监督码
├── [❌]统计查询
│ ├── [❌]行政执法
│ │ ├── [❌]涉企执法情况
│ │ ├── [❌]企业受检次数
│ │ ├── [❌]企业信息情况
│ │ ├── [❌]执法单位情况
│ │ ├── [❌]执法投诉情况
│ │ ├── [❌]检查计划情况
│ ├── [❌]非行政执法
│ │ ├── [❌]非行政执法
├── [❌]工作报表
├── [❌]综合管理
│ ├── [❌]送码入企
│ ├── [❌]送码入企查询
```
* 可能需要分部分时间处理计划,预约,任务,预告的bug和网络策略通后进行部署方面的工作,上边的迁移工作时间可能会延长.

210
script/sql/zfjd-refactoring-v1/013-计划任务表设计.sql

@ -6,14 +6,16 @@ CREATE TABLE `efcode_cp_plan`
`plan_date` datetime NOT NULL COMMENT '计划执行日期(如 2025-05-08)',
`plan_time` tinyint NOT NULL COMMENT '执行时段:1=上午,2=下午,3=其他',
`plan_actual_date` datetime NOT NULL COMMENT '经过预约后最终的计划执行日期(如 2025-05-08)',
`plan_actual_time` tinyint NOT NULL COMMENT '经过预约后最终的执行时段:1=上午,2=下午,3=其他',
`plan_source_date` datetime NULL COMMENT '原始日期',
`plan_source_time` tinyint NULL COMMENT '原始执行时段:1=上午,2=下午,3=其他',
`enforce_content` varchar(1000) NOT NULL COMMENT '执法事项(最多1000字)',
`enterprise_name` varchar(200) NOT NULL COMMENT '被检查企业/机构名称',
`enterprise_number` varchar(200) NOT NULL COMMENT '被检查企业/机构信用代码',
`enterprise_id` varchar(200) NOT NULL COMMENT '被检查企业/机构Id',
`contact_person` varchar(100) NULL COMMENT '企业联系人',
`contact_phone` varchar(200) NULL COMMENT '企业联系电话',
`enforce_user_names` varchar(512) NOT NULL COMMENT '执法人员姓名(多个逗号分隔)',
`enforce_user_ids` varchar(512) NOT NULL COMMENT '执法人员姓名(多个逗号分隔)',
@ -76,35 +78,37 @@ CREATE TABLE `efcode_cp_plan_users`
CREATE TABLE `efcode_cp_reserve`
(
`id` varchar(50) NOT NULL COMMENT '主键ID' primary key,
`plan_id` varchar(50) NOT NULL COMMENT '计划ID',
`plan_group_id` varchar(50) NOT NULL COMMENT '计划分组ID:相同的表示预约同一个计划',
`reserve_time` datetime NOT NULL COMMENT '预约时间',
`id` varchar(50) NOT NULL COMMENT '主键ID' primary key,
`plan_id` varchar(50) NOT NULL COMMENT '计划ID',
`plan_group_id` varchar(50) NOT NULL COMMENT '计划分组ID:相同的表示预约同一个计划',
`reserve_time` datetime NOT NULL COMMENT '预约时间',
`op_status` tinyint NOT NULL COMMENT '操作状态' DEFAULT 3 COMMENT '操作状态:1=同意,2=拒绝,3=待确认,4=超期取消',
`op_order` int NOT NULL COMMENT '联合时用户的操作顺序',
`op_time` datetime NULL COMMENT '联合时用户的操作时间',
`op_message` varchar(500) NOT NULL COMMENT '联合时用户输入的操作消息',
`op_set_date` datetime NOT NULL COMMENT '联合时用户选择的操作时间',
`op_set_time` tinyint NOT NULL COMMENT '执行时段:1=上午,2=下午,3=其他',
`op_status` tinyint NOT NULL COMMENT '操作状态' DEFAULT 3 COMMENT '操作状态:1=同意,2=拒绝,3=待确认,4=超期取消',
`op_order` int NOT NULL COMMENT '联合时用户的操作顺序',
`op_time` datetime NULL COMMENT '联合时用户的操作时间',
`op_message` varchar(500) NULL COMMENT '联合时用户输入的操作消息',
`warring_message` varchar(500) NULL COMMENT '警告的消息',
`warring_is_pass` tinyint NULL COMMENT '警告的消息是否被确认:1=已确认,0=为确认',
`op_set_date` datetime NOT NULL COMMENT '联合时用户选择的操作时间',
`op_set_time` tinyint NOT NULL COMMENT '执行时段:1=上午,2=下午,3=其他',
`res_from` tinyint NOT NULL COMMENT '来自:系统匹配=1,手动匹配=0',
`sender_id` varchar(50) NULL DEFAULT '' COMMENT '发送者用户ID',
`receiver_id` varchar(50) NULL DEFAULT '' COMMENT '接收者用户ID',
`res_from` tinyint NOT NULL COMMENT '来自:系统匹配=1,手动匹配=0',
`sender_id` varchar(50) NULL DEFAULT '' COMMENT '发送者用户ID',
`receiver_id` varchar(50) NULL DEFAULT '' COMMENT '接收者用户ID',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_dept` varchar(64) DEFAULT NULL COMMENT '创建人部门',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_dept` varchar(64) DEFAULT NULL COMMENT '创建人部门',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) comment '行政执法检查计划-预约表' row_format = DYNAMIC;
CREATE TABLE `efcode_cp_notice`
(
`id` varchar(50) NOT NULL COMMENT '主键ID',
`id` varchar(50) NOT NULL COMMENT '主键ID' primary key,
`plan_id` bigint DEFAULT NULL COMMENT '导入的计划ID(关联执法计划表)',
`enforce_date` varchar(16) NOT NULL COMMENT '执法日期',
`enforce_date` datetime NOT NULL COMMENT '执法日期',
`enforce_time` tinyint NOT NULL COMMENT '执法时段:1=上午,2=下午,3=其他',
`bureau_dept_id` varchar(50) NOT NULL COMMENT '执法单位ID',
@ -115,14 +119,15 @@ CREATE TABLE `efcode_cp_notice`
`dept_name` varchar(100) NOT NULL COMMENT '市认证部门名称',
`enforce_user_names` varchar(512) NOT NULL COMMENT '执法人员姓名(多个逗号分隔)',
`enforce_user_ids` varchar(512) NOT NULL COMMENT '执法人员姓名(多个逗号分隔)',
`enforce_user_ids` varchar(512) NOT NULL COMMENT '执法人员ID(多个逗号分隔)',
`enforce_user_tels` varchar(512) NULL DEFAULT '' COMMENT '执法人员电话(多个逗号分隔)',
`enforce_user_codes` varchar(512) NOT NULL COMMENT '执法人员证件编号(多个逗号分隔)',
`enterprise_id` varchar(50) NOT NULL COMMENT '被检查企业ID',
`enterprise_name` varchar(200) NOT NULL COMMENT '被检查企业名称',
`enterprise_number` varchar(32) DEFAULT NULL COMMENT '企业统一社会信用代码',
`contact_person` varchar(100) NOT NULL COMMENT '企业联系人',
`contact_person` varchar(100) NULL COMMENT '企业联系人',
`contact_phone` varchar(200) NULL COMMENT '企业联系电话',
`enforce_content` varchar(1000) NOT NULL COMMENT '执法事项',
@ -135,11 +140,7 @@ CREATE TABLE `efcode_cp_notice`
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_delete` tinyint NOT NULL DEFAULT 0 COMMENT '是否删除:0=否,1=是',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_dept_id` (`dept_id`),
KEY `idx_enterprise_id` (`enterprise_id`),
KEY `idx_enterprise_number` (`enterprise_number`)
`remark` varchar(500) DEFAULT NULL COMMENT '备注'
) comment '行政执法检查计划-预告表' row_format = DYNAMIC;
CREATE TABLE `efcode_cp_notice_users`
@ -158,18 +159,21 @@ CREATE TABLE `efcode_cp_notice_users`
CREATE TABLE `efcode_cp_notice_message`
(
`id` varchar(50) NOT NULL COMMENT '主键ID' primary key,
`notice_id` varchar(50) NOT NULL COMMENT '预告ID',
`user_id` varchar(50) NOT NULL COMMENT '用户ID',
`user_name` varchar(100) NOT NULL COMMENT '用户名称',
`msg_from` tinyint NOT NULL COMMENT '来自:企业=1,执法单位=0',
`message` varchar(1000) NOT NULL COMMENT '消息内容',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_dept` varchar(64) DEFAULT NULL COMMENT '创建人部门',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_delete` tinyint NOT NULL DEFAULT 0 COMMENT '是否删除:0=否,1=是'
`id` varchar(50) NOT NULL COMMENT '主键ID' primary key,
`notice_id` varchar(50) NOT NULL COMMENT '预告ID',
`user_id` varchar(50) NOT NULL COMMENT '用户ID',
`user_name` varchar(100) NOT NULL COMMENT '用户名称',
`msg_from` tinyint NOT NULL COMMENT '来自:企业=1,执法单位=0',
`msg_type` tinyint NULL DEFAULT 1 COMMENT '消息类型:1=用户消息,2=系统提示',
`bureau_dept_viewed` tinyint NULL DEFAULT 0 COMMENT '执法部门是否已读:已读=1,未读=0',
`enterprise_viewed` tinyint NULL DEFAULT 0 COMMENT '企业是否已读:已读=1,未读=0',
`message` varchar(1000) NOT NULL COMMENT '消息内容',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_dept` varchar(64) DEFAULT NULL COMMENT '创建人部门',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_delete` tinyint NOT NULL DEFAULT 0 COMMENT '是否删除:0=否,1=是'
) comment '行政执法检查计划-预告交流表' row_format = DYNAMIC;
CREATE TABLE `efcode_cp_setting`
@ -205,26 +209,104 @@ CREATE TABLE `efcode_cp_log`
/*初始化数据*/
-- INSERT INTO `efcode_cp_setting` (`id`, `setting_name`, `setting_value`, `remark`, `create_by`, `create_dept`)
-- VALUES ('CP_SETTING_SUBMIT_DEADLINE', '下阶段计划提交最晚时间', '26', '每月几号前需提交下阶段计划<=', '0', '0'),
-- ('CP_SETTING_AUTO_MATCH_START', '系统自动推荐匹配开始时间', '27', '系统自动推荐匹配的开始时间(号)=', '0', '0'),
-- ('CP_SETTING_RESERVE_CANCEL_DURATION', '预约自动取消时长', '7', '发起预约后,如果多长时间没有处理,则自动取消',
-- '0', '0'),
-- ('CP_SETTING_MANUAL_MATCH_DAYS', '手工匹配距计划开始天数', '3', '手工匹配距离计划开始的天数>=', '0', '0'),
-- ('CP_MAX_UNION_UNIT', '单次联合单位最大数量', '3', '单次联合单位最大数量<=3', '0', '0'),
-- ('CP_MAX_INNER_UNIT_AC_PERSON_NUM', '单位内部单次计划最多参与人数', '3', '单位内部单次计划最多参与人数<=3', '0',
-- '0');
--
-- /*创建计划任务*/
-- INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by,
-- create_time, remark)
-- VALUES ('计划自动匹配预约',
-- 'DEFAULT',
-- 'cpPlanAutoMatchJob.execute()',
-- '0 0 2 * * ?',
-- '3',
-- '1',
-- '0',
-- 'admin',
-- NOW(),
-- '每天凌晨2点扫描待预约计划并自动匹配生成预约记录');
INSERT INTO `efcode_cp_setting` (`id`, `setting_name`, `setting_value`, `remark`, `create_by`, `create_dept`)
VALUES ('CP_SETTING_SUBMIT_DEADLINE', '下阶段计划提交最晚时间', '26', '每月几号前需提交下阶段计划<=26号', '0', '0'),
('CP_SETTING_AUTO_MATCH_START', '系统自动推荐匹配开始时间', '27', '系统自动推荐匹配的开始时间(号)=27号', '0', '0'),
('CP_SETTING_RESERVE_CANCEL_DURATION', '预约自动取消时长', '14', '发起预约后,如果多长时间没有处理,则自动取消,14天',
'0', '0'),
('CP_SETTING_MANUAL_MATCH_DAYS', '手工匹配距计划开始天数', '3', '手工匹配距离计划开始的天数>=3天,同时,距离计划开始的第3天,系统自动去掉这些计划的预约,同时转化为任务', '0', '0'),
('CP_MAX_UNION_UNIT', '单次联合单位最大数量', '3', '单次联合单位最大数量<=3个执法单位', '0', '0'),
('CP_MAX_INNER_UNIT_AC_PERSON_NUM', '单位内部单次计划最多参与人数', '3', '单位内部单次计划最多参与人数<=3人', '0',
'0'),
('CP_SETTING_SYSTEM_MATCH_WEEKS', '系统匹配预约周数范围', '1', '系统匹配时向后查找的周数范围1周:可选1,2,3,4周',
'0', '0');
/*创建计划任务*/
DELETE
FROM sys_job
WHERE invoke_target = 'cpPlanAutoMatchJob.execute()';
INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by,
create_time, remark)
VALUES ('计划自动匹配预约',
'DEFAULT',
'cpPlanAutoMatchJob.execute()',
'0 0 2 * * ?',
'3',
'1',
'0',
'admin',
NOW(),
'每天凌晨2点扫描待预约计划并自动匹配生成预约记录');
DELETE
FROM sys_job
WHERE invoke_target = 'cpReserveOverdueCancelJob.execute()';
INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by,
create_time, remark)
VALUES ('预约超期自动取消',
'DEFAULT',
'cpReserveOverdueCancelJob.execute()',
'0 0 1 * * ?',
'3',
'1',
'0',
'admin',
NOW(),
'每天凌晨1点扫描超期未处理的预约记录并自动取消');
DELETE
FROM sys_job
WHERE invoke_target = 'cpPlanDeadlineGenTaskJob.execute()';
INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by,
create_time, remark)
VALUES ('计划到期自动生成任务',
'DEFAULT',
'cpPlanDeadlineGenTaskJob.execute()',
'0 0 2 * * ?',
'3',
'1',
'0',
'admin',
NOW(),
'每天凌晨2点扫描即将到期的计划,取消剩余未处理预约并自动生成任务');
DELETE
FROM sys_job
WHERE invoke_target = 'cpNoticeAutoCompleteJob.execute()';
INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by,
create_time, remark)
VALUES ('预告到期自动标记已执行',
'DEFAULT',
'cpNoticeAutoCompleteJob.execute()',
'0 30 0 * * ?',
'3',
'1',
'0',
'admin',
NOW(),
'每天凌晨0点30分扫描执法日期已过期的已发布预告,自动标记为已执行');
delete
from efcode_cp_log
where create_time > '2026-01-01';
delete
from efcode_cp_notice
where create_time > '2026-01-01';
delete
from efcode_cp_notice_message
where create_time > '2026-01-01';
delete
from efcode_cp_notice_users
where create_time > '2026-01-01';
delete
from efcode_cp_plan
where create_time > '2026-01-01';
delete
from efcode_cp_plan_users
where create_time > '2026-01-01';
delete
from efcode_cp_reserve
where create_time > '2026-01-01';
delete
from efcode_cp_task
where create_time > '2026-01-01';

32
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/report/RegistrationController.java

@ -4,6 +4,7 @@ import com.zdxt.enforcementcode.domain.bo.EnforcementRegistrationBo;
import com.zdxt.enforcementcode.domain.vo.EnforcementRegistrationVo;
import com.zdxt.enforcementcode.domain.vo.report.ChartDataVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationAnalysisVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationExportVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationStatisticsVo;
import com.zdxt.enforcementcode.report.IEnforcementRegistrationReport;
import jakarta.servlet.http.HttpServletResponse;
@ -52,12 +53,23 @@ public class RegistrationController {
}
/**
* 接口3:涉企执法统计列表导出
* 接口3:涉企执法统计列表导出(旧系统格式,10列)
*/
@PostMapping("/exportList")
public void exportList(EnforcementRegistrationBo bo, HttpServletResponse response) {
List<EnforcementRegistrationVo> list = registrationReport.listAll(bo);
ExcelUtil.exportExcel(list, "涉企执法统计", EnforcementRegistrationVo.class, response);
try {
List<RegistrationExportVo> list = registrationReport.exportList(bo);
ExcelUtil.exportExcel(list, "涉企执法统计", RegistrationExportVo.class, response);
} catch (Exception e) {
log.error("导出涉企执法统计Excel异常", e);
// 重置response,避免content-type冲突
response.reset();
response.setContentType("application/json; charset=utf-8");
try {
response.getWriter().write("{\"code\":500,\"msg\":\"导出失败: " + e.getMessage() + "\"}");
} catch (Exception ignored) {
}
}
}
/**
@ -97,7 +109,17 @@ public class RegistrationController {
*/
@PostMapping("/exportAnalysis")
public void exportAnalysis(EnforcementRegistrationBo bo, HttpServletResponse response) {
List<RegistrationAnalysisVo> list = registrationReport.analysisAll(bo);
ExcelUtil.exportExcel(list, "执法分析", RegistrationAnalysisVo.class, response);
try {
List<RegistrationAnalysisVo> list = registrationReport.analysisAll(bo);
ExcelUtil.exportExcel(list, "执法分析", RegistrationAnalysisVo.class, response);
} catch (Exception e) {
log.error("导出执法分析Excel异常", e);
response.reset();
response.setContentType("application/json; charset=utf-8");
try {
response.getWriter().write("{\"code\":500,\"msg\":\"导出失败: " + e.getMessage() + "\"}");
} catch (Exception ignored) {
}
}
}
}

2
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/EnforcementRegistrationVo.java

@ -294,7 +294,7 @@ public class EnforcementRegistrationVo implements Serializable {
* 执法类别(新)
*/
@ExcelProperty(value = "执法类别", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "新=")
@ExcelDictFormat(dictType = "law_enforce_category")
private String lawEnforceCategory;
/**

81
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/report/RegistrationExportVo.java

@ -0,0 +1,81 @@
package com.zdxt.enforcementcode.domain.vo.report;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 涉企执法统计-导出VO(与旧系统格式一致,共10列)
*
* @author zdxt
*/
@Data
@ExcelIgnoreUnannotated
public class RegistrationExportVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 单位名称
*/
@ExcelProperty(value = "单位名称")
private String bureauDeptName;
/**
* 企业名称
*/
@ExcelProperty(value = "企业名称")
private String enterpriseName;
/**
* 统一信用码
*/
@ExcelProperty(value = "统一信用码")
private String enterpriseNumber;
/**
* 企业注册地
*/
@ExcelProperty(value = "企业注册地")
private String district;
/**
* 企业所属街道
*/
@ExcelProperty(value = "企业所属街道")
private String street;
/**
* 入企人员
*/
@ExcelProperty(value = "入企人员")
private String lawEnforcer;
/**
* 入企时间
*/
@ExcelProperty(value = "入企时间")
private String enforcementTime;
/**
* 入企事由
*/
@ExcelProperty(value = "入企事由")
private String lawEnforceCategory;
/**
* 入企事项
*/
@ExcelProperty(value = "入企事项")
private String lawEnforcementItemText;
/**
* 活动依据
*/
@ExcelProperty(value = "活动依据")
private String lawEnforcementBasisText;
}

8
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementRegistrationMapper.java

@ -3,6 +3,7 @@ package com.zdxt.enforcementcode.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zdxt.enforcementcode.common.annotation.EfcodeDataFilter;
import com.zdxt.enforcementcode.domain.EnforcementRegistration;
import com.zdxt.enforcementcode.domain.bo.EnforcementRegistrationBo;
import com.zdxt.enforcementcode.domain.bo.EnforcementRegistrationQueryBo;
@ -85,6 +86,7 @@ public interface EnforcementRegistrationMapper extends BaseMapperPlus<Enforcemen
/**
* 报表-统计指标查询(COUNT聚合)
*/
@EfcodeDataFilter
RegistrationStatisticsVo selectReportStatistics(@Param("bo") EnforcementRegistrationBo bo,
@Param("dataFilter") String dataFilter,
@Param("checkCategoryCode") String checkCategoryCode);
@ -92,6 +94,7 @@ public interface EnforcementRegistrationMapper extends BaseMapperPlus<Enforcemen
/**
* 报表-分页列表查询
*/
@EfcodeDataFilter
IPage<EnforcementRegistrationVo> selectReportPage(@Param("page") Page<EnforcementRegistrationVo> page,
@Param("bo") EnforcementRegistrationBo bo,
@Param("dataFilter") String dataFilter);
@ -99,29 +102,34 @@ public interface EnforcementRegistrationMapper extends BaseMapperPlus<Enforcemen
/**
* 报表-全量列表查询(用于统计/导出)
*/
@EfcodeDataFilter
List<EnforcementRegistration> selectReportAll(@Param("bo") EnforcementRegistrationBo bo,
@Param("dataFilter") String dataFilter);
/**
* 报表-执法类别图表(GROUP BY law_enforce_category)
*/
@EfcodeDataFilter
List<ChartDataVo> selectReportCategoryChart(@Param("bo") EnforcementRegistrationBo bo,
@Param("dataFilter") String dataFilter);
/**
* 报表-部门排行图表(GROUP BY bureau_dept_id,前10)
*/
@EfcodeDataFilter
List<ChartDataVo> selectReportDeptRankChart(@Param("bo") EnforcementRegistrationBo bo,
@Param("dataFilter") String dataFilter);
/**
* 报表-被检查企业次数排行图表(GROUP BY enterprise_number,前10)
*/
@EfcodeDataFilter
List<ChartDataVo> selectReportEnterpriseRankChart(@Param("bo") EnforcementRegistrationBo bo,
@Param("dataFilter") String dataFilter);
/**
* 报表-执法分析排名(GROUP BY enterprise_number)
* <p>含子查询,不使用注解方式,手动传入 dataFilter
*/
List<RegistrationAnalysisVo> selectReportAnalysisList(@Param("bo") EnforcementRegistrationBo bo,
@Param("dataFilter") String dataFilter);

6
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/IEnforcementRegistrationReport.java

@ -4,6 +4,7 @@ import com.zdxt.enforcementcode.domain.bo.EnforcementRegistrationBo;
import com.zdxt.enforcementcode.domain.vo.EnforcementRegistrationVo;
import com.zdxt.enforcementcode.domain.vo.report.ChartDataVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationAnalysisVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationExportVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationStatisticsVo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -32,6 +33,11 @@ public interface IEnforcementRegistrationReport {
*/
List<EnforcementRegistrationVo> listAll(EnforcementRegistrationBo bo);
/**
* 导出列表(旧系统格式,10列精简)
*/
List<RegistrationExportVo> exportList(EnforcementRegistrationBo bo);
/**
* 执法类别分布(饼图数据)
*/

62
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/impl/EnforcementRegistrationReportImpl.java

@ -7,6 +7,7 @@ import com.zdxt.enforcementcode.domain.bo.EnforcementRegistrationBo;
import com.zdxt.enforcementcode.domain.vo.EnforcementRegistrationVo;
import com.zdxt.enforcementcode.domain.vo.report.ChartDataVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationAnalysisVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationExportVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationStatisticsVo;
import com.zdxt.enforcementcode.mapper.EnforcementRegistrationMapper;
import com.zdxt.enforcementcode.report.IEnforcementRegistrationReport;
@ -40,11 +41,10 @@ public class EnforcementRegistrationReportImpl implements IEnforcementRegistrati
@Override
public RegistrationStatisticsVo statistics(EnforcementRegistrationBo bo) {
String dataFilter = DataFilterUtil.buildFilterSql(true, true);
String checkCategoryCode = StringUtils.isNotBlank(bo.getCheckCategory()) ? bo.getCheckCategory() : "01";
// 单条SQL聚合查询,不加载全量数据
RegistrationStatisticsVo vo = registrationMapper.selectReportStatistics(bo, dataFilter, checkCategoryCode);
// 单条SQL聚合查询,数据权限由 @EfcodeDataFilter 拦截器自动处理
RegistrationStatisticsVo vo = registrationMapper.selectReportStatistics(bo, null, checkCategoryCode);
if (vo == null) {
vo = new RegistrationStatisticsVo();
}
@ -66,25 +66,59 @@ public class EnforcementRegistrationReportImpl implements IEnforcementRegistrati
@Override
public TableDataInfo<EnforcementRegistrationVo> list(EnforcementRegistrationBo bo, PageQuery pageQuery) {
String dataFilter = DataFilterUtil.buildFilterSql(true, true);
// 数据权限由 @EfcodeDataFilter 拦截器自动处理
Page<EnforcementRegistrationVo> page = pageQuery.build();
IPage<EnforcementRegistrationVo> result = registrationMapper.selectReportPage(page, bo, dataFilter);
IPage<EnforcementRegistrationVo> result = registrationMapper.selectReportPage(page, bo, null);
return TableDataInfo.build(result);
}
@Override
public List<EnforcementRegistrationVo> listAll(EnforcementRegistrationBo bo) {
String dataFilter = DataFilterUtil.buildFilterSql(true, true);
// 复用 selectReportPage 不分页方式(传一个大页)
// 数据权限由 @EfcodeDataFilter 拦截器自动处理
Page<EnforcementRegistrationVo> page = new Page<>(1, Integer.MAX_VALUE, false);
IPage<EnforcementRegistrationVo> result = registrationMapper.selectReportPage(page, bo, dataFilter);
IPage<EnforcementRegistrationVo> result = registrationMapper.selectReportPage(page, bo, null);
return result.getRecords();
}
@Override
public List<RegistrationExportVo> exportList(EnforcementRegistrationBo bo) {
List<EnforcementRegistrationVo> dataList = listAll(bo);
// 字典翻译:执法类别
Map<String, String> categoryDictMap = dictTypeService.selectDictDataByType("law_enforce_category").stream()
.collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel, (a, b) -> a));
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return dataList.stream().map(vo -> {
RegistrationExportVo export = new RegistrationExportVo();
export.setBureauDeptName(vo.getBureauDeptName());
export.setEnterpriseName(vo.getEnterpriseName());
export.setEnterpriseNumber(vo.getEnterpriseNumber());
export.setDistrict(vo.getDistrict());
export.setStreet(vo.getStreet());
// 执法人员:主执法人 + 其他执法人
String enforcer = vo.getLawEnforcer() != null ? vo.getLawEnforcer() : "";
if (StringUtils.isNotBlank(vo.getLawEnforcerTwo())) {
enforcer = enforcer + "," + vo.getLawEnforcerTwo();
}
export.setLawEnforcer(enforcer);
// 执法时间格式化
export.setEnforcementTime(vo.getEnforcementTime() != null ? sdf.format(vo.getEnforcementTime()) : "");
// 执法类别字典翻译
String categoryText = categoryDictMap.getOrDefault(
vo.getLawEnforceCategory() != null ? vo.getLawEnforceCategory() : "", "");
export.setLawEnforceCategory(categoryText);
export.setLawEnforcementItemText(vo.getLawEnforcementItemText());
export.setLawEnforcementBasisText(vo.getLawEnforcementBasisText());
return export;
}).collect(Collectors.toList());
}
@Override
public List<ChartDataVo> categoryChart(EnforcementRegistrationBo bo) {
String dataFilter = DataFilterUtil.buildFilterSql(true, true);
List<ChartDataVo> list = registrationMapper.selectReportCategoryChart(bo, dataFilter);
// 数据权限由 @EfcodeDataFilter 拦截器自动处理
List<ChartDataVo> list = registrationMapper.selectReportCategoryChart(bo, null);
// 字典翻译
Map<String, String> dictMap = dictTypeService.selectDictDataByType("law_enforce_category").stream()
@ -102,14 +136,14 @@ public class EnforcementRegistrationReportImpl implements IEnforcementRegistrati
@Override
public List<ChartDataVo> deptRankChart(EnforcementRegistrationBo bo) {
String dataFilter = DataFilterUtil.buildFilterSql(true, true);
return registrationMapper.selectReportDeptRankChart(bo, dataFilter);
// 数据权限由 @EfcodeDataFilter 拦截器自动处理
return registrationMapper.selectReportDeptRankChart(bo, null);
}
@Override
public List<ChartDataVo> enterpriseRankChart(EnforcementRegistrationBo bo) {
String dataFilter = DataFilterUtil.buildFilterSql(true, true);
return registrationMapper.selectReportEnterpriseRankChart(bo, dataFilter);
// 数据权限由 @EfcodeDataFilter 拦截器自动处理
return registrationMapper.selectReportEnterpriseRankChart(bo, null);
}
@Override

Loading…
Cancel
Save