| | |
| | | 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.dto.BarcodeDeliveryNo; |
| | | import com.gs.xky.dto.XkyDetail; |
| | | import com.gs.xky.dto.XkyEntity; |
| | | import com.gs.xky.entity.DeliveryNotice; |
| | | import com.gs.xky.entity.DeliveryNoticeDetail; |
| | | import com.gs.xky.entity.TblBarcodeInformation; |
| | | 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; |
| | | |
| | |
| | | @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(); |
| | | |
| | | // 计算五分钟前的时间戳 |
| | | long startDate = currentTimeMillis - (65 * 60 * 1000); // 5 分钟 = 5 * 60 * 1000 毫秒 |
| | | |
| | | // 创建 BodyParam 对象并赋值 |
| | | XkyCommonParam<BodyParam> param = XkyCommonParam.GetInit(); |
| | | BodyParam bodyParam = new BodyParam(); |
| | | bodyParam.setStartDate(startDate); |
| | | bodyParam.setEndDate(currentTimeMillis); |
| | | bodyParam.setErpCode(DataAcquisitionConfiguration.TEST_ERP_CODE); |
| | | bodyParam.setStatus(new int[]{1}); |
| | | bodyParam.setLogisticsStatus(2); |
| | | |
| | | bodyParam.setStatus(new int[]{1, 6}); |
| | | param.setBody(bodyParam); |
| | | |
| | | // 记录请求参数日志 |
| | | log.info("【GetSaveDetail 请求参数】时间: {}, 参数: {}", currentTimeMillis, JSONUtil.toJsonStr(param)); |
| | | |
| | | ApiResponse<XkyEntity> noList = apiService.sendListRequest(param, XkyEntity.class, "https://openapi.xiekeyun.com/delivery/getNoList.json"); |
| | | |
| | | // List<String> deliveryNoList = noList.getDataList().stream().map(XkyEntity::getDeliveryNo).collect(Collectors.toList()); |
| | | // 记录返回数据日志 |
| | | log.info("【GetSaveDetail 响应数据】时间: {}, 返回: {}", currentTimeMillis, JSONUtil.toJsonStr(noList)); |
| | | |
| | | List<XkyEntity> deliveryNoList = noList.getDataList(); |
| | | |
| | | LambdaUpdateWrapper<DeliveryNotice> deliveryNoticeWrapper = new LambdaUpdateWrapper<>(); |
| | | |
| | | LambdaUpdateWrapper<DeliveryNoticeDetail> updateWrapper = new LambdaUpdateWrapper<>(); |
| | | |
| | | LambdaUpdateWrapper<TblBarcodeInformation> updateWrapper1 = new LambdaUpdateWrapper<>(); |
| | | if (CollUtil.isEmpty(deliveryNoList)) { |
| | | log.info("【GetSaveDetail】返回列表为空,跳过处理"); |
| | | return; |
| | | } |
| | | |
| | | deliveryNoList.forEach(deliveryNo -> { |
| | | try { |
| | | |
| | | if ("4".equals(deliveryNo.getStatus()) || "8".equals(deliveryNo.getStatus())) { |
| | | deliveryNoticeWrapper.clear(); |
| | | updateWrapper.clear(); |
| | | updateWrapper1.clear(); |
| | | deliveryNoticeWrapper.eq(DeliveryNotice::getDeliveryNo, deliveryNo.getDeliveryNo()); |
| | | |
| | | DeliveryNotice one = deliveryNoticeService.getOne(deliveryNoticeWrapper, false); |
| | | |
| | | if (deliveryNoticeService.remove(deliveryNoticeWrapper)) { |
| | | |
| | | updateWrapper.eq(DeliveryNoticeDetail::getPid, one.getId()); |
| | | deliveryNoticeDetailService.remove(updateWrapper); |
| | | |
| | | updateWrapper1.eq(TblBarcodeInformation::getDeliveryNo, deliveryNo.getDeliveryNo()); |
| | | barcodeInformationService.remove(updateWrapper1); |
| | | if ("6".equals(deliveryNo.getStatus()) || "0".equals(deliveryNo.getLogisticsStatus())) { |
| | | log.info("【GetSaveDetail】移除送货单: {}", deliveryNo.getDeliveryNo()); |
| | | remove1(deliveryNo); |
| | | } else if ("1".equals(deliveryNo.getStatus()) && ("2".equals(deliveryNo.getLogisticsStatus()) || "1".equals(deliveryNo.getLogisticsStatus()))) { |
| | | XkyDetail detail = getDetail(deliveryNo.getDeliveryNo()); |
| | | deliveryNoticeService.saveDeliveryNotice(detail); |
| | | List<BarcodeDeliveryNo> barcodeDeliveryNos = GetBarcodeInformation(deliveryNo.getDeliveryNo()); |
| | | barcodeInformationService.SaveBarcodeInformation(barcodeDeliveryNos, deliveryNo.getDeliveryNo()); |
| | | //已送达的才自动转换为MES到货单 |
| | | if ("2".equals(deliveryNo.getLogisticsStatus())) { |
| | | deliveryNoticeService.callPdaReceiptBtn("送货单签收[BTNOK[PL017[" + deliveryNo.getDeliveryNo(), ""); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | XkyDetail detail = getDetail(deliveryNo.getDeliveryNo()); |
| | | deliveryNoticeService.saveDeliveryNotice(detail); |
| | | List<BarcodeDeliveryNo> barcodeDeliveryNos = GetBarcodeInformation(deliveryNo.getDeliveryNo()); |
| | | barcodeInformationService.SaveBarcodeInformation(barcodeDeliveryNos, deliveryNo.getDeliveryNo()); |
| | | |
| | | deliveryNoticeService.callPdaReceiptBtn("送货单签收[BTNOK[PL017[" + deliveryNo.getDeliveryNo(), ""); |
| | | } catch (IOException e) { |
| | | log.error("【GetSaveDetail 处理异常】送货单: {}, 异常: {}", deliveryNo.getDeliveryNo(), e.getMessage(), e); |
| | | throw new RuntimeException(e); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | public void remove1(XkyEntity deliveryNo) { |
| | | |
| | | //MesQaItemsDetect01与MesInvItemArnDetail的关联关系是 |
| | | //MesQaItemsDetect01.lotNo=MesInvItemArnDetail.billNo |
| | | //and MesQaItemsDetect01.item_id=MesInvItemArnDetail.item_id |
| | | |
| | | //我现在希望不清空DeliveryNotice,DeliveryNoticeDetail,TblBarcodeInformation表的数据了 |
| | | //还有MesInvItemArn,MesInvItemArnDetail,MesInvItemBarcodes表的数据 |
| | | //只删除MesQaItemsDetect01表的数据 |
| | | |
| | | LambdaQueryWrapper<MesInvItemArn> wrapper = new LambdaQueryWrapper<>(); |
| | | wrapper.eq(MesInvItemArn::getPaperBillNo, deliveryNo.getDeliveryNo()); |
| | | MesInvItemArn mesInvItemArn = mesInvItemArnService.getOne(wrapper, false); |
| | | |
| | | // 只有当找到对应的MesInvItemArn记录时才删除MesQaItemsDetect01表的数据 |
| | | if (mesInvItemArn != null) { |
| | | // 更新MesInvItemArn表,设置syncFlag=1,syncMsg="SRM手动删除送货单" |
| | | LambdaUpdateWrapper<MesInvItemArn> updateWrapper = new LambdaUpdateWrapper<>(); |
| | | updateWrapper.eq(MesInvItemArn::getId, mesInvItemArn.getId()) |
| | | .set(MesInvItemArn::getSyncFlag, 1) |
| | | .set(MesInvItemArn::getStatus, 1) |
| | | .set(MesInvItemArn::getSyncMsg, "SRM手动删除送货单"); |
| | | mesInvItemArnService.update(updateWrapper); |
| | | |
| | | // 删除MesQaItemsDetect01表的数据 |
| | | mesQaItemsDetect01Service.removeQa(mesInvItemArn.getBillNo()); |
| | | } |
| | | } |
| | | |
| | | private XkyDetail getDetail(String deliveryNo) throws IOException { |
| | | XkyCommonParam param = XkyCommonParam.GetInit(); |
| | | XkyCommonParam<BodyParam> param = XkyCommonParam.GetInit(); |
| | | |
| | | // 创建 BodyParam 对象并赋值 |
| | | BodyParam bodyParam = new BodyParam(); |
| | |
| | | } |
| | | |
| | | private List<BarcodeDeliveryNo> GetBarcodeInformation(String deliveryNo) throws IOException { |
| | | XkyCommonParam param = XkyCommonParam.GetInit(); |
| | | XkyCommonParam<BodyParam> param = XkyCommonParam.GetInit(); |
| | | |
| | | // 创建 BodyParam 对象并赋值 |
| | | BodyParam bodyParam = new BodyParam(); |
| | |
| | | |
| | | return noList.getDataList(); |
| | | } |
| | | |
| | | private void remove(XkyEntity deliveryNo) { |
| | | LambdaUpdateWrapper<DeliveryNotice> deliveryNoticeWrapper = new LambdaUpdateWrapper<>(); |
| | | |
| | | deliveryNoticeWrapper.eq(DeliveryNotice::getDeliveryNo, deliveryNo.getDeliveryNo()); |
| | | |
| | | DeliveryNotice one = deliveryNoticeService.getOne(deliveryNoticeWrapper, false); |
| | | |
| | | if (deliveryNoticeService.remove(deliveryNoticeWrapper)) { |
| | | |
| | | LambdaUpdateWrapper<DeliveryNoticeDetail> updateWrapper = new LambdaUpdateWrapper<>(); |
| | | |
| | | updateWrapper.eq(DeliveryNoticeDetail::getPid, one.getId()); |
| | | |
| | | deliveryNoticeDetailService.remove(updateWrapper); |
| | | |
| | | LambdaUpdateWrapper<TblBarcodeInformation> updateWrapper1 = new LambdaUpdateWrapper<>(); |
| | | |
| | | updateWrapper1.eq(TblBarcodeInformation::getDeliveryNo, deliveryNo.getDeliveryNo()); |
| | | |
| | | barcodeInformationService.remove(updateWrapper1); |
| | | |
| | | LambdaQueryWrapper<MesInvItemArn> wrapper = new LambdaQueryWrapper<>(); |
| | | wrapper.eq(MesInvItemArn::getPaperBillNo, deliveryNo.getDeliveryNo()); |
| | | |
| | | MesInvItemArn mesInvItemArn = mesInvItemArnService.getOne(wrapper, false); |
| | | |
| | | mesInvItemArnService.remove(wrapper); |
| | | |
| | | if (mesInvItemArn != null) { |
| | | LambdaUpdateWrapper<MesInvItemArnDetail> updateWrapper2 = new LambdaUpdateWrapper<>(); |
| | | |
| | | updateWrapper2.eq(MesInvItemArnDetail::getMid, mesInvItemArn.getId()); |
| | | mesInvItemArnDetailService.remove(updateWrapper2); |
| | | |
| | | LambdaUpdateWrapper<MesInvItemBarcodes> updateWrapper3 = new LambdaUpdateWrapper<>(); |
| | | |
| | | updateWrapper3.eq(MesInvItemBarcodes::getBillNo, mesInvItemArn.getBillNo()); |
| | | mesInvItemBarcodesService.remove(updateWrapper3); |
| | | |
| | | mesQaItemsDetect01Service.removeQa(mesInvItemArn.getBillNo()); |
| | | } |
| | | } |
| | | } |
| | | } |