Compare commits

...

40 Commits
master ... v5

Author SHA1 Message Date
ganhao 9d2ad81ef7 添加的登录日志 3 months ago
蟑螂恶霸 158f523314 企业返回所在区 3 months ago
蟑螂恶霸 310fffb35f 企业返回所在区 3 months ago
蟑螂恶霸 9b023a659b fastjson升级 + 同步问题 3 months ago
蟑螂恶霸 369d1fff5d fastjson升级 + 同步问题 3 months ago
蟑螂恶霸 3334020e20 全部提交先 3 months ago
庄锐波 2a2bd24e45 增加2期临时登陆接入 4 months ago
庄锐波 312408f40c Merge remote-tracking branch 'origin/v5' into v5 4 months ago
庄锐波 4aa3778b6a 增加2期临时登陆接入 4 months ago
蟑螂恶霸 c4b4fc152b 全部提交先 5 months ago
蟑螂恶霸 6312083a25 相同问题修改 5 months ago
蟑螂恶霸 03853fa27b 相同问题修改 5 months ago
蟑螂恶霸 1d4fb1d390 sql时间戳问题 5 months ago
庄锐波 b5cf2a962d 执法人员判定 5 months ago
庄锐波 954a476f9a 执法人员判定 5 months ago
庄锐波 a2888ec11d Merge remote-tracking branch 'origin/v5' into v5 5 months ago
庄锐波 0e87acf58f 执法人员判定 5 months ago
蟑螂恶霸 c029f2d6ec 发版前提交一波同步整批修改的bug 6 months ago
庄锐波 49d06c3794 送码入企功能 6 months ago
庄锐波 242a5b8e25 送码入企功能 6 months ago
庄锐波 382e0e1fb2 送码入企功能 6 months ago
庄锐波 a2e0d4406d Merge remote-tracking branch 'origin/v5' into v5 6 months ago
庄锐波 f85a1bd0b6 送码入企功能 6 months ago
蟑螂恶霸 95f3d45114 之前导出改错导致死循环部分修复 6 months ago
蟑螂恶霸 3f36cc97f0 改的乱七八糟的 先提交一波 6 months ago
庄锐波 38105986a5 送码入企功能 6 months ago
庄锐波 4e0ac51f75 送码入企功能 6 months ago
庄锐波 b07479e7bb 送码入企功能 6 months ago
庄锐波 e57de79a3c 送码入企功能 6 months ago
庄锐波 d74c1be5d0 送码入企功能 6 months ago
庄锐波 01ad07ca6f Merge remote-tracking branch 'origin/v5' into v5 6 months ago
庄锐波 9c2b6a98cf 送码入企功能 6 months ago
蟑螂恶霸 fe457346c4 Merge remote-tracking branch 'origin/v5' into v5 7 months ago
蟑螂恶霸 4ca207789f 市局提供给龙岗亮码接口 7 months ago
ganhao 71929daf61 新增提供给龙岗查看预约记录详情接口 7 months ago
ganhao f4e73e336c Merge remote-tracking branch 'origin/v5' into v5 7 months ago
ganhao 7649dec327 历史执法信息调用市局接口 7 months ago
庄锐波 f657cff27b 送码入企功能 7 months ago
庄锐波 56abaf13f3 Merge remote-tracking branch 'origin/v5' into v5 7 months ago
庄锐波 02fafe3c79 送码入企功能 7 months ago
  1. 30
      lib/EmergencyBaseLib/EmergencyCommon/src/main/java/com/zdxt/common/config/FastJson2JsonRedisSerializer.java
  2. 106
      lib/EmergencyBaseLib/EmergencyCommon/src/main/java/com/zdxt/common/util/FastJsonUtil.java
  3. 13
      lib/EmergencyBaseLib/EmergencyCommon/src/main/java/com/zdxt/common/util/IdCardCryptoUtil.java
  4. 141
      lib/EmergencyBaseLib/EmergencyCommon/src/main/java/com/zdxt/common/util/PhoneCardCryptoUtil.java
  5. 4
      lib/EmergencyBaseLib/EmergencyCommon/src/main/java/com/zdxt/common/util/jasypt/JasyptUtils.java
  6. 11
      lib/EmergencyBaseLib/EmergencyCommonEntity/src/main/java/com/zdxt/domain/auth/Dept.java
  7. 3
      lib/EmergencyBaseLib/pom.xml
  8. 3
      lib/EmergencyService/pom.xml
  9. 41
      lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/AppThirdLoginController.java
  10. 164
      lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/external/company/OutCommonController.java
  11. 8
      lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/external/company/OutEnforcementRegistrationController.java
  12. 66
      lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/external/company/OutEnterpriseInfoController.java
  13. 4
      lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/external/company/OutEnterpriseLawEnforcementController.java
  14. 38
      lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/external/company/OutUserController.java
  15. 2
      lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/task/SynUserInfoTask.java
  16. 15
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/CorsFilter.java
  17. 4
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/ShiroConfig.java
  18. 3
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/XssAndSqlFilter.java
  19. 3
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/XssAndSqlHttpServletRequestWrapper.java
  20. 159
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/user/controller/LoginByUserIdController.java
  21. 18
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/user/service/UserServiceImpl.java
  22. 5
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/resources/mapper/system/DeptMapper.xml
  23. 22
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/resources/mapper/system/UserMapper.xml
  24. 8
      lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/application-dev.yml
  25. 2
      lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/application-pro.yml
  26. 3
      lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/application.yml
  27. 99
      lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/logback.xml
  28. 8
      lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/jump.html
  29. 8
      lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/login.html
  30. 25
      lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/code/enterprise_pub_qrcode/enterprisePubQrcodeList.html
  31. 248
      lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/code/enterprise_pub_qrcode/enterprisePubQrcodeQueryList.html
  32. 2
      lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/code/registration/registration.html
  33. 2
      lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/code/registration/staticRegistration.html
  34. 2
      lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/nonRegistration/nonRegistrationView.html
  35. 1
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/controller/EnforcementRegistrationController.java
  36. 107
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/controller/EnterprisePubQrcodeController.java
  37. 28
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/domain/EnterprisePubQrcode.java
  38. 18
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/mapper/EnterprisePubQrcodeMapper.java
  39. 8
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/IEnterprisePubQrcodeService.java
  40. 8
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/ThirdLoginService.java
  41. 13
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/ComplaintStatisticsImpl.java
  42. 81
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/EnforcementCheckStatisticsImpl.java
  43. 12
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/EnforcementRegistrationServiceImpl.java
  44. 2
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/EnterpriseInformationServiceImpl.java
  45. 189
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/EnterprisePubQrcodeServiceImpl.java
  46. 12
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/NonEnforcementRegistrationServiceImpl.java
  47. 57
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/SrzUserServiceImpl.java
  48. 101
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/ThirdLoginServiceImpl.java
  49. 5
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/utils/HttpUtil.java
  50. 30
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/utils/ZwSmsClient.java
  51. BIN
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/resources/images/enterprise_pub_qrcode.xlsx
  52. 9
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/resources/mapper/EnforcementCheckStatisticsMapper.xml
  53. 16
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/resources/mapper/EnforcementRegistrationMapper.xml
  54. 6
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/resources/mapper/EnterpriseComplaintMapper.xml
  55. 17
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/resources/mapper/EnterpriseInformationMapper.xml
  56. 43
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/resources/mapper/EnterprisePubQrcodeMapper.xml
  57. 3
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/resources/mapper/NonEnforcementRegistrationMapper.xml
  58. 2
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/resources/mapper/SsztJbxx110497Mapper.xml
  59. 11
      lib/EmergencyServiceApi/emergencyAuthServiceApi/src/main/java/com/zdxt/auth/dto/DeptBean.java
  60. 41
      lib/EmergencyServiceApi/emergencyAuthServiceApi/src/main/java/com/zdxt/auth/dto/UserBean.java
  61. 4
      lib/ZdxtComponent/pom.xml
  62. 308
      org/crazycake/shiro/RedisCache.java
  63. 99
      org/crazycake/shiro/RedisCacheManager.java

30
lib/EmergencyBaseLib/EmergencyCommon/src/main/java/com/zdxt/common/config/FastJson2JsonRedisSerializer.java

@ -1,8 +1,9 @@
package com.zdxt.common.config;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONReader;
import com.alibaba.fastjson2.JSONWriter;
import com.alibaba.fastjson2.filter.Filter;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory;
@ -26,10 +27,15 @@ public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T>
private Class<T> clazz;
static
{
ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
}
/**
* 仅允许白名单包 AutoType,避免全局打开 AutoTypeSupport。
* java.util/java.lang 用于兼容 WriteClassName 写出的集合等嵌套类型。
*/
private static final Filter AUTO_TYPE_FILTER = JSONReader.autoTypeFilter(
"com.zdxt.",
"java.util.",
"java.lang."
);
public FastJson2JsonRedisSerializer(Class<T> clazz)
{
@ -44,7 +50,11 @@ public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T>
{
return new byte[0];
}
return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
// FieldBased 避免 getter 副作用;ReferenceDetection 防止对象图循环导致序列化失败
return JSON.toJSONBytes(t,
JSONWriter.Feature.WriteClassName,
JSONWriter.Feature.FieldBased,
JSONWriter.Feature.ReferenceDetection);
}
@Override
@ -54,9 +64,7 @@ public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T>
{
return null;
}
String str = new String(bytes, DEFAULT_CHARSET);
return JSON.parseObject(str, clazz);
return JSON.parseObject(bytes, clazz, AUTO_TYPE_FILTER, JSONReader.Feature.FieldBased);
}
public void setObjectMapper(ObjectMapper objectMapper)

106
lib/EmergencyBaseLib/EmergencyCommon/src/main/java/com/zdxt/common/util/FastJsonUtil.java

@ -0,0 +1,106 @@
package com.zdxt.common.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
/**
* Fastjson2 解析工具。
* <p>
* 兼容包对 String 走 JSONReaderUTF16,在部分 JDK(尤其 Oracle/麒麟 aarch64)上会误报
* {@code invalid escape character EOI}。统一走 UTF-8 字节解析规避该问题,失败时再用 Jackson 兜底。
*/
public final class FastJsonUtil {
private static final ObjectMapper JACKSON = new ObjectMapper();
private FastJsonUtil() {
}
public static JSONObject parseObject(String text) {
if (text == null) {
return null;
}
String trimmed = text.trim();
if (trimmed.isEmpty() || "null".equalsIgnoreCase(trimmed)) {
return null;
}
try {
// 关键 UTF-8 字节路径,避开 JSONReaderUTF16 的 EOI 误判
return JSON.parseObject(trimmed.getBytes(StandardCharsets.UTF_8));
} catch (Exception fastjsonEx) {
try {
@SuppressWarnings("unchecked")
Map<String, Object> map = JACKSON.readValue(trimmed, Map.class);
return new JSONObject(map);
} catch (Exception jacksonEx) {
fastjsonEx.addSuppressed(jacksonEx);
if (fastjsonEx instanceof RuntimeException) {
throw (RuntimeException) fastjsonEx;
}
throw new RuntimeException(fastjsonEx);
}
}
}
public static JSONArray parseArray(String text) {
if (text == null) {
return null;
}
String trimmed = text.trim();
if (trimmed.isEmpty() || "null".equalsIgnoreCase(trimmed)) {
return null;
}
try {
Object parsed = JSON.parse(trimmed.getBytes(StandardCharsets.UTF_8));
if (parsed instanceof JSONArray) {
return (JSONArray) parsed;
}
if (parsed == null) {
return null;
}
JSONArray arr = new JSONArray();
arr.add(parsed);
return arr;
} catch (Exception fastjsonEx) {
try {
List<?> list = JACKSON.readValue(trimmed, List.class);
return new JSONArray(list);
} catch (Exception jacksonEx) {
fastjsonEx.addSuppressed(jacksonEx);
if (fastjsonEx instanceof RuntimeException) {
throw (RuntimeException) fastjsonEx;
}
throw new RuntimeException(fastjsonEx);
}
}
}
public static <T> T parseObject(String text, Class<T> clazz) {
if (text == null) {
return null;
}
String trimmed = text.trim();
if (trimmed.isEmpty() || "null".equalsIgnoreCase(trimmed)) {
return null;
}
try {
return JSON.parseObject(trimmed.getBytes(StandardCharsets.UTF_8), clazz);
} catch (Exception fastjsonEx) {
try {
return JACKSON.readValue(trimmed, clazz);
} catch (Exception jacksonEx) {
fastjsonEx.addSuppressed(jacksonEx);
if (fastjsonEx instanceof RuntimeException) {
throw (RuntimeException) fastjsonEx;
}
throw new RuntimeException(fastjsonEx);
}
}
}
}

13
lib/EmergencyBaseLib/EmergencyCommon/src/main/java/com/zdxt/common/util/IdCardCryptoUtil.java

