package com.gs.xky.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.gs.xky.config.ApiResponse; import com.gs.xky.config.BodyParam; import com.gs.xky.config.DataAcquisitionConfiguration; import com.gs.xky.config.XkyCommonParam; import com.gs.xky.dto.BarcodeDeliveryNo; import com.gs.xky.dto.XkyDetail; import com.gs.xky.dto.XkyEntity; import com.gs.xky.entity.*; import lombok.RequiredArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.util.List; @Service @Transactional(rollbackFor = Exception.class) @RequiredArgsConstructor public class XkyService { private static final Logger log = LoggerFactory.getLogger(XkyService.class); private final ApiService apiService; private final DeliveryNoticeService deliveryNoticeService; private final TblBarcodeInformationService barcodeInformationService; private final DeliveryNoticeDetailService deliveryNoticeDetailService; private final MesInvItemArnService mesInvItemArnService; private final MesInvItemArnDetailService mesInvItemArnDetailService; private final MesInvItemBarcodesService mesInvItemBarcodesService; private final MesQaItemsDetect01Service mesQaItemsDetect01Service; public void GetSaveDetail() throws IOException { long currentTimeMillis = System.currentTimeMillis(); long startDate = currentTimeMillis - (20 * 60 * 1000); // 计算 20 分钟前的时间戳 XkyCommonParam param = XkyCommonParam.GetInit(); BodyParam bodyParam = new BodyParam(); bodyParam.setStartDate(startDate); bodyParam.setEndDate(currentTimeMillis); bodyParam.setErpCode(DataAcquisitionConfiguration.TEST_ERP_CODE); bodyParam.setStatus(new int[]{1, 6}); param.setBody(bodyParam); // 记录请求参数日志 log.info("【GetSaveDetail 请求参数】时间: {}, 参数: {}", currentTimeMillis, JSONUtil.toJsonStr(param)); ApiResponse noList = apiService.sendListRequest(param, XkyEntity.class, "https://openapi.xiekeyun.com/delivery/getNoList.json"); // 记录返回数据日志 log.info("【GetSaveDetail 响应数据】时间: {}, 返回: {}", currentTimeMillis, JSONUtil.toJsonStr(noList)); List deliveryNoList = noList.getDataList(); if (CollUtil.isEmpty(deliveryNoList)) { log.info("【GetSaveDetail】返回列表为空,跳过处理"); return; } deliveryNoList.forEach(deliveryNo -> { try { if ("6".equals(deliveryNo.getStatus()) || "0".equals(deliveryNo.getLogisticsStatus())) { log.info("【GetSaveDetail】移除送货单: {}", deliveryNo.getDeliveryNo()); remove(deliveryNo); } else if ("1".equals(deliveryNo.getStatus()) && ("2".equals(deliveryNo.getLogisticsStatus()) || "1".equals(deliveryNo.getLogisticsStatus()))) { XkyDetail detail = getDetail(deliveryNo.getDeliveryNo()); deliveryNoticeService.saveDeliveryNotice(detail); List barcodeDeliveryNos = GetBarcodeInformation(deliveryNo.getDeliveryNo()); barcodeInformationService.SaveBarcodeInformation(barcodeDeliveryNos, deliveryNo.getDeliveryNo()); //已送达的才自动转换为MES到货单 if ("2".equals(deliveryNo.getLogisticsStatus())) { deliveryNoticeService.callPdaReceiptBtn("送货单签收[BTNOK[PL017[" + deliveryNo.getDeliveryNo(), ""); } } } catch (IOException e) { log.error("【GetSaveDetail 处理异常】送货单: {}, 异常: {}", deliveryNo.getDeliveryNo(), e.getMessage(), e); throw new RuntimeException(e); } }); } private void remove(XkyEntity deliveryNo) { LambdaUpdateWrapper deliveryNoticeWrapper = new LambdaUpdateWrapper<>(); deliveryNoticeWrapper.eq(DeliveryNotice::getDeliveryNo, deliveryNo.getDeliveryNo()); DeliveryNotice one = deliveryNoticeService.getOne(deliveryNoticeWrapper, false); if (deliveryNoticeService.remove(deliveryNoticeWrapper)) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(DeliveryNoticeDetail::getPid, one.getId()); deliveryNoticeDetailService.remove(updateWrapper); LambdaUpdateWrapper updateWrapper1 = new LambdaUpdateWrapper<>(); updateWrapper1.eq(TblBarcodeInformation::getDeliveryNo, deliveryNo.getDeliveryNo()); barcodeInformationService.remove(updateWrapper1); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(MesInvItemArn::getPaperBillNo, deliveryNo.getDeliveryNo()); MesInvItemArn mesInvItemArn = mesInvItemArnService.getOne(wrapper, false); mesInvItemArnService.remove(wrapper); if (mesInvItemArn != null) { LambdaUpdateWrapper updateWrapper2 = new LambdaUpdateWrapper<>(); updateWrapper2.eq(MesInvItemArnDetail::getMid, mesInvItemArn.getId()); mesInvItemArnDetailService.remove(updateWrapper2); LambdaUpdateWrapper updateWrapper3 = new LambdaUpdateWrapper<>(); updateWrapper3.eq(MesInvItemBarcodes::getBillNo, mesInvItemArn.getBillNo()); mesInvItemBarcodesService.remove(updateWrapper3); mesQaItemsDetect01Service.removeQa(mesInvItemArn.getBillNo()); } } } private XkyDetail getDetail(String deliveryNo) throws IOException { XkyCommonParam param = XkyCommonParam.GetInit(); // 创建 BodyParam 对象并赋值 BodyParam bodyParam = new BodyParam(); bodyParam.setErpCode(DataAcquisitionConfiguration.TEST_ERP_CODE); bodyParam.setDeliveryNo(deliveryNo); param.setBody(bodyParam); ApiResponse noList = apiService.sendListRequest(param, XkyDetail.class, "https://openapi.xiekeyun.com/delivery/getDetail.json"); return noList.getData(); } private List GetBarcodeInformation(String deliveryNo) throws IOException { XkyCommonParam param = XkyCommonParam.GetInit(); // 创建 BodyParam 对象并赋值 BodyParam bodyParam = new BodyParam(); bodyParam.setErpCode(DataAcquisitionConfiguration.TEST_ERP_CODE); bodyParam.setDeliveryNo(deliveryNo); param.setBody(bodyParam); ApiResponse noList = apiService.sendListRequest(param, BarcodeDeliveryNo.class, "https://openapi.xiekeyun.com/barcode/byDeliveryNo.json"); return noList.getDataList(); } }