NonAutoInsOrderReq.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. package com.ydtech.modules.ins.model.guoRen;
  2. import cn.hutool.core.date.DateUtil;
  3. import com.alibaba.fastjson.annotation.JSONField;
  4. import com.fasterxml.jackson.annotation.JsonIgnore;
  5. import com.ydtech.constants.enums.InsuranceRisk;
  6. import com.ydtech.modules.ins.model.vo.CarInfoVo;
  7. import com.ydtech.modules.ins.model.vo.CustomerInfoVo;
  8. import com.ydtech.modules.ins.model.vo.KindInfoVo;
  9. import com.ydtech.modules.ins.model.vo.RiskInfoVo;
  10. import com.ydtech.modules.ins.model.yc.ruote.Applicant;
  11. import com.ydtech.modules.ins.model.yc.ruote.Insured;
  12. import com.ydtech.modules.order.entity.InsAreaCompany;
  13. import com.ydtech.modules.order.entity.vo.AccidentalDrivingVo;
  14. import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
  15. import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
  16. import com.ydtech.utils.StringUtils;
  17. import lombok.Data;
  18. import lombok.NoArgsConstructor;
  19. import java.math.BigDecimal;
  20. import java.util.ArrayList;
  21. import java.util.Date;
  22. import java.util.List;
  23. import java.util.UUID;
  24. /**
  25. * 非车保险订单 入参
  26. */
  27. @NoArgsConstructor
  28. @Data
  29. public class NonAutoInsOrderReq {
  30. @JSONField(name = "channelCode")
  31. private String channelCode;
  32. @JSONField(name = "data")
  33. private DataDTO data;
  34. @JSONField(name = "othBusinessNo")
  35. private String othBusinessNo;
  36. @JSONField(name = "requestTime")
  37. private String requestTime;
  38. @NoArgsConstructor
  39. @Data
  40. public static class DataDTO {
  41. @JSONField(name = "orderList")
  42. private List<OrderListDTO> orderList;
  43. @NoArgsConstructor
  44. @Data
  45. public static class OrderListDTO {
  46. @JSONField(name = "insuredList")
  47. private List<InsuredListDTO> insuredList;
  48. @JSONField(name = "objCarList")
  49. private List<ObjCarListDTO> objCarList;
  50. @JSONField(name = "orderAppl")
  51. private OrderApplDTO orderAppl;
  52. @JSONField(name = "orderMain")
  53. private OrderMainDTO orderMain;
  54. @JSONField(name = "planList")
  55. private List<PlanListDTO> planList;
  56. @JSONField(name = "salesmanList")
  57. private List<SalesmanListDTO> salesmanList;
  58. @NoArgsConstructor
  59. @Data
  60. public static class OrderApplDTO {
  61. @JSONField(name = "applName")
  62. private String applName;
  63. @JSONField(name = "applType")
  64. private String applType;
  65. @JSONField(name = "certfNo")
  66. private String certfNo;
  67. @JSONField(name = "certfType")
  68. private String certfType;
  69. @JSONField(name = "contactName")
  70. private String contactName;
  71. @JSONField(name = "phoneNo")
  72. private String phoneNo;
  73. }
  74. @NoArgsConstructor
  75. @Data
  76. public static class OrderMainDTO {
  77. @JSONField(name = "amount")
  78. private Integer amount;
  79. @JSONField(name = "endDate")
  80. private String endDate;
  81. @JSONField(name = "goodsCode")
  82. private String goodsCode;
  83. @JSONField(name = "operatorCode")
  84. private String operatorCode;
  85. @JSONField(name = "othOrderNo")
  86. private String othOrderNo;
  87. @JSONField(name = "premium")
  88. private Integer premium;
  89. @JSONField(name = "prodCode")
  90. private String prodCode;
  91. @JSONField(name = "renewalInd")
  92. private Integer renewalInd;
  93. @JSONField(name = "riskCode")
  94. private List<String> riskCode;
  95. @JSONField(name = "startDate")
  96. private String startDate;
  97. @JSONField(name = "uwCount")
  98. private Integer uwCount;
  99. @JSONField(name = "businessMode")
  100. private String businessMode;
  101. @JSONField(name = "businessSource")
  102. private String businessSource;
  103. }
  104. @NoArgsConstructor
  105. @Data
  106. public static class InsuredListDTO {
  107. @JSONField(name = "certfNo")
  108. private String certfNo;
  109. @JSONField(name = "certfType")
  110. private String certfType;
  111. @JSONField(name = "countryName")
  112. private String countryName;
  113. @JSONField(name = "insuredName")
  114. private String insuredName;
  115. @JSONField(name = "insuredType")
  116. private String insuredType;
  117. @JSONField(name = "phoneNo")
  118. private String phoneNo;
  119. @JSONField(name = "planNo")
  120. private String planNo;
  121. }
  122. @NoArgsConstructor
  123. @Data
  124. public static class ObjCarListDTO {
  125. @JSONField(name = "carModels")
  126. private String carModels;
  127. @JSONField(name = "carType")
  128. private String carType;
  129. @JSONField(name = "carTypeCode")
  130. private String carTypeCode;
  131. @JSONField(name = "clnt")
  132. private String clnt;
  133. @JSONField(name = "frameNo")
  134. private String frameNo;
  135. @JSONField(name = "licenseNo")
  136. private String licenseNo;
  137. @JSONField(name = "planNo")
  138. private String planNo;
  139. @JSONField(name = "purchasePrice")
  140. private Integer purchasePrice;
  141. @JSONField(name = "seatNum")
  142. private Integer seatNum;
  143. @JSONField(name = "toncount")
  144. private Double toncount;
  145. }
  146. @NoArgsConstructor
  147. @Data
  148. public static class PlanListDTO {
  149. @JSONField(name = "occupationCode")
  150. private String occupationCode;
  151. @JSONField(name = "occupationGrade")
  152. private String occupationGrade;
  153. @JSONField(name = "occupationName")
  154. private String occupationName;
  155. @JSONField(name = "planNo")
  156. private String planNo;
  157. @JSONField(name = "quantity")
  158. private String quantity;
  159. @JSONField(name = "socialSecInd")
  160. private String socialSecInd;
  161. }
  162. @NoArgsConstructor
  163. @Data
  164. public static class SalesmanListDTO {
  165. @JSONField(name = "agentCode")
  166. private String agentCode;
  167. @JSONField(name = "companyCode")
  168. private String companyCode;
  169. @JSONField(name = "salesmanCode")
  170. private String salesmanCode;
  171. @JSONField(name = "salesmanFlag")
  172. private Integer salesmanFlag;
  173. @JSONField(name = "salesmanName")
  174. private String salesmanName;
  175. @JSONField(name = "serialNo")
  176. private Integer serialNo;
  177. @JSONField(name = "teamCode")
  178. private String teamCode;
  179. @JSONField(name = "teamName")
  180. private String teamName;
  181. }
  182. }
  183. }
  184. /**
  185. * 构造报价请求参数
  186. */
  187. @JsonIgnore
  188. public static NonAutoInsOrderReq buildParam(BaseQuoteInfoVo yaQuoteInfoVo, VinQueryResp.DataDTO vinQ, AccidentalDrivingVo accidentalDrivingVo, ChannelInfoDto channelInfo, String carPriceUuid) {
  189. //车辆信息
  190. CarInfoVo carInfo = yaQuoteInfoVo.getCarInfo();
  191. //投保人
  192. CustomerInfoVo policyHolder = yaQuoteInfoVo.getPolicyHolderInfo();
  193. //被保人
  194. CustomerInfoVo insuredPerson = yaQuoteInfoVo.getInsuredPersonInfo();
  195. List<RiskInfoVo> riskList = yaQuoteInfoVo.getRiskList();
  196. //交强
  197. RiskInfoVo ciRiskInfo = (RiskInfoVo) riskList.stream().filter(x -> x.getRiskCode().equals(InsuranceRisk.TRAFFIC.getCode())).findFirst().orElse(null);
  198. //商业
  199. RiskInfoVo biRiskInfo = (RiskInfoVo) riskList.stream().filter(x -> x.getRiskCode().equals(InsuranceRisk.BUSINESS.getCode())).findFirst().orElse(null);
  200. NonAutoInsOrderReq req = new NonAutoInsOrderReq();
  201. req.setChannelCode("TQDL");
  202. //外部订单号 订单号或者uuid 使用的车价查询返回的
  203. req.setOthBusinessNo(carPriceUuid);
  204. req.setRequestTime(DateUtil.today());
  205. List<DataDTO.OrderListDTO> orderList = new ArrayList();
  206. DataDTO.OrderListDTO orderListDto = new DataDTO.OrderListDTO();
  207. /**
  208. * 被保险人信息
  209. */
  210. List<DataDTO.OrderListDTO.InsuredListDTO> insuredList = new ArrayList<>();
  211. DataDTO.OrderListDTO.InsuredListDTO insuredListDTO = new DataDTO.OrderListDTO.InsuredListDTO();
  212. insuredListDTO.setCertfNo(insuredPerson.getIdentifyNumber());
  213. insuredListDTO.setCertfType("01");
  214. insuredListDTO.setCountryName("中国");
  215. insuredListDTO.setInsuredName(insuredPerson.getName());
  216. //客户类型 insuredType String Y 1-个人,2-企业
  217. insuredListDTO.setInsuredType("1");
  218. insuredListDTO.setPhoneNo(insuredPerson.getMobile());
  219. insuredListDTO.setPlanNo("1");
  220. insuredList.add(insuredListDTO);
  221. /**
  222. * 车辆信息
  223. */
  224. List<DataDTO.OrderListDTO.ObjCarListDTO> objCarList = new ArrayList<>();
  225. DataDTO.OrderListDTO.ObjCarListDTO objCarListDTO = new DataDTO.OrderListDTO.ObjCarListDTO();
  226. objCarListDTO.setCarModels(vinQ.getBrandNameBC());
  227. objCarListDTO.setCarType("0");
  228. //车辆性质
  229. objCarListDTO.setCarTypeCode("8A");
  230. //是否新车 1-是 2-否
  231. objCarListDTO.setClnt(StringUtils.isNotEmpty(carInfo.getLicenseNo()) ? "2" : "1");
  232. objCarListDTO.setFrameNo(carInfo.getFrameNo());
  233. objCarListDTO.setLicenseNo(carInfo.getLicenseNo());
  234. objCarListDTO.setPlanNo("1");
  235. objCarListDTO.setPurchasePrice(StringUtils.toInt(vinQ.getPriceShow()));
  236. objCarListDTO.setSeatNum(StringUtils.toInt(vinQ.getSeatCountBC()));
  237. objCarListDTO.setToncount(StringUtils.toDouble(vinQ.getTonCount()));
  238. objCarList.add(objCarListDTO);
  239. /**
  240. * 投保人信息
  241. */
  242. DataDTO.OrderListDTO.OrderApplDTO orderAppl = new DataDTO.OrderListDTO.OrderApplDTO();
  243. orderAppl.setApplName(policyHolder.getName());
  244. orderAppl.setApplType("1");
  245. orderAppl.setCertfNo(policyHolder.getIdentifyNumber());
  246. orderAppl.setCertfType("01");
  247. orderAppl.setContactName(policyHolder.getName());
  248. orderAppl.setPhoneNo(policyHolder.getMobile());
  249. /**
  250. * 订单信息
  251. */
  252. DataDTO.OrderListDTO.OrderMainDTO orderMain = new DataDTO.OrderListDTO.OrderMainDTO();
  253. //( 总保额 = 份数*人数(特殊产品默认人数为1)*每份保额)
  254. //@TODO 后续补
  255. BigDecimal orderAmount = BigDecimal.ONE;
  256. orderMain.setAmount(orderAmount.intValue());
  257. orderMain.setPremium(orderAmount.intValue());
  258. //yyyy-MM-dd hh:mm:ss搭售非车险保险起期规则:
  259. //(1)搭售车险是即时生效的,非车险起期为车险起期的第二天0时。
  260. //(2)搭售车险非即时生效的,非车险起期从车险保单起期。
  261. if (null != ciRiskInfo && null != biRiskInfo) {
  262. Date ciStartDate = DateUtil.parse(ciRiskInfo.getStartDate());
  263. Date biStartDate = DateUtil.parse(biRiskInfo.getStartDate());
  264. int ciBiCompare = DateUtil.compare(ciStartDate, biStartDate);
  265. //1、非即时生效
  266. if (StringUtils.isEmpty(ciRiskInfo.getInstantFlag()) && StringUtils.isEmpty(biRiskInfo.getInstantFlag())) {
  267. if (ciBiCompare == 1) {
  268. //(1)交强起期 > 商业起期,非车起期取商业起期
  269. orderMain.setStartDate(biRiskInfo.getStartDate());
  270. orderMain.setEndDate(biRiskInfo.getEndDate());
  271. } else if (ciBiCompare == -1) {
  272. //(2)交强起期 < 商业起期,非车起期取交强起期
  273. orderMain.setStartDate(ciRiskInfo.getStartDate());
  274. orderMain.setEndDate(ciRiskInfo.getEndDate());
  275. } else if (ciBiCompare == 0) {
  276. //(3)交强起期 = 商业起期,非车起期任取
  277. orderMain.setStartDate(ciRiskInfo.getStartDate());
  278. orderMain.setEndDate(ciRiskInfo.getEndDate());
  279. }
  280. } else {
  281. //2、即时生效
  282. //(1)交强即时起保起期 > 商业起期,非车起期取商业起期(不含小时数据的起期)+1天
  283. //(2)交强即时起保起期 > 商业即时起保起期,,非车起期取商业起期(不含小时数据的起期)+1天
  284. //(3)交强起期 < 商业即时起保起期,取交强起期,非车起期取交强起期(不含小时数据的起期)+1天
  285. //(4)交强即时起保起期 < 商业即时起保起期,取交强起期,非车起期取交强起期(不含小时数据的起期)+1天
  286. //(5)交强起期 = 商业起期,非车起保(不含小时数据的起期)+1天期任取
  287. }
  288. }
  289. //家用车驾乘意外险-山西版(02746425173001)
  290. orderMain.setGoodsCode("02746425173001");
  291. orderMain.setOperatorCode(channelInfo.getHandlerCode());
  292. //订单号或UUID 不确定参数,暂时使用车价的uuid
  293. orderMain.setOthOrderNo(carPriceUuid);
  294. orderMain.setProdCode(accidentalDrivingVo.getRideRiskCode());
  295. orderMain.setRenewalInd(StringUtils.isEmpty(carInfo.getLicenseNo()) ? 0 : 1);
  296. //险种代码 数组
  297. List<String> riskCodeList = new ArrayList<>();
  298. orderMain.setRiskCode(riskCodeList);
  299. orderMain.setUwCount(accidentalDrivingVo.getQuantity());
  300. //1:鼓励类 4:其他类 6:网销类
  301. orderMain.setBusinessMode("1");
  302. //0:直接业务
  303. //1:个人代理
  304. //2:专业代理
  305. //3:兼业代理
  306. //4:经纪业务—境内经纪
  307. //5:经纪业务—境外经纪
  308. //6:电销业务
  309. //7:柜台业务
  310. //8:网上业务 ......
  311. orderMain.setBusinessSource("2");
  312. orderListDto.setInsuredList(insuredList);
  313. /**
  314. * 方案信息
  315. */
  316. List<DataDTO.OrderListDTO.PlanListDTO> planList = new ArrayList<>();
  317. DataDTO.OrderListDTO.PlanListDTO planListDto = new DataDTO.OrderListDTO.PlanListDTO();
  318. //按照示例传的
  319. planListDto.setOccupationCode("0500020");
  320. planListDto.setOccupationGrade("1");
  321. planListDto.setOccupationName("其他");
  322. planListDto.setPlanNo("1");
  323. planListDto.setQuantity("1");
  324. planListDto.setSocialSecInd("01");
  325. planList.add(planListDto);
  326. /**
  327. * 业务员信息
  328. */
  329. List<DataDTO.OrderListDTO.SalesmanListDTO> salesmanList = new ArrayList<>();
  330. DataDTO.OrderListDTO.SalesmanListDTO salesmanListDTO = new DataDTO.OrderListDTO.SalesmanListDTO();
  331. salesmanListDTO.setAgentCode(channelInfo.getAgentCode());
  332. salesmanListDTO.setCompanyCode(channelInfo.getComCode());
  333. salesmanListDTO.setSalesmanCode(channelInfo.getHandlerCode());
  334. //0-辅合作方,1-主合作方(默认1-主合作方
  335. salesmanListDTO.setSalesmanFlag(1);
  336. salesmanListDTO.setSalesmanName(channelInfo.getHandlerName());
  337. salesmanListDTO.setSerialNo(1);
  338. salesmanListDTO.setTeamCode("");
  339. salesmanListDTO.setTeamName("");
  340. salesmanList.add(salesmanListDTO);
  341. orderListDto.setInsuredList(insuredList);
  342. orderListDto.setOrderAppl(orderAppl);
  343. orderListDto.setOrderMain(orderMain);
  344. orderListDto.setPlanList(planList);
  345. orderListDto.setSalesmanList(salesmanList);
  346. orderListDto.setObjCarList(objCarList);
  347. orderList.add(orderListDto);
  348. DataDTO data = new DataDTO();
  349. data.setOrderList(orderList);
  350. req.setData(data);
  351. return req;
  352. }
  353. }