From b1f304bc54cef1a627803c5a9ab42b6ee782acdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=A5=8E=E5=85=B4?= <2220574228@qq.com> Date: Fri, 3 Apr 2026 13:50:51 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=B9=E7=94=A8=E8=AE=A1=E7=AE=97;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/domain/dto/BusinessDataPushDTO.java | 5 +- .../BusinessDocumentApplicationService.java | 48 ++++++++++ .../facadeApi/BusinessDocumentApi.java | 19 ++++ .../entity/ReceiptOrderAccount.java | 18 +++- .../repository/todo/StockReceiptOrderDO.java | 5 +- .../StockReceiptOrderDomainService.java | 92 +++++++++++++++++-- .../StockReceiptOrderDTO.java | 6 +- 7 files changed, 181 insertions(+), 12 deletions(-) diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/dto/BusinessDataPushDTO.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/dto/BusinessDataPushDTO.java index ee1ab9eb8..53cf4418e 100644 --- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/dto/BusinessDataPushDTO.java +++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/dto/BusinessDataPushDTO.java @@ -48,6 +48,9 @@ public class BusinessDataPushDTO{ @ApiModelProperty("账单金额") private BigDecimal billAmount; + @ApiModelProperty("预计费金额") + private BigDecimal estimatedCost; + @ApiModelProperty("费用科目") @NotBlank(message = "费用科目不能为空") private String secondSubjectCode; @@ -81,4 +84,4 @@ public class BusinessDataPushDTO{ private String salesmanId; @ApiModelProperty("业务员名称") private String salesmanName; -} +} \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/application/server/businessDocument/BusinessDocumentApplicationService.java b/mhd_bms/src/main/java/com/mhd/bms/application/server/businessDocument/BusinessDocumentApplicationService.java index 37c00a276..c48aaa3d3 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/application/server/businessDocument/BusinessDocumentApplicationService.java +++ b/mhd_bms/src/main/java/com/mhd/bms/application/server/businessDocument/BusinessDocumentApplicationService.java @@ -997,4 +997,52 @@ public class BusinessDocumentApplicationService { this.auditByIdsBySystem(businessDocumentDTO); return true; } + + @Transactional(rollbackFor = Exception.class) + public Boolean wholeRentSynchronizationZXF(BusinessDocumentDO businessDocumentDO) { + log.info("定时任务进入BMS业务单据保存--开始"); + //根据结算主题id查询 结算对象编码 + Long settlementEntityId = businessDocumentDO.getSettlementEntityId(); + List settlementCustomersList = settlementCustomersService.list(new LambdaQueryWrapper() + .eq(SettlementCustomers::getSettlementEntityId, settlementEntityId) + .eq(SettlementCustomers::getDelFlag, 1) + ); + if (settlementCustomersList != null && settlementCustomersList.size() > 0) { + businessDocumentDO.setSettlementCustomersCode(settlementCustomersList.get(0).getSettlementCustomersCode()); + }else { + return false; + } + //校验使用的表单是否必填校验 + //checkDoucumentType(businessDocumentDO); + //处理数据 + handleDate(businessDocumentDO); + businessDocumentDO.setDataSources(1); + businessDocumentDO.setCreateTime(new Date()); + businessDocumentDO.setCreateByName("system"); + businessDocumentDO.setBusinessFlow(OrderSequence.getOrderCode("LS")); + businessDocumentDO.setTopOrganizationId(businessDocumentDO.getTopOrganizationId()); + businessDocumentDO.setOrganizationId(businessDocumentDO.getOrganizationId()); + businessDocumentDO.setOrganizationName(businessDocumentDO.getOrganizationName()); + //调用费用计算,计算费用金额进行保存 +// CostCalculationDTO costCalculationDTO = new CostCalculationDTO(); +// costCalculationDTO.setOriginalBusinessNum(businessDocumentDO.getOriginalBusinessNum()); +// costCalculationDTO.setContractNumber(businessDocumentDO.getContractNumber()); +// costCalculationDTO.setFormJson(businessDocumentDO.getDocumentFormJson()); +// costCalculationDTO.setSubjectCode(StringUtils.isEmpty(businessDocumentDO.getSecondSubjectCode()) ? businessDocumentDO.getFirstSubjectCode():businessDocumentDO.getSecondSubjectCode()); +// costCalculationDTO.setDocumentTypeCode(businessDocumentDO.getDocumentTypeCode()); +// costCalculationDTO.setTopOrganizationId(businessDocumentDO.getTopOrganizationId()); +// costCalculationDTO.setOrganizationId(businessDocumentDO.getOrganizationId()); +// costCalculationDTO.setOrganizationName(businessDocumentDO.getOrganizationName()); +// BillingCostPo billingCostPo = costCalculationApplicationService.costCalculation(costCalculationDTO); +// businessDocumentDO.setEstimatedCost(billingCostPo.getComputationalCost()); +// businessDocumentDO.setBillAmount(billingCostPo.getComputationalCost());//计费金额与计算金额一致 + log.info("定时任务进入BMS业务单据保存--结束"); + BusinessDocument businessDocument = businessDocumentDomainService.insertRetrun(businessDocumentDO); + BusinessDocumentDTO businessDocumentDTO = new BusinessDocumentDTO(); + businessDocumentDTO.setBusinessDocumentIds(String.valueOf(businessDocument.getBusinessDocumentId())); + businessDocumentDTO.setAuditOperation(1); + this.takeEffectByIdsBySystem(businessDocumentDTO); + this.auditByIdsBySystem(businessDocumentDTO); + return true; + } } \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BusinessDocumentApi.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BusinessDocumentApi.java index caed51fd4..8301bc5d9 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BusinessDocumentApi.java +++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BusinessDocumentApi.java @@ -100,6 +100,25 @@ public class BusinessDocumentApi extends BaseController{ } + /** + * 整租推送 + */ + @ApiOperation("装卸费推送") + @PostMapping("/wholeRentSynchronizationZXF") + public AjaxResult wholeRentSynchronizationZXF(@RequestBody BusinessDocumentDTO businessDocumentDTO) + { + try { + //转换实体 + BusinessDocumentDO businessDocumentDO = new BusinessDocumentDO(); + // 拷贝 + com.mhd.common.core.utils.bean.BeanUtils.copyProperties(businessDocumentDTO, businessDocumentDO, IgnoreNullUtil.getNullPropertyNames(businessDocumentDTO)); + return toAjax(businessDocumentApplicationService.wholeRentSynchronizationZXF(businessDocumentDO)); + }catch (Exception e){ + return AjaxResult.error("保存业务单据失败" +e.getMessage()); + } + + } + /** * 整租推送 diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/receiptOrderAccount/entity/ReceiptOrderAccount.java b/mhd_wms/src/main/java/com/mhd/wms/domain/receiptOrderAccount/entity/ReceiptOrderAccount.java index 376d669d8..ebba803c2 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/receiptOrderAccount/entity/ReceiptOrderAccount.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/receiptOrderAccount/entity/ReceiptOrderAccount.java @@ -67,7 +67,7 @@ public class ReceiptOrderAccount extends BaseVOEntity { /**订单id*/ @ApiModelProperty(value = "订单id") @Excel(name = "订单id", width = 15) - private String orderId; + private Long orderId; /**科目id*/ @ApiModelProperty(value = "科目id") @Excel(name = "科目id", width = 15) @@ -84,6 +84,14 @@ public class ReceiptOrderAccount extends BaseVOEntity { @ApiModelProperty(value = "科目名称") @Excel(name = "科目名称", width = 15) private String subjectName; + /**费用类别*/ + @ApiModelProperty(value = "费用类别") + @Excel(name = "费用类别", width = 15) + private String serviceItemsCode; + /**费用类别*/ + @ApiModelProperty(value = "费用类别") + @Excel(name = "费用类别", width = 15) + private String serviceItemsName; /**科目费率*/ @ApiModelProperty(value = "科目费率") @Excel(name = "科目费率", width = 15) @@ -96,4 +104,12 @@ public class ReceiptOrderAccount extends BaseVOEntity { @ApiModelProperty(value = "金额") @Excel(name = "金额", width = 15) private BigDecimal settlementAmount; + + @ApiModelProperty(value = "数量") + @Excel(name = "数量", width = 15) + private BigDecimal num; + + @ApiModelProperty(value = "单价") + @Excel(name = "单价", width = 15) + private BigDecimal price; } \ No newline at end of file diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/repository/todo/StockReceiptOrderDO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/repository/todo/StockReceiptOrderDO.java index 1c889761a..97ed85d4f 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/repository/todo/StockReceiptOrderDO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/repository/todo/StockReceiptOrderDO.java @@ -3,6 +3,7 @@ package com.mhd.wms.domain.stockReceiptOrder.repository.todo; import com.fasterxml.jackson.annotation.JsonFormat; import com.mhd.common.core.annotation.Excel; import com.mhd.wms.domain.receiptMaterialDetail.repository.todo.ReceiptMaterialDetailDO; +import com.mhd.wms.domain.receiptOrderAccount.entity.ReceiptOrderAccount; import com.mhd.wms.domain.stockInOrder.repository.todo.StockInOrderBaseDO; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -169,4 +170,6 @@ public class StockReceiptOrderDO extends StockInOrderBaseDO { @ApiModelProperty("是否来自PDA收货:true-PDA收货完成,false-PC收货完成(用于上架单是否下发:PDA=是,PC=否)") private Boolean fromPda; -} + @ApiModelProperty("费用") + List receiptOrderAccountList; +} \ No newline at end of file diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java index fb68d7b01..82e41d5db 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java @@ -8,6 +8,7 @@ import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.mhd.common.core.constant.SnowFlakeConstants; +import com.mhd.common.core.domain.dto.BusinessDataPushDTO; import com.mhd.common.core.exception.ServiceException; import com.mhd.common.core.utils.IgnoreNullUtil; import com.mhd.common.core.utils.OrderSequence; @@ -16,6 +17,7 @@ import com.mhd.common.core.utils.bean.BeanUtils; import com.mhd.common.core.utils.uuid.IdGenerator; import com.mhd.common.core.web.domain.AjaxResult; import com.mhd.common.security.utils.SecurityUtils; +import com.mhd.system.api.BmsServiceFeign; import com.mhd.system.api.SystemServiceFeign; import com.mhd.system.api.domain.BatchDetailFeignPO; import com.mhd.system.api.domain.ContainerFeignPO; @@ -47,6 +49,8 @@ import com.mhd.wms.domain.receiptMaterialDetail.entity.ReceiptMaterialDetail; import com.mhd.wms.domain.receiptMaterialDetail.repository.facade.IReceiptMaterialDetailService; import com.mhd.wms.domain.receiptMaterialDetail.repository.po.ReceiptMaterialDetailPO; import com.mhd.wms.domain.receiptMaterialDetail.repository.todo.ReceiptMaterialDetailDO; +import com.mhd.wms.domain.receiptOrderAccount.entity.ReceiptOrderAccount; +import com.mhd.wms.domain.receiptOrderAccount.repository.facade.IReceiptOrderAccountService; import com.mhd.wms.domain.shelfMaterialDetail.repository.todo.ShelfMaterialDetailDO; import com.mhd.wms.domain.stockInOrder.entity.StockInOrder; import com.mhd.wms.domain.stockInOrder.repository.facade.IStockInOrderService; @@ -64,6 +68,7 @@ import com.mhd.wms.domain.stockShelfOrder.repository.po.StockShelfOrderPO; import com.mhd.wms.domain.stockShelfOrder.repository.todo.StockShelfOrderDO; import com.mhd.wms.domain.stockShelfOrder.service.StockShelfOrderDomainService; import com.mhd.wms.domain.taskReceiptMaterialDetail.repository.todo.TaskReceiptMaterialDetailDO; +import io.swagger.annotations.ApiModelProperty; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -121,6 +126,10 @@ public class StockReceiptOrderDomainService { private IContainerUsageRecordService containerUsageRecordService; @Resource private SystemServiceFeign systemServiceFeign; + @Resource + private BmsServiceFeign bmsServiceFeign; + @Autowired + private IReceiptOrderAccountService receiptOrderAccountService; /** * 分页查询收货单列表 @@ -410,7 +419,7 @@ public class StockReceiptOrderDomainService { genStockReceiptTaskOrderByReceivingGoods(stockReceiptOrderPO,stockReceiptOrderDO); //收货后上架前 生成质检 genQualityInspectionByReceivingGoods(stockReceiptOrderDO); - + saveAmount(stockReceiptOrderDO); //更新入库单状态 updateStockInOrder(stockReceiptOrderPO); //修改收货单 设置收货单收货需要更新的数据数据 @@ -418,6 +427,68 @@ public class StockReceiptOrderDomainService { } + private void saveAmount(StockReceiptOrderDO stockReceiptOrderDO) { + Long receiptOrderId = stockReceiptOrderDO.getReceiptOrderId(); + List receiptOrderAccountList = stockReceiptOrderDO.getReceiptOrderAccountList(); + for (ReceiptOrderAccount receiptOrderAccount : receiptOrderAccountList) { + receiptOrderAccount.setOrderId(receiptOrderId); + } + receiptOrderAccountService.remove(new QueryWrapper().lambda().eq(ReceiptOrderAccount::getOrderId, receiptOrderId)); + receiptOrderAccountService.saveBatch(receiptOrderAccountList); + } + + /** + * 定时任务整租推送到bms装卸费 + */ + public void wholeRentSynchronizationZXF(Long busId) { + StockInOrder stockInOrder = stockInOrderService.getById(busId); + Long shipperId = stockInOrder.getShipperId(); + Long organizationId = stockInOrder.getOrganizationId(); + String organizationName = stockInOrder.getOrganizationName(); + Long topOrganizationId = stockInOrder.getTopOrganizationId(); + List accounts = receiptOrderAccountService.list(new QueryWrapper().lambda().eq(ReceiptOrderAccount::getOrderId, busId)); + for (ReceiptOrderAccount account : accounts) { + String subjectCode = account.getSubjectCode(); + String subjectName = account.getSubjectName(); + String serviceItemsCode = account.getServiceItemsCode(); + if (shipperId == null) { + continue; + } + log.info("开始执行{}", com.alibaba.fastjson.JSONObject.toJSONString(stockInOrder)); + BusinessDataPushDTO businessDataPushDTO = new BusinessDataPushDTO(); + businessDataPushDTO.setOrganizationId(organizationId); + businessDataPushDTO.setTopOrganizationId(topOrganizationId); + businessDataPushDTO.setOrganizationName(organizationName); + businessDataPushDTO.setBelongModuleCode("wms"); + businessDataPushDTO.setBillAmount(account.getAmount());//计费金额 + businessDataPushDTO.setEstimatedCost(account.getSettlementAmount());//计算金额 + com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject(); + if ("".equals(subjectName)) { + jsonObject.put("loading_unloading_unit_price", account.getPrice());//装卸货单价 + jsonObject.put("cargo_quantity",account.getNum());//货物数量 + } else if ("".equals(subjectName)) { + jsonObject.put("wooden_case_labeling_unit_price", account.getPrice());//木箱单价 + jsonObject.put("carton_labeling_unit_price",account.getPrice());//纸箱单价 + jsonObject.put("wooden_case_quantity",account.getNum());//木箱数量 + jsonObject.put("carton_quantity",account.getNum());//纸箱数量 + } else if ("".equals(subjectName)) { + jsonObject.put("cargo_quantity", account.getNum());//货物数量 + jsonObject.put("warehouse_handling_unit_price",account.getPrice());//进出仓操作费单价 + } + businessDataPushDTO.setDocumentFormJson(jsonObject.toJSONString()); + businessDataPushDTO.setDocumentTypeCode("WMS_ckjccd"); + businessDataPushDTO.setSettlementEntityId(shipperId); + businessDataPushDTO.setSecondSubjectCode(subjectCode); + businessDataPushDTO.setServiceItemsCode(serviceItemsCode); + businessDataPushDTO.setDataSources(1); + + //businessDataPushDTO.setSettlementCurrency(leasePO.getSettlementCurrency()); + //businessDataPushDTO.setSalesmanId(leasePO.getSalesmanId()); + bmsServiceFeign.businessDocumentApiSave(businessDataPushDTO); + } + log.info("定时任务整租推送到bms触发--结束"); + } + /** * 同步更新入库单明细的收货数量(总毛重/总净重/总面积/总体积不再写入入库单明细,逻辑已注释保留) * 根据收货单明细中填写的数据,按 materialDetailId 分组汇总后更新到入库单明细 @@ -632,6 +703,8 @@ public class StockReceiptOrderDomainService { //收货数量大于等于计划数量 直接完成收货 if (stockReceiptOrder.getReceiptQuantity().compareTo(stockReceiptOrderPO.getQuantity()) >= 0 && receiptMaterialQuantity == 0){ completeReceipt(stockReceiptOrderPO.getReceiptOrderId(), stockReceiptOrderDO.getFromPda()); + //推送bms + wholeRentSynchronizationZXF(stockReceiptOrderPO.getReceiptOrderId()); } return true; } @@ -713,13 +786,16 @@ public class StockReceiptOrderDomainService { } // 完成收货:同步更新本单全部明细收货状态(与整单收货 entireReceipt 一致,否则 PDA/列表仍显示收货中) updateReceiptMaterialDetailReceiptStatusWhenOrderCompleted(stockReceiptOrderPO, loginUser, userRealName); - return stockReceiptOrderService.update(null, new UpdateWrapper().lambda() - .set(StockReceiptOrder::getStatus, 3) - .set(StockReceiptOrder::getAbnormal, abnormal) - .set(StockReceiptOrder::getUpdateBy, loginUser.getUserid()) - .set(StockReceiptOrder::getUpdateByName, loginUser.getUsername()) - .set(StockReceiptOrder::getUpdateTime, new Date()) - .eq(StockReceiptOrder::getReceiptOrderId, receiptOrderId)); + boolean update = stockReceiptOrderService.update(null, new UpdateWrapper().lambda() + .set(StockReceiptOrder::getStatus, 3) + .set(StockReceiptOrder::getAbnormal, abnormal) + .set(StockReceiptOrder::getUpdateBy, loginUser.getUserid()) + .set(StockReceiptOrder::getUpdateByName, loginUser.getUsername()) + .set(StockReceiptOrder::getUpdateTime, new Date()) + .eq(StockReceiptOrder::getReceiptOrderId, receiptOrderId)); + //推送bms + wholeRentSynchronizationZXF(receiptOrderId); + return update; } /** diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/stockReceiptOrder/StockReceiptOrderDTO.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/stockReceiptOrder/StockReceiptOrderDTO.java index 0aa13cf00..c8d636b29 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/stockReceiptOrder/StockReceiptOrderDTO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/stockReceiptOrder/StockReceiptOrderDTO.java @@ -2,6 +2,7 @@ package com.mhd.wms.interfaces.dto.stockReceiptOrder; import com.fasterxml.jackson.annotation.JsonFormat; import com.mhd.common.core.annotation.Excel; +import com.mhd.wms.domain.receiptOrderAccount.entity.ReceiptOrderAccount; import com.mhd.wms.interfaces.dto.receiptMaterialDetail.ReceiptMaterialDetailDTO; import com.mhd.wms.interfaces.dto.stockInOrder.StockInOrderBaseDTO; import io.swagger.annotations.ApiModelProperty; @@ -152,4 +153,7 @@ public class StockReceiptOrderDTO extends StockInOrderBaseDTO { @ApiModelProperty(name = "创建时间查询条件结束日期") private String createTimeEnd; -} + + @ApiModelProperty("费用") + List receiptOrderAccountList; +} \ No newline at end of file