Browse Source

执法端-计划

dev-V1.0.1
庄锐波 5 months ago
parent
commit
6656c30919
  1. 39
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/report/RegistrationController.java
  2. 111
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/report/RegistrationExportV2Vo.java
  3. 8
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementRegistrationMapper.java
  4. 19
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/IEnforcementRegistrationReport.java
  5. 186
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/impl/EnforcementRegistrationReportImpl.java
  6. 118
      zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementRegistrationReportMapper.xml
  7. 27
      zdxt-web-client/zdxt-admin-plus-ui/src/api/efcode/report/registration.ts
  8. 52
      zdxt-web-client/zdxt-admin-plus-ui/src/views/efcode/report/registration/indexList.vue

39
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/report/RegistrationController.java

@ -5,6 +5,7 @@ import com.zdxt.enforcementcode.domain.vo.EnforcementRegistrationVo;
import com.zdxt.enforcementcode.domain.vo.report.ChartDataVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationAnalysisVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationExportVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationExportV2Vo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationStatisticsVo;
import com.zdxt.enforcementcode.report.IEnforcementRegistrationReport;
import jakarta.servlet.http.HttpServletResponse;
@ -45,24 +46,50 @@ public class RegistrationController {
}
/**
* 接口2:涉企执法统计列表(分页)
* 接口2-V1:涉企执法统计列表(全量加载+Java字典序排序+手动分页,暂保留)
*/
@GetMapping("/listV1")
public TableDataInfo<EnforcementRegistrationVo> listV1(EnforcementRegistrationBo bo, PageQuery pageQuery) {
return registrationReport.listForV1(bo, pageQuery);
}
/**
* 接口2-V2:涉企执法统计列表(SQL JOIN字典表排序 + 服务端分页,当前使用)
*/
@GetMapping("/list")
public TableDataInfo<EnforcementRegistrationVo> list(EnforcementRegistrationBo bo, PageQuery pageQuery) {
return registrationReport.list(bo, pageQuery);
return registrationReport.listForV2(bo, pageQuery);
}
/**
* 接口3-V1:涉企执法统计列表导出(旧系统格式,10列,暂保留)
*/
@PostMapping("/exportListV1")
public void exportListV1(EnforcementRegistrationBo bo, HttpServletResponse response) {
try {
List<RegistrationExportVo> list = registrationReport.exportListV1(bo);
ExcelUtil.exportExcel(list, "涉企执法统计", RegistrationExportVo.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) {
}
}
}
/**
* 接口3:涉企执法统计列表导出(旧系统格式,10列)
* 接口3-V2:涉企执法统计列表导出(15列,V2排序,当前使用)
*/
@PostMapping("/exportList")
public void exportList(EnforcementRegistrationBo bo, HttpServletResponse response) {
try {
List<RegistrationExportVo> list = registrationReport.exportList(bo);
ExcelUtil.exportExcel(list, "涉企执法统计", RegistrationExportVo.class, response);
List<RegistrationExportV2Vo> list = registrationReport.exportListV2(bo);
ExcelUtil.exportExcel(list, "涉企执法情况", RegistrationExportV2Vo.class, response);
} catch (Exception e) {
log.error("导出涉企执法统计Excel异常", e);
// 重置response,避免content-type冲突
response.reset();
response.setContentType("application/json; charset=utf-8");
try {

111
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/report/RegistrationExportV2Vo.java

@ -0,0 +1,111 @@
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 V2(与列表展示一致,共15列)
*
* @author zdxt
*/
@Data
@ExcelIgnoreUnannotated
public class RegistrationExportV2Vo 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 lawEnforcementItemText;
/**
* 执法时间
*/
@ExcelProperty(value = "执法时间")
private String enforcementTime;
/**
* 联合执法
*/
@ExcelProperty(value = "联合执法")
private String hasUnion;
/**
* 受委托
*/
@ExcelProperty(value = "受委托")
private String hasAuto;
/**
* 委托单位
*/
@ExcelProperty(value = "委托单位")
private String entrustDeptName;
/**
* 行政执法类别
*/
@ExcelProperty(value = "行政执法类别")
private String lawEnforceCategory;
/**
* 任务来源
*/
@ExcelProperty(value = "任务来源")
private String checkCategory;
/**
* 未扫码原因
*/
@ExcelProperty(value = "未扫码原因")
private String noScanReason;
/**
* 是否投诉
*/
@ExcelProperty(value = "是否投诉")
private String isComplaint;
}

8
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementRegistrationMapper.java

@ -99,6 +99,14 @@ public interface EnforcementRegistrationMapper extends BaseMapperPlus<Enforcemen
@Param("bo") EnforcementRegistrationBo bo,
@Param("dataFilter") String dataFilter);
/**
* 报表-分页列表查询V2(JOIN字典表按dict_sort排序,依赖district/street已回填)
*/
@EfcodeDataFilter
IPage<EnforcementRegistrationVo> selectReportPageV2(@Param("page") Page<EnforcementRegistrationVo> page,
@Param("bo") EnforcementRegistrationBo bo,
@Param("dataFilter") String dataFilter);
/**
* 报表-全量列表查询(用于统计/导出)
*/

19
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/IEnforcementRegistrationReport.java

@ -5,6 +5,7 @@ import com.zdxt.enforcementcode.domain.vo.EnforcementRegistrationVo;
import com.zdxt.enforcementcode.domain.vo.report.ChartDataVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationAnalysisVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationExportVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationExportV2Vo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationStatisticsVo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -24,9 +25,14 @@ public interface IEnforcementRegistrationReport {
RegistrationStatisticsVo statistics(EnforcementRegistrationBo bo);
/**
* 统计列表(分页)
* 统计列表V1(全量加载 + Java字典序排序 + 手动分页,兼容旧系统enterprise_address解析)
*/
TableDataInfo<EnforcementRegistrationVo> list(EnforcementRegistrationBo bo, PageQuery pageQuery);
TableDataInfo<EnforcementRegistrationVo> listForV1(EnforcementRegistrationBo bo, PageQuery pageQuery);
/**
* 统计列表V2(SQL JOIN字典表排序 + 服务端分页,依赖district/street字段已回填)
*/
TableDataInfo<EnforcementRegistrationVo> listForV2(EnforcementRegistrationBo bo, PageQuery pageQuery);
/**
* 统计列表(全量,用于导出)
@ -34,9 +40,14 @@ public interface IEnforcementRegistrationReport {
List<EnforcementRegistrationVo> listAll(EnforcementRegistrationBo bo);
/**
* 导出列表(旧系统格式,10列精简)
* 导出列表V1(旧系统格式,10列精简)
*/
List<RegistrationExportVo> exportListV1(EnforcementRegistrationBo bo);
/**
* 导出列表V2(与列表展示一致,15列,V2排序)
*/
List<RegistrationExportVo> exportList(EnforcementRegistrationBo bo);
List<RegistrationExportV2Vo> exportListV2(EnforcementRegistrationBo bo);
/**
* 执法类别分布(饼图数据)

186
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/report/impl/EnforcementRegistrationReportImpl.java

@ -8,6 +8,7 @@ import com.zdxt.enforcementcode.domain.vo.EnforcementRegistrationVo;
import com.zdxt.enforcementcode.domain.vo.report.ChartDataVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationAnalysisVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationExportVo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationExportV2Vo;
import com.zdxt.enforcementcode.domain.vo.report.RegistrationStatisticsVo;
import com.zdxt.enforcementcode.mapper.EnforcementRegistrationMapper;
import com.zdxt.enforcementcode.report.IEnforcementRegistrationReport;
@ -65,23 +66,142 @@ public class EnforcementRegistrationReportImpl implements IEnforcementRegistrati
}
@Override
public TableDataInfo<EnforcementRegistrationVo> list(EnforcementRegistrationBo bo, PageQuery pageQuery) {
// 数据权限由 @EfcodeDataFilter 拦截器自动处理
public TableDataInfo<EnforcementRegistrationVo> listForV1(EnforcementRegistrationBo bo, PageQuery pageQuery) {
// 与旧系统一致:加载全量数据 → 填充区域/街道 → 按字典顺序排序 → 手动分页
List<EnforcementRegistrationVo> allRecords = loadAndSortAll(bo);
// 手动分页
int pageNum = pageQuery.getPageNum();
int pageSize = pageQuery.getPageSize();
int total = allRecords.size();
int fromIndex = (pageNum - 1) * pageSize;
int toIndex = Math.min(fromIndex + pageSize, total);
List<EnforcementRegistrationVo> pageData = fromIndex < total ? allRecords.subList(fromIndex, toIndex) : Collections.emptyList();
return new TableDataInfo<>(pageData, (long) total);
}
@Override
public TableDataInfo<EnforcementRegistrationVo> listForV2(EnforcementRegistrationBo bo, PageQuery pageQuery) {
// V2:SQL层JOIN字典表排序 + 服务端分页(依赖district/street已回填)
Page<EnforcementRegistrationVo> page = pageQuery.build();
IPage<EnforcementRegistrationVo> result = registrationMapper.selectReportPage(page, bo, null);
IPage<EnforcementRegistrationVo> result = registrationMapper.selectReportPageV2(page, bo, null);
return TableDataInfo.build(result);
}
@Override
public List<EnforcementRegistrationVo> listAll(EnforcementRegistrationBo bo) {
// 数据权限由 @EfcodeDataFilter 拦截器自动处理
return loadAndSortAll(bo);
}
/**
* 加载全量数据并按字典顺序排序(与旧系统一致)
* 旧系统:加载全部 → 按区域字典顺序遍历 → 按街道字典顺序收集 → 前端分页
*/
private List<EnforcementRegistrationVo> loadAndSortAll(EnforcementRegistrationBo bo) {
Page<EnforcementRegistrationVo> page = new Page<>(1, Integer.MAX_VALUE, false);
IPage<EnforcementRegistrationVo> result = registrationMapper.selectReportPage(page, bo, null);
return result.getRecords();
List<EnforcementRegistrationVo> records = result.getRecords();
// 从企业地址中解析区域/街道并按字典顺序排序
return enrichAndSortByDictOrder(records);
}
/**
* 从 enterprise_address 中解析区域和街道,并按字典顺序排序(与旧系统逻辑完全一致)
* 旧系统排序:按区域字典dict_sort顺序 → 每个区域内按街道dict_sort顺序 → 同街道内按enforcement_time倒序
*/
private List<EnforcementRegistrationVo> enrichAndSortByDictOrder(List<EnforcementRegistrationVo> list) {
if (list == null || list.isEmpty()) {
return Collections.emptyList();
}
// 加载区域字典(address_type)——按dict_sort顺序
List<SysDictDataVo> areaList = dictTypeService.selectDictDataByType("address_type");
if (areaList == null || areaList.isEmpty()) {
return list;
}
// 加载每个区域下的街道字典(按dict_sort顺序)
Map<String, List<SysDictDataVo>> areaStreetMap = new LinkedHashMap<>();
for (SysDictDataVo area : areaList) {
List<SysDictDataVo> streets = dictTypeService.selectDictDataByType(area.getDictValue());
areaStreetMap.put(area.getDictLabel(), streets != null ? streets : Collections.emptyList());
}
// 构建区域排序索引(dictLabel → 顺序号)
Map<String, Integer> areaSortMap = new HashMap<>();
int areaIdx = 0;
for (SysDictDataVo area : areaList) {
areaSortMap.put(area.getDictLabel(), areaIdx++);
}
// 构建街道排序索引(dictLabel → 顺序号)
Map<String, Integer> streetSortMap = new HashMap<>();
for (List<SysDictDataVo> streets : areaStreetMap.values()) {
int streetIdx = 0;
for (SysDictDataVo street : streets) {
streetSortMap.put(street.getDictLabel(), streetIdx++);
}
}
// 填充区域/街道
list.forEach(vo -> {
String address = vo.getEnterpriseAddress();
if (StringUtils.isBlank(address)) {
return;
}
String matchedArea = null;
String matchedStreet = null;
for (Map.Entry<String, List<SysDictDataVo>> entry : areaStreetMap.entrySet()) {
String areaLabel = entry.getKey();
int quIdx = areaLabel.indexOf("区");
if (quIdx <= 0) {
continue;
}
String prefix = areaLabel.substring(0, quIdx);
String prefixQu = "深圳市" + prefix + "区";
String prefixXinQu = "深圳市" + prefix + "新区";
if (address.startsWith(prefixQu) || address.startsWith(prefixXinQu)) {
matchedArea = areaLabel;
for (SysDictDataVo street : entry.getValue()) {
String streetLabel = street.getDictLabel();
if (address.startsWith(prefixQu + streetLabel) || address.startsWith(prefixXinQu + streetLabel)) {
matchedStreet = streetLabel;
break;
}
}
break;
}
}
vo.setDistrict(matchedArea != null ? matchedArea : "");
vo.setStreet(matchedStreet != null ? matchedStreet : "");
});
// 按字典顺序排序:区域字典序 → 街道字典序 → 执法时间倒序
int maxAreaIdx = areaList.size();
int maxStreetIdx = streetSortMap.size() + 1;
list.sort((a, b) -> {
int aAreaSort = areaSortMap.getOrDefault(a.getDistrict(), maxAreaIdx);
int bAreaSort = areaSortMap.getOrDefault(b.getDistrict(), maxAreaIdx);
if (aAreaSort != bAreaSort) {
return Integer.compare(aAreaSort, bAreaSort);
}
int aStreetSort = streetSortMap.getOrDefault(a.getStreet(), maxStreetIdx);
int bStreetSort = streetSortMap.getOrDefault(b.getStreet(), maxStreetIdx);
if (aStreetSort != bStreetSort) {
return Integer.compare(aStreetSort, bStreetSort);
}
// 同区域同街道,按执法时间倒序
if (a.getEnforcementTime() == null && b.getEnforcementTime() == null) return 0;
if (a.getEnforcementTime() == null) return 1;
if (b.getEnforcementTime() == null) return -1;
return b.getEnforcementTime().compareTo(a.getEnforcementTime());
});
return list;
}
@Override
public List<RegistrationExportVo> exportList(EnforcementRegistrationBo bo) {
public List<RegistrationExportVo> exportListV1(EnforcementRegistrationBo bo) {
List<EnforcementRegistrationVo> dataList = listAll(bo);
// 字典翻译:执法类别
@ -115,6 +235,60 @@ public class EnforcementRegistrationReportImpl implements IEnforcementRegistrati
}).collect(Collectors.toList());
}
@Override
public List<RegistrationExportV2Vo> exportListV2(EnforcementRegistrationBo bo) {
// 使用V2排序:Sql JOIN字典表排序,全量加载
Page<EnforcementRegistrationVo> page = new Page<>(1, Integer.MAX_VALUE, false);
IPage<EnforcementRegistrationVo> result = registrationMapper.selectReportPageV2(page, bo, null);
List<EnforcementRegistrationVo> dataList = result.getRecords();
// 字典翻译
Map<String, String> categoryDictMap2 = dictTypeService.selectDictDataByType("law_enforce_category").stream()
.collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel, (a, b) -> a));
Map<String, String> checkCategoryDictMap = dictTypeService.selectDictDataByType("check_category").stream()
.collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel, (a, b) -> a));
Map<String, String> noScanReasonDictMap = dictTypeService.selectDictDataByType("no-scan-reason").stream()
.collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel, (a, b) -> a));
java.text.SimpleDateFormat sdf2 = new java.text.SimpleDateFormat("yyyy-MM-dd");
return dataList.stream().map(vo -> {
RegistrationExportV2Vo export = new RegistrationExportV2Vo();
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.setLawEnforcementItemText(vo.getLawEnforcementItemText());
// 执法时间
export.setEnforcementTime(vo.getEnforcementTime() != null ? sdf2.format(vo.getEnforcementTime()) : "");
// 联合执法
export.setHasUnion(vo.getHasUnion() != null && vo.getHasUnion() == 1 && StringUtils.isNotBlank(vo.getUnionNo()) ? "是" : "否");
// 受委托
export.setHasAuto(vo.getHasAuto() != null && vo.getHasAuto() == 1 ? "是" : "否");
// 委托单位
export.setEntrustDeptName(vo.getEntrustDeptName());
// 行政执法类别
export.setLawEnforceCategory(categoryDictMap2.getOrDefault(
vo.getLawEnforceCategory() != null ? vo.getLawEnforceCategory() : "", ""));
// 任务来源
export.setCheckCategory(checkCategoryDictMap.getOrDefault(
vo.getCheckCategory() != null ? vo.getCheckCategory() : "", ""));
// 未扫码原因
export.setNoScanReason(noScanReasonDictMap.getOrDefault(
vo.getCheckCss() != null ? vo.getCheckCss() : "", ""));
// 是否投诉
export.setIsComplaint(vo.getIsComplaint() != null && vo.getIsComplaint() == 1 ? "是" : "否");
return export;
}).collect(Collectors.toList());
}
@Override
public List<ChartDataVo> categoryChart(EnforcementRegistrationBo bo) {
// 数据权限由 @EfcodeDataFilter 拦截器自动处理

118
zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementRegistrationReportMapper.xml

@ -132,6 +132,124 @@
ORDER BY enforcement_time DESC
</select>
<!-- 报表分页列表查询V2(JOIN字典表按dict_sort排序,依赖district/street已回填) -->
<select id="selectReportPageV2" resultType="com.zdxt.enforcementcode.domain.vo.EnforcementRegistrationVo">
SELECT
er.id, er.law_enforcement, er.law_enforcement_id, er.enforce,
er.enterprise_id, er.enterprise_name, er.enterprise_number,
er.enforcement_time, er.create_time, er.create_by,
er.law_enforcer, er.law_enforcer_id, er.law_enforcer_tel,
er.law_enforcer_two, er.law_enforcer_id_two, er.law_enforcer_tel_two,
er.subsidiaryer, er.subsidiaryer_id, er.subsidiaryer_tel,
er.law_enforcement_item, er.law_enforcement_item_text,
er.law_enforcement_basis, er.law_enforcement_basis_text,
er.remark, er.reslut, er.user_id, er.dept_id, er.is_delete, er.status,
er.law_enforcement_code, er.is_complaint, er.is_submit,
er.unite_check, er.check_css, er.enforce_reason, er.law_field,
er.check_category, er.bureau_dept_id, er.bureau_dept_name,
er.is_evaluate, er.law_id, er.law_text,
er.has_union, er.has_auto, er.union_no, er.law_enforce_category,
er.entrust_dept_id, er.entrust_dept_name,
er.enterprise_address, er.district, er.street, er.zone, er.is_real_union
FROM enforcement_registration er
LEFT JOIN sys_dict_data area
ON area.dict_type = 'address_type'
AND area.status = '0'
AND area.dict_label = er.district
LEFT JOIN sys_dict_data street
ON street.dict_type = area.dict_value
AND street.status = '0'
AND street.dict_label = er.street
<where>
AND er.is_submit = 1
AND er.is_delete = 0
AND er.bureau_dept_name is not null
AND er.law_enforcement_id is not null
AND er.enterprise_name is not null
AND er.enterprise_number is not null
AND er.law_enforcer is not null
AND er.law_enforcer_two is not null
AND er.is_complaint is not null
AND er.check_category is not null
AND er.bureau_dept_id is not null
AND (er.status = 0 OR er.status IS NULL)
<if test="bo.bureauDeptName != null and bo.bureauDeptName != ''">
AND er.bureau_dept_name LIKE CONCAT('%', #{bo.bureauDeptName}, '%')
</if>
<if test="bo.lawEnforcer != null and bo.lawEnforcer != ''">
AND (er.law_enforcer LIKE CONCAT('%', #{bo.lawEnforcer}, '%')
OR er.law_enforcer_two LIKE CONCAT('%', #{bo.lawEnforcer}, '%'))
</if>
<if test="bo.enterpriseName != null and bo.enterpriseName != ''">
AND er.enterprise_name LIKE CONCAT('%', #{bo.enterpriseName}, '%')
</if>
<if test="bo.lawEnforcementItemText != null and bo.lawEnforcementItemText != ''">
AND er.law_enforcement_item_text LIKE CONCAT('%', #{bo.lawEnforcementItemText}, '%')
</if>
<if test="bo.hasUnion != null">
AND er.has_union = #{bo.hasUnion}
</if>
<if test="bo.hasAuto != null">
AND er.has_auto = #{bo.hasAuto}
</if>
<if test="bo.entrustDeptName != null and bo.entrustDeptName != ''">
AND er.entrust_dept_name LIKE CONCAT('%', #{bo.entrustDeptName}, '%')
</if>
<if test="bo.lawEnforceCategory != null and bo.lawEnforceCategory != ''">
AND er.law_enforce_category = #{bo.lawEnforceCategory}
</if>
<if test="bo.isComplaint != null">
AND er.is_complaint = #{bo.isComplaint}
</if>
<if test="bo.enforce != null and bo.enforce != ''">
AND er.enforce = #{bo.enforce}
</if>
<if test="bo.checkCss != null and bo.checkCss != ''">
AND er.check_css = #{bo.checkCss}
</if>
<if test="bo.district != null and bo.district != ''">
AND er.district = #{bo.district}
</if>
<if test="bo.street != null and bo.street != ''">
AND er.street = #{bo.street}
</if>
<if test="bo.checkCategory != null and bo.checkCategory != ''">
AND er.check_category = #{bo.checkCategory}
</if>
<if test="bo.dateType != null and bo.dateType == 1">
AND DATE_FORMAT(er.enforcement_time, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m')
</if>
<if test="bo.dateType != null and bo.dateType == 2">
AND DATE_FORMAT(er.enforcement_time, '%Y-%m') &gt;= CONCAT(YEAR(CURDATE()), '-',
CASE WHEN QUARTER(CURDATE()) IN (1) THEN '01'
WHEN QUARTER(CURDATE()) IN (2) THEN '04'
WHEN QUARTER(CURDATE()) IN (3) THEN '07'
ELSE '10' END)
AND DATE_FORMAT(er.enforcement_time, '%Y-%m') &lt;= CONCAT(YEAR(CURDATE()), '-',
CASE WHEN QUARTER(CURDATE()) IN (1) THEN '03'
WHEN QUARTER(CURDATE()) IN (2) THEN '06'
WHEN QUARTER(CURDATE()) IN (3) THEN '09'
ELSE '12' END)
</if>
<if test="bo.dateType != null and bo.dateType == 3">
AND DATE_FORMAT(er.enforcement_time, '%Y') = DATE_FORMAT(CURDATE(), '%Y')
</if>
<if test="bo.dateSearch != null and bo.dateSearch != ''">
AND DATE_FORMAT(er.enforcement_time, '%Y-%m') = #{bo.dateSearch}
</if>
<if test="bo.beginTime != null and bo.beginTime != ''">
AND DATE_FORMAT(er.enforcement_time, '%Y-%m-%d') &gt;= #{bo.beginTime}
</if>
<if test="bo.endTime != null and bo.endTime != ''">
AND DATE_FORMAT(er.enforcement_time, '%Y-%m-%d') &lt;= #{bo.endTime}
</if>
<if test="dataFilter != null and dataFilter != ''">
${dataFilter}
</if>
</where>
ORDER BY IFNULL(area.dict_sort, 9999), IFNULL(street.dict_sort, 9999), er.enforcement_time DESC
</select>
<!-- 报表全量列表查询(统计/导出) -->
<select id="selectReportAll" resultType="com.zdxt.enforcementcode.domain.EnforcementRegistration">
SELECT

27
zdxt-web-client/zdxt-admin-plus-ui/src/api/efcode/report/registration.ts

@ -68,7 +68,18 @@ export const getStatistics = (params: RegistrationReportQuery): AxiosPromise<Reg
};
/**
* 统计列表(分页)
* 统计列表V1(全量加载+Java字典序排序+手动分页,暂保留)
*/
export const getRegistrationListV1 = (params: RegistrationReportQuery): AxiosPromise => {
return request({
url: `${BASE_URL}/listV1`,
method: 'get',
params
});
};
/**
* 统计列表V2(SQL JOIN字典表排序 + 服务端分页,当前使用)
*/
export const getRegistrationList = (params: RegistrationReportQuery): AxiosPromise => {
return request({
@ -79,7 +90,19 @@ export const getRegistrationList = (params: RegistrationReportQuery): AxiosPromi
};
/**
* 导出统计列表
* 导出统计列表V1(旧系统格式,10列,暂保留)
*/
export const exportRegistrationListV1 = (params: RegistrationReportQuery): AxiosPromise<Blob> => {
return request({
url: `${BASE_URL}/exportListV1`,
method: 'post',
params,
responseType: 'blob'
});
};
/**
* 导出统计列表V2(15列,V2排序,当前使用)
*/
export const exportRegistrationList = (params: RegistrationReportQuery): AxiosPromise<Blob> => {
return request({

52
zdxt-web-client/zdxt-admin-plus-ui/src/views/efcode/report/registration/indexList.vue

@ -194,7 +194,7 @@ const handleMonthChange = (val: string) => {
/** 搜索 */
const handleQuery = () => {
queryParams.pageNum = 1;
getList();
getListV2();
getStats();
};
@ -231,8 +231,20 @@ const resetQuery = () => {
handleQuery();
};
/** 查询列表 */
const getList = async () => {
/** 查询列表V1(旧版,全量加载+Java字典序排序+手动分页,暂保留) */
const getListV1 = async () => {
loading.value = true;
try {
const res = await getRegistrationList(queryParams);
tableData.value = res.rows || [];
total.value = res.total || 0;
} finally {
loading.value = false;
}
};
/** 查询列表V2(SQL JOIN字典表排序 + 服务端分页,当前使用) */
const getListV2 = async () => {
loading.value = true;
try {
const res = await getRegistrationList(queryParams);
@ -419,11 +431,13 @@ const formatDate = (row: any) => {
<!-- 列表表格 -->
<div ref="tableRef">
<el-table v-loading="loading" :data="tableData" border stripe style="width: 100%" :height="tableHeight">
<el-table-column label="企业名称" prop="enterpriseName" min-width="180" show-overflow-tooltip />
<el-table-column label="执法单位" prop="bureauDeptName" min-width="150" show-overflow-tooltip />
<el-table-column label="被执法企业名称" prop="enterpriseName" min-width="180" show-overflow-tooltip />
<el-table-column label="企业注册地" prop="district" width="100" align="center" />
<el-table-column label="企业所属街道" prop="street" width="120" align="center" />
<el-table-column label="执法人员" min-width="120">
<template #default="{ row }">
{{ row.lawEnforcer }}{{ row.lawEnforcerTwo ? ',' + row.lawEnforcerTwo : '' }}
{{ row.lawEnforcer }}{{ row.lawEnforcerTwo ? ',\n' + row.lawEnforcerTwo : '' }}
</template>
</el-table-column>
<el-table-column label="执法事项" prop="lawEnforcementItemText" min-width="150" show-overflow-tooltip />
@ -436,24 +450,40 @@ const formatDate = (row: any) => {
<span v-else>否</span>
</template>
</el-table-column>
<el-table-column label="委托执法" width="90" align="center">
<el-table-column label="受委托" width="80" align="center">
<template #default="{ row }">
<el-tag v-if="row.hasAuto === 1" type="warning" size="small">是</el-tag>
<span v-else>否</span>
</template>
</el-table-column>
<el-table-column label="执法类别" prop="lawEnforceCategory" width="100" align="center">
<el-table-column label="委托单位" prop="entrustDeptName" width="130" show-overflow-tooltip />
<el-table-column label="执法类别" width="100" align="center">
<template #default="{ row }">
{{ lawEnforceCategoryOptions.find(d => d.dictValue === row.lawEnforceCategory)?.dictLabel || row.lawEnforceCategory || '-' }}
</template>
</el-table-column>
<el-table-column label="投诉" width="70" align="center">
<el-table-column label="任务来源" width="100" align="center">
<template #default="{ row }">
{{ checkCategoryOptions.find(d => d.dictValue === row.checkCategory)?.dictLabel || '-' }}
</template>
</el-table-column>
<el-table-column label="是否扫码" width="90" align="center">
<template #default="{ row }">
<span v-if="row.checkCss">否</span>
<span v-else>是</span>
</template>
</el-table-column>
<el-table-column label="未扫码原因" width="110" align="center">
<template #default="{ row }">
{{ noScanReasonOptions.find(d => d.dictValue === row.checkCss)?.dictLabel || '' }}
</template>
</el-table-column>
<el-table-column label="是否投诉" width="90" align="center">
<template #default="{ row }">
<el-tag v-if="row.isComplaint === 1" type="danger" size="small">是</el-tag>
<span v-else>否</span>
</template>
</el-table-column>
<el-table-column label="委托单位" prop="entrustDeptName" width="130" show-overflow-tooltip />
</el-table>
</div>
@ -464,8 +494,8 @@ const formatDate = (row: any) => {
:page-sizes="[10, 20, 50, 100]"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="getList"
@current-change="getList"
@size-change="getListV2"
@current-change="getListV2"
class="mt-4"
/>
</div>

Loading…
Cancel
Save