From e8ac2ca5159b12948695724d815e00136905079d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BA=84=E9=94=90=E6=B3=A2?= <10549902+zhuangruibo@user.noreply.gitee.com> Date: Thu, 11 Jun 2026 22:42:24 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=91=E7=9D=A3=E7=AB=AF-=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/庄锐波-工作周报.md | 13 +- .../report/NonRegistrationController.java | 61 ++++ .../vo/report/NonRegistrationExportVo.java | 51 +++ .../vo/report/NonRegistrationReportVo.java | 74 +++++ .../NonEnforcementRegistrationMapper.java | 19 ++ .../INonEnforcementRegistrationReport.java | 27 ++ .../NonEnforcementRegistrationReportImpl.java | 79 +++++ ...NonEnforcementRegistrationReportMapper.xml | 99 ++++++ .../src/api/efcode/report/non-registration.ts | 69 ++++ .../efcode/report/non_registration/index.vue | 302 ++++++++++++++++++ 10 files changed, 788 insertions(+), 6 deletions(-) create mode 100644 zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/report/NonRegistrationController.java create mode 100644 zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/report/NonRegistrationExportVo.java create mode 100644 zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/report/NonRegistrationReportVo.java create mode 100644 zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/INonEnforcementRegistrationReport.java create mode 100644 zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/impl/NonEnforcementRegistrationReportImpl.java create mode 100644 zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/NonEnforcementRegistrationReportMapper.xml create mode 100644 zdxt-web-client/zdxt-admin-plus-ui/src/api/efcode/report/non-registration.ts create mode 100644 zdxt-web-client/zdxt-admin-plus-ui/src/views/efcode/report/non_registration/index.vue diff --git a/doc/庄锐波-工作周报.md b/doc/庄锐波-工作周报.md index e6ee05e8..cb2a27d7 100644 --- a/doc/庄锐波-工作周报.md +++ b/doc/庄锐波-工作周报.md @@ -191,16 +191,16 @@ * 迁移一期中的以下功能,预计时间需要2周左右 ```text 执法监督码 - ├── [❌]统计查询 - │ ├── [❌]行政执法 - │ │ ├── [❌]涉企执法情况 + ├── [🟡]统计查询 + │ ├── [🟡]行政执法 + │ │ ├── [🟡]涉企执法情况 │ │ ├── [❌]企业受检次数 │ │ ├── [❌]企业信息情况 │ │ ├── [❌]执法单位情况 │ │ ├── [❌]执法投诉情况 │ │ ├── [❌]检查计划情况 - │ ├── [❌]非行政执法 - │ │ ├── [❌]非行政执法 + │ ├── [🟡]非行政执法 + │ │ ├── [🟡]非行政执法 ├── [✅]工作报表 │ │ ├── [✅]执法分析 ├── [✅]综合管理 @@ -209,4 +209,5 @@ ``` * 可能需要分部分时间处理计划,预约,任务,预告的bug和网络策略通后进行部署方面的工作,上边的迁移工作时间可能会延长. -**下周工作:** \ No newline at end of file +**下周工作:** +* 继续完成迁移一期的统计报表功能.预计21号前完成. \ No newline at end of file diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/report/NonRegistrationController.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/report/NonRegistrationController.java new file mode 100644 index 00000000..01725156 --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/report/NonRegistrationController.java @@ -0,0 +1,61 @@ +package com.zdxt.enforcementcode.controller.web.supervision.report; + +import com.zdxt.enforcementcode.domain.bo.NonEnforcementRegistrationBo; +import com.zdxt.enforcementcode.domain.vo.report.NonRegistrationExportVo; +import com.zdxt.enforcementcode.domain.vo.report.NonRegistrationReportVo; +import com.zdxt.enforcementcode.report.INonEnforcementRegistrationReport; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 非行政执法(入企登记)报表 + * + * @author zdxt + */ +@Slf4j +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/web/supervision/report/non-registration") +public class NonRegistrationController { + + private final INonEnforcementRegistrationReport reportService; + + /** + * 列表分页(V2 排序) + */ + @GetMapping("/list") + public TableDataInfo list(NonEnforcementRegistrationBo bo, PageQuery pageQuery) { + return reportService.list(bo, pageQuery); + } + + /** + * 列表导出(FastExcel) + */ + @PostMapping("/exportList") + public void exportList(NonEnforcementRegistrationBo bo, HttpServletResponse response) { + try { + List list = reportService.exportList(bo); + ExcelUtil.exportExcel(list, "非行政执法登记", NonRegistrationExportVo.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) { + } + } + } +} diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/report/NonRegistrationExportVo.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/report/NonRegistrationExportVo.java new file mode 100644 index 00000000..1754b37d --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/report/NonRegistrationExportVo.java @@ -0,0 +1,51 @@ +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; + +/** + * 非行政执法导出 Excel VO(10 列,对齐旧系统导出格式)。 + * + * @author zdxt + */ +@Data +@ExcelIgnoreUnannotated +public class NonRegistrationExportVo 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 area; + + @ExcelProperty(value = "企业所属街道") + private String street; + + @ExcelProperty(value = "入企人员") + private String lawEnforcer; + + @ExcelProperty(value = "入企时间") + private String enforcementTime; + + @ExcelProperty(value = "入企事由") + private String lawEnforcementTypeText; + + @ExcelProperty(value = "入企事项") + private String lawEnforcementItemText; + + @ExcelProperty(value = "活动依据") + private String lawEnforcementBasisText; +} diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/report/NonRegistrationReportVo.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/report/NonRegistrationReportVo.java new file mode 100644 index 00000000..b8f78720 --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/report/NonRegistrationReportVo.java @@ -0,0 +1,74 @@ +package com.zdxt.enforcementcode.domain.vo.report; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 非行政执法(入企登记)报表行 VO。 + *

