From f67fdb14e6776548fd3cc95e1cdbe35b5b40c814 Mon Sep 17 00:00:00 2001
From: liaoxuwei <5789413@qq.com>
Date: Thu, 7 Mar 2024 17:39:23 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../com/mortals/xhx/common/utils/AESUtil.java | 241 ++++++++++++++++++
 .../daemon/task/SyncPortalUserTaskImpl.java   |  43 +++-
 .../module/apply/model/vo/MatterApplyVo.java  |   2 +
 .../apply/web/MatterApplyController.java      |  25 ++
 4 files changed, 310 insertions(+), 1 deletion(-)
 create mode 100644 single-matter/src/main/java/com/mortals/xhx/common/utils/AESUtil.java

diff --git a/single-matter/src/main/java/com/mortals/xhx/common/utils/AESUtil.java b/single-matter/src/main/java/com/mortals/xhx/common/utils/AESUtil.java
new file mode 100644
index 0000000..27b87cc
--- /dev/null
+++ b/single-matter/src/main/java/com/mortals/xhx/common/utils/AESUtil.java
@@ -0,0 +1,241 @@
+package com.mortals.xhx.common.utils;
+
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.Base64Utils;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+
+/**
+ * AES鍔犲瘑宸ュ叿绫�
+ *
+ */
+public class AESUtil {
+    /**
+     * 鏃ュ織鐩稿叧
+     */
+    private static final Logger LOGGER = LoggerFactory.getLogger(AESUtil.class);
+    /**
+     * 缂栫爜
+     */
+    private static final String ENCODING = "UTF-8";
+    /**
+     * 绠楁硶瀹氫箟
+     */
+    private static final String AES_ALGORITHM = "AES";
+    /**
+     * 鎸囧畾濉厖鏂瑰紡
+     */
+    private static final String CIPHER_PADDING = "AES/ECB/PKCS5Padding";
+    private static final String CIPHER_CBC_PADDING = "AES/CBC/PKCS5Padding";
+    /**
+     * 鍋忕Щ閲�(CBC涓娇鐢紝澧炲己鍔犲瘑绠楁硶寮哄害)
+     */
+    private static final String IV_SEED = "tdrdadq59tbss5n7";
+
+    /**
+     * AES鍔犲瘑
+     * @param content 寰呭姞瀵嗗唴瀹�
+     * @param aesKey  瀵嗙爜
+     * @return
+     */
+    public static String encrypt(String content, String aesKey){
+        if(StringUtils.isBlank(content)){
+            LOGGER.info("AES encrypt: the content is null!");
+            return null;
+        }
+        //鍒ゆ柇绉橀挜鏄惁涓�16浣�
+        if(StringUtils.isNotBlank(aesKey) && aesKey.length() == 16){
+            try {
+                //瀵瑰瘑鐮佽繘琛岀紪鐮�
+                byte[] bytes = aesKey.getBytes(ENCODING);
+                //璁剧疆鍔犲瘑绠楁硶锛岀敓鎴愮閽�
+                SecretKeySpec skeySpec = new SecretKeySpec(bytes, AES_ALGORITHM);
+                // "绠楁硶/妯″紡/琛ョ爜鏂瑰紡"
+                Cipher cipher = Cipher.getInstance(CIPHER_PADDING);
+                //閫夋嫨鍔犲瘑
+                cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
+                //鏍规嵁寰呭姞瀵嗗唴瀹圭敓鎴愬瓧鑺傛暟缁�
+                byte[] encrypted = cipher.doFinal(content.getBytes(ENCODING));
+                //杩斿洖base64瀛楃涓�
+                return Base64Utils.encodeToString(encrypted);
+            } catch (Exception e) {
+                LOGGER.info("AES encrypt exception:" + e.getMessage());
+                throw new RuntimeException(e);
+            }
+
+        }else {
+            LOGGER.info("AES encrypt: the aesKey is null or error!");
+            return null;
+        }
+    }
+
+    /**
+     * 瑙e瘑
+     *
+     * @param content 寰呰В瀵嗗唴瀹�
+     * @param aesKey  瀵嗙爜
+     * @return
+     */
+    public static String decrypt(String content, String aesKey){
+        if(StringUtils.isBlank(content)){
+            LOGGER.info("AES decrypt: the content is null!");
+            return null;
+        }
+        //鍒ゆ柇绉橀挜鏄惁涓�16浣�
+        if(StringUtils.isNotBlank(aesKey) && aesKey.length() == 16){
+            try {
+                //瀵瑰瘑鐮佽繘琛岀紪鐮�
+                byte[] bytes = aesKey.getBytes(ENCODING);
+                //璁剧疆瑙e瘑绠楁硶锛岀敓鎴愮閽�
+                SecretKeySpec skeySpec = new SecretKeySpec(bytes, AES_ALGORITHM);
+                // "绠楁硶/妯″紡/琛ョ爜鏂瑰紡"
+                Cipher cipher = Cipher.getInstance(CIPHER_PADDING);
+                //閫夋嫨瑙e瘑
+                cipher.init(Cipher.DECRYPT_MODE, skeySpec);
+
+                //鍏堣繘琛孊ase64瑙g爜
+                byte[] decodeBase64 = Base64Utils.decodeFromString(content);
+
+                //鏍规嵁寰呰В瀵嗗唴瀹硅繘琛岃В瀵�
+                byte[] decrypted = cipher.doFinal(decodeBase64);
+                //灏嗗瓧鑺傛暟缁勮浆鎴愬瓧绗︿覆
+                return new String(decrypted, ENCODING);
+            } catch (Exception e) {
+                LOGGER.info("AES decrypt exception:" + e.getMessage());
+                throw new RuntimeException(e);
+            }
+
+        }else {
+            LOGGER.info("AES decrypt: the aesKey is null or error!");
+            return null;
+        }
+    }
+
+    /**
+     * AES_CBC鍔犲瘑
+     *
+     * @param content 寰呭姞瀵嗗唴瀹�
+     * @param aesKey  瀵嗙爜
+     * @return
+     */
+    public static String encryptCBC(String content, String aesKey){
+        if(StringUtils.isBlank(content)){
+            LOGGER.info("AES_CBC encrypt: the content is null!");
+            return null;
+        }
+        //鍒ゆ柇绉橀挜鏄惁涓�16浣�
+        if(StringUtils.isNotBlank(aesKey) && aesKey.length() == 16){
+            try {
+                //瀵瑰瘑鐮佽繘琛岀紪鐮�
+                byte[] bytes = aesKey.getBytes(ENCODING);
+                //璁剧疆鍔犲瘑绠楁硶锛岀敓鎴愮閽�
+                SecretKeySpec skeySpec = new SecretKeySpec(bytes, AES_ALGORITHM);
+                // "绠楁硶/妯″紡/琛ョ爜鏂瑰紡"
+                Cipher cipher = Cipher.getInstance(CIPHER_CBC_PADDING);
+                //鍋忕Щ
+                IvParameterSpec iv = new IvParameterSpec(IV_SEED.getBytes(ENCODING));
+                //閫夋嫨鍔犲瘑
+                cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
+                //鏍规嵁寰呭姞瀵嗗唴瀹圭敓鎴愬瓧鑺傛暟缁�
+                byte[] encrypted = cipher.doFinal(content.getBytes(ENCODING));
+                //杩斿洖base64瀛楃涓�
+                return Base64Utils.encodeToString(encrypted);
+            } catch (Exception e) {
+                LOGGER.info("AES_CBC encrypt exception:" + e.getMessage());
+                throw new RuntimeException(e);
+            }
+
+        }else {
+            LOGGER.info("AES_CBC encrypt: the aesKey is null or error!");
+            return null;
+        }
+    }
+
+    /**
+     * AES_CBC瑙e瘑
+     *
+     * @param content 寰呰В瀵嗗唴瀹�
+     * @param aesKey  瀵嗙爜
+     * @return
+     */
+    public static String decryptCBC(String content, String aesKey){
+        if(StringUtils.isBlank(content)){
+            LOGGER.info("AES_CBC decrypt: the content is null!");
+            return null;
+        }
+        //鍒ゆ柇绉橀挜鏄惁涓�16浣�
+        if(StringUtils.isNotBlank(aesKey) && aesKey.length() == 16){
+            try {
+                //瀵瑰瘑鐮佽繘琛岀紪鐮�
+                byte[] bytes = aesKey.getBytes(ENCODING);
+                //璁剧疆瑙e瘑绠楁硶锛岀敓鎴愮閽�
+                SecretKeySpec skeySpec = new SecretKeySpec(bytes, AES_ALGORITHM);
+                //鍋忕Щ
+                IvParameterSpec iv = new IvParameterSpec(IV_SEED.getBytes(ENCODING));
+                // "绠楁硶/妯″紡/琛ョ爜鏂瑰紡"
+                Cipher cipher = Cipher.getInstance(CIPHER_CBC_PADDING);
+                //閫夋嫨瑙e瘑
+                cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
+
+                //鍏堣繘琛孊ase64瑙g爜
+                byte[] decodeBase64 = Base64Utils.decodeFromString(content);
+
+                //鏍规嵁寰呰В瀵嗗唴瀹硅繘琛岃В瀵�
+                byte[] decrypted = cipher.doFinal(decodeBase64);
+                //灏嗗瓧鑺傛暟缁勮浆鎴愬瓧绗︿覆
+                return new String(decrypted, ENCODING);
+            } catch (Exception e) {
+                LOGGER.info("AES_CBC decrypt exception:" + e.getMessage());
+                throw new RuntimeException(e);
+            }
+
+        }else {
+            LOGGER.info("AES_CBC decrypt: the aesKey is null or error!");
+            return null;
+        }
+    }
+
+    public static void main(String[] args) {
+        // AES鏀寔涓夌闀垮害鐨勫瘑閽ワ細128浣嶃€�192浣嶃€�256浣嶃€�
+        // 浠g爜涓繖绉嶅氨鏄�128浣嶇殑鍔犲瘑瀵嗛挜锛�16瀛楄妭 * 8浣�/瀛楄妭 = 128浣嶃€�
+        String random = "0000000671595991";
+//        System.out.println("闅忔満key:" + random);
+//        System.out.println();
+//
+//        System.out.println("---------鍔犲瘑---------");
+//        String aesResult = encrypt("511181198903042414", random);
+//        System.out.println("aes鍔犲瘑缁撴灉:" + aesResult);
+//        System.out.println();
+//
+//        System.out.println("---------瑙e瘑---------");
+//        String decrypt = decrypt(aesResult, random);
+//        System.out.println("aes瑙e瘑缁撴灉:" + decrypt);
+//        System.out.println();
+//
+//
+//        System.out.println("--------AES_CBC鍔犲瘑瑙e瘑---------");
+//        String cbcResult = encryptCBC("511181198903042414", random);
+//        System.out.println("aes_cbc鍔犲瘑缁撴灉:" + cbcResult);
+//        System.out.println();
+
+        System.out.println("---------瑙e瘑CBC---------");
+        String cbcDecrypt = decryptCBC("SWYgzz2KjYx+6TopctMpJQ==", random);
+        System.out.println("aes瑙e瘑缁撴灉:" + cbcDecrypt);
+        System.out.println();
+
+        System.out.println("---------瑙e瘑CBC---------");
+        String cbcDecrypt1 = decryptCBC("DXgGKRNryrPM/eeUQiN4wlfpYNUZ0XIwumXNHRFQGZM=", random);
+        System.out.println("aes瑙e瘑缁撴灉:" + cbcDecrypt1);
+        System.out.println();
+
+        System.out.println("---------瑙e瘑CBC---------");
+        String cbcDecrypt2 = decryptCBC("6yPbSSjvMeFuJ2ONqNmSyA==", random);
+        System.out.println("aes瑙e瘑缁撴灉:" + cbcDecrypt2);
+        System.out.println();
+    }
+}
+
diff --git a/single-matter/src/main/java/com/mortals/xhx/daemon/task/SyncPortalUserTaskImpl.java b/single-matter/src/main/java/com/mortals/xhx/daemon/task/SyncPortalUserTaskImpl.java
index b3df8e9..fb864d6 100644
--- a/single-matter/src/main/java/com/mortals/xhx/daemon/task/SyncPortalUserTaskImpl.java
+++ b/single-matter/src/main/java/com/mortals/xhx/daemon/task/SyncPortalUserTaskImpl.java
@@ -4,6 +4,7 @@ import com.mortals.framework.common.Rest;
 import com.mortals.framework.exception.AppException;
 import com.mortals.framework.service.ITask;
 import com.mortals.framework.service.ITaskExcuteService;
