diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnforcementRegistrationController.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnforcementRegistrationController.java index 5f1fe540..caff83bb 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnforcementRegistrationController.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnforcementRegistrationController.java @@ -1,31 +1,30 @@ package com.zdxt.enforcementcode.controller.app.enforcement; +import cn.dev33.satoken.annotation.SaIgnore; import com.zdxt.enforcementcode.common.util.CommonUtil; -import com.zdxt.enforcementcode.domain.EnforcementRegistration; -import com.zdxt.enforcementcode.domain.EnterpriseLawEnforcement; -import com.zdxt.enforcementcode.domain.bo.EnforcementLawCheckPlanBo; import com.zdxt.enforcementcode.domain.bo.EnforcementRegistrationBo; import com.zdxt.enforcementcode.domain.bo.EnterpriseLawEnforcementBo; +import com.zdxt.enforcementcode.domain.bo.enterprise.AppEnterpriseComplaintBo; import com.zdxt.enforcementcode.domain.vo.EnforcementRegistrationVo; import com.zdxt.enforcementcode.domain.vo.EnterpriseEvaluateVo; import com.zdxt.enforcementcode.domain.vo.EnterpriseLawEnforcementVo; +import com.zdxt.enforcementcode.domain.vo.enterprise.AppEnterpriseComplaintVo; import com.zdxt.enforcementcode.service.IEnforcementRegistrationService; import com.zdxt.enforcementcode.service.IEnterpriseEvaluateService; import com.zdxt.enforcementcode.service.IEnterpriseLawEnforcementService; +import com.zdxt.enforcementcode.service.enterprise.IAppEnterpriseComplaintService; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.R; import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.core.validate.AddGroup; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.helper.DataPermissionHelper; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.web.core.BaseController; -import org.dromara.system.domain.SysDept; -import org.dromara.system.domain.SysDictData; import org.dromara.system.domain.bo.SysDictDataBo; import org.dromara.system.domain.vo.SysDeptVo; import org.dromara.system.domain.vo.SysDictDataVo; @@ -34,9 +33,12 @@ import org.dromara.system.service.ISysDeptService; import org.dromara.system.service.ISysDictDataService; import org.dromara.system.service.ISysUserService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; import java.util.*; /** @@ -63,6 +65,9 @@ public class AppEnforcementRegistrationController extends BaseController { @Autowired private IEnterpriseEvaluateService enterpriseEvaluateService; + + @Autowired + private IAppEnterpriseComplaintService appEnterpriseComplaintService; /** * 执法端-执法登记新增保存 */ @@ -91,11 +96,9 @@ public class AppEnforcementRegistrationController extends BaseController { */ @GetMapping("/queryList") @ResponseBody - public R queryList(EnforcementRegistrationBo bo, PageQuery pageQuery) - { + public R queryList(EnforcementRegistrationBo bo, PageQuery pageQuery) { // dateType本单位 0 全市 1 if (Objects.nonNull(bo.getUserId()) && bo.getDateType()==0) { - //UserBean userByUser = userApi.getUserByUserId(bo.getUserId()); bo.setDeptId(LoginHelper.getDeptId() == null ? null : LoginHelper.getDeptId()); SysDeptVo bureauDept = sysDeptService.iterationDeptParentToBureau(LoginHelper.getDeptId()); @@ -125,6 +128,7 @@ public class AppEnforcementRegistrationController extends BaseController { public R editSave(@RequestBody EnforcementRegistrationBo bo) { int resNum = 0; + bo.setIsSubmit(1L); if (StringUtils.isNotEmpty(bo.getId())) { resNum = enforcementRegistrationService.updateEnforcementRegistration(bo); } else { @@ -142,7 +146,25 @@ public class AppEnforcementRegistrationController extends BaseController { return toAjax(resNum); } - + /** + * 执法端-行政执法记录修改 + * @param bo + * @return + */ + @PostMapping("/editInfo") + @ResponseBody + public R editInfo(@RequestBody EnforcementRegistrationBo bo) + { + bo.setIsSubmit(0L); + int resNum = enforcementRegistrationService.updateEnforcementRegistration(bo); + if (StringUtils.isNotEmpty(bo.getLawId())) { + EnterpriseLawEnforcementBo law = new EnterpriseLawEnforcementBo(); + law.setId(bo.getLawId()); + law.setIsReg(1L); + resNum = enterpriseLawEnforcementService.updateEnterpriseLawEnforcement(law); + } + return toAjax(resNum); + } /** * 执法端-联合执法查询补录(用于补录时关联) * 根据企业统一信用号, 搜索出该企业前推一小时内的联合执法. @@ -424,4 +446,283 @@ public class AppEnforcementRegistrationController extends BaseController { return R.ok(result); } + + /** + * 查询执法端-执法登记列表 + */ + @SaIgnore + @PostMapping("/list") + @ResponseBody + public TableDataInfo list(@RequestBody EnforcementRegistrationBo bo, PageQuery pageQuery) { + long startTime = System.currentTimeMillis(); + + // 使用 DataPermissionHelper.ignore() 跳过数据权限检查,避免 token 冻结导致的认证错误 + List list = DataPermissionHelper.ignore(() -> + enforcementRegistrationService.selectEnforcementRegistrationList(bo, pageQuery) + ); + + if (list == null || list.isEmpty()) { + TableDataInfo emptyResult = new TableDataInfo<>(); + emptyResult.setCode(0); + emptyResult.setRows(new ArrayList<>()); + emptyResult.setTotal(0L); + return emptyResult; + } + + // 1. 批量获取字典数据(只查询一次) + List dicts = getCheckCategoryDicts(); + Map dictMap = buildDictMap(dicts); + + // 2. 收集所有用户ID并批量查询(只查询一次) + List allUserIds = collectAllUserIds(list); + Map userMap = buildUserMap(allUserIds); + + // 3. 批量查询投诉标记(只查询一次) + List recordIds = extractRecordIds(list); + Map complaintMap = buildComplaintMapBatch(recordIds); + + // 4. 在内存中批量填充数据(无数据库查询) + for (EnforcementRegistrationVo vo : list) { + fillComplaintFlagFromMap(vo, complaintMap); + fillCheckCategoryText(vo, dictMap); + fillLawEnforcerInfo(vo, userMap); + fillOutTimeDayNum(vo); + } + + TableDataInfo rspData = new TableDataInfo<>(); + rspData.setCode(0); + rspData.setRows(list); + rspData.setTotal(list.size()); + + long endTime = System.currentTimeMillis(); + log.info("执法登记列表查询耗时: {}ms, 数据量: {}", (endTime - startTime), list.size()); + + return rspData; + } + + /** + * 获取检查类别字典数据 + */ + private List getCheckCategoryDicts() { + SysDictDataBo dictParams = new SysDictDataBo(); + dictParams.setDictType("check_category"); + return sysDictDataService.selectDictDataList(dictParams); + } + + /** + * 构建字典映射表 (dictValue -> dictLabel) + */ + private Map buildDictMap(List dicts) { + Map dictMap = new HashMap<>(); + if (dicts != null) { + for (SysDictDataVo dict : dicts) { + dictMap.put(dict.getDictValue(), dict.getDictLabel()); + } + } + return dictMap; + } + + /** + * 提取所有记录ID + */ + private List extractRecordIds(List list) { + List ids = new ArrayList<>(); + for (EnforcementRegistrationVo vo : list) { + if (vo.getId() != null) { + ids.add(vo.getId()); + } + } + return ids; + } + + /** + * 批量构建投诉标记映射 (recordId -> hasComplaint) + * 优化:使用 IN 查询一次性获取所有投诉记录 + */ + private Map buildComplaintMapBatch(List recordIds) { + Map complaintMap = new HashMap<>(); + if (recordIds.isEmpty()) { + return complaintMap; + } + + // 使用 IN 批量查询所有投诉记录 + List complaints = DataPermissionHelper.ignore(() -> { + AppEnterpriseComplaintBo params = new AppEnterpriseComplaintBo(); + params.setComOrOpi(1L); + return appEnterpriseComplaintService.queryListByIds(recordIds, params); + }); + + // 构建映射:recordId -> 是否有投诉 + if (complaints != null) { + for (AppEnterpriseComplaintVo complaint : complaints) { + complaintMap.put(complaint.getRelId(), true); + } + } + + return complaintMap; + } + + /** + * 收集所有需要查询的用户ID + */ + private List collectAllUserIds(List list) { + Set userIdSet = new HashSet<>(); + for (Object obj : list) { + EnforcementRegistrationVo vo; + if (obj instanceof EnforcementRegistrationVo) { + vo = (EnforcementRegistrationVo) obj; + } else { + continue; + } + + if (StringUtils.isNotEmpty(vo.getLawEnforcerId())) { + try { + userIdSet.add(Long.parseLong(vo.getLawEnforcerId())); + } catch (NumberFormatException ignored) { + } + } + if (StringUtils.isNotEmpty(vo.getLawEnforcerIdTwo())) { + String[] ids = vo.getLawEnforcerIdTwo().split(","); + for (String id : ids) { + if (StringUtils.isNotEmpty(id.trim())) { + try { + userIdSet.add(Long.parseLong(id.trim())); + } catch (NumberFormatException ignored) { + } + } + } + } + } + return new ArrayList<>(userIdSet); + } + + /** + * 构建用户映射表 (userId -> SysUserVo) + */ + private Map buildUserMap(List userIds) { + Map userMap = new HashMap<>(); + if (userIds.isEmpty()) { + return userMap; + } + // 使用 DataPermissionHelper.ignore() 跳过数据权限检查 + List users = DataPermissionHelper.ignore(() -> + sysUserService.selectUserByIds(userIds, null) + ); + if (users != null) { + for (SysUserVo user : users) { + userMap.put(user.getUserId(), user); + } + } + return userMap; + } + + /** + * 从映射表填充投诉标记 + */ + private void fillComplaintFlagFromMap(EnforcementRegistrationVo vo, Map complaintMap) { + boolean hasComplaint = complaintMap.getOrDefault(vo.getId(), false); + vo.setComOrOpi(hasComplaint ? 1 : 0); + } + + /** + * 填充执法类别文本 + */ + private void fillCheckCategoryText(EnforcementRegistrationVo vo, Map dictMap) { + if (StringUtils.isNotEmpty(vo.getCheckCategory())) { + String text = dictMap.get(vo.getCheckCategory()); + if (StringUtils.isNotEmpty(text)) { + vo.setCheckCategoryText(text); + } + } + } + + /** + * 填充执法人员信息 + */ + private void fillLawEnforcerInfo(EnforcementRegistrationVo vo, Map userMap) { + fillLawEnforcer1(vo, userMap); + fillLawEnforcer2(vo, userMap); + } + + /** + * 填充执法人员1信息 + */ + private void fillLawEnforcer1(EnforcementRegistrationVo vo, Map userMap) { + if (StringUtils.isEmpty(vo.getLawEnforcerId())) { + return; + } + try { + Long userId = Long.parseLong(vo.getLawEnforcerId()); + SysUserVo user = userMap.get(userId); + if (user != null) { + String lawCN = buildEnforcerDisplayText(user); + vo.setLawEnforcer(lawCN); + } + } catch (NumberFormatException ignored) { + } + } + + /** + * 填充执法人员2信息列表 + */ + private void fillLawEnforcer2(EnforcementRegistrationVo vo, Map userMap) { + List lawTwoList = new ArrayList<>(); + if (StringUtils.isEmpty(vo.getLawEnforcerIdTwo())) { + vo.setLawEnforcer2List(lawTwoList); + return; + } + + String[] ids = vo.getLawEnforcerIdTwo().split(","); + for (String id : ids) { + if (StringUtils.isEmpty(id.trim())) { + continue; + } + try { + Long userId = Long.parseLong(id.trim()); + SysUserVo user = userMap.get(userId); + if (user != null) { + lawTwoList.add(buildEnforcerDisplayText(user)); + } + } catch (NumberFormatException ignored) { + } + } + vo.setLawEnforcer2List(lawTwoList); + } + + /** + * 构建执法人员展示文本(用户名 + 执法码/加密手机号) + */ + private String buildEnforcerDisplayText(SysUserVo user) { + if (user == null) { + return ""; + } + String userName = user.getUserName(); + String certificateNum = user.getLawCertificateNum(); + + if (StringUtils.isNotEmpty(certificateNum)) { + return userName + " " + certificateNum; + } + + String phone = user.getPhonenumber(); + if (StringUtils.isNotEmpty(phone)) { + return userName + " " + CommonUtil.encryptPhone(phone); + } + + return userName; + } + + /** + * 填充超时天数 + */ + private void fillOutTimeDayNum(EnforcementRegistrationVo vo) { + if (vo.getEnforcementTime() == null) { + vo.setOutTimeDayNum(0L); + return; + } + Instant instant = vo.getEnforcementTime().toInstant(); + ZoneId zoneId = ZoneId.systemDefault(); + LocalDate startDate = instant.atZone(zoneId).toLocalDate(); + long daysBetween = ChronoUnit.DAYS.between(startDate, LocalDate.now()); + vo.setOutTimeDayNum(daysBetween); + } } 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 eee138d6..39e40ad4 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 @@ -65,6 +65,7 @@ public interface EnforcementRegistrationMapper extends BaseMapperPlus selectEnforcementRegistrationList(@Param("bo") EnforcementRegistrationBo bo,@Param("page") Page page); } 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 80651c5c..307d933b 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 @@ -32,6 +32,16 @@ public interface IAppEnterpriseComplaintService { */ TableDataInfo queryPageList(AppEnterpriseComplaintBo bo, PageQuery pageQuery); + List queryList(AppEnterpriseComplaintBo bo); + + /** + * 批量查询投诉记录(根据relId列表) + * + * @param relIds 关联记录ID列表 + * @param bo 查询条件 + * @return 投诉记录列表 + */ + List queryListByIds(List relIds, AppEnterpriseComplaintBo bo); /** * 新增企业执法-在线投诉 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 4d78e62c..f23bbd29 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 @@ -108,6 +108,31 @@ public class AppEnterpriseComplaintServiceImpl implements IAppEnterpriseComplain return TableDataInfo.build(result); } + @Override + public List queryList(AppEnterpriseComplaintBo bo) { + LambdaQueryWrapper lqw =Wrappers.lambdaQuery(); + lqw.eq(EnterpriseComplaint::getRelId,bo.getId()).eq(EnterpriseComplaint::getComOrOpi,bo.getComOrOpi()); + return baseMapper.selectVoList(lqw); + } + + /** + * 批量查询投诉记录(根据relId列表) + * + * @param relIds 关联记录ID列表 + * @param bo 查询条件 + * @return 投诉记录列表 + */ + @Override + public List queryListByIds(List relIds, AppEnterpriseComplaintBo bo) { + if (relIds == null || relIds.isEmpty()) { + return new ArrayList<>(); + } + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.in(EnterpriseComplaint::getRelId, relIds) + .eq(EnterpriseComplaint::getComOrOpi, bo.getComOrOpi()); + return baseMapper.selectVoList(lqw); + } + /** * 新增企业执法-在线投诉 * diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementRegistrationServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementRegistrationServiceImpl.java index 86186c3f..6cf6ac64 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementRegistrationServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementRegistrationServiceImpl.java @@ -423,14 +423,14 @@ public class EnforcementRegistrationServiceImpl implements IEnforcementRegistrat // ===== 2. 批量查询评价信息(仅当 hasEvaluate=1 时) ===== Map evaluateTimeMap = new HashMap<>(); - + // 判断是否需要查询评价时间:只有当前端传入 hasEvaluate=1 时才查询 if (bo.getHasEvaluate() != null && bo.getHasEvaluate() == 1) { // 收集所有已评价的记录ID List evaluatedIds = records.stream() .map(EnforcementRegistrationListVo::getId) .collect(Collectors.toList()); - + // 批量查询评价记录,获取 enforcementId 和 create_time if (CollUtil.isNotEmpty(evaluatedIds)) { List evaluates = evaluateMapper.selectList( @@ -472,7 +472,7 @@ public class EnforcementRegistrationServiceImpl implements IEnforcementRegistrat } vo.setLawEnforcer2List(lawTwoList); } - + // 3.3 设置评价时间(仅当 hasEvaluate=1 且评价时间存在时) if (bo.getHasEvaluate() != null && bo.getHasEvaluate() == 1) { Date evaluateTime = evaluateTimeMap.get(vo.getId()); @@ -741,7 +741,6 @@ public class EnforcementRegistrationServiceImpl implements IEnforcementRegistrat } bo.setUpdateTime(DateUtils.getNowDate()); - bo.setIsSubmit(1L); String district = ""; String street = ""; if (StringUtils.isNotEmpty(bo.getEnterpriseAddress())) { diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementRegistrationMapper.xml b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementRegistrationMapper.xml index 209d0b18..315534a4 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementRegistrationMapper.xml +++ b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementRegistrationMapper.xml @@ -437,7 +437,7 @@ - select * from @@ -545,10 +545,11 @@ and bureau_dept_id = #{bo.bureauDeptId} - - + + GROUP BY enterprise_number order by enforcement_time desc) t