From 020a7daa1f5626801f39c1ae5e987a3f5cb87ae0 Mon Sep 17 00:00:00 2001 From: wanghao Date: Wed, 3 Dec 2025 14:09:39 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E5=85=A5=E5=BA=93=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E5=BA=93=E5=AD=98=E6=98=AF=E5=90=A6=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=EF=BC=8C=E6=9B=B4=E6=96=B0=E6=88=96=E6=96=B0=E5=A2=9E=E5=BA=93?= =?UTF-8?q?=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/domain/WmsInventoryDetails.java | 1 + .../wms/domain/bo/WmsInventoryDetailsBo.java | 2 +- .../wms/mapper/WmsInventoryLedgerMapper.java | 2 + .../service/IWmsInventoryDetailsService.java | 3 +- .../impl/WmsInStockBillServiceImpl.java | 61 ++++++++++++++----- .../impl/WmsInventoryDetailsServiceImpl.java | 26 ++++---- .../impl/WmsOutStockBillServiceImpl.java | 14 +++++ 7 files changed, 78 insertions(+), 31 deletions(-) diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsInventoryDetails.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsInventoryDetails.java index e002eb46..a8b33c16 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsInventoryDetails.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsInventoryDetails.java @@ -51,6 +51,7 @@ public class WmsInventoryDetails extends TenantEntity { * 库存数量 */ private Double inventoryAmount; + private Double startInventoryAmount; /** * 物料单位 diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsInventoryDetailsBo.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsInventoryDetailsBo.java index 379fd70f..d8236af1 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsInventoryDetailsBo.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsInventoryDetailsBo.java @@ -50,7 +50,7 @@ public class WmsInventoryDetailsBo extends BaseEntity { * 库存数量 */ private Double inventoryAmount; - + private Double startInventoryAmount; /** * 锁定数量 */ diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/mapper/WmsInventoryLedgerMapper.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/mapper/WmsInventoryLedgerMapper.java index 126118e8..d6e03026 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/mapper/WmsInventoryLedgerMapper.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/mapper/WmsInventoryLedgerMapper.java @@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.Param; import org.dromara.wms.domain.WmsInventoryLedger; import org.dromara.wms.domain.vo.WmsInventoryLedgerVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.springframework.stereotype.Repository; /** * 库存变动台账Mapper接口 @@ -15,6 +16,7 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; * @author Yinq * @date 2025-12-02 */ +@Repository public interface WmsInventoryLedgerMapper extends BaseMapperPlus { /** diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsInventoryDetailsService.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsInventoryDetailsService.java index 079038c2..70664351 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsInventoryDetailsService.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsInventoryDetailsService.java @@ -67,7 +67,8 @@ public interface IWmsInventoryDetailsService { */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); - void insertList(List inventoryDetailsList); TableDataInfo listCount(WmsInventoryDetailsBo bo, PageQuery pageQuery); + + WmsInventoryDetails queryInventory(WmsInventoryDetailsBo inventory); } diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsInStockBillServiceImpl.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsInStockBillServiceImpl.java index a352bf11..4e1e8a2a 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsInStockBillServiceImpl.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsInStockBillServiceImpl.java @@ -14,13 +14,15 @@ import org.dromara.system.api.RemoteCodeRuleService; import org.dromara.wms.domain.WmsInStockBill; import org.dromara.wms.domain.WmsInStockDetails; import org.dromara.wms.domain.WmsInventoryDetails; +import org.dromara.wms.domain.WmsInventoryLedger; import org.dromara.wms.domain.bo.WmsInStockBillBo; +import org.dromara.wms.domain.bo.WmsInventoryDetailsBo; import org.dromara.wms.domain.vo.WmsInStockBillVo; import org.dromara.wms.mapper.WmsInStockBillMapper; import org.dromara.wms.mapper.WmsInStockDetailsMapper; +import org.dromara.wms.mapper.WmsInventoryLedgerMapper; import org.dromara.wms.service.IWmsInStockBillService; import org.dromara.wms.service.IWmsInventoryDetailsService; -import org.dromara.wms.service.IWmsWarehouseInfoService; import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.domain.RemoteStartProcess; import org.dromara.workflow.api.event.ProcessEvent; @@ -42,7 +44,8 @@ public class WmsInStockBillServiceImpl implements IWmsInStockBillService { private final WmsInStockBillMapper baseMapper; private final WmsInStockDetailsMapper wmsInStockDetailsMapper; private final IWmsInventoryDetailsService inventoryService; - private final IWmsWarehouseInfoService warehouseService; + // private final IWmsWarehouseInfoService warehouseService; + private final WmsInventoryLedgerMapper wmsInventoryLedgerMapper; @DubboReference private RemoteCodeRuleService remoteCodeRuleService; @DubboReference(timeout = 30000)//超时时间 @@ -110,31 +113,57 @@ public class WmsInStockBillServiceImpl implements IWmsInStockBillService { @Override public Boolean insertByBo(WmsInStockBillBo bo) { WmsInStockBill add = MapstructUtils.convert(bo, WmsInStockBill.class); - add.setInStockCode(remoteCodeRuleService.selectCodeRuleCode("1005")); + String inStockType = add.getInStockType(); + add.setInStockCode(remoteCodeRuleService.selectCodeRuleCode("1005"));// 物料入库编码 add.setInStockBillStatus("3"); - boolean flag = baseMapper.insert(add) > 0; + boolean flag = baseMapper.insert(add) > 0;//插入主表 if (flag) { Long inStockBillId = add.getInStockBillId(); List inStockDetailsList = bo.getInStockDetailsList(); - List inventoryDetailsList = new ArrayList<>(inStockDetailsList.size());//库存集合 + List wmsInventoryLedgers = new ArrayList<>(inStockDetailsList.size());//库存集合 Long projectId = bo.getProjectId();// 项目ID inStockDetailsList.forEach(item -> { item.setInStockBillId(inStockBillId); // 设置入库单明细的入库单ID item.setProjectId(projectId); // 关联项目 - - WmsInventoryDetails inventory = new WmsInventoryDetails(); - inventory.setWarehouseId(item.getWarehouseId()); // 关联仓库 - inventory.setProjectId(projectId); // 关联项目 - inventory.setBatchNumber(item.getBatchNumber()); // 关联批次号 - inventory.setMaterielId(item.getMaterialId()); // 关联物料 - inventory.setUnitPrice(item.getUnitPrice()); Double inStockAmount = item.getInStockAmount(); - inventory.setInventoryAmount(inStockAmount); - inventory.setStartInventoryAmount(inStockAmount); // 初始库存数量 - inventoryDetailsList.add(inventory); + Double inventoryTableAmount = 0.0;// 库存表数量 + // 构建库存明细 + WmsInventoryDetailsBo inventory = new WmsInventoryDetailsBo(); + inventory.setWarehouseId(item.getWarehouseId()); + inventory.setProjectId(projectId); + inventory.setBatchNumber(item.getBatchNumber()); + inventory.setMaterielId(item.getMaterialId()); + inventory.setUnitPrice(item.getUnitPrice()); + // 查询相同项目 相同仓库 相同批次 相同单价的物料 + WmsInventoryDetails queryInventory = inventoryService.queryInventory(inventory); + if (queryInventory != null) { + WmsInventoryDetailsBo inventoryUpdate = new WmsInventoryDetailsBo(); + inventoryUpdate.setInventoryDetailsId(queryInventory.getInventoryDetailsId()); + inventoryTableAmount = queryInventory.getInventoryAmount() ; + inventoryUpdate.setInventoryAmount(inventoryTableAmount+ inStockAmount); + inventoryService.updateByBo(inventoryUpdate); // 更新库存数量 + } else { + + inventory.setUnitName(item.getUnitName()); + inventory.setInventoryAmount(inStockAmount); + inventory.setStartInventoryAmount(inStockAmount); // 初始库存数量 + inventoryService.insertByBo(inventory); + } + + + //库存变动 + WmsInventoryLedger wmsInventoryLedger = new WmsInventoryLedger(); + wmsInventoryLedger.setWarehouseId(item.getWarehouseId()); + wmsInventoryLedger.setBatchNumber(item.getBatchNumber()); + wmsInventoryLedger.setMaterielId(item.getMaterialId()); + wmsInventoryLedger.setChangeType(inStockType);//变动类型 + wmsInventoryLedger.setLedgerState("1"); + wmsInventoryLedger.setChangeAmount(inStockAmount); + wmsInventoryLedger.setInventoryAmount(inventoryTableAmount); + wmsInventoryLedgers.add(wmsInventoryLedger); }); wmsInStockDetailsMapper.insert(inStockDetailsList); //插入子表 - inventoryService.insertList(inventoryDetailsList); //插入库存 + wmsInventoryLedgerMapper.insert(wmsInventoryLedgers); } return flag; } diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsInventoryDetailsServiceImpl.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsInventoryDetailsServiceImpl.java index 4ca7c339..1cf4ade9 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsInventoryDetailsServiceImpl.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsInventoryDetailsServiceImpl.java @@ -127,7 +127,6 @@ public class WmsInventoryDetailsServiceImpl implements IWmsInventoryDetailsServi @Override public Boolean insertByBo(WmsInventoryDetailsBo bo) { WmsInventoryDetails add = MapstructUtils.convert(bo, WmsInventoryDetails.class); - validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setInventoryDetailsId(add.getInventoryDetailsId()); @@ -144,16 +143,9 @@ public class WmsInventoryDetailsServiceImpl implements IWmsInventoryDetailsServi @Override public Boolean updateByBo(WmsInventoryDetailsBo bo) { WmsInventoryDetails update = MapstructUtils.convert(bo, WmsInventoryDetails.class); - validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; } - /** - * 保存前的数据校验 - */ - private void validEntityBeforeSave(WmsInventoryDetails entity) { - //TODO 做一些数据校验,如唯一约束 - } /** * 校验并批量删除库存明细信息 @@ -164,14 +156,22 @@ public class WmsInventoryDetailsServiceImpl implements IWmsInventoryDetailsServi */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if (isValid) { - //TODO 做一些业务上的校验,判断是否需要校验 - } return baseMapper.deleteByIds(ids) > 0; } + + @Override - public void insertList(List inventoryDetailsList) { - baseMapper.insert(inventoryDetailsList); + public WmsInventoryDetails queryInventory(WmsInventoryDetailsBo bo) { + MPJLambdaWrapper lqw = JoinWrappers.lambda(WmsInventoryDetails.class) + .selectAll(WmsInventoryDetails.class) + .eq(StringUtils.isNotBlank(bo.getLocationCode()), WmsInventoryDetails::getLocationCode, bo.getLocationCode()) + .eq(bo.getWarehouseId() != null, WmsInventoryDetails::getWarehouseId, bo.getWarehouseId()) + .eq(bo.getMaterielId() != null, WmsInventoryDetails::getMaterielId, bo.getMaterielId()) + .eq(bo.getProjectId() != null, WmsInventoryDetails::getProjectId, bo.getProjectId()) + .eq(StringUtils.isNotBlank(bo.getBatchNumber()), WmsInventoryDetails::getBatchNumber, bo.getBatchNumber()) + .eq(bo.getUnitPrice() != null, WmsInventoryDetails::getUnitPrice, bo.getUnitPrice()); + + return baseMapper.selectOne(lqw); } } diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsOutStockBillServiceImpl.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsOutStockBillServiceImpl.java index a2deabde..7c247058 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsOutStockBillServiceImpl.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsOutStockBillServiceImpl.java @@ -10,14 +10,18 @@ import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.system.api.RemoteCodeRuleService; +import org.dromara.wms.domain.WmsInventoryDetails; import org.dromara.wms.domain.WmsOutStockBill; import org.dromara.wms.domain.WmsOutStockDetails; import org.dromara.wms.domain.bo.WmsOutStockBillBo; +import org.dromara.wms.domain.vo.WmsInventoryDetailsVo; import org.dromara.wms.domain.vo.WmsOutStockBillVo; +import org.dromara.wms.mapper.WmsInventoryDetailsMapper; import org.dromara.wms.mapper.WmsOutStockBillMapper; import org.dromara.wms.mapper.WmsOutStockDetailsMapper; import org.dromara.wms.service.IWmsOutStockBillService; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Collection; import java.util.List; @@ -37,6 +41,7 @@ public class WmsOutStockBillServiceImpl implements IWmsOutStockBillService { private final WmsOutStockDetailsMapper wmsOutStockDetailsMapper; @DubboReference private RemoteCodeRuleService remoteCodeRuleService; + private final WmsInventoryDetailsMapper wmsInventoryDetailsMapper; /** * 查询出库单 @@ -98,6 +103,7 @@ public class WmsOutStockBillServiceImpl implements IWmsOutStockBillService { * @return 是否新增成功 */ @Override + @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(WmsOutStockBillBo bo) { WmsOutStockBill add = MapstructUtils.convert(bo, WmsOutStockBill.class); add.setOutStockCode(remoteCodeRuleService.selectCodeRuleCode("1006")); @@ -107,7 +113,15 @@ public class WmsOutStockBillServiceImpl implements IWmsOutStockBillService { Long outStockBillId = add.getOutStockBillId(); List outStockDetailsList = bo.getOutStockDetailsList(); outStockDetailsList.forEach(item -> { + item.setOutStockBillId(outStockBillId); + // 从出库明细中获取库存ID + Long inventoryId = item.getInventoryDetailsId(); + WmsInventoryDetails inventory = wmsInventoryDetailsMapper.selectById(inventoryId); + if (inventory.getInventoryAmount()