package com.gs.xiaomi.service; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.gs.xiaomi.config.DataAcquisitionConfiguration; import com.gs.xiaomi.dto.*; import com.gs.xiaomi.entity.DeliveryDetail; import com.gs.xiaomi.entity.DeliveryMain; import com.gs.xiaomi.entity.LogisticsPackage; import com.gs.xiaomi.entity.PackageDetail; import lombok.RequiredArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; @Service @Transactional(rollbackFor = Exception.class) @RequiredArgsConstructor public class XM104Service { private static final Logger log = LoggerFactory.getLogger(XM104Service.class); private final SoapApiService soapApiService; private final DeliveryMainService deliveryMainService; private final PackageDetailService packageDetailService; private final DeliveryDetailService deliveryDetailService; private final LogisticsPackageService logisticsPackageService; public void getDb() { String format = DateUtil.format(new Date(), "yyyy-MM-dd"); ZfmWsApiRequest req = new ZfmWsApiRequest(); req.setIvCode(DataAcquisitionConfiguration.IV_CODEXM104); req.setIvEvent(""); req.setIvFlag(""); BizDocument doc = new BizDocument(); doc.setBizDate(format); doc.setLifnr(DataAcquisitionConfiguration.LIFNR); req.setIvInfo(doc); req.setIvPass(DataAcquisitionConfiguration.getIvPass(DataAcquisitionConfiguration.IV_CODEXM104)); req.setIvUser(DataAcquisitionConfiguration.IV_USER); try { BizDocumentResult deliveryNo = getDeliveryNo(req); if (CollUtil.isNotEmpty(deliveryNo.getEtHeaders())) { log.info("【BizDocumentResult】返回列表为空,跳过处理"); log.info("获取接口列表返回: {}", deliveryNo.getEvMessage()); return; } //获取所有的ASN号 List etHeaders = deliveryNo.getEtHeaders(); etHeaders.forEach(etHeader -> { log.info("1.获取到送货单号: {}", etHeader.getZzasn()); //根据每行ASN号获取详细的明细 doc.setZzasn(etHeader.getZzasn()); req.setIvInfo(doc); try { BizDocumentResult result = getDeliveryNo(req); if (result == null) { log.info("【BizDocumentResult】获取送货单详情信息为空,跳过处理"); return; } log.info("2.写入数据库: {}", etHeader.getZzasn()); //写入到数据库中 setDeliveryMain(result); } catch (Exception e) { log.error("【写入数据库异常】送货单: {}, 异常: {}", etHeader.getZzasn(), e.getMessage(), e); throw new RuntimeException(e); } }); } catch (Exception e) { log.error("【读取列表异常】参数: {} 异常: {}", JSON.toJSONString(req), e.getMessage(), e); throw new RuntimeException(e); } } private BizDocumentResult getDeliveryNo(ZfmWsApiRequest request) throws Exception { BizDocumentResult bizDocumentResult = soapApiService.callAndParse(DataAcquisitionConfiguration.XM104_URL, request); return bizDocumentResult; } private void setDeliveryMain(BizDocumentResult result) { List etHeaders = result.getEtHeaders(); etHeaders.forEach(etHeader -> { DeliveryMain deliveryMain = new DeliveryMain(); BeanUtil.copyProperties(etHeader, deliveryMain); long id = deliveryMainService.getId(); deliveryMain.setId(id); deliveryMainService.save(deliveryMain); List items = etHeader.getItems(); if (CollUtil.isNotEmpty(items)) { List deliveryDetails = new ArrayList<>(); for (Item item : items) { DeliveryDetail deliveryDetail = new DeliveryDetail(); BeanUtil.copyProperties(item, deliveryDetail); deliveryDetail.setPid(deliveryMain.getId()); deliveryDetails.add(deliveryDetail); } deliveryDetailService.saveBatch(deliveryDetails); } List boxItems = etHeader.getBoxItems(); if (CollUtil.isNotEmpty(boxItems)) { List list = new ArrayList<>(); for (BoxItem boxItem : boxItems) { PackageDetail packageDetail = new PackageDetail(); BeanUtil.copyProperties(boxItem, packageDetail); packageDetail.setPid(deliveryMain.getId()); list.add(packageDetail); } packageDetailService.saveBatch(list); } List boxSums = etHeader.getBoxSums(); if (CollUtil.isNotEmpty(boxSums)) { List list = new ArrayList<>(); for (BoxSum boxSum : boxSums) { LogisticsPackage logisticsPackage = new LogisticsPackage(); BeanUtil.copyProperties(boxSum, logisticsPackage); logisticsPackage.setPid(deliveryMain.getId()); list.add(logisticsPackage); } logisticsPackageService.saveBatch(list); } }); } }