+import com.mortals.framework.util.StringUtils;
 import com.mortals.xhx.base.system.user.model.UserEntity;
 import com.mortals.xhx.base.system.user.model.UserQuery;
 import com.mortals.xhx.base.system.user.service.UserService;
@@ -11,6 +12,9 @@ import com.mortals.xhx.common.code.YesNoEnum;
 import com.mortals.xhx.common.pdu.RespData;
 import com.mortals.xhx.common.pdu.user.UserPdu;
 import com.mortals.xhx.feign.user.IUserFeign;
+import com.mortals.xhx.module.apply.model.ApproverEntity;
+import com.mortals.xhx.module.apply.model.ApproverQuery;
+import com.mortals.xhx.module.apply.service.ApproverService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -34,6 +38,8 @@ public class SyncPortalUserTaskImpl implements ITaskExcuteService {
 
     @Autowired
     private UserService userService;
+    @Autowired
+    private ApproverService approverService;
 
 
     @Override
@@ -70,7 +76,6 @@ public class SyncPortalUserTaskImpl implements ITaskExcuteService {
                 //闂ㄦ埛鐢ㄦ埛map
                 // Map<String, UserEntity> newUserMap = newUserList.stream().collect(Collectors.toMap(x -> x.getLoginName(), y -> y, (o, n) -> n));
 
-
                 List<UserEntity> saveUserList = newUserList.stream().map(item -> {
                     if (!oldUserMap.containsKey(item.getLoginName())) {
                         item.setCreateUserId(1L);
@@ -89,6 +94,42 @@ public class SyncPortalUserTaskImpl implements ITaskExcuteService {
                     });
                 }
 
+                List<ApproverEntity> newApproverList = userPduList.stream().map(newUser -> {
+                    ApproverEntity approverEntity = new ApproverEntity();
+                    approverEntity.initAttrValue();
+                    approverEntity.setFullName(newUser.getRealName());
+                    if(StringUtils.isNotEmpty(newUser.getPhone())) {
+                        approverEntity.setPhoneNumber(newUser.getMobile());
+                    }else {
+                        approverEntity.setPhoneNumber("13888888888");
+                    }
+                    approverEntity.setLoginName(newUser.getLoginName());
+                    approverEntity.setLoginPwd(newUser.getLoginPwd());
+                    return approverEntity;
+                }).collect(Collectors.toList());
+                List<ApproverEntity> oldApproverList = approverService.find(new ApproverQuery());
+                log.info(" oldApproverList size锛歿}", oldApproverList.size());
+                //褰撳墠鍗曚簨椤瑰鎵逛汉鍛�
+                Map<String, ApproverEntity> oldApproverMap = oldApproverList.parallelStream().collect(Collectors.toMap(x -> x.getLoginName(), y -> y, (o, n) -> n));
+                List<ApproverEntity> saveApproverList = newApproverList.stream().map(item -> {
+                    if (!oldApproverMap.containsKey(item.getLoginName())) {
+                        item.setCreateUserId(1L);
+                        item.setCreateUserName("绯荤粺绠$悊鍛�");
+                        item.setCreateTime(new Date());
+                        return item;
+                    }
+                    return null;
+                }).filter(f -> f != null).collect(Collectors.toList());
+
+
+                if (!ObjectUtils.isEmpty(saveApproverList)) {
+                    log.info("鍗曚簨椤瑰鎵逛汉鍛樻柊澧烇紝size:{}", saveApproverList.size());
+                    saveApproverList.stream().forEach(item -> {
+                        approverService.getDao().insert(item);
+                    });
+                }
+
+
             }
             //鏌ユ壘鏂板 涓庢洿鏂�
 
diff --git a/single-matter/src/main/java/com/mortals/xhx/module/apply/model/vo/MatterApplyVo.java b/single-matter/src/main/java/com/mortals/xhx/module/apply/model/vo/MatterApplyVo.java
index 1e11dc6..28b29fa 100644
--- a/single-matter/src/main/java/com/mortals/xhx/module/apply/model/vo/MatterApplyVo.java
+++ b/single-matter/src/main/java/com/mortals/xhx/module/apply/model/vo/MatterApplyVo.java
@@ -31,4 +31,6 @@ public class MatterApplyVo extends BaseEntityLong {
     private String applyTypeName;
 
     private List<MatterApplyDatumGroupVO> datumGroupList;
+    /** 鏁版嵁鏉ユ簮 1锛氬皬绋嬪簭锛�0鍏朵粬*/
+    private Integer source;
 }
\ No newline at end of file
diff --git a/single-matter/src/main/java/com/mortals/xhx/module/apply/web/MatterApplyController.java b/single-matter/src/main/java/com/mortals/xhx/module/apply/web/MatterApplyController.java
index 9e0d45c..ce30417 100644
--- a/single-matter/src/main/java/com/mortals/xhx/module/apply/web/MatterApplyController.java
+++ b/single-matter/src/main/java/com/mortals/xhx/module/apply/web/MatterApplyController.java
@@ -11,6 +11,7 @@ import com.mortals.framework.utils.BeanUtil;
 import com.mortals.framework.utils.ReflectUtils;
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
 import com.mortals.xhx.base.system.param.service.ParamService;
+import com.mortals.xhx.common.utils.AESUtil;
 import com.mortals.xhx.module.apply.model.MatterApplyDatumEntity;
 import com.mortals.xhx.module.apply.model.MatterApplyDatumQuery;
 import com.mortals.xhx.module.apply.service.MatterApplyDatumService;
@@ -85,6 +86,12 @@ public class MatterApplyController extends BaseCRUDJsonBodyMappingController<Mat
         int code;
         try {
             this.saveBefore(entity, model, context);
+            if(entity.getSource()!=null && entity.getSource()==1) {
+                String random = "0000000671595991";
+                entity.setApplyPerson(AESUtil.decryptCBC(entity.getApplyPerson(), random));
+                entity.setIdCard(AESUtil.decryptCBC(entity.getIdCard(), random));
+                entity.setPhoneNum(AESUtil.decryptCBC(entity.getPhoneNum(), random));
+            }
             if (entity.newEntity()) {
                 Class<MatterApplyEntity> tClass = ReflectUtils.getClassGenricType(this.getClass(), 1);
                 MatterApplyEntity initEntity = (MatterApplyEntity)tClass.newInstance();
@@ -193,6 +200,12 @@ public class MatterApplyController extends BaseCRUDJsonBodyMappingController<Mat
 
         int code;
         try {
+            if(entity.getSource()!=null && entity.getSource()==1) {
+                String random = "0000000671595991";
+                entity.setApplyPerson(AESUtil.decryptCBC(entity.getApplyPerson(), random));
+                entity.setIdCard(AESUtil.decryptCBC(entity.getIdCard(), random));
+                entity.setPhoneNum(AESUtil.decryptCBC(entity.getPhoneNum(), random));
+            }
             this.service.reApply(entity,context);
             model.put("id", entity.getId());
             code = this.saveAfter(entity, model, context);
@@ -257,6 +270,18 @@ public class MatterApplyController extends BaseCRUDJsonBodyMappingController<Mat
         int code;
         try {
             this.doListBefore(query, model, context);
+            if(query.getSource()!=null && query.getSource()==1) {
+                String random = "0000000671595991";
+                if(StringUtils.isNotEmpty(query.getApplyPerson())) {
+                    query.setApplyPerson(AESUtil.decryptCBC(query.getApplyPerson(), random));
+                }
+                if(StringUtils.isNotEmpty(query.getIdCard())) {
+                    query.setIdCard(AESUtil.decryptCBC(query.getIdCard(), random));
+                }
+                if(StringUtils.isNotEmpty(query.getPhoneNum())) {
+                    query.setPhoneNum(AESUtil.decryptCBC(query.getPhoneNum(), random));
+                }
+            }
             PageInfo pageInfo = this.buildPageInfo(query);
             Result<MatterApplyEntity> result = this.getService().find(query, pageInfo, context);
             this.doListAfter(query, result.getList(), context);
-- 
2.24.3