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 globalInsOrdersCarUserInfos = new ArrayList<>(); while(true) { Page page = insOrdersOldService.page(new Page<>(current, 1000)); if (page.getRecords().size() > 0) { List list = page.getRecords(); List insOrdersList = new ArrayList<>(); //需要保存的车主用户数据 List insOrdersCarUserInfos = new ArrayList<>(); List insOrdersCarInfos = new ArrayList<>(); List insOrdersRisks = new ArrayList<>(); List insOrdersKinds = new ArrayList<>(); List 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 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 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 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 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 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 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; } } } }