| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- package com.ydtech.modules.xxl.handler;
- import cn.hutool.core.util.IdcardUtil;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.xxl.job.core.handler.annotation.XxlJob;
- import com.ydtech.modules.order.entity.po.InsOrdersCarInfo;
- import com.ydtech.modules.order.entity.po.InsOrdersCarUserInfo;
- import com.ydtech.modules.order.service.InsOrdersCarInfoService;
- import com.ydtech.modules.order.service.InsOrdersCarUserInfoService;
- import com.ydtech.modules.ins.model.vo.KindInfoVo;
- import com.ydtech.modules.ins.model.vo.RiskInfoVo;
- import com.ydtech.modules.order.entity.InsOrders;
- import com.ydtech.modules.order.entity.InsOrdersOld;
- import com.ydtech.modules.order.entity.po.InsOrdersKind;
- import com.ydtech.modules.order.entity.po.InsOrdersRisk;
- import com.ydtech.modules.order.entity.po.InsOrdersTax;
- import com.ydtech.modules.order.service.*;
- import com.ydtech.utils.idgen.IdGenerate;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import java.util.Objects;
- import java.util.stream.Collectors;
- /**
- *@author: tz
- *@description: 订单数据中的车辆信息 同步 sys_car_info表
- *@create: 2024年3月7日15:13:57
- */
- @Component
- public class SyncCarInfoHandler {
- @Autowired
- private InsOrdersService insOrdersService;
- @Autowired
- private InsOrdersCarUserInfoService insOrdersCarUserInfoService;
- @Autowired
- private InsOrdersCarInfoService insOrdersCarInfoService;
- @Autowired
- private InsOrdersRiskService insOrdersRiskService;
- @Autowired
- private InsOrdersKindService insOrdersKindService;
- @Autowired
- private InsOrdersOldService insOrdersOldService;
- @Autowired
- private InsOrdersTaxService insOrdersTaxService;
- public static String validateAndFormatDate(String inputDateStr) {
- try {
- // 尝试解析日期
- SimpleDateFormat sdfInput = new SimpleDateFormat("yyyy-MM-dd");
- sdfInput.setLenient(false); // 不宽松解析
- Date inputDate = sdfInput.parse(inputDateStr);
- // 格式化为所需的日期格式
- SimpleDateFormat sdfOutput = new SimpleDateFormat("yyyy-MM-dd");
- return sdfOutput.format(inputDate);
- } catch (Exception e) {
- return null; // 返回空字符串
- }
- }
- public static InsOrdersTax validateAndFormatTaxDate(JSONObject insOrdersTaxJson) {
- try {
- InsOrdersTax insOrdersTax = insOrdersTaxJson.toJavaObject(InsOrdersTax.class);
- return insOrdersTax;
- } catch (Exception e) {
- return null; // 返回空字符串
- }
- }
- //同步用户信息
- @XxlJob("SyncCarInfoHandler")
- public void SyncCarInfoHandler() {
- int current = 1;
- //全局存储 用户信息
- List<InsOrdersCarUserInfo> globalInsOrdersCarUserInfos = new ArrayList<>();
- while(true) {
- Page<InsOrdersOld> page = insOrdersOldService.page(new Page<>(current, 1000));
- if (page.getRecords().size() > 0) {
- List<InsOrdersOld> list = page.getRecords();
- List<InsOrders> insOrdersList = new ArrayList<>();
- //需要保存的车主用户数据
- List<InsOrdersCarUserInfo> insOrdersCarUserInfos = new ArrayList<>();
- List<InsOrdersCarInfo> insOrdersCarInfos = new ArrayList<>();
- List<InsOrdersRisk> insOrdersRisks = new ArrayList<>();
- List<InsOrdersKind> insOrdersKinds = new ArrayList<>();
- List<InsOrdersTax> insOrdersTaxes = new ArrayList<>();
- list.forEach(insOrdersOld -> {
- InsOrders insOrders = new InsOrders();
- BeanUtils.copyProperties(insOrdersOld, insOrders);
- JSONObject ownerInfo = insOrdersOld.getOwnerinfo();
- JSONObject applyinfo = insOrdersOld.getApplyinfo();
- JSONObject insureInfo = insOrdersOld.getInsureinfo();
- //车主信息是否存在
- if (globalInsOrdersCarUserInfos.stream().filter(x -> x.getIdentifyNumber().equals(ownerInfo.getString("identifyNumber"))).count() > 0) {
- List<InsOrdersCarUserInfo> identifyNumber = globalInsOrdersCarUserInfos.stream().filter(x -> x.getIdentifyNumber().equals(ownerInfo.getString("identifyNumber"))).collect(Collectors.toList());
- System.out.printf("identifyNumber" + identifyNumber);
- String id = identifyNumber.get(0).getId();
- insOrders.setOwnerId(id);
- insOrders.setInsureId(id);
- insOrders.setApplyId(id);
- } else {
- InsOrdersCarUserInfo insOrdersCarUserInfo1 = ownerInfo.toJavaObject(InsOrdersCarUserInfo.class);
- insOrdersCarUserInfo1.setId(IdGenerate.nextId());
- insOrdersCarUserInfos.add(insOrdersCarUserInfo1);
- globalInsOrdersCarUserInfos.add(insOrdersCarUserInfo1);
- insOrdersCarUserInfo1.setIdentifyValidDate(validateAndFormatDate(insOrdersCarUserInfo1.getIdentifyValidDate()));
- insOrdersCarUserInfo1.setIdentifyValidEndDate(validateAndFormatDate(insOrdersCarUserInfo1.getIdentifyValidEndDate()));
- insOrdersCarUserInfo1.setGender(String.valueOf(IdcardUtil.getGenderByIdCard(insOrdersCarUserInfo1.getIdentifyNumber())));
- insOrdersCarUserInfo1.setAge(String.valueOf(IdcardUtil.getAgeByIdCard(insOrdersCarUserInfo1.getIdentifyNumber())));
- insOrders.setOwnerId(insOrdersCarUserInfo1.getId());
- insOrders.setInsureId(insOrdersCarUserInfo1.getId());
- insOrders.setApplyId(insOrdersCarUserInfo1.getId());
- }
- //投保人是否同车主
- if (!applyinfo.getString("identifyNumber").equals(ownerInfo.getString("identifyNumber"))) {
- //查看全局 用户信息是否存在
- long count = globalInsOrdersCarUserInfos.stream().filter(x -> x.getIdentifyNumber().equals(applyinfo.getString("identifyNumber"))).count();
- if(count > 0) {
- List<InsOrdersCarUserInfo> identifyNumber = globalInsOrdersCarUserInfos.stream().filter(x -> x.getIdentifyNumber().equals(applyinfo.getString("identifyNumber"))).collect(Collectors.toList());
- System.out.printf("identifyNumber" + identifyNumber);
- insOrders.setApplyId(identifyNumber.get(0).getId());
- }else {
- InsOrdersCarUserInfo insOrdersCarUserInfo = applyinfo.toJavaObject(InsOrdersCarUserInfo.class);
- insOrdersCarUserInfo.setIdentifyValidDate(validateAndFormatDate(insOrdersCarUserInfo.getIdentifyValidDate()));
- insOrdersCarUserInfo.setIdentifyValidEndDate(validateAndFormatDate(insOrdersCarUserInfo.getIdentifyValidEndDate()));
- insOrdersCarUserInfo.setGender(String.valueOf(IdcardUtil.getGenderByIdCard(insOrdersCarUserInfo.getIdentifyNumber())));
- insOrdersCarUserInfo.setAge(String.valueOf(IdcardUtil.getAgeByIdCard(insOrdersCarUserInfo.getIdentifyNumber())));
- insOrdersCarUserInfo.setId(IdGenerate.nextId());
- insOrdersCarUserInfos.add(insOrdersCarUserInfo);
- globalInsOrdersCarUserInfos.add(insOrdersCarUserInfo);
- insOrders.setApplyId(insOrdersCarUserInfo.getId());
- }
- }
- //被保人是否同车主
- if (!applyinfo.getString("identifyNumber").equals(insureInfo.getString("identifyNumber")) &&
- !ownerInfo.getString("identifyNumber").equals(insureInfo.getString("identifyNumber"))) {
- //查看全局 用户信息是否存在
- long count = globalInsOrdersCarUserInfos.stream().filter(x -> x.getIdentifyNumber().equals(insureInfo.getString("identifyNumber"))).count();
- if(count > 0) {
- List<InsOrdersCarUserInfo> identifyNumber = globalInsOrdersCarUserInfos.stream().filter(x -> x.getIdentifyNumber().equals(insureInfo.getString("identifyNumber"))).collect(Collectors.toList());
- System.out.printf("identifyNumber" + identifyNumber);
- insOrders.setInsureId(identifyNumber.get(0).getId());
- }else {
- InsOrdersCarUserInfo insOrdersCarUserInfo = insureInfo.toJavaObject(InsOrdersCarUserInfo.class);
- insOrdersCarUserInfo.setIdentifyValidDate(validateAndFormatDate(insOrdersCarUserInfo.getIdentifyValidDate()));
- insOrdersCarUserInfo.setIdentifyValidEndDate(validateAndFormatDate(insOrdersCarUserInfo.getIdentifyValidEndDate()));
- insOrdersCarUserInfo.setGender(String.valueOf(IdcardUtil.getGenderByIdCard(insOrdersCarUserInfo.getIdentifyNumber())));
- insOrdersCarUserInfo.setAge(String.valueOf(IdcardUtil.getAgeByIdCard(insOrdersCarUserInfo.getIdentifyNumber())));
- insOrdersCarUserInfo.setId(IdGenerate.nextId());
- insOrdersCarUserInfos.add(insOrdersCarUserInfo);
- globalInsOrdersCarUserInfos.add(insOrdersCarUserInfo);
- insOrders.setInsureId(insOrdersCarUserInfo.getId());
- }
- }else if(applyinfo.getString("identifyNumber").equals(insureInfo.getString("identifyNumber"))){
- insOrders.setInsureId(insOrders.getApplyId());
- }else if(ownerInfo.getString("identifyNumber").equals(insureInfo.getString("identifyNumber"))){
- insOrders.setInsureId(insOrders.getOwnerId());
- }
- JSONObject carInfo = insOrdersOld.getCarinfo();
- //车辆信息
- if (insOrdersCarInfos.stream().filter(x -> x.getLicenseNo().equals(carInfo.getString("licenseNo"))).count() > 0) {
- List<InsOrdersCarInfo> collect = insOrdersCarInfos.stream().filter(x -> x.getLicenseNo().equals(carInfo.getString("licenseNo"))).collect(Collectors.toList());
- System.out.printf("licenseNo" + carInfo.getString("licenseNo"));
- String id = collect.get(0).getId();
- insOrders.setCarInfoId(id);
- } else {
- InsOrdersCarInfo insOrdersCarInfo = carInfo.toJavaObject(InsOrdersCarInfo.class);
- insOrdersCarInfo.setRegisterDate(validateAndFormatDate(insOrdersCarInfo.getRegisterDate()));
- insOrdersCarInfo.setIssueDate(validateAndFormatDate(insOrdersCarInfo.getIssueDate()));
- insOrdersCarInfo.setId(IdGenerate.nextId());
- insOrdersCarInfos.add(insOrdersCarInfo);
- insOrders.setCarInfoId(insOrdersCarInfo.getId());
- }
- //risk kind
- JSONArray risk = insOrdersOld.getRisk();
- JSONArray kind = insOrdersOld.getKing();
- for (int i = 0; i < risk.size(); i++) {
- JSONObject jsonObject = risk.getJSONObject(i);
- RiskInfoVo riskInfoVo = jsonObject.toJavaObject(RiskInfoVo.class);
- InsOrdersRisk insOrdersRisk = new InsOrdersRisk(riskInfoVo, insOrders.getOrderno());
- insOrdersRisks.add(insOrdersRisk);
- }
- for (int i = 0; i < kind.size(); i++) {
- JSONObject jsonObject = kind.getJSONObject(i);
- KindInfoVo javaObject = jsonObject.toJavaObject(KindInfoVo.class);
- InsOrdersKind insOrdersKind = new InsOrdersKind(javaObject, insOrders.getOrderno());
- insOrdersKinds.add(insOrdersKind);
- }
- if (insOrdersOld.getVehicleAndVesselTax() != null) {
- InsOrdersTax insOrdersTax = validateAndFormatTaxDate(insOrdersOld.getVehicleAndVesselTax());
- insOrdersTax.setOrderNo(insOrders.getOrderno());
- // InsOrdersTax insOrdersTax = insOrdersOld.getVehicleAndVesselTax().toJavaObject(InsOrdersTax.class);
- if (!Objects.isNull(insOrdersTax)) {
- insOrdersTaxes.add(insOrdersTax);
- }
- }
- insOrdersList.add(insOrders);
- });
- List<InsOrdersCarUserInfo> insOrdersCarUserInfoList = insOrdersCarUserInfos.stream()
- .collect(Collectors.toMap(
- InsOrdersCarUserInfo::getIdentifyNumber, // 使用 licenseNo 作为 key
- user -> user, // 直接使用用户信息作为 value
- (existing, replacement) -> existing // 若有重复的 licenseNo,则保留第一个出现的用户信息
- ))
- .values()
- .stream()
- .collect(Collectors.toList());
- insOrdersCarUserInfoService.saveBatch(insOrdersCarUserInfoList);
- List<InsOrdersCarInfo> insOrdersCarInfoList = insOrdersCarInfos.stream()
- .collect(Collectors.toMap(
- InsOrdersCarInfo::getLicenseNo, // 使用 licenseNo 作为 key
- user -> user, // 直接使用用户信息作为 value
- (existing, replacement) -> existing // 若有重复的 licenseNo,则保留第一个出现的用户信息
- ))
- .values()
- .stream()
- .collect(Collectors.toList());
- insOrdersCarInfoService.saveBatch(insOrdersCarInfoList);
- for (InsOrdersRisk insOrdersRisk : insOrdersRisks) {
- insOrdersRisk.setId(IdGenerate.nextId());
- insOrdersRisk.setStartDate(validateAndFormatDate(insOrdersRisk.getStartDate()));
- insOrdersRisk.setEndDate(validateAndFormatDate(insOrdersRisk.getEndDate()));
- }
- for (InsOrdersKind insOrdersKind : insOrdersKinds) {
- insOrdersKind.setId(IdGenerate.nextId());
- }
- insOrdersRiskService.saveBatch(insOrdersRisks);
- insOrdersKindService.saveBatch(insOrdersKinds);
- insOrdersTaxService.saveBatch(insOrdersTaxes);
- insOrdersService.saveOrUpdateBatch(insOrdersList);
- current++;
- }else{
- break;
- }
- }
- }
- }
|