Browse Source

Merge remote-tracking branch 'origin/dev' into dev

dev-V1.0.1
庄锐波 6 months ago
parent
commit
28ec1c6841
  1. 104
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/config/RuoYiConfig.java
  2. 12
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/file/FileUploadUtils.java
  3. 924
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppLawEnforcementRegistrationController.java
  4. 23
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEntEnterpriseInformationController.java
  5. 9
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEnterpriseComplaintController.java
  6. 1
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/enterprise/AppEnterpriseComplaintBo.java
  7. 5
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/EnforcementEducationServicesVo.java
  8. 2
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/EnterpriseInformationVo.java
  9. 26
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/enterprise/AppEnforcementRegistrationVo.java
  10. 12
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementEducationServicesMapper.java
  11. 5
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/enterprise/AppEnterpriseComplaintMapper.java
  12. 6
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/common/impl/FileUploadApiImpl.java
  13. 3
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/IAppEnterpriseComplaintService.java
  14. 83
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/impl/AppEnterpriseComplaintServiceImpl.java
  15. 24
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/impl/AppEnterpriseLoginServiceImpl.java
  16. 55
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementEducationServicesServiceImpl.java
  17. 2
      zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/AppEnterpriseComplaintMapper.xml
  18. 13
      zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementEducationServicesMapper.xml
  19. 30
      zdxt-web-client/zdxt-efcode-enterprise-app/src/api/enterprise/index.js
  20. 2
      zdxt-web-client/zdxt-efcode-enterprise-app/src/http/http.js
  21. 13
      zdxt-web-client/zdxt-efcode-enterprise-app/src/util/fileUpload.js
  22. 4
      zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/enforcement/enforcementEvaluate.vue
  23. 106
      zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/enforcement/enforcementEvaluateDetail.vue
  24. 86
      zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/enforcement/enforcementNoticeList.vue
  25. 23
      zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/enforcement/enforcementRegistrationList.vue
  26. 24
      zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/enforcement/registrationDetail.vue
  27. 71
      zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/home/enterpriseHomeV2.vue
  28. 62
      zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/law/lawServiceDetail.vue
  29. 4
      zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/law/lawServiceList.vue
  30. 345
      zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/my/complaintDetail.vue
  31. 27
      zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/my/complaintSuggestion.vue
  32. 23
      zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/my/settings.vue
  33. 5
      zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml
  34. 7
      zdxt-web-server/zdxt-admin-web-server/src/main/resources/application.yml

104
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/config/RuoYiConfig.java

