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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
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");
|
getXM104Save(format);
|
}
|
|
private void getXM104Save(String format) {
|
|
BizDocument doc = new BizDocument();
|
doc.setBizDate(format);
|
doc.setLifnr(DataAcquisitionConfiguration.LIFNR);
|
|
getXM104(doc);
|
}
|
|
private void getXM104(BizDocument doc) {
|
|
ZfmWsApiRequest req = new ZfmWsApiRequest();
|
req.setIvCode(DataAcquisitionConfiguration.IV_CODEXM104);
|
req.setIvEvent("");
|
req.setIvFlag("");
|
req.setIvInfo(doc);
|
req.setIvPass(DataAcquisitionConfiguration.getIvPass(DataAcquisitionConfiguration.IV_CODEXM104));
|
req.setIvUser(DataAcquisitionConfiguration.IV_USER);
|
|
try {
|
BizDocumentResult deliveryNo = getDeliveryNo(req);
|
|
if (CollUtil.isEmpty(deliveryNo.getEtHeaders())) {
|
log.info("【BizDocumentResult】返回列表为空,跳过处理");
|
log.info("获取接口列表返回: {}", deliveryNo.getEvMessage());
|
return;
|
}
|
|
//获取所有的ASN号
|
List<EtHeader> 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<EtHeader> etHeaders = result.getEtHeaders();
|
|
etHeaders.forEach(etHeader -> {
|
|
LambdaQueryWrapper<DeliveryMain> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(DeliveryMain::getZzasn, etHeader.getZzasn());
|
|
DeliveryMain one = deliveryMainService.getOne(queryWrapper, false);
|
|
if (one != null) {
|
deliveryMainService.removeById(one.getId());
|
|
LambdaUpdateWrapper<DeliveryDetail> updateWrapper = new LambdaUpdateWrapper<>();
|
updateWrapper.eq(DeliveryDetail::getPid, one.getId());
|
deliveryDetailService.remove(updateWrapper);
|
|
//PackageDetail
|
LambdaUpdateWrapper<PackageDetail> updateWrapper1 = new LambdaUpdateWrapper<>();
|
updateWrapper1.eq(PackageDetail::getPid, one.getId());
|
packageDetailService.remove(updateWrapper1);
|
|
//LogisticsPackage
|
LambdaUpdateWrapper<LogisticsPackage> updateWrapper2 = new LambdaUpdateWrapper<>();
|
updateWrapper2.eq(LogisticsPackage::getPid, one.getId());
|
logisticsPackageService.remove(updateWrapper2);
|
}
|
|
DeliveryMain deliveryMain = new DeliveryMain();
|
|
BeanUtil.copyProperties(etHeader, deliveryMain);
|
|
long id = deliveryMainService.getId();
|
deliveryMain.setId(id);
|
|
deliveryMainService.save(deliveryMain);
|
|
List<Item> items = etHeader.getItems();
|
if (CollUtil.isNotEmpty(items)) {
|
|
List<DeliveryDetail> 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<BoxItem> boxItems = etHeader.getBoxItems();
|
if (CollUtil.isNotEmpty(boxItems)) {
|
List<PackageDetail> 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<BoxSum> boxSums = etHeader.getBoxSums();
|
if (CollUtil.isNotEmpty(boxSums)) {
|
List<LogisticsPackage> 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);
|
|
}
|
|
deliveryMainService.callPdaReceiptBtn("送货单签收[BTNOK[PL017[" + etHeader.getZzasn(), "");
|
});
|
}
|
|
public boolean manualSynchronization(NumbericalDto numbericalDto) {
|
try {
|
String[] asns = numbericalDto.getAsn().split(",");
|
for (String asn : asns) {
|
BizDocument doc = new BizDocument();
|
doc.setLifnr(DataAcquisitionConfiguration.LIFNR);
|
doc.setZzasn(asn);
|
getXM104(doc);
|
}
|
return true;
|
} catch (Exception e) {
|
log.error("【手动读取ASN异常】 异常: {}", e.getMessage(), e);
|
return false;
|
}
|
}
|
|
public boolean manualSynchronizationByDate(NumbericalDto numbericalDto) {
|
try {
|
BizDocument doc = new BizDocument();
|
doc.setLifnr(DataAcquisitionConfiguration.LIFNR);
|
doc.setBizDate(numbericalDto.getDate());
|
getXM104(doc);
|
return true;
|
} catch (Exception e) {
|
log.error("【手动读取ASN异常】 异常: {}", e.getMessage(), e);
|
return false;
|
}
|
}
|
}
|