对应前端列表展示字段:单位名称、企业名称、企业注册地、企业所属街道、入企人员、入企时间、入企事由、入企事项、活动依据。 + * + * @author zdxt + */ +@Data +public class NonRegistrationReportVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 执法主体(单位名称) + */ + private String bureauDeptName; + + /** + * 企业名称 + */ + private String enterpriseName; + + /** + * 企业统一信用代码 + */ + private String enterpriseNumber; + + /** + * 企业注册地址(原始) + */ + private String enterpriseAddress; + + /** + * 企业注册区(来自 non_enforcement_registration.district) + */ + private String area; + + /** + * 企业所属街道(来自 non_enforcement_registration.street) + */ + private String street; + + /** + * 入企人员(SQL 内已 CONCAT_WS 主+其他执法人员) + */ + private String lawEnforcer; + + /** + * 入企时间(SQL DATE_FORMAT 后的字符串) + */ + private String enforcementTime; + + /** + * 入企事由文本 + */ + private String lawEnforcementTypeText; + + /** + * 入企事项文本 + */ + private String lawEnforcementItemText; + + /** + * 活动依据文本 + */ + private String lawEnforcementBasisText; +} diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/NonEnforcementRegistrationMapper.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/NonEnforcementRegistrationMapper.java index 0fa024f6..61c8d28c 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/NonEnforcementRegistrationMapper.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/NonEnforcementRegistrationMapper.java @@ -1,8 +1,12 @@ package com.zdxt.enforcementcode.mapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zdxt.enforcementcode.domain.NonEnforcementRegistration; import com.zdxt.enforcementcode.domain.bo.NonEnforcementRegistrationBo; import com.zdxt.enforcementcode.domain.vo.NonEnforcementRegistrationVo; +import com.zdxt.enforcementcode.domain.vo.report.NonRegistrationReportVo; +import org.apache.ibatis.annotations.Param; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.springframework.stereotype.Repository; @@ -69,4 +73,19 @@ public interface NonEnforcementRegistrationMapper extends BaseMapperPlus getList(NonEnforcementRegistrationBo bo); int getListTotal(NonEnforcementRegistrationBo bo); + + /** + * 报表 — 非行政执法分页(V2 排序:JOIN sys_dict_data 按 dict_sort 排序)。 + *

不使用 @EfcodeDataFilter 注解,由 Service 层手动构建单列过滤条件传入(带表别名 n)。 + */ + IPage selectReportPageV2(@Param("page") Page page, + @Param("bo") NonEnforcementRegistrationBo bo, + @Param("dataFilter") String dataFilter); + + /** + * 报表 — 非行政执法全量加载(用于导出,V2 排序)。 + *

不使用 @EfcodeDataFilter 注解,由 Service 层手动构建单列过滤条件传入。 + */ + List selectReportAll(@Param("bo") NonEnforcementRegistrationBo bo, + @Param("dataFilter") String dataFilter); } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/INonEnforcementRegistrationReport.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/INonEnforcementRegistrationReport.java new file mode 100644 index 00000000..a2a4dd30 --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/INonEnforcementRegistrationReport.java @@ -0,0 +1,27 @@ +package com.zdxt.enforcementcode.report; + +import com.zdxt.enforcementcode.domain.bo.NonEnforcementRegistrationBo; +import com.zdxt.enforcementcode.domain.vo.report.NonRegistrationExportVo; +import com.zdxt.enforcementcode.domain.vo.report.NonRegistrationReportVo; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +import java.util.List; + +/** + * 非行政执法(入企登记)报表服务接口 + * + * @author zdxt + */ +public interface INonEnforcementRegistrationReport { + + /** + * 列表分页(V2 排序) + */ + TableDataInfo list(NonEnforcementRegistrationBo bo, PageQuery pageQuery); + + /** + * 列表导出(V2 排序,全量) + */ + List exportList(NonEnforcementRegistrationBo bo); +} diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/impl/NonEnforcementRegistrationReportImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/impl/NonEnforcementRegistrationReportImpl.java new file mode 100644 index 00000000..6d89a12f --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/impl/NonEnforcementRegistrationReportImpl.java @@ -0,0 +1,79 @@ +package com.zdxt.enforcementcode.report.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.zdxt.enforcementcode.common.util.DataFilterUtil; +import com.zdxt.enforcementcode.domain.bo.NonEnforcementRegistrationBo; +import com.zdxt.enforcementcode.domain.vo.report.NonRegistrationExportVo; +import com.zdxt.enforcementcode.domain.vo.report.NonRegistrationReportVo; +import com.zdxt.enforcementcode.mapper.NonEnforcementRegistrationMapper; +import com.zdxt.enforcementcode.report.INonEnforcementRegistrationReport; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 非行政执法(入企登记)报表服务实现 + * + * @author zdxt + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class NonEnforcementRegistrationReportImpl implements INonEnforcementRegistrationReport { + + private final NonEnforcementRegistrationMapper registrationMapper; + + @Override + public TableDataInfo list(NonEnforcementRegistrationBo bo, PageQuery pageQuery) { + // V2:SQL层JOIN字典表排序 + 服务端分页 + // 手动构建单列权限过滤(bureau_dept_id),表别名 n + Page page = pageQuery.build(); + String dataFilter = buildSingleColumnFilter("n"); + IPage result = registrationMapper.selectReportPageV2(page, bo, dataFilter); + return TableDataInfo.build(result); + } + + @Override + public List exportList(NonEnforcementRegistrationBo bo) { + // 全量加载(V2 排序),手动构建单列权限过滤(bureau_dept_id) + String dataFilter = buildSingleColumnFilter("n"); + List dataList = registrationMapper.selectReportAll(bo, dataFilter); + + return dataList.stream().map(vo -> { + NonRegistrationExportVo export = new NonRegistrationExportVo(); + export.setBureauDeptName(vo.getBureauDeptName()); + export.setEnterpriseName(vo.getEnterpriseName()); + export.setEnterpriseNumber(vo.getEnterpriseNumber()); + export.setArea(vo.getArea()); + export.setStreet(vo.getStreet()); + export.setLawEnforcer(vo.getLawEnforcer()); + export.setEnforcementTime(vo.getEnforcementTime()); + export.setLawEnforcementTypeText(vo.getLawEnforcementTypeText()); + export.setLawEnforcementItemText(vo.getLawEnforcementItemText()); + export.setLawEnforcementBasisText(vo.getLawEnforcementBasisText()); + return export; + }).collect(Collectors.toList()); + } + + /** + * 构建单列数据权限过滤条件:bureau_dept_id(执法单位)。 + *

带 "AND " 前缀,可直接拼在现有 WHERE 条件后。 + *

超管或 ViewAllDataRole 返回空字符串(不过滤),保证 XML 中 ${dataFilter} 占位安全。 + * + * @param tableAlias 表别名(不带点),无别名传 "" + * @return 拼接后的 "AND ..." SQL 片段;超管/全数据角色返回空串 + */ + private String buildSingleColumnFilter(String tableAlias) { + String filter = DataFilterUtil.buildFilterSql(tableAlias, "bureau_dept_id", true, true); + if (filter == null) { + return ""; + } + return "AND " + filter; + } +} diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/NonEnforcementRegistrationReportMapper.xml b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/NonEnforcementRegistrationReportMapper.xml new file mode 100644 index 00000000..3ff72ac2 --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/NonEnforcementRegistrationReportMapper.xml @@ -0,0 +1,99 @@ + + + + + + + AND n.has_delete = 0 + + AND n.bureau_dept_name LIKE CONCAT('%', #{bo.bureauDeptName}, '%') + + + AND ( n.law_enforcer LIKE CONCAT('%', #{bo.lawEnforcer}, '%') + OR n.law_enforcer_other LIKE CONCAT('%', #{bo.lawEnforcer}, '%') ) + + + AND n.enterprise_name LIKE CONCAT('%', #{bo.enterpriseName}, '%') + + + AND n.law_enforcement_item_text LIKE CONCAT('%', #{bo.lawEnforcementItemText}, '%') + + + AND n.law_enforcement_type = #{bo.lawEnforcementType} + + + + AND n.enterprise_address LIKE CONCAT('%', #{bo.areaText}, '%') + + + AND n.enterprise_address LIKE CONCAT('%', #{bo.streetText}, '%') + + + + AND YEAR(n.enforcement_time) = #{bo.year} + + + AND YEAR(n.enforcement_time) = #{bo.year} AND QUARTER(n.enforcement_time) = #{bo.quarter} + + + AND YEAR(n.enforcement_time) = #{bo.year} AND MONTH(n.enforcement_time) = #{bo.month} + + + AND DATE_FORMAT(n.enforcement_time,'%Y-%m-%d') >= STR_TO_DATE(#{bo.startTime},'%Y-%m-%d') + + + AND DATE_FORMAT(n.enforcement_time,'%Y-%m-%d') <= STR_TO_DATE(#{bo.endTime},'%Y-%m-%d') + + + ${dataFilter} + + + + + + + + + diff --git a/zdxt-web-client/zdxt-admin-plus-ui/src/api/efcode/report/non-registration.ts b/zdxt-web-client/zdxt-admin-plus-ui/src/api/efcode/report/non-registration.ts new file mode 100644 index 00000000..187a731a --- /dev/null +++ b/zdxt-web-client/zdxt-admin-plus-ui/src/api/efcode/report/non-registration.ts @@ -0,0 +1,69 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; + +const BASE_URL = '/web/supervision/report/non-registration'; + +/** 查询参数 */ +export interface NonRegistrationQuery { + pageNum?: number; + pageSize?: number; + /** 单位名称 */ + bureauDeptName?: string; + /** 入企人员(同时匹配 law_enforcer / law_enforcer_other) */ + lawEnforcer?: string; + /** 企业名称 */ + enterpriseName?: string; + /** 入企事项 */ + lawEnforcementItemText?: string; + /** 入企事由(字典 no_check_category 的 dictValue) */ + lawEnforcementType?: number | string; + /** 区域 dictValue */ + area?: string; + /** 区域 dictLabel(用于 enterprise_address LIKE 匹配) */ + areaText?: string; + /** 街道 dictValue */ + street?: string; + /** 街道 dictLabel(用于 enterprise_address LIKE 匹配) */ + streetText?: string; + /** 时段类型:year / quarter / month / selectTime */ + dateSearch?: string; + year?: string; + quarter?: string; + month?: string; + startTime?: string; + endTime?: string; +} + +/** 列表行 VO */ +export interface NonRegistrationReportVo { + bureauDeptName: string; + enterpriseName: string; + enterpriseNumber: string; + enterpriseAddress: string; + area: string; + street: string; + lawEnforcer: string; + enforcementTime: string; + lawEnforcementTypeText: string; + lawEnforcementItemText: string; + lawEnforcementBasisText: string; +} + +/** 列表分页 */ +export const listNonRegistration = (params: NonRegistrationQuery): AxiosPromise => { + return request({ + url: `${BASE_URL}/list`, + method: 'get', + params + }); +}; + +/** 列表导出 */ +export const exportNonRegistration = (params: NonRegistrationQuery): AxiosPromise => { + return request({ + url: `${BASE_URL}/exportList`, + method: 'post', + params, + responseType: 'blob' + }); +}; diff --git a/zdxt-web-client/zdxt-admin-plus-ui/src/views/efcode/report/non_registration/index.vue b/zdxt-web-client/zdxt-admin-plus-ui/src/views/efcode/report/non_registration/index.vue new file mode 100644 index 00000000..11cb4eac --- /dev/null +++ b/zdxt-web-client/zdxt-admin-plus-ui/src/views/efcode/report/non_registration/index.vue @@ -0,0 +1,302 @@ + + + + +