From 5ef1d3ce50c48a55e3afb3e7ff83a678f5d2b81c Mon Sep 17 00:00:00 2001 From: niujiyi <18272501226@163.com> Date: Wed, 13 May 2026 11:37:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=81=E4=B8=9A=E7=AB=AF-=E6=8A=95=E8=AF=89?= =?UTF-8?q?=E4=BA=8B=E9=A1=B9=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AppEnterpriseComplaintController.java | 11 +- .../enterprise/AppEnterpriseComplaintBo.java | 10 + .../enterprise/AppEnterpriseComplaintVo.java | 31 +++ .../mapper/EnforcementRegistrationMapper.java | 2 +- .../AppEnterpriseComplaintMapper.java | 44 +++ .../IAppEnterpriseComplaintService.java | 7 +- .../AppEnterpriseComplaintServiceImpl.java | 263 +++++++++++++++--- .../AppEnterpriseComplaintMapper.xml | 157 +++++++++++ 8 files changed, 479 insertions(+), 46 deletions(-) create mode 100644 zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/AppEnterpriseComplaintMapper.xml diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEnterpriseComplaintController.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEnterpriseComplaintController.java index 5232451a..ba7667d4 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEnterpriseComplaintController.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEnterpriseComplaintController.java @@ -7,6 +7,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; +import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; @@ -66,12 +67,18 @@ public class AppEnterpriseComplaintController extends BaseController { /** * 企业端-投诉建议-查询行政和非行政未被投诉列表 - * @param - * @return + * @param bo 查询条件(包含企业信用代码 enterpriseNumber) + * @param pageQuery 分页参数 + * @return 分页结果 */ @ApiResponse(description = "投诉建议-行政和非行政未被投诉列表") @GetMapping("/listNotComplaint") public TableDataInfo listNotComplaint(@ModelAttribute AppEnterpriseComplaintBo bo, PageQuery pageQuery) { + // 校验企业信用代码 + if (StringUtils.isBlank(bo.getEnterpriseNumber())) { + throw new IllegalArgumentException("企业信用代码不能为空"); + } + TableDataInfo list = appEnterpriseComplaintService.getAllCheckList(bo, pageQuery); return list; } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/enterprise/AppEnterpriseComplaintBo.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/enterprise/AppEnterpriseComplaintBo.java index 808fe863..bb801973 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/enterprise/AppEnterpriseComplaintBo.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/enterprise/AppEnterpriseComplaintBo.java @@ -149,6 +149,16 @@ public class AppEnterpriseComplaintBo extends BaseEntity { */ private Long recordType; + /** + * 开始时间(执法时间范围起始) + */ + private Date beginTime; + + /** + * 结束时间(执法时间范围结束) + */ + private Date endTime; + /** * 文件列表- */ diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/enterprise/AppEnterpriseComplaintVo.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/enterprise/AppEnterpriseComplaintVo.java index 872f2c04..e47fdda3 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/enterprise/AppEnterpriseComplaintVo.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/enterprise/AppEnterpriseComplaintVo.java @@ -170,6 +170,37 @@ public class AppEnterpriseComplaintVo implements Serializable { @ExcelProperty(value = "数据类型 0行政 1 非行政") private Long recordType; + /** + * 执法类别代码(用于显示转换后的中文名称) + */ + @ExcelProperty(value = "执法类别") + private String checkCategoryCode; + + /** + * 执法人员1 ID + */ + private String lawEnforcerId; + + /** + * 其他执法人员姓名 + */ + private String lawEnforcerTwo; + + /** + * 其他执法人员电话 + */ + private String linkmanTelTwo; + + /** + * 其他执法人员2 ID + */ + private String lawEnforcerIdTwo; + + /** + * 其他执法人员2展示列表(姓名+执法证号) + */ + private List lawEnforcer2List; + /** * 文件列表 */ diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementRegistrationMapper.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementRegistrationMapper.java index c194ae89..dd0b1039 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementRegistrationMapper.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementRegistrationMapper.java @@ -26,6 +26,6 @@ public interface EnforcementRegistrationMapper extends BaseMapperPlus selectEnforcementRegistrationPage(@Param("page") Page page, @Param("bo") EnforcementRegistrationQueryBo dto); + IPage selectEnforcementRegistrationPage(@Param("page") Page page, @Param("bo") EnforcementRegistrationQueryBo bo); } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/enterprise/AppEnterpriseComplaintMapper.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/enterprise/AppEnterpriseComplaintMapper.java index bd682e37..9cd2848c 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/enterprise/AppEnterpriseComplaintMapper.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/enterprise/AppEnterpriseComplaintMapper.java @@ -1,8 +1,52 @@ package com.zdxt.enforcementcode.mapper.enterprise; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zdxt.enforcementcode.domain.EnterpriseComplaint; import com.zdxt.enforcementcode.domain.vo.enterprise.AppEnterpriseComplaintVo; +import org.apache.ibatis.annotations.Param; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import java.util.Date; +import java.util.List; + public interface AppEnterpriseComplaintMapper extends BaseMapperPlus { + + /** + * 查询行政和非行政未被投诉的检查记录列表(UNION ALL合并两个表) + * @param enterpriseNumber 企业信用代码 + * @param searchValue 关键字搜索 + * @param checkCategoryCode 执法类别代码 + * @param beginTime 开始时间 + * @param endTime 结束时间 + * @param deptList 部门ID列表 + * @return 检查结果列表 + */ + List selectAllCheckList( + @Param("enterpriseNumber") String enterpriseNumber, + @Param("searchValue") String searchValue, + @Param("checkCategoryCode") String checkCategoryCode, + @Param("beginTime") Date beginTime, + @Param("endTime") Date endTime, + @Param("deptList") List deptList, + Page page + ); + + /** + * 统计行政和非行政未被投诉的检查记录总数 + * @param enterpriseNumber 企业信用代码 + * @param searchValue 关键字搜索 + * @param checkCategoryCode 执法类别代码 + * @param beginTime 开始时间 + * @param endTime 结束时间 + * @param deptList 部门ID列表 + * @return 总数 + */ + Long countAllCheckList( + @Param("enterpriseNumber") String enterpriseNumber, + @Param("searchValue") String searchValue, + @Param("checkCategoryCode") String checkCategoryCode, + @Param("beginTime") Date beginTime, + @Param("endTime") Date endTime, + @Param("deptList") List deptList + ); } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/IAppEnterpriseComplaintService.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/IAppEnterpriseComplaintService.java index 8583adce..28adb09c 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/IAppEnterpriseComplaintService.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/IAppEnterpriseComplaintService.java @@ -57,8 +57,9 @@ public interface IAppEnterpriseComplaintService { /** * 企业端-投诉建议查询行政和非行政未被投诉列表 - * @param pageQuery - * @return + * @param bo 查询条件(包含企业信用代码、关键字、时间范围等) + * @param pageQuery 分页参数 + * @return 分页结果 */ - TableDataInfo getAllCheckList(AppEnterpriseComplaintBo bo,PageQuery pageQuery); + TableDataInfo getAllCheckList(AppEnterpriseComplaintBo bo, PageQuery pageQuery); } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/impl/AppEnterpriseComplaintServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/impl/AppEnterpriseComplaintServiceImpl.java index 5c5beada..c5bfd695 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/impl/AppEnterpriseComplaintServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/impl/AppEnterpriseComplaintServiceImpl.java @@ -26,11 +26,16 @@ import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.system.domain.vo.SysDeptVo; +import org.dromara.system.domain.vo.SysDictDataVo; +import org.dromara.system.service.ISysDeptService; +import org.dromara.system.service.ISysDictDataService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.stream.Collectors; /** * 企业执法-在线投诉Service业务层处理 @@ -51,6 +56,12 @@ public class AppEnterpriseComplaintServiceImpl implements IAppEnterpriseComplain @Autowired private ZdxtFileMapper zdxtFileMapper; + @Autowired + private ISysDictDataService dictTypeService; + + @Autowired + private ISysDeptService deptService; + /** * 企业端-投诉建议详情 * @@ -181,59 +192,231 @@ public class AppEnterpriseComplaintServiceImpl implements IAppEnterpriseComplain */ @Override public TableDataInfo getAllCheckList(AppEnterpriseComplaintBo bo, PageQuery pageQuery) { - // 构建查询条件 - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + // 1. 调用 setDept() 处理部门过滤(从投诉事项编码提取信用代码查部门) + List deptList = setDept(bo.getComplaintItemCodes()); + + // 2. 获取"check_category"字典数据,构建Map映射 + Map checkCategoryMap = getCheckCategoryMap(); + + // 3. 处理关键字搜索(匹配执法类别中文名称) + String checkCategoryCode = processSearchValue(bo.getSearchValue(), checkCategoryMap); + + // 4. 调用 Mapper 查询数据库 + Page page = pageQuery.build(); + List list = baseMapper.selectAllCheckList( + bo.getEnterpriseNumber(), + bo.getSearchValue(), + checkCategoryCode, + bo.getBeginTime(), + bo.getEndTime(), + deptList, + page + ); + + // 5. 设置总数 + Long total = baseMapper.countAllCheckList( + bo.getEnterpriseNumber(), + bo.getSearchValue(), + checkCategoryCode, + bo.getBeginTime(), + bo.getEndTime(), + deptList + ); + page.setRecords(list); + page.setTotal(total); + + // 6. 对返回数据进行转换 + List records = page.getRecords(); + if (records != null && !records.isEmpty()) { + convertResultData(records, checkCategoryMap); + } - // 根据 relId 过滤 - lqw.eq(StringUtils.isNotBlank(bo.getRelId()), EnterpriseComplaint::getRelId, bo.getRelId()); + return TableDataInfo.build(page); + } - // 根据搜索值模糊查询(问题描述、联系人、企业名称等) - if (StringUtils.isNotBlank(bo.getSearchValue())) { - lqw.and(wrapper -> wrapper - .like(EnterpriseComplaint::getProblemDescription, bo.getSearchValue()) - .or() - .like(EnterpriseComplaint::getLinkman, bo.getSearchValue()) - .or() - .like(EnterpriseComplaint::getEnterpriseName, bo.getSearchValue()) - ); + /** + * 处理部门过滤:从投诉事项编码提取信用代码查部门 + * @param complaintItemCodes 投诉事项编码,多个逗号隔开 + * @return 部门ID列表 + */ + private List setDept(String complaintItemCodes) { + // 判断 complaintItemCodes 是否为空 + if (StringUtils.isBlank(complaintItemCodes)) { + return Collections.emptyList(); } - // 根据执法类型过滤 - lqw.eq(bo.getEnforceType() != null, EnterpriseComplaint::getEnforceType, bo.getEnforceType()); + // 解析编码字符串为 List + String[] codes = complaintItemCodes.split(","); + List deptList = new ArrayList<>(); - // 根据投诉类型过滤 - lqw.eq(bo.getComplaintType() != null, EnterpriseComplaint::getComplaintType, bo.getComplaintType()); + // 遍历每个编码 + for (String c : codes) { + if (StringUtils.isBlank(c)) { + continue; + } - // 根据数据类型过滤(0行政 1非行政) - lqw.eq(bo.getRecordType() != null, EnterpriseComplaint::getRecordType, bo.getRecordType()); + try { + // 截取前18位作为信用代码(统一社会信用代码固定18位) + String creditCode = c.trim(); + if (creditCode.length() > 18) { + creditCode = creditCode.substring(0, 18); + } + SysDeptVo dept = deptService.selectDeptByCreditcode(creditCode); - // 根据状态过滤 - lqw.eq(bo.getStatus() != null, EnterpriseComplaint::getStatus, bo.getStatus()); + // 查询结果是否为空 + if (dept != null && StringUtils.isNotBlank(dept.getDeptId())) { + // 添加到 deptList + deptList.add(dept.getDeptId()); + } + } catch (Exception e) { + log.warn("根据信用代码[{}]查询部门失败: {}", c, e.getMessage()); + } + } - // 按创建时间降序排列 - lqw.orderByDesc(EnterpriseComplaint::getCreateTime); + // 所有编码处理完成,设置 param.setDeptList(deptList) + return deptList; + } - // 执行分页查询 - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + /** + * 获取执法类别字典映射 + * @return key=字典值, value=字典标签 + */ + private Map getCheckCategoryMap() { + List dictList = dictTypeService.selectDictDataByType("check_category"); + if (dictList == null || dictList.isEmpty()) { + return Collections.emptyMap(); + } + return dictList.stream() + .collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel, (a, b) -> a)); + } - // 处理字典转换和执法人员信息(如果需要) - List records = result.getRecords(); - if (records != null && !records.isEmpty()) { - records.forEach(vo -> { - // 这里可以添加字典转换逻辑 - // 例如:执法类型、投诉类型等的字典值转换 - - // 如果有附件,查询附件列表 - if (vo.getId() != null) { - LambdaQueryWrapper fileLqw = Wrappers.lambdaQuery(); - fileLqw.eq(ZdxtFile::getBusinessId, vo.getId()); - List fileList = zdxtFileMapper.selectVoList(fileLqw); - vo.setFileList(fileList); + /** + * 处理关键字搜索,匹配执法类别中文名称 + * @param searchValue 搜索关键字 + * @param checkCategoryMap 执法类别字典映射 + * @return 匹配的执法类别代码 + */ + private String processSearchValue(String searchValue, Map checkCategoryMap) { + if (StringUtils.isBlank(searchValue) || checkCategoryMap.isEmpty()) { + return null; + } + + // 遍历字典,查找匹配的执法类别代码 + for (Map.Entry entry : checkCategoryMap.entrySet()) { + if (entry.getValue().contains(searchValue)) { + return entry.getKey(); + } + } + return null; + } + + /** + * 转换结果数据 + * @param records 查询结果列表 + * @param checkCategoryMap 执法类别字典映射 + */ + private void convertResultData(List records, Map checkCategoryMap) { + for (AppEnterpriseComplaintVo vo : records) { + // 执法类别代码 → 中文名称 + if (StringUtils.isNotBlank(vo.getCheckCategoryCode()) && checkCategoryMap.containsKey(vo.getCheckCategoryCode())) { + vo.setCheckCategoryCode(checkCategoryMap.get(vo.getCheckCategoryCode())); + } + + // 执法人员ID → 姓名+执法证号/加密手机号 + if (StringUtils.isNotBlank(vo.getLawEnforcerId())) { + vo.setLinkman(formatLawEnforcer(vo.getLawEnforcerId(), vo.getLinkman(), vo.getLinkmanTel())); + } + + // 其他执法人员ID → 姓名+证件号列表 + if (StringUtils.isNotBlank(vo.getLawEnforcerIdTwo())) { + List enforcerList = formatOtherLawEnforcers( + vo.getLawEnforcerIdTwo(), + vo.getLawEnforcerTwo(), + vo.getLinkmanTelTwo() + ); + vo.setLawEnforcer2List(enforcerList); + } + + // 查询附件列表 + if (vo.getId() != null) { + LambdaQueryWrapper fileLqw = Wrappers.lambdaQuery(); + fileLqw.eq(ZdxtFile::getBusinessId, vo.getId()); + List fileList = zdxtFileMapper.selectVoList(fileLqw); + vo.setFileList(fileList); + } + } + } + + /** + * 格式化执法人员信息 + * @param enforcerId 执法人员ID + * @param enforcerName 执法人员姓名 + * @param enforcerTel 执法人员电话 + * @return 格式化后的执法人员信息 + */ + private String formatLawEnforcer(String enforcerId, String enforcerName, String enforcerTel) { + StringBuilder sb = new StringBuilder(); + if (StringUtils.isNotBlank(enforcerName)) { + sb.append(enforcerName); + } + if (StringUtils.isNotBlank(enforcerTel)) { + if (sb.length() > 0) { + sb.append("-"); + } + // 加密手机号或执法证号 + sb.append(encryptPhone(enforcerTel)); + } + return sb.toString(); + } + + /** + * 格式化其他执法人员列表 + * @param enforcerIds 其他执法人员ID(多个逗号分隔) + * @param enforcerNames 其他执法人员姓名(多个逗号分隔) + * @param enforcerTels 其他执法人员电话(多个逗号分隔) + * @return 格式化后的执法人员列表 + */ + private List formatOtherLawEnforcers(String enforcerIds, String enforcerNames, String enforcerTels) { + List result = new ArrayList<>(); + + if (StringUtils.isBlank(enforcerIds)) { + return result; + } + + String[] idArray = enforcerIds.split(","); + String[] nameArray = enforcerNames != null ? enforcerNames.split(",") : new String[]{}; + String[] telArray = enforcerTels != null ? enforcerTels.split(",") : new String[]{}; + + for (int i = 0; i < idArray.length; i++) { + StringBuilder sb = new StringBuilder(); + if (i < nameArray.length && StringUtils.isNotBlank(nameArray[i])) { + sb.append(nameArray[i]); + } + if (i < telArray.length && StringUtils.isNotBlank(telArray[i])) { + if (sb.length() > 0) { + sb.append("-"); } - }); + sb.append(telArray[i]); + } + if (sb.length() > 0) { + result.add(sb.toString()); + } } - return TableDataInfo.build(result); + return result; + } + + /** + * 加密手机号 + * @param phone 手机号 + * @return 加密后的手机号 + */ + private String encryptPhone(String phone) { + if (StringUtils.isBlank(phone) || phone.length() < 7) { + return phone; + } + // 将中间4位替换为**** + return phone.substring(0, 3) + "****" + phone.substring(7); } } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/AppEnterpriseComplaintMapper.xml b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/AppEnterpriseComplaintMapper.xml new file mode 100644 index 00000000..6106b1a1 --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/AppEnterpriseComplaintMapper.xml @@ -0,0 +1,157 @@ + + + + + + + + + + +