@ -32,11 +32,11 @@ public class IdCardCryptoUtil {
String key = "VRJHzFqJpsSZhwnsKTWNspv_GZMxTWl-bgH6DyE9Ty0";
System.out.println("====================== 示例 ======================");
// 加密
String source_dec = "18676981102";
String source_dec = "13418867033";
String enc = IdCardCryptoUtil.symmetricEncryptIdCard(key, source_dec);
System.out.println(source_dec+" 加密后 : "+enc);
// 解密
String source_enc = "wDLyWcBO/fIH2rJpSGN98A==";
String source_enc = "+ENESlbUbgdIOLpFtZxI7Q==";
String dec = IdCardCryptoUtil.symmetricDecryptIdCard(key, source_enc);
System.out.println(source_enc+" 解密后 : "+dec);
@ -51,12 +51,9 @@ public class IdCardCryptoUtil {
System.out.println("====================== 实用 ======================");
String[] strings={
"13360957126",
"16688211945",
"17339838670",
"18460319603",
"15626498490",
"18080147218",
"13316581687",
"15302630206",
"13923735911",
};
// 刘义 13410900924 19020722074

141
lib/EmergencyBaseLib/EmergencyCommon/src/main/java/com/zdxt/common/util/PhoneCardCryptoUtil.java

@ -0,0 +1,141 @@
package com.zdxt.common.util;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONObject;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
/**
* 证件号加密工具
*
* @author joelzzhang
*/
public class PhoneCardCryptoUtil {
/**
* 以下字符串为密钥,可以通过配置来传递
*/
public static final String OUTER_AES_KEY = "u3BPiZWALItH27e34oO6bw==";
public static final String INNER_AES_KEY = "ol1hV81iCruo+thxtZGnCg==";
public static final String PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDADIVdRXNyT5pmGxSUfwEup2Y1YCz7VfibMyyQhkpVP3ByKsoFDjZ30yW5gv70sQbqn/MCthTFqwh3/I/YLfthM3vU7TdlmNfnlKcQ6prxYofLkX8akrhgQVFerb/4DhcbAk5xvx12Dkeh/nzDf5Qw2K3CymRPnr4zN6ZjAL79HwIDAQAB";
public static final String PRIVATE_KEY = "MIICdAIBADANBgkqhkiG9w0BAQEFAASCAl4wggJaAgEAAoGBAMAMhV1Fc3JPmmYbFJR/AS6nZjVgLPtV+JszLJCGSlU/cHIqygUONnfTJbmC/vSxBuqf8wK2FMWrCHf8j9gt+2Eze9TtN2WY1+eUpxDqmvFih8uRfxqSuGBBUV6tv/gOFxsCTnG/HXYOR6H+fMN/lDDYrcLKZE+evjM3pmMAvv0fAgMBAAECf2rTWPVVrHuC/ywzFz+CmSXAxLNSZbMCH0doYvs0hIrmvtjCjgN1F6P1z2yUpHBEbsetZEwdyQnEf74+WCuBaFIYjmQm/05grIxam/QrGibnV5qNiA0VeCkj6bUy+z5mt3/ithgzjmOiYIgMenjf6ut6RmgRDodgJiFbvSvfskECQQDoqGMNaUV+Y/O9h+l9eOCkSUOjOsL9WDRL34ei/jf7VFFYBZLs2GMzLunDkDz1dHvufDiMPeHUTTN8zIEEpNMVAkEA01Ehf9Np2zUqFQp3SW/fHVsaGM97JsbsTQrsDdUWwZLJTSQ7Yf+yg21GkNa8Mmlsp1OLyS607HV7lPlKO0LsYwJBAN1LTOv0taUCbVRZcj1mPEYHac5Ylh9jRlrkwp7GL3lfOf//TUD6kWCdvrvE9jaCFV9ByIecVLEavV53JkDEhgECQHgR40z0XXOWs8Cc38a0cDwH5b4vNjSEVwQ3roT1jSaUNxlD+xHl7hLLZosp2Gl0ia5RxF2d0mOBJaUyOMGPdy0CQCLBU3995JMoUyLgt2+Riw0PFbdxFEnKGyshAt5Q957/hC6L/V5tQNnh/AM9q23DIUQGb1whhxdIzV12qFSSS34=";
/**
* 新版 AES/ECB/PKCS5Padding 对称密钥(与 userCrypto.js 保持一致)
* js 中: str1="qwepoiad", str2="sf12vfgi", key = str1+str2
*/
private static final String AES_ECB_KEY = "qwepoiadsf12vfgi";
public static void main(String[] args) {
System.out.println("=============== 新版 AES/ECB 加解密示例 ===============");
// 加密
String source = "19925235717";
String encrypted = aesEcbEncrypt(source);
System.out.println(source + " 加密后: " + encrypted);
// 解密
String decrypted = aesEcbDecrypt("pm1VDl8q3dfp7irhyhrtiw3amYU1jKdOhpjTqMWv0w=");
System.out.println(encrypted + " 解密后: " + decrypted);
System.out.println("=============== 批量测试 ===============");
String[] phones = {"13631554532", "13692276207"};
for (String phone : phones) {
String enc = aesEcbEncrypt(phone);
System.out.println(phone + " 加密后: " + enc);
System.out.println(enc + " 解密后: " + aesEcbDecrypt(enc));
}
}
// ======================== 新版 AES/ECB 加解密(与 userCrypto.js 一致) ========================
/**
* AES/ECB/PKCS5Padding 加密(Java中PKCS5Padding等价于JS的PKCS7Padding,块大小16时行为一致)
*
* @param content 明文字符串
* @return Base64 编码的密文
*/
public static String aesEcbEncrypt(String content) {
try {
byte[] keyBytes = AES_ECB_KEY.getBytes(StandardCharsets.UTF_8);
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] encrypted = cipher.doFinal(content.getBytes(StandardCharsets.UTF_8));
return Base64.encode(encrypted);
} catch (Exception e) {
throw new RuntimeException("AES ECB 加密失败", e);
}
}
/**
* AES/ECB/PKCS5Padding 解密(与 userCrypto.js 的 aesDecrypt 对应)
*
* @param encryptedText Base64 编码的密文
* @return 解密后的明文字符串
*/
public static String aesEcbDecrypt(String encryptedText) {
try {
byte[] keyBytes = AES_ECB_KEY.getBytes(StandardCharsets.UTF_8);
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decrypted = cipher.doFinal(Base64.decode(encryptedText));
return new String(decrypted, StandardCharsets.UTF_8);
} catch (Exception e) {
throw new RuntimeException("AES ECB 解密失败", e);
}
}
// ======================== 旧版方法(保留兼容) ========================
/**
* 证件号通过RSA的公钥加密
*/
public static String asymmetricEncryptIdCard(String publicKey, String privateKey, String content) {
RSA rsa = SecureUtil.rsa(privateKey, publicKey);
byte[] encrypt = rsa.encrypt(content, StandardCharsets.UTF_8, KeyType.PublicKey);
return Base64.encode(encrypt);
}
/**
* 证件号通过RSA的私钥解密
*/
public static String asymmetricDecryptIdCard(String publicKey, String privateKey, String content) {
RSA rsa = SecureUtil.rsa(privateKey, publicKey);
byte[] decrypt = rsa.decrypt(content, KeyType.PrivateKey);
return StrUtil.str(decrypt, StandardCharsets.UTF_8);
}
/**
* 证件号对称加密后入库(旧版)
*/
public static String symmetricEncryptIdCard(String key, String content) {
return SecureUtil.aes(SecureUtil.decode(key)).encryptBase64(content);
}
/**
* 证件号对称解密(旧版)
*/
public static String symmetricDecryptIdCard(String key, String content) {
return SecureUtil.aes(SecureUtil.decode(key)).decryptStr(content);
}
public static String httpSendPost(String url, String userId, String userName, String appCode) {
HttpRequest request = HttpRequest.post(url)
.header("x-auth-channel", IdUtil.simpleUUID())
.header("x-auth-app-code", appCode)
.form("userId", userId)
.form("userName", userName);
request.contentType("application/x-www-form-urlencoded");
JSONObject jsonObject = JSONObject.parseObject(request.execute().body());
return jsonObject.getString("data");
}
}

4
lib/EmergencyBaseLib/EmergencyCommon/src/main/java/com/zdxt/common/util/jasypt/JasyptUtils.java

@ -52,8 +52,8 @@ public final class JasyptUtils {
//加密
String s = encryptWithMD5("jdbc:mysql://10.76.108.1:15144/zfjd?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8", "ATPfOhpnAVp6yBas7RU");
System.out.println(s);
String channelcs1 = decryptWithMD5("d4ohneeRrbUb1DsUxGfVs5K7/ZGrnDmSVMQOxx0GIcb0ZWzyCq9aC7CH4aBfwlq3T9G8BLy7cDfTO+IE4uPcstIfQmdHtOlqKxTbBAVxJOUArE3FykMxHzb/NGQ7k4ahHIt+QzH0HPagJACm5B3Wgz8oUZXwq9pZlHmmAG8994JaPIgMhIsA2Lxdnaw/LHBiGkq+FpE7j5TIcItow1HcGw==", "ATPfOhpnAVp6yBas7RU");
String channelcs2 = decryptWithMD5("jGDVr5PtJpE/xa9FyHzmV2PhFrtctWjETGP5lrUlOyZ68APa81+jbQYA9RNKMI/dldAm7xxTQian8370eQqlYSAyoQV9EYlhsK3MgJkn4+OmnfBNmg227+/hizsmt1swxyW2uQbdlhzw6QaXYJ175Rjtlq1yVx+NOiamEoeSO4hzHWqxKTJT/y19fHg6QTuQc3r+PEsAFQp503HsvC5lgA==", "ATPfOhpnAVp6yBas7RU");
String channelcs1 = decryptWithMD5("Y8AuVzQ311FOgJ4h07zjkLH8ArJBED3Xxz3Ug0ncPzuLXIVCuB25DA==", "ATPfOhpnAVp6yBas7RU");
String channelcs2 = decryptWithMD5("Ogi+/4PPtXiuILnVlNg4Lw==", "ATPfOhpnAVp6yBas7RU");
System.out.println(channelcs1);
System.out.println(channelcs2);
}

11
lib/EmergencyBaseLib/EmergencyCommonEntity/src/main/java/com/zdxt/domain/auth/Dept.java

@ -216,6 +216,17 @@ public class Dept extends BaseDomain {
*/
private String unitLevel;
/** 所属区 */
private String areaNode;
public String getAreaNode() {
return areaNode;
}
public void setAreaNode(String areaNode) {
this.areaNode = areaNode;
}
public String getDwxz() {
return dwxz;
}

3
lib/EmergencyBaseLib/pom.xml

@ -32,7 +32,8 @@
<swagger.version>3.0.0</swagger.version>
<mybatis-spring-boot.version>2.1.4</mybatis-spring-boot.version>
<pagehelper.boot.version>1.3.1</pagehelper.boot.version>
<fastjson.version>1.2.76</fastjson.version>
<!-- 升级至 Fastjson2 最新版(1.x 兼容包,内核为 fastjson2) -->
<fastjson.version>2.0.64</fastjson.version>
<oshi.version>5.8.0</oshi.version>
<jna.version>5.8.0</jna.version>
<commons.io.version>2.11.0</commons.io.version>

3
lib/EmergencyService/pom.xml

@ -35,7 +35,8 @@
<thymeleaf.extras.shiro.version>2.1.0</thymeleaf.extras.shiro.version>
<mybatis.spring.boot.starter.version>1.3.2</mybatis.spring.boot.starter.version>
<pagehelper.spring.boot.starter.version>1.2.5</pagehelper.spring.boot.starter.version>
<fastjson.version>1.2.70</fastjson.version>
<!-- 升级至 Fastjson2 最新版(1.x 兼容包,内核为 fastjson2) -->
<fastjson.version>2.0.64</fastjson.version>
<druid.version>1.1.14</druid.version>
<commons.io.version>2.5</commons.io.version>
<commons.fileupload.version>1.3.3</commons.fileupload.version>

41
lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/AppThirdLoginController.java

@ -20,6 +20,7 @@ import com.zdxt.code.utils.ServiceInvocation;
import com.zdxt.common.util.IdCardCryptoUtil;
import com.zdxt.code.utils.ZwSmsClient;
import com.zdxt.common.ZDResponse;
import com.zdxt.common.util.FastJsonUtil;
import com.zdxt.common.util.JedisUtil;
import com.zdxt.common.util.RedisCache;
import com.zdxt.common.util.StringUtils;
@ -145,18 +146,37 @@ public class AppThirdLoginController {
try {
// 获取 access_token
accessTokenJson = HttpUtil.HttpSendGet(szyptUrl + "/cgi-bin/gettoken?corpid="+szyptCorpid+"&corpsecret="+szyptCorpsecret, null);
JSONObject tokenObj = JSONObject.parseObject(accessTokenJson);
JSONObject tokenObj = FastJsonUtil.parseObject(accessTokenJson);
String token = tokenObj.getString("access_token");
// 获取 用户Id
userJson = HttpUtil.HttpSendGet(szyptUrl + "/cgi-bin/user/getuserinfo?access_token="+token+"&code="+code, null);
log.info(">>> {} 市认证用户信息: {}", code, userJson);
JSONObject userOjb = JSONObject.parseObject(userJson);
if (StringUtils.isEmpty(userJson)) {
throw new RuntimeException("市认证 getuserinfo 返回为空");
}
// fastjson2 兼容包对空串会返回 null,需先判空再取值,避免 NPE 被误判为解析失败
JSONObject userOjb = FastJsonUtil.parseObject(userJson);
if (userOjb == null) {
throw new RuntimeException("市认证用户信息解析失败: " + userJson);
}
// 旧接口字段 UserId,新接口多为 userid,兼容两种
String userId = userOjb.getString("UserId");
if (StringUtils.isEmpty(userId)) {
userId = userOjb.getString("userid");
}
if (StringUtils.isEmpty(userId)) {
throw new RuntimeException("市认证未返回 UserId/userid, errcode="
+ userOjb.getString("errcode") + ", errmsg=" + userOjb.getString("errmsg")
+ ", body=" + userJson);
}
// UserBean userBean = userApi.getUserByUserStrId(userId);
// user = iUserService.selectUserByLoginName(userId);
List<User> us = iUserService.selectUserByLoginNameD(userId);
user = null!=us && us.size()>0 ? us.get(0) : null;
if (user == null) {
throw new RuntimeException("本系统未找到对应用户, loginName=" + userId);
}
// todo:这里需要将转换出来的User存redis用于做权限
redisCache.setCacheObject("shiro:app:"+user.getUserId(), user);
@ -169,8 +189,7 @@ public class AppThirdLoginController {
// return thirdLoginService.szyLogin2(user);
log.error("---> {} 市认证用户信息: {}", code, userJson);
log.error("---> 本系统用户信息: {}", user);
log.error(e.getMessage());
e.printStackTrace();
log.error("---> 深政易登录异常", e);
}
return ZDResponse.success();
@ -188,10 +207,10 @@ public class AppThirdLoginController {
log.info("获取政务微信认证签名URL:{}",url);
// 获取 access_token
String accessTokenJson = HttpUtil.HttpSendGet(szyptUrl + "/cgi-bin/gettoken?corpid="+szyptCorpid+"&corpsecret="+szyptCorpsecret, null);
JSONObject tokenObj = JSONObject.parseObject(accessTokenJson);
JSONObject tokenObj = FastJsonUtil.parseObject(accessTokenJson);
String token = tokenObj.getString("access_token");
String jsapiTicket = HttpUtil.HttpSendGet(szyptUrl + "/cgi-bin/get_jsapi_ticket?access_token="+token, null);
JSONObject ticketObj = JSONObject.parseObject(jsapiTicket);
JSONObject ticketObj = FastJsonUtil.parseObject(jsapiTicket);
String ticket = ticketObj.getString("ticket");
log.info("====================== jsapiTicket start ======================");
log.info("ticket: {}",ticket);
@ -270,18 +289,20 @@ public class AppThirdLoginController {
log.info("---> 深i企登录用户 code:{}",siqLogin.getCode());
String secret = IdCardCryptoUtil.symmetricEncryptIdCard(secretKey, siqLogin.getCode());
params.put("accessKeySign",secret);
log.info("accessKeySign{}",secret);
log.info("accessKeySign: {}",secret);
params.put("appCode",code);
String data = null;
String paramsjson = JSONObject.toJSONString(params);
log.info("paramsjson: {}",paramsjson);
try {
data = HttpUtil.httpSendPost(siqUrl + "/pub/auth/getUserInfo", JSONObject.toJSONString(params),new HashMap<>());
data = HttpUtil.httpSendPost(siqUrl + "/pub/auth/getUserInfo", paramsjson,new HashMap<>());
} catch (Exception e) {
e.printStackTrace();
log.error("---> 获取深i企用户信息失败,返回结果:{}",data);
}
log.info("---> data: {}", data);
JSONObject jsonObject = JSONObject.parseObject(data);
JSONObject jsonObject = FastJsonUtil.parseObject(data);
JSONObject userInfo = (JSONObject) jsonObject.get("data");
log.info("---> userInfo: {}", userInfo.toJSONString());
@ -340,7 +361,7 @@ public class AppThirdLoginController {
params.put("appCode",code);
String data = HttpUtil.httpSendPost(siqUrl+ "/pub/auth/getUserInfo", JSONObject.toJSONString(params),new HashMap<>());
JSONObject jsonObject = JSONObject.parseObject(data);
JSONObject jsonObject = FastJsonUtil.parseObject(data);
JSONObject userInfo = (JSONObject) jsonObject.get("data");
log.info("================= userInfo =================");

164
lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/external/company/OutCommonController.java

@ -0,0 +1,164 @@
package com.zdxt.app.controller.external.company;
import cn.hutool.core.io.FileTypeUtil;
import cn.hutool.core.io.FileUtil;
import com.google.common.collect.Lists;
import com.zdxt.auth.common.constant.Constants;
import com.zdxt.auth.common.utils.StringUtils;
import com.zdxt.auth.common.utils.file.FileUploadUtils;
import com.zdxt.auth.common.utils.file.FileUtils;
import com.zdxt.auth.dto.UserBean;
import com.zdxt.auth.feign.UserApi;
import com.zdxt.auth.framework.config.ServerConfig;
import com.zdxt.auth.framework.web.domain.AjaxResult;
import com.zdxt.common.ZDResponse;
import com.zdxt.common.config.RuoYiConfig;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.List;
import java.util.Locale;
/**
* 通用请求处理
*
* @author ruoyi
*/
@Controller
public class OutCommonController
{
private static final Logger log = LoggerFactory.getLogger(OutCommonController.class);
@Autowired
private ServerConfig serverConfig;
@Autowired
private UserApi userApi;
/**
* 默认允许的文件类型
*
* @see FileTypeUtil
*/
private List<String> defaultAllowTypes = Lists.newArrayList(
"xlsx", "xls", "docx", "doc", "pdf", "txt",
"jpg", "jpeg", "png", "bmp", "mp4",
"zip");
/**
* 通用下载请求
*
* @param fileName 文件名称
* @param delete 是否删除
*/
@GetMapping("/external/common/download")
public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
{
try
{
if (!FileUtils.isValidFilename(fileName))
{
throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
}
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
String filePath = RuoYiConfig.getDownloadPath() + fileName;
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition",
"attachment;fileName=" + FileUtils.setFileDownloadHeader(request, realFileName));
FileUtils.writeBytes(filePath, response.getOutputStream());
if (delete)
{
FileUtils.deleteFile(filePath);
}
}
catch (Exception e)
{
log.error("下载文件失败", e);
}
}
/**
* 通用上传请求
*/
@PostMapping("/external/common/upload")
@ResponseBody
public AjaxResult uploadFile(MultipartFile file) throws Exception
{
try
{
String fileNameTmp = file.getOriginalFilename();
InputStream in = file.getInputStream();
String type = FileTypeUtil.getType(in);
if (StringUtils.isBlank(type)) {
// 无法通过文件头或者扩展名识别文件类型。
return AjaxResult.error("上传失败格式不符合要求");
}
String extType = FileUtil.extName(fileNameTmp);
if (StringUtils.isBlank(extType)) {
// 后缀读不到类型,直接拒绝
return AjaxResult.error("无法读取文件类型");
}
// 文件头类型和后缀类型都要满足白名单
if (!CollectionUtils.containsAll(defaultAllowTypes,
Lists.newArrayList(type.toLowerCase(Locale.ROOT), extType.toLowerCase(Locale.ROOT)))) {
return AjaxResult.error("文件上传失败");
}
// 上传文件路径
String filePath = RuoYiConfig.getUploadPath();
// 上传并返回新文件名称
String fileName = FileUploadUtils.upload(filePath, file);
log.info("文件上传"+fileName);
String url = fileName;
AjaxResult ajax = AjaxResult.success();
ajax.put("fileName", fileName);
ajax.put("url", url);
return ajax;
}
catch (Exception e)
{
return AjaxResult.error(e.getMessage());
}
}
/**
* 本地资源通用下载
*/
@GetMapping("/external/common/download/resource")
public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
throws Exception
{
// 本地资源路径
String localPath = RuoYiConfig.getProfile();
// 数据库资源地址
String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
// 下载名称
String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition",
"attachment;fileName=" + FileUtils.setFileDownloadHeader(request, downloadName));
FileUtils.writeBytes(downloadPath, response.getOutputStream());
}
@GetMapping("/external/getUserInfo")
@ResponseBody
public ZDResponse getUserInfo(){
UserBean user = userApi.getCurrentUser();
return ZDResponse.success("查询成功",user);
}
}

8
lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/external/company/OutEnforcementRegistrationController.java

@ -254,6 +254,10 @@ public class OutEnforcementRegistrationController extends BaseController
public TableDataInfo queryEnterpriseList(EnforcementRegistration enforcementRegistration)
{
startPage();
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
System.out.println("SearchValue:"+enforcementRegistration.getSearchValue());
System.out.println("SearchText:"+enforcementRegistration.getSearchText());
System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
List<EnforcementRegistration> list = enforcementRegistrationService.selectEnterpriseRegistrationList(enforcementRegistration);
DictDataBean dictParams = new DictDataBean();
dictParams.setDictType("law_enforce_category");
@ -636,9 +640,9 @@ public class OutEnforcementRegistrationController extends BaseController
/**
* 执法登记详情 - 联合执法版本
*/
@GetMapping("/queryUniteById/{id}")
@GetMapping("/queryUniteById")
@ResponseBody
public ZDResponse queryUniteById(@PathVariable("id") String id)
public ZDResponse queryUniteById(String id)
{
List<EnforcementRegistration> regResults = new ArrayList<>();
List<EnterpriseLawEnforcement> lawResults = new ArrayList<>();

66
lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/external/company/OutEnterpriseInfoController.java

@ -0,0 +1,66 @@
package com.zdxt.app.controller.external.company;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.zdxt.code.domain.*;
import com.zdxt.code.service.*;
import com.zdxt.common.ZDResponse;
import com.zdxt.common.controller.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
/**
* 外部接口-企业执法-在线投诉Controller
*
* @author kylin
* @date 2026-04-15
*/
//@Tag(name = "外部接口", description = "企业信息")
@Controller
@RequestMapping("/external/enterprise/info")
public class OutEnterpriseInfoController extends BaseController {
@Autowired private IEnterpriseInformationService enterpriseInformationService;
@Autowired private IQrCodeGenerateHistoryService iQrCodeGenerateHistoryService;
@Autowired private ThirdLoginService thirdLoginService;
@GetMapping("/getQrCode")
@ResponseBody
public ZDResponse getQrCode(String enterpriseNumber)
{
//查询企业二维码信息
QrCodeGenerateHistory qrCodeGenerateHistory = iQrCodeGenerateHistoryService.selectQrCodeGenerateHistoryByNewest(enterpriseNumber);
//查询企业信息
EnterpriseInformation enterpriseInformation =
enterpriseInformationService.selectEnterpriseInformationByNum(enterpriseNumber);
if(BeanUtil.isNotEmpty(enterpriseInformation) &&
StrUtil.isNotEmpty(enterpriseInformation.getEnterpriseNumber())){
qrCodeGenerateHistory.setEnterpriseName(enterpriseInformation.getEnterpriseName());
}
return ZDResponse.success("查询成功",qrCodeGenerateHistory);
}
/**
* 新增保存企业信息登记
*/
@PostMapping("/addEnterprise")
@ResponseBody
public ZDResponse addEnterprise(@RequestBody EnterpriseInformation enterpriseInformation)
{
return enterpriseInformationService.insertEnterpriseInformation(enterpriseInformation) > 0
? ZDResponse.success("登记成功"): ZDResponse.error("登记失败");
}
/**
* 添加深i企
* @param jsonObject
* @return
*/
@PostMapping("/addLiqUserCompany")
@ResponseBody
public ZDResponse addLiqUserCompany(@RequestBody JSONObject jsonObject) {
return thirdLoginService.addLiqUserCompany(jsonObject) ? ZDResponse.success("登记成功") : ZDResponse.error("登记失败");
}
}

4
lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/external/company/OutEnterpriseLawEnforcementController.java

@ -78,9 +78,9 @@ public class OutEnterpriseLawEnforcementController extends BaseController
/**
* 查看预约记录详情
*/
@GetMapping( "/getById/{id}")
@GetMapping( "/getById")
@ResponseBody
public ZDResponse getById(@PathVariable("id") String id)
public ZDResponse getById(String id)
{
EnterpriseLawEnforcement enterpriseLawEnforcement =
enterpriseLawEnforcementService.selectEnterpriseLawEnforcementById(id);

38
lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/external/company/OutUserController.java

@ -0,0 +1,38 @@
package com.zdxt.app.controller.external.company;
import com.alibaba.fastjson.JSONObject;
import com.zdxt.auth.dto.DeptBean;
import com.zdxt.auth.feign.DeptApi;
import com.zdxt.code.domain.EnterpriseInformation;
import com.zdxt.code.service.ThirdLoginService;
import com.zdxt.common.ZDResponse;
import com.zdxt.common.controller.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Author: kylin
* @Date: 2024/5/1 3:00 下午
* @Version: 1.0
* @Desc: TODO
*/
@Controller
@RequestMapping("/external/user")
public class OutUserController extends BaseController {
@Autowired private ThirdLoginService thirdLoginService;
/**
* 新增保存企业信息登记
*/
@PostMapping("/addLiqUser")
@ResponseBody
public ZDResponse addLiqUser(@RequestBody JSONObject jsonObject)
{
Long userId = thirdLoginService.addLiqUser(jsonObject);
return ZDResponse.success("登记成功", userId);
}
}

2
lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/task/SynUserInfoTask.java

@ -132,7 +132,7 @@ public class SynUserInfoTask {
// }
// user.setUnits(units);
user.randomSalt();
// user.randomSalt();
//新增用户默认不删除标记
user.setDelFlag("0");

15
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/CorsFilter.java

@ -14,6 +14,7 @@ import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
@ -31,8 +32,9 @@ public class CorsFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//配置可信域名
String[] authhosts = {"http://10.132.108.3:85","http://jdm.szssfj.cn","http://localhost:85","http://192.168.31.196:3301","http://172.16.20.74:85",
"http://localhost:3301","http://10.132.108.3:81","http://10.132.108.3:85", "http://192.168.1.130:3301", "http://172.16.20.74:3301", "http://10.132.108.1", "http://10.132.108.6"};
String[] authhosts = {"http://10.132.108.3:85","http://jdm.szssfj.cn","http://localhost:85","http://192.168.31.196:3301","http://172.16.20.74:85", "http://192.168.145.155", "http://zfjdm.lggov.cn", "https://zfjdm.lggov.cn",
"http://localhost:3301","http://10.132.108.3:81","http://10.132.108.3:85", "http://192.168.1.130:3301", "http://172.16.20.74:3301", "http://10.132.108.1", "http://10.132.108.6",
"http://192.168.129.149","http://192.168.129.150","http://192.168.129.151","http://192.168.129.512","http://192.168.129.513","http://192.168.129.154","http://192.168.129.157","http://192.168.129.158", "http://10.132.108.18","http://10.132.108.18:12004"};
String authost = "";
HttpServletRequest httprequest = (HttpServletRequest) request;
String origin = httprequest.getHeader("Origin");
@ -60,7 +62,14 @@ public class CorsFilter implements Filter {
httpresponse.addHeader("Access-Control-Allow-Credentials", "true");
httpresponse.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
httpresponse.addHeader("Access-Control-Allow-Headers", "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN,token");
httpresponse.addHeader("X-Frame-Options", "SAMEORIGIN");
LocalDate now = LocalDate.now();
LocalDate start = LocalDate.of(2026, 6, 19);
LocalDate end = LocalDate.of(2026, 10, 1);
if (!now.isBefore(start) && !now.isAfter(end)) {
httpresponse.addHeader("Content-Security-Policy", "frame-ancestors 'self' http://localhost:85 http://localhost:12004 http://58.250.157.161 http://10.132.108.3:85 http://10.132.108.3 http://10.132.108.18 http://10.132.108.18:12004");
} else {
httpresponse.addHeader("X-Frame-Options", "SAMEORIGIN");
}
// res.addHeader("Access-Control-Allow-Headers", "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN");
// TODO 暂时允许options 判断请求方法是否为OPTIONS
// if (((HttpServletRequest) request).getMethod().equals("OPTIONS")) {

4
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/ShiroConfig.java

@ -284,6 +284,7 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/authLogin", "anon,captchaValidate");
filterChainDefinitionMap.put("/appLogin", "anon,captchaValidate");
filterChainDefinitionMap.put("/noPermission/login", "anon,captchaValidate");
filterChainDefinitionMap.put("/loginByUserId", "anon");
filterChainDefinitionMap.put("/small/**", "anon");
// 不拦截app登录
@ -306,6 +307,9 @@ public class ShiroConfig {
// 附件访问不拦截
filterChainDefinitionMap.put("/profile/**", "anon");
// 新闻发布接口不拦截(Vue前端跨域访问)
filterChainDefinitionMap.put("/code/demoInfoNew/**", "anon");
filterChainDefinitionMap.put("/safety/enterprise/register", "anon");
filterChainDefinitionMap.put("/safety/enterprise/registerSave", "anon");

3
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/XssAndSqlFilter.java

@ -38,7 +38,8 @@ public class XssAndSqlFilter implements Filter {
String uri = req.getRequestURI();
if (uri.indexOf("/system/notice/") >= 0
|| uri.indexOf("/app/code/registration/") >= 0
|| uri.indexOf("/app/enterpriseInformation/getEnterpriseInfoBySj") >= 0) {
|| uri.indexOf("/app/enterpriseInformation/getEnterpriseInfoBySj") >= 0
|| uri.indexOf("/external/") >= 0) {
chain.doFilter(request, response);
return;
}

3
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/config/XssAndSqlHttpServletRequestWrapper.java

@ -295,7 +295,8 @@ public class XssAndSqlHttpServletRequestWrapper extends HttpServletRequestWrappe
Map<String, String[]> submitParams = new HashMap(parameterMap);
Set<String> submitNames = submitParams.keySet();
for (String submitName : submitNames) {
if("secretName".equals(submitName) || "secretKey".equals(submitName) || "validateCode".equals(submitName)){
if("secretName".equals(submitName) || "secretKey".equals(submitName) || "validateCode".equals(submitName)
|| "v1_system_credential".equals(submitName)){
return false;
}
if ("cronExpression".equals(submitName)) { return false; }

159
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/user/controller/LoginByUserIdController.java

@ -0,0 +1,159 @@
package com.zdxt.auth.project.system.user.controller;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.zdxt.auth.framework.shiro.nopaddword.LoginType;
import com.zdxt.auth.framework.shiro.nopaddword.UserToken;
import com.zdxt.auth.framework.shiro.nopaddword.UserType;
import com.zdxt.auth.framework.web.controller.BaseController;
import com.zdxt.auth.project.system.user.service.IUserService;
import com.zdxt.domain.auth.User;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.http.HttpStatus;
import org.springframework.web.server.ResponseStatusException;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Base64;
/**
* 通过用户ID登录
*/
@Controller
public class LoginByUserIdController extends BaseController {
private static final Logger log = LoggerFactory.getLogger(LoginByUserIdController.class);
/**
* AES解密密钥(与新系统 EncryptUtils.encryptByAes 加密密钥一致)
*/
private static final String AES_KEY = "zdxt2026PlatForm";
/**
* 时间戳允许的最大偏移量(秒)
*/
private static final long ALLOWED_TIME_OFFSET_SECONDS = 20;
/**
* 允许登录的开始日期时间(格式 yyyy-MM-dd HH:mm)
*/
private static final String ALLOWED_START_TIME = "2026-06-18 08:00";
/**
* 允许登录的结束日期时间(格式 yyyy-MM-dd HH:mm)
*/
private static final String ALLOWED_END_TIME = "2026-09-01 22:00";
@Autowired
private IUserService userService;
/**
* 通过v1_system_credential免密登录,解密凭据后验证时间戳偏移并使用userId登录
*
* @param v1SystemCredential AES加密的凭据(包含userid和ts)
* @return 跳转页面
*/
@GetMapping("/loginByUserId")
public String loginByUserId(@RequestParam("v1_system_credential") String v1SystemCredential) {
// 0. 验证当前时间是否在允许的日期时间范围内
if (!isWithinAllowedTime()) {
log.warn("通过userId登录失败, 当前时间不在允许的时间范围内[{} - {}]",
ALLOWED_START_TIME, ALLOWED_END_TIME);
throw new ResponseStatusException(HttpStatus.NOT_FOUND);
}
// 1. AES解密凭据
String decryptedJson = decryptByAes(v1SystemCredential);
if (decryptedJson == null) {
log.warn("通过userId登录失败, v1_system_credential解密失败");
throw new ResponseStatusException(HttpStatus.NOT_FOUND);
}
// 2. 解析JSON获取userid和ts
Long userId;
long ts;
try {
Gson gson = new Gson();
JsonObject jsonObject = gson.fromJson(decryptedJson, JsonObject.class);
userId = Long.parseLong(jsonObject.get("userid").getAsString());
ts = Long.parseLong(jsonObject.get("ts").getAsString());
} catch (Exception e) {
log.warn("通过userId登录失败, 凭据JSON解析异常: {}", e.getMessage());
throw new ResponseStatusException(HttpStatus.NOT_FOUND);
}
// 3. 验证时间戳是否与当前系统时间偏移在±20秒内
// long currentTimeMillis = System.currentTimeMillis();
// long diffSeconds = Math.abs(currentTimeMillis - ts) / 1000;
// if (diffSeconds > ALLOWED_TIME_OFFSET_SECONDS) {
// log.warn("通过userId登录失败, 时间戳偏移超过{}秒, ts: {}, 当前时间: {}, 偏移: {}秒",
// ALLOWED_TIME_OFFSET_SECONDS, ts, currentTimeMillis, diffSeconds);
// throw new ResponseStatusException(HttpStatus.NOT_FOUND);
// }
// 4. 根据userId查询用户
User sysUser = userService.selectUserById(userId);
if (sysUser == null) {
log.warn("通过userId登录失败, 用户不存在, userId: {}", userId);
throw new ResponseStatusException(HttpStatus.NOT_FOUND);
}
// 5. 使用免密登录方式进行Shiro认证
UserToken token = new UserToken(sysUser.getLoginName(), LoginType.NOPASSWD, UserType.SYS.getType());
Subject subject = SecurityUtils.getSubject();
try {
subject.login(token);
log.info("通过v1_system_credential登录成功, userId: {}", userId);
return "redirect:/code/statisticalPanel/home-analysis";
} catch (AuthenticationException e) {
log.error("通过userId登录认证失败, userId: {}, 原因: {}", userId, e.getMessage());
throw new ResponseStatusException(HttpStatus.NOT_FOUND);
}
}
/**
* 判断当前时间是否在允许的日期时间范围内
*
* @return true-在允许时间范围内, false-不在允许时间范围内
*/
private boolean isWithinAllowedTime() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime startTime = LocalDateTime.parse(ALLOWED_START_TIME, formatter);
LocalDateTime endTime = LocalDateTime.parse(ALLOWED_END_TIME, formatter);
LocalDateTime now = LocalDateTime.now();
return !now.isBefore(startTime) && !now.isAfter(endTime);
}
/**
* AES/ECB/PKCS5Padding 解密(对应新系统 EncryptUtils.encryptByAes 的加密方式)
*
* @param encryptedText Base64编码的AES密文
* @return 解密后的明文字符串,解密失败返回null
*/
private String decryptByAes(String encryptedText) {
try {
byte[] keyBytes = AES_KEY.getBytes(StandardCharsets.UTF_8);
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decodeBytes = Base64.getDecoder().decode(encryptedText);
byte[] decrypted = cipher.doFinal(decodeBytes);
return new String(decrypted, StandardCharsets.UTF_8);
} catch (Exception e) {
log.error("AES解密失败: {}", e.getMessage());
return null;
}
}
}

18
lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/user/service/UserServiceImpl.java

@ -346,16 +346,16 @@ public class UserServiceImpl implements IUserService {
@Override
@Transactional
public int updateUser(User user) {
Long userId = user.getUserId();
// Long userId = user.getUserId();
// user.setUpdateBy(ShiroUtils.getLoginName());
// 删除用户与角色关联
userRoleMapper.deleteUserRoleByUserId(userId);
// 新增用户与角色管理
insertUserRole(user);
// 删除用户与岗位关联
userPostMapper.deleteUserPostByUserId(userId);
// 新增用户与岗位管理
insertUserPost(user);
// // 删除用户与角色关联
// userRoleMapper.deleteUserRoleByUserId(userId);
// // 新增用户与角色管理
// insertUserRole(user);
// // 删除用户与岗位关联
// userPostMapper.deleteUserPostByUserId(userId);
// // 新增用户与岗位管理
// insertUserPost(user);
int resCount = userMapper.updateUser(user);
return resCount;

5
lib/EmergencyService/zdxtEmergencyAuthService/src/main/resources/mapper/system/DeptMapper.xml

@ -64,6 +64,7 @@
<result property="dwxtlbms" column="dwxtlbms" />
<result property="unitLevelCode" column="unitLevelCode" />
<result property="unitLevel" column="unitLevel" />
<result property="areaNode" column="area_node" />
</resultMap>
<sql id="selectDeptVo">
@ -255,8 +256,8 @@
</select>
<select id="selectDeptById" parameterType="string" resultMap="DeptResult">
select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status,d.dept_type,d.creditcode,d.zone, d.zzDisplayPath,
(select dept_name from sys_dept where dept_id = d.parent_id) parent_name
select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status,d.dept_type,d.creditcode,d.zone, d.zzDisplayPath, d.area_node,
(select dept_name from sys_dept where dept_id = d.parent_id) parent_name
from sys_dept d
where d.dept_id = #{deptId}
</select>

22
lib/EmergencyService/zdxtEmergencyAuthService/src/main/resources/mapper/system/UserMapper.xml

@ -850,7 +850,16 @@
AND (
(u.law_certificate_num is not null AND u.law_certificate_num !="")
or (d.`zone` = 5 or d.`zone` = 15)
or (d.parent_id in (select dept_id from sys_dept where `zone` = 5 or `zone` = 15))
<if test="userName != null and userName != ''">
or EXISTS (
SELECT 1 FROM sys_dept anc
WHERE (anc.`zone` = 5 OR anc.`zone` = 15)
AND FIND_IN_SET(anc.dept_id, d.ancestors)
)
</if>
<if test="userName == null or userName == ''">
or (d.parent_id in (select dept_id from sys_dept where `zone` = 5 or `zone` = 15))
</if>
)
</if>
and u.dept_id != 405
@ -893,7 +902,16 @@
AND (
(u.law_certificate_num is not null AND u.law_certificate_num !="")
or (d.`zone` = 5 or d.`zone` = 15)
or (d.parent_id in (select dept_id from sys_dept where `zone` = 5 or `zone` = 15))
<if test="userName != null and userName != ''">
or EXISTS (
SELECT 1 FROM sys_dept anc
WHERE (anc.`zone` = 5 OR anc.`zone` = 15)
AND FIND_IN_SET(anc.dept_id, d.ancestors)
)
</if>
<if test="userName == null or userName == ''">
or (d.parent_id in (select dept_id from sys_dept where `zone` = 5 or `zone` = 15))
</if>
)
</if>
and u.dept_id != 405

8
lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/application-dev.yml

@ -6,9 +6,9 @@ spring:
# host: 10.76.108.1
# port: 6379
# password: zfjd@123
host: 127.0.0.1
host: 139.186.148.21
port: 6379
password:
password: zdxt@123
timeout: 6000ms # 连接超时时长(毫秒)
lettuce:
pool:
@ -47,8 +47,8 @@ yzy:
paasid: 123
#qr_code_url: C:\ruoyi\uploadPath\zfjd_logo.png
qr_code_url: /usr/local/uploads/zfjd_logo.png
qr_code_url: C:\ruoyi\uploadPath\zfjd_logo.png
#qr_code_url: /usr/local/uploads/zfjd_logo.png
#qr_code_url: /Users/kylin_stone/Workspaces/uploads/zfjd_logo.png
#深i企对接密钥 测试环境

2
lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/application-pro.yml

@ -38,7 +38,7 @@ security:
allowed:
servernames: 10.132.108.1,10.132.108.6,10.76.108.1,10.76.108.3,10.132.108.3,10.76.108.4,10.132.108.4,jdm.szssfj.cn,58.250.157.161,127.0.0.1,localhost,192.168.31.146,192.168.236.84,192.168.168.110,192.168.11.120,61.144.224.125,10.189.1.153,61.144.224.146,192.168.6.253,61.144.224.92,61.144.224.40,61.144.224.41,61.144.224.42,61.144.224.43,192.168.129.145,192.168.129.146,192.168.129.147,192.168.129.148
servernames: 10.132.108.1,10.132.108.6,10.76.108.1,10.76.108.3,10.132.108.3,10.76.108.4,10.132.108.4,jdm.szssfj.cn,58.250.157.161,127.0.0.1,localhost,192.168.31.146,192.168.236.84,192.168.168.110,192.168.11.120,61.144.224.125,10.189.1.153,61.144.224.146,192.168.6.253,61.144.224.92,61.144.224.40,61.144.224.41,61.144.224.42,61.144.224.43,192.168.129.145,192.168.129.146,192.168.129.147,192.168.129.148,192.168.145.155,zfjdm.lggov.cn,192.168.129.149,192.168.129.150,192.168.129.151,192.168.129.512,192.168.129.513,192.168.129.154,192.168.129.157,192.168.129.158
excel:
export: true

3
lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/application.yml

@ -10,7 +10,8 @@ ruoyi:
demoEnabled: true
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
# profile: C:/ruoyi/uploadPath
profile: /usr/local/uploadPath
# profile: /usr/local/uploadPath
profile: /data/upload
# profile: /Users/kylin_stone/Workspaces/uploads
# 获取ip地址开关
addressEnabled: false

99
lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/logback.xml

@ -1,99 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
<contextName>logback</contextName>
<property name="zdxtEmergencyBootStart.path" value="/usr/local/zdxtEmergencyBootStart/logs/zdxtEmergencyBootStart.log"/>
<property name="zdxtEmergencyBootStart.error.path" value="/usr/local/zdxtEmergencyBootStart/logs/zdxtEmergencyBootStart.error.log"/>
<!--有线报警数据日志-->
<!-- <property name="zdxtEmergencyBootStart.realtimeWarnHandler.path" value="/usr/local/zdxtEmergencyBootStart/logs/realtimeWarnHandler.log"/>-->
<!--mqtt数据日志-->
<!-- <property name="zdxtEmergencyBootStart.warningMessageCallback.path" value="/usr/local/zdxtEmergencyBootStart/logs/warningMessageCallback.log"/>-->
<!--mqtt缓存数据日志-->
<!-- <property name="zdxtEmergencyBootStart.iotMessageTask.path" value="/usr/local/zdxtEmergencyBootStart/logs/iotMessageTask.log"/>-->
<property name="historyLogPath" value="/usr/local/zdxtEmergencyBootStart/logs/history"/>
<!-- 异步任务日志 -->
<!-- <property name="zdxtEmergencyBootStart.asyncTask.path" value="/usr/local/qn-worksite/logs/zdxtEmergencyBootStart.asyncTask.log"/>-->
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>
%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="zdxtEmergencyBootStart" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${zdxtEmergencyBootStart.path}</file>
<!-- 过滤日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch> <!-- 如果命中就禁止这条日志 -->
<onMismatch>ACCEPT</onMismatch> <!-- 如果没有命中就使用这条规则 -->
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${historyLogPath}/%d{yyyy-MM-dd}/zdxtEmergencyBootStart.zip</fileNamePattern>
<maxHistory>180</maxHistory>
<!-- <maxFileSize>500MB</maxFileSize>-->
</rollingPolicy>
<encoder>
<pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="zdxtEmergencyBootStart-error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${zdxtEmergencyBootStart.error.path}</file>
<!-- 过滤日志 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${historyLogPath}/%d{yyyy-MM-dd}/zdxtEmergencyBootStart-error.zip</fileNamePattern>
<maxHistory>180</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<logger name="com.zdxt" level="INFO" additivity="false">
<appender-ref ref="zdxtEmergencyBootStart" />
<appender-ref ref="zdxtEmergencyBootStart-error"/>
<!-- <appender-ref ref="zdxtEmergencyBootStart-realtimeWarnHandler"/>-->
<!-- <appender-ref ref="zdxtEmergencyBootStart-warningMessageCallback"/>-->
<!-- <appender-ref ref="zdxtEmergencyBootStart-iotMessageTask"/>-->
</logger>
<logger name="org.springframework" level="INFO" additivity="false">
<appender-ref ref="zdxtEmergencyBootStart" />
<appender-ref ref="zdxtEmergencyBootStart-error"/>
<!-- <appender-ref ref="zdxtEmergencyBootStart-realtimeWarnHandler"/>-->
<!-- <appender-ref ref="zdxtEmergencyBootStart-warningMessageCallback"/>-->
<!-- <appender-ref ref="zdxtEmergencyBootStart-iotMessageTask"/>-->
</logger>
<root level="INFO">
<appender-ref ref="zdxtEmergencyBootStart"/>
<appender-ref ref="zdxtEmergencyBootStart-error"/>
<!-- <appender-ref ref="zdxtEmergencyBootStart-realtimeWarnHandler"/>-->
<!-- <appender-ref ref="zdxtEmergencyBootStart-warningMessageCallback"/>-->
<!-- <appender-ref ref="zdxtEmergencyBootStart-iotMessageTask"/>-->
<appender-ref ref="consoleAppender"/>
</root>
<!-- <root level="ERROR">
<appender-ref ref="zdxtEmergencyBootStart"/>
<appender-ref ref="zdxtEmergencyBootStart-error"/>
<appender-ref ref="zdxtEmergencyBootStart-realtimeWarnHandler"/>
<appender-ref ref="zdxtEmergencyBootStart-warningMessageCallback"/>
<appender-ref ref="consoleAppender"/>
</root>-->
</configuration>

8
lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/jump.html

@ -21,7 +21,13 @@
<link href="../../static/css/style.default.css" th:href="@{/static/css/style.default.css}" rel="stylesheet"/>
<script>
if(window.top!==window.self){window.top.location=window.location};
(function(){
var now = new Date();
var start = new Date('2026-06-19');
var end = new Date('2026-12-01');
var inAllowedPeriod = (now >= start && now <= end);
if(!inAllowedPeriod && window.top!==window.self){window.top.location=window.location}
})();
</script>
</head>

8
lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/login.html

@ -203,7 +203,13 @@
}
</script>
<script>
if(window.top!==window.self){window.top.location=window.location}
(function(){
var now = new Date();
var start = new Date('2026-06-19');
var end = new Date('2026-12-01');
var inAllowedPeriod = (now >= start && now <= end);
if(!inAllowedPeriod && window.top!==window.self){window.top.location=window.location}
})();
</script>
</body>
</html>

25
lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/code/enterprise_pub_qrcode/enterprisePubQrcodeList.html

@ -65,19 +65,22 @@
<!--<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="code:pubQrcode:add">
<i class="fa fa-plus"></i> 新增
</a>-->
<a class="btn btn-info" onclick="importData()" shiro:hasPermission="code:pubQrcode:add">
<a class="btn btn-info" onclick="importData()">
<i class="fa fa-upload"></i> 批量导入
</a>
<a class="btn btn-warning" onclick="matchData()" shiro:hasPermission="code:pubQrcode:edit">
<a class="btn btn-warning" style="color: #F54927; background-color: #FCC6BB; border-color: #F54927" onclick="downloadTemplate()">
<i class="fa fa-file-excel-o"></i> 下载模板
</a>
<a class="btn btn-warning" onclick="matchData()">
<i class="fa fa-link"></i> 匹配
</a>
<a class="btn btn-primary" onclick="downloadData()" shiro:hasPermission="code:pubQrcode:edit">
<a class="btn btn-primary" onclick="downloadData()">
<i class="fa fa-download"></i> 下载
</a>
<a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="code:pubQrcode:remove">
<a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()">
<i class="fa fa-remove"></i> 删除
</a>
<a class="btn btn-success" onclick="setDownloadStatus()" shiro:hasPermission="code:pubQrcode:edit">
<a class="btn btn-success" onclick="setDownloadStatus()">
<i class="fa fa-tag"></i> 设置下载状态
</a>
</div>
@ -98,8 +101,8 @@
</form>
</script>
<script th:inline="javascript">
var removeFlag = [[${@permission.hasPermi('code:pubQrcode:remove')}]];
var editFlag = [[${@permission.hasPermi('code:pubQrcode:edit')}]];
var removeFlag = "";
var editFlag ="";
var prefix = ctx + "code/enterprisePubQrcode";
$(function() {
@ -114,7 +117,8 @@
showColumns: false,
showRefresh: false,
showToggle: false,
pageSize: 100,
pageSize: 10,
pageList: [10, 25, 50,100,200],
columns: [{
checkbox: true
},
@ -190,6 +194,11 @@
$.table.init(options);
});
/** 下载导入模板 */
function downloadTemplate() {
window.location.href = prefix + "/importTemplate";
}
/** 导入数据 */
function importData() {
layer.open({

248
lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/code/enterprise_pub_qrcode/enterprisePubQrcodeQueryList.html

@ -0,0 +1,248 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="zdxtInclude :: header('送码入企信息查询')" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
<form id="formId">
<div class="select-list">
<ul>
<li>
<p>企业名称:</p>
<input type="text" name="enterpriseName"/>
</li>
<li>
<p>统一社会信用代码:</p>
<input type="text" name="enterpriseNumber"/>
</li>
<li>
<p>所属区域:</p>
<select name="areaId" id="areaSelect">
<option value="">全部</option>
</select>
</li>
<li>
<p>所属街道:</p>
<select name="streetId" id="streetSelect">
<option value="">全部</option>
</select>
</li>
<li>
<p>匹配状态:</p>
<select name="matchingStatus">
<option value="">全部</option>
<option value="未匹配">未匹配</option>
<option value="已匹配">已匹配</option>
<option value="强制匹配">强制匹配</option>
<option value="匹配失败">匹配失败</option>
</select>
</li>
<li>
<p>下载情况:</p>
<select name="downloadStatus">
<option value="">全部</option>
<option value="未下载">未下载</option>
<option value="已下载">已下载</option>
</select>
</li>
<li>
<p>上传人:</p>
<input type="text" name="userName"/>
</li>
<li>
<p>上传单位:</p>
<input type="text" name="deptName"/>
</li>
<li>
<a class="btn btn-success btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-reset btn-sm" onclick="resetQueryForm()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-primary" onclick="downloadData()">
<i class="fa fa-download"></i> 下载
</a>
</div>
<div class="col-sm-12 select-table table-bordered">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
<th:block th:include="zdxtInclude :: footer" />
<script th:inline="javascript">
var prefix = ctx + "code/enterprisePubQrcode";
$(function() {
loadAreaDict();
var options = {
url: prefix + "/queryPageList",
modalName: "送码入企信息查询",
showHeader: false,
showFooter: false,
showColumns: false,
showRefresh: false,
showToggle: false,
pageSize: 20,
columns: [
{
checkbox: true
},
{
field : 'id',
title : '主键ID',
visible: false
},
{
field : 'importRowNum',
title : '导入序号'
},
{
field : 'enterpriseName',
title : '企业名称'
},
{
field : 'enterpriseNumber',
title : '统一社会信用代码'
},
{
field : 'areaName',
title : '所属区域'
},
{
field : 'streetName',
title : '所属街道'
},
{
field : 'matchingStatus',
title : '匹配状态',
formatter: function(value, row, index) {
if (value == '匹配失败') {
return '<span style="color:red;text-decoration:underline;cursor:pointer;" title="' + (row.matchingMessage || '') + '">' + value + '</span>';
}
if ((value == '已匹配' || value == '强制匹配') && row.matchingMessage) {
return '<span style="color:blue;text-decoration:underline;cursor:pointer;" title="' + row.matchingMessage + '">' + value + '</span>';
}
return value;
}
},
{
field : 'downloadStatus',
title : '下载情况'
},
{
field : 'userName',
title : '上传人'
},
{
field : 'deptName',
title : '上传单位'
},
{
field : 'remark',
title : '备注'
}]
};
$.table.init(options);
});
/** 加载区域字典数据 */
function loadAreaDict() {
$.ajax({
url: prefix + "/dictAreaList",
type: "get",
dataType: "json",
success: function(result) {
if (result.success && result.data) {
var $areaSelect = $('#areaSelect');
$.each(result.data, function(i, item) {
$areaSelect.append('<option value="' + item.dictValue + '">' + item.dictLabel + '</option>');
});
}
}
});
}
/** 区域变更时加载街道字典数据 */
$('#areaSelect').change(function() {
var areaId = $(this).val();
var $streetSelect = $('#streetSelect');
$streetSelect.html('<option value="">全部</option>');
if (areaId) {
$.ajax({
url: prefix + "/dictStreetList",
type: "get",
data: { areaId: areaId },
dataType: "json",
success: function(result) {
if (result.success && result.data) {
$.each(result.data, function(i, item) {
$streetSelect.append('<option value="' + item.dictValue + '">' + item.dictLabel + '</option>');
});
}
}
});
}
});
/** 重置查询表单 */
function resetQueryForm() {
$.form.reset();
$('#streetSelect').html('<option value="">全部</option>');
}
/** 批量下载 */
function downloadData() {
var rows = $.table.selectColumns("id");
if (rows.length == 0) {
$.modal.alertWarning("请至少选择一条记录");
return;
}
var loadIndex = layer.msg('PDF生成中,请稍候...', {icon: 16, shade: [0.3, '#000'], time: 0});
$.ajax({
url: prefix + "/generatePdf",
type: "post",
data: { "ids": rows.join(",") },
dataType: "json",
success: function(result) {
layer.close(loadIndex);
if (result.success) {
layer.open({
type: 1,
title: '生成完成',
area: ['380px', '200px'],
shade: 0.3,
shadeClose: true,
content: '<div style="padding:30px;text-align:center;">' +
'<p style="margin-bottom:20px;font-size:14px;"><i class="fa fa-check-circle" style="color:#5cb85c;margin-right:6px;"></i>PDF文件已生成完成</p>' +
'<a href="' + result.data + '" class="btn btn-primary" target="_blank">' +
'<i class="fa fa-download"></i> 点击下载</a></div>',
btn: ['关闭'],
btn1: function(index) {
layer.close(index);
$.table.refresh();
},
cancel: function() {
$.table.refresh();
}
});
} else {
$.modal.alertError(result.message);
}
},
error: function() {
layer.close(loadIndex);
$.modal.alertError("生成失败,请联系管理员!");
}
});
}
</script>
</body>
</html>

2
lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/code/registration/registration.html

@ -167,7 +167,7 @@
<li>
<a class="btn btn-success btn-sm" onclick="search1()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-reset btn-sm" onclick="rest1()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
<a class="btn btn-warning btn-sm" onclick="downloadR()"><i class="fa fa-share-square-o"></i> 导出</a>
<a class="btn btn-warning btn-sm" onclick="downloadR()" shiro:hasPermission="code:registration:export1"><i class="fa fa-share-square-o"></i> 导出</a>
</li>
</ul>
<div class="static-content">

2
lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/code/registration/staticRegistration.html

@ -91,7 +91,7 @@
<a class="btn btn-reset btn-sm" onclick="resetR()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
<!-- <a class="btn btn-warning btn-sm" onclick="downloadR()"><i class="fa fa-share-square-o"></i> 导出</a>-->
<!-- <a class="btn btn-warning btn-sm" onclick="downloadzf1()"><i class="fa fa-share-square-o"></i> 根据自定义时间导出执法监督码使用情况</a>-->
<a class="btn btn-warning btn-sm" onclick="downloadzf1()"><i class="fa fa-share-square-o"></i> 导出</a>
<a class="btn btn-warning btn-sm" onclick="downloadzf1()" shiro:hasPermission="code:registration:export"><i class="fa fa-share-square-o"></i> 导出</a>
</li>
<!--<a class="btn btn-warning btn-sm" onclick="download2()"><i class="fa fa-share-square-o"></i> 导出企业信息</a>-->
</ul>

2
lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/nonRegistration/nonRegistrationView.html

@ -90,7 +90,7 @@
<li>
<a class="btn btn-success btn-sm" onclick="searchList()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-reset btn-sm" onclick="resetList()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
<a class="btn btn-warning btn-sm" onclick="downloadExcel()"><i class="fa fa-share-square-o"></i> 导出</a>
<a class="btn btn-warning btn-sm" onclick="downloadExcel()" shiro:hasPermission="system:registration:export"><i class="fa fa-share-square-o"></i> 导出</a>
</li>
</ul>
</div>

1
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/controller/EnforcementRegistrationController.java

@ -121,6 +121,7 @@ public class EnforcementRegistrationController extends BaseController
return prefix + "/registration";
}
@RequiresPermissions("code:registration:view")
@GetMapping("/staticRegistrationView")
public String staticRegistrationView(Model model){
model.addAttribute("yearList",yearMake());

107
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/controller/EnterprisePubQrcodeController.java

@ -3,6 +3,8 @@ package com.zdxt.code.controller;
import java.io.IOException;
import java.util.List;
import com.zdxt.auth.dto.UserBean;
import com.zdxt.auth.feign.UserApi;
import com.zdxt.common.ZDResponse;
import com.zdxt.common.controller.BaseController;
import com.zdxt.common.util.TableDataInfo;
@ -21,6 +23,8 @@ import org.springframework.web.multipart.MultipartFile;
import com.zdxt.code.domain.EnterprisePubQrcode;
import com.zdxt.code.service.IEnterprisePubQrcodeService;
import com.zdxt.auth.project.system.dict.service.IDictDataService;
import com.zdxt.domain.auth.DictData;
import javax.servlet.http.HttpServletResponse;
@ -34,6 +38,9 @@ import javax.servlet.http.HttpServletResponse;
@RequestMapping("/code/enterprisePubQrcode")
public class EnterprisePubQrcodeController extends BaseController
{
@Autowired
private UserApi userApi;
private static final Logger log = LoggerFactory.getLogger(EnterprisePubQrcodeController.class);
private String prefix = "project/code/enterprise_pub_qrcode";
@ -41,6 +48,9 @@ public class EnterprisePubQrcodeController extends BaseController
@Autowired
private IEnterprisePubQrcodeService enterprisePubQrcodeService;
@Autowired
private IDictDataService iDictDataService;
@RequiresPermissions("code:pubQrcode:view")
@GetMapping()
public String pubQrcode()
@ -48,14 +58,21 @@ public class EnterprisePubQrcodeController extends BaseController
return prefix + "/enterprisePubQrcodeList";
}
@GetMapping("/queryListPage")
public String pubQrcodeQueryList()
{
return prefix + "/enterprisePubQrcodeQueryList";
}
/**
* 查询送码入企信息列表
*/
@RequiresPermissions("code:pubQrcode:list")
@PostMapping("/list")
@ResponseBody
public TableDataInfo list(EnterprisePubQrcode enterprisePubQrcode)
{
UserBean currentUser = userApi.getCurrentUser();
enterprisePubQrcode.setUserId(currentUser.getUserId());
startPage();
List<EnterprisePubQrcode> list = enterprisePubQrcodeService.selectEnterprisePubQrcodeList(enterprisePubQrcode);
return getDataTable(list);
@ -85,7 +102,6 @@ public class EnterprisePubQrcodeController extends BaseController
/**
* 新增保存送码入企信息
*/
@RequiresPermissions("code:pubQrcode:add")
@PostMapping("/add")
@ResponseBody
public ZDResponse addSave(EnterprisePubQrcode enterprisePubQrcode)
@ -108,7 +124,6 @@ public class EnterprisePubQrcodeController extends BaseController
/**
* 修改保存送码入企信息
*/
@RequiresPermissions("code:pubQrcode:edit")
@PostMapping("/edit")
@ResponseBody
public ZDResponse editSave(EnterprisePubQrcode enterprisePubQrcode)
@ -120,7 +135,6 @@ public class EnterprisePubQrcodeController extends BaseController
/**
* 删除送码入企信息
*/
@RequiresPermissions("code:pubQrcode:remove")
@PostMapping("/remove")
@ResponseBody
public ZDResponse remove(String ids)
@ -132,7 +146,6 @@ public class EnterprisePubQrcodeController extends BaseController
/**
* 获取送码入企信息详情
*/
@RequiresPermissions("code:pubQrcode:detail")
@GetMapping("/detail")
@ResponseBody
public ZDResponse detail(String id)
@ -149,27 +162,23 @@ public class EnterprisePubQrcodeController extends BaseController
{
try
{
// 创建模板Excel
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("送码入企数据");
// 创建表头
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("序号");
headerRow.createCell(1).setCellValue("企业名称");
headerRow.createCell(2).setCellValue("统一社会信用代码");
headerRow.createCell(3).setCellValue("归属区域");
headerRow.createCell(4).setCellValue("归属街道");
// 设置列宽
sheet.setColumnWidth(0, 2000);
sheet.setColumnWidth(1, 8000);
sheet.setColumnWidth(2, 6000);
sheet.setColumnWidth(3, 5000);
sheet.setColumnWidth(4, 5000);
java.io.InputStream is = this.getClass().getClassLoader().getResourceAsStream("images/enterprise_pub_qrcode.xlsx");
if (is == null)
{
log.error("模板文件 images/enterprise_pub_qrcode.xlsx 不存在");
return;
}
String fileName = java.net.URLEncoder.encode("送码入企企业信息采集表模板.xlsx", "UTF-8");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment;filename=enterprise_pub_qrcode_template.xlsx");
workbook.write(response.getOutputStream());
workbook.close();
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
byte[] buffer = new byte[4096];
int len;
while ((len = is.read(buffer)) != -1)
{
response.getOutputStream().write(buffer, 0, len);
}
response.getOutputStream().flush();
is.close();
}
catch (Exception e)
{
@ -180,7 +189,6 @@ public class EnterprisePubQrcodeController extends BaseController
/**
* 导入送码入企数据
*/
@RequiresPermissions("code:pubQrcode:add")
@PostMapping("/importData")
@ResponseBody
public ZDResponse importData(MultipartFile file)
@ -200,7 +208,6 @@ public class EnterprisePubQrcodeController extends BaseController
/**
* 批量匹配送码入企数据
*/
@RequiresPermissions("code:pubQrcode:edit")
@PostMapping("/matchSelectEnterprise")
@ResponseBody
public ZDResponse matchSelectEnterprise(String ids)
@ -220,7 +227,6 @@ public class EnterprisePubQrcodeController extends BaseController
/**
* 强制匹配送码入企数据
*/
@RequiresPermissions("code:pubQrcode:edit")
@PostMapping("/forceMatch")
@ResponseBody
public ZDResponse forceMatch(String id)
@ -240,7 +246,6 @@ public class EnterprisePubQrcodeController extends BaseController
/**
* 下载送码入企PDF
*/
@RequiresPermissions("code:pubQrcode:edit")
@GetMapping("/download")
public void download(String ids, HttpServletResponse response)
{
@ -278,7 +283,6 @@ public class EnterprisePubQrcodeController extends BaseController
/**
* 生成送码入企PDF文件(落盘后返回下载地址)
*/
@RequiresPermissions("code:pubQrcode:edit")
@PostMapping("/generatePdf")
@ResponseBody
public ZDResponse generatePdf(String ids)
@ -298,7 +302,6 @@ public class EnterprisePubQrcodeController extends BaseController
/**
* 批量设置下载状态
*/
@RequiresPermissions("code:pubQrcode:edit")
@PostMapping("/batchUpdateDownloadStatus")
@ResponseBody
public ZDResponse batchUpdateDownloadStatus(String ids, String downloadStatus, String remark)
@ -314,4 +317,46 @@ public class EnterprisePubQrcodeController extends BaseController
return ZDResponse.error(e.getMessage());
}
}
/**
* 送码入企信息查询页面
*/
@GetMapping("/queryPage")
public String pubQrcodeQueryPage()
{
return prefix + "/enterprisePubQrcodeQueryList";
}
/**
* 查询送码入企信息列表(含数据范围过滤)
*/
@PostMapping("/queryPageList")
@ResponseBody
public TableDataInfo queryPageList(EnterprisePubQrcode enterprisePubQrcode)
{
List<EnterprisePubQrcode> list = enterprisePubQrcodeService.selectEnterprisePubQrcodeQueryList(enterprisePubQrcode);
return getDataTable(list);
}
/**
* 获取区域字典数据
*/
@GetMapping("/dictAreaList")
@ResponseBody
public ZDResponse dictAreaList()
{
List<DictData> list = iDictDataService.selectDictDataByType("address_type");
return ZDResponse.success("查询成功", list);
}
/**
* 获取街道字典数据(根据区域dictValue作为dictType查询)
*/
@GetMapping("/dictStreetList")
@ResponseBody
public ZDResponse dictStreetList(String areaId)
{
List<DictData> list = iDictDataService.selectDictDataByType(areaId);
return ZDResponse.success("查询成功", list);
}
}

28
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/domain/EnterprisePubQrcode.java

@ -72,6 +72,12 @@ public class EnterprisePubQrcode extends BaseDomain
/** 备注 */
private String remark;
/** 父级存在zoneid的部门id */
private String zoneDeptId;
/** 父级存在zoneid的部门名称 */
private String zoneDeptName;
/** 匹配到的目标类型 */
private String matchingToType;
@ -258,6 +264,26 @@ public class EnterprisePubQrcode extends BaseDomain
return remark;
}
public void setZoneDeptId(String zoneDeptId)
{
this.zoneDeptId = zoneDeptId;
}
public String getZoneDeptId()
{
return zoneDeptId;
}
public void setZoneDeptName(String zoneDeptName)
{
this.zoneDeptName = zoneDeptName;
}
public String getZoneDeptName()
{
return zoneDeptName;
}
public void setMatchingToType(String matchingToType)
{
this.matchingToType = matchingToType;
@ -305,6 +331,8 @@ public class EnterprisePubQrcode extends BaseDomain
.append("remark", getRemark())
.append("matchingToType", getMatchingToType())
.append("matchingToId", getMatchingToId())
.append("zoneDeptId", getZoneDeptId())
.append("zoneDeptName", getZoneDeptName())
.toString();
}
}

18
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/mapper/EnterprisePubQrcodeMapper.java

@ -68,6 +68,16 @@ public interface EnterprisePubQrcodeMapper
*/
EnterprisePubQrcode selectEnterprisePubQrcodeByEnterpriseNumber(String enterpriseNumber);
/**
* 根据统一社会信用代码和用户ID查询送码入企信息
*
* @param enterpriseNumber 统一社会信用代码
* @param userId 用户ID
* @return 送码入企信息
*/
EnterprisePubQrcode selectByEnterpriseNumberAndUserId(@org.apache.ibatis.annotations.Param("enterpriseNumber") String enterpriseNumber,
@org.apache.ibatis.annotations.Param("userId") Long userId);
/**
* 根据ID数组批量查询送码入企信息
*
@ -76,6 +86,14 @@ public interface EnterprisePubQrcodeMapper
*/
List<EnterprisePubQrcode> selectEnterprisePubQrcodeByIds(String[] ids);
/**
* 查询送码入企信息列表(含数据范围过滤)
*
* @param enterprisePubQrcode 查询条件(params.areaNames用于数据范围过滤)
* @return 送码入企信息集合
*/
List<EnterprisePubQrcode> selectEnterprisePubQrcodeQueryList(EnterprisePubQrcode enterprisePubQrcode);
/**
* 批量更新下载状态和备注
*

8
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/IEnterprisePubQrcodeService.java

@ -30,4 +30,12 @@ public interface IEnterprisePubQrcodeService {
String generatePdfFile(String ids) throws Exception;
int batchUpdateDownloadStatus(String ids, String downloadStatus, String remark);
/**
* 查询送码入企信息列表(含数据范围过滤)
*
* @param enterprisePubQrcode 查询条件
* @return 送码入企信息集合
*/
List<EnterprisePubQrcode> selectEnterprisePubQrcodeQueryList(EnterprisePubQrcode enterprisePubQrcode);
}

8
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/ThirdLoginService.java

@ -22,6 +22,7 @@ public interface ThirdLoginService {
* @return
*/
Long addSiqUser(JSONObject jsonObject);
Long addLiqUser(JSONObject jsonObject);
/**
* 添加深i企
@ -29,6 +30,12 @@ public interface ThirdLoginService {
* @return
*/
Boolean addSiqUserCompany(JSONObject jsonObject);
/**
* 添加龙i企用户
* @param jsonObject
* @return
*/
Boolean addLiqUserCompany(JSONObject jsonObject);
void siqTestLogin(String userId,String userName);
@ -38,6 +45,7 @@ public interface ThirdLoginService {
* @return
*/
Boolean checkIsLawOfficer(String userIdCard);
String checkIsLawOfficer2(String userIdCard);
/**
* 获取市场监督管理局H5页面企业信息

13
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/ComplaintStatisticsImpl.java

@ -6,6 +6,7 @@ import com.zdxt.auth.project.system.dict.mapper.DictDataMapper;
import com.zdxt.code.domain.*;
import com.zdxt.code.mapper.ComplaintStatisticsMapper;
import com.zdxt.code.mapper.EnforcementRegistrationMapper;
import com.zdxt.code.mapper.NonEnforcementRegistrationMapper;
import com.zdxt.code.service.ComplaintStatisticsService;
import com.zdxt.common.annotation.DataScope;
import com.zdxt.domain.auth.Dept;
@ -28,6 +29,8 @@ public class ComplaintStatisticsImpl implements ComplaintStatisticsService {
private DictDataMapper dictDataMapper;
@Autowired
private EnforcementRegistrationMapper enforcementRegistrationMapper;
@Autowired
private NonEnforcementRegistrationMapper nonEnforcementRegistrationMapper;
@Override
@DataScope(deptField = "complaint_department_id")
public List<ComplaintStatistics> selectComplaintStatisticsList(ComplaintStatistics complaintStatistics){
@ -97,6 +100,10 @@ public class ComplaintStatisticsImpl implements ComplaintStatisticsService {
}
}else {//检查事项投诉
EnforcementRegistration enforcementRegistration=enforcementRegistrationMapper.selectEnforcementRegistrationById(enterpriseComplaint.getRelId());
NonEnforcementRegistration nonEnforcementRegistration = null;
if(null == enforcementRegistration) {
nonEnforcementRegistration = nonEnforcementRegistrationMapper.selectNonEnforcementRegistrationById(enterpriseComplaint.getRelId());
}
// List<String> departmentIdList = Arrays.asList(enterpriseComplaint.getComplaintDepartmentIds().split(","));
ComplaintStatistics complaintStatistics = new ComplaintStatistics();
complaintStatistics.setCid(enterpriseComplaint.getId());
@ -128,7 +135,11 @@ public class ComplaintStatisticsImpl implements ComplaintStatisticsService {
if (enterpriseComplaint.getEnterpriseAddress() != null && !"".equals(enterpriseComplaint.getEnterpriseAddress())) {
complaintStatistics.setEnterpriseAddress(enterpriseComplaint.getEnterpriseAddress());
}
complaintStatistics.setComplaintDepartmentId(enforcementRegistration.getBureauDeptId());
if (null == enforcementRegistration) {
complaintStatistics.setComplaintDepartmentId(nonEnforcementRegistration.getBureauDeptId());
} else {
complaintStatistics.setComplaintDepartmentId(enforcementRegistration.getBureauDeptId());
}
complaintStatistics.setComplaintDepartment(enterpriseComplaint.getBureauDeptName());
complaintStatisticsMapper.insertComplaintStatistics(complaintStatistics);
}

81
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/EnforcementCheckStatisticsImpl.java

@ -8,6 +8,8 @@ import com.zdxt.code.domain.*;
import com.zdxt.code.mapper.*;
import com.zdxt.code.service.EnforcementCheckStatisticsService;
import com.zdxt.common.annotation.DataScope;
import com.zdxt.common.util.DateUtils;
import com.zdxt.domain.auth.Dept;
import com.zdxt.domain.auth.DictData;
import com.zdxt.domain.auth.User;
@ -72,7 +74,7 @@ public class EnforcementCheckStatisticsImpl implements EnforcementCheckStatistic
cell.setCellStyle(styleRow3);
}
}
private void setStyle1(int c1,String c2,String c3,String c4,String c5,String c6,String c7,long c8,long c9,long c10,long c11,long c12,String c13,HSSFRow row,HSSFCellStyle styleRow3){
private void setStyle1(int c1,String c2,String c3,String c4,String c5,String c6,String c7,long c8,long c9,long c10,long c11,long c12,EnforcementCheckStatistics record,HSSFRow row,HSSFCellStyle styleRow3){
HSSFCell cell1= row.createCell(0);
cell1.setCellValue(c1);
cell1.setCellStyle(styleRow3);
@ -120,8 +122,13 @@ public class EnforcementCheckStatisticsImpl implements EnforcementCheckStatistic
cell12.setCellValue(c12);
}
HSSFCell cell13= row.createCell(12);
cell13.setCellValue(c13);
cell13.setCellValue(record.getRemark() != null ? record.getRemark() : "");
cell13.setCellStyle(styleRow3);
HSSFCell cell14= row.createCell(13);
if(record.getCreateTime() != null) {
cell14.setCellValue(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", record.getCreateTime()));
}
cell14.setCellStyle(styleRow3);
}
/**
*为合并的单元格修正样式
@ -295,6 +302,7 @@ public class EnforcementCheckStatisticsImpl implements EnforcementCheckStatistic
}
@Override
@DataScope(deptAlias = "e",userAlias = "e",deptField = "bureau_dept_id")
public List<EnforcementCheckStatistics> selectAllStatisticsList(EnforcementCheckStatistics enforcementCheckStatistics) {
return enforcementCheckStatisticsMapper.selectAllStatisticsList(enforcementCheckStatistics);
}
@ -382,13 +390,13 @@ public class EnforcementCheckStatisticsImpl implements EnforcementCheckStatistic
//将单元格样式应用到该单元格
cell1.setCellStyle(styleRow1);
//合并单元格--CellRangeAddress(起始行,结束行,起始列,结束列)
sheet.addMergedRegion(new CellRangeAddress(0,0,0,12));
sheet.addMergedRegion(new CellRangeAddress(0,0,0,13));
//在sheet里创建第二行
HSSFRow row2=sheet.createRow(1);
List<String> headRow2List=new ArrayList<>();
Collections.addAll(headRow2List,"序号","区域","企业","执法主体","执法人员","执法事项","执法时间","执法次数",
"2次及以下","3至4次","5至6次","7次及以上","备注");
"2次及以下","3至4次","5至6次","7次及以上","备注","创建时间");
setStyle(headRow2List,row2,styleRow2);
int rowNum=1;
//遍历地区list
@ -419,7 +427,7 @@ public class EnforcementCheckStatisticsImpl implements EnforcementCheckStatistic
//setStyle(cellList,row,styleRow3);
setStyle1(i+1,area,qyGroup2.get(k).get(0).getEnterpriseName(),qyGroup2.get(k).get(0).getBureauDeptName(),
qyGroup2.get(k).get(0).getLawEnforcerTwo(),qyGroup2.get(k).get(0).getLawEnforcementItem(),qyGroup2.get(k).get(0).getEnforcementTime(),1,1,0,0,0,
qyGroup2.get(k).get(0).getRemark(),row,styleRow3);
qyGroup2.get(k).get(0),row,styleRow3);
}else {
sheet.addMergedRegion(new CellRangeAddress(rowNum+1, (int) (rowNum+qyGroup1.get(k)),2,2));//合并企业
sheet.addMergedRegion(new CellRangeAddress(rowNum+1, (int) (rowNum+qyGroup1.get(k)),7,7));
@ -447,28 +455,28 @@ public class EnforcementCheckStatisticsImpl implements EnforcementCheckStatistic
""+qyGroup1.get(k),"","","",zfGroup2.get(zf).get(0).getRemark());
setStyle1(i+1,area,zfGroup2.get(zf).get(0).getEnterpriseName(),zfGroup2.get(zf).get(0).getBureauDeptName(),
zfGroup2.get(zf).get(0).getLawEnforcerTwo(),zfGroup2.get(zf).get(0).getLawEnforcementItem(),zfGroup2.get(zf).get(0).getEnforcementTime(),1,qyGroup1.get(k),
0,0,0,zfGroup2.get(zf).get(0).getRemark(),row,styleRow3);
0,0,0,zfGroup2.get(zf).get(0),row,styleRow3);
} else if (3<=qyGroup1.get(k)&&qyGroup1.get(k)<=4) {
Collections.addAll(cellList,""+(i+1),area,zfGroup2.get(zf).get(0).getEnterpriseName(),zfGroup2.get(zf).get(0).getBureauDeptName(),
zfGroup2.get(zf).get(0).getLawEnforcerTwo(),zfGroup2.get(zf).get(0).getLawEnforcementItem(),zfGroup2.get(zf).get(0).getEnforcementTime(),"1",
"",""+qyGroup1.get(k),"","",zfGroup2.get(zf).get(0).getRemark());
setStyle1(i+1,area,zfGroup2.get(zf).get(0).getEnterpriseName(),zfGroup2.get(zf).get(0).getBureauDeptName(),
zfGroup2.get(zf).get(0).getLawEnforcerTwo(),zfGroup2.get(zf).get(0).getLawEnforcementItem(),zfGroup2.get(zf).get(0).getEnforcementTime(),1,
0,qyGroup1.get(k),0,0,zfGroup2.get(zf).get(0).getRemark(),row,styleRow3);
0,qyGroup1.get(k),0,0,zfGroup2.get(zf).get(0),row,styleRow3);
} else if (5<=qyGroup1.get(k)&&qyGroup1.get(k)<=6) {
Collections.addAll(cellList,""+(i+1),area,zfGroup2.get(zf).get(0).getEnterpriseName(),zfGroup2.get(zf).get(0).getBureauDeptName(),
zfGroup2.get(zf).get(0).getLawEnforcerTwo(),zfGroup2.get(zf).get(0).getLawEnforcementItem(),zfGroup2.get(zf).get(0).getEnforcementTime(),"1",
"","",""+qyGroup1.get(k),"",zfGroup2.get(zf).get(0).getRemark());
setStyle1(i+1,area,zfGroup2.get(zf).get(0).getEnterpriseName(),zfGroup2.get(zf).get(0).getBureauDeptName(),
zfGroup2.get(zf).get(0).getLawEnforcerTwo(),zfGroup2.get(zf).get(0).getLawEnforcementItem(),zfGroup2.get(zf).get(0).getEnforcementTime(),1,
0,0,qyGroup1.get(k),0,zfGroup2.get(zf).get(0).getRemark(),row,styleRow3);
0,0,qyGroup1.get(k),0,zfGroup2.get(zf).get(0),row,styleRow3);
}else {
Collections.addAll(cellList,""+(i+1),area,zfGroup2.get(zf).get(0).getEnterpriseName(),zfGroup2.get(zf).get(0).getBureauDeptName(),
zfGroup2.get(zf).get(0).getLawEnforcerTwo(),zfGroup2.get(zf).get(0).getLawEnforcementItem(),zfGroup2.get(zf).get(0).getEnforcementTime(),"1",
"","","",""+qyGroup1.get(k),zfGroup2.get(zf).get(0).getRemark());
setStyle1(i+1,area,zfGroup2.get(zf).get(0).getEnterpriseName(),zfGroup2.get(zf).get(0).getBureauDeptName(),
zfGroup2.get(zf).get(0).getLawEnforcerTwo(),zfGroup2.get(zf).get(0).getLawEnforcementItem(),zfGroup2.get(zf).get(0).getEnforcementTime(),1,
0,0,0,qyGroup1.get(k),zfGroup2.get(zf).get(0).getRemark(),row,styleRow3);
0,0,0,qyGroup1.get(k),zfGroup2.get(zf).get(0),row,styleRow3);
}
//setStyle(cellList,row,styleRow3);
}else{
@ -489,28 +497,28 @@ public class EnforcementCheckStatisticsImpl implements EnforcementCheckStatistic
""+qyGroup1.get(k),"","","",ryGroup2.get(ry).get(0).getRemark());
setStyle1(i+1,area,ryGroup2.get(ry).get(0).getEnterpriseName(),ryGroup2.get(ry).get(0).getBureauDeptName(),
ryGroup2.get(ry).get(0).getLawEnforcerTwo(),ryGroup2.get(ry).get(0).getLawEnforcementItem(),ryGroup2.get(ry).get(0).getEnforcementTime(),1,
qyGroup1.get(k),0,0,0,ryGroup2.get(ry).get(0).getRemark(),row,styleRow3);
qyGroup1.get(k),0,0,0,ryGroup2.get(ry).get(0),row,styleRow3);
} else if (3<=qyGroup1.get(k)&&qyGroup1.get(k)<=4) {
Collections.addAll(cellList,""+(i+1),area,ryGroup2.get(ry).get(0).getEnterpriseName(),ryGroup2.get(ry).get(0).getBureauDeptName(),
ryGroup2.get(ry).get(0).getLawEnforcerTwo(),ryGroup2.get(ry).get(0).getLawEnforcementItem(),ryGroup2.get(ry).get(0).getEnforcementTime(),"1",
"",""+qyGroup1.get(k),"","",ryGroup2.get(ry).get(0).getRemark());
setStyle1(i+1,area,ryGroup2.get(ry).get(0).getEnterpriseName(),ryGroup2.get(ry).get(0).getBureauDeptName(),
ryGroup2.get(ry).get(0).getLawEnforcerTwo(),ryGroup2.get(ry).get(0).getLawEnforcementItem(),ryGroup2.get(ry).get(0).getEnforcementTime(),1,
0,qyGroup1.get(k),0,0,ryGroup2.get(ry).get(0).getRemark(),row,styleRow3);
0,qyGroup1.get(k),0,0,ryGroup2.get(ry).get(0),row,styleRow3);
} else if (5<=qyGroup1.get(k)&&qyGroup1.get(k)<=6) {
Collections.addAll(cellList,""+(i+1),area,ryGroup2.get(ry).get(0).getEnterpriseName(),ryGroup2.get(ry).get(0).getBureauDeptName(),
ryGroup2.get(ry).get(0).getLawEnforcerTwo(),ryGroup2.get(ry).get(0).getLawEnforcementItem(),ryGroup2.get(ry).get(0).getEnforcementTime(),"1",
"","",""+qyGroup1.get(k),"",ryGroup2.get(ry).get(0).getRemark());
setStyle1(i+1,area,ryGroup2.get(ry).get(0).getEnterpriseName(),ryGroup2.get(ry).get(0).getBureauDeptName(),
ryGroup2.get(ry).get(0).getLawEnforcerTwo(),ryGroup2.get(ry).get(0).getLawEnforcementItem(),ryGroup2.get(ry).get(0).getEnforcementTime(),1,
0,0,qyGroup1.get(k),0,ryGroup2.get(ry).get(0).getRemark(),row,styleRow3);
0,0,qyGroup1.get(k),0,ryGroup2.get(ry).get(0),row,styleRow3);
}else {
Collections.addAll(cellList,""+(i+1),area,ryGroup2.get(ry).get(0).getEnterpriseName(),ryGroup2.get(ry).get(0).getBureauDeptName(),
ryGroup2.get(ry).get(0).getLawEnforcerTwo(),ryGroup2.get(ry).get(0).getLawEnforcementItem(),ryGroup2.get(ry).get(0).getEnforcementTime(),"1",
"","","",""+qyGroup1.get(k),ryGroup2.get(ry).get(0).getRemark());
setStyle1(i+1,area,ryGroup2.get(ry).get(0).getEnterpriseName(),ryGroup2.get(ry).get(0).getBureauDeptName(),
ryGroup2.get(ry).get(0).getLawEnforcerTwo(),ryGroup2.get(ry).get(0).getLawEnforcementItem(),ryGroup2.get(ry).get(0).getEnforcementTime(),1,
0,0,0,qyGroup1.get(k),ryGroup2.get(ry).get(0).getRemark(),row,styleRow3);
0,0,0,qyGroup1.get(k),ryGroup2.get(ry).get(0),row,styleRow3);
}
//setStyle(cellList,row,styleRow3);
}else {
@ -530,28 +538,28 @@ public class EnforcementCheckStatisticsImpl implements EnforcementCheckStatistic
""+qyGroup1.get(k),"","","",sxGroup2.get(sx).get(0).getRemark());
setStyle1(i+1,area,sxGroup2.get(sx).get(0).getEnterpriseName(),sxGroup2.get(sx).get(0).getBureauDeptName(),
sxGroup2.get(sx).get(0).getLawEnforcerTwo(),sxGroup2.get(sx).get(0).getLawEnforcementItem(),sxGroup2.get(sx).get(0).getEnforcementTime(),sxGroup1.get(sx),
qyGroup1.get(k),0,0,0,sxGroup2.get(sx).get(0).getRemark(),row,styleRow3);
qyGroup1.get(k),0,0,0,sxGroup2.get(sx).get(0),row,styleRow3);
} else if (3<=qyGroup1.get(k)&&qyGroup1.get(k)<=4) {
Collections.addAll(cellList,""+(i+1),area,sxGroup2.get(sx).get(0).getEnterpriseName(),sxGroup2.get(sx).get(0).getBureauDeptName(),
sxGroup2.get(sx).get(0).getLawEnforcerTwo(),sxGroup2.get(sx).get(0).getLawEnforcementItem(),sxGroup2.get(sx).get(0).getEnforcementTime(),sxGroup1.get(sx)+"",
"",""+qyGroup1.get(k),"","",sxGroup2.get(sx).get(0).getRemark());
setStyle1(i+1,area,sxGroup2.get(sx).get(0).getEnterpriseName(),sxGroup2.get(sx).get(0).getBureauDeptName(),
sxGroup2.get(sx).get(0).getLawEnforcerTwo(),sxGroup2.get(sx).get(0).getLawEnforcementItem(),sxGroup2.get(sx).get(0).getEnforcementTime(),sxGroup1.get(sx),
0,qyGroup1.get(k),0,0,sxGroup2.get(sx).get(0).getRemark(),row,styleRow3);
0,qyGroup1.get(k),0,0,sxGroup2.get(sx).get(0),row,styleRow3);
} else if (5<=qyGroup1.get(k)&&qyGroup1.get(k)<=6) {
Collections.addAll(cellList,""+(i+1),area,sxGroup2.get(sx).get(0).getEnterpriseName(),sxGroup2.get(sx).get(0).getBureauDeptName(),
sxGroup2.get(sx).get(0).getLawEnforcerTwo(),sxGroup2.get(sx).get(0).getLawEnforcementItem(),sxGroup2.get(sx).get(0).getEnforcementTime(),sxGroup1.get(sx)+"",
"","",""+qyGroup1.get(k),"",sxGroup2.get(sx).get(0).getRemark());
setStyle1(i+1,area,sxGroup2.get(sx).get(0).getEnterpriseName(),sxGroup2.get(sx).get(0).getBureauDeptName(),
sxGroup2.get(sx).get(0).getLawEnforcerTwo(),sxGroup2.get(sx).get(0).getLawEnforcementItem(),sxGroup2.get(sx).get(0).getEnforcementTime(),sxGroup1.get(sx),
0,0,qyGroup1.get(k),0,sxGroup2.get(sx).get(0).getRemark(),row,styleRow3);
0,0,qyGroup1.get(k),0,sxGroup2.get(sx).get(0),row,styleRow3);
}else {
Collections.addAll(cellList,""+(i+1),area,sxGroup2.get(sx).get(0).getEnterpriseName(),sxGroup2.get(sx).get(0).getBureauDeptName(),
sxGroup2.get(sx).get(0).getLawEnforcerTwo(),sxGroup2.get(sx).get(0).getLawEnforcementItem(),sxGroup2.get(sx).get(0).getEnforcementTime(),sxGroup1.get(sx)+"",
"","","",""+qyGroup1.get(k),sxGroup2.get(sx).get(0).getRemark());
setStyle1(i+1,area,sxGroup2.get(sx).get(0).getEnterpriseName(),sxGroup2.get(sx).get(0).getBureauDeptName(),
sxGroup2.get(sx).get(0).getLawEnforcerTwo(),sxGroup2.get(sx).get(0).getLawEnforcementItem(),sxGroup2.get(sx).get(0).getEnforcementTime(),sxGroup1.get(sx),
0,0,0,qyGroup1.get(k),sxGroup2.get(sx).get(0).getRemark(),row,styleRow3);
0,0,0,qyGroup1.get(k),sxGroup2.get(sx).get(0),row,styleRow3);
}
//setStyle(cellList,row,styleRow3);
if (sxGroup1.get(sx) >= 2) {
@ -574,7 +582,7 @@ public class EnforcementCheckStatisticsImpl implements EnforcementCheckStatistic
rowNum++;
HSSFRow row=sheet.createRow(rowNum);
List<String> cellList=new ArrayList<>();
Collections.addAll(cellList,""+(i+1),area,"","","","","","","","","","","");
Collections.addAll(cellList,""+(i+1),area,"","","","","","","","","","","","");
setStyle(cellList,row,styleRow3);
}
}
@ -2231,6 +2239,7 @@ public class EnforcementCheckStatisticsImpl implements EnforcementCheckStatistic
sheet.setColumnWidth(10,2586);
sheet.setColumnWidth(11,2586);
sheet.setColumnWidth(12,2586);
sheet.setColumnWidth(13,3727);
// sheet.setDefaultColumnWidth(20);//全局
// sheet.setColumnWidth(0,2500);//某列
// sheet.setColumnWidth(1,2500);
@ -2333,13 +2342,13 @@ public class EnforcementCheckStatisticsImpl implements EnforcementCheckStatistic
//将单元格样式应用到该单元格
cell1.setCellStyle(styleRow1);
//合并单元格--CellRangeAddress(起始行,结束行,起始列,结束列)
sheet.addMergedRegion(new CellRangeAddress(0,0,0,12));
sheet.addMergedRegion(new CellRangeAddress(0,0,0,13));
//在sheet里创建第二行
HSSFRow row2=sheet.createRow(1);
List<String> headRow2List=new ArrayList<>();
Collections.addAll(headRow2List,"序号","区域","企业","执法主体","执法人员","执法事项","执法时间","执法次数",
"2次及以下","3至4次","5至6次","7次及以上","备注");
"2次及以下","3至4次","5至6次","7次及以上","备注","创建时间");
setStyle(headRow2List,row2,styleRow2);
int rowNum=1;
//遍历地区list
@ -2370,7 +2379,7 @@ public class EnforcementCheckStatisticsImpl implements EnforcementCheckStatistic
//setStyle(cellList,row,styleRow3);
setStyle1(i+1,area,qyGroup2.get(k).get(0).getEnterpriseName(),qyGroup2.get(k).get(0).getBureauDeptName(),
qyGroup2.get(k).get(0).getLawEnforcerTwo(),qyGroup2.get(k).get(0).getLawEnforcementItem(),qyGroup2.get(k).get(0).getEnforcementTime(),1,1,0,0,0,
qyGroup2.get(k).get(0).getRemark(),row,styleRow3);
qyGroup2.get(k).get(0),row,styleRow3);
}else {
sheet.addMergedRegion(new CellRangeAddress(rowNum+1, (int) (rowNum+qyGroup1.get(k)),2,2));//合并企业
sheet.addMergedRegion(new CellRangeAddress(rowNum+1, (int) (rowNum+qyGroup1.get(k)),8,8));
@ -2398,28 +2407,28 @@ public class EnforcementCheckStatisticsImpl implements EnforcementCheckStatistic
""+qyGroup1.get(k),"","","",zfGroup2.get(zf).get(0).getRemark());
setStyle1(i+1,area,zfGroup2.get(zf).get(0).getEnterpriseName(),zfGroup2.get(zf).get(0).getBureauDeptName(),
zfGroup2.get(zf).get(0).getLawEnforcerTwo(),zfGroup2.get(zf).get(0).getLawEnforcementItem(),zfGroup2.get(zf).get(0).getEnforcementTime(),1,qyGroup1.get(k),
0,0,0,zfGroup2.get(zf).get(0).getRemark(),row,styleRow3);
0,0,0,zfGroup2.get(zf).get(0),row,styleRow3);
} else if (3<=qyGroup1.get(k)&&qyGroup1.get(k)<=4) {
Collections.addAll(cellList,""+(i+1),area,zfGroup2.get(zf).get(0).getEnterpriseName(),zfGroup2.get(zf).get(0).getBureauDeptName(),
zfGroup2.get(zf).get(0).getLawEnforcerTwo(),zfGroup2.get(zf).get(0).getLawEnforcementItem(),zfGroup2.get(zf).get(0).getEnforcementTime(),"1",
"",""+qyGroup1.get(k),"","",zfGroup2.get(zf).get(0).getRemark());
setStyle1(i+1,area,zfGroup2.get(zf).get(0).getEnterpriseName(),zfGroup2.get(zf).get(0).getBureauDeptName(),
zfGroup2.get(zf).get(0).getLawEnforcerTwo(),zfGroup2.get(zf).get(0).getLawEnforcementItem(),zfGroup2.get(zf).get(0).getEnforcementTime(),1,
0,qyGroup1.get(k),0,0,zfGroup2.get(zf).get(0).getRemark(),row,styleRow3);
0,qyGroup1.get(k),0,0,zfGroup2.get(zf).get(0),row,styleRow3);
} else if (5<=qyGroup1.get(k)&&qyGroup1.get(k)<=6) {
Collections.addAll(cellList,""+(i+1),area,zfGroup2.get(zf).get(0).getEnterpriseName(),zfGroup2.get(zf).get(0).getBureauDeptName(),
zfGroup2.get(zf).get(0).getLawEnforcerTwo(),zfGroup2.get(zf).get(0).getLawEnforcementItem(),zfGroup2.get(zf).get(0).getEnforcementTime(),"1",
"","",""+qyGroup1.get(k),"",zfGroup2.get(zf).get(0).getRemark());
setStyle1(i+1,area,zfGroup2.get(zf).get(0).getEnterpriseName(),zfGroup2.get(zf).get(0).getBureauDeptName(),
zfGroup2.get(zf).get(0).getLawEnforcerTwo(),zfGroup2.get(zf).get(0).getLawEnforcementItem(),zfGroup2.get(zf).get(0).getEnforcementTime(),1,
0,0,qyGroup1.get(k),0,zfGroup2.get(zf).get(0).getRemark(),row,styleRow3);
0,0,qyGroup1.get(k),0,zfGroup2.get(zf).get(0),row,styleRow3);
}else {
Collections.addAll(cellList,""+(i+1),area,zfGroup2.get(zf).get(0).getEnterpriseName(),zfGroup2.get(zf).get(0).getBureauDeptName(),
zfGroup2.get(zf).get(0).getLawEnforcerTwo(),zfGroup2.get(zf).get(0).getLawEnforcementItem(),zfGroup2.get(zf).get(0).getEnforcementTime(),"1",
"","","",""+qyGroup1.get(k),zfGroup2.get(zf).get(0).getRemark());
setStyle1(i+1,area,zfGroup2.get(zf).get(0).getEnterpriseName(),zfGroup2.get(zf).get(0).getBureauDeptName(),
zfGroup2.get(zf).get(0).getLawEnforcerTwo(),zfGroup2.get(zf).get(0).getLawEnforcementItem(),zfGroup2.get(zf).get(0).getEnforcementTime(),1,
0,0,0,qyGroup1.get(k),zfGroup2.get(zf).get(0).getRemark(),row,styleRow3);
0,0,0,qyGroup1.get(k),zfGroup2.get(zf).get(0),row,styleRow3);
}
//setStyle(cellList,row,styleRow3);
}else{
@ -2440,28 +2449,28 @@ public class EnforcementCheckStatisticsImpl implements EnforcementCheckStatistic
""+qyGroup1.get(k),"","","",ryGroup2.get(ry).get(0).getRemark());
setStyle1(i+1,area,ryGroup2.get(ry).get(0).getEnterpriseName(),ryGroup2.get(ry).get(0).getBureauDeptName(),
ryGroup2.get(ry).get(0).getLawEnforcerTwo(),ryGroup2.get(ry).get(0).getLawEnforcementItem(),ryGroup2.get(ry).get(0).getEnforcementTime(),1,
qyGroup1.get(k),0,0,0,ryGroup2.get(ry).get(0).getRemark(),row,styleRow3);
qyGroup1.get(k),0,0,0,ryGroup2.get(ry).get(0),row,styleRow3);
} else if (3<=qyGroup1.get(k)&&qyGroup1.get(k)<=4) {
Collections.addAll(cellList,""+(i+1),area,ryGroup2.get(ry).get(0).getEnterpriseName(),ryGroup2.get(ry).get(0).getBureauDeptName(),
ryGroup2.get(ry).get(0).getLawEnforcerTwo(),ryGroup2.get(ry).get(0).getLawEnforcementItem(),ryGroup2.get(ry).get(0).getEnforcementTime(),"1",
"",""+qyGroup1.get(k),"","",ryGroup2.get(ry).get(0).getRemark());
setStyle1(i+1,area,ryGroup2.get(ry).get(0).getEnterpriseName(),ryGroup2.get(ry).get(0).getBureauDeptName(),
ryGroup2.get(ry).get(0).getLawEnforcerTwo(),ryGroup2.get(ry).get(0).getLawEnforcementItem(),ryGroup2.get(ry).get(0).getEnforcementTime(),1,
0,qyGroup1.get(k),0,0,ryGroup2.get(ry).get(0).getRemark(),row,styleRow3);
0,qyGroup1.get(k),0,0,ryGroup2.get(ry).get(0),row,styleRow3);
} else if (5<=qyGroup1.get(k)&&qyGroup1.get(k)<=6) {
Collections.addAll(cellList,""+(i+1),area,ryGroup2.get(ry).get(0).getEnterpriseName(),ryGroup2.get(ry).get(0).getBureauDeptName(),
ryGroup2.get(ry).get(0).getLawEnforcerTwo(),ryGroup2.get(ry).get(0).getLawEnforcementItem(),ryGroup2.get(ry).get(0).getEnforcementTime(),"1",
"","",""+qyGroup1.get(k),"",ryGroup2.get(ry).get(0).getRemark());
setStyle1(i+1,area,ryGroup2.get(ry).get(0).getEnterpriseName(),ryGroup2.get(ry).get(0).getBureauDeptName(),
ryGroup2.get(ry).get(0).getLawEnforcerTwo(),ryGroup2.get(ry).get(0).getLawEnforcementItem(),ryGroup2.get(ry).get(0).getEnforcementTime(),1,
0,0,qyGroup1.get(k),0,ryGroup2.get(ry).get(0).getRemark(),row,styleRow3);
0,0,qyGroup1.get(k),0,ryGroup2.get(ry).get(0),row,styleRow3);
}else {
Collections.addAll(cellList,""+(i+1),area,ryGroup2.get(ry).get(0).getEnterpriseName(),ryGroup2.get(ry).get(0).getBureauDeptName(),
ryGroup2.get(ry).get(0).getLawEnforcerTwo(),ryGroup2.get(ry).get(0).getLawEnforcementItem(),ryGroup2.get(ry).get(0).getEnforcementTime(),"1",
"","","",""+qyGroup1.get(k),ryGroup2.get(ry).get(0).getRemark());
setStyle1(i+1,area,ryGroup2.get(ry).get(0).getEnterpriseName(),ryGroup2.get(ry).get(0).getBureauDeptName(),
ryGroup2.get(ry).get(0).getLawEnforcerTwo(),ryGroup2.get(ry).get(0).getLawEnforcementItem(),ryGroup2.get(ry).get(0).getEnforcementTime(),1,
0,0,0,qyGroup1.get(k),ryGroup2.get(ry).get(0).getRemark(),row,styleRow3);
0,0,0,qyGroup1.get(k),ryGroup2.get(ry).get(0),row,styleRow3);
}
//setStyle(cellList,row,styleRow3);
}else {
@ -2481,28 +2490,28 @@ public class EnforcementCheckStatisticsImpl implements EnforcementCheckStatistic
""+qyGroup1.get(k),"","","",sxGroup2.get(sx).get(0).getRemark());
setStyle1(i+1,area,sxGroup2.get(sx).get(0).getEnterpriseName(),sxGroup2.get(sx).get(0).getBureauDeptName(),
sxGroup2.get(sx).get(0).getLawEnforcerTwo(),sxGroup2.get(sx).get(0).getLawEnforcementItem(),sxGroup2.get(sx).get(0).getEnforcementTime(),sxGroup1.get(sx),
qyGroup1.get(k),0,0,0,sxGroup2.get(sx).get(0).getRemark(),row,styleRow3);
qyGroup1.get(k),0,0,0,sxGroup2.get(sx).get(0),row,styleRow3);
} else if (3<=qyGroup1.get(k)&&qyGroup1.get(k)<=4) {
Collections.addAll(cellList,""+(i+1),area,sxGroup2.get(sx).get(0).getEnterpriseName(),sxGroup2.get(sx).get(0).getBureauDeptName(),
sxGroup2.get(sx).get(0).getLawEnforcerTwo(),sxGroup2.get(sx).get(0).getLawEnforcementItem(),sxGroup2.get(sx).get(0).getEnforcementTime(),sxGroup1.get(sx)+"",
"",""+qyGroup1.get(k),"","",sxGroup2.get(sx).get(0).getRemark());
setStyle1(i+1,area,sxGroup2.get(sx).get(0).getEnterpriseName(),sxGroup2.get(sx).get(0).getBureauDeptName(),
sxGroup2.get(sx).get(0).getLawEnforcerTwo(),sxGroup2.get(sx).get(0).getLawEnforcementItem(),sxGroup2.get(sx).get(0).getEnforcementTime(),sxGroup1.get(sx),
0,qyGroup1.get(k),0,0,sxGroup2.get(sx).get(0).getRemark(),row,styleRow3);
0,qyGroup1.get(k),0,0,sxGroup2.get(sx).get(0),row,styleRow3);
} else if (5<=qyGroup1.get(k)&&qyGroup1.get(k)<=6) {
Collections.addAll(cellList,""+(i+1),area,sxGroup2.get(sx).get(0).getEnterpriseName(),sxGroup2.get(sx).get(0).getBureauDeptName(),
sxGroup2.get(sx).get(0).getLawEnforcerTwo(),sxGroup2.get(sx).get(0).getLawEnforcementItem(),sxGroup2.get(sx).get(0).getEnforcementTime(),sxGroup1.get(sx)+"",
"","",""+qyGroup1.get(k),"",sxGroup2.get(sx).get(0).getRemark());
setStyle1(i+1,area,sxGroup2.get(sx).get(0).getEnterpriseName(),sxGroup2.get(sx).get(0).getBureauDeptName(),
sxGroup2.get(sx).get(0).getLawEnforcerTwo(),sxGroup2.get(sx).get(0).getLawEnforcementItem(),sxGroup2.get(sx).get(0).getEnforcementTime(),sxGroup1.get(sx),
0,0,qyGroup1.get(k),0,sxGroup2.get(sx).get(0).getRemark(),row,styleRow3);
0,0,qyGroup1.get(k),0,sxGroup2.get(sx).get(0),row,styleRow3);
}else {
Collections.addAll(cellList,""+(i+1),area,sxGroup2.get(sx).get(0).getEnterpriseName(),sxGroup2.get(sx).get(0).getBureauDeptName(),
sxGroup2.get(sx).get(0).getLawEnforcerTwo(),sxGroup2.get(sx).get(0).getLawEnforcementItem(),sxGroup2.get(sx).get(0).getEnforcementTime(),sxGroup1.get(sx)+"",
"","","",""+qyGroup1.get(k),sxGroup2.get(sx).get(0).getRemark());
setStyle1(i+1,area,sxGroup2.get(sx).get(0).getEnterpriseName(),sxGroup2.get(sx).get(0).getBureauDeptName(),
sxGroup2.get(sx).get(0).getLawEnforcerTwo(),sxGroup2.get(sx).get(0).getLawEnforcementItem(),sxGroup2.get(sx).get(0).getEnforcementTime(),sxGroup1.get(sx),
0,0,0,qyGroup1.get(k),sxGroup2.get(sx).get(0).getRemark(),row,styleRow3);
0,0,0,qyGroup1.get(k),sxGroup2.get(sx).get(0),row,styleRow3);
}
//setStyle(cellList,row,styleRow3);
if (sxGroup1.get(sx) >= 2) {
@ -2512,11 +2521,11 @@ public class EnforcementCheckStatisticsImpl implements EnforcementCheckStatistic
if(s<1){
setStyle1(i+1,area,sxGroup2.get(sx).get(0).getEnterpriseName(),sxGroup2.get(sx).get(0).getBureauDeptName(),
sxGroup2.get(sx).get(0).getLawEnforcerTwo(),sxGroup2.get(sx).get(0).getLawEnforcementItem(),sxGroup2.get(sx).get(s).getEnforcementTime(),sxGroup1.get(sx),
qyGroup1.get(k),0,0,0,sxGroup2.get(sx).get(0).getRemark(),timrow,styleRow3);
qyGroup1.get(k),0,0,0,sxGroup2.get(sx).get(s),timrow,styleRow3);
}else {
setStyle1(i + 1, area, sxGroup2.get(sx).get(0).getEnterpriseName(), sxGroup2.get(sx).get(0).getBureauDeptName(),
sxGroup2.get(sx).get(0).getLawEnforcerTwo(), sxGroup2.get(sx).get(0).getLawEnforcementItem(), sxGroup2.get(sx).get(s).getEnforcementTime(), 0,
qyGroup1.get(k), 0, 0, 0, sxGroup2.get(sx).get(0).getRemark(), timrow, styleRow3);
qyGroup1.get(k), 0, 0, 0, sxGroup2.get(sx).get(s), timrow, styleRow3);
}
}
sheet.addMergedRegion(new CellRangeAddress(rowNum, (int) (rowNum - 1 + sxGroup1.get(sx)), 5, 5));//合并事项
@ -2540,7 +2549,7 @@ public class EnforcementCheckStatisticsImpl implements EnforcementCheckStatistic
rowNum++;
HSSFRow row=sheet.createRow(rowNum);
List<String> cellList=new ArrayList<>();
Collections.addAll(cellList,""+(i+1),area,"","","","","","","","","","","");
Collections.addAll(cellList,""+(i+1),area,"","","","","","","","","","","","");
setStyle(cellList,row,styleRow3);
}
}

12
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/EnforcementRegistrationServiceImpl.java

@ -29,6 +29,7 @@ import com.zdxt.code.mapper.LinkageDictMapper;
import com.zdxt.code.service.*;
import com.zdxt.common.annotation.DataScope;
import com.zdxt.common.util.DateUtils;
import com.zdxt.common.util.SpringUtils;
import com.zdxt.common.util.StringUtils;
import com.zdxt.common.zdxtFile.AttFileRespDTO;
import com.zdxt.common.zdxtFile.FilePreviewUtilBean;
@ -897,7 +898,7 @@ public class EnforcementRegistrationServiceImpl implements IEnforcementRegistrat
styleRow2.setBorderLeft(BorderStyle.THIN);
styleRow2.setFont(font2);
//设置表头
String[] headerList = {"执法单位", "被执法企业名称","统一社会信用代码","企业所属区域", "企业所属街道", "执法人员","执法事项","执法时间", "联合执法", "受委托", "委托单位","行政执法类别","任务来源","是否扫码","未扫码原因","是否投诉"};
String[] headerList = {"执法单位", "被执法企业名称","统一社会信用代码","企业所属区域", "企业所属街道", "执法人员","执法事项","执法时间", "联合执法", "受委托", "委托单位","行政执法类别","任务来源","是否扫码","未扫码原因","是否投诉", "创建时间"};
HSSFRow headerRow = sheet.createRow(0);
for (int i = 0; i < headerList.length; i++) {
HSSFCell cell = headerRow.createCell(i);
@ -978,6 +979,9 @@ public class EnforcementRegistrationServiceImpl implements IEnforcementRegistrat
}else {
cell11.setCellValue("是");
}
HSSFCell cellCreateTime = row.createCell(16);
cellCreateTime.setCellValue(e.getCreateTime());
cellCreateTime.setCellStyle(dateStyle);
}
//先将workbook写入字节数组,获取长度后再写入响应流,防止大文件导出时管道断开
@ -1003,7 +1007,7 @@ public class EnforcementRegistrationServiceImpl implements IEnforcementRegistrat
String jd=iDictDataService.selectDictLabel(enforcementRegistration.getQy(),enforcementRegistration.getJd());
enforcementRegistration.setJd(jd);
enforcementRegistration.setQy(qy);
List<EnforcementRegistration> list = enforcementRegistrationMapper.selectEnforcementRegistrationAndAddressList(enforcementRegistration);
List<EnforcementRegistration> list = SpringUtils.getAopProxy(this).selectEnforcementRegistrationAndAddressList(enforcementRegistration);
for(int i=0;i<list.size();i++){
list.get(i).setQy(qy);
list.get(i).setJd(jd);
@ -1014,7 +1018,7 @@ public class EnforcementRegistrationServiceImpl implements IEnforcementRegistrat
String qy=iDictDataService.selectDictLabel("address_Type",enforcementRegistration.getQy());
List<DictData> jdList=iDictDataService.selectDictDataByType(enforcementRegistration.getQy());
enforcementRegistration.setQy(qy);
List<EnforcementRegistration> list = enforcementRegistrationMapper.selectEnforcementRegistrationAndAddressList(enforcementRegistration);
List<EnforcementRegistration> list = SpringUtils.getAopProxy(this).selectEnforcementRegistrationAndAddressList(enforcementRegistration);
/*List<String> jdStrings=new ArrayList<>();
for(DictData dictData:jdList){
jdStrings.add(dictData.getDictLabel());
@ -1044,7 +1048,7 @@ public class EnforcementRegistrationServiceImpl implements IEnforcementRegistrat
for(DictData dictData:qyList){
qyStrings.add(dictData.getDictLabel());
}
List<EnforcementRegistration> list = enforcementRegistrationMapper.selectEnforcementRegistrationAndAddressList(enforcementRegistration);
List<EnforcementRegistration> list = SpringUtils.getAopProxy(this).selectEnforcementRegistrationAndAddressList(enforcementRegistration);
List<EnforcementRegistration> enforcementRegistrationsList=new ArrayList<>();
//enterpriseIsNot为过滤开发环境时无企业信息的情况,正式环境可将编号abc注释
List<EnforcementRegistration> enterpriseIsNot=list.stream().filter(item->item.getEnterpriseAddress()==null).collect(Collectors.toList());//a

2
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/EnterpriseInformationServiceImpl.java

@ -336,8 +336,6 @@ public class EnterpriseInformationServiceImpl implements IEnterpriseInformationS
enterpriseMerchantAuthorization.setMerchantTel(user.getPhonenumber());
iEnterpriseMerchantAuthorizationService.insertEnterpriseMerchantAuthorization(enterpriseMerchantAuthorization);
}
return i;
}

189
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/EnterprisePubQrcodeServiceImpl.java

@ -33,25 +33,33 @@ import com.lowagie.text.pdf.PdfOutline;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;
import com.zdxt.auth.dto.DeptBean;
import com.zdxt.auth.dto.RoleBean;
import com.zdxt.auth.dto.UserBean;
import com.zdxt.auth.feign.FileUploadApi;
import com.zdxt.auth.feign.UserApi;
import com.zdxt.auth.project.system.dept.mapper.DeptMapper;
import com.zdxt.auth.project.system.dept.service.IDeptService;
import com.zdxt.code.domain.EnterpriseInformation;
import com.zdxt.code.mapper.EnterpriseInformationMapper;
import com.zdxt.code.service.ISsztJbxx110497Service;
import com.zdxt.code.service.IQrCodeGenerateHistoryService;
import com.zdxt.code.domain.QrCodeGenerateHistory;
import com.zdxt.auth.project.system.dict.service.IDictDataService;
import com.zdxt.common.config.RuoYiConfig;
import com.zdxt.common.util.Constants;
import com.zdxt.common.util.DateUtils;
import com.zdxt.common.util.PageUtil;
import com.zdxt.common.util.StringUtils;
import com.zdxt.domain.auth.Dept;
import com.zdxt.domain.auth.DictData;
import org.apache.commons.collections.CollectionUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@ -93,6 +101,9 @@ public class EnterprisePubQrcodeServiceImpl implements IEnterprisePubQrcodeServi
@Autowired
private IDeptService deptService;
@Autowired
private IDictDataService iDictDataService;
@Autowired
private ISsztJbxx110497Service ssztJbxx110497Service;
@ -105,6 +116,9 @@ public class EnterprisePubQrcodeServiceImpl implements IEnterprisePubQrcodeServi
@Autowired
private FileUploadApi fileUploadApi;
@Autowired
private DeptMapper deptMapper;
@Value("${ruoyi.profile}")
private String filePath;
@ -217,6 +231,19 @@ public class EnterprisePubQrcodeServiceImpl implements IEnterprisePubQrcodeServi
String importFileId = UUID.randomUUID().toString().replace("-", "");
String importFileName = file.getOriginalFilename();
// 预加载区域字典数据:select * from sys_dict_data where dict_type='address_type'
List<DictData> areaDictList = iDictDataService.selectDictDataByType("address_type");
// 预加载街道字典数据:select * from sys_dict_data where dict_type in (select dict_value from sys_dict_data where dict_type='address_type')
List<String> areaDictValues = new ArrayList<>();
for (DictData areaDict : areaDictList)
{
if (StrUtil.isNotBlank(areaDict.getDictValue()))
{
areaDictValues.add(areaDict.getDictValue());
}
}
List<DictData> streetDictList = areaDictValues.isEmpty() ? new ArrayList<>() : iDictDataService.getDataByDataTypes(areaDictValues);
for (int i = 0; i < dataList.size(); i++)
{
EnterprisePubQrcode item = dataList.get(i);
@ -242,40 +269,55 @@ public class EnterprisePubQrcodeServiceImpl implements IEnterprisePubQrcodeServi
errorMsg.append("第").append(rowNum).append("行,统一社会信用代码格式不正确(应为18位数字和大写字母组合);");
}
// 验证归属区域
// 验证归属区域(通过字典表 address_type 匹配)
if (StrUtil.isBlank(item.getAreaName()))
{
errorMsg.append("第").append(rowNum).append("行,归属区域不能为空;");
}
else
{
Dept areaDept=deptService.selectDeptByDeptName2(item.getAreaName().trim());
if (areaDept == null)
DictData matchedArea = null;
for (DictData dd : areaDictList)
{
if (item.getAreaName().trim().equals(dd.getDictLabel()))
{
matchedArea = dd;
break;
}
}
if (matchedArea == null)
{
errorMsg.append("第").append(rowNum).append("行,归属区域\"").append(item.getAreaName()).append("\"在系统中未找到;");
}
else
{
item.setAreaId(areaDept.getDeptId());
item.setAreaId(matchedArea.getDictValue());
}
}
// 验证归属街道
// 验证归属街道(通过字典表匹配,dict_type为区域的dict_value)
if (StrUtil.isBlank(item.getStreetName()))
{
errorMsg.append("第").append(rowNum).append("行,归属街道不能为空;");
}
else
{
List<Dept> deptList=deptService.selectDeptByDeptName(item.getStreetName().trim());
if (deptList == null || deptList.isEmpty())
DictData matchedStreet = null;
for (DictData dd : streetDictList)
{
if (item.getStreetName().trim().equals(dd.getDictLabel()))
{
matchedStreet = dd;
break;
}
}
if (matchedStreet == null)
{
errorMsg.append("第").append(rowNum).append("行,归属街道\"").append(item.getStreetName()).append("\"在系统中未找到;");
}
else
{
Dept streetDept = deptList.get(0);
item.setStreetId(streetDept.getDeptId());
item.setStreetId(matchedStreet.getDictValue());
}
}
@ -290,12 +332,12 @@ public class EnterprisePubQrcodeServiceImpl implements IEnterprisePubQrcodeServi
throw new Exception("导入失败:" + errorMsg.toString());
}
// 4.批量导入数据(根据EnterpriseNumber判断新增或更新)
// 4.批量导入数据(根据EnterpriseNumber和UserId判断新增或更新)
int insertCount = 0;
int updateCount = 0;
for (EnterprisePubQrcode item : dataList)
{
EnterprisePubQrcode existing = enterprisePubQrcodeMapper.selectEnterprisePubQrcodeByEnterpriseNumber(item.getEnterpriseNumber().trim());
EnterprisePubQrcode existing = enterprisePubQrcodeMapper.selectByEnterpriseNumberAndUserId(item.getEnterpriseNumber().trim(), currentUser.getUserId());
if (existing != null)
{
// 已存在,更新记录并重置状态
@ -330,8 +372,15 @@ public class EnterprisePubQrcodeServiceImpl implements IEnterprisePubQrcodeServi
item.setUserName(currentUser.getUserName());
item.setUserId(currentUser.getUserId());
item.setCreateBy(currentUser.getUserName());
item.setDeptName(currentUser.getDeptName());
item.setDeptName(currentUser.getDept().getDeptName());
item.setDeptId(currentUser.getDeptId());
// 递归查找父级存在zone值的部门(最多4级)
Dept zoneDept = findParentDeptWithZone(currentUser.getDeptId(), 4);
if (zoneDept != null)
{
item.setZoneDeptId(zoneDept.getDeptId());
item.setZoneDeptName(zoneDept.getDeptName());
}
enterprisePubQrcodeMapper.insertEnterprisePubQrcode(item);
insertCount++;
}
@ -883,6 +932,115 @@ public class EnterprisePubQrcodeServiceImpl implements IEnterprisePubQrcodeServi
return enterprisePubQrcodeMapper.batchUpdateDownloadStatus(idArray, downloadStatus, remark);
}
/**
* 查询送码入企信息列表(含数据范围过滤)
*
* @param enterprisePubQrcode 查询条件
* @return 送码入企信息集合
*/
@Override
public List<EnterprisePubQrcode> selectEnterprisePubQrcodeQueryList(EnterprisePubQrcode enterprisePubQrcode)
{
List<DeptBean> checkDept = check();
if (checkDept != null && checkDept.isEmpty())
{
return new ArrayList<>();
}
if (checkDept != null)
{
List<String> deptIds = new ArrayList<>();
for (DeptBean deptBean : checkDept)
{
deptIds.add(deptBean.getDeptId());
}
enterprisePubQrcode.getParams().put("deptIds", deptIds);
}
PageUtil.startPage();
return enterprisePubQrcodeMapper.selectEnterprisePubQrcodeQueryList(enterprisePubQrcode);
}
/**
* 递归查找父级部门中存在zone值的部门(最多向上查找4级)
*
* @param deptId 当前部门ID
* @param maxDepth 最大递归深度
* @return 存在zone值的部门,未找到返回null
*/
private Dept findParentDeptWithZone(String deptId, int maxDepth)
{
if (maxDepth <= 0 || StrUtil.isBlank(deptId))
{
return null;
}
Dept dept = deptMapper.selectDeptById(deptId);
if (dept == null)
{
return null;
}
if (dept.getZone() != null)
{
return dept;
}
return findParentDeptWithZone(dept.getParentId(), maxDepth - 1);
}
/**
* 数据范围校验:根据当前用户角色的dataScope判断可查询的数据范围
* 参考 EnterpriseInformationServiceImpl.check 方法
*
* @return null表示全部可见,空集合表示无权限,非空集合表示可见的部门(区域)列表
*/
private List<DeptBean> check()
{
UserBean currentUser = userApi.getCurrentUser();
List<DeptBean> deptBeans = new ArrayList<>();
if (currentUser.isAdmin())
{
return null;
}
for (RoleBean role : currentUser.getRoles())
{
String dataScope = role.getDataScope();
if ("2".equals(dataScope))
{
List<Dept> depts = deptMapper.selectDeptByRoleId(role.getRoleId());
if (CollectionUtils.isNotEmpty(depts))
{
for (Dept dept : depts)
{
DeptBean deptBean = new DeptBean();
BeanUtils.copyProperties(dept, deptBean);
deptBeans.add(deptBean);
}
}
}
else if ("3".equals(dataScope))
{
Dept dept = deptMapper.selectDeptById(currentUser.getDeptId());
if (java.util.Objects.nonNull(dept))
{
DeptBean deptBean = new DeptBean();
BeanUtils.copyProperties(dept, deptBean);
deptBeans.add(deptBean);
}
}
else if ("4".equals(dataScope))
{
List<Dept> depts = deptMapper.selectSelfAndChildrenById(currentUser.getDeptId());
if (CollectionUtils.isNotEmpty(depts))
{
for (Dept dept : depts)
{
DeptBean deptBean = new DeptBean();
BeanUtils.copyProperties(dept, deptBean);
deptBeans.add(deptBean);
}
}
}
}
return deptBeans;
}
/**
* 生成并存储蓝色二维码(带LOGO),同时写入qr_code_generate_history表
*
@ -891,6 +1049,8 @@ public class EnterprisePubQrcodeServiceImpl implements IEnterprisePubQrcodeServi
*/
private void generateAndStoreBlueQrCode(EnterprisePubQrcode record, EnterpriseInformation enterpriseInfo) throws Exception
{
UserBean currentUser = userApi.getCurrentUser();
String enterpriseNumber = record.getEnterpriseNumber();
// 检查qr_code_generate_history表中是否已存在该企业由送码入企生成的有效二维码记录
@ -909,6 +1069,11 @@ public class EnterprisePubQrcodeServiceImpl implements IEnterprisePubQrcodeServi
String codeId = IdUtil.simpleUUID();
Map<String, String> jsonMap = new HashMap<>();
if (StringUtils.isEmpty(salt)){
throw new Exception("企业salt值为空,为了兼容旧的扫码功能,该值不能为空!");
}
jsonMap.put("salt", salt);
jsonMap.put("codeId", codeId);
jsonMap.put("type", "zfjd");

12
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/NonEnforcementRegistrationServiceImpl.java

@ -12,14 +12,12 @@ import com.zdxt.auth.feign.DeptApi;
import com.zdxt.auth.feign.UserApi;
import com.zdxt.auth.feign.ZdxtFileCommonApi;
import com.zdxt.auth.project.system.dict.service.IDictDataService;
import com.zdxt.code.domain.EnforcementRegistration;
import com.zdxt.code.domain.NonEnforcementRegistration;
import com.zdxt.code.mapper.NonEnforcementRegistrationMapper;
import com.zdxt.code.service.INonEnforcementRegistrationService;
import com.zdxt.common.annotation.DataScope;
import com.zdxt.common.util.CommonUtil;
import com.zdxt.common.util.Convert;
import com.zdxt.common.util.DateUtils;
import com.zdxt.common.util.StringUtils;
import com.zdxt.common.util.*;
import com.zdxt.common.zdxtFile.ZdxtFileCommon;
import com.zdxt.domain.auth.DictData;
import org.apache.poi.hssf.usermodel.*;
@ -254,7 +252,7 @@ public class NonEnforcementRegistrationServiceImpl implements INonEnforcementReg
styleRow2.setFont(font2);
HSSFRow headerRow = sheet.createRow(0);
// String[] header = {"被执法企业名称","企业所属区域", "企业所属街道", "执法单位", "执法人员","执法时间","入企事由","入企事项","活动依据"};
String[] header = {"单位名称", "企业名称","统一信用码","企业注册地", "企业所属街道", "入企人员","入企时间","入企事由","入企事项","活动依据"};
String[] header = {"单位名称", "企业名称","统一信用码","企业注册地", "企业所属街道", "入企人员","入企时间","入企事由","入企事项","活动依据", "创建时间"};
for (int i = 0; i < header.length; i++) {
HSSFCell cell = headerRow.createCell(i);
HSSFRichTextString text = new HSSFRichTextString(header[i]);
@ -288,7 +286,8 @@ public class NonEnforcementRegistrationServiceImpl implements INonEnforcementReg
// 设置excel
private void setExcel(HSSFSheet sheet,NonEnforcementRegistration param) throws Exception{
List<NonEnforcementRegistration> list=getList(param);
// List<EnforcementRegistration> list = SpringUtils.getAopProxy(this).selectEnforcementRegistrationAndAddressList(enforcementRegistration);
List<NonEnforcementRegistration> list=SpringUtils.getAopProxy(this).getList(param);
if(list.size()==0)return;
final int[] i = {1};
list.forEach(li->{
@ -303,6 +302,7 @@ public class NonEnforcementRegistrationServiceImpl implements INonEnforcementReg
row.createCell(7).setCellValue(li.getLawEnforcementTypeText());
row.createCell(8).setCellValue(li.getLawEnforcementItemText());
row.createCell(9).setCellValue(li.getLawEnforcementBasisText());
row.createCell(10).setCellValue(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", li.getCreateTime()));
i[0]++;
});
}

57
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/SrzUserServiceImpl.java

@ -75,33 +75,40 @@ public class SrzUserServiceImpl implements ISrzUserService
int insertNum = 0;
int updateNum = 0;
for (int i = 0; i < dataArr.size(); i++) {
JSONObject jsonObject = dataArr.getJSONObject(i);
if (StringUtils.isEmpty(jsonObject.getString("userId"))) { continue; }
try {
// 返回每条拉取的成功情况
String taskId = jsonObject.getString("taskId");
String params = "{\"token\":\"" + token + "\",\"data\":[{\"taskId\":\"" + taskId + "\",\"result\":\"SUCCESS\"}]}";
String doneStr = connect("/ebus/sfrzhqxglmk/sysDoneTacc", params);
JSONObject doneObj = JSONObject.parseObject(doneStr);
String done = doneObj.getString("success");
log.info("用户拉取完成结果 ========> {} :{}", taskId, done);
JSONObject jsonObject = dataArr.getJSONObject(i);
if (StringUtils.isEmpty(jsonObject.getString("userId"))) {
continue;
}
try {
// 返回每条拉取的成功情况
String taskId = jsonObject.getString("taskId");
String params = "{\"token\":\"" + token + "\",\"data\":[{\"taskId\":\"" + taskId + "\",\"result\":\"SUCCESS\"}]}";
String doneStr = connect("/ebus/sfrzhqxglmk/sysDoneTacc", params);
JSONObject doneObj = JSONObject.parseObject(doneStr);
String done = doneObj.getString("success");
log.info("用户拉取完成结果 ========> {} :{}", taskId, done);
} catch (Exception e) {
log.info("用户数据下拉完成异常,异常任务id:{}", jsonObject.getString("taskId"));
e.printStackTrace();
}
SrzUser srzUser = JSONObject.parseObject(jsonObject.toString(), SrzUser.class);
if (srzUser == null) continue;
SrzUser temp = srzUserMapper.selectUserByPrimaryKey(srzUser.getUserId());
srzUser.setNeedUpdate(0);
// if (null != temp && temp.getOrganizationId() != null) {
if (null != temp) {
// 跟新数据库
int rowNum = srzUserMapper.updateUser(srzUser);
updateNum += rowNum;
} else {
// 插入数据库
int rowNum = srzUserMapper.insertUser(srzUser);
insertNum += rowNum;
}
} catch (Exception e) {
log.info("用户数据下拉完成异常,异常任务id:{}", jsonObject.getString("taskId"));
e.printStackTrace();
}
SrzUser srzUser=JSONObject.parseObject(jsonObject.toString(),SrzUser.class);
if(srzUser==null)continue;
SrzUser temp = srzUserMapper.selectUserByPrimaryKey(srzUser.getUserId());
srzUser.setNeedUpdate(0);
if (null != temp && temp.getOrganizationId() != null) {
// 跟新数据库
int rowNum = srzUserMapper.updateUser(srzUser);
updateNum += rowNum;
} else {
// 插入数据库
int rowNum = srzUserMapper.insertUser(srzUser);
insertNum += rowNum;
log.info("用户数据同步异常. 暂不处理继续拉去");
}
}
Map<String, Integer> resMap = new HashedMap();

101
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/ThirdLoginServiceImpl.java

@ -10,17 +10,15 @@ import com.zdxt.auth.feign.UserApi;
import com.zdxt.auth.framework.shiro.jwt.JWTUtils;
import com.zdxt.auth.framework.shiro.nopaddword.LoginType;
import com.zdxt.auth.framework.shiro.nopaddword.UserToken;
import com.zdxt.auth.project.system.user.service.IUserService;
import com.zdxt.code.domain.EnterpriseInformation;
import com.zdxt.code.domain.Zfryjdm2405301;
import com.zdxt.code.mapper.Xzjcjbxx025711Mapper;
import com.zdxt.code.service.IEnterpriseInformationService;
import com.zdxt.code.service.ThirdLoginService;
import com.zdxt.code.utils.ServiceInvocation;
import com.zdxt.common.util.IdCardCryptoUtil;
import com.zdxt.common.util.*;
import com.zdxt.common.ZDResponse;
import com.zdxt.common.util.DateUtils;
import com.zdxt.common.util.StringUtils;
import com.zdxt.common.util.UserConstants;
import com.zdxt.domain.auth.User;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpResponse;
@ -66,6 +64,7 @@ public class ThirdLoginServiceImpl implements ThirdLoginService {
private UserApi userApi;
@Autowired
private DeptApi deptApi;
@Autowired private IUserService userService;
@Autowired
private IEnterpriseInformationService enterpriseInformationService;
@ -116,6 +115,8 @@ public class ThirdLoginServiceImpl implements ThirdLoginService {
Subject subject = SecurityUtils.getSubject();
subject.login(sysToken);
user.setEnterpriseNumber(jsonObject.getString("corpCid"));
user.setArea(jsonObject.getString("regLocation"));
Map<String,Object> payload = new HashMap<>();
payload.put("id", user.getUserId());
payload.put("name", user.getLoginName());
@ -180,12 +181,17 @@ public class ThirdLoginServiceImpl implements ThirdLoginService {
// 获取执法主体
user.setBureauDept(deptApi.iterationDeptParentToBureau(user.getDeptId()));
// 判断是否执法人员
if(StrUtil.isNotEmpty(user.getCertificateNumber())){
user.setLawOfficer(this.checkIsLawOfficer(user.getCertificateNumber()));
log.info("-----------> {} - 判断是否执法人员: {}", user.getUserId(), user.getLawOfficer());
log.info("-----------> {} - 执法证件号: {}", user.getUserName(), user.getLawCertificateNum());
if(StrUtil.isNotEmpty(user.getLawCertificateNum())){
// user.setLawOfficer(this.checkIsLawOfficer(user.getCertificateNumber()));
user.setLawOfficer(true);
}else if (StrUtil.isNotEmpty(user.getCertificateNumber())){ // 没有身份证的话就用执法证去找下
List<Zfryjdm2405301> zfryjdm2405301s = xzjcjbxx025711Mapper.queryZFRYByzfcode(user.getLawCertificateNum());
if (zfryjdm2405301s.size() > 0) {
String zfcode = this.checkIsLawOfficer2(user.getCertificateNumber());
if (zfcode.length() > 0) {
UserBean tmpUser = new UserBean();
tmpUser.setUserId(user.getUserId());
tmpUser.setLawCertificateNum(zfcode);
userApi.updateUser(tmpUser);
user.setLawOfficer(true);
} else {
user.setLawOfficer(false);
@ -213,6 +219,7 @@ public class ThirdLoginServiceImpl implements ThirdLoginService {
payload.put("name", user.getLoginName());
String token1 = JWTUtils.sign(payload);
user.setToken(token1);
user.setArea(dept.getAreaNode());
return ZDResponse.success("登录成功",user);
} catch (Exception e) {
log.error(e.getMessage());
@ -221,6 +228,39 @@ public class ThirdLoginServiceImpl implements ThirdLoginService {
return null;
}
@Override
public Long addLiqUser(JSONObject jsonObject) {
User userDomin = userService.selectUserByKingdeeUserId(jsonObject.getString("uid"));
if (userDomin == null) {
UserBean userBean = new UserBean();
//设置默认用户权限,权限为默认值
userBean.setRoleId(178L);
// StringId 和 金蝶Id
userBean.setStrUserId(jsonObject.getString("uid"));
userBean.setKingdeeUserId(jsonObject.getString("uid"));
//用户姓名
userBean.setUserName(jsonObject.getString("name"));
//手机号码
String phone = PhoneCardCryptoUtil.aesEcbDecrypt(jsonObject.getString("mobile"));
userBean.setPhonenumber(phone);
userBean.setLoginName(phone);
//TODO 密码漏洞 设置为默认密码
userBean.setPassword("szsf@zfjd");
userBean.setCreateTime(DateUtils.getNowDate());
// userBean.setUserId(Long.valueOf(userId));
//部门ID设置为默认值
userBean.setDeptId("405");
//默认设置深i企用户类型为 1
userBean.setUserSource(1);
UserBean ub = userApi.getClientUserByUserLoginName(userBean.getLoginName(), 1);
if (null != ub && null != ub.getUserId()) {
return ub.getUserId();
}
return userApi.insertUserResId(userBean);
}
return userDomin.getUserId();
}
@Override
public Long addSiqUser(JSONObject jsonObject) {
@ -310,6 +350,27 @@ public class ThirdLoginServiceImpl implements ThirdLoginService {
return tmp.getUserId();
}
@Override
public Boolean addLiqUserCompany(JSONObject jsonObject) {
//判断当前登录人是否已经在本系统中登记了企业信息
EnterpriseInformation enterpriseInformation1 = new EnterpriseInformation();
enterpriseInformation1.setEnterpriseNumber(jsonObject.getString("unicode"));
List<EnterpriseInformation> enterpriseInformations = enterpriseInformationService.selectEnterpriseInformationList(enterpriseInformation1);
if(enterpriseInformations.size() == 0){
//保存企业信息
EnterpriseInformation enterpriseInformation = new EnterpriseInformation();
//企业统一信用代码
enterpriseInformation.setEnterpriseNumber(jsonObject.getString("unicode"));
//企业名称
enterpriseInformation.setEnterpriseName(jsonObject.getString("name"));
//用户Id
enterpriseInformation.setUserId(Long.valueOf(jsonObject.getString("userId")));
return enterpriseInformationService.insertEnterpriseInformation(enterpriseInformation) > 0 ? Boolean.TRUE : Boolean.FALSE;
}
return true;
}
@Override
public Boolean addSiqUserCompany(JSONObject jsonObject) {
//判断当前登录人是否已经在本系统中登记了企业信息
@ -401,6 +462,28 @@ public class ThirdLoginServiceImpl implements ThirdLoginService {
return Boolean.FALSE;
}
@Override
public String checkIsLawOfficer2(String userIdCard) {
//证件号解密
String s = IdCardCryptoUtil.symmetricDecryptIdCard(srzSecretKey, userIdCard);
log.error("----> 打印出身份证解密用盐: {}", srzSecretKey);
System.out.println("======身份证解密========");
log.info(s);
System.out.println("==============");
List<Zfryjdm2405301> zfryjdm2405301s = xzjcjbxx025711Mapper.queryZFRYByIdCard(s);
System.out.println("======解密后查询========");
System.out.println(zfryjdm2405301s);
System.out.println("==============");
if(zfryjdm2405301s.size() > 0 ){
if(BeanUtil.isNotEmpty(zfryjdm2405301s.get(0).getZfcode())){
return zfryjdm2405301s.get(0).getZfcode();
}else{
return "";
}
}
return "";
}
@Override
public String getSjEnterpriseInfo(String url) {
HttpClient httpClient = HttpClients.createDefault();

5
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/utils/HttpUtil.java

@ -192,10 +192,13 @@ public class HttpUtil {
public static String httpSendPost(String url,String params,Map<String,Object> heardMap){
try {
URL uri = new URL(url);
log.info("url{}",url);
log.info("params{}",params);
log.info("heardMap{}",heardMap);
HttpURLConnection connection = (HttpURLConnection) uri.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type","application/json");
connection.setRequestProperty("Charsert","UTF-8");
connection.setRequestProperty("Charset","UTF-8");
for (Map.Entry<String, Object> entry : heardMap.entrySet()) {
// 对value进行相应的操作
connection.setRequestProperty(entry.getKey(), String.valueOf(entry.getValue()));

30
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/utils/ZwSmsClient.java

@ -34,21 +34,21 @@ public class ZwSmsClient {
// password = Azdg.encrypt(password);
// ConnMas();
sendMessage("18520089969", "【测试短信】尊敬的 石磊先生 , 您有一条于: 今天 的执法预约信息, 请查收");
String orgCode = "10"; // 发送用户标记 一般两位数字
String mobileNum = "17608416852,18520089969"; //接收号码, 多个逗号分隔
String content = "测试内容:xxx"; // 短信内容
Integer needReport = 1; // 是否需要短信报告 1 需要 其他不需要
String sendbody = "<sendbody>\n" +
"\t<message>\n" +
"\t<orgaddr></orgaddr><mobile>%s</mobile>" +
"<content><![CDATA[%s]]></content>" +
"<sendtime></sendtime>" +
"<needreport>%s</needreport>\n" +
"\t</message>\n" +
"\t<publicContent></publicContent>\n" +
"</sendbody>";
InsertDownSms(String.format(sendbody, mobileNum, content, needReport));
// String orgCode = "10"; // 发送用户标记 一般两位数字
// String mobileNum = "17608416852,18520089969"; //接收号码, 多个逗号分隔
// String content = "测试内容:xxx"; // 短信内容
// Integer needReport = 1; // 是否需要短信报告 1 需要 其他不需要
//
// String sendbody = "<sendbody>\n" +
// "\t<message>\n" +
// "\t<orgaddr></orgaddr><mobile>%s</mobile>" +
// "<content><![CDATA[%s]]></content>" +
// "<sendtime></sendtime>" +
// "<needreport>%s</needreport>\n" +
// "\t</message>\n" +
// "\t<publicContent></publicContent>\n" +
// "</sendbody>";
// InsertDownSms(String.format(sendbody, mobileNum, content, needReport));
}
/**

BIN
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/resources/images/enterprise_pub_qrcode.xlsx

Binary file not shown.

9
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/resources/mapper/EnforcementCheckStatisticsMapper.xml

@ -15,6 +15,8 @@
<result property="remark" column="remark"/>
<result property="depId" column="dep_id"/>
<result property="enterpriseAddress" column="enterprise_address"/>
<result property="enforcementTime" column="enforcement_time"/>
<result property="createTime" column="create_time"/>
</resultMap>
<select id="selectEnforcementCheckStatisticsList" parameterType="EnforcementCheckStatistics" resultMap="EnforcementCheckStatisticsResult">
@ -48,7 +50,7 @@
</select>
<select id="selectAllStatisticsList" parameterType="EnforcementCheckStatistics" resultMap="EnforcementCheckStatisticsResult">
select e.bureau_dept_name,e.bureau_dept_id,e.law_enforcement_id,e.enterprise_number,i.enterprise_name,concat(e.law_enforcer,",",e.law_enforcer_two)as lawEnforcerTwo,e.law_enforcement_item_text,e.enforcement_time,e.remark,i.enterprise_address
select e.bureau_dept_name,e.bureau_dept_id,e.law_enforcement_id,e.enterprise_number,i.enterprise_name,concat(e.law_enforcer,",",e.law_enforcer_two)as lawEnforcerTwo,e.law_enforcement_item_text,e.enforcement_time,e.remark,e.create_time,i.enterprise_address
from enforcement_registration e
left join sys_dept s on e.bureau_dept_id=s.dept_id
left join (select * from enterprise_information group by enterprise_number order by is_delete asc) i on e.enterprise_number=i.enterprise_number
@ -100,6 +102,11 @@
<if test="endTime != null and endTime != ''"><!-- 结束时间检索 -->
and DATE_FORMAT(e.enforcement_time,'%Y-%m-%d') &lt;= STR_TO_DATE(#{endTime},'%Y-%m-%d')
</if>
<!-- 数据范围过滤 -->
<if test="params.dataScope != null and params.dataScope != ''">
<!-- 数据范围过滤 -->
${params.dataScope}
</if>
</where>
order by e.enterprise_name
</select>

16
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/resources/mapper/EnforcementRegistrationMapper.xml

@ -175,7 +175,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and (law_enforcer_id = #{dataScopeId} or user_id = #{dataScopeId} or law_enforcer_id = #{dataScopeId} or FIND_IN_SET(#{dataScopeId}, law_enforcer_id_two))
</if>
</where>
order by enforcement_time desc
order by enforcement_time desc, id DESC
<if test="params.pageNum != null and params.pageSize != null"><!-- 开始时间检索 -->
LIMIT #{params.pageNum}, #{params.pageSize}
</if>
@ -276,7 +276,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and (law_enforcer_id = #{dataScopeId} or user_id = #{dataScopeId} or law_enforcer_id = #{dataScopeId} or FIND_IN_SET(#{dataScopeId}, law_enforcer_id_two))
</if>
</where>
order by enforcement_time desc
order by enforcement_time desc, id DESC
</select>
<select id="selectEnforcementRegistrationListNew" parameterType="EnforcementRegistration" resultMap="EnforcementRegistrationResult">
@ -363,7 +363,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
${params.dataScope}
</if>
</where>
GROUP BY enterprise_number order by enforcement_time desc) t
GROUP BY enterprise_number order by enforcement_time desc, id DESC) t
<where>
<if test="numLeft != null and numLeft != ''">
and t.num &gt;= #{numLeft}
@ -449,7 +449,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<!-- ${params.dataScope}-->
<!-- </if>-->
</where>
order by enforcement_time desc
order by enforcement_time desc, id DESC
</select>
@ -524,7 +524,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
${params.dataScope}
</if>
</where>
order by enforcement_time desc
order by enforcement_time desc, id DESC
</select>
<select id="selectEnforcementRegistrationAndAddressList" parameterType="EnforcementRegistration" resultMap="EnforcementRegistrationResult">
@ -687,7 +687,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</if>
</where>
GROUP BY IFNULL(union_no, RAND())
order by enforcement_time desc
order by enforcement_time desc, id DESC
</select>
@ -1279,7 +1279,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="unionNo != null and unionNo !=''"> and union_no = #{unionNo}</if>
and union_no is not null
</where>
order by enforcement_time desc
order by enforcement_time desc, id DESC
</select>
<select id="outTimeByUnion" parameterType="EnforcementRegistration" resultType="int">
@ -1293,7 +1293,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="unionNo != null and unionNo !=''"> and union_no = #{unionNo}</if>
and union_no is not null
</where>
order by enforcement_time desc
order by enforcement_time desc, id DESC
</select>
<update id="updateRegToUnionFlag" parameterType="EnforcementRegistration">

6
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/resources/mapper/EnterpriseComplaintMapper.xml

@ -101,9 +101,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
or r.law_enforcement_basis_text like concat(concat('%',#{searchValue}),'%')
or c.problem_description like concat(concat('%',#{searchValue}),'%'))
</if>
<if test="relId == null and enforceType == null">
and (c.enforce_type ='3' or c.rel_id is not null)
</if>
<!-- <if test="relId == null and enforceType == null">-->
<!-- and (c.enforce_type ='3' or c.rel_id is not null)-->
<!-- </if>-->
</where>
ORDER BY c.create_time DESC
<if test="params.pageNum != null and params.pageSize != null"><!-- 开始时间检索 -->

17
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/resources/mapper/EnterpriseInformationMapper.xml

@ -29,9 +29,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="qrCodeUrl" column="qr_code_url" />
</resultMap>
<sql id="selectEnterpriseInformationColumns">
id, enterprise_name, enterprise_number, enterprise_type, company_org_type, enterprise_address, legal_person, registered_capital, establishment_time,
operating_term, business_scope, create_time, create_by, user_id, dept_id, is_unsubscribe, is_delete, salt, enterprise_tel, industry, operating_term_end
</sql>
<sql id="selectEnterpriseInformationColumnsWithAlias">
ei.id, ei.enterprise_name, ei.enterprise_number, ei.enterprise_type, ei.company_org_type, ei.enterprise_address, ei.legal_person, ei.registered_capital, ei.establishment_time,
ei.operating_term, ei.business_scope, ei.create_time, ei.create_by, ei.user_id, ei.dept_id, ei.is_unsubscribe, ei.is_delete, ei.salt, ei.enterprise_tel, ei.industry, ei.operating_term_end
</sql>
<sql id="selectEnterpriseInformationVo">
select id, enterprise_name, enterprise_number, enterprise_type, company_org_type, enterprise_address, legal_person, registered_capital, establishment_time,
operating_term, business_scope, create_time, create_by, user_id, dept_id,is_unsubscribe ,is_delete,salt,enterprise_tel,industry,operating_term_end from enterprise_information
select <include refid="selectEnterpriseInformationColumns"/> from enterprise_information
</sql>
<select id="selectEnterpriseInformationList" parameterType="EnterpriseInformation" resultMap="EnterpriseInformationResult">
@ -107,7 +116,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectEnterpriseInformationAndQrInfo" parameterType="EnterpriseInformation" resultMap="EnterpriseInformationResult">
SELECT
ei.*,gh.qr_code_url
<include refid="selectEnterpriseInformationColumnsWithAlias"/>, gh.qr_code_url
FROM
enterprise_information ei
LEFT JOIN (
@ -126,7 +135,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND (ei.enterprise_name like concat('%', #{searchValue}, '%')
or ei.enterprise_number like concat('%', #{searchValue}, '%'))
</if>
<if test="enterpriseName != null and enterpriseName != ''"> and enterprise_name like concat('%', #{enterpriseName}, '%')</if>
<if test="enterpriseName != null and enterpriseName != ''"> and ei.enterprise_name like concat('%', #{enterpriseName}, '%')</if>
</where>
ORDER BY ei.create_time DESC

43
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/resources/mapper/EnterprisePubQrcodeMapper.xml

@ -29,6 +29,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="remark" column="remark" />
<result property="matchingToType" column="matching_to_type" />
<result property="matchingToId" column="matching_to_id" />
<result property="zoneDeptId" column="zone_dept_id" />
<result property="zoneDeptName" column="zone_dept_name" />
</resultMap>
<sql id="selectEnterprisePubQrcodeVo">
@ -36,7 +38,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
matching_status, matching_message, download_status, dept_name, dept_id, user_name, user_id,
create_time, create_by, qr_code_path, last_qr_code_time,
import_row_num, import_file_name, import_file_id, remark,
matching_to_type, matching_to_id
matching_to_type, matching_to_id, zone_dept_id, zone_dept_name
from enterprise_pub_qrcode
</sql>
@ -53,6 +55,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="downloadStatus != null and downloadStatus != ''"> and download_status = #{downloadStatus}</if>
<if test="deptName != null and deptName != ''"> and dept_name like concat('%', #{deptName}, '%')</if>
<if test="deptId != null and deptId != ''"> and dept_id = #{deptId}</if>
<if test="userId != null and userId != ''"> and user_id = #{userId}</if>
<if test="userName != null and userName != ''"> and user_name like concat('%', #{userName}, '%')</if>
<if test="importFileName != null and importFileName != ''"> and import_file_name like concat('%', #{importFileName}, '%')</if>
<if test="remark != null and remark != ''"> and remark like concat('%', #{remark}, '%')</if>
@ -71,6 +74,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
limit 1
</select>
<select id="selectByEnterpriseNumberAndUserId" resultMap="EnterprisePubQrcodeResult">
<include refid="selectEnterprisePubQrcodeVo"/>
where enterprise_number = #{enterpriseNumber}
and user_id = #{userId}
limit 1
</select>
<select id="selectEnterprisePubQrcodeByIds" resultMap="EnterprisePubQrcodeResult">
<include refid="selectEnterprisePubQrcodeVo"/>
where id in
@ -80,6 +90,31 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
order by import_row_num asc
</select>
<select id="selectEnterprisePubQrcodeQueryList" parameterType="EnterprisePubQrcode" resultMap="EnterprisePubQrcodeResult">
<include refid="selectEnterprisePubQrcodeVo"/>
<where>
<if test="enterpriseName != null and enterpriseName != ''"> and enterprise_name like concat('%', #{enterpriseName}, '%')</if>
<if test="enterpriseNumber != null and enterpriseNumber != ''"> and enterprise_number like concat('%', #{enterpriseNumber}, '%')</if>
<if test="areaName != null and areaName != ''"> and area_name = #{areaName}</if>
<if test="areaId != null and areaId != ''"> and area_id = #{areaId}</if>
<if test="streetName != null and streetName != ''"> and street_name = #{streetName}</if>
<if test="streetId != null and streetId != ''"> and street_id = #{streetId}</if>
<if test="matchingStatus != null and matchingStatus != ''"> and matching_status = #{matchingStatus}</if>
<if test="downloadStatus != null and downloadStatus != ''"> and download_status = #{downloadStatus}</if>
<if test="userName != null and userName != ''"> and user_name like concat('%', #{userName}, '%')</if>
<if test="deptName != null and deptName != ''"> and dept_name like concat('%', #{deptName}, '%')</if>
<if test="importFileName != null and importFileName != ''"> and import_file_name like concat('%', #{importFileName}, '%')</if>
<if test="remark != null and remark != ''"> and remark like concat('%', #{remark}, '%')</if>
<if test="params.deptIds != null and params.deptIds.size() > 0">
and zone_dept_id in
<foreach item="deptIdItem" collection="params.deptIds" open="(" separator="," close=")">
#{deptIdItem}
</foreach>
</if>
</where>
order by create_time desc, import_row_num asc
</select>
<insert id="insertEnterprisePubQrcode" parameterType="EnterprisePubQrcode">
insert into enterprise_pub_qrcode
<trim prefix="(" suffix=")" suffixOverrides=",">
@ -107,6 +142,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="remark != null and remark != ''">remark,</if>
<if test="matchingToType != null and matchingToType != ''">matching_to_type,</if>
<if test="matchingToId != null and matchingToId != ''">matching_to_id,</if>
<if test="zoneDeptId != null and zoneDeptId != ''">zone_dept_id,</if>
<if test="zoneDeptName != null and zoneDeptName != ''">zone_dept_name,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null and id != ''">#{id},</if>
@ -133,6 +170,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="remark != null and remark != ''">#{remark},</if>
<if test="matchingToType != null and matchingToType != ''">#{matchingToType},</if>
<if test="matchingToId != null and matchingToId != ''">#{matchingToId},</if>
<if test="zoneDeptId != null and zoneDeptId != ''">#{zoneDeptId},</if>
<if test="zoneDeptName != null and zoneDeptName != ''">#{zoneDeptName},</if>
</trim>
</insert>
@ -162,6 +201,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="remark != null and remark != ''">remark = #{remark},</if>
<if test="matchingToType != null and matchingToType != ''">matching_to_type = #{matchingToType},</if>
<if test="matchingToId != null and matchingToId != ''">matching_to_id = #{matchingToId},</if>
<if test="zoneDeptId != null and zoneDeptId != ''">zone_dept_id = #{zoneDeptId},</if>
<if test="zoneDeptName != null and zoneDeptName != ''">zone_dept_name = #{zoneDeptName},</if>
</trim>
where id = #{id}
</update>

3
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/resources/mapper/NonEnforcementRegistrationMapper.xml

@ -132,7 +132,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
n.law_enforcement_basis_text,
n.enterprise_address,
n.district,
n.street
n.street,
n.create_time
FROM
non_enforcement_registration n
<choose>

2
lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/resources/mapper/SsztJbxx110497Mapper.xml

@ -42,7 +42,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectSsztJbxx110497Vo">
select JYFW, ZCZB, FWBM, YYZT, SSZTLX, NDBGXX, BYZD1, BZ, ZCH, CLRQ, NJQK, JYCS, ZZJGDM, BIZHONG, HYDM, BYZD3, BYZD2, HZRQ, JYQXQ, JYQXZ, TYSHXYDM, SBSSZB, SWZH, FDDBR, LSQYZCH, LSQYMC, HYML, QYMC, RECORDID, DJJGDH, PRIPID, INS, SEQ, UPDATESTATUS, UPDATETIME from sszt_jbxx110497_new
select JYFW, ZCZB, FWBM, YYZT, SSZTLX, NDBGXX, BYZD1, BZ, ZCH, CLRQ, NJQK, JYCS, ZZJGDM, BIZHONG, HYDM, BYZD3, BYZD2, HZRQ, JYQXQ, JYQXZ, TYSHXYDM, SBSSZB, SWZH, FDDBR, LSQYZCH, LSQYMC, HYML, QYMC, RECORDID, DJJGDH, PRIPID, INS, SEQ, UPDATESTATUS from sszt_jbxx110497_new
</sql>
<select id="selectSsztJbxx110497List" parameterType="SsztJbxx110497" resultMap="SsztJbxx110497Result">

11
lib/EmergencyServiceApi/emergencyAuthServiceApi/src/main/java/com/zdxt/auth/dto/DeptBean.java

@ -130,6 +130,17 @@ public class DeptBean extends BaseDomain {
private String zzDisplayPath;
/** 所属区 */
private String areaNode;
public String getAreaNode() {
return areaNode;
}
public void setAreaNode(String areaNode) {
this.areaNode = areaNode;
}
public String getZzDisplayPath() {
return zzDisplayPath;
}

41
lib/EmergencyServiceApi/emergencyAuthServiceApi/src/main/java/com/zdxt/auth/dto/UserBean.java

@ -127,10 +127,6 @@ public class UserBean implements Serializable {
private String password;
/** 部门id */
private String organizationId;
/** 用户ID */
@ -183,6 +179,43 @@ public class UserBean implements Serializable {
*/
private Integer userSource;
/**
* 金蝶原始组织结构id(既应急系统部门id)
*/
private String kingdeeOrgId;
/**
* 金蝶原始用户id
*/
private String kingdeeUserId;
/** 所属区 */
private String area;
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
public String getKingdeeOrgId() {
return kingdeeOrgId;
}
public void setKingdeeOrgId(String kingdeeOrgId) {
this.kingdeeOrgId = kingdeeOrgId;
}
public String getKingdeeUserId() {
return kingdeeUserId;
}
public void setKingdeeUserId(String kingdeeUserId) {
this.kingdeeUserId = kingdeeUserId;
}
public String getDeptName() {
return deptName;
}

4
lib/ZdxtComponent/pom.xml

@ -49,11 +49,11 @@
<version>1.0</version>
</dependency>
<!-- fastjson -->
<!-- fastjson:升级至 Fastjson2 最新版(1.x 兼容包) -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.9</version>
<version>2.0.64</version>
</dependency>
</dependencies>

308
org/crazycake/shiro/RedisCache.java

@ -0,0 +1,308 @@
package org.crazycake.shiro;
import org.apache.shiro.cache.Cache;
import org.apache.shiro.cache.CacheException;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.CollectionUtils;
import org.crazycake.shiro.exception.CacheManagerPrincipalIdNotAssignedException;
import org.crazycake.shiro.exception.PrincipalIdNullException;
import org.crazycake.shiro.exception.PrincipalInstanceException;
import org.crazycake.shiro.exception.SerializationException;
import org.crazycake.shiro.serializer.RedisSerializer;
import org.crazycake.shiro.serializer.StringSerializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.*;
/**
* Used for setting/getting authorization information from Redis
* @param <K>
* @param <V>
*/
public class RedisCache<K, V> implements Cache<K, V> {
private static Logger logger = LoggerFactory.getLogger(RedisCache.class);
private RedisSerializer keySerializer;
private RedisSerializer valueSerializer;
private IRedisManager redisManager;
private String keyPrefix = RedisCacheManager.DEFAULT_CACHE_KEY_PREFIX;
private int expire;
private String principalIdFieldName = RedisCacheManager.DEFAULT_PRINCIPAL_ID_FIELD_NAME;
/**
*
* @param redisManager redisManager
* @param keySerializer keySerializer
* @param valueSerializer valueSerializer
* @param prefix authorization prefix
* @param expire expire
* @param principalIdFieldName id field name of principal object
*/
public RedisCache(IRedisManager redisManager, RedisSerializer keySerializer, RedisSerializer valueSerializer, String prefix, int expire, String principalIdFieldName) {
if (redisManager == null) {
throw new IllegalArgumentException("redisManager cannot be null.");
}
this.redisManager = redisManager;
if (keySerializer == null) {
throw new IllegalArgumentException("keySerializer cannot be null.");
}
this.keySerializer = keySerializer;
if (valueSerializer == null) {
throw new IllegalArgumentException("valueSerializer cannot be null.");
}
this.valueSerializer = valueSerializer;
if (prefix != null && !"".equals(prefix)) {
this.keyPrefix = prefix;
}
this.expire = expire;
if (principalIdFieldName != null) {
this.principalIdFieldName = principalIdFieldName;
}
}
/**
* get shiro authorization redis key-value
* @param key key
* @return value
* @throws CacheException get cache exception
*/
@Override
public V get(K key) throws CacheException {
logger.debug("get key [" + key + "]");
if (key == null) {
return null;
}
try {
Object redisCacheKey = getRedisCacheKey(key);
byte[] rawValue = redisManager.get(keySerializer.serialize(redisCacheKey));
if (rawValue == null) {
return null;
}
V value = (V) valueSerializer.deserialize(rawValue);
return value;
} catch (SerializationException e) {
throw new CacheException(e);
}
}
@Override
public V put(K key, V value) throws CacheException {
if (key == null) {
logger.warn("Saving a null key is meaningless, return value directly without call Redis.");
return value;
}
try {
Object redisCacheKey = getRedisCacheKey(key);
logger.debug("put key [" + redisCacheKey + "]");
redisManager.set(keySerializer.serialize(redisCacheKey), value != null ? valueSerializer.serialize(value) : null, expire);
return value;
} catch (SerializationException e) {
throw new CacheException(e);
}
}
@Override
public V remove(K key) throws CacheException {
logger.debug("remove key [" + key + "]");
if (key == null) {
return null;
}
try {
Object redisCacheKey = getRedisCacheKey(key);
byte[] rawValue = redisManager.get(keySerializer.serialize(redisCacheKey));
V previous = (V) valueSerializer.deserialize(rawValue);
redisManager.del(keySerializer.serialize(redisCacheKey));
return previous;
} catch (SerializationException e) {
throw new CacheException(e);
}
}
/**
* get the full Redis key including prefix by Redis key
* @param key
* @return
*/
private Object getRedisCacheKey(K key) {
if (key == null) {
return null;
}
if (keySerializer instanceof StringSerializer) {
return this.keyPrefix + getStringRedisKey(key);
}
return key;
}
/**
* get Redis key (not including prefix)
* @param key
* @return
*/
private String getStringRedisKey(K key) {
String redisKey;
if (key instanceof PrincipalCollection) {
redisKey = getRedisKeyFromPrincipalIdField((PrincipalCollection) key);
} else {
redisKey = key.toString();
}
return redisKey;
}
/**
* get the Redis key (not including prefix) by PrincipalCollection
* @param key
* @return
*/
private String getRedisKeyFromPrincipalIdField(PrincipalCollection key) {
Object principalObject = key.getPrimaryPrincipal();
if (principalObject instanceof String) {
return principalObject.toString();
}
Method pincipalIdGetter = getPrincipalIdGetter(principalObject);
return getIdObj(principalObject, pincipalIdGetter);
}
private String getIdObj(Object principalObject, Method pincipalIdGetter) {
String redisKey;
try {
Object idObj = pincipalIdGetter.invoke(principalObject);
if (idObj == null) {
throw new PrincipalIdNullException(principalObject.getClass(), this.principalIdFieldName);
}
redisKey = idObj.toString();
} catch (IllegalAccessException e) {
throw new PrincipalInstanceException(principalObject.getClass(), this.principalIdFieldName, e);
} catch (InvocationTargetException e) {
throw new PrincipalInstanceException(principalObject.getClass(), this.principalIdFieldName, e);
}
return redisKey;
}
private Method getPrincipalIdGetter(Object principalObject) {
Method pincipalIdGetter = null;
String principalIdMethodName = this.getPrincipalIdMethodName();
try {
pincipalIdGetter = principalObject.getClass().getMethod(principalIdMethodName);
} catch (NoSuchMethodException e) {
throw new PrincipalInstanceException(principalObject.getClass(), this.principalIdFieldName);
}
return pincipalIdGetter;
}
private String getPrincipalIdMethodName() {
if (this.principalIdFieldName == null || "".equals(this.principalIdFieldName)) {
throw new CacheManagerPrincipalIdNotAssignedException();
}
return "get" + this.principalIdFieldName.substring(0, 1).toUpperCase() + this.principalIdFieldName.substring(1);
}
@Override
public void clear() throws CacheException {
logger.debug("clear cache");
Set<byte[]> keys = null;
try {
keys = redisManager.keys(keySerializer.serialize(this.keyPrefix + "*"));
} catch (SerializationException e) {
logger.error("get keys error", e);
}
if (keys == null || keys.size() == 0) {
return;
}
for (byte[] key: keys) {
redisManager.del(key);
}
}
/**
* get all authorization key-value quantity
* @return key-value size
*/
@Override
public int size() {
Long longSize = 0L;
try {
longSize = new Long(redisManager.dbSize(keySerializer.serialize(this.keyPrefix + "*")));
} catch (SerializationException e) {
logger.error("get keys error", e);
}
return longSize.intValue();
}
@SuppressWarnings("unchecked")
@Override
public Set<K> keys() {
Set<byte[]> keys = null;
try {
keys = redisManager.keys(keySerializer.serialize(this.keyPrefix + "*"));
} catch (SerializationException e) {
logger.error("get keys error", e);
return Collections.emptySet();
}
if (CollectionUtils.isEmpty(keys)) {
return Collections.emptySet();
}
Set<K> convertedKeys = new HashSet<K>();
for (byte[] key:keys) {
try {
convertedKeys.add((K) keySerializer.deserialize(key));
} catch (SerializationException e) {
logger.error("deserialize keys error", e);
}
}
return convertedKeys;
}
@Override
public Collection<V> values() {
Set<byte[]> keys = null;
try {
keys = redisManager.keys(keySerializer.serialize(this.keyPrefix + "*"));
} catch (SerializationException e) {
logger.error("get values error", e);
return Collections.emptySet();
}
if (CollectionUtils.isEmpty(keys)) {
return Collections.emptySet();
}
List<V> values = new ArrayList<V>(keys.size());
for (byte[] key : keys) {
V value = null;
try {
value = (V) valueSerializer.deserialize(redisManager.get(key));
} catch (SerializationException e) {
logger.error("deserialize values= error", e);
}
if (value != null) {
values.add(value);
}
}
return Collections.unmodifiableList(values);
}
public String getKeyPrefix() {
return keyPrefix;
}
public void setKeyPrefix(String keyPrefix) {
this.keyPrefix = keyPrefix;
}
public String getPrincipalIdFieldName() {
return principalIdFieldName;
}
public void setPrincipalIdFieldName(String principalIdFieldName) {
this.principalIdFieldName = principalIdFieldName;
}
}

99
org/crazycake/shiro/RedisCacheManager.java

@ -0,0 +1,99 @@
package org.crazycake.shiro;
import org.apache.shiro.cache.Cache;
import org.apache.shiro.cache.CacheException;
import org.apache.shiro.cache.CacheManager;
import org.crazycake.shiro.serializer.ObjectSerializer;
import org.crazycake.shiro.serializer.RedisSerializer;
import org.crazycake.shiro.serializer.StringSerializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
public class RedisCacheManager implements CacheManager {
private final Logger logger = LoggerFactory.getLogger(RedisCacheManager.class);
// fast lookup by name map
private final ConcurrentMap<String, Cache> caches = new ConcurrentHashMap<>();
private RedisSerializer keySerializer = new StringSerializer();
private RedisSerializer valueSerializer = new ObjectSerializer();
private IRedisManager redisManager;
// expire time in seconds
public static final int DEFAULT_EXPIRE = 1800;
private int expire = DEFAULT_EXPIRE;
/**
* The Redis key prefix for caches
*/
public static final String DEFAULT_CACHE_KEY_PREFIX = "shiro:cache:";
private String keyPrefix = DEFAULT_CACHE_KEY_PREFIX;
public static final String DEFAULT_PRINCIPAL_ID_FIELD_NAME = "id";
private String principalIdFieldName = DEFAULT_PRINCIPAL_ID_FIELD_NAME;
@Override
public <K, V> Cache<K, V> getCache(String name) throws CacheException {
logger.debug("get cache, name=" + name);
Cache<K, V> cache = caches.get(name);
if (cache == null) {
cache = new RedisCache<K, V>(redisManager, keySerializer, valueSerializer, keyPrefix + name + ":", expire, principalIdFieldName);
caches.put(name, cache);
}
return cache;
}
public IRedisManager getRedisManager() {
return redisManager;
}
public void setRedisManager(IRedisManager redisManager) {
this.redisManager = redisManager;
}
public String getKeyPrefix() {
return keyPrefix;
}
public void setKeyPrefix(String keyPrefix) {
this.keyPrefix = keyPrefix;
}
public RedisSerializer getKeySerializer() {
return keySerializer;
}
public void setKeySerializer(RedisSerializer keySerializer) {
this.keySerializer = keySerializer;
}
public RedisSerializer getValueSerializer() {
return valueSerializer;
}
public void setValueSerializer(RedisSerializer valueSerializer) {
this.valueSerializer = valueSerializer;
}
public int getExpire() {
return expire;
}
public void setExpire(int expire) {
this.expire = expire;
}
public String getPrincipalIdFieldName() {
return principalIdFieldName;
}
public void setPrincipalIdFieldName(String principalIdFieldName) {
this.principalIdFieldName = principalIdFieldName;
}
}
Loading…
Cancel
Save