From 7ea97fccf7fb312ca0704c9af11a6a4ca17de39d 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: Sat, 18 Apr 2026 21:46:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AppEnforcementRegistrationController.java | 12 +- .../domain/EnforcementRegistration.java | 61 ++- .../domain/bo/EnforcementRegistrationBo.java | 9 + .../domain/vo/EnforcementRegistrationVo.java | 28 ++ .../IEnforcementRegistrationService.java | 9 + .../EnforcementRegistrationServiceImpl.java | 194 +++++++- .../src/api/enterprise/index.js | 2 +- .../router/enterprise-app/ent-main-router.js | 12 +- .../enforcementRegistrationList.vue | 414 +++++++++++++++++- .../src/views/enterprise/enterpriseHomeV2.vue | 6 +- 10 files changed, 712 insertions(+), 35 deletions(-) diff --git a/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEnforcementRegistrationController.java b/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEnforcementRegistrationController.java index ef25a3ad..48d93b87 100644 --- a/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEnforcementRegistrationController.java +++ b/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEnforcementRegistrationController.java @@ -38,7 +38,7 @@ public class AppEnforcementRegistrationController extends BaseController { private final IEnforcementRegistrationService enforcementRegistrationService; /** - * 查询企业端-执法登记记录列表 + * 查询企业端-执法登记记录列表(基础分页) */ //@SaCheckPermission("enforcementcode:registration:list") @GetMapping("/list") @@ -46,4 +46,14 @@ public class AppEnforcementRegistrationController extends BaseController { return enforcementRegistrationService.queryPageList(bo, pageQuery); } + /** + * 查询企业端-执法登记记录列表(含投诉标记、字典翻译、超时天数计算、执法人员格式化) + * 前端企业端执法登记列表页面使用此接口 + */ + @GetMapping("/getEnterpriseEnforcementRegistrationList") + public TableDataInfo getEnterpriseEnforcementRegistrationList( + EnforcementRegistrationBo bo, PageQuery pageQuery) { + return enforcementRegistrationService.queryEnterprisePageList(bo, pageQuery); + } + } diff --git a/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/EnforcementRegistration.java b/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/EnforcementRegistration.java index c401ad9b..1f5ce0e2 100644 --- a/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/EnforcementRegistration.java +++ b/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/EnforcementRegistration.java @@ -16,9 +16,8 @@ import java.io.Serial; * @date 2026-04-17 */ @Data -@EqualsAndHashCode(callSuper = true) @TableName("enforcement_registration") -public class EnforcementRegistration extends BaseEntity { +public class EnforcementRegistration { @Serial private static final long serialVersionUID = 1L; @@ -125,12 +124,12 @@ public class EnforcementRegistration extends BaseEntity { private Long reslut; /** - * + * */ private String userId; /** - * + * */ private String deptId; @@ -160,67 +159,67 @@ public class EnforcementRegistration extends BaseEntity { private Long isSubmit; /** - * + * */ private String enforce; /** - * + * */ private String uniteCheck; /** - * + * */ private String lawEnforcementItemText; /** - * + * */ private String lawField; /** - * + * */ private String checkCategory; /** - * + * */ private String checkCss; /** - * + * */ private String enforceReason; /** - * + * */ private String bureauDeptId; /** - * + * */ private String bureauDeptName; /** - * + * */ private String lawEnforcementBasisText; /** - * + * */ private Long isEvaluate; /** - * + * */ private String lawId; /** - * + * */ private String lawText; @@ -279,5 +278,33 @@ public class EnforcementRegistration extends BaseEntity { */ private Long isRealUnion; + /** + * 创建部门 + */ + @TableField(fill = FieldFill.INSERT) + private String createDept; + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 更新者 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; } diff --git a/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnforcementRegistrationBo.java b/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnforcementRegistrationBo.java index 410084f6..b6ef25ca 100644 --- a/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnforcementRegistrationBo.java +++ b/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnforcementRegistrationBo.java @@ -280,5 +280,14 @@ public class EnforcementRegistrationBo extends BaseEntity { */ private Long isRealUnion; + /** + * 日期类型筛选: 1=本月, 2=本季, 3=本年 + */ + private Integer dateType; + + /** + * 指定月份筛选, 格式: "YYYY-MM" + */ + private String dateSearch; } diff --git a/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/EnforcementRegistrationVo.java b/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/EnforcementRegistrationVo.java index 4f6732c1..5772ac11 100644 --- a/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/EnforcementRegistrationVo.java +++ b/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/EnforcementRegistrationVo.java @@ -13,6 +13,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.Date; +import java.util.List; @@ -337,5 +338,32 @@ public class EnforcementRegistrationVo implements Serializable { @ExcelProperty(value = "是否真联合执法(0:未联合; 1:已经联合)") private Long isRealUnion; + // ======== 以下为显示用扩展字段(非数据库字段)======== + + /** + * 执法类别文本(字典翻译) + */ + private String lawEnforceCategoryText; + + /** + * 是否投诉标记: 0=否, 1=是 + */ + private Integer comOrOpi; + + /** + * 距今天数(执法时间到今天的天数差) + */ + private Long outTimeDayNum; + + /** + * 执法人员1展示文本(姓名+执法证号) + */ + private String lawEnforcerDisplay; + + /** + * 其他执法人员展示列表(姓名+执法证号) + */ + private List lawEnforcer2List; + } diff --git a/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEnforcementRegistrationService.java b/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEnforcementRegistrationService.java index 073c8f1a..f6898362 100644 --- a/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEnforcementRegistrationService.java +++ b/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEnforcementRegistrationService.java @@ -33,6 +33,15 @@ public interface IEnforcementRegistrationService { */ TableDataInfo queryPageList(EnforcementRegistrationBo bo, PageQuery pageQuery); + /** + * 企业端-分页查询执法登记记录列表(含投诉标记、字典翻译、超时计算等) + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 企业端-执法登记记录分页列表 + */ + TableDataInfo queryEnterprisePageList(EnforcementRegistrationBo bo, PageQuery pageQuery); + /** * 查询符合条件的企业端-执法登记记录列表 * diff --git a/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementRegistrationServiceImpl.java b/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementRegistrationServiceImpl.java index 7e88da8a..db261f75 100644 --- a/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementRegistrationServiceImpl.java +++ b/ruoyi-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementRegistrationServiceImpl.java @@ -1,5 +1,7 @@ package com.zdxt.enforcementcode.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -9,16 +11,25 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.system.domain.SysUser; +import org.dromara.system.domain.vo.SysDictDataVo; +import org.dromara.system.mapper.SysUserMapper; +import org.dromara.system.service.ISysDictTypeService; import org.springframework.stereotype.Service; +import com.zdxt.enforcementcode.domain.EnterpriseComplaint; import com.zdxt.enforcementcode.domain.bo.EnforcementRegistrationBo; import com.zdxt.enforcementcode.domain.vo.EnforcementRegistrationVo; import com.zdxt.enforcementcode.domain.EnforcementRegistration; import com.zdxt.enforcementcode.mapper.EnforcementRegistrationMapper; +import com.zdxt.enforcementcode.mapper.EnterpriseComplaintMapper; import com.zdxt.enforcementcode.service.IEnforcementRegistrationService; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; +import java.util.*; +import java.util.stream.Collectors; /** * 企业端-执法登记记录Service业务层处理 @@ -32,6 +43,9 @@ import java.util.Collection; public class EnforcementRegistrationServiceImpl implements IEnforcementRegistrationService { private final EnforcementRegistrationMapper baseMapper; + private final EnterpriseComplaintMapper complaintMapper; + private final ISysDictTypeService dictTypeService; + private final SysUserMapper sysUserMapper; /** * 查询企业端-执法登记记录 @@ -126,6 +140,180 @@ public class EnforcementRegistrationServiceImpl implements IEnforcementRegistrat return lqw; } + /** + * 企业端-分页查询执法登记记录列表 + * 包含:投诉标记、字典翻译、超时天数计算、执法人员格式化 + * 批量查询避免循环中嵌套查询 + */ + @Override + public TableDataInfo queryEnterprisePageList(EnforcementRegistrationBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildEnterpriseQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + List records = result.getRecords(); + if (CollUtil.isEmpty(records)) { + return TableDataInfo.build(result); + } + + // ===== 1. 批量查询字典数据(执法类别 law_enforce_category) ===== + Map dictMap = new HashMap<>(); + List dictList = dictTypeService.selectDictDataByType("law_enforce_category"); + if (CollUtil.isNotEmpty(dictList)) { + dictMap = dictList.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel, (a, b) -> a)); + } + + // ===== 2. 批量查询投诉信息 ===== + List allRegIds = records.stream().map(EnforcementRegistrationVo::getId).collect(Collectors.toList()); + // 一次查出所有相关投诉记录的 relId + Set complainedIds = new HashSet<>(); + if (CollUtil.isNotEmpty(allRegIds)) { + List complaints = complaintMapper.selectList( + new LambdaQueryWrapper() + .select(EnterpriseComplaint::getRelId) + .in(EnterpriseComplaint::getRelId, allRegIds) + .eq(EnterpriseComplaint::getComOrOpi, 1) + ); + complainedIds = complaints.stream() + .map(EnterpriseComplaint::getRelId) + .collect(Collectors.toSet()); + } + + // ===== 3. 批量查询执法人员信息 ===== + // 收集所有用户ID(执法人员1 + 执法人员2) + Set allUserIds = new HashSet<>(); + for (EnforcementRegistrationVo vo : records) { + if (StringUtils.isNotBlank(vo.getLawEnforcerId())) { + try { allUserIds.add(Convert.toLong(vo.getLawEnforcerId())); } catch (Exception ignored) {} + } + if (StringUtils.isNotBlank(vo.getLawEnforcerIdTwo())) { + for (String idStr : vo.getLawEnforcerIdTwo().split(",")) { + try { allUserIds.add(Convert.toLong(idStr.trim())); } catch (Exception ignored) {} + } + } + } + // 一次批量查询所有用户 + Map userMap = new HashMap<>(); + if (CollUtil.isNotEmpty(allUserIds)) { + List users = sysUserMapper.selectList( + new LambdaQueryWrapper() + .select(SysUser::getUserId, SysUser::getUserName, SysUser::getLawCertificateNum, SysUser::getPhonenumber) + .in(SysUser::getUserId, allUserIds) + ); + userMap = users.stream().collect(Collectors.toMap(SysUser::getUserId, u -> u, (a, b) -> a)); + } + + // ===== 4. 循环组装显示字段(无嵌套查询) ===== + for (EnforcementRegistrationVo vo : records) { + // 4.1 执法类别文本 + if (StringUtils.isNotBlank(vo.getLawEnforceCategory()) && dictMap.containsKey(vo.getLawEnforceCategory())) { + vo.setLawEnforceCategoryText(dictMap.get(vo.getLawEnforceCategory())); + } + + // 4.2 投诉标记 + vo.setComOrOpi(complainedIds.contains(vo.getId()) ? 1 : 0); + + // 4.3 超时天数 + if (vo.getEnforcementTime() != null) { + Instant instant = vo.getEnforcementTime().toInstant(); + LocalDate startDate = instant.atZone(ZoneId.systemDefault()).toLocalDate(); + vo.setOutTimeDayNum(ChronoUnit.DAYS.between(startDate, LocalDate.now())); + } + + // 4.4 执法人员1格式化展示 + if (StringUtils.isNotBlank(vo.getLawEnforcerId())) { + try { + SysUser user = userMap.get(Convert.toLong(vo.getLawEnforcerId())); + if (user != null) { + vo.setLawEnforcerDisplay(formatEnforcerDisplay(user)); + } + } catch (Exception ignored) {} + } + + // 4.5 执法人员2列表格式化展示 + if (StringUtils.isNotBlank(vo.getLawEnforcerIdTwo())) { + List lawTwoList = new ArrayList<>(); + for (String idStr : vo.getLawEnforcerIdTwo().split(",")) { + try { + SysUser user = userMap.get(Convert.toLong(idStr.trim())); + if (user != null) { + lawTwoList.add(formatEnforcerDisplay(user)); + } + } catch (Exception ignored) {} + } + vo.setLawEnforcer2List(lawTwoList); + } + } + + return TableDataInfo.build(result); + } + + /** + * 格式化执法人员展示文本:姓名 + 执法证号(无证号则展示脱敏手机号) + */ + private String formatEnforcerDisplay(SysUser user) { + String certNum = user.getLawCertificateNum(); + if (StringUtils.isNotBlank(certNum)) { + return user.getUserName() + " " + certNum; + } + // 无执法证号时展示脱敏手机号 + String phone = user.getPhonenumber(); + if (StringUtils.isNotBlank(phone) && phone.length() >= 7) { + phone = phone.substring(0, 3) + "****" + phone.substring(phone.length() - 4); + } + return user.getUserName() + " " + (phone != null ? phone : ""); + } + + /** + * 企业端查询条件构建器 + * 含: 企业号过滤、已提交过滤、日期过滤、关键字模糊搜索 + */ + private LambdaQueryWrapper buildEnterpriseQueryWrapper(EnforcementRegistrationBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + // 只查已提交的记录 + lqw.eq(EnforcementRegistration::getIsSubmit, 1); + // 企业统一信用号过滤 + lqw.eq(StringUtils.isNotBlank(bo.getEnterpriseNumber()), EnforcementRegistration::getEnterpriseNumber, bo.getEnterpriseNumber()); + // 关键字模糊搜索(搜索执法事项、执法单位名称、执法人员姓名等) + String searchValue = bo.getSearchValue(); + if (StringUtils.isNotBlank(searchValue)) { + lqw.and(w -> w + .like(EnforcementRegistration::getLawEnforcementItemText, searchValue) + .or().like(EnforcementRegistration::getBureauDeptName, searchValue) + .or().like(EnforcementRegistration::getLawEnforcer, searchValue) + .or().like(EnforcementRegistration::getEnterpriseName, searchValue) + ); + } + // 日期类型筛选 + if (bo.getDateType() != null) { + LocalDate now = LocalDate.now(); + LocalDate startDate; + switch (bo.getDateType()) { + case 1: // 本月 + startDate = now.withDayOfMonth(1); + break; + case 2: // 本季 + int quarterStartMonth = (now.getMonthValue() - 1) / 3 * 3 + 1; + startDate = now.withMonth(quarterStartMonth).withDayOfMonth(1); + break; + case 3: // 本年 + startDate = now.withDayOfYear(1); + break; + default: + startDate = null; + } + if (startDate != null) { + lqw.ge(EnforcementRegistration::getEnforcementTime, java.sql.Date.valueOf(startDate)); + } + } + // 指定月份筛选 格式: "YYYY-MM" + if (StringUtils.isNotBlank(bo.getDateSearch())) { + String yearMonth = bo.getDateSearch(); + lqw.apply("DATE_FORMAT(enforcement_time, '%Y-%m') = {0}", yearMonth); + } + // 默认按执法时间倒序 + lqw.orderByDesc(EnforcementRegistration::getEnforcementTime); + return lqw; + } + /** * 新增企业端-执法登记记录 * diff --git a/zdxt-web-client/zdxt-enforcement-code-app/src/api/enterprise/index.js b/zdxt-web-client/zdxt-enforcement-code-app/src/api/enterprise/index.js index 1e329b7f..169aeee0 100644 --- a/zdxt-web-client/zdxt-enforcement-code-app/src/api/enterprise/index.js +++ b/zdxt-web-client/zdxt-enforcement-code-app/src/api/enterprise/index.js @@ -18,7 +18,7 @@ export const getEnterpriseMerchantAuthorization = (params, success, error) => _g //查询企业二维码 export const queryEnterpriseInformationQrCode = (enterpriseNumber, success, error) => _get(enterpriseAppBaseUrl+"/enterpriseInfo/getQrCode/"+enterpriseNumber,null,success,error) -//查询企业执法登记列表-企业端修改联合检查查询语句 +//查询企业执法登记列表-企业端(含投诉标记、字典翻译、超时计算等) export const getEnterpriseEnforcementRegistrationList = (params, success, error) => _get(enterpriseAppBaseUrl+"/enforcement_registration/getEnterpriseEnforcementRegistrationList",params,success,error) //深i企登录-暂时没有环境调通 diff --git a/zdxt-web-client/zdxt-enforcement-code-app/src/router/enterprise-app/ent-main-router.js b/zdxt-web-client/zdxt-enforcement-code-app/src/router/enterprise-app/ent-main-router.js index 4ba0e405..f243f7a6 100644 --- a/zdxt-web-client/zdxt-enforcement-code-app/src/router/enterprise-app/ent-main-router.js +++ b/zdxt-web-client/zdxt-enforcement-code-app/src/router/enterprise-app/ent-main-router.js @@ -24,12 +24,12 @@ const routes = [ name: "enterpriseQrCode", component: () => import("@/views/enterprise/qrCode.vue"), }, - // // 执法监督码 - // { - // path: "/enterprise/registrationList", - // name: "registrationList", - // component: () => import("@/views/enterprise/registrationList.vue"), - // } + // 执法监督码 + { + path: "/enterprise/enforcementRegistrationList", + name: "enforcementRegistrationList", + component: () => import("@/views/enterprise/enforcementRegistrationList.vue"), + } ]; export {routes}; diff --git a/zdxt-web-client/zdxt-enforcement-code-app/src/views/enterprise/enforcementRegistrationList.vue b/zdxt-web-client/zdxt-enforcement-code-app/src/views/enterprise/enforcementRegistrationList.vue index 562470d1..a6512841 100644 --- a/zdxt-web-client/zdxt-enforcement-code-app/src/views/enterprise/enforcementRegistrationList.vue +++ b/zdxt-web-client/zdxt-enforcement-code-app/src/views/enterprise/enforcementRegistrationList.vue @@ -1,11 +1,417 @@ - + +
+ 全部 + 本月 + 本季 + 本年 + 筛选 +
- - diff --git a/zdxt-web-client/zdxt-enforcement-code-app/src/views/enterprise/enterpriseHomeV2.vue b/zdxt-web-client/zdxt-enforcement-code-app/src/views/enterprise/enterpriseHomeV2.vue index 32b6df97..0eb83ded 100644 --- a/zdxt-web-client/zdxt-enforcement-code-app/src/views/enterprise/enterpriseHomeV2.vue +++ b/zdxt-web-client/zdxt-enforcement-code-app/src/views/enterprise/enterpriseHomeV2.vue @@ -75,7 +75,7 @@
-
+

历史执法信息

@@ -151,9 +151,9 @@ const showEnterpriseQRCode = async () => { }); }; -const toRegistrationListView = async () => { +const toEnforcementRegistrationListView = async () => { router.push({ - path: "/enterprise/registrationList", + path: "/enterprise/enforcementRegistrationList", }); } const toDemoList = () => {