SyncCarInfoHandler.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. package com.ydtech.modules.xxl.handler;
  2. import cn.hutool.core.util.IdcardUtil;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.xxl.job.core.handler.annotation.XxlJob;
  7. import com.ydtech.modules.order.entity.po.InsOrdersCarInfo;
  8. import com.ydtech.modules.order.entity.po.InsOrdersCarUserInfo;
  9. import com.ydtech.modules.order.service.InsOrdersCarInfoService;
  10. import com.ydtech.modules.order.service.InsOrdersCarUserInfoService;
  11. import com.ydtech.modules.ins.model.vo.KindInfoVo;
  12. import com.ydtech.modules.ins.model.vo.RiskInfoVo;
  13. import com.ydtech.modules.order.entity.InsOrders;
  14. import com.ydtech.modules.order.entity.InsOrdersOld;
  15. import com.ydtech.modules.order.entity.po.InsOrdersKind;
  16. import com.ydtech.modules.order.entity.po.InsOrdersRisk;
  17. import com.ydtech.modules.order.entity.po.InsOrdersTax;
  18. import com.ydtech.modules.order.service.*;
  19. import com.ydtech.utils.idgen.IdGenerate;
  20. import org.springframework.beans.BeanUtils;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.stereotype.Component;
  23. import java.text.SimpleDateFormat;
  24. import java.util.ArrayList;
  25. import java.util.Date;
  26. import java.util.List;
  27. import java.util.Objects;
  28. import java.util.stream.Collectors;
  29. /**
  30. *@author: tz
  31. *@description: 订单数据中的车辆信息 同步 sys_car_info表
  32. *@create: 2024年3月7日15:13:57
  33. */
  34. @Component
  35. public class SyncCarInfoHandler {
  36. @Autowired
  37. private InsOrdersService insOrdersService;
  38. @Autowired
  39. private InsOrdersCarUserInfoService insOrdersCarUserInfoService;
  40. @Autowired
  41. private InsOrdersCarInfoService insOrdersCarInfoService;
  42. @Autowired
  43. private InsOrdersRiskService insOrdersRiskService;
  44. @Autowired
  45. private InsOrdersKindService insOrdersKindService;
  46. @Autowired
  47. private InsOrdersOldService insOrdersOldService;
  48. @Autowired
  49. private InsOrdersTaxService insOrdersTaxService;
  50. public static String validateAndFormatDate(String inputDateStr) {
  51. try {
  52. // 尝试解析日期
  53. SimpleDateFormat sdfInput = new SimpleDateFormat("yyyy-MM-dd");
  54. sdfInput.setLenient(false); // 不宽松解析
  55. Date inputDate = sdfInput.parse(inputDateStr);
  56. // 格式化为所需的日期格式
  57. SimpleDateFormat sdfOutput = new SimpleDateFormat("yyyy-MM-dd");
  58. return sdfOutput.format(inputDate);
  59. } catch (Exception e) {
  60. return null; // 返回空字符串
  61. }
  62. }
  63. public static InsOrdersTax validateAndFormatTaxDate(JSONObject insOrdersTaxJson) {
  64. try {
  65. InsOrdersTax insOrdersTax = insOrdersTaxJson.toJavaObject(InsOrdersTax.class);
  66. return insOrdersTax;
  67. } catch (Exception e) {
  68. return null; // 返回空字符串
  69. }
  70. }
  71. //同步用户信息
  72. @XxlJob("SyncCarInfoHandler")
  73. public void SyncCarInfoHandler() {
  74. int current = 1;
  75. //全局存储 用户信息
  76. List<InsOrdersCarUserInfo> globalInsOrdersCarUserInfos = new ArrayList<>();
  77. while(true) {
  78. Page<InsOrdersOld> page = insOrdersOldService.page(new Page<>(current, 1000));
  79. if (page.getRecords().size() > 0) {
  80. List<InsOrdersOld> list = page.getRecords();
  81. List<InsOrders> insOrdersList = new ArrayList<>();
  82. //需要保存的车主用户数据
  83. List<InsOrdersCarUserInfo> insOrdersCarUserInfos = new ArrayList<>();
  84. List<InsOrdersCarInfo> insOrdersCarInfos = new ArrayList<>();
  85. List<InsOrdersRisk> insOrdersRisks = new ArrayList<>();
  86. List<InsOrdersKind> insOrdersKinds = new ArrayList<>();
  87. List<InsOrdersTax> insOrdersTaxes = new ArrayList<>();
  88. list.forEach(insOrdersOld -> {
  89. InsOrders insOrders = new InsOrders();
  90. BeanUtils.copyProperties(insOrdersOld, insOrders);
  91. JSONObject ownerInfo = insOrdersOld.getOwnerinfo();
  92. JSONObject applyinfo = insOrdersOld.getApplyinfo();
  93. JSONObject insureInfo = insOrdersOld.getInsureinfo();
  94. //车主信息是否存在
  95. if (globalInsOrdersCarUserInfos.stream().filter(x -> x.getIdentifyNumber().equals(ownerInfo.getString("identifyNumber"))).count() > 0) {
  96. List<InsOrdersCarUserInfo> identifyNumber = globalInsOrdersCarUserInfos.stream().filter(x -> x.getIdentifyNumber().equals(ownerInfo.getString("identifyNumber"))).collect(Collectors.toList());
  97. System.out.printf("identifyNumber" + identifyNumber);
  98. String id = identifyNumber.get(0).getId();
  99. insOrders.setOwnerId(id);
  100. insOrders.setInsureId(id);
  101. insOrders.setApplyId(id);
  102. } else {
  103. InsOrdersCarUserInfo insOrdersCarUserInfo1 = ownerInfo.toJavaObject(InsOrdersCarUserInfo.class);
  104. insOrdersCarUserInfo1.setId(IdGenerate.nextId());
  105. insOrdersCarUserInfos.add(insOrdersCarUserInfo1);
  106. globalInsOrdersCarUserInfos.add(insOrdersCarUserInfo1);
  107. insOrdersCarUserInfo1.setIdentifyValidDate(validateAndFormatDate(insOrdersCarUserInfo1.getIdentifyValidDate()));
  108. insOrdersCarUserInfo1.setIdentifyValidEndDate(validateAndFormatDate(insOrdersCarUserInfo1.getIdentifyValidEndDate()));
  109. insOrdersCarUserInfo1.setGender(String.valueOf(IdcardUtil.getGenderByIdCard(insOrdersCarUserInfo1.getIdentifyNumber())));
  110. insOrdersCarUserInfo1.setAge(String.valueOf(IdcardUtil.getAgeByIdCard(insOrdersCarUserInfo1.getIdentifyNumber())));
  111. insOrders.setOwnerId(insOrdersCarUserInfo1.getId());
  112. insOrders.setInsureId(insOrdersCarUserInfo1.getId());
  113. insOrders.setApplyId(insOrdersCarUserInfo1.getId());
  114. }
  115. //投保人是否同车主
  116. if (!applyinfo.getString("identifyNumber").equals(ownerInfo.getString("identifyNumber"))) {
  117. //查看全局 用户信息是否存在
  118. long count = globalInsOrdersCarUserInfos.stream().filter(x -> x.getIdentifyNumber().equals(applyinfo.getString("identifyNumber"))).count();
  119. if(count > 0) {
  120. List<InsOrdersCarUserInfo> identifyNumber = globalInsOrdersCarUserInfos.stream().filter(x -> x.getIdentifyNumber().equals(applyinfo.getString("identifyNumber"))).collect(Collectors.toList());
  121. System.out.printf("identifyNumber" + identifyNumber);
  122. insOrders.setApplyId(identifyNumber.get(0).getId());
  123. }else {
  124. InsOrdersCarUserInfo insOrdersCarUserInfo = applyinfo.toJavaObject(InsOrdersCarUserInfo.class);
  125. insOrdersCarUserInfo.setIdentifyValidDate(validateAndFormatDate(insOrdersCarUserInfo.getIdentifyValidDate()));
  126. insOrdersCarUserInfo.setIdentifyValidEndDate(validateAndFormatDate(insOrdersCarUserInfo.getIdentifyValidEndDate()));
  127. insOrdersCarUserInfo.setGender(String.valueOf(IdcardUtil.getGenderByIdCard(insOrdersCarUserInfo.getIdentifyNumber())));
  128. insOrdersCarUserInfo.setAge(String.valueOf(IdcardUtil.getAgeByIdCard(insOrdersCarUserInfo.getIdentifyNumber())));
  129. insOrdersCarUserInfo.setId(IdGenerate.nextId());
  130. insOrdersCarUserInfos.add(insOrdersCarUserInfo);
  131. globalInsOrdersCarUserInfos.add(insOrdersCarUserInfo);
  132. insOrders.setApplyId(insOrdersCarUserInfo.getId());
  133. }
  134. }
  135. //被保人是否同车主
  136. if (!applyinfo.getString("identifyNumber").equals(insureInfo.getString("identifyNumber")) &&
  137. !ownerInfo.getString("identifyNumber").equals(insureInfo.getString("identifyNumber"))) {
  138. //查看全局 用户信息是否存在
  139. long count = globalInsOrdersCarUserInfos.stream().filter(x -> x.getIdentifyNumber().equals(insureInfo.getString("identifyNumber"))).count();
  140. if(count > 0) {
  141. List<InsOrdersCarUserInfo> identifyNumber = globalInsOrdersCarUserInfos.stream().filter(x -> x.getIdentifyNumber().equals(insureInfo.getString("identifyNumber"))).collect(Collectors.toList());
  142. System.out.printf("identifyNumber" + identifyNumber);
  143. insOrders.setInsureId(identifyNumber.get(0).getId());
  144. }else {
  145. InsOrdersCarUserInfo insOrdersCarUserInfo = insureInfo.toJavaObject(InsOrdersCarUserInfo.class);
  146. insOrdersCarUserInfo.setIdentifyValidDate(validateAndFormatDate(insOrdersCarUserInfo.getIdentifyValidDate()));
  147. insOrdersCarUserInfo.setIdentifyValidEndDate(validateAndFormatDate(insOrdersCarUserInfo.getIdentifyValidEndDate()));
  148. insOrdersCarUserInfo.setGender(String.valueOf(IdcardUtil.getGenderByIdCard(insOrdersCarUserInfo.getIdentifyNumber())));
  149. insOrdersCarUserInfo.setAge(String.valueOf(IdcardUtil.getAgeByIdCard(insOrdersCarUserInfo.getIdentifyNumber())));
  150. insOrdersCarUserInfo.setId(IdGenerate.nextId());
  151. insOrdersCarUserInfos.add(insOrdersCarUserInfo);
  152. globalInsOrdersCarUserInfos.add(insOrdersCarUserInfo);
  153. insOrders.setInsureId(insOrdersCarUserInfo.getId());
  154. }
  155. }else if(applyinfo.getString("identifyNumber").equals(insureInfo.getString("identifyNumber"))){
  156. insOrders.setInsureId(insOrders.getApplyId());
  157. }else if(ownerInfo.getString("identifyNumber").equals(insureInfo.getString("identifyNumber"))){
  158. insOrders.setInsureId(insOrders.getOwnerId());
  159. }
  160. JSONObject carInfo = insOrdersOld.getCarinfo();
  161. //车辆信息
  162. if (insOrdersCarInfos.stream().filter(x -> x.getLicenseNo().equals(carInfo.getString("licenseNo"))).count() > 0) {
  163. List<InsOrdersCarInfo> collect = insOrdersCarInfos.stream().filter(x -> x.getLicenseNo().equals(carInfo.getString("licenseNo"))).collect(Collectors.toList());
  164. System.out.printf("licenseNo" + carInfo.getString("licenseNo"));
  165. String id = collect.get(0).getId();
  166. insOrders.setCarInfoId(id);
  167. } else {
  168. InsOrdersCarInfo insOrdersCarInfo = carInfo.toJavaObject(InsOrdersCarInfo.class);
  169. insOrdersCarInfo.setRegisterDate(validateAndFormatDate(insOrdersCarInfo.getRegisterDate()));
  170. insOrdersCarInfo.setIssueDate(validateAndFormatDate(insOrdersCarInfo.getIssueDate()));
  171. insOrdersCarInfo.setId(IdGenerate.nextId());
  172. insOrdersCarInfos.add(insOrdersCarInfo);
  173. insOrders.setCarInfoId(insOrdersCarInfo.getId());
  174. }
  175. //risk kind
  176. JSONArray risk = insOrdersOld.getRisk();
  177. JSONArray kind = insOrdersOld.getKing();
  178. for (int i = 0; i < risk.size(); i++) {
  179. JSONObject jsonObject = risk.getJSONObject(i);
  180. RiskInfoVo riskInfoVo = jsonObject.toJavaObject(RiskInfoVo.class);
  181. InsOrdersRisk insOrdersRisk = new InsOrdersRisk(riskInfoVo, insOrders.getOrderno());
  182. insOrdersRisks.add(insOrdersRisk);
  183. }
  184. for (int i = 0; i < kind.size(); i++) {
  185. JSONObject jsonObject = kind.getJSONObject(i);
  186. KindInfoVo javaObject = jsonObject.toJavaObject(KindInfoVo.class);
  187. InsOrdersKind insOrdersKind = new InsOrdersKind(javaObject, insOrders.getOrderno());
  188. insOrdersKinds.add(insOrdersKind);
  189. }
  190. if (insOrdersOld.getVehicleAndVesselTax() != null) {
  191. InsOrdersTax insOrdersTax = validateAndFormatTaxDate(insOrdersOld.getVehicleAndVesselTax());
  192. insOrdersTax.setOrderNo(insOrders.getOrderno());
  193. // InsOrdersTax insOrdersTax = insOrdersOld.getVehicleAndVesselTax().toJavaObject(InsOrdersTax.class);
  194. if (!Objects.isNull(insOrdersTax)) {
  195. insOrdersTaxes.add(insOrdersTax);
  196. }
  197. }
  198. insOrdersList.add(insOrders);
  199. });
  200. List<InsOrdersCarUserInfo> insOrdersCarUserInfoList = insOrdersCarUserInfos.stream()
  201. .collect(Collectors.toMap(
  202. InsOrdersCarUserInfo::getIdentifyNumber, // 使用 licenseNo 作为 key
  203. user -> user, // 直接使用用户信息作为 value
  204. (existing, replacement) -> existing // 若有重复的 licenseNo,则保留第一个出现的用户信息
  205. ))
  206. .values()
  207. .stream()
  208. .collect(Collectors.toList());
  209. insOrdersCarUserInfoService.saveBatch(insOrdersCarUserInfoList);
  210. List<InsOrdersCarInfo> insOrdersCarInfoList = insOrdersCarInfos.stream()
  211. .collect(Collectors.toMap(
  212. InsOrdersCarInfo::getLicenseNo, // 使用 licenseNo 作为 key
  213. user -> user, // 直接使用用户信息作为 value
  214. (existing, replacement) -> existing // 若有重复的 licenseNo,则保留第一个出现的用户信息
  215. ))
  216. .values()
  217. .stream()
  218. .collect(Collectors.toList());
  219. insOrdersCarInfoService.saveBatch(insOrdersCarInfoList);
  220. for (InsOrdersRisk insOrdersRisk : insOrdersRisks) {
  221. insOrdersRisk.setId(IdGenerate.nextId());
  222. insOrdersRisk.setStartDate(validateAndFormatDate(insOrdersRisk.getStartDate()));
  223. insOrdersRisk.setEndDate(validateAndFormatDate(insOrdersRisk.getEndDate()));
  224. }
  225. for (InsOrdersKind insOrdersKind : insOrdersKinds) {
  226. insOrdersKind.setId(IdGenerate.nextId());
  227. }
  228. insOrdersRiskService.saveBatch(insOrdersRisks);
  229. insOrdersKindService.saveBatch(insOrdersKinds);
  230. insOrdersTaxService.saveBatch(insOrdersTaxes);
  231. insOrdersService.saveOrUpdateBatch(insOrdersList);
  232. current++;
  233. }else{
  234. break;
  235. }
  236. }
  237. }
  238. }