diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java index d976fcc98..5b9773fb9 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java @@ -536,6 +536,13 @@ public interface WlhyServiceFeign { @PostMapping("/feign/order/add") public AjaxResult add(@RequestBody TmsOrderAddDTO tmsOrderAddDTO); + /** + * 修改运单(OMS调整业务单后同步修改TMS订单) + * @param tmsOrderAddDTO 需携带 TMS 订单 id 定位 + */ + @PostMapping("/feign/order/update") + public AjaxResult update(@RequestBody TmsOrderAddDTO tmsOrderAddDTO); + @GetMapping("/feign/order/cancelIssueDocuments") public AjaxResult cancelIssueDocuments(@RequestParam(name="executeOrderId") String executeOrderId); diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderAdjustService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderAdjustService.java index 18623eb98..30564121e 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderAdjustService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderAdjustService.java @@ -7,9 +7,16 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.mhd.common.core.domain.dto.wlhy.TmsAddressMultiDTO; +import com.mhd.common.core.domain.dto.wlhy.TmsCargoInfoDTO; +import com.mhd.common.core.domain.dto.wlhy.TmsOrderAccount; import com.mhd.common.core.exception.ServiceException; import com.mhd.common.core.web.domain.AjaxResult; import com.mhd.common.security.utils.SecurityUtils; +import com.mhd.oms.domain.businessDocumentAddressMulti.entity.BusinessDocumentAddressMulti; +import com.mhd.oms.domain.businessDocumentAddressMulti.repository.mapper.BusinessDocumentAddressMultiMapper; +import com.mhd.oms.domain.businessDocumentCargoMulti.entity.BusinessDocumentCargoMulti; +import com.mhd.oms.domain.businessDocumentCargoMulti.repository.mapper.BusinessDocumentCargoMultiMapper; import com.mhd.oms.domain.businessDocumentOrder.entity.BusinessDocumentOrder; import com.mhd.oms.domain.businessDocumentOrder.repository.mapper.BusinessDocumentOrderMapper; import com.mhd.oms.domain.businessDocumentOrderAdjust.entity.BusinessDocumentOrderAdjust; @@ -26,6 +33,7 @@ import com.mhd.oms.interfaces.dto.businessDocumentOrderAdjust.BusinessDocumentOr import com.mhd.oms.interfaces.dto.businessDocumentOrderAdjust.BusinessDocumentOrderAdjustQueryDTO; import com.mhd.oms.interfaces.dto.businessDocumentOrderAdjust.BusinessDocumentOrderAdjustRecordDTO; import com.mhd.system.api.WlhyServiceFeign; +import com.mhd.system.api.domain.TmsOrderAddDTO; import com.mhd.system.api.model.LoginUser; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -131,6 +139,12 @@ public class BusinessDocumentOrderAdjustService { @Autowired private ExecuteOrderMapper executeOrderMapper; + @Autowired + private BusinessDocumentCargoMultiMapper businessDocumentCargoMultiMapper; + + @Autowired + private BusinessDocumentAddressMultiMapper businessDocumentAddressMultiMapper; + @Autowired private WlhyServiceFeign wlhyServiceFeign; @@ -634,10 +648,99 @@ public class BusinessDocumentOrderAdjustService { if (executeOrders == null || executeOrders.isEmpty()) { return; } - log.info("业务单[{}]调整完成,关联执行单[{}]。如需回写TMS请接入TMS改费Feign。", goodsNumber, - executeOrders.stream().map(ExecuteOrder::getGoodsNumber).collect(Collectors.toList())); + for (ExecuteOrder executeOrder : executeOrders) { + // 仅已下发 TMS(存在 TMS 单号)的执行单需要同步修改 + if (StrUtil.isBlank(executeOrder.getTmsOrderNumber())) { + continue; + } + syncTmsOrder(executeOrder, after); + } } catch (Exception e) { log.error("同步TMS失败,不影响主流程", e); } } + + /** + * 同步修改单个 TMS 订单:按调整后业务单重新组装 TmsOrderAddDTO, + * 带 executeOrderNumber 定位 TMS 订单,调用 TMS /feign/order/update 接口。 + */ + private void syncTmsOrder(ExecuteOrder executeOrder, BusinessDocumentOrder after) { + TmsOrderAddDTO tmsOrderAddDTO = new TmsOrderAddDTO(); + BeanUtil.copyProperties(after, tmsOrderAddDTO); + tmsOrderAddDTO.setExecuteOrderId(String.valueOf(executeOrder.getId())); + tmsOrderAddDTO.setExecuteOrderNumber(executeOrder.getGoodsNumber()); + tmsOrderAddDTO.setGoodsNumber(after.getGoodsNumber()); + tmsOrderAddDTO.setOrderSource("0"); + + // 货物信息 + List cargoList = businessDocumentCargoMultiMapper.selectList( + new LambdaQueryWrapper() + .eq(BusinessDocumentCargoMulti::getOrderId, String.valueOf(after.getId())) + .eq(BusinessDocumentCargoMulti::getDelFlag, 1)); + List cargoInfoList = new ArrayList<>(); + if (cargoList != null) { + for (BusinessDocumentCargoMulti cargo : cargoList) { + TmsCargoInfoDTO dto = new TmsCargoInfoDTO(); + BeanUtil.copyProperties(cargo, dto); + cargoInfoList.add(dto); + } + } + tmsOrderAddDTO.setCargoInfoList(cargoInfoList); + + // 装货地址 + List loadingAddrList = businessDocumentAddressMultiMapper.selectList( + new LambdaQueryWrapper() + .eq(BusinessDocumentAddressMulti::getOrderId, String.valueOf(after.getId())) + .eq(BusinessDocumentAddressMulti::getDelFlag, 1) + .eq(BusinessDocumentAddressMulti::getLayType, 1L)); + List loadingAddressList = new ArrayList<>(); + if (loadingAddrList != null) { + for (BusinessDocumentAddressMulti addr : loadingAddrList) { + TmsAddressMultiDTO dto = new TmsAddressMultiDTO(); + BeanUtil.copyProperties(addr, dto); + loadingAddressList.add(dto); + } + } + tmsOrderAddDTO.setLoadingAddressList(loadingAddressList); + + // 卸货地址 + List unloadAddrList = businessDocumentAddressMultiMapper.selectList( + new LambdaQueryWrapper() + .eq(BusinessDocumentAddressMulti::getOrderId, String.valueOf(after.getId())) + .eq(BusinessDocumentAddressMulti::getDelFlag, 1) + .eq(BusinessDocumentAddressMulti::getLayType, 2L)); + List unloadAddressList = new ArrayList<>(); + if (unloadAddrList != null) { + for (BusinessDocumentAddressMulti addr : unloadAddrList) { + TmsAddressMultiDTO dto = new TmsAddressMultiDTO(); + BeanUtil.copyProperties(addr, dto); + dto.setLayType(2); + unloadAddressList.add(dto); + } + } + tmsOrderAddDTO.setUnloadAddressList(unloadAddressList); + + // 费用明细 + List accountList = businessOrderAccountMapper.selectList( + new LambdaQueryWrapper() + .eq(BusinessOrderAccount::getOrderId, after.getId()) + .eq(BusinessOrderAccount::getIsDelete, 0)); + List tmsOrderAccountList = new ArrayList<>(); + if (accountList != null) { + for (BusinessOrderAccount acc : accountList) { + TmsOrderAccount dto = new TmsOrderAccount(); + BeanUtil.copyProperties(acc, dto); + tmsOrderAccountList.add(dto); + } + } + tmsOrderAddDTO.setTmsOrderAccountList(tmsOrderAccountList); + + AjaxResult result = wlhyServiceFeign.update(tmsOrderAddDTO); + if (result != null && "200".equals(String.valueOf(result.get("code")))) { + log.info("调整后同步修改TMS订单成功,执行单[{}],业务单[{}]", executeOrder.getGoodsNumber(), after.getGoodsNumber()); + } else { + log.error("调整后同步修改TMS订单失败,执行单[{}],返回: {}", executeOrder.getGoodsNumber(), + result == null ? "null" : result.get("msg")); + } + } }