From 1618b864a7db55e541fa5b73022f305aae4cf1e1 Mon Sep 17 00:00:00 2001
From: ZQN <364596817@qq.com>
Date: 星期二, 25 三月 2025 17:39:30 +0800
Subject: [PATCH] 脱敏

---
 project-common/src/main/java/com/project/common/annotation/Sensitive.java                   |   25 ++++++++
 project-enforce/src/main/java/com/project/enforce/domain/vo/EnforceOrderVo.java             |   34 +++++++++++
 project-enforce/src/main/java/com/project/enforce/service/impl/EnforceOrderServiceImpl.java |   14 ++--
 project-common/src/main/java/com/project/common/utils/SensitiveUtil.java                    |  102 ++++++++++++++++++++++++++++++++++
 project-system/src/main/java/com/project/system/service/ISysCompanyService.java             |    2 
 5 files changed, 170 insertions(+), 7 deletions(-)

diff --git a/project-common/src/main/java/com/project/common/annotation/Sensitive.java b/project-common/src/main/java/com/project/common/annotation/Sensitive.java
new file mode 100644
index 0000000..c85fe2b
--- /dev/null
+++ b/project-common/src/main/java/com/project/common/annotation/Sensitive.java
@@ -0,0 +1,25 @@
+package com.project.common.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 鍔熻兘鎻忚堪锛�
+ *
+ * @author ZQN
+ * @version 1.0   2025-03-25 17:01
+ */
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Sensitive {
+    SensitiveType type() default SensitiveType.DEFAULT;
+
+    enum SensitiveType {
+        DEFAULT,
+        PHONE,
+        EMAIL,
+        ID_CARD
+    }
+}
diff --git a/project-common/src/main/java/com/project/common/utils/SensitiveUtil.java b/project-common/src/main/java/com/project/common/utils/SensitiveUtil.java
new file mode 100644
index 0000000..9d4f4bf
--- /dev/null
+++ b/project-common/src/main/java/com/project/common/utils/SensitiveUtil.java
@@ -0,0 +1,102 @@
+package com.project.common.utils;
+
+import com.project.common.annotation.Sensitive;
+
+import java.lang.reflect.Field;
+import java.util.regex.Pattern;
+
+/**
+ * 鍔熻兘鎻忚堪锛�
+ *
+ * @author ZQN
+ * @version 1.0   2025-03-25 17:04
+ */
+public class SensitiveUtil {
+
+    public static Object desensitize(Object obj) {
+        if (obj == null) {
+            return null;
+        }
+        Class<?> clazz = obj.getClass();
+        Field[] fields = clazz.getDeclaredFields();
+        for (Field field : fields) {
+            if (field.isAnnotationPresent(Sensitive.class)) {
+                Sensitive sensitive = field.getAnnotation(Sensitive.class);
+                field.setAccessible(true);
+                try {
+                    Object value = field.get(obj);
+                    if (value != null && value instanceof String) {
+                        String strValue = (String) value;
+                        String desensitizedValue = desensitizeByType(strValue, sensitive.type());
+                        field.set(obj, desensitizedValue);
+                    }
+                } catch (IllegalAccessException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return obj;
+    }
+
+    private static String desensitizeByType(String value, Sensitive.SensitiveType type) {
+        switch (type) {
+            case PHONE:
+                return desensitizePhone(value);
+            case EMAIL:
+                return desensitizeEmail(value);
+            case ID_CARD:
+                return desensitizeIdCard(value);
+            default:
+                return desensitizeDefault(value);
+        }
+    }
+
+    private static String desensitizeDefault(String value) {
+        if (value.length() <= 1) {
+            return value;
+        }
+        StringBuilder sb = new StringBuilder();
+        sb.append(value.charAt(0));
+        if (value.length() > 2) {
+            for (int i = 0; i < value.length() - 2; i++) {
+                sb.append("*");
+            }
+            sb.append(value.charAt(value.length() - 1));
+        } else {
+            sb.append("*");
+        }
+        return sb.toString();
+    }
+
+    private static String desensitizePhone(String phone) {
+        if (Pattern.matches("^\\d{11}$", phone)) {
+            return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
+        }
+        return phone;
+    }
+
+    private static String desensitizeEmail(String email) {
+        if (email.contains("@")) {
+            String[] parts = email.split("@");
+            String name = parts[0];
+            if (name.length() <= 1) {
+                return email;
+            }
+            StringBuilder sb = new StringBuilder();
+            sb.append(name.charAt(0));
+            for (int i = 0; i < name.length() - 2; i++) {
+                sb.append("*");
+            }
+            sb.append(name.charAt(name.length() - 1));
+            return sb.toString() + "@" + parts[1];
+        }
+        return email;
+    }
+
+    private static String desensitizeIdCard(String idCard) {
+        if (Pattern.matches("^\\d{18}$", idCard)) {
+            return idCard.replaceAll("(\\d{4})\\d{10}(\\d{4})", "$1**********$2");
+        }
+        return idCard;
+    }
+}
diff --git a/project-enforce/src/main/java/com/project/enforce/domain/vo/EnforceOrderVo.java b/project-enforce/src/main/java/com/project/enforce/domain/vo/EnforceOrderVo.java
index 19fd8cd..3604679 100644
--- a/project-enforce/src/main/java/com/project/enforce/domain/vo/EnforceOrderVo.java
+++ b/project-enforce/src/main/java/com/project/enforce/domain/vo/EnforceOrderVo.java
@@ -2,6 +2,7 @@
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.project.common.annotation.Excel;
+import com.project.common.annotation.Sensitive;
 import com.project.enforce.domain.EnforcePeer;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -29,27 +30,42 @@
 	@Excel(name = "鍗曟嵁缂栧彿")
 	@ApiModelProperty("鍗曟嵁缂栧彿")
 	private String orderNo;
+
 	@Excel(name = "浼佷笟id")
 	@ApiModelProperty("浼佷笟id")
 	private Long companyId;
+
+	@Sensitive(type = Sensitive.SensitiveType.DEFAULT)
 	@Excel(name = "浼佷笟鍚�")
 	@ApiModelProperty("浼佷笟鍚�")
 	private String companyName;
+
+	@Sensitive(type = Sensitive.SensitiveType.DEFAULT)
 	@Excel(name = "浼佷笟绀句細缂栫爜")
 	@ApiModelProperty("浼佷笟绀句細缂栫爜")
 	private String companyCode;
+
+	@Sensitive(type = Sensitive.SensitiveType.DEFAULT)
 	@Excel(name = "浼佷笟鑱旂郴浜�")
 	@ApiModelProperty("浼佷笟鑱旂郴浜�")
 	private String companyUser;
+
+	@Sensitive(type = Sensitive.SensitiveType.PHONE)
 	@Excel(name = "浼佷笟鑱旂郴浜虹數璇�" , readConverterExp = "璐�=鍙�")
 	@ApiModelProperty("浼佷笟鑱旂郴浜虹數璇濓紙璐﹀彿锛�")
 	private String companyPhone;
+
+	@Sensitive(type = Sensitive.SensitiveType.DEFAULT)
 	@Excel(name = "浼佷笟鍦板潃")
 	@ApiModelProperty("浼佷笟鍦板潃")
 	private String companyAddress;
+
+	@Sensitive(type = Sensitive.SensitiveType.DEFAULT)
 	@Excel(name = "鎵�灞炲尯鍩熺紪鐮�")
 	@ApiModelProperty("鎵�灞炲尯鍩熺紪鐮�")
 	private String regionCode;
+
+
 	@Excel(name = "鎵�灞炲尯鍩�")
 	@ApiModelProperty("鎵�灞炲尯鍩�")
 	private String regionName;
@@ -67,18 +83,28 @@
 	@Excel(name = "鐢宠浜篿d")
 	@ApiModelProperty("鐢宠浜篿d")
 	private Long applyId;
+
+
+
 	@Excel(name = "鐢宠浜�")
 	@ApiModelProperty("鐢宠浜�")
+	@Sensitive(type = Sensitive.SensitiveType.DEFAULT)
 	private String applyUser;
+
+	@Sensitive(type = Sensitive.SensitiveType.PHONE)
 	@Excel(name = "鐢宠浜虹數璇�")
 	@ApiModelProperty("鐢宠浜虹數璇�")
 	private String applyPhone;
+
 	@Excel(name = "鐢宠浜哄崟浣�")
 	@ApiModelProperty("鐢宠浜哄崟浣�")
 	private Long applyDeptId;
+
+	@Sensitive(type = Sensitive.SensitiveType.DEFAULT)
 	@Excel(name = "鐢宠浜哄崟浣�")
 	@ApiModelProperty("鐢宠浜哄崟浣�")
 	private String applyDeptName;
+
 	@Excel(name = "鐢宠鏃堕棿" , width = 30, dateFormat = "yyyy-MM-dd")
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	@ApiModelProperty("鐢宠鏃堕棿")
@@ -101,6 +127,7 @@
 	@Excel(name = "鎵ф硶闃熷憳浜烘暟")
 	@ApiModelProperty("鎵ф硶闃熷憳浜烘暟")
 	private Integer userNum;
+
 	@Excel(name = "棰勮鐘舵�侊細0姝e父锛�1棰勮")
 	@ApiModelProperty("棰勮鐘舵�侊細0姝e父锛�1棰勮")
 	private Integer warnStatus;
@@ -115,6 +142,7 @@
 	private Long checkDeptId;
 	@Excel(name = "瀹℃壒浜哄崟浣�")
 	@ApiModelProperty("瀹℃壒浜哄崟浣�")
+	@Sensitive(type = Sensitive.SensitiveType.DEFAULT)
 	private String checkDeptName;
 	@Excel(name = "璁㈠崟鐘舵�侊細-1鎷掔粷锛�0寰呭鎵癸紝1瀹℃壒涓紝2閫氳繃")
 	@ApiModelProperty("璁㈠崟鐘舵�侊細-1鎷掔粷锛�0寰呭鎵癸紝1瀹℃壒涓紝2閫氳繃")
@@ -132,17 +160,23 @@
 	@Excel(name = "鎵ц浜篿d")
 	@ApiModelProperty("鎵ц浜篿d")
 	private Long executeId;
+
 	@Excel(name = "鎵ц浜�")
 	@ApiModelProperty("鎵ц浜�")
+	@Sensitive(type = Sensitive.SensitiveType.DEFAULT)
 	private String executeUser;
+
 	@Excel(name = "鎵ц浜虹數璇�")
 	@ApiModelProperty("鎵ц浜虹數璇�")
+	@Sensitive(type = Sensitive.SensitiveType.PHONE)
 	private String executePhone;
+
 	@Excel(name = "鎵ц浜哄崟浣�")
 	@ApiModelProperty("鎵ц浜哄崟浣�")
 	private Long executeDeptId;
 	@Excel(name = "鎵ц浜哄崟浣�")
 	@ApiModelProperty("鎵ц浜哄崟浣�")
+	@Sensitive(type = Sensitive.SensitiveType.DEFAULT)
 	private String executeDeptName;
 	@Excel(name = "鎵ц鏃堕棿" , width = 30, dateFormat = "yyyy-MM-dd")
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
diff --git a/project-enforce/src/main/java/com/project/enforce/service/impl/EnforceOrderServiceImpl.java b/project-enforce/src/main/java/com/project/enforce/service/impl/EnforceOrderServiceImpl.java
index e9ee077..5202476 100644
--- a/project-enforce/src/main/java/com/project/enforce/service/impl/EnforceOrderServiceImpl.java
+++ b/project-enforce/src/main/java/com/project/enforce/service/impl/EnforceOrderServiceImpl.java
@@ -9,10 +9,7 @@
 import com.project.common.core.domain.model.DateRange;
 import com.project.common.enums.OrderPre;
 import com.project.common.exception.base.BaseException;
-import com.project.common.utils.DateUtils;
-import com.project.common.utils.JsonUtils;
-import com.project.common.utils.SecurityUtils;
-import com.project.common.utils.StringUtils;
+import com.project.common.utils.*;
 import com.project.enforce.domain.*;
 import com.project.enforce.domain.bo.editBo.EnforceComplaintLogBo;
 import com.project.enforce.domain.bo.editBo.EnforceOrderBo;
@@ -140,7 +137,9 @@
         QueryWrapper<EnforceOrder> qw = getQw(bo);
         qw.ge("order_status",2);
         List<EnforceOrder> list = this.list(qw);
-        return Convert.toList(EnforceOrderVo.class , list);
+        List<EnforceOrderVo> vos = Convert.toList(EnforceOrderVo.class, list);
+        vos.forEach(SensitiveUtil::desensitize);
+        return vos;
     }
 
     /**
@@ -215,7 +214,9 @@
                 .eq(EnforceOrder::getIsShow, 1)
                 .ge(EnforceOrder::getOrderStatus, 4)
         );
-        return Convert.toList(EnforceOrderVo.class, list);
+        List<EnforceOrderVo> vos = Convert.toList(EnforceOrderVo.class, list);
+        vos.forEach(SensitiveUtil::desensitize);
+        return vos;
     }
 
     /**
@@ -244,6 +245,7 @@
                 }
             }
         }
+        SensitiveUtil.desensitize(vo);
         return vo;
     }
 
diff --git a/project-system/src/main/java/com/project/system/service/ISysCompanyService.java b/project-system/src/main/java/com/project/system/service/ISysCompanyService.java
index 6fe72e6..77be725 100644
--- a/project-system/src/main/java/com/project/system/service/ISysCompanyService.java
+++ b/project-system/src/main/java/com/project/system/service/ISysCompanyService.java
@@ -20,7 +20,7 @@
     /**
 	 * 鏌ヨ鍒楄〃
 	 */
-    List<SysCompanyVo> queryList(SysCompanyQueryBo bo);
+	List<SysCompanyVo> queryList(SysCompanyQueryBo bo);
 
     /**
 	 * 鏌ヨ鍗曚釜

--
Gitblit v1.9.1