Jelajahi Sumber

添加泰康 整理字段,记录页面对应的字段,临时代码

wlq 1 tahun lalu
induk
melakukan
dfeb95d01e

+ 1 - 1
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/client/AESDecryptor.java

@@ -47,7 +47,7 @@ public class AESDecryptor {
             // 返回解密后的字符串
             return new String(decrypted, StandardCharsets.UTF_8);
         } catch (Throwable throwable) {
-            logger.error("泰康解码异常:{}", throwable.toString(), throwable);
+            logger.error("泰康解码异常:{} , 被解码数据:{}", throwable.toString(), throwable, hexString);
 
             throw new RuntimeException(throwable);
         }

+ 7 - 0
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/client/HttpURL.java

@@ -9,6 +9,13 @@ public interface HttpURL {
     String initQuote = host + "/carSelfService/rest/init/quote";
 
     String basicInfo = host + "/carSelfService/rest/init/basicInfo";
+
+    /**
+     * 查看报价单
+     *
+     * 保费计算后使用
+     *
+     */
     String initQuotation = host + "/carSelfService/rest/init/quotation";
 
     String initProposal = host + "/carSelfService/rest/init/proposal";

+ 12 - 0
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/ee/CarPlanInfo.java

@@ -7,6 +7,14 @@ import lombok.Setter;
 
 import java.util.List;
 
+/**
+ *
+ * 车险计划列表
+ *
+ * 保费计算时,前面选择了些交强、商业的投保项目后,最后需要选一个“升级方案”,比如 “升级A-218”、 “升级B-298”、 “升级C-368”,选其中一个才能进行保费计算。
+ *
+ * 这个字段就是返回了 “升级A-218”、 “升级B-298”、 “升级C-368” 供业务人员选择。
+ */
 @Getter
 @Setter
 public class CarPlanInfo extends UnknownFieldEntity {
@@ -20,6 +28,10 @@ public class CarPlanInfo extends UnknownFieldEntity {
     private List<ItemKind> newEnergyItemKindList;
     /**
      * 计划代码
+     *
+     * 唯一键
+     *
+     * 业务人员选中其中一个方案,点击“保费计算”时,将此字段的值传到 {@link DriverAccidentVo#selectPlanCode}
      */
     private String planCode;
     /**

+ 54 - 17
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/ee/CiKindsVo.java

@@ -8,18 +8,30 @@ import lombok.Setter;
 import java.math.BigDecimal;
 import java.util.List;
 
+
+/**
+ * 商业险种列表
+ *
+ * 保费计算前,要选择投保商业险的险种(项目),比如“车辆损失保险”、“第三者责任保险”、“车上人员责任保险(司机)”、“车上人员责任保险(乘客)”、“	附加法定节假日限额翻倍险” 等。
+ */
 @Getter
 @Setter
 public class CiKindsVo extends UnknownFieldEntity {
 
     /**
-     * 是否不投保标志
-     * <p>
-     * 推测:表示某个保险种类是否选择不投保。
-     * <p>
-     * 如果 isNoInsureFlag 为 "1",则表示该保险种类选择不投保。
-     * <p>
-     * 如果 isNoInsureFlag 为 "0",则表示该保险种类选择投保。
+     * 险种(项目)代码,唯一键
+     */
+    private String kindCode;
+
+    /**
+     * 险种(项目)的中文名称
+     */
+    private String kindCName;
+
+    /**
+     * 是否为不推荐投保险类别
+     *
+     * 为 "1",则表示不推荐,为 "0",表示推荐。
      */
     private String isNoInsureFlag;
 
@@ -60,36 +72,46 @@ public class CiKindsVo extends UnknownFieldEntity {
 
     /**
      * 是否选择
+     *
+     * 选择了险种(项目)时为 1,不选择时为 0
      */
     private String isSelect;
 
-    /**
-     * 种类中文名称
-     */
-    private String kindCName;
-
-    /**
-     * 种类代码
-     */
-    private String kindCode;
-
     /**
      * 保费
+     *
+     * 险种(项目)的价格
      */
     private BigDecimal premium;
 
     /**
      * 数量
+     *
+     * 如果  {@link #amounts} 中 {@link Amount#amountShowName} 为 “1万元/座*4座” 的格式,
+     * quantity 为 4 表示座位数量 ,同时 {@link Amount#amountEname} 为 “10000”,同时 {@link Amount#amountCname} 为 “1万”,
+     *
+     * 否则为 “0”
      */
     private Integer quantity;
 
     /**
      * 报价金额
+     *
+     * 1. 此字段的值可能应该来自  {@link #amounts} 中 {@link Amount#amountEname} 的值。
+     * 2. 如果  {@link #amounts} 中 {@link Amount#amountShowName} 为 “1万元/座*4座” 的格式,
+     * quoteAmount 则为  {@link Amount#amountEname} 乘以 quantity 的总金额。
+     * 或 quoteAmount 则为  unitAmount 乘以 quantity 的总金额。
+     *
      */
     private BigDecimal quoteAmount;
 
     /**
      * 报价金额中文
+     *
+     * 选择了险种(项目)时,也就是 isSelect 为 1时, 为中文的 quoteAmount,比如 quoteAmount 为 10000 时,quoteAmountCN 为 1万。
+     * 不选择时,也就是 isSelect 为 0时, quoteAmountCN为 “不投保”。
+     *
+     * 此字段的值可能应该来自  {@link #amounts} 中 {@link Amount#amountCname} 的值。
      */
     private String quoteAmountCN;
 
@@ -105,16 +127,31 @@ public class CiKindsVo extends UnknownFieldEntity {
 
     /**
      * 单位金额
+     *
+     * 如果  {@link #amounts} 中 {@link Amount#amountShowName} 为 “1万元/座*4座” 的格式,unitAmount 则为  {@link Amount#amountEname}。
+     * 否则为 “0.0”
+     *
      */
     private BigDecimal unitAmount;
 
     /**
      * 单位金额中文
+     *
+     * 如果  {@link #amounts} 中 {@link Amount#amountShowName} 为 “1万元/座*4座” 的格式,unitAmount 则为  {@link Amount#amountCname}。
+     * 否则为 “0”
      */
     private String unitAmountCN;
 
     /**
      * 上级种类代码
+     *
+     * 当与 {@link #kindCode} 一样时,说明是大险种,目前有4个:
+     * 1. 车辆损失保险
+     * 2. 第三者责任保险
+     * 3. 车上人员责任保险(司机)
+     * 4. 车上人员责任保险(乘客)
+     *
+     * 多值,以逗号分隔。
      */
     private String upKindCode;
 

+ 26 - 2
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/ee/DriverAccidentVo.java

@@ -9,6 +9,9 @@ import lombok.Setter;
 import java.math.BigDecimal;
 import java.util.List;
 
+/**
+ * 投保驾乘意外险
+ */
 @Getter
 @Setter
 public class DriverAccidentVo extends UnknownFieldEntity {
@@ -16,8 +19,13 @@ public class DriverAccidentVo extends UnknownFieldEntity {
      * 提案号
      */
     private String proposalNo;
+
     /**
      * 车险计划列表
+     *
+     * 保费计算时,前面选择了些交强、商业的投保项目后,最后需要选一个“升级方案”,比如 “升级A-218”、 “升级B-298”、 “升级C-368”,选其中一个才能进行保费计算。
+     *
+     * 这个字段就是返回了 “升级A-218”、 “升级B-298”、 “升级C-368” 供业务人员选择。
      */
     private List<CarPlanInfo> carPlanInfoList;
     /**
@@ -30,34 +38,47 @@ public class DriverAccidentVo extends UnknownFieldEntity {
     private Boolean highGuestFlag;
     /**
      * 是否选择
+     *
+     * 如果选择了投保驾意险则为1,否则为0
      */
     private String isSelect;
     /**
      * 险种中文名称
+     *
+     * 驾意险
      */
     private String kindCName;
     /**
      * 险种代码
+     *
+     * CAI
      */
     private String kindCode;
     /**
-     * 非车险结束日期
+     * 保险期限 结束时间,24:00结束
      */
     private String nonCarEndDate;
     /**
-     * 非车险开始日期
+     * 保险期限 开始时间,0分0秒开始
      */
     private String nonCarStartDate;
     /**
      * 保费
+     *
+     *
      */
     private BigDecimal premium;
     /**
      * 数量
+     *
+     * 如果选择了投保驾意险则为1,否则为0
      */
     private Integer quantity;
     /**
      * 数量中文名称
+     *
+     *
+     * 如果选择了投保驾意险则为“1份”,否则为“不投保”
      */
     private String quantityCname;
     /**
@@ -66,11 +87,14 @@ public class DriverAccidentVo extends UnknownFieldEntity {
     private List<Quantity> quantityList;
     /**
      * 选择的计划代码
+     *
+     * 业务人员选择 “升级A-218”、 “升级B-298”、 “升级C-368” 其中一方案的唯一健值。
      */
     private String selectPlanCode;
 
     /**
      * 报价金额中文
+     *
      */
     private String quoteAmountCN;
 

+ 3 - 0
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/ee/Premium.java

@@ -7,6 +7,9 @@ import lombok.Setter;
 
 import java.math.BigDecimal;
 
+/**
+ * 执行了“保费计算”操作后,算出来的保费
+ */
 @Getter
 @Setter
 public class Premium extends UnknownFieldEntity {

+ 2 - 0
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/entity/InitQuotationResult.java

@@ -46,6 +46,8 @@ public class InitQuotationResult extends UnknownFieldEntity {
 
     /**
      * 保费信息
+     *
+     * 执行了“保费计算”操作后,算出来的保费
      */
     private Premium premium;
 

+ 2 - 0
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/entity/PreciseInitParam.java

@@ -65,6 +65,8 @@ public class PreciseInitParam extends UnknownFieldEntity {
 
     /**
      * 商业险种列表
+     *
+     * 保费计算前,要选择投保商业险的项目,比如“车辆损失保险”、“第三者责任保险”、“车上人员责任保险(司机)”、“车上人员责任保险(乘客)”、“	附加法定节假日限额翻倍险” 等。
      */
     private List<CiKindsVo> ciKindsVo;
 

+ 5 - 3
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/entity/PreciseInitResult.java

@@ -33,7 +33,8 @@ public class PreciseInitResult extends UnknownFieldEntity {
      */
     private BigDecimal ciDisCount;
     /**
-     * 商业险种类列表
+     * 投保商业险
+     *
      * 商业保险种类信息列表
      */
     private List<CiKindsVo> ciKindsVo;
@@ -53,8 +54,9 @@ public class PreciseInitResult extends UnknownFieldEntity {
      */
     private DateInfo date;
     /**
-     * 驾意险信息
-     * 驾驶员事故信息
+     * 投保驾乘意外险
+     *
+     * 比如:升级-C¥368、升级-B¥298、升级-A¥218
      */
     private DriverAccidentVo driverAccidentVo;
     /**

+ 11 - 32
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/service/TaiKangHttpService.java

@@ -21,6 +21,7 @@ public class TaiKangHttpService {
     private TaiKangHttpClient client;
 
     private String token;
+    private String tokenTest = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZXFNYXAiOiJ7XCJjYXJSZXF1ZXN0SWRcIjpcIlRPS0UyMDI1MDMxMTA5MzY0MzI0NTAwMDBcIn0iLCJpc3MiOiJ0ay5jbiIsImV4cCI6MTc0MTc0MzQwM30.rXChMg_TtHTv5XZs2_6JtHpHZ7N_E3JeCtrhRolSwbQ";
 
     /**
      * {@link #checkResponseUnknownField(UnknownFieldEntity)} 接口对数据校验,发现实体上缺少 json 的一些字段时,抛出异常。
@@ -31,6 +32,8 @@ public class TaiKangHttpService {
     private String token() {
         if (token != null) {
             return token;
+        } if (tokenTest != null) {
+            return tokenTest;
         }
 
         throw new RuntimeException("token 为 null,请先登录!");
@@ -547,31 +550,19 @@ public class TaiKangHttpService {
         InitQuotationParam param = new InitQuotationParam();
         param.setChannelCode("OffWeb");
         param.setOrderID(orderId);
+        // 注意:查看报价单时的 initFlag 参数为 1
         param.setInitFlag("1");
 
         HttpHeaders httpHeaders = new HttpHeaders();
         httpHeaders.add("tkCarRequestToken", token());
 
-        StringResponse response = client.request(HttpURL.initQuotation, param, httpHeaders, StringResponse.class);
+        InitQuotationResult.Response response = client.request(HttpURL.initQuotation, param, httpHeaders, InitQuotationResult.Response.class);
 
-        checkResponseUnknownField(response);
-
-        // 解密
-        String json = AESDecryptor.decrypt(response.getData());
-
-        if (logger.isInfoEnabled()) {
-            logger.info("TaiKangHttpClient initQuotation decrypt body: {}", json);
-        }
-
-        InitQuotationResult.Response response1 = JsonUtil.readObjcet(json, InitQuotationResult.Response.class);
-
-        checkResponseUnknownField(response1);
-
-        return response1.getData();
+        return response.getData();
     }
 
     /**
-     *
+     * 保费计算
      *
      * @return
      */
@@ -579,27 +570,15 @@ public class TaiKangHttpService {
         InitQuotationParam param = new InitQuotationParam();
         param.setChannelCode("OffWeb");
         param.setOrderID(orderId);
-        param.setInitFlag("1");
+        // 注意:发起“保费计算” initFlag 参数为 quote
+        param.setInitFlag("quote");
 
         HttpHeaders httpHeaders = new HttpHeaders();
         httpHeaders.add("tkCarRequestToken", token());
 
-        StringResponse response = client.request(HttpURL.initQuotation, param, httpHeaders, StringResponse.class);
-
-        checkResponseUnknownField(response);
-
-        // 解密
-        String json = AESDecryptor.decrypt(response.getData());
+        InitQuotationResult.Response response = client.request(HttpURL.initQuotation, param, httpHeaders, InitQuotationResult.Response.class);
 
-        if (logger.isInfoEnabled()) {
-            logger.info("TaiKangHttpClient initQuotation decrypt body: {}", json);
-        }
-
-        InitQuotationResult.Response response1 = JsonUtil.readObjcet(json, InitQuotationResult.Response.class);
-
-        checkResponseUnknownField(response1);
-
-        return response1.getData();
+        return response.getData();
     }
 
     /**

File diff ditekan karena terlalu besar
+ 0 - 0
tenant/insurance/quotation-taikang/src/test/java/com/jzg/quotation/taikang/AESDecryptorTest.java


+ 30 - 5
tenant/insurance/quotation-taikang/src/test/java/com/jzg/quotation/taikang/service/TaiKangHttpServiceTest1.java

@@ -931,22 +931,22 @@ public class TaiKangHttpServiceTest1 {
     @Order(15)
     public void initQuotationFlag1() {
         // feda77e829d4dedbbd8b4e236bacfac5
-        String tplatformId = TaiKangHttpServiceTest1.loginResult.getTplatformId();
+        //String tplatformId = TaiKangHttpServiceTest1.loginResult.getTplatformId();
 
         // 0114
-        String comCode = TaiKangHttpServiceTest1.loginResult.getWebsysUserVo().getWebsysUserAreaVos().get(0).getAreacode();
+        //String comCode = TaiKangHttpServiceTest1.loginResult.getWebsysUserVo().getWebsysUserAreaVos().get(0).getAreacode();
 
         // 1e6cbb3bf08e8cb8f8c684cff0ee5e161
-        String tplatLoginKey = TaiKangHttpServiceTest1.loginResult.getTplatLoginKey();
+        //String tplatLoginKey = TaiKangHttpServiceTest1.loginResult.getTplatLoginKey();
 
         // 67107
-        String fromid = TaiKangHttpServiceTest1.loginResult.getWebsysUserVo().getFromid();
+        //String fromid = TaiKangHttpServiceTest1.loginResult.getWebsysUserVo().getFromid();
 
 
 
 
 
-        InitQuotationResult result = taiKangHttpService.initQuotationFlag1(tplatformId, "WBPC202503071419220680000");
+        InitQuotationResult result = taiKangHttpService.initQuotationFlag1(null, "WBPC202503110940103410000");
 
         assertNotNull(result);
 
@@ -1167,4 +1167,29 @@ public class TaiKangHttpServiceTest1 {
         System.out.println(JSON.toJSONString(result));
     }
 
+    @Test
+    @Order(21)
+    public void entranceForDecrypt() {
+        // feda77e829d4dedbbd8b4e236bacfac5
+        //String tplatformId = TaiKangHttpServiceTest1.loginResult.getTplatformId();
+
+        // 0114
+        //String comCode = TaiKangHttpServiceTest1.loginResult.getWebsysUserVo().getWebsysUserAreaVos().get(0).getAreacode();
+
+        // 1e6cbb3bf08e8cb8f8c684cff0ee5e161
+        //String tplatLoginKey = TaiKangHttpServiceTest1.loginResult.getTplatLoginKey();
+
+        // 67107
+        //String fromid = TaiKangHttpServiceTest1.loginResult.getWebsysUserVo().getFromid();
+
+        EngageEngageQueryParam.Privy privy = new EngageEngageQueryParam.Privy();
+
+        EntranceResult result = taiKangHttpService.entranceForDecrypt(null, "67107", "WBPC202503071419220680000");
+
+        assertNotNull(result);
+
+        System.out.println();
+        System.out.println(JSON.toJSONString(result));
+    }
+
 }

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini