From bceb5d5d5a904a13cfd14d908c28a98991af136a Mon Sep 17 00:00:00 2001 From: yinq Date: Wed, 20 Aug 2025 15:25:13 +0800 Subject: [PATCH] =?UTF-8?q?change=20-=20=E6=88=90=E5=93=81=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E8=BD=AC=E9=94=80=E5=94=AE=E8=AE=A2=E5=8D=95=E3=80=81?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E8=AE=A2=E5=8D=95=E5=90=AB=E7=A8=8E=E5=8D=95?= =?UTF-8?q?=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hw/mes/api/domain/MesPurchaseOrder.java | 11 ++++ .../mes/MesPurchaseReceiveBillMapper.xml | 10 ++-- .../controller/WmsStockTotalController.java | 12 ++++ .../domain/vo/WmsStockTotalTransferVo.java | 6 ++ .../hw/wms/service/IWmsStockTotalService.java | 8 +++ .../impl/WmsStockTotalServiceImpl.java | 51 ++++++++++++++++ .../mapper/wms/WmsProductStockMapper.xml | 1 + hw-ui/src/api/wms/stocktotal.js | 10 ++++ .../views/mes/saleOrder/selectSaleOrder.vue | 12 +++- hw-ui/src/views/wms/info/stocktotal/index.vue | 58 ++++++++++++++----- 10 files changed, 159 insertions(+), 20 deletions(-) diff --git a/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/MesPurchaseOrder.java b/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/MesPurchaseOrder.java index ac0a00cb..bb14ac5c 100644 --- a/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/MesPurchaseOrder.java +++ b/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/MesPurchaseOrder.java @@ -310,6 +310,17 @@ public class MesPurchaseOrder extends BaseEntity { */ private BigDecimal actLandAmount; + //含税单价 + private BigDecimal fTaxPrice; + + public BigDecimal getfTaxPrice() { + return fTaxPrice; + } + + public void setfTaxPrice(BigDecimal fTaxPrice) { + this.fTaxPrice = fTaxPrice; + } + public BigDecimal getActLandAmount() { return actLandAmount; } diff --git a/hw-modules/hw-mes/src/main/resources/mapper/mes/MesPurchaseReceiveBillMapper.xml b/hw-modules/hw-mes/src/main/resources/mapper/mes/MesPurchaseReceiveBillMapper.xml index 66dc6efc..ce15190c 100644 --- a/hw-modules/hw-mes/src/main/resources/mapper/mes/MesPurchaseReceiveBillMapper.xml +++ b/hw-modules/hw-mes/src/main/resources/mapper/mes/MesPurchaseReceiveBillMapper.xml @@ -195,12 +195,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" mprb.update_by, mprb.update_time, mpo.purchase_order_id, - IF(EXISTS (SELECT 1 - FROM mes_base_barcode_info - WHERE receive_bill_id = mprb.receive_bill_id), '1', '0') AS has_barcode_flag + CASE WHEN mbbi.receive_bill_id IS NOT NULL THEN '1' ELSE '0' END AS has_barcode_flag from mes_purchase_receive_bill mprb - left join mes_purchase_order mpo on mprb.po_no = mpo.po_no and mprb.material_id = mpo.material_id + left join mes_purchase_order mpo on mprb.fs_id = mpo.fentry_id left join mes_base_material_info mbmi on mprb.material_id = mbmi.erp_id + LEFT JOIN (SELECT DISTINCT receive_bill_id FROM mes_base_barcode_info) mbbi + ON mprb.receive_bill_id = mbbi.receive_bill_id and mprb.bill_no like concat('%', #{billNo}, '%') and mprb.po_no like concat('%', #{poNo}, '%') @@ -209,7 +209,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and mbmi.material_spec like concat('%', #{materialSpec}, '%') and mbmi.material_id is not null - and IF(EXISTS (SELECT 1 FROM mes_base_barcode_info WHERE receive_bill_id = mprb.receive_bill_id), '1', '0') = #{hasBarcodeFlag} + and IF(mbbi.receive_bill_id IS NOT NULL, '1', '0') = #{hasBarcodeFlag} order by mprb.erp_modify_date desc diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsStockTotalController.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsStockTotalController.java index b943a943..6cdd3d04 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsStockTotalController.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsStockTotalController.java @@ -168,4 +168,16 @@ public class WmsStockTotalController extends BaseController { return toAjax(wmsStockTotalService.transferProductStockTotal(wmsStockTotalTransferVo)); } + + /** + * 成品库存转销售订单(或将有销售订单的转安全库存) + */ + @RequiresPermissions("wms:stocktotal:transferProduct") + @Log(title = "成品库存", businessType = BusinessType.TRANSFER) + @PostMapping("/transferProductStock") + public AjaxResult transferProductStock(@RequestBody WmsStockTotalTransferVo wmsStockTotalTransferVo) + { + return toAjax(wmsStockTotalService.transferProductStock(wmsStockTotalTransferVo)); + } + } diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsStockTotalTransferVo.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsStockTotalTransferVo.java index a562093c..3c8bf6f4 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsStockTotalTransferVo.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsStockTotalTransferVo.java @@ -39,4 +39,10 @@ public class WmsStockTotalTransferVo { //序号 @NotNull(message = "序号必须输入") private int index; + + /** + * 成品库存ID + */ + private Long productStockId; + } diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsStockTotalService.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsStockTotalService.java index 03e90000..bfe70a3c 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsStockTotalService.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsStockTotalService.java @@ -125,4 +125,12 @@ public interface IWmsStockTotalService * @return 原材料库存 */ public List selectWmsStockTotalExportList(WmsStockTotal wmsStockTotal); + + /** + * 成品库存转销售订单(或将有销售订单的转安全库存) + * @param wmsStockTotalTransferVo + * @return + */ + int transferProductStock(WmsStockTotalTransferVo wmsStockTotalTransferVo); + } diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsStockTotalServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsStockTotalServiceImpl.java index 2becccee..18beb71c 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsStockTotalServiceImpl.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsStockTotalServiceImpl.java @@ -526,4 +526,55 @@ public class WmsStockTotalServiceImpl implements IWmsStockTotalService { return wmsStockTotalMapper.selectWmsStockTotalExportList(wmsStockTotal); } + /** + * 成品库存转销售订单(或将有销售订单的转安全库存) + * @param wmsStockTotalTransferVo + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int transferProductStock(WmsStockTotalTransferVo wmsStockTotalTransferVo) { + BigDecimal transferAmount = wmsStockTotalTransferVo.getTransferAmount(); + String safeFlag = wmsStockTotalTransferVo.getSafeFlag(); + Long saleOrderId = wmsStockTotalTransferVo.getSaleOrderId(); + String saleorderCode = wmsStockTotalTransferVo.getSaleorderCode(); + Long productStockId = wmsStockTotalTransferVo.getProductStockId(); + + WmsProductStock wmsProductStock = wmsProductStockMapper.selectWmsProductStockByProductStockId(productStockId); + if (StringUtils.isNull(wmsProductStock)) { + throw new ServiceException("没有可转库存明细"); + } + Long saleOrderIdOld = wmsProductStock.getSaleOrderId(); + Long materialId = wmsProductStock.getProductId(); + + List mesBaseBarcodeInfoTransferVos = new ArrayList<>(); + MesBaseBarcodeInfoTransferVo mesBaseBarcodeInfoTransferVo = new MesBaseBarcodeInfoTransferVo(); + mesBaseBarcodeInfoTransferVo.setSaleOrderId(saleOrderId); + mesBaseBarcodeInfoTransferVo.setSaleOrderCode(saleorderCode); + mesBaseBarcodeInfoTransferVo.setSafeFlag(safeFlag); + mesBaseBarcodeInfoTransferVo.setBarcodeInfo(wmsProductStock.getProductBatch()); + mesBaseBarcodeInfoTransferVos.add(mesBaseBarcodeInfoTransferVo); + + wmsProductStock.setSafeFlag(safeFlag); + wmsProductStock.setSaleOrderId(saleOrderId); + wmsProductStock.setSaleorderCode(saleorderCode == null ? "" : saleorderCode); + wmsProductStock.setUpdateDate(new Date()); + wmsProductStock.setUpdateBy(SecurityUtils.getLoginUser()==null ? SecurityUtils.getUsername() :SecurityUtils.getLoginUser().getNickname()); + wmsProductStockMapper.updateWmsProductStock(wmsProductStock); + + MesSaleOrderTransferVo mesSaleOrderTransferVo = new MesSaleOrderTransferVo(); + mesSaleOrderTransferVo.setTransferAmount(transferAmount); + mesSaleOrderTransferVo.setOldSaleOrderId(saleOrderIdOld); + mesSaleOrderTransferVo.setNewSaleOrderId(saleOrderId); + mesSaleOrderTransferVo.setMaterialId(materialId); + mesSaleOrderTransferVo.setMesBaseBarcodeInfoTransferVos(mesBaseBarcodeInfoTransferVos); + + R transferBaseBarcodeInfosResult = remoteMesService.transferSaleOrders(mesSaleOrderTransferVo, SecurityConstants.INNER); + if (transferBaseBarcodeInfosResult.getCode() != Constants.SUCCESS) {//抛出异常,回滚事务 + throw new RuntimeException(transferBaseBarcodeInfosResult.getMsg()); + } + + return 1; + } + } diff --git a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsProductStockMapper.xml b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsProductStockMapper.xml index 6c7ef402..7217ce81 100644 --- a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsProductStockMapper.xml +++ b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsProductStockMapper.xml @@ -340,6 +340,7 @@ and wps.warehouse_id = #{warehouseId} and wps.product_id = #{productId} and wps.sale_order_id = #{saleOrderId} + and wps.product_stock_id = #{productStockId} order by wbl.loc_column asc, wbl.loc_deep desc limit #{params.limit} diff --git a/hw-ui/src/api/wms/stocktotal.js b/hw-ui/src/api/wms/stocktotal.js index f8b76879..cff4b13b 100644 --- a/hw-ui/src/api/wms/stocktotal.js +++ b/hw-ui/src/api/wms/stocktotal.js @@ -99,3 +99,13 @@ export function selectMaterialInfosByVirtualMaterialId(params) { params: params }) } + + +// 成品库存转销售订单(或将有销售订单的转安全库存) +export function transferProductStock(data) { + return request({ + url: '/wms/stocktotal/transferProductStock', + method: 'post', + data: data + }) +} diff --git a/hw-ui/src/views/mes/saleOrder/selectSaleOrder.vue b/hw-ui/src/views/mes/saleOrder/selectSaleOrder.vue index 00be353f..da4c8147 100644 --- a/hw-ui/src/views/mes/saleOrder/selectSaleOrder.vue +++ b/hw-ui/src/views/mes/saleOrder/selectSaleOrder.vue @@ -27,6 +27,16 @@ /> + + + + + 转库存 - + 成品转库存 + @@ -288,7 +296,7 @@ - + @@ -347,7 +355,7 @@ import { transferRaw, transferRawStockTotal, transferProductStockTotal, - selectMaterialInfosByVirtualMaterialId + selectMaterialInfosByVirtualMaterialId, transferProductStock } from "@/api/wms/stocktotal"; import {getWarehouses,} from "@//api/wms/wmslocation"; import selectSaleOrder from '@//views/mes/saleOrder/selectSaleOrder.vue'; @@ -687,6 +695,20 @@ export default { this.open = true; }, + handleProductStockTotalTransfer(row) { + this.reset(); + this.transferType = "2"; + let index = this.rawstockList.indexOf(row) + this.form.safeFlag = "0"; + this.form.materialId = row.productId + this.form.productStockId = row.productStockId + this.form.transferAmount = row.totalAmount + this.form.stockTotalId = row.stockTotalId; + this.form.index = index; + this.rawStockInfosStr = "序号:" + (index + 1) + ",物料编码:" + row.materialCode + " 物料名称:" + row.materialName + " 物料规格:" + row.materialSpec + " 数量:" + row.totalAmount + " 销售订单:" + (row.saleorderCode ? row.saleorderCode : "无"); + this.open = true; + }, + // handleTransfer() { // this.reset(); // this.transferType = "2"; @@ -731,17 +753,25 @@ export default { this.submitLoading = false; return; } - - - - transferProductStockTotal(this.form).then(response => { - this.$modal.msgSuccess("转库存成功"); - this.open = false; - this.getList(); - this.getTwoList(); - }).finally(e=>{ - this.submitLoading = false; - }); + if (this.transferType === '1'){ + transferProductStockTotal(this.form).then(response => { + this.$modal.msgSuccess("转库存成功"); + this.open = false; + this.getList(); + this.getTwoList(); + }).finally(e=>{ + this.submitLoading = false; + }); + } else if (this.transferType === '2'){ + transferProductStock(this.form).then(response => { + this.$modal.msgSuccess("转库存成功"); + this.open = false; + this.getList(); + this.getTwoList(); + }).finally(e=>{ + this.submitLoading = false; + }); + } } else if (this.type === this.STOCK_TYPE.RAW) { if (this.transferType === '1') {//转总库存的原材料库存 if(this.form.transferAmount < 1){