@ -1,5 +1,6 @@
package com.zdxt.enforcementcode.common.config;
import org.dromara.common.core.utils.SpringUtils;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ -9,57 +10,54 @@ import org.springframework.stereotype.Component;
* @author ruoyi
*/
@Component
@ConfigurationProperties(prefix = "ruoyi")
@ConfigurationProperties(prefix = "zdxt")
public class RuoYiConfig
{
/** 项目名称 */
private String name;
/** 版本 */
private String version;
/** 版权年份 */
private String copyrightYear;
/** 上传路径配置 */
private FileConfig file = new FileConfig();
/** 实例演示开关 */
private boolean demoEnabled;
/** 上传路径 */
private static String profile;
/**
* 文件配置内部类
*/
public static class FileConfig {
/** 上传路径 */
private String uploadPath;
/** 获取地址开关 */
private static boolean addressEnabled;
/** URL前缀 */
private String urlPrefix;
public String getName()
{
return name;
}
/** 执法监督码地址 */
private String qrCodeUrl;
public void setName(String name)
{
this.name = name;
}
public String getVersion()
{
return version;
}
public String getUploadPath() {
return uploadPath;
}
public void setVersion(String version)
{
this.version = version;
}
public void setUploadPath(String uploadPath) {
this.uploadPath = uploadPath;
}
public String getCopyrightYear()
{
return copyrightYear;
}
public String getUrlPrefix() {
return urlPrefix;
}
public void setCopyrightYear(String copyrightYear)
{
this.copyrightYear = copyrightYear;
public void setUrlPrefix(String urlPrefix) {
this.urlPrefix = urlPrefix;
}
public String getQrCodeUrl() {
return qrCodeUrl;
}
public void setQrCodeUrl(String qrCodeUrl) {
this.qrCodeUrl = qrCodeUrl;
}
}
public boolean isDemoEnabled()
{
return demoEnabled;
@ -70,24 +68,31 @@ public class RuoYiConfig
this.demoEnabled = demoEnabled;
}
public static String getProfile()
public FileConfig getFile()
{
return profile;
return file;
}
public void setProfile(String profile)
public void setFile(FileConfig file)
{
RuoYiConfig.profile = profile;
this.file = file;
}
public static boolean isAddressEnabled()
/**
* 获取上传路径(兼容旧代码)
*/
public static String getUploadPath()
{
return addressEnabled;
// 需要通过 Spring 上下文获取 bean,这里提供静态访问方式
return SpringUtils.getBean(RuoYiConfig.class).getFile().getUploadPath();
}
public void setAddressEnabled(boolean addressEnabled)
/**
* 获取 URL 前缀(兼容旧代码)
*/
public static String getUrlPrefix()
{
RuoYiConfig.addressEnabled = addressEnabled;
return SpringUtils.getBean(RuoYiConfig.class).getFile().getUrlPrefix();
}
/**
@ -95,7 +100,7 @@ public class RuoYiConfig
*/
public static String getAvatarPath()
{
return getProfile() + "/avatar";
return getUploadPath() + "/avatar";
}
/**
@ -103,14 +108,7 @@ public class RuoYiConfig
*/
public static String getDownloadPath()
{
return getProfile() + "/download/";
return getUploadPath() + "/download/";
}
/**
* 获取上传路径
*/
public static String getUploadPath()
{
return getProfile() + "/upload";
}
}

12
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/file/FileUploadUtils.java

@ -40,7 +40,7 @@ public class FileUploadUtils
/**
* 默认上传的地址
*/
private static String defaultBaseDir = RuoYiConfig.getProfile();
private static String defaultBaseDir = RuoYiConfig.getUploadPath();
private static int counter = 0;
@ -150,9 +150,15 @@ public class FileUploadUtils
private static final String getPathFileName(String uploadDir, String fileName) throws IOException
{
int dirLastIndex = RuoYiConfig.getProfile().length() + 1;
int dirLastIndex = RuoYiConfig.getUploadPath().length() + 1;
String currentDir = StringUtils.substring(uploadDir, dirLastIndex);
String pathFileName = Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName;
// 如果 currentDir 为空,则直接使用 RESOURCE_PREFIX + fileName
String pathFileName;
if (StringUtils.isEmpty(currentDir)) {
pathFileName = Constants.RESOURCE_PREFIX + "/" + fileName;
} else {
pathFileName = Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName;
}
return pathFileName;
}

924
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppLawEnforcementRegistrationController.java

@ -0,0 +1,924 @@
//package com.zdxt.enforcementcode.controller.app.enforcement;
//
//
//import com.zdxt.enforcementcode.domain.EnforcementRegistration;
//import com.zdxt.enforcementcode.service.IEnterpriseEvaluateService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Controller;
//import org.springframework.ui.ModelMap;
//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.*;
//
//
///**
// * 执法端-执法登记Controller
// *
// * @author chenrui
// * @date 2024-02-23
// */
//@Controller
//@RequestMapping("/app/code/registration")
//public class AppLawEnforcementRegistrationController extends BaseController
//{
// private String prefix = "project/code/registration";
//
// @Autowired private IEnforcementRegistrationService enforcementRegistrationService;
// @Autowired private IEnterpriseLawEnforcementService enterpriseLawEnforcementService;
// @Autowired private ILinkageDictService iLinkageDictService;
// @Autowired private IEnterpriseComplaintService enterpriseComplaintService;
// @Autowired private IEnterpriseInformationService iEnterpriseInformationService;
// @Autowired private IEnterpriseEvaluateService enterpriseEvaluateService;
// @Autowired private IZqyjjdm137344Service iZqyjjdm137344Service;
// @Autowired private UserApi userApi;
// @Autowired private DeptApi deptApi;
// @Autowired private DictDataApi dictDataApi;
// @Autowired
// private IUserService userService;
//
// @RequiresPermissions("code:registration:view")
// @GetMapping()
// public String registration()
// {
// return prefix + "/registration";
// }
//
// /**
// * 查询执法端-执法登记列表
// */
// @RequiresPermissions("code:registration:list")
// @PostMapping("/list")
// @ResponseBody
// public TableDataInfo list(EnforcementRegistration enforcementRegistration)
// {
// startPage();
// List<EnforcementRegistration> list = enforcementRegistrationService.selectEnforcementRegistrationList(enforcementRegistration);
// return getDataTable(list);
// }
// /**
// * 查询执法端-执法登记列表
// */
// @GetMapping("/selectList")
// @ResponseBody
// public ZDResponse selectList(EnforcementRegistration enforcementRegistration)
// {
// List<EnforcementRegistration> list = enforcementRegistrationService.selectEnforcementRegistrationList(enforcementRegistration);
// DictDataBean dictParams = new DictDataBean();
// dictParams.setDictType("check_category");
// List<DictDataBean> dicts = dictDataApi.getDictData(dictParams);
// for (EnforcementRegistration ee : list) {
// // 判断是否投诉
// EnterpriseComplaint params = new EnterpriseComplaint();
// params.setRelId(ee.getId());
// params.setComOrOpi(1);
// List<EnterpriseComplaint> enterpriseComplaints = enterpriseComplaintService.selectEnterpriseComplaintList(params);
// if (null!=enterpriseComplaints && enterpriseComplaints.size()>0) {
// ee.setComOrOpi(1);
// } else {
// ee.setComOrOpi(0);
// }
//
// // 执法类别
// for (DictDataBean dict : dicts) {
// if (dict.getDictValue().equals(ee.getCheckCategory())) {
// ee.setCheckCategoryText(dict.getDictLabel());
// }
// }
//
// // 执法人员1需要展示用户名+执法码
// UserBean userBean = userApi.getUserByUserId(ee.getLawEnforcerId());
// String lawCN = StringUtils.isEmpty(userBean.getLawCertificateNum())?"":userBean.getLawCertificateNum();
// ee.setLawEnforcer(userBean.getUserName() +" "+ lawCN);
// // 执法人员2需要展示用户名+执法码
// List<String> lawTwoList = new ArrayList<>();
// List<UserBean> userBeans = new ArrayList<>();
// if (StringUtils.isNotEmpty(ee.getLawEnforcerIdTwo())) {
// userBeans = userApi.getUserByUserIds(ee.getLawEnforcerIdTwo());
// }
// for (UserBean ub : userBeans) {
// String lawCertificateNum = StringUtils.isEmpty(ub.getLawCertificateNum())?"":ub.getLawCertificateNum();
// lawTwoList.add(ub.getUserName() +" "+ lawCertificateNum);
// }
// ee.setLawEnforcer2List(lawTwoList);
// }
//
// return ZDResponse.success("获取执法登录信息",list);
// }
//
//
// /**
// * 查询执法端-执法登记列表
// */
//// @RequiresPermissions("code:registration:list")
// @PostMapping("/queryList")
// @ResponseBody
// public TableDataInfo queryList(@RequestBody EnforcementRegistration enforcementRegistration)
// {
//// startPage();
// int totalNum = enforcementRegistrationService.countEnforcementRegistrationList(enforcementRegistration);
// List<EnforcementRegistration> list = enforcementRegistrationService.selectEnforcementRegistrationList(enforcementRegistration);
// DictDataBean dictParams = new DictDataBean();
// dictParams.setDictType("check_category");
// List<DictDataBean> dicts = dictDataApi.getDictData(dictParams);
// for (EnforcementRegistration ee : list) {
// // 判断是否投诉
// EnterpriseComplaint params = new EnterpriseComplaint();
// params.setRelId(ee.getId());
// params.setComOrOpi(1);
// List<EnterpriseComplaint> enterpriseComplaints = enterpriseComplaintService.selectEnterpriseComplaintList(params);
// if (null!=enterpriseComplaints && enterpriseComplaints.size()>0) {
// ee.setComOrOpi(1);
// } else {
// ee.setComOrOpi(0);
// }
//
// // 执法类别
// for (DictDataBean dict : dicts) {
// if (dict.getDictValue().equals(ee.getCheckCategory())) {
// ee.setCheckCategoryText(dict.getDictLabel());
// }
// }
//
// // 执法人员1需要展示用户名+执法码 没有执法码展示加密手机号
// UserBean userBean = userApi.getUserByUserId(ee.getLawEnforcerId());
// String lawCN =userBean.getUserName() +" "+userBean.getLawCertificateNum();
// if(StringUtils.isEmpty(userBean.getLawCertificateNum())){
// lawCN=userBean.getUserName() +" "+ CommonUtil.encryptPhone(userBean.getPhonenumber());
// }
// ee.setLawEnforcer(lawCN);
//
// // 执法人员2需要展示用户名+执法码 没有执法码展示加密手机号
// List<String> lawTwoList = new ArrayList<>();
// List<UserBean> userBeans = new ArrayList<>();
// if (StringUtils.isNotEmpty(ee.getLawEnforcerIdTwo())) {
// userBeans = userApi.getUserByUserIds(ee.getLawEnforcerIdTwo());
// }
//// String tmpUserShow = "";
// for (UserBean ub : userBeans) {
// String temp=ub.getUserName() +" "+ub.getLawCertificateNum();
// if(StringUtils.isEmpty(ub.getLawCertificateNum())){
// temp=ub.getUserName() +" "+ CommonUtil.encryptPhone(ub.getPhonenumber());
// }
// lawTwoList.add(temp);
// }
//// if (tmpUserShow.length() > 0) {
//// tmpUserShow = tmpUserShow.substring(0, tmpUserShow.length()-1);
//// }
// ee.setLawEnforcer2List(lawTwoList);
//
// // 判断超时多少天
// Instant instant = ee.getEnforcementTime().toInstant();
// ZoneId zoneId = ZoneId.systemDefault();
// LocalDate startDate = instant.atZone(zoneId).toLocalDate();
// // 今天距离执法时间所差天数
// long daysBetween = ChronoUnit.DAYS.between(startDate, LocalDate.now());
// ee.setOutTimeDayNum(daysBetween);
// }
//
// TableDataInfo rspData = getDataTable(list);
// rspData.setCode(0);
// rspData.setRows(list);
// rspData.setTotal(totalNum);
// return rspData;
// }
//
//
// /**
// * 查询执法端-执法登记列表
// */
//// @RequiresPermissions("code:registration:list")
// @GetMapping("/queryListNew")
// @ResponseBody
// public TableDataInfo queryListNew(EnforcementRegistration enforcementRegistration)
// {
// if (Objects.nonNull(enforcementRegistration.getUserId()) && enforcementRegistration.getDateType()==0) {
// UserBean userByUser = userApi.getUserByUserId(enforcementRegistration.getUserId());
// enforcementRegistration.setDeptId(userByUser == null ? null : userByUser.getDeptId());
//
// DeptBean bureauDept = deptApi.iterationDeptParentToBureau(userByUser.getDeptId());
// enforcementRegistration.setBureauDeptId(bureauDept.getDeptId());
// }
// //查询检查总次数
// List<EnforcementRegistration> registrations = enforcementRegistrationService.selectEnforcementRegistrationListNew(enforcementRegistration);
// int count = 0;
// if (registrations.size() >0) {
// count = registrations.stream().map(item -> Integer.valueOf(item.getNum())).reduce(0, Integer::sum);
// }
// //查询列表
// startPage();
// List<EnforcementRegistration> list = enforcementRegistrationService.selectEnforcementRegistrationListNew(enforcementRegistration);
// TableDataInfo dataTable = getDataTable(list);
// dataTable.setMsg(count);
// return dataTable;
// }
//
// @GetMapping("/queryByEpId")
// @ResponseBody
// public ZDResponse queryByEpId(EnforcementRegistration enforcementRegistration)
// {
// if (Objects.nonNull(enforcementRegistration.getUserId()) && enforcementRegistration.getDateType()==0) {
// UserBean userByUser = userApi.getUserByUserId(enforcementRegistration.getUserId());
// enforcementRegistration.setDeptId(userByUser == null ? null : userByUser.getDeptId());
//
// DeptBean bureauDept = deptApi.iterationDeptParentToBureau(userByUser.getDeptId());
// enforcementRegistration.setBureauDeptId(bureauDept.getDeptId());
// }
// List<EnforcementRegistration> list = enforcementRegistrationService.selectEnforcementRegistrationByEpId(enforcementRegistration);
// return ZDResponse.success("获取当前企业本月登记信息",list);
// }
//
// /**
// * 查询企业端-执法登记列表
// */
// @GetMapping("/queryEnterpriseList")
// @ResponseBody
// public TableDataInfo queryEnterpriseList(EnforcementRegistration enforcementRegistration)
// {
// startPage();
// List<EnforcementRegistration> list = enforcementRegistrationService.selectEnterpriseRegistrationList(enforcementRegistration);
// DictDataBean dictParams = new DictDataBean();
// dictParams.setDictType("law_enforce_category");
// List<DictDataBean> dicts = dictDataApi.getDictData(dictParams);
// for (EnforcementRegistration ee : list) {
// // 判断是否投诉
// EnterpriseComplaint params = new EnterpriseComplaint();
// params.setRelId(ee.getId());
// params.setComOrOpi(1);
// List<EnterpriseComplaint> enterpriseComplaints = enterpriseComplaintService.selectEnterpriseComplaintList(params);
// if (null!=enterpriseComplaints && enterpriseComplaints.size()>0) {
// ee.setComOrOpi(1);
// } else {
// ee.setComOrOpi(0);
// }
// // 执法类别
// for (DictDataBean dict : dicts) {
// if (dict.getDictValue().equals(ee.getLawEnforceCategory())) {
// ee.setCheckCategoryText(dict.getDictLabel());
// }
// }
//
// // 执法人员1需要展示用户名+执法码
// UserBean userBean = userApi.getUserByUserId(ee.getLawEnforcerId());
//
// String lawCN = userBean.getLawCertificateNum();
// if(StringUtils.isEmpty(lawCN)){
// lawCN=CommonUtil.encryptPhone(userBean.getPhonenumber());
// }
// ee.setLawEnforcer(userBean.getUserName() +" "+ lawCN);
//
// // 执法人员2需要展示用户名+执法码
// List<String> lawTwoList = new ArrayList<>();
// List<UserBean> userBeans = new ArrayList<>();
// if (StringUtils.isNotEmpty(ee.getLawEnforcerIdTwo())) {
// userBeans = userApi.getUserByUserIds(ee.getLawEnforcerIdTwo());
// }
// for (UserBean ub : userBeans) {
// String temp = ub.getLawCertificateNum();
// if(StringUtils.isEmpty(temp)){
// temp=CommonUtil.encryptPhone(ub.getPhonenumber());
// }
// lawTwoList.add(ub.getUserName() +" "+ temp);
// }
// ee.setLawEnforcer2List(lawTwoList);
//
// // 判断超时多少天
// Instant instant = ee.getEnforcementTime().toInstant();
// ZoneId zoneId = ZoneId.systemDefault();
// LocalDate startDate = instant.atZone(zoneId).toLocalDate();
// // 今天距离执法时间所差天数
// long daysBetween = ChronoUnit.DAYS.between(startDate, LocalDate.now());
// ee.setOutTimeDayNum(daysBetween);
// }
// return getDataTable(list);
// }
//
// /** 剔除执法日期距离今天超过5天的执法数据 */
// @GetMapping("/queryList2")
// @ResponseBody
// public ZDResponse queryList2(EnforcementRegistration enforcementRegistration)
// {
// List<EnforcementRegistration> res = new ArrayList<>();
// List<EnforcementRegistration> list = enforcementRegistrationService.selectEnforcementRegistrationList(enforcementRegistration);
// for (EnforcementRegistration ee : list) {
// // 判断是否投诉
// EnterpriseComplaint params = new EnterpriseComplaint();
// params.setRelId(ee.getId());
// params.setComOrOpi(1);
// List<EnterpriseComplaint> enterpriseComplaints = enterpriseComplaintService.selectEnterpriseComplaintList(params);
// if (null!=enterpriseComplaints && enterpriseComplaints.size()>0) {
// ee.setComOrOpi(1);
// } else {
// ee.setComOrOpi(0);
// }
// // 判断超时多少天
// Instant instant = ee.getEnforcementTime().toInstant();
// ZoneId zoneId = ZoneId.systemDefault();
// LocalDate startDate = instant.atZone(zoneId).toLocalDate();
// // 今天距离执法时间所差天数
// long daysBetween = ChronoUnit.DAYS.between(startDate, LocalDate.now());
// ee.setOutTimeDayNum(daysBetween);
// if (daysBetween <= 4) {
// res.add(ee);
// }
// }
// return ZDResponse.success("查询成功",res);
// }
//
// /** 剔除执法日期距离今天超过5天的执法数据 */
// @GetMapping("/queryListWithFiveDay")
// @ResponseBody
// public TableDataInfo queryListWithFiveDay(EnforcementRegistration enforcementRegistration)
// {
//
// startPage();
// List<EnforcementRegistration> res = new ArrayList<>();
// List<EnforcementRegistration> list = enforcementRegistrationService.selectEnforcementRegistrationList(enforcementRegistration);
// for (EnforcementRegistration ee : list) {
// // 判断是否投诉
// EnterpriseComplaint params = new EnterpriseComplaint();
// params.setRelId(ee.getId());
// params.setComOrOpi(1);
// List<EnterpriseComplaint> enterpriseComplaints = enterpriseComplaintService.selectEnterpriseComplaintList(params);
// if (null!=enterpriseComplaints && enterpriseComplaints.size()>0) {
// ee.setComOrOpi(1);
// } else {
// ee.setComOrOpi(0);
// }
// // 执法人员1需要展示用户名+执法码
// UserBean userBean = userApi.getUserByUserId(ee.getLawEnforcerId());
// String lawCN = StringUtils.isEmpty(userBean.getLawCertificateNum())?"":userBean.getLawCertificateNum();
// ee.setLawEnforcer(userBean.getUserName() +" "+ lawCN);
//
// // 执法人员2需要展示用户名+执法码
// List<String> lawTwoList = new ArrayList<>();
// List<UserBean> userBeans = new ArrayList<>();
// if (StringUtils.isNotEmpty(ee.getLawEnforcerIdTwo())) {
// userBeans = userApi.getUserByUserIds(ee.getLawEnforcerIdTwo());
// }
// for (UserBean ub : userBeans) {
// String lawCertificateNum = StringUtils.isEmpty(ub.getLawCertificateNum())?"":ub.getLawCertificateNum();
// lawTwoList.add(ub.getUserName() +" "+ lawCertificateNum);
// }
// ee.setLawEnforcer2List(lawTwoList);
// // 判断超时多少天
// Instant instant = ee.getEnforcementTime().toInstant();
// ZoneId zoneId = ZoneId.systemDefault();
// LocalDate startDate = instant.atZone(zoneId).toLocalDate();
// // 今天距离执法时间所差天数
// long daysBetween = ChronoUnit.DAYS.between(startDate, LocalDate.now());
// ee.setOutTimeDayNum(daysBetween);
// if (daysBetween <= 4) {
// res.add(ee);
// }
// }
// return getDataTable(res);
// }
//
// /**
// * 新增执法端-执法登记
// */
// @GetMapping("/add")
// public String add()
// {
// return prefix + "/add";
// }
//
// /**
// * 新增保存执法端-执法登记
// */
//// @RequiresPermissions("code:registration:add")
// @PostMapping("/add")
// @ResponseBody
// public ZDResponse addSave(@RequestBody EnforcementRegistration enforcementRegistration)
// {
// String district = "";
// String street = "";
// if (StringUtils.isNotEmpty(enforcementRegistration.getEnterpriseAddress())) {
// district = extract(enforcementRegistration.getEnterpriseAddress(), "([^\\s市]+?区)");
// street = extract(enforcementRegistration.getEnterpriseAddress(), "([^\\s区]+?街道)");
// }
// enforcementRegistration.setDistrict(district);
// enforcementRegistration.setStreet(street);
// return enforcementRegistrationService.insertEnforcementRegistration(enforcementRegistration) > 0
// ? ZDResponse.success("保存成功") : ZDResponse.error("保存失败");
// }
//
// /**
// * 根据企业统一信用号, 搜索出该企业前推一小时内的联合执法.
// * 用于用户自行进行关联
// * @param enterpriseNumber
// * @return
// */
// @GetMapping("/queryUnionByHour/{enterpriseNumber}/{checkCss}/{enforcementTime}/{unionNo}")
// @ResponseBody
// public ZDResponse queryUnionByHour(@PathVariable String enterpriseNumber, @PathVariable String checkCss, @PathVariable String enforcementTime, @PathVariable String unionNo)
// {
// return ZDResponse.success("操作成功", enforcementRegistrationService.queryUnionByHour(enterpriseNumber, checkCss, enforcementTime, unionNo));
// }
//
// /**
// * 修改执法端-执法登记
// */
// @GetMapping("/edit/{id}")
// public String edit(@PathVariable("id") String id, ModelMap mmap)
// {
// EnforcementRegistration enforcementRegistration = enforcementRegistrationService.selectEnforcementRegistrationById(id);
// mmap.put("enforcementRegistration", enforcementRegistration);
// return prefix + "/edit";
// }
//
// /**
// * 修改保存执法端-执法登记
// */
//// @RequiresPermissions("code:registration:edit")
// @PostMapping("/edit")
// @ResponseBody
// public ZDResponse editSave(@RequestBody EnforcementRegistration enforcementRegistration)
// {
// int resNum = 0;
// enforcementRegistration.setIsSubmit(1);
// String district = "";
// String street = "";
// if (StringUtils.isNotEmpty(enforcementRegistration.getEnterpriseAddress())) {
// district = extract(enforcementRegistration.getEnterpriseAddress(), "([^\\s市]+?区)");
// street = extract(enforcementRegistration.getEnterpriseAddress(), "([^\\s区]+?街道)");
// }
// enforcementRegistration.setDistrict(district);
// enforcementRegistration.setStreet(street);
// if (StringUtils.isNotEmpty(enforcementRegistration.getId())) {
// resNum = enforcementRegistrationService.updateEnforcementRegistration(enforcementRegistration);
// } else {
// resNum = enforcementRegistrationService.insertEnforcementRegistration(enforcementRegistration);
// if (resNum > 0 && StringUtils.isNotEmpty(enforcementRegistration.getLawId())) {
// enforcementRegistration.setId(null);
// }
// }
// if (StringUtils.isNotEmpty(enforcementRegistration.getLawId())) {
// EnterpriseLawEnforcement law = new EnterpriseLawEnforcement();
// law.setId(enforcementRegistration.getLawId());
// law.setIsReg(1);
// resNum = enterpriseLawEnforcementService.updateEnterpriseLawEnforcement(law);
// }
// return resNum > 0 ? ZDResponse.success("修改成功") : ZDResponse.error("修改失败");
// }
//
// @PostMapping("/edit2")
// @ResponseBody
// public ZDResponse editSave2(@RequestBody EnforcementRegistration enforcementRegistration)
// {
// enforcementRegistration.setIsSubmit(0);
// String district = extract(enforcementRegistration.getEnterpriseAddress(), "([^\\s市]+?区)");
// String street = extract(enforcementRegistration.getEnterpriseAddress(), "([^\\s区]+?街道)");
// enforcementRegistration.setDistrict(district);
// enforcementRegistration.setStreet(street);
// int resNum = enforcementRegistrationService.updateEnforcementRegistration(enforcementRegistration);
// if (StringUtils.isNotEmpty(enforcementRegistration.getLawId())) {
// EnterpriseLawEnforcement law = new EnterpriseLawEnforcement();
// law.setId(enforcementRegistration.getLawId());
// law.setIsReg(1);
// resNum = enterpriseLawEnforcementService.updateEnterpriseLawEnforcement(law);
// }
// return resNum > 0 ? ZDResponse.success("修改成功") : ZDResponse.error("修改失败");
// }
//
//
// /**
// * 修改执法端-执法登记
// */
// @GetMapping("/detail/{id}")
// public String detail(@PathVariable("id") String id, ModelMap mmap)
// {
// EnforcementRegistration enforcementRegistration = enforcementRegistrationService.selectEnforcementRegistrationById(id);
// mmap.put("enforcementRegistration", enforcementRegistration);
// return prefix + "/detail";
// }
//
// /**
// * 修改保存执法端-执法登记提交
// */
// @RequiresPermissions("code:registration:submit")
// @PostMapping("/submit")
// @ResponseBody
// public ZDResponse submit(@RequestBody EnforcementRegistration enforcementRegistration)
// {
// return enforcementRegistrationService.updateEnforcementRegistration(enforcementRegistration) > 0 ?
// ZDResponse.success("提交成功") : ZDResponse.error("提交失败");
// }
//
// /**
// * 删除执法端-执法登记
// */
// @RequiresPermissions("code:registration:remove")
// @PostMapping( "/remove")
// @ResponseBody
// public ZDResponse remove(String ids)
// {
// return enforcementRegistrationService.deleteEnforcementRegistrationByIds(ids) > 0 ?
// ZDResponse.success("删除成功") : ZDResponse.error("删除失败");
// }
//
// /**
// * 获取预警信息
// */
//// @RequiresPermissions("code:registration:list")
// @GetMapping("/queryEarlyWarning")
// @ResponseBody
// public ZDResponse queryEarlyWarning(EnforcementRegistration enforcementRegistration)
// {
// List<EnforceRegCount> list = enforcementRegistrationService.queryEarlyWarning(enforcementRegistration.getSearchValue());
// return ZDResponse.success("查询成功",list);
// }
//
// /**
// * 执法登记详情
// */
// @GetMapping("/queryById/{id}")
// @ResponseBody
// public ZDResponse queryById(@PathVariable("id") String id)
// {
// EnforcementRegistration enforcementRegistration = enforcementRegistrationService.selectEnforcementRegistrationById(id);
// if (null != enforcementRegistration) {
//// LinkageDict ld1 = iLinkageDictService.selectLinkageDictById(enforcementRegistration.getLawEnforcementItem());
//// Zqyjjdm137344 zq = new Zqyjjdm137344();
//// try {
//// zq = iZqyjjdm137344Service.getZqyjjdmById(enforcementRegistration.getLawEnforcementBasis());
//// } catch (Exception e) {
//// e.printStackTrace();
//// }
//// enforcementRegistration.setLawEnforcementItemText(null==ld1?"":ld1.getTitle());
//// enforcementRegistration.setLawEnforcementBasisText(null==zq?"":zq.getLawName());
//
// // 执法人员1需要展示用户名+执法码
// UserBean userBean = userApi.getUserByUserId(enforcementRegistration.getLawEnforcerId());
// String lawCN = userBean.getUserName() +" "+userBean.getLawCertificateNum();
// if(StringUtils.isEmpty(userBean.getLawCertificateNum())){
// lawCN= userBean.getUserName() +" "+CommonUtil.encryptPhone(userBean.getPhonenumber());
// }
// enforcementRegistration.setLawEnforcer(lawCN);
//
// // 执法人员2需要展示用户名+执法码
// List<UserBean> userBeans = new ArrayList<>();
// if (StringUtils.isNotEmpty(enforcementRegistration.getLawEnforcerIdTwo())) {
// userBeans = userApi.getUserByUserIds(enforcementRegistration.getLawEnforcerIdTwo());
// }
// String tmpUserShow = "";
// for (UserBean ub : userBeans) {
// String temp = ub.getLawCertificateNum();
// if(StringUtils.isEmpty(temp)){
// temp=CommonUtil.encryptPhone(ub.getPhonenumber());
// }
//
// tmpUserShow += ub.getUserName() +" "+ temp + ",";
// }
// if (tmpUserShow.length() > 0) {
// tmpUserShow = tmpUserShow.substring(0, tmpUserShow.length()-1);
// }
// enforcementRegistration.setLawEnforcer2Show(tmpUserShow);
//
// // 字典回显
// DictDataBean dictParams = new DictDataBean();
// // 执法领域
// if (StringUtils.isNotEmpty(enforcementRegistration.getLawField())) {
// dictParams.setDictType("law_field");
// List<DictDataBean> dicts = dictDataApi.getDictData(dictParams);
// for (DictDataBean d : dicts) {
// if (d.getDictValue().equals(enforcementRegistration.getLawField())) {
// enforcementRegistration.setLawFieldText(d.getDictLabel());
// break;
// }
// }
// }
// // 执法类别
// if (StringUtils.isNotEmpty(enforcementRegistration.getCheckCategory())) {
// dictParams.setDictType("check_category");
// List<DictDataBean> dicts = dictDataApi.getDictData(dictParams);
// for (DictDataBean d : dicts) {
// if (d.getDictValue().equals(enforcementRegistration.getCheckCategory())) {
// enforcementRegistration.setCheckCategoryText(d.getDictLabel());
// break;
// }
// }
// }
// // 执法类别
// if (StringUtils.isNotEmpty(enforcementRegistration.getLawEnforceCategory())) {
// dictParams.setDictType("law_enforce_category");
// List<DictDataBean> dicts = dictDataApi.getDictData(dictParams);
// for (DictDataBean d : dicts) {
// if (d.getDictValue().equals(enforcementRegistration.getLawEnforceCategory())) {
// enforcementRegistration.setLawEnforceCategoryText(d.getDictLabel());
// break;
// }
// }
// }
// }
// return ZDResponse.success("查询成功",enforcementRegistration);
// }
//
// /**
// * 执法登记详情 - 联合执法版本
// */
// @GetMapping("/queryUniteById/{id}")
// @ResponseBody
// public ZDResponse queryUniteById(@PathVariable("id") String id)
// {
// List<EnforcementRegistration> regResults = new ArrayList<>();
// List<EnterpriseLawEnforcement> lawResults = new ArrayList<>();
// // 先获取登记数据 - 获取批次id
// EnforcementRegistration enforcementRegistration = enforcementRegistrationService.selectEnforcementRegistrationById(id);
// // 通过联合执法的批次id获取整个批次的联合执法 (查询详情这里不需要获取联合执法信息, 暂时先禁了, 省点性能)
// if (false && StringUtils.isNotEmpty(enforcementRegistration.getUnionNo()) && 1 == enforcementRegistration.getHasUnion()) {
// // 已登记联合检查
// EnforcementRegistration regRarams = new EnforcementRegistration();
//// regRarams.setUniteCheck(enforcementRegistration.getUniteCheck());
// regRarams.setUnionNo((enforcementRegistration.getUnionNo()));
// regResults = enforcementRegistrationService.selectEnforcementRegistrationList(regRarams);
// // 预约未登记的 (预约没要联合检查了)
// EnterpriseLawEnforcement lawRarams = new EnterpriseLawEnforcement();
// lawRarams.setUniteCheck(enforcementRegistration.getUniteCheck());
// lawRarams.setIsReg(0);
// lawResults = enterpriseLawEnforcementService.selectEnterpriseLawEnforcementList2(lawRarams);
// } else {
// regResults.add(enforcementRegistration);
// }
//
// //查询行政检查评价
// EnterpriseEvaluate enterpriseEvaluate = new EnterpriseEvaluate();
//// if (StringUtils.isNotEmpty(regResults.get(0).getUniteCheck())) {
//// enterpriseEvaluate = enterpriseEvaluateService.selectEnterpriseEvaluateByUniteCheck(regResults.get(0).getUniteCheck());
// if (StringUtils.isNotEmpty(regResults.get(0).getUnionNo())) {
// enterpriseEvaluate = enterpriseEvaluateService.selectEnterpriseEvaluateByUniteCheck(regResults.get(0).getUnionNo());
// } else {
// enterpriseEvaluate = enterpriseEvaluateService.selectEnterpriseEvaluateByRelId(regResults.get(0).getId());
// }
//
// for (EnforcementRegistration reg : regResults) {
// // 执法人员1需要展示用户名+执法码 没有执法码展示加密手机号
// UserBean userBean = userApi.getUserByUserId(reg.getLawEnforcerId());
// String lawCN = userBean.getUserName() +" "+userBean.getLawCertificateNum();
// if(StringUtils.isEmpty(userBean.getLawCertificateNum())){
// lawCN=userBean.getUserName() +" "+ CommonUtil.encryptPhone(userBean.getPhonenumber());
// }
// reg.setLawEnforcer(lawCN);
//
// // 执法人员2需要展示用户名+执法码 没有执法码展示加密手机号
// List<UserBean> userBeans = new ArrayList<>();
// if (StringUtils.isNotEmpty(reg.getLawEnforcerIdTwo())) {
// userBeans = userApi.getUserByUserIds(reg.getLawEnforcerIdTwo());
// }
// String tmpUserShow = "";
// for (UserBean ub : userBeans) {
// String temp = ub.getLawCertificateNum();
// if(StringUtils.isEmpty(temp)){
// temp= CommonUtil.encryptPhone(ub.getPhonenumber());
// }
// tmpUserShow += ub.getUserName() +" "+ temp + ",";
// }
// if (tmpUserShow.length() > 0) {
// tmpUserShow = tmpUserShow.substring(0, tmpUserShow.length()-1);
// }
// reg.setLawEnforcer2Show(tmpUserShow);
//
// // 字典回显
// DictDataBean dictParams = new DictDataBean();
// // 执法领域
// if (StringUtils.isNotEmpty(reg.getLawField())) {
// dictParams.setDictType("law_field");
// List<DictDataBean> dicts = dictDataApi.getDictData(dictParams);
// for (DictDataBean d : dicts) {
// if (d.getDictValue().equals(reg.getLawField())) {
// reg.setLawFieldText(d.getDictLabel());
// break;
// }
// }
// }
// // 任务来源
// if (StringUtils.isNotEmpty(reg.getCheckCategory())) {
// dictParams.setDictType("check_category");
// List<DictDataBean> dicts = dictDataApi.getDictData(dictParams);
// for (DictDataBean d : dicts) {
// if (d.getDictValue().equals(reg.getCheckCategory())) {
// reg.setCheckCategoryText(d.getDictLabel());
// break;
// }
// }
// }
//
// // 执法类别
// if (StringUtils.isNotEmpty(reg.getLawEnforceCategory())) {
// dictParams.setDictType("law_enforce_category");
// List<DictDataBean> dicts = dictDataApi.getDictData(dictParams);
// for (DictDataBean d : dicts) {
// if (d.getDictValue().equals(reg.getLawEnforceCategory())) {
// reg.setLawEnforceCategoryText(d.getDictLabel());
// break;
// }
// }
// }
// // 评价
//
// //查询行政检查评价
//// EnterpriseEvaluate enterpriseEvaluate = new EnterpriseEvaluate();
//// if (StringUtils.isNotEmpty(enforcementRegistration.getUniteCheck())) {
//// enterpriseEvaluate = enterpriseEvaluateService.selectEnterpriseEvaluateByUniteCheck(enforcementRegistration.getUniteCheck());
//// } else {
//// enterpriseEvaluate = enterpriseEvaluateService.selectEnterpriseEvaluateByRelId(enforcementRegistration.getId());
//// }
// reg.setEnterpriseEvaluate(enterpriseEvaluate);
// }
//
// for (EnterpriseLawEnforcement law : lawResults) {
// // 执法人员1需要展示用户名+执法码
// List<UserBean> userBeans1 = new ArrayList<>();
// if (StringUtils.isNotEmpty(law.getLawEnforcerId())) {
// userBeans1 = userApi.getUserByUserIds(law.getLawEnforcerId());
// }
// String tmpUserShow1 = "";
// for (UserBean ub : userBeans1) {
// String lawCertificateNum = StringUtils.isEmpty(ub.getLawCertificateNum()) ? "" : ub.getLawCertificateNum();
// tmpUserShow1 += ub.getUserName() + " " + lawCertificateNum + ",";
// }
// if (tmpUserShow1.length() > 0) {
// tmpUserShow1 = tmpUserShow1.substring(0, tmpUserShow1.length() - 1);
// }
// law.setLawEnforcer(tmpUserShow1);
//
// // 执法人员2需要展示用户名+执法码
// List<UserBean> userBeans2 = new ArrayList<>();
// if (StringUtils.isNotEmpty(law.getLawEnforcerTwoId())) {
// userBeans2 = userApi.getUserByUserIds(law.getLawEnforcerTwoId());
// }
// String tmpUserShow2 = "";
// for (UserBean ub : userBeans2) {
// String lawCertificateNum = StringUtils.isEmpty(ub.getLawCertificateNum()) ? "" : ub.getLawCertificateNum();
// tmpUserShow2 += ub.getUserName() + " " + lawCertificateNum + ",";
// }
// if (tmpUserShow2.length() > 0) {
// tmpUserShow2 = tmpUserShow2.substring(0, tmpUserShow2.length() - 1);
// }
// law.setLawEnforcer2Show(tmpUserShow2);
// }
// Map<String, List> result = new HashMap<>();
// result.put("regResults", regResults);
// result.put("lawResults", lawResults);
// return ZDResponse.success("查询成功",result);
// }
//
// /**
// * 查询附件信息
// *
// * @param key
// * @return
// */
// @GetMapping("/queryFiles/{key}")
// @ResponseBody
// public ZDResponse queryFiles(@PathVariable String key) {
// HashMap<String, Object> map = new HashMap<>();
// map.put("filePreview", enforcementRegistrationService.queryFiles(key));
// return ZDResponse.success("获取成功", map);
// }
//
// /**
// * 查询附件信息
// *
// * @param key
// * @return
// */
// @PostMapping("/queryFilesPost")
// @ResponseBody
// public ZDResponse queryFilesPost(String key) {
// HashMap<String, Object> map = new HashMap<>();
// map.put("filePreview", enforcementRegistrationService.queryFiles(key));
// return ZDResponse.success("获取成功", map);
// }
//
// /**
// * 查看预约记录详情
// */
//// @GetMapping( "/getByUserIdAndZero/{userId}")
//// @ResponseBody
//// public ZDResponse getByUserIdAndZero(@PathVariable Long userId)
//// {
//// EnforcementRegistration registration = enforcementRegistrationService.getByUserIdAndZero(userId);
//// Map<String, Object> params = new HashMap<>();
//// LinkageDict tmp = iLinkageDictService.selectLinkageDictById(registration.getLawEnforcementItem());
//// params.put("lawEnforcementItemText", null!=tmp?tmp.getTitle():"");
//// tmp = iLinkageDictService.selectLinkageDictById(registration.getLawEnforcementBasis());
//// params.put("lawEnforcementBasisText", null!=tmp?tmp.getTitle():"");
//// registration.setParams(params);
//// return ZDResponse.success("查询成功", registration);
//// }
// @GetMapping( "/getByUserIdAndEnterpriseNumber/{modth}/{userId}/{enterpriseNumber}")
// @ResponseBody
// public ZDResponse getByUserIdAndEnterpriseNumber(@PathVariable String modth, @PathVariable Long userId, @PathVariable String enterpriseNumber)
// {
// // 拿到的企业编码是加密盐的, 和登记表对不上
// EnterpriseInformation enterpriseInformation = null;
// if ("add".equals(modth)) {
// enterpriseInformation = iEnterpriseInformationService.selectEnterpriseInformationBySalt(enterpriseNumber);
// } else {
// enterpriseInformation = iEnterpriseInformationService.selectEnterpriseInformationByNum(enterpriseNumber);
// }
// // 前端似乎没保存部门id, 所以弄个userId上来 通过userId获取其部门id
// UserBean userBean = userApi.getUserByUserId(userId);
// EnforcementRegistration registration = enforcementRegistrationService.getByDeptIdAndEnterpriseNumber(userBean.getDeptId(), enterpriseInformation.getEnterpriseNumber());
// // 执法人员需要展示用户名+执法码
// List<UserBean> userBeans = new ArrayList<>();
// if (StringUtils.isNotEmpty(registration.getLawEnforcerIdTwo())) {
// userBeans = userApi.getUserByUserIds(registration.getLawEnforcerIdTwo());
// }
// String tmpUserShow = "";
// for (UserBean ub : userBeans) {
// String lawCertificateNum = StringUtils.isEmpty(ub.getLawCertificateNum())?"":ub.getLawCertificateNum();
// tmpUserShow += ub.getUserName() +" "+ lawCertificateNum + ",";
// }
// if (tmpUserShow.length() > 0) {
// tmpUserShow = tmpUserShow.substring(0, tmpUserShow.length()-1);
// }
// registration.setLawEnforcer2Show(tmpUserShow);
//
// // 字典回显
// DictDataBean dictParams = new DictDataBean();
// // 执法领域
// if (StringUtils.isNotEmpty(registration.getLawField())) {
// dictParams.setDictType("law_field");
// List<DictDataBean> dicts = dictDataApi.getDictData(dictParams);
// for (DictDataBean d : dicts) {
// if (d.getDictValue().equals(registration.getLawField())) {
// registration.setLawFieldText(d.getDictLabel());
// break;
// }
// }
// }
// // 执法类别
// if (StringUtils.isNotEmpty(registration.getCheckCategory())) {
// dictParams.setDictType("check_category");
// List<DictDataBean> dicts = dictDataApi.getDictData(dictParams);
// for (DictDataBean d : dicts) {
// if (d.getDictValue().equals(registration.getCheckCategory())) {
// registration.setCheckCategoryText(d.getDictLabel());
// break;
// }
// }
// }
//
// if (null!=registration && StringUtils.isNotEmpty(registration.getId())) {
// Map<String, Object> params = new HashMap<>();
// LinkageDict tmp = iLinkageDictService.selectLinkageDictById(registration.getLawEnforcementItem());
// params.put("lawEnforcementItemText", null != tmp ? tmp.getTitle() : "");
// registration.setParams(params);
// return ZDResponse.success("查询成功", registration);
// }
// return ZDResponse.error("查询失败");
// }
//
// /**
// * 查看预约记录详情
// */
// @GetMapping( "/getByIdToDataFillIn/{id}")
// @ResponseBody
// public ZDResponse getByIdToDataFillIn(@PathVariable String id)
// {
// EnforcementRegistration registration = enforcementRegistrationService.getEnforcementRegistrationById(id);
//
// //TODO 执法事项修改为手动输入
//// Map<String, Object> params = new HashMap<>();
//// LinkageDict tmp = iLinkageDictService.selectLinkageDictById(registration.getLawEnforcementItem());
//// params.put("lawEnforcementItemText", tmp.getTitle());
//// tmp = iLinkageDictService.selectLinkageDictById(registration.getLawEnforcementBasis());
//// params.put("lawEnforcementBasisText", tmp.getTitle());
//// registration.setParams(params);
// return ZDResponse.success("查询成功", registration);
// }
//
// /**
// * 获取全部执法部门
// * @param bean
// * @return
// */
// @PostMapping("/getAllEnforceDept")
// @ResponseBody
// public TableDataInfo getAllEnforceDept(@RequestBody DeptBean bean){
// int count=deptApi.getAllEnforceDeptCount(bean);
// List<DeptBean> list= deptApi.getAllEnforceDept(bean);
// TableDataInfo rspData = getDataTable(list);
// rspData.setCode(0);
// rspData.setRows(list);
// rspData.setTotal(count);
// return rspData;
// }
//
// private static String extract(String text, String regex) {
// java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(regex);
// java.util.regex.Matcher matcher = pattern.matcher(text);
// if (matcher.find()) {
// return matcher.group(1);
// }
// return "";
// }
//}
//
//

23
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEntEnterpriseInformationController.java

@ -1,15 +1,21 @@
package com.zdxt.enforcementcode.controller.app.enterprise;
import cn.dev33.satoken.annotation.SaIgnore;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zdxt.enforcementcode.domain.EnterpriseInformation;
import com.zdxt.enforcementcode.domain.vo.EnterpriseInformationVo;
import com.zdxt.enforcementcode.domain.vo.EnterpriseUserRefVo;
import com.zdxt.enforcementcode.domain.vo.QrCodeGenerateHistoryVo;
import com.zdxt.enforcementcode.mapper.EnterpriseInformationMapper;
import com.zdxt.enforcementcode.service.IEnterpriseInformationService;
import com.zdxt.enforcementcode.service.IEnterpriseUserRefService;
import com.zdxt.enforcementcode.service.IQrCodeGenerateHistoryService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@ -30,6 +36,8 @@ public class AppEntEnterpriseInformationController {
private final IQrCodeGenerateHistoryService qrCodeGenerateHistoryService;
private final IEnterpriseInformationService enterpriseInformationService;
private final EnterpriseInformationMapper enterpriseInformationMapper;
/**
* 根据用户ID获取关联的企业信息列表
*
@ -69,20 +77,25 @@ public class AppEntEnterpriseInformationController {
*/
@SaIgnore
@GetMapping("/getQrCode")
public R<Map<String, Object>> getQrCode(String enterpriseNumber) {
if (enterpriseNumber == null || enterpriseNumber.trim().isEmpty()) {
return R.fail("企业纳税识别号不能为空");
public R<Map<String, Object>> getQrCode() {
//根据当前登录用户部门ID 查询企业统一信用代码
LambdaQueryWrapper<EnterpriseInformation> lqw = Wrappers.lambdaQuery();
lqw.eq(EnterpriseInformation::getDeptId, LoginHelper.getDeptId());
EnterpriseInformation enterpriseInformation = enterpriseInformationMapper.selectOne(lqw);
if(enterpriseInformation == null){
return R.fail("企业纳税识别号不存在");
}
// 1. 查询最新的有效二维码记录
QrCodeGenerateHistoryVo qrCodeVo = qrCodeGenerateHistoryService.queryLatestByEnterpriseNumber(enterpriseNumber);
QrCodeGenerateHistoryVo qrCodeVo = qrCodeGenerateHistoryService.queryLatestByEnterpriseNumber(enterpriseInformation.getEnterpriseNumber());
if (qrCodeVo == null) {
return R.fail("未找到该企业的二维码记录");
}
// 2. 查询企业名称(从企业信息表获取)
String enterpriseName = "";
EnterpriseInformationVo enterpriseInfo = enterpriseInformationService.queryByEnterpriseNumber(enterpriseNumber);
EnterpriseInformationVo enterpriseInfo = enterpriseInformationService.queryByEnterpriseNumber(enterpriseInformation.getEnterpriseNumber());
if (enterpriseInfo != null) {
enterpriseName = enterpriseInfo.getEnterpriseName();
}

9
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEnterpriseComplaintController.java

@ -2,6 +2,7 @@ package com.zdxt.enforcementcode.controller.app.enterprise;
import com.zdxt.enforcementcode.domain.bo.MssqOrderFlowBo;
import com.zdxt.enforcementcode.domain.bo.enterprise.AppEnterpriseComplaintBo;
import com.zdxt.enforcementcode.domain.vo.enterprise.AppEnforcementRegistrationVo;
import com.zdxt.enforcementcode.domain.vo.enterprise.AppEnterpriseComplaintVo;
import com.zdxt.enforcementcode.service.enterprise.IAppEnterpriseComplaintService;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
@ -76,13 +77,9 @@ public class AppEnterpriseComplaintController extends BaseController {
*/
@ApiResponse(description = "投诉建议-行政和非行政未被投诉列表")
@GetMapping("/listNotComplaint")
public TableDataInfo<AppEnterpriseComplaintVo> listNotComplaint(@ModelAttribute AppEnterpriseComplaintBo bo, PageQuery pageQuery) {
public TableDataInfo<AppEnforcementRegistrationVo> listNotComplaint(@ModelAttribute AppEnterpriseComplaintBo bo, PageQuery pageQuery) {
// 校验企业信用代码
if (StringUtils.isBlank(bo.getEnterpriseNumber())) {
throw new IllegalArgumentException("企业信用代码不能为空");
}
TableDataInfo<AppEnterpriseComplaintVo> list = appEnterpriseComplaintService.getAllCheckList(bo, pageQuery);
TableDataInfo<AppEnforcementRegistrationVo> list = appEnterpriseComplaintService.getAllCheckList(bo, pageQuery);
return list;
}

1
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/enterprise/AppEnterpriseComplaintBo.java

@ -26,7 +26,6 @@ public class AppEnterpriseComplaintBo extends BaseEntity {
/**
* 主键ID
*/
@NotBlank(message = "主键ID不能为空", groups = { EditGroup.class })
private String id;
/**

5
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/EnforcementEducationServicesVo.java

@ -106,5 +106,10 @@ public class EnforcementEducationServicesVo implements Serializable {
@ExcelProperty(value = "备注")
private String remark;
/**
* 是否已读 0-未读 1-已读
*/
@ExcelProperty(value = "是否已读 0-未读 1-已读")
private Integer isRead;
}

2
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/EnterpriseInformationVo.java

@ -97,7 +97,7 @@ public class EnterpriseInformationVo implements Serializable {
* 部门ID
*/
@ExcelProperty(value = "部门ID")
private Long deptId;
private String deptId;
/**
* 二维码id

26
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/enterprise/AppEnforcementRegistrationVo.java

@ -362,4 +362,30 @@ public class AppEnforcementRegistrationVo implements Serializable {
@ExcelProperty(value = "文件列表")
private List<ZdxtFileVo> fileList;
/**
* 其他执法人员ID
*/
private String lawEnforcerOtherId;
/**
* 其他执法人员
*/
private String lawEnforcerOther;
/**
* 执法事项内容
*/
private String title;
/**
* 任务来源
*/
private String lawEnforcementType;
/**
* 数据类型
*/
private Integer dataType;
}

12
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementEducationServicesMapper.java

@ -5,6 +5,8 @@ import com.zdxt.enforcementcode.domain.vo.EnforcementEducationServicesVo;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import java.util.List;
/**
* 执法信息发布主Mapper接口
*
@ -20,5 +22,13 @@ public interface EnforcementEducationServicesMapper extends BaseMapperPlus<Enfor
* @return 未读普法消息数量
*/
Long countUnreadEducationServices(@Param("companyId") String companyId);
}
/**
* 查询已读的消息ID列表
*
* @param messageIds 消息ID列表
* @param companyId 企业ID
* @return 已读的消息ID列表
*/
List<String> selectReadMessageIds(@Param("messageIds") List<String> messageIds, @Param("companyId") String companyId);
}

5
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/enterprise/AppEnterpriseComplaintMapper.java

@ -2,6 +2,7 @@ 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.AppEnforcementRegistrationVo;
import com.zdxt.enforcementcode.domain.vo.enterprise.AppEnterpriseComplaintVo;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
@ -21,14 +22,14 @@ public interface AppEnterpriseComplaintMapper extends BaseMapperPlus<EnterpriseC
* @param deptList 部门ID列表
* @return 检查结果列表
*/
List<AppEnterpriseComplaintVo> selectAllCheckList(
List<AppEnforcementRegistrationVo> selectAllCheckList(
@Param("enterpriseNumber") String enterpriseNumber,
@Param("searchValue") String searchValue,
@Param("checkCategoryCode") String checkCategoryCode,
@Param("beginTime") Date beginTime,
@Param("endTime") Date endTime,
@Param("deptList") List<String> deptList,
Page<AppEnterpriseComplaintVo> page
Page<AppEnforcementRegistrationVo> page
);
/**

6
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/common/impl/FileUploadApiImpl.java

@ -1,9 +1,11 @@
package com.zdxt.enforcementcode.service.common.impl;
import com.zdxt.enforcementcode.common.config.RuoYiConfig;
import com.zdxt.enforcementcode.common.util.file.FileUploadUtils;
import com.zdxt.enforcementcode.service.common.FileUploadApi;
import org.dromara.common.core.exception.base.BaseException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
@ -18,9 +20,11 @@ import java.io.IOException;
@Service
public class FileUploadApiImpl implements FileUploadApi {
@Autowired
RuoYiConfig ruoYiConfig;
@Override
public String upload(MultipartFile file) {
String filePath = FileUploadUtils.getDefaultBaseDir();
String filePath = RuoYiConfig.getUploadPath();
try {
return FileUploadUtils.upload(filePath, file);
} catch (IOException e) {

3
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/IAppEnterpriseComplaintService.java

@ -3,6 +3,7 @@ package com.zdxt.enforcementcode.service.enterprise;
import com.zdxt.enforcementcode.domain.bo.EnterpriseComplaintBo;
import com.zdxt.enforcementcode.domain.bo.MssqOrderFlowBo;
import com.zdxt.enforcementcode.domain.bo.enterprise.AppEnterpriseComplaintBo;
import com.zdxt.enforcementcode.domain.vo.enterprise.AppEnforcementRegistrationVo;
import com.zdxt.enforcementcode.domain.vo.enterprise.AppEnterpriseComplaintVo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -63,7 +64,7 @@ public interface IAppEnterpriseComplaintService {
* @param pageQuery 分页参数
* @return 分页结果
*/
TableDataInfo<AppEnterpriseComplaintVo> getAllCheckList(AppEnterpriseComplaintBo bo, PageQuery pageQuery);
TableDataInfo<AppEnforcementRegistrationVo> getAllCheckList(AppEnterpriseComplaintBo bo, PageQuery pageQuery);
/**
* 企业端-查询投诉建议处理进度

83
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/impl/AppEnterpriseComplaintServiceImpl.java

@ -14,7 +14,9 @@ import com.zdxt.enforcementcode.domain.bo.MssqAddOrderBo;
import com.zdxt.enforcementcode.domain.bo.MssqOrderFlowBo;
import com.zdxt.enforcementcode.domain.bo.enterprise.AppEnterpriseComplaintBo;
import com.zdxt.enforcementcode.domain.vo.ZdxtFileVo;
import com.zdxt.enforcementcode.domain.vo.enterprise.AppEnforcementRegistrationVo;
import com.zdxt.enforcementcode.domain.vo.enterprise.AppEnterpriseComplaintVo;
import com.zdxt.enforcementcode.mapper.EnterpriseInformationMapper;
import com.zdxt.enforcementcode.mapper.ZdxtFileMapper;
import com.zdxt.enforcementcode.mapper.enterprise.AppEnforcementRegistrationMapper;
import com.zdxt.enforcementcode.mapper.enterprise.AppEnterpriseComplaintMapper;
@ -68,6 +70,9 @@ public class AppEnterpriseComplaintServiceImpl implements IAppEnterpriseComplain
@Autowired
private IMssqApiService mssqApiService;
@Autowired
private EnterpriseInformationMapper enterpriseInformationMapper;
/**
* 企业端-投诉建议详情
*
@ -97,7 +102,7 @@ public class AppEnterpriseComplaintServiceImpl implements IAppEnterpriseComplain
@Override
public TableDataInfo<AppEnterpriseComplaintVo> queryPageList(AppEnterpriseComplaintBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<EnterpriseComplaint> lqw = Wrappers.lambdaQuery();
lqw.eq(StringUtils.isNotBlank(bo.getRelId()), EnterpriseComplaint::getRelId, bo.getRelId());
lqw.eq(StringUtils.isNotBlank(bo.getRelId()), EnterpriseComplaint::getRelId, bo.getRelId()).orderByDesc(EnterpriseComplaint::getCreateTime);
Page<AppEnterpriseComplaintVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
@ -112,6 +117,8 @@ public class AppEnterpriseComplaintServiceImpl implements IAppEnterpriseComplain
@Transactional
public Boolean insertEnterpriseComplaint(AppEnterpriseComplaintBo bo) {
log.info("接收到的投诉信息: enterpriseAddress={}, detailedAddress={}", bo.getEnterpriseAddress(), bo.getDetailedAddress());
bo.setCreateTime(DateUtils.getNowDate());
bo.setId(IdUtil.simpleUUID());
EnterpriseComplaint add = MapstructUtils.convert(bo, EnterpriseComplaint.class);
@ -197,7 +204,20 @@ public class AppEnterpriseComplaintServiceImpl implements IAppEnterpriseComplain
* @return 投诉建议列表
*/
@Override
public TableDataInfo<AppEnterpriseComplaintVo> getAllCheckList(AppEnterpriseComplaintBo bo, PageQuery pageQuery) {
public TableDataInfo<AppEnforcementRegistrationVo> getAllCheckList(AppEnterpriseComplaintBo bo, PageQuery pageQuery) {
//根据部门查询 企业统一社会信用代码
String deptId=LoginHelper.getDeptId();
//enterprise_information
LambdaQueryWrapper<EnterpriseInformation> lqw = Wrappers.lambdaQuery();
lqw.eq(EnterpriseInformation::getDeptId, deptId);
EnterpriseInformation enterpriseInformation = enterpriseInformationMapper.selectOne(lqw);
if(enterpriseInformation == null){
return TableDataInfo.build();
}
bo.setEnterpriseNumber(enterpriseInformation.getEnterpriseNumber());
// 1. 调用 setDept() 处理部门过滤(从投诉事项编码提取信用代码查部门)
List<String> deptList = setDept(bo.getComplaintItemCodes());
@ -208,8 +228,8 @@ public class AppEnterpriseComplaintServiceImpl implements IAppEnterpriseComplain
String checkCategoryCode = processSearchValue(bo.getSearchValue(), checkCategoryMap);
// 4. 调用 Mapper 查询数据库
Page<AppEnterpriseComplaintVo> page = pageQuery.build();
List<AppEnterpriseComplaintVo> list = baseMapper.selectAllCheckList(
Page<AppEnforcementRegistrationVo> page = pageQuery.build();
List<AppEnforcementRegistrationVo> list = baseMapper.selectAllCheckList(
bo.getEnterpriseNumber(),
bo.getSearchValue(),
checkCategoryCode,
@ -219,25 +239,7 @@ public class AppEnterpriseComplaintServiceImpl implements IAppEnterpriseComplain
page
);
// 5. 设置总数
Long total = baseMapper.countAllCheckList(
bo.getEnterpriseNumber(),
bo.getSearchValue(),
checkCategoryCode,
bo.getBeginTime(),
bo.getEndTime(),
deptList
);
page.setRecords(list);
page.setTotal(total);
// 6. 对返回数据进行转换
List<AppEnterpriseComplaintVo> records = page.getRecords();
if (records != null && !records.isEmpty()) {
convertResultData(records, checkCategoryMap);
}
return TableDataInfo.build(page);
return TableDataInfo.build(list);
}
/**
@ -356,42 +358,7 @@ public class AppEnterpriseComplaintServiceImpl implements IAppEnterpriseComplain
return null;
}
/**
* 转换结果数据
* @param records 查询结果列表
* @param checkCategoryMap 执法类别字典映射
*/
private void convertResultData(List<AppEnterpriseComplaintVo> records, Map<String, String> 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<String> enforcerList = formatOtherLawEnforcers(
vo.getLawEnforcerIdTwo(),
vo.getLawEnforcerTwo(),
vo.getLinkmanTelTwo()
);
vo.setLawEnforcer2List(enforcerList);
}
// 查询附件列表
if (vo.getId() != null) {
LambdaQueryWrapper<ZdxtFile> fileLqw = Wrappers.lambdaQuery();
fileLqw.eq(ZdxtFile::getBusinessId, vo.getId());
List<ZdxtFileVo> fileList = zdxtFileMapper.selectVoList(fileLqw);
vo.setFileList(fileList);
}
}
}
/**
* 格式化执法人员信息

24
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/impl/AppEnterpriseLoginServiceImpl.java

@ -10,6 +10,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zdxt.enforcementcode.common.commonenum.PlatformTypeEnums;
import com.zdxt.enforcementcode.common.config.RuoYiConfig;
import com.zdxt.enforcementcode.common.util.*;
import com.zdxt.enforcementcode.domain.EnterpriseInformation;
import com.zdxt.enforcementcode.domain.EnterpriseUser;
@ -97,11 +98,14 @@ public class AppEnterpriseLoginServiceImpl implements IAppEnterpriseLoginService
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
@Value("${sjdm.profile}")
private String filePath;
// @Value("${sjdm.profile}")
// private String filePath;
//
// @Value("${sjdm.qr_code_url}")
// private String qrCodeUrl;
@Value("${sjdm.qr_code_url}")
private String qrCodeUrl;
@Autowired
RuoYiConfig ruoYiConfig;
@Value("${siq.mock.enabled:false}")
private boolean mockEnabled;
@ -430,9 +434,9 @@ public class AppEnterpriseLoginServiceImpl implements IAppEnterpriseLoginService
jsonMap.put("type", "zfjd");
String text = JSON.toJSONString(jsonMap);
//这里设置自定义网站url
String logoPath = qrCodeUrl;
String logoPath = ruoYiConfig.getFile().getQrCodeUrl();
try {
File encode = QRCodeUtil.encodeFile(text, logoPath, filePath, true);
File encode = QRCodeUtil.encodeFile(text, logoPath, ruoYiConfig.getFile().getUploadPath(), true);
MultipartFile multipartFile = QRCodeUtil.getMultipartFile(encode);
String upload = fileUploadApi.upload(multipartFile);
@ -523,9 +527,13 @@ public class AppEnterpriseLoginServiceImpl implements IAppEnterpriseLoginService
*/
private JSONObject getMockSiqUserInfo(String code) {
JSONObject userInfo = new JSONObject();
// 随机生成账号:test + 6位随机数字
String randomSuffix = String.format("%06d", (int)(Math.random() * 1000000));
String account = "test" + randomSuffix;
userInfo.put("userId", "100001");
userInfo.put("account", "test001" + (code != null ? code.hashCode() % 1000 : 1));
userInfo.put("account", account);
userInfo.put("userName", "测试用户");
userInfo.put("phone", IdCardCryptoUtil.symmetricEncryptIdCard(secretKey, "13800138000"));

55
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementEducationServicesServiceImpl.java

@ -22,6 +22,7 @@ import com.zdxt.enforcementcode.domain.bo.SysMessageViewLogBo;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.stream.Collectors;
/**
* 执法信息发布主Service业务层处理
@ -97,6 +98,12 @@ public class EnforcementEducationServicesServiceImpl implements IEnforcementEduc
public TableDataInfo<EnforcementEducationServicesVo> queryPageList(EnforcementEducationServicesBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<EnforcementEducationServices> lqw = buildQueryWrapper(bo);
Page<EnforcementEducationServicesVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
// 为每条记录设置是否已读状态
if (result.getRecords() != null && !result.getRecords().isEmpty()) {
setReadStatus(result.getRecords());
}
return TableDataInfo.build(result);
}
@ -112,6 +119,44 @@ public class EnforcementEducationServicesServiceImpl implements IEnforcementEduc
return baseMapper.selectVoList(lqw);
}
/**
* 为消息列表设置是否已读状态
*
* @param records 消息记录列表
*/
private void setReadStatus(List<EnforcementEducationServicesVo> records) {
// 获取当前登录用户的企业ID
String companyId = LoginHelper.getDeptId();
if (StringUtils.isBlank(companyId)) {
log.warn("当前用户未关联企业,无法设置已读状态");
// 将所有记录设置为未读
records.forEach(record -> record.setIsRead(0));
return;
}
// 获取所有消息ID
List<String> messageIds = records.stream()
.map(EnforcementEducationServicesVo::getId)
.collect(Collectors.toList());
if (messageIds.isEmpty()) {
return;
}
// 查询已读的消息ID列表
List<String> readMessageIds = baseMapper.selectReadMessageIds(messageIds, companyId);
// 设置每条记录的已读状态
records.forEach(record -> {
if (readMessageIds.contains(record.getId())) {
record.setIsRead(1); // 已读
} else {
record.setIsRead(0); // 未读
}
});
}
private LambdaQueryWrapper<EnforcementEducationServices> buildQueryWrapper(EnforcementEducationServicesBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<EnforcementEducationServices> lqw = Wrappers.lambdaQuery();
@ -191,19 +236,19 @@ public class EnforcementEducationServicesServiceImpl implements IEnforcementEduc
public Long countUnreadEducationServices() {
// 获取当前登录用户的企业ID
String companyId = LoginHelper.getDeptId();
if (StringUtils.isBlank(companyId)) {
log.warn("当前用户未关联企业,无法统计未读普法消息");
return 0L;
}
log.debug("统计企业未读普法消息: companyId={}", companyId);
// 查询未读普法消息数量
Long unreadCount = baseMapper.countUnreadEducationServices(companyId);
log.info("企业 {} 的未读普法消息数量: {}", companyId, unreadCount);
return unreadCount != null ? unreadCount : 0L;
}
}

2
zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/AppEnterpriseComplaintMapper.xml

@ -5,7 +5,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<mapper namespace="com.zdxt.enforcementcode.mapper.enterprise.AppEnterpriseComplaintMapper">
<!-- 查询行政和非行政未被投诉的检查记录列表 -->
<select id="selectAllCheckList" resultType="com.zdxt.enforcementcode.domain.vo.enterprise.AppEnterpriseComplaintVo">
<select id="selectAllCheckList" resultType="com.zdxt.enforcementcode.domain.vo.enterprise.AppEnforcementRegistrationVo">
SELECT * FROM (
<!-- 行政检查 -->
SELECT

13
zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementEducationServicesMapper.xml

@ -20,4 +20,17 @@
)
</select>
<!-- 查询已读的消息ID列表 -->
<select id="selectReadMessageIds" resultType="java.lang.String">
SELECT DISTINCT smvl.source_id
FROM sys_message_view_log smvl
WHERE smvl.source_id IN
<foreach collection="messageIds" item="messageId" open="(" separator="," close=")">
#{messageId}
</foreach>
AND smvl.company_id = #{companyId}
AND smvl.source_type = 1
AND smvl.is_delete = 0
</select>
</mapper>

30
zdxt-web-client/zdxt-efcode-enterprise-app/src/api/enterprise/index.js

@ -4,7 +4,7 @@ import { _get, _post,_form,_delete } from "../../http/index";
let enterpriseAppBaseUrl = "/app-ent";
// 企业端用户登录
export const enterpriseLogin = (params, success, error) => _post(enterpriseAppBaseUrl + "/login/do", params, success, error);
export const enterpriseLogin = (params, success, error) => _post(enterpriseAppBaseUrl + "/enterprise/login/siqLogin", params, success, error);
// 获取包裹的数据
export const siqCode = (params, success, error) => _get(enterpriseAppBaseUrl+"/thirdLogin/getSiqCode",params,success,error);
@ -31,34 +31,52 @@ export const getLawDetail = (params, success, error) => _get(enterpriseAppBaseUr
export const getLawCaseDetail = (params, success, error) => _get(enterpriseAppBaseUrl+"/lawEnforcementCase/lawCasedetail",params,success,error)
//评价详情
export const getEvaluateDetail = (params, success, error) => _get("/app/enterprise/evaluate", params, success, error)
export const getEvaluateDetail = (params, success, error) => _get(enterpriseAppBaseUrl +"/enterprise/evaluate", params, success, error)
//提交评价
export const submitEvaluate = (params, success, error) => _post("/app/enterprise/evaluate", params, success, error)
export const submitEvaluate = (params, success, error) => _post(enterpriseAppBaseUrl +"/enterprise/evaluate", params, success, error)
//企业消息 / 执法消息详情
export const getEnforcementRegistrationDetailById = (params, success, error) => _get(enterpriseAppBaseUrl + "/enforcement_registration/queryDetailById", params, success, error)
//普法服务列表
export const getEducationServicesList = (params, success, error) => _get("/app/enterprise/todoitem/list",params,success,error)
export const getEducationServicesList = (params, success, error) => _get(enterpriseAppBaseUrl +"/enforcementcode/educationServices/list",params,success,error)
//普法服务详情
export const getEducationServicesDetail = (params, success, error) => _get(enterpriseAppBaseUrl +"/enforcementcode/educationServices/details",params,success,error)
//执法预告列表
export const getLawNoticeList = (params, success, error) => _get(enterpriseAppBaseUrl +"/enterprise/lawNotice/queryAllList",params,success,error)
//首页轮播图列表
export const getCarouselBannerList = (params, success, error) => _get(enterpriseAppBaseUrl +"/enterprise/carouselBanner/list",params,success,error)
//系统通知公告列表
export const getSystemNoticeList = (params, success, error) => _get(enterpriseAppBaseUrl +"/enterprise/noticeInfo/list",params,success,error)
//获取企业信息(我的)
export const getUserMine = (params, success, error) => _get(enterpriseAppBaseUrl+"/mine/userMine",params,success,error)
//修改联系电话
export const updateContactPhone = (params, success, error) => _post(enterpriseAppBaseUrl+"/mine/updatePhone",params,success,error)
//投诉建议-查询列表
export const getComplaintList = (params, success, error) => _get(enterpriseAppBaseUrl+"/complaint/list",params,success,error)
//投诉建议-详情
export const getComplaintDetail = (params, success, error) => _get(enterpriseAppBaseUrl+"/complaint/detail",params,success,error)
//投诉建议-处置进度
export const getComplaintDisposalProgress = (params, success, error) => _get(enterpriseAppBaseUrl+"/complaint/disposalProgress",params,success,error)
//投诉建议-提交
export const addComplaint = (params, success, error) => _post(enterpriseAppBaseUrl+"/complaint/add",params,success,error)
//查询字典数据(公共)
export const queryDict = (params, success, error) => _get("/common/dict/queryDict",params,success,error)
export const queryDict = (params, success, error) => _get(enterpriseAppBaseUrl +"/common/dict/queryDict",params,success,error)
//执法单位(部门)列表
export const getDeptList = (params, success, error) => _get("/enforcementcode/virtualUnit/list",params,success,error)
export const getDeptList = (params, success, error) => _get(enterpriseAppBaseUrl +"/enforcementcode/virtualUnit/list",params,success,error)
//投诉事项列表
export const getComplaintItemList = (params, success, error) => _get(enterpriseAppBaseUrl +"/complaint/listNotComplaint",params,success,error)

2
zdxt-web-client/zdxt-efcode-enterprise-app/src/http/http.js

@ -24,7 +24,7 @@ http.interceptors.request.use(
if (token) {
config.headers['Authorization'] = 'Bearer ' + token;
}
config.headers['clientid'] = 'enterprise';
config.headers['clientid'] = '9e6eb24cd4e169a98b0d2cd8034d877b';
return config
},
err => {

13
zdxt-web-client/zdxt-efcode-enterprise-app/src/util/fileUpload.js

@ -9,24 +9,20 @@ const http = axios.create({
const uploadFile = (files,callback) => {
files.status = "uploading";
files.message = "上传中...";
files.status = "uploading";
// files.message = "上传中...";
// 需要使用 FormData 进行文件上传
let form = new FormData();
form.append("file", files.file);
axios({
method: "post",
url: baseUrl+ "/common/upload",
url: baseUrl+ "/app-enf/common/file/upload",
data: form,
// headers: {
// 'Content-Type': 'multipart/form-data'
// }
headers: {
'Content-Type': 'multipart/form-data'
}
})
.then((res) => {
files.status = "done";
files.message = "上传成功";
console.log(res);
callback && callback(res);
})
.catch((err) => {
@ -48,7 +44,6 @@ const nameCorrect=(name)=>{
}else{
return (String(name1[0]).substr(0,1)+"\u3000"+String(name1[0]).substr(1));
}
}else{
return name;
}

4
zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/enforcement/enforcementEvaluate.vue

@ -2,10 +2,10 @@
<div class="evaluate-page">
<!-- 顶部导航栏 -->
<van-nav-bar title="执法评价" left-text="关闭" left-arrow @click-left="onClickLeft">
<template #right>
<!-- <template #right>
<van-icon name="filter-o" size="20" @click="onFilterClick" />
<van-icon name="search" size="20" style="margin-left: 12px;" @click="onSearchClick" />
</template>
</template> -->
</van-nav-bar>
<!-- 内容区域 -->

106
zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/enforcement/enforcementEvaluateDetail.vue

@ -20,7 +20,7 @@
<!-- 执法信息卡片 -->
<div class="info-card">
<div class="card-title">执法信息</div>
<div class="card-title">执法信息 <span class="union-tag" v-if="detail.isRealUnion === 1">联</span></div>
<div class="info-row">
<span class="info-label">执法单位</span>
<span class="info-value">{{ detail.lawEnforcement }}</span>
@ -154,13 +154,13 @@
<div class="question-options">
<div class="option-btn" :class="{ active: q.answer === '是', disabled: readonly }"
@click="!readonly && (q.answer = '是')">
<van-icon name="success" v-if="q.answer === '是'" />
是
<img :src="q.answer === '是' ? badUnselectImg : badSelectImg" alt="是" />
<span>是</span>
</div>
<div class="option-btn" :class="{ active: q.answer === '否', disabled: readonly }"
@click="!readonly && (q.answer = '否')">
<van-icon name="success" v-if="q.answer === '否'" />
否
<img :src="q.answer === '否' ? goodUnselectImg : goodSelectImg" alt="否" />
<span>否</span>
</div>
</div>
</div>
@ -176,14 +176,19 @@
</template>
<script setup name="enforcementEvaluateDetail">
import { showToast } from 'vant';
import { showToast, showConfirmDialog } from 'vant';
import 'vant/es/toast/style';
import 'vant/es/dialog/style';
import veryGoodImg from '@/assets/images/eval-verygood.png';
import veryGoodDisImg from '@/assets/images/eval-verygood-dis.png';
import goodImg from '@/assets/images/eval-good.png';
import goodDisImg from '@/assets/images/eval-good-dis.png';
import badImg from '@/assets/images/eval-bad.png';
import badDisImg from '@/assets/images/eval-bad-dis.png';
import goodSelectImg from '@/assets/images/good.png';
import goodUnselectImg from '@/assets/images/ongood.png';
import badSelectImg from '@/assets/images/bad.png';
import badUnselectImg from '@/assets/images/onbad.png';
import {
getEvaluateDetail,
getEnforcementRegistrationDetailById,
@ -349,28 +354,33 @@ const onViewCaseDetail = () => {
// ========== 提交评价 ==========
const onSubmit = () => {
if (readonly.value) return;
// 按后端约定字段构造提交参数
const params = {
enforcementRegistrationId: id,
satisfaction: SATISFACTION_TO_NUM[evaluateForm.value.satisfaction] || 3,
serviceExperience: evaluateForm.value.civility, // 执法文明
checkAttitude: evaluateForm.value.attitude, // 执法态度
checkQuality: evaluateForm.value.efficiency, // 执法效率
proceduralLegality: evaluateForm.value.legality, // 合法性
otherProblemSwitch: evaluateForm.value.hasOtherIssues ? 1 : 0,
};
// 问题列表 problem1~problem5:是=1 否=0;关闭"其他问题"开关时全部传 0
questionList.value.forEach((q, idx) => {
const val = evaluateForm.value.hasOtherIssues ? (q.answer === '是' ? 1 : 0) : 0;
params['problem' + (idx + 1)] = val;
});
submitEvaluate(params, () => {
showToast('评价提交成功');
setTimeout(() => {
router.back();
}, 1500);
}, () => {
showToast('评价提交失败');
showConfirmDialog({
title: '确认提交',
message: '确认提交本次评价吗?提交后将无法修改。',
}).then(() => {
const params = {
enforcementId: id,
satisfaction: SATISFACTION_TO_NUM[evaluateForm.value.satisfaction] || 3,
serviceExperience: evaluateForm.value.civility,
checkAttitude: evaluateForm.value.attitude,
checkQuality: evaluateForm.value.efficiency,
proceduralLegality: evaluateForm.value.legality,
otherProblemSwitch: evaluateForm.value.hasOtherIssues ? 1 : 0,
hasEvaluate:1,
};
questionList.value.forEach((q, idx) => {
const val = evaluateForm.value.hasOtherIssues ? (q.answer === '是' ? 1 : 0) : 0;
params['problem' + (idx + 1)] = val;
});
submitEvaluate(params, () => {
showToast('评价提交成功');
setTimeout(() => {
router.back();
}, 1500);
}, () => {
showToast('评价提交失败');
});
}).catch(() => {
});
};
</script>
@ -426,6 +436,22 @@ const onSubmit = () => {
margin-bottom: 0.25rem;
padding-bottom: 0.15rem;
border-bottom: 1px solid #f0f0f0;
display: flex;
align-items: baseline;
.union-tag {
color: #fff;
font-size: 0.32rem;
background: #1367fe;
width: 20px;
height: 20px;
text-align: center;
line-height: 20px;
border-radius: 50px;
margin-left: 4px;
flex-shrink: 0;
position: relative;
top: -3px;
}
}
.info-row {
@ -613,19 +639,25 @@ const onSubmit = () => {
.option-btn {
display: flex;
align-items: center;
justify-content: center;
width: 0.9rem;
padding: 0.08rem 0;
border-radius: 0.13rem;
font-size: 0.26rem;
color: #666;
background: #f5f5f5;
gap: 4px;
cursor: pointer;
transition: all 0.2s;
img {
width: 24px;
height: 24px;
}
span {
font-size: 0.28rem;
color: #999;
}
&.active {
background: #e3f2fd;
color: #2b7de9;
span {
color: #2b7de9;
font-weight: 600;
}
}
}
}

86
zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/enforcement/enforcementNoticeList.vue

@ -7,10 +7,10 @@
left-arrow
@click-left="onClickLeft"
>
<template #right>
<!-- <template #right>
<van-icon name="filter-o" size="20" @click="onFilterClick" />
<van-icon name="search" size="20" style="margin-left: 12px;" @click="onSearchClick" />
</template>
</template> -->
</van-nav-bar>
<!-- 列表区域 -->
@ -55,6 +55,7 @@
<script setup name="enforcementNoticeList">
import { showToast } from 'vant';
import 'vant/es/toast/style';
import { getLawNoticeList } from '@/api/enterprise';
const router = useRouter();
@ -66,76 +67,57 @@ const refreshing = ref(false);
const pageNum = ref(1);
const pageSize = ref(10);
// ========== 生成假数据 ==========
const generateMockData = () => {
return [
{
id: 1,
title: '安全生产检查',
bureauDeptName: '深圳市xxxxxx局',
enforcementTime: '2026-04-07 14:00-17:00',
hasFeedback: true,
},
{
id: 2,
title: '安全生产检查',
bureauDeptName: '深圳市xxxxxx局',
enforcementTime: '2026-04-07 14:00-17:00',
hasFeedback: true,
},
{
id: 3,
title: '安全生产检查',
bureauDeptName: '深圳市xxxxxx局',
enforcementTime: '2026-04-07 14:00-17:00',
hasFeedback: false,
},
{
id: 4,
title: '安全生产检查',
bureauDeptName: '深圳市xxxxxx局',
enforcementTime: '2026-04-07 14:00-17:00',
hasFeedback: false,
},
{
id: 5,
title: '安全生产检查',
bureauDeptName: '深圳市xxxxxx局',
enforcementTime: '2026-04-07 14:00-17:00',
hasFeedback: false,
},
];
};
// ========== 加载数据 ==========
const fetchList = () => {
setTimeout(() => {
const rows = generateMockData();
if (refreshing.value) {
list.value = rows;
refreshing.value = false;
const params = {
pageNum: pageNum.value,
pageSize: pageSize.value,
};
getLawNoticeList(params, (res) => {
if (res.code === 200) {
const rows = res.rows || res.data?.rows || res.data?.list || res.data || [];
const total = res.total ?? res.data?.total ?? 0;
if (refreshing.value) {
list.value = Array.isArray(rows) ? rows : [];
refreshing.value = false;
} else {
list.value = [...list.value, ...(Array.isArray(rows) ? rows : [])];
}
if (!Array.isArray(rows) || rows.length === 0 || list.value.length >= total) {
finished.value = true;
} else {
pageNum.value++;
}
loading.value = false;
} else {
list.value = [...list.value, ...rows];
finished.value = true;
loading.value = false;
refreshing.value = false;
showToast(res.msg || '加载失败');
}
}, () => {
finished.value = true;
loading.value = false;
}, 500);
refreshing.value = false;
showToast('网络请求失败');
});
};
// ========== 触底加载 ==========
const onLoad = () => {
if (refreshing.value) return;
fetchList();
pageNum.value++;
};
// ========== 下拉刷新 ==========
const onRefresh = () => {
pageNum.value = 1;
list.value = [];
finished.value = false;
loading.value = true;
fetchList();
pageNum.value++;
};
// ========== 返回上一页 ==========

23
zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/enforcement/enforcementRegistrationList.vue

@ -48,7 +48,7 @@
<span class="card-status" v-if="item.isRealUnion === 1">联</span>
</div>
<div class="card-divider"></div>
<div class="card-body" @click="toDetailView(item.id)">
<div class="card-body" @click="toDetailView(item)">
<div class="card-title">{{ item.lawEnforcementItemText || '-' }}</div>
<div class="card-row">
<span class="card-label">执法单位:</span>
@ -251,22 +251,22 @@ const onDateConfirm = (value) => {
onSearch();
};
// ========== 跳转详情(与评价详情页保持一致)==========
const toDetailView = (id) => {
// ========== 跳转详情(只读查看,始终不显示提交按钮)==========
const toDetailView = (item) => {
router.push({
path: '/enterprise/enforcementEvaluateDetail',
query: { id }
query: { id: item.id, hasEvaluate: 1 }
});
};
// ========== 跳转评价 ==========
// ========== 跳转评价(可编辑,与评价页面的待评价逻辑打通)==========
const toEvaluate = (id, checkItem) => {
router.push({
path: '/evaluate',
path: '/enterprise/enforcementEvaluateDetail',
query: {
isSelect: false,
id,
lawEnforcementItemText: checkItem,
hasEvaluate: 0,
// lawEnforcementItemText: checkItem,
}
});
};
@ -342,8 +342,11 @@ const toEvaluate = (id, checkItem) => {
color: #fff;
font-size: 0.32rem;
background: #1367fe;
padding: 6px;
border-radius: 5px;
width: 20px;
height: 20px;
text-align: center;
line-height: 22px;
border-radius: 50px;
}
}

24
zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/enforcement/registrationDetail.vue

@ -60,7 +60,7 @@
</div>
<div class="info-row">
<span class="info-label">行政当事人类型</span>
<span class="info-value">{{ getDictText('partyType', caseDetail.counterpartType) }}</span>
<span class="info-value">{{ getDictText('partyType', caseDetail.partyType) }}</span>
</div>
<div class="info-row">
<span class="info-label">行政检查决定书名称</span>
@ -72,23 +72,23 @@
</div>
<div class="info-row">
<span class="info-label">行政检查类型</span>
<span class="info-value">{{ caseDetail.checkType }}</span>
<span class="info-value">{{ caseDetail.administrativeCheckTypeName }}</span>
</div>
<div class="info-row">
<span class="info-label">检查结果日期</span>
<span class="info-value">{{ caseDetail.resultDate }}</span>
<span class="info-value">{{ caseDetail.decisionDate }}</span>
</div>
<div class="info-row">
<span class="info-label">行政检查内容</span>
<span class="info-value">{{ caseDetail.checkContent }}</span>
<span class="info-value">{{ caseDetail.content }}</span>
</div>
<div class="info-row">
<span class="info-label">行政检查结果</span>
<span class="info-value">{{ caseDetail.checkResult }}</span>
<span class="info-value">{{ caseDetail.administrativeCheckResult }}</span>
</div>
<div class="info-row">
<span class="info-label">行政检查决定</span>
<span class="info-value">{{ caseDetail.decisionDate }}</span>
<span class="info-value">{{ caseDetail.administrativeCheckDecision }}</span>
</div>
<div class="info-row">
<span class="info-label">执法主体名称</span>
@ -113,7 +113,7 @@
</div>
<div class="info-row" v-if="category === '4'">
<span class="info-label">行政强制类型</span>
<span class="info-value">{{ caseDetail.penaltyCategory }}</span>
<span class="info-value">{{ caseDetail.enforcementType }}</span>
</div>
<div class="info-row">
<span class="info-label">决定文书名称</span>
@ -125,22 +125,24 @@
</div>
<div class="info-row">
<span class="info-label">{{ category === '2' ? '违法事实' : '行政强制措施理由' }}</span>
<span class="info-value">{{ caseDetail.fact }}</span>
<span class="info-value">{{ category === '2' ? caseDetail.fact : caseDetail.enforcementReason }}</span>
</div>
<div class="info-row">
<span class="info-label">{{ category === '2' ? '处罚依据' : '行政强制措施依据' }}</span>
<span class="info-value">{{ caseDetail.penaltyBasis }}</span>
<span class="info-value">{{ category === '2' ? caseDetail.penaltyBasis : caseDetail.basis }}</span>
</div>
<div class="info-row" v-if="category === '4'">
<span class="info-label">强制所示内容</span>
<span class="info-value">{{ caseDetail.penaltyBasis }}</span>
<span class="info-value">{{ caseDetail.content }}</span>
</div>
<div class="info-row" v-if="category === '2'">
<span class="info-label">处罚类型</span>
<span class="info-value">{{ getMultiDictText('law_enforce_category', caseDetail.penaltyCategory) }}</span>
<span class="info-value">{{ getMultiDictText('law_enforce_category', caseDetail.penaltyCategory)
}}</span>
</div>
<div class="info-row" v-if="category === '2'">
<span class="info-label">处罚内容</span>

71
zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/home/enterpriseHomeV2.vue

@ -12,7 +12,15 @@
<!-- 通知栏 -->
<div class="notice-bar">
<img src="@/assets/images/icon_notice.png" class="notice-icon" alt="" />
<span class="notice-text">暂无新通知</span>
<van-notice-bar
v-if="noticeList.length > 0"
class="notice-scroll"
:scrollable="noticeList.length > 1 || (noticeList[0]?.title || '').length > 16"
background="transparent"
color="#8c8c8c"
:text="noticeText"
/>
<span v-else class="notice-text">暂无新通知</span>
</div>
<!-- 轮播图 -->
@ -65,7 +73,7 @@
<script setup name="enterpriseHome">
import * as w6s from 'szient-js-sdk';
import sha1 from 'crypto-js/sha1';
import { getEnterpriseMerchantAuthorization, getSiqLoginAuth, getSiqLoginAuthMock, siqCode } from '../../../api/enterprise';
import { getEnterpriseMerchantAuthorization, getSiqLoginAuth, getSiqLoginAuthMock, siqCode, getCarouselBannerList, getSystemNoticeList } from '../../../api/enterprise';
import 'vant/es/toast/style';
const { useCommon } = $globalStore;
@ -73,16 +81,51 @@ const router = useRouter();
const isLoading = ref(true);
// ========== 轮播图数据 ==========
const bannerList = ref([
{ title: '执法监督 阳光执法', image: '', link: '' },
{ title: '入企须扫码 执法受监督', image: '', link: '' },
{ title: '优化营商环境 规范执法行为', image: '', link: '' },
]);
const bannerList = ref([]);
const onBannerClick = (item) => {
if (item.link) {
router.push(item.link);
}
};
// 调用轮播图接口并填充 bannerList、兼容多种字段名
const fetchBannerList = () => {
getCarouselBannerList(null, (res) => {
const rows = res?.rows || res?.data?.rows || res?.data || [];
if (!Array.isArray(rows)) return;
bannerList.value = rows.map(item => ({
title: item.title || item.name || '',
image: item.image || item.imageUrl || item.picUrl || item.url || item.fileUrl || '',
link: item.link || item.url || item.jumpUrl || '',
raw: item,
}));
}, () => { });
};
// ========== 系统通知公告 ==========
const noticeList = ref([]);
// 多条通知拼接(van-notice-bar 使用单一文本滚动展示)
const noticeText = computed(() => {
return noticeList.value
.map(it => it.title)
.filter(Boolean)
.join(' ');
});
// 调用系统通知接口并填充 noticeList、兼容多种字段名
const fetchNoticeList = () => {
getSystemNoticeList({ pageNum: 1, pageSize: 10 }, (res) => {
const rows = res?.rows || res?.data?.rows || res?.data?.list || res?.data || [];
if (!Array.isArray(rows)) return;
noticeList.value = rows.map(item => ({
id: item.noticeId || item.id || '',
title: item.noticeTitle || item.title || item.content || '',
type: item.noticeType || item.type || '',
createTime: item.createTime || item.publishTime || '',
raw: item,
}));
}, () => { });
};
let freshMap = reactive({
refreshLoad: false, // 是否刷新
listLoading: false, // 是否加载中
@ -163,6 +206,11 @@ onMounted(() => {
console.log(useCommon);
isLoading.value = useCommon.firstLoad;
// 首页轮播图加载
fetchBannerList();
// 首页系统通知加载
fetchNoticeList();
// 如果store中已存在完整的用户和企业信息,则跳过w6s鉴权
if (hasUserInfo()) {
console.log("用户信息已存在,跳过w6s鉴权");
@ -381,6 +429,15 @@ onMounted(() => {
object-fit: contain;
}
/* 通知滚动 */
.notice-scroll {
flex: 1;
height: auto !important;
line-height: 1.4 !important;
padding: 0 !important;
font-size: 14px;
}
.notice-text {
font-size: 14px;
color: #8c8c8c;

62
zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/law/lawServiceDetail.vue

@ -49,24 +49,60 @@
import { showToast, showImagePreview } from 'vant';
import 'vant/es/toast/style';
import 'vant/es/image-preview/style';
import { getEducationServicesDetail } from '@/api/enterprise';
const router = useRouter();
const route = useRoute();
// ========== 详情数据(模拟) ==========
// ========== 详情数据 ==========
const detail = ref({
id: route.query.id || 1,
title: '深圳市司法局联合检察院开展普法宣传活动',
source: '深圳司法局',
time: '2026-03-31 10:25:33',
content: [
'为深入贯彻落实《中华人民共和国社区矫正法》(以下简称《社区矫正法》),进一步提升社区矫正工作规范化、法治化水平,提高社会知晓度与影响力,3月30日,深圳市司法局联合市检察院开展了《社区矫正法》实施五周年系列主题宣传活动。',
'活动现场,检察干警通过设立法律咨询台、摆放展板、向群众发放《社区矫正法》重点条文图解、典型案例宣传彩页等方式,让群众对社区矫正知识有了更加直观的了解。',
'围绕群众普遍关心的"社区矫正对象在社区如何管理"、"社区矫正是否会影响公共安全"、"如何监督社区矫正对象行为"等问题,检察干警以通俗易懂的语言进行了现场答疑解惑,引导群众正确认识社区矫正工作,呼吁群众多多理解、积极关注并支持社区矫正工作,协助监管身边的社区矫正对象。',
],
images: [
'https://picsum.photos/800/500?random=1',
],
id: '',
title: '',
source: '',
time: '',
content: [],
images: [],
});
const loading = ref(false);
// ========== 获取详情数据 ==========
const fetchDetail = () => {
const id = route.query.id;
if (!id) {
showToast('缺少详情ID');
router.back();
return;
}
loading.value = true;
getEducationServicesDetail(
{ id },
(res) => {
loading.value = false;
if (res.code === 200 && res.data) {
detail.value = {
id: res.data.id,
title: res.data.title || '',
source: res.data.source || '',
time: res.data.time || '',
content: res.data.content ? (Array.isArray(res.data.content) ? res.data.content : [res.data.content]) : [],
images: res.data.images || [],
};
} else {
showToast(res.message || '获取详情失败');
}
},
(err) => {
loading.value = false;
showToast(err.message || '获取详情失败');
}
);
};
// ========== 页面加载时获取数据 ==========
onMounted(() => {
fetchDetail();
});
// ========== 返回上一页 ==========

4
zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/law/lawServiceList.vue

@ -7,10 +7,10 @@
left-arrow
@click-left="onClickLeft"
>
<template #right>
<!-- <template #right>
<van-icon name="filter-o" size="20" @click="onFilterClick" />
<van-icon name="search" size="20" style="margin-left: 12px;" @click="onSearchClick" />
</template>
</template> -->
</van-nav-bar>
<!-- 列表区域 -->

345
zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/my/complaintDetail.vue

@ -2,87 +2,129 @@
<div class="complaint-detail-page">
<van-nav-bar title="投诉建议详情" left-arrow @click-left="onClickLeft" />
<div class="detail-content">
<!-- 基本信息 -->
<div class="detail-card">
<div class="detail-row">
<span class="detail-label">投诉时间</span>
<span class="detail-value">{{ detail.enforcementTime }}</span>
</div>
<div class="detail-row">
<span class="detail-label">执法单位</span>
<span class="detail-value">{{ detail.complaintDepartments }}</span>
</div>
<div class="detail-row">
<span class="detail-label">投诉类型</span>
<span class="detail-value">{{ detail.complaintType }}</span>
</div>
<div class="detail-row">
<span class="detail-label">投诉事项</span>
<span class="detail-value">{{ detail.complaintItem || '-' }}</span>
</div>
</div>
<!-- Tab 切换:投诉详情 / 处置进度 -->
<van-tabs v-model:active="activeTab" sticky animated line-width="0.5rem" line-height="2px" color="#2b7de9">
<van-tab title="投诉详情" name="detail">
<div class="detail-content">
<!-- 基本信息 -->
<div class="detail-card">
<div class="detail-row">
<span class="detail-label">投诉时间</span>
<span class="detail-value">{{ detail.createTime }}</span>
</div>
<div class="detail-row">
<span class="detail-label">执法单位</span>
<span class="detail-value">{{ detail.complaintDepartments }}</span>
</div>
<div class="detail-row">
<span class="detail-label">投诉类型</span>
<span class="detail-value">{{ detail.complaintType==0?'默认':'联合检查' }}</span>
</div>
<div class="detail-row">
<span class="detail-label">投诉事项</span>
<span class="detail-value">{{ detail.complaintItemNames || '' }}</span>
</div>
</div>
<!-- 投诉内容 -->
<div class="detail-card">
<div class="detail-row">
<span class="detail-label">投诉内容</span>
<span class="detail-value">{{ detail.problemDescription }}</span>
</div>
</div>
<!-- 投诉内容 -->
<div class="detail-card">
<div class="detail-row">
<span class="detail-label">投诉内容</span>
<span class="detail-value">{{ detail.problemDescription }}</span>
</div>
</div>
<!-- 附件 -->
<div class="detail-card">
<div class="card-title">附件</div>
<div v-if="detail.images && detail.images.length > 0" class="image-list">
<img v-for="(img, idx) in detail.images" :key="idx" :src="img" class="detail-image" />
</div>
<div v-else class="detail-value">无附件</div>
</div>
<!-- 涉事地址 -->
<div class="detail-card">
<div class="detail-row">
<span class="detail-label">涉事地址</span>
<span class="detail-value">{{ detail.address || '-' }}</span>
</div>
<div class="detail-row">
<span class="detail-label">详细地址</span>
<span class="detail-value">{{ detail.addressDetail || '-' }}</span>
</div>
</div>
<!-- 附件 -->
<div class="detail-card">
<div class="card-title">附件</div>
<div v-if="detail.images && detail.images.length > 0" class="image-list">
<img v-for="(img, idx) in detail.images" :key="idx" :src="img" class="detail-image" />
</div>
<div v-else class="detail-value">无附件</div>
</div>
<!-- 联系人信息 -->
<div class="detail-card">
<div class="detail-row">
<span class="detail-label">联系人</span>
<span class="detail-value">{{ detail.contactName || '-' }}</span>
</div>
<div class="detail-row">
<span class="detail-label">联系电话</span>
<span class="detail-value">{{ detail.contactPhone || '-' }}</span>
<!-- 涉事地址 -->
<div class="detail-card">
<div class="detail-row">
<span class="detail-label">涉事地址</span>
<span class="detail-value">{{ detail.enterpriseAddress || '' }}</span>
</div>
<div class="detail-row">
<span class="detail-label">详细地址</span>
<span class="detail-value">{{ detail.detailedAddress || '' }}</span>
</div>
</div>
<!-- 联系人信息 -->
<div class="detail-card">
<div class="detail-row">
<span class="detail-label">联系人</span>
<span class="detail-value">{{ detail.linkman ||'' }}</span>
</div>
<div class="detail-row">
<span class="detail-label">联系电话</span>
<span class="detail-value">{{ detail.linkmanTel || '' }}</span>
</div>
</div>
<!-- 授权信息 -->
<div class="detail-card">
<div class="detail-row">
<span class="detail-label">是否授权</span>
<span class="detail-value">{{ detail.authorized ? '同意' : '不同意' }}</span>
</div>
</div>
</div>
</div>
</van-tab>
<van-tab title="处置进度" name="progress">
<div class="progress-content">
<van-empty v-if="!progressLoading && progressList.length === 0" description="暂无处置进度" />
<!-- 授权信息 -->
<div class="detail-card">
<div class="detail-row">
<span class="detail-label">是否授权</span>
<span class="detail-value">{{ detail.authorized ? '同意' : '不同意' }}</span>
<div class="progress-timeline" v-else>
<div
class="progress-item"
v-for="(item, idx) in progressList"
:key="idx"
:class="{ first: idx === 0 }"
>
<div class="dot-line">
<span class="dot" :class="{ active: idx === 0 }"></span>
<span class="line" v-if="idx !== progressList.length - 1"></span>
</div>
<div class="progress-body">
<div class="progress-row">
<span class="progress-label">处理单位:</span>
<span class="progress-value">{{ item.unit || '-' }}</span>
</div>
<div class="progress-row">
<span class="progress-label">处理意见:</span>
<span class="progress-value">{{ item.opinion || '-' }}</span>
</div>
<div class="progress-row">
<span class="progress-label">处理时间:</span>
<span class="progress-value">{{ item.time || '-' }}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</van-tab>
</van-tabs>
</div>
</template>
<script setup name="complaintDetail">
import { showToast } from 'vant';
import 'vant/es/toast/style';
import { getComplaintDetail } from '@/api/enterprise';
import { getComplaintDetail, getComplaintDisposalProgress } from '@/api/enterprise';
const router = useRouter();
const route = useRoute();
// 当前激活 tab
const activeTab = ref('detail');
const detail = ref({
time: '',
bureauDept: '',
@ -97,30 +139,78 @@ const detail = ref({
authorized: true
});
// 处置进度列表
const progressList = ref([]);
const progressLoading = ref(false);
// 处置进度假数据(后端返回为空或接口未通时充充提示)
const MOCK_PROGRESS_LIST = [
{
unit: '',
opinion: '系统自动评价',
time: '2026-01-16 11:26:28',
},
{
unit: '市统一受理分拨平台',
opinion: '复核通过,办结工单。',
time: '2026-01-09 11:26:28',
},
{
unit: '政通',
opinion: '测试',
time: '2026-01-09 11:26:00',
},
{
unit: '市统一受理分拨平台',
opinion: '请贵单位尽快处理,按处理期限答复市民并将处理结果反馈给我单位。(注:请勿将来电人资料泄露给被投诉单位,做好市民信息保密工作)',
time: '2026-01-09 11:24:17',
},
];
onMounted(() => {
const id = route.query.id;
if (!id) {
showToast('缺少投诉ID');
return;
}else{
fetchList(id);
}
fetchDetail(id);
fetchDisposalProgress(id);
});
const fetchList = (id) => {
const params = {
id: id
};
getComplaintDetail(params, (res) => {
// const { rows} = res;
console.log(res);
if(res.code === 200){
detail.value = res.data; // 直接赋值数据
const fetchDetail = (id) => {
getComplaintDetail({ id }, (res) => {
if (res && res.code === 200) {
detail.value = res.data || {};
}
}, () => { });
};
// 处置进度
const fetchDisposalProgress = (id) => {
progressLoading.value = true;
getComplaintDisposalProgress({ id }, (res) => {
progressLoading.value = false;
if (res && res.code === 200) {
const rows = res.data || res.rows || [];
// 字段名兼容映射
const list = (Array.isArray(rows) ? rows : []).map(item => ({
unit: item.disposalUnit || item.handleUnit || item.handlerUnit || item.unit || item.deptName || '',
opinion: item.disposalOpinion || item.handleOpinion || item.handlerOpinion || item.opinion || item.remark || '',
time: item.disposalTime || item.handleTime || item.handlerTime || item.time || item.createTime || '',
raw: item,
}));
// 后端返回为空时使用假数据充充展示
progressList.value = list.length ? list : MOCK_PROGRESS_LIST;
} else {
progressList.value = MOCK_PROGRESS_LIST;
}
}, () => {
progressLoading.value = false;
// 接口异常时使用假数据充充展示
progressList.value = MOCK_PROGRESS_LIST;
});
};
const onClickLeft = () => {
router.back();
};
@ -134,9 +224,29 @@ const onClickLeft = () => {
background-color: #f5f7fa;
}
.detail-content {
:deep(.van-tabs) {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
}
:deep(.van-tabs__content) {
flex: 1;
overflow-y: auto;
}
:deep(.van-tab) {
font-size: 0.35rem;
}
:deep(.van-tab--active) {
font-weight: 600;
color: #2b7de9;
}
.detail-content,
.progress-content {
padding: 0.27rem;
}
@ -193,4 +303,81 @@ const onClickLeft = () => {
border-radius: 0.1rem;
object-fit: cover;
}
/* ===== 处置进度时间轴 ===== */
.progress-timeline {
background: #fff;
border-radius: 0.2rem;
padding: 0.3rem 0.3rem 0.3rem 0.3rem;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.progress-item {
display: flex;
padding-bottom: 0.3rem;
&:last-child {
padding-bottom: 0;
}
}
.dot-line {
position: relative;
width: 0.4rem;
flex-shrink: 0;
display: flex;
flex-direction: column;
align-items: center;
padding-top: 0.1rem;
.dot {
width: 0.22rem;
height: 0.22rem;
border-radius: 50%;
background: #c8c9cc;
z-index: 1;
&.active {
background: #2b7de9;
box-shadow: 0 0 0 4px rgba(43, 125, 233, 0.15);
}
}
.line {
flex: 1;
width: 1px;
background: #e5e5e5;
margin-top: 0.05rem;
}
}
.progress-body {
flex: 1;
padding-left: 0.2rem;
font-size: 0.3rem;
line-height: 1.7;
color: #333;
padding-bottom: 0.1rem;
border-bottom: 1px dashed #f0f0f0;
}
.progress-item:last-child .progress-body {
border-bottom: none;
}
.progress-row {
display: flex;
align-items: flex-start;
.progress-label {
color: #666;
flex-shrink: 0;
}
.progress-value {
color: #333;
flex: 1;
word-break: break-all;
}
}
</style>

27
zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/my/complaintSuggestion.vue

@ -68,18 +68,18 @@
<van-radio :name="true">
<template #icon="{ checked }">
<div class="custom-radio-icon" :class="{ checked }">
<van-icon v-if="checked" name="success" size="10" color="#fff" />
<van-icon v-if="checked" name="success" size="16" color="#fff" />
</div>
</template>
同意
<span class="radio-text">同意</span>
</van-radio>
<van-radio :name="false">
<template #icon="{ checked }">
<div class="custom-radio-icon" :class="{ checked }">
<van-icon v-if="checked" name="success" size="10" color="#fff" />
<van-icon v-if="checked" name="success" size="16" color="#fff" />
</div>
</template>
不同意
<span class="radio-text">不同意</span>
</van-radio>
</van-radio-group>
</div>
@ -107,7 +107,8 @@
@confirm="onComplaintTypeConfirm" />
<!-- 执法单位查询弹窗 -->
<BureauPicker v-model:show="showBureauPicker" :list="bureauList" :loading="bureauLoading" @confirm="onBureauConfirm" />
<BureauPicker v-model:show="showBureauPicker" :list="bureauList" :loading="bureauLoading"
@confirm="onBureauConfirm" />
</div>
</template>
@ -394,16 +395,17 @@ const onSubmit = () => {
showToast('附件上传中,请稍后');
return;
}
const enterpriseAddress = ['深圳市', form.value.addressArea, form.value.addressDetail]
.filter(Boolean)
.join(' ');
// const enterpriseAddress = ['深圳市', form.value.addressArea, form.value.addressDetail]
// .filter(Boolean)
// .join(' ');
const payload = {
enforceType: form.value.complaintTypeCode,
linkman: form.value.contactName,
linkmanTel: form.value.contactPhone,
problemDescription: form.value.content,
authorization: form.value.authorized ? 1 : 0,
enterpriseAddress,
addressArea: '深圳市' + form.value.addressArea,
addressDetail: form.value.addressDetail,
fileList: buildFileList(),
complaintItemCodes: form.value.complaintItemCode || '',
complaintItemNames: form.value.complaintItem || '',
@ -657,16 +659,19 @@ const onFailed = (errorInfo) => {
.authorize-text {
flex: 1;
font-size:18px;
font-size: 18px;
color: #333;
}
.radio-text {
font-size: 12px;
}
}
.remark-text {
font-size: 0.28rem;
color: #999;
padding:0px 20px 20px 20px;
padding: 0px 20px 20px 20px;
box-sizing: border-box;
}

23
zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/my/settings.vue

@ -53,7 +53,7 @@
import { ref, onMounted } from 'vue';
import { showToast } from 'vant';
import 'vant/es/toast/style';
import { getUserMine } from '@/api/enterprise';
import { getUserMine, updateContactPhone } from '@/api/enterprise';
const router = useRouter();
@ -71,15 +71,15 @@ const editPhone = ref('');
const fetchUserMine = () => {
getUserMine({}, (res) => {
if (res) {
companyName.value = res.deptName || '';
phone.value = res.phonenumber || '';
avatar.value = res.avatar || '';
userId.value = res.userId || '';
} else {
showToast(res.msg || '企业信息加载失败');
}
}, () => {
showToast('企业信息网络异常');
// showToast('企业信息网络异常');
});
};
@ -122,9 +122,20 @@ const onBeforeClose = (action) => {
resolve(false);
return;
}
phone.value = editPhone.value;
showToast('联系电话已更新');
resolve(true);
// 调用后端修改联系电话接口
updateContactPhone({ phone : editPhone.value, userId: userId.value }, (res) => {
if (res && (res.code === 200 || res.success === true)) {
phone.value = editPhone.value;
showToast('联系电话修改成功');
resolve(true);
} else {
showToast((res && res.msg) || '联系电话修改失败');
resolve(false);
}
}, () => {
showToast('联系电话修改失败');
resolve(false);
});
});
};
</script>

5
zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml

@ -1,7 +1,10 @@
zdxt:
file:
upload-path: D:/usr/local/uploadPath
# upload-path: /usr/local/uploadPath
upload-path: /Users/vincent/uploadPath
url-prefix: /profile
qr_code_url: /usr/local/uploads/zfjd_logo.png
demo_enabled: false
--- # 监控中心配置
spring.boot.admin.client:

7
zdxt-web-server/zdxt-admin-web-server/src/main/resources/application.yml

@ -323,11 +323,10 @@ warm-flow:
# 默认Authorization,如果有多个token,用逗号分隔
token-name: ${sa-token.token-name},clientid
# 项目相关配置
sjdm:
## 项目相关配置
#sjdm:
# profile: /usr/local/uploadPath
profile: /Users/vincent/uploadPath
qr_code_url: /usr/local/uploads/zfjd_logo.png
# qr_code_url: /usr/local/uploads/zfjd_logo.png
# Spring Boot RestTemplate 超时配置
spring:

Loading…
Cancel
Save