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-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_date` datetime NOT NULL COMMENT '计划执行日期(如 2025-05-08)',
`plan_time` tinyint NOT NULL COMMENT '执行时段:1=上午,2=下午,3=其他', `plan_time` tinyint NOT NULL COMMENT '执行时段:1=上午,2=下午,3=其他',
`plan_actual_date` datetime NOT NULL COMMENT '经过预约后最终的计划执行日期(如 2025-05-08)', `plan_source_date` datetime NULL COMMENT '原始日期',
`plan_actual_time` tinyint NOT NULL COMMENT '经过预约后最终的执行时段:1=上午,2=下午,3=其他', `plan_source_time` tinyint NULL COMMENT '原始执行时段:1=上午,2=下午,3=其他',
`enforce_content` varchar(1000) NOT NULL COMMENT '执法事项(最多1000字)', `enforce_content` varchar(1000) NOT NULL COMMENT '执法事项(最多1000字)',
`enterprise_name` varchar(200) NOT NULL COMMENT '被检查企业/机构名称', `enterprise_name` varchar(200) NOT NULL COMMENT '被检查企业/机构名称',
`enterprise_number` varchar(200) NOT NULL COMMENT '被检查企业/机构信用代码', `enterprise_number` varchar(200) NOT NULL COMMENT '被检查企业/机构信用代码',
`enterprise_id` varchar(200) NOT NULL COMMENT '被检查企业/机构Id', `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_names` varchar(512) NOT NULL COMMENT '执法人员姓名(多个逗号分隔)',
`enforce_user_ids` 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` CREATE TABLE `efcode_cp_reserve`
( (
`id` varchar(50) NOT NULL COMMENT '主键ID' primary key, `id` varchar(50) NOT NULL COMMENT '主键ID' primary key,
`plan_id` varchar(50) NOT NULL COMMENT '计划ID', `plan_id` varchar(50) NOT NULL COMMENT '计划ID',
`plan_group_id` varchar(50) NOT NULL COMMENT '计划分组ID:相同的表示预约同一个计划', `plan_group_id` varchar(50) NOT NULL COMMENT '计划分组ID:相同的表示预约同一个计划',
`reserve_time` datetime NOT NULL COMMENT '预约时间', `reserve_time` datetime NOT NULL COMMENT '预约时间',
`op_status` tinyint NOT NULL COMMENT '操作状态' DEFAULT 3 COMMENT '操作状态:1=同意,2=拒绝,3=待确认,4=超期取消', `op_status` tinyint NOT NULL COMMENT '操作状态' DEFAULT 3 COMMENT '操作状态:1=同意,2=拒绝,3=待确认,4=超期取消',
`op_order` int NOT NULL COMMENT '联合时用户的操作顺序', `op_order` int NOT NULL COMMENT '联合时用户的操作顺序',
`op_time` datetime NULL COMMENT '联合时用户的操作时间', `op_time` datetime NULL COMMENT '联合时用户的操作时间',
`op_message` varchar(500) NOT NULL COMMENT '联合时用户输入的操作消息', `op_message` varchar(500) NULL COMMENT '联合时用户输入的操作消息',
`op_set_date` datetime NOT NULL COMMENT '联合时用户选择的操作时间', `warring_message` varchar(500) NULL COMMENT '警告的消息',
`op_set_time` tinyint NOT NULL COMMENT '执行时段:1=上午,2=下午,3=其他', `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', `res_from` tinyint NOT NULL COMMENT '来自:系统匹配=1,手动匹配=0',
`sender_id` varchar(50) NULL DEFAULT '' COMMENT '发送者用户ID', `sender_id` varchar(50) NULL DEFAULT '' COMMENT '发送者用户ID',
`receiver_id` varchar(50) NULL DEFAULT '' COMMENT '接收者用户ID', `receiver_id` varchar(50) NULL DEFAULT '' COMMENT '接收者用户ID',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_dept` varchar(64) DEFAULT NULL COMMENT '创建人部门', `create_dept` varchar(64) DEFAULT NULL COMMENT '创建人部门',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) comment '行政执法检查计划-预约表' row_format = DYNAMIC; ) comment '行政执法检查计划-预约表' row_format = DYNAMIC;
CREATE TABLE `efcode_cp_notice` 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(关联执法计划表)', `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=其他', `enforce_time` tinyint NOT NULL COMMENT '执法时段:1=上午,2=下午,3=其他',
`bureau_dept_id` varchar(50) NOT NULL COMMENT '执法单位ID', `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 '市认证部门名称', `dept_name` varchar(100) NOT NULL COMMENT '市认证部门名称',
`enforce_user_names` varchar(512) 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 '执法人员证件编号(多个逗号分隔)', `enforce_user_codes` varchar(512) NOT NULL COMMENT '执法人员证件编号(多个逗号分隔)',
`enterprise_id` varchar(50) NOT NULL COMMENT '被检查企业ID', `enterprise_id` varchar(50) NOT NULL COMMENT '被检查企业ID',
`enterprise_name` varchar(200) NOT NULL COMMENT '被检查企业名称', `enterprise_name` varchar(200) NOT NULL COMMENT '被检查企业名称',
`enterprise_number` varchar(32) DEFAULT 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 '企业联系电话', `contact_phone` varchar(200) NULL COMMENT '企业联系电话',
`enforce_content` varchar(1000) NOT 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 '创建时间', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_delete` tinyint NOT NULL DEFAULT 0 COMMENT '是否删除:0=否,1=是', `is_delete` tinyint NOT NULL DEFAULT 0 COMMENT '是否删除:0=否,1=是',
`remark` varchar(500) DEFAULT NULL COMMENT '备注', `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`)
) comment '行政执法检查计划-预告表' row_format = DYNAMIC; ) comment '行政执法检查计划-预告表' row_format = DYNAMIC;
CREATE TABLE `efcode_cp_notice_users` CREATE TABLE `efcode_cp_notice_users`
@ -158,18 +159,21 @@ CREATE TABLE `efcode_cp_notice_users`
CREATE TABLE `efcode_cp_notice_message` CREATE TABLE `efcode_cp_notice_message`
( (
`id` varchar(50) NOT NULL COMMENT '主键ID' primary key, `id` varchar(50) NOT NULL COMMENT '主键ID' primary key,
`notice_id` varchar(50) NOT NULL COMMENT '预告ID', `notice_id` varchar(50) NOT NULL COMMENT '预告ID',
`user_id` varchar(50) NOT NULL COMMENT '用户ID', `user_id` varchar(50) NOT NULL COMMENT '用户ID',
`user_name` varchar(100) NOT NULL COMMENT '用户名称', `user_name` varchar(100) NOT NULL COMMENT '用户名称',
`msg_from` tinyint NOT NULL COMMENT '来自:企业=1,执法单位=0', `msg_from` tinyint NOT NULL COMMENT '来自:企业=1,执法单位=0',
`message` varchar(1000) NOT NULL COMMENT '消息内容', `msg_type` tinyint NULL DEFAULT 1 COMMENT '消息类型:1=用户消息,2=系统提示',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者', `bureau_dept_viewed` tinyint NULL DEFAULT 0 COMMENT '执法部门是否已读:已读=1,未读=0',
`create_dept` varchar(64) DEFAULT NULL COMMENT '创建人部门', `enterprise_viewed` tinyint NULL DEFAULT 0 COMMENT '企业是否已读:已读=1,未读=0',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者', `message` varchar(1000) NOT NULL COMMENT '消息内容',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `create_dept` varchar(64) DEFAULT NULL COMMENT '创建人部门',
`is_delete` tinyint NOT NULL DEFAULT 0 COMMENT '是否删除:0=否,1=是' `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; ) comment '行政执法检查计划-预告交流表' row_format = DYNAMIC;
CREATE TABLE `efcode_cp_setting` 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`) INSERT INTO `efcode_cp_setting` (`id`, `setting_name`, `setting_value`, `remark`, `create_by`, `create_dept`)
-- VALUES ('CP_SETTING_SUBMIT_DEADLINE', '下阶段计划提交最晚时间', '26', '每月几号前需提交下阶段计划<=', '0', '0'), VALUES ('CP_SETTING_SUBMIT_DEADLINE', '下阶段计划提交最晚时间', '26', '每月几号前需提交下阶段计划<=26号', '0', '0'),
-- ('CP_SETTING_AUTO_MATCH_START', '系统自动推荐匹配开始时间', '27', '系统自动推荐匹配的开始时间(号)=', '0', '0'), ('CP_SETTING_AUTO_MATCH_START', '系统自动推荐匹配开始时间', '27', '系统自动推荐匹配的开始时间(号)=27号', '0', '0'),
-- ('CP_SETTING_RESERVE_CANCEL_DURATION', '预约自动取消时长', '7', '发起预约后,如果多长时间没有处理,则自动取消', ('CP_SETTING_RESERVE_CANCEL_DURATION', '预约自动取消时长', '14', '发起预约后,如果多长时间没有处理,则自动取消,14天',
-- '0', '0'), '0', '0'),
-- ('CP_SETTING_MANUAL_MATCH_DAYS', '手工匹配距计划开始天数', '3', '手工匹配距离计划开始的天数>=', '0', '0'), ('CP_SETTING_MANUAL_MATCH_DAYS', '手工匹配距计划开始天数', '3', '手工匹配距离计划开始的天数>=3天,同时,距离计划开始的第3天,系统自动去掉这些计划的预约,同时转化为任务', '0', '0'),
-- ('CP_MAX_UNION_UNIT', '单次联合单位最大数量', '3', '单次联合单位最大数量<=3', '0', '0'), ('CP_MAX_UNION_UNIT', '单次联合单位最大数量', '3', '单次联合单位最大数量<=3个执法单位', '0', '0'),
-- ('CP_MAX_INNER_UNIT_AC_PERSON_NUM', '单位内部单次计划最多参与人数', '3', '单位内部单次计划最多参与人数<=3', '0', ('CP_MAX_INNER_UNIT_AC_PERSON_NUM', '单位内部单次计划最多参与人数', '3', '单位内部单次计划最多参与人数<=3人', '0',
-- '0'); '0'),
-- ('CP_SETTING_SYSTEM_MATCH_WEEKS', '系统匹配预约周数范围', '1', '系统匹配时向后查找的周数范围1周:可选1,2,3,4周',
-- /*创建计划任务*/ '0', '0');
-- INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by,
-- create_time, remark) /*创建计划任务*/
-- VALUES ('计划自动匹配预约', DELETE
-- 'DEFAULT', FROM sys_job
-- 'cpPlanAutoMatchJob.execute()', WHERE invoke_target = 'cpPlanAutoMatchJob.execute()';
-- '0 0 2 * * ?', INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by,
-- '3', create_time, remark)
-- '1', VALUES ('计划自动匹配预约',
-- '0', 'DEFAULT',
-- 'admin', 'cpPlanAutoMatchJob.execute()',
-- NOW(), '0 0 2 * * ?',
-- '每天凌晨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.EnforcementRegistrationVo;
import com.zdxt.enforcementcode.domain.vo.report.ChartDataVo; import com.zdxt.enforcementcode.domain.vo.report.ChartDataVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationAnalysisVo; 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.domain.vo.report.RegistrationStatisticsVo;
import com.zdxt.enforcementcode.report.IEnforcementRegistrationReport; import com.zdxt.enforcementcode.report.IEnforcementRegistrationReport;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
@ -52,12 +53,23 @@ public class RegistrationController {
} }
/** /**
* 接口3:涉企执法统计列表导出 * 接口3:涉企执法统计列表导出(旧系统格式,10列)
*/ */
@PostMapping("/exportList") @PostMapping("/exportList")
public void exportList(EnforcementRegistrationBo bo, HttpServletResponse response) { public void exportList(EnforcementRegistrationBo bo, HttpServletResponse response) {
List<EnforcementRegistrationVo> list = registrationReport.listAll(bo); try {
ExcelUtil.exportExcel(list, "涉企执法统计", EnforcementRegistrationVo.class, response); 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") @PostMapping("/exportAnalysis")
public void exportAnalysis(EnforcementRegistrationBo bo, HttpServletResponse response) { public void exportAnalysis(EnforcementRegistrationBo bo, HttpServletResponse response) {
List<RegistrationAnalysisVo> list = registrationReport.analysisAll(bo); try {
ExcelUtil.exportExcel(list, "执法分析", RegistrationAnalysisVo.class, response); 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) @ExcelProperty(value = "执法类别", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "新=") @ExcelDictFormat(dictType = "law_enforce_category")
private String lawEnforceCategory; 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.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.EnforcementRegistration;
import com.zdxt.enforcementcode.domain.bo.EnforcementRegistrationBo; import com.zdxt.enforcementcode.domain.bo.EnforcementRegistrationBo;
import com.zdxt.enforcementcode.domain.bo.EnforcementRegistrationQueryBo; import com.zdxt.enforcementcode.domain.bo.EnforcementRegistrationQueryBo;
@ -85,6 +86,7 @@ public interface EnforcementRegistrationMapper extends BaseMapperPlus<Enforcemen
/** /**
* 报表-统计指标查询(COUNT聚合) * 报表-统计指标查询(COUNT聚合)
*/ */
@EfcodeDataFilter
RegistrationStatisticsVo selectReportStatistics(@Param("bo") EnforcementRegistrationBo bo, RegistrationStatisticsVo selectReportStatistics(@Param("bo") EnforcementRegistrationBo bo,
@Param("dataFilter") String dataFilter, @Param("dataFilter") String dataFilter,
@Param("checkCategoryCode") String checkCategoryCode); @Param("checkCategoryCode") String checkCategoryCode);
@ -92,6 +94,7 @@ public interface EnforcementRegistrationMapper extends BaseMapperPlus<Enforcemen
/** /**
* 报表-分页列表查询 * 报表-分页列表查询
*/ */
@EfcodeDataFilter
IPage<EnforcementRegistrationVo> selectReportPage(@Param("page") Page<EnforcementRegistrationVo> page, IPage<EnforcementRegistrationVo> selectReportPage(@Param("page") Page<EnforcementRegistrationVo> page,
@Param("bo") EnforcementRegistrationBo bo, @Param("bo") EnforcementRegistrationBo bo,
@Param("dataFilter") String dataFilter); @Param("dataFilter") String dataFilter);
@ -99,29 +102,34 @@ public interface EnforcementRegistrationMapper extends BaseMapperPlus<Enforcemen
/** /**
* 报表-全量列表查询(用于统计/导出) * 报表-全量列表查询(用于统计/导出)
*/ */
@EfcodeDataFilter
List<EnforcementRegistration> selectReportAll(@Param("bo") EnforcementRegistrationBo bo, List<EnforcementRegistration> selectReportAll(@Param("bo") EnforcementRegistrationBo bo,
@Param("dataFilter") String dataFilter); @Param("dataFilter") String dataFilter);
/** /**
* 报表-执法类别图表(GROUP BY law_enforce_category) * 报表-执法类别图表(GROUP BY law_enforce_category)
*/ */
@EfcodeDataFilter
List<ChartDataVo> selectReportCategoryChart(@Param("bo") EnforcementRegistrationBo bo, List<ChartDataVo> selectReportCategoryChart(@Param("bo") EnforcementRegistrationBo bo,
@Param("dataFilter") String dataFilter); @Param("dataFilter") String dataFilter);
/** /**
* 报表-部门排行图表(GROUP BY bureau_dept_id,前10) * 报表-部门排行图表(GROUP BY bureau_dept_id,前10)
*/ */
@EfcodeDataFilter
List<ChartDataVo> selectReportDeptRankChart(@Param("bo") EnforcementRegistrationBo bo, List<ChartDataVo> selectReportDeptRankChart(@Param("bo") EnforcementRegistrationBo bo,
@Param("dataFilter") String dataFilter); @Param("dataFilter") String dataFilter);
/** /**
* 报表-被检查企业次数排行图表(GROUP BY enterprise_number,前10) * 报表-被检查企业次数排行图表(GROUP BY enterprise_number,前10)
*/ */
@EfcodeDataFilter
List<ChartDataVo> selectReportEnterpriseRankChart(@Param("bo") EnforcementRegistrationBo bo, List<ChartDataVo> selectReportEnterpriseRankChart(@Param("bo") EnforcementRegistrationBo bo,
@Param("dataFilter") String dataFilter); @Param("dataFilter") String dataFilter);
/** /**
* 报表-执法分析排名(GROUP BY enterprise_number) * 报表-执法分析排名(GROUP BY enterprise_number)
* <p>含子查询,不使用注解方式,手动传入 dataFilter
*/ */
List<RegistrationAnalysisVo> selectReportAnalysisList(@Param("bo") EnforcementRegistrationBo bo, List<RegistrationAnalysisVo> selectReportAnalysisList(@Param("bo") EnforcementRegistrationBo bo,
@Param("dataFilter") String dataFilter); @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.EnforcementRegistrationVo;
import com.zdxt.enforcementcode.domain.vo.report.ChartDataVo; import com.zdxt.enforcementcode.domain.vo.report.ChartDataVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationAnalysisVo; 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.domain.vo.report.RegistrationStatisticsVo;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -32,6 +33,11 @@ public interface IEnforcementRegistrationReport {
*/ */
List<EnforcementRegistrationVo> listAll(EnforcementRegistrationBo bo); 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.EnforcementRegistrationVo;
import com.zdxt.enforcementcode.domain.vo.report.ChartDataVo; import com.zdxt.enforcementcode.domain.vo.report.ChartDataVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationAnalysisVo; 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.domain.vo.report.RegistrationStatisticsVo;
import com.zdxt.enforcementcode.mapper.EnforcementRegistrationMapper; import com.zdxt.enforcementcode.mapper.EnforcementRegistrationMapper;
import com.zdxt.enforcementcode.report.IEnforcementRegistrationReport; import com.zdxt.enforcementcode.report.IEnforcementRegistrationReport;
@ -40,11 +41,10 @@ public class EnforcementRegistrationReportImpl implements IEnforcementRegistrati
@Override @Override
public RegistrationStatisticsVo statistics(EnforcementRegistrationBo bo) { public RegistrationStatisticsVo statistics(EnforcementRegistrationBo bo) {
String dataFilter = DataFilterUtil.buildFilterSql(true, true);
String checkCategoryCode = StringUtils.isNotBlank(bo.getCheckCategory()) ? bo.getCheckCategory() : "01"; String checkCategoryCode = StringUtils.isNotBlank(bo.getCheckCategory()) ? bo.getCheckCategory() : "01";
// 单条SQL聚合查询,不加载全量数据 // 单条SQL聚合查询,数据权限由 @EfcodeDataFilter 拦截器自动处理
RegistrationStatisticsVo vo = registrationMapper.selectReportStatistics(bo, dataFilter, checkCategoryCode); RegistrationStatisticsVo vo = registrationMapper.selectReportStatistics(bo, null, checkCategoryCode);
if (vo == null) { if (vo == null) {
vo = new RegistrationStatisticsVo(); vo = new RegistrationStatisticsVo();
} }
@ -66,25 +66,59 @@ public class EnforcementRegistrationReportImpl implements IEnforcementRegistrati
@Override @Override
public TableDataInfo<EnforcementRegistrationVo> list(EnforcementRegistrationBo bo, PageQuery pageQuery) { public TableDataInfo<EnforcementRegistrationVo> list(EnforcementRegistrationBo bo, PageQuery pageQuery) {
String dataFilter = DataFilterUtil.buildFilterSql(true, true); // 数据权限由 @EfcodeDataFilter 拦截器自动处理
Page<EnforcementRegistrationVo> page = pageQuery.build(); 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); return TableDataInfo.build(result);
} }
@Override @Override
public List<EnforcementRegistrationVo> listAll(EnforcementRegistrationBo bo) { public List<EnforcementRegistrationVo> listAll(EnforcementRegistrationBo bo) {
String dataFilter = DataFilterUtil.buildFilterSql(true, true); // 数据权限由 @EfcodeDataFilter 拦截器自动处理
// 复用 selectReportPage 不分页方式(传一个大页)
Page<EnforcementRegistrationVo> page = new Page<>(1, Integer.MAX_VALUE, false); 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(); 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 @Override
public List<ChartDataVo> categoryChart(EnforcementRegistrationBo bo) { public List<ChartDataVo> categoryChart(EnforcementRegistrationBo bo) {
String dataFilter = DataFilterUtil.buildFilterSql(true, true); // 数据权限由 @EfcodeDataFilter 拦截器自动处理
List<ChartDataVo> list = registrationMapper.selectReportCategoryChart(bo, dataFilter); List<ChartDataVo> list = registrationMapper.selectReportCategoryChart(bo, null);
// 字典翻译 // 字典翻译
Map<String, String> dictMap = dictTypeService.selectDictDataByType("law_enforce_category").stream() Map<String, String> dictMap = dictTypeService.selectDictDataByType("law_enforce_category").stream()
@ -102,14 +136,14 @@ public class EnforcementRegistrationReportImpl implements IEnforcementRegistrati
@Override @Override
public List<ChartDataVo> deptRankChart(EnforcementRegistrationBo bo) { public List<ChartDataVo> deptRankChart(EnforcementRegistrationBo bo) {
String dataFilter = DataFilterUtil.buildFilterSql(true, true); // 数据权限由 @EfcodeDataFilter 拦截器自动处理
return registrationMapper.selectReportDeptRankChart(bo, dataFilter); return registrationMapper.selectReportDeptRankChart(bo, null);
} }
@Override @Override
public List<ChartDataVo> enterpriseRankChart(EnforcementRegistrationBo bo) { public List<ChartDataVo> enterpriseRankChart(EnforcementRegistrationBo bo) {
String dataFilter = DataFilterUtil.buildFilterSql(true, true); // 数据权限由 @EfcodeDataFilter 拦截器自动处理
return registrationMapper.selectReportEnterpriseRankChart(bo, dataFilter); return registrationMapper.selectReportEnterpriseRankChart(bo, null);
} }
@Override @Override

Loading…
Cancel
Save