瀏覽代碼

完善差异比较的代码

lipf 1 月之前
父節點
當前提交
1d4051270e

+ 41 - 29
commons/src/main/java/com/jzg/commons/util/OrderComponents.java

@@ -9,65 +9,57 @@ public class OrderComponents {
     public static Map<String, String> fillKeyNameMap(){
 
         Map<String,String> nameMap = new HashMap<>();
-        nameMap.put("costRatio.jqExportRatio","交强出口比例");
-        nameMap.put("costRatio.jqFollowRatio","交强跟单比例");
-        nameMap.put("costRatio.jqInletRatio","交强入口比例");
-        nameMap.put("costRatio.jqKeepPointRatio","交强留点比例");
-
 
         nameMap.put("insFeeOrders.jqExportRatio","交强出口比例");
         nameMap.put("insFeeOrders.syExportRatio","商业出口比例");
         nameMap.put("insFeeOrders.jyExportRatio","驾意出口比例");
-
-        nameMap.put("costRatio.syExportRatio","商业出口比例");
-        nameMap.put("costRatio.syFollowRatio","商业跟单比例");
-        nameMap.put("costRatio.syInletRatio","商业入口比例");
-        nameMap.put("costRatio.syKeepPointRatio","商业留点比例");
-
-        nameMap.put("costRatio.jyExportRatio","驾意出口比例");
-        nameMap.put("costRatio.jyFollowRatio","驾意跟单比例");
-        nameMap.put("costRatio.jyInletRatio","驾意入口比例");
-        nameMap.put("costRatio.jyKeepPointRatio","驾意留点比例");
-
         nameMap.put("insFeeOrders.jqExportPremium","交强出口费用");
         nameMap.put("insFeeOrders.jqReceivablePremium","交强应收费用");
         nameMap.put("insFeeOrders.jqKeepPointPremium","交强留点费用");
         nameMap.put("insFeeOrders.jqFollowPremium","交强跟单费用");
         nameMap.put("insFeeOrders.jqPayablePremium","交强应付费用");
-
         nameMap.put("insFeeOrders.syExportPremium","商业出口费用");
         nameMap.put("insFeeOrders.syReceivablePremium","商业应收费用");
         nameMap.put("insFeeOrders.syKeepPointPremium","商业留点费用");
         nameMap.put("insFeeOrders.syFollowPremium","商业跟单费用");
         nameMap.put("insFeeOrders.syPayablePremium","商业应付费用");
-
         nameMap.put("insFeeOrders.jyExportPremium","驾意出口费用");
         nameMap.put("insFeeOrders.jyReceivablePremium","驾意应收费用");
         nameMap.put("insFeeOrders.jyKeepPointPremium","驾意留点费用");
         nameMap.put("insFeeOrders.jyFollowPremium","驾意跟单费用");
         nameMap.put("insFeeOrders.jyPayablePremium","驾意应付费用");
-
         nameMap.put("insFeeOrders.totalReceivablePremium","总应收费用");
         nameMap.put("insFeeOrders.totalPayablePremium","总应付费用");
         nameMap.put("insFeeOrders.totalExportPremium","总出口费用");
-
-        nameMap.put("costRatio.jqCommissionRatio","交强险手续费比例");
-        nameMap.put("costRatio.syCommissionRatio","商业险手续费比例");
-        nameMap.put("costRatio.jyCommissionRatio","驾意险手续费比例");
+        nameMap.put("insFeeOrders.syAdditionalPremium","商业险加投费费费用");
+        nameMap.put("insFeeOrders.jyAdditionalPremium","驾意险加投费费费用");
+        nameMap.put("insFeeOrders.jqAdditionalPremium","交强险加投费费费用");
+        nameMap.put("insFeeOrders.signTime","签单时间");
         nameMap.put("insFeeOrders.jqCommissionPremium","交强险手续费费用");
         nameMap.put("insFeeOrders.syCommissionPremium","商业险手续费费用");
         nameMap.put("insFeeOrders.jyCommissionPremium","驾意险手续费费用");
+        nameMap.put("insFeeOrders.agreementId","协议id");
+
 
+        nameMap.put("costRatio.jqCommissionRatio","交强险手续费比例");
+        nameMap.put("costRatio.syCommissionRatio","商业险手续费比例");
+        nameMap.put("costRatio.jyCommissionRatio","驾意险手续费比例");
         nameMap.put("costRatio.jyAdditionalRatio","驾意险加投比例");
         nameMap.put("costRatio.syAdditionalRatio","商业险加投比例");
         nameMap.put("costRatio.jqAdditionalRatio","交强险加投比例");
-        nameMap.put("insFeeOrders.syAdditionalPremium","商业险加投费费费用");
-        nameMap.put("insFeeOrders.jyAdditionalPremium","驾意险加投费费费用");
-        nameMap.put("insFeeOrders.jqAdditionalPremium","交强险加投费费费用");
+        nameMap.put("costRatio.syExportRatio","商业出口比例");
+        nameMap.put("costRatio.syFollowRatio","商业跟单比例");
+        nameMap.put("costRatio.syInletRatio","商业入口比例");
+        nameMap.put("costRatio.syKeepPointRatio","商业留点比例");
+        nameMap.put("costRatio.jyExportRatio","驾意出口比例");
+        nameMap.put("costRatio.jyFollowRatio","驾意跟单比例");
+        nameMap.put("costRatio.jyInletRatio","驾意入口比例");
+        nameMap.put("costRatio.jyKeepPointRatio","驾意留点比例");
+        nameMap.put("costRatio.jqExportRatio","交强出口比例");
+        nameMap.put("costRatio.jqFollowRatio","交强跟单比例");
+        nameMap.put("costRatio.jqInletRatio","交强入口比例");
+        nameMap.put("costRatio.jqKeepPointRatio","交强留点比例");
 
-        nameMap.put("insFeeOrders.signTime","签单时间");
-        nameMap.put("order.dockingPerson","对接人姓名");
-        nameMap.put("order.dockingPersonPhone","对接人手机号");
 
         nameMap.put("insCompanyVo[0].companyCode","保司编码");
         nameMap.put("insCompanyVo[0].nameSimple","保司简称");
@@ -76,11 +68,31 @@ public class OrderComponents {
         nameMap.put("insCompanyVo[0].name","保司全称");
         nameMap.put("insCompanyVo[0].logo","保司logo");
         nameMap.put("insCompanyVo[0].id","保司ID");
+
+        nameMap.put("order.dockingPerson","对接人姓名");
+        nameMap.put("order.dockingPersonPhone","对接人手机号");
         nameMap.put("order.companyName","保司名称");
         nameMap.put("order.insuranceCompanyCode","保司ID");
+        nameMap.put("order.agreementType","协议类型");
+        nameMap.put("order.agreementName","协议名称");
+        nameMap.put("order.agreementId","协议id");
+
+
         nameMap.put("isProblem","是否是疑问订单");
         nameMap.put("problemReason","疑问订单原因");
         nameMap.put("problemTime","设为疑问订单的时间");
+        nameMap.put("id","订单id");
+
+        nameMap.put("systemCode","租户代码");
+        nameMap.put("parentId","父订单id");
+        nameMap.put("quoteNo","报价订单号");
+        nameMap.put("agreementId","协议ID");
+        nameMap.put("schemeId","方案ID");
+        nameMap.put("apiType","请求类型");
+        nameMap.put("orderStatus","订单状态");
+        nameMap.put("companyOrderNo","保司订单单号");
+        nameMap.put("companyId","保司ID");
+
         return nameMap;
     }
 

+ 89 - 0
commons/src/main/java/com/jzg/commons/util/SchemaDescriptionParser.java

@@ -0,0 +1,89 @@
+package com.jzg.commons.util;
+
+import cn.hutool.core.collection.CollUtil;
+import com.jzg.commons.entity.quote.vo.aggregated.QuoteEchoVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.reflect.Field;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+public class SchemaDescriptionParser {
+
+    private static final Logger log = LoggerFactory.getLogger(SchemaDescriptionParser.class);
+    /**
+     * 用于存储解析结果的缓存 Map
+     * key: 字段名 (包括嵌套类的字段,格式为 "外层类名.内层类名.字段名")
+     * value: @Schema 的 description 值
+     */
+    private static final Map<String, String> SCHEMA_CACHE = new HashMap<>();
+
+    static {
+        try {
+            // 初始化:解析目标类及其所有嵌套类
+            parseClassHierarchy(QuoteEchoVo.class, null);
+
+            // 包装为不可变 Map,防止运行时被修改,提升安全性和性能
+            // 注意:如果只需要在内部使用,可以保持 HashMap;如果对外暴露,建议 unmodifiableMap
+        } catch (Exception e) {
+            log.error("初始化Schema 描述映射失败", e);
+            // 只初始化异常:记录错误但不中断程序启动
+        }
+    }
+
+    /**
+     * 递归解析类及其内部类
+     *
+     * @param clazz 当前要解析的类
+     * @param parentPrefix 父级类的前缀(用于区分嵌套类字段)
+     */
+    private static void parseClassHierarchy(Class<?> clazz, String parentPrefix) {
+        if (clazz == null || clazz.isPrimitive() || clazz.getName().startsWith("java.")) {
+            return;
+        }
+
+        // 获取当前类声明的所有字段(包括 private)
+        Field[] fields = clazz.getDeclaredFields();
+
+        for (Field field : fields) {
+            // 1. 处理嵌套类 (Static Inner Classes)
+            if (isStaticInnerClass(field.getType())) {
+                // 构建新的前缀,例如 "InsOrders.InnerClass"
+                String newPrefix = parentPrefix == null ? field.getType().getSimpleName() : parentPrefix + "." + field.getType().getSimpleName();
+                parseClassHierarchy(field.getType(), newPrefix);
+                continue;
+            }
+
+            // 2. 处理普通字段
+            Schema schema = field.getAnnotation(Schema.class);
+            if (schema != null && !schema.description().isEmpty()) {
+                String key = (parentPrefix == null ? "" : parentPrefix + ".") + field.getName();
+                SCHEMA_CACHE.put(key, schema.description());
+            }
+        }
+        log.info("SCHEMA_CACHE map初始化完成。 大小是[{}]", CollUtil.size(SCHEMA_CACHE));
+    }
+
+    /**
+     * 判断是否为静态内部类
+     */
+    private static boolean isStaticInnerClass(Class<?> type) {
+        return type.isMemberClass() && java.lang.reflect.Modifier.isStatic(type.getModifiers());
+    }
+
+    /**
+     * 获取解析后的 Map (只读)
+     */
+    public static Map<String, String> getSchemaMap() {
+        return Collections.unmodifiableMap(SCHEMA_CACHE);
+    }
+
+    // --- 测试主函数 ---
+    public static void main(String[] args) {
+        Map<String, String> result = SchemaDescriptionParser.getSchemaMap();
+        result.forEach((k, v) -> System.out.println(k + " = " + v));
+    }
+}

+ 3 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/OrderOperationLogAspect.java

@@ -18,7 +18,7 @@ import com.jzg.commons.entity.vo.AdjustAllRefundVo;
 import com.jzg.commons.entity.vo.PtlAgreementCostRatioVo;
 import com.jzg.commons.entity.vo.QuestionOrder;
 import com.jzg.commons.util.JsonDiffUtil;
-import com.jzg.commons.util.OrderComponents;
+import com.jzg.commons.util.SchemaDescriptionParser;
 import com.jzg.quotation.commons.constant.SpElMapping;
 import com.jzg.quotation.commons.utils.SpElFieldExtractor;
 import com.jzg.quotation.summary.aop.aspect.OrderOperationLog;
@@ -293,7 +293,8 @@ public class OrderOperationLogAspect {
         if(CollUtil.isNotEmpty(diffMap)){
             List<String> oldItems = new ArrayList<>();
             List<String> newItems = new ArrayList<>();
-            Map<String,String> keyMap = OrderComponents.fillKeyNameMap();
+            // Map<String,String> keyMap = OrderComponents.fillKeyNameMap();
+            Map<String,String> keyMap = SchemaDescriptionParser.getSchemaMap();
             diffMap.forEach((path, values) ->{
                         System.out.println("路径: " + path + " -> 值1: " + values.get(0) + " | 值2: " + values.get(1));
                         oldItems.add(keyMap.getOrDefault(path,path)  + ": " + values.get(0));

+ 3 - 2
tenant/organization/src/main/java/com/jzg/organization/aop/OrderOperationLogAspect.java

@@ -11,7 +11,7 @@ import com.jzg.commons.entity.orders.po.InsOrdersTrack;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteEchoVo;
 import com.jzg.commons.entity.vo.QuestionOrder;
 import com.jzg.commons.util.JsonDiffUtil;
-import com.jzg.commons.util.OrderComponents;
+import com.jzg.commons.util.SchemaDescriptionParser;
 import com.jzg.organization.client.InsOrdersClient;
 import com.jzg.quotation.summary.aop.aspect.OrderOperationLog;
 import org.aspectj.lang.ProceedingJoinPoint;
@@ -160,7 +160,8 @@ public class OrderOperationLogAspect {
             if(CollUtil.isNotEmpty(diffMap)){
                 List<String> oldItems = new ArrayList<>();
                 List<String> newItems = new ArrayList<>();
-                Map<String,String> keyMap = OrderComponents.fillKeyNameMap();
+                //Map<String,String> keyMap = OrderComponents.fillKeyNameMap();
+                Map<String,String> keyMap = SchemaDescriptionParser.getSchemaMap();
                 diffMap.forEach((path, values) ->{
                             System.out.println("路径: " + path + " -> 值1: " + values.get(0) + " | 值2: " + values.get(1));
                             oldItems.add(keyMap.getOrDefault(path,path)  + ": " + values.get(0));