From 82e71ba10ae4763e73b3d12711d26bc011bb4f7a Mon Sep 17 00:00:00 2001 From: wanghao Date: Wed, 14 Jan 2026 17:15:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E5=87=BA=E5=BA=93=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=87=BA=E5=BA=93=E7=8A=B6=E6=80=81=EF=BC=8C=E8=A1=A5?= =?UTF-8?q?=E5=BD=95=E9=A1=B9=E7=9B=AE=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WmsOutStockBillController.java | 7 ++ .../dromara/wms/domain/WmsOutStockBill.java | 3 - .../wms/domain/WmsOutStockDetails.java | 9 +++ .../wms/domain/bo/WmsOutStockDetailsBo.java | 2 +- .../wms/domain/vo/WmsOutStockDetailsVo.java | 6 +- .../wms/mapper/WmsOutStockDetailsMapper.java | 11 +++ .../wms/service/IWmsOutStockBillService.java | 2 + .../impl/WmsInventoryDetailsServiceImpl.java | 3 +- .../impl/WmsOutStockBillServiceImpl.java | 67 +++++++++++++++---- .../impl/WmsOutStockDetailsServiceImpl.java | 6 +- .../mapper/wms/WmsOutStockDetailsMapper.xml | 11 +++ 11 files changed, 106 insertions(+), 21 deletions(-) diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsOutStockBillController.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsOutStockBillController.java index a21c3889..4e605d2b 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsOutStockBillController.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsOutStockBillController.java @@ -123,4 +123,11 @@ public class WmsOutStockBillController extends BaseController { public R deliver(@PathVariable("outStockBillId") Long outStockBillId) { return toAjax(wmsOutStockBillService.deliver(outStockBillId)); } + + @GetMapping("/updateOutStockBillProject") + public R updateOutStockBillProject(WmsOutStockBillBo bo) { + return toAjax( wmsOutStockBillService.updateOutStockBillProject(bo)); + } + + } diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsOutStockBill.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsOutStockBill.java index 4362a865..244ee353 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsOutStockBill.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsOutStockBill.java @@ -67,9 +67,6 @@ public class WmsOutStockBill extends TenantEntity { */ private String directions; - /** - * 出库(单状态1暂存 2审批中 3完成) - */ private String outStockBillStatus; /** diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsOutStockDetails.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsOutStockDetails.java index 15ba663f..5611203e 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsOutStockDetails.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/WmsOutStockDetails.java @@ -87,6 +87,7 @@ public class WmsOutStockDetails extends TenantEntity { * 库存ID */ private Long inventoryDetailsId; + private String outState; //出库状态 0未出库 1已出库 @TableField(exist = false) @@ -108,4 +109,12 @@ public class WmsOutStockDetails extends TenantEntity { * 成品描述 */ private String productSpe; + + + /** + * 库存数量 + */ + @TableField(exist = false) + private Double inventoryAmount; + } diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsOutStockDetailsBo.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsOutStockDetailsBo.java index cb9259f1..fa754dc5 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsOutStockDetailsBo.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/bo/WmsOutStockDetailsBo.java @@ -50,7 +50,7 @@ public class WmsOutStockDetailsBo extends BaseEntity { * 出库数量 */ private Double outStockAmount; - + private String outState; //出库状态 0未出库 1已出库 /** * 单位 */ diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/vo/WmsOutStockDetailsVo.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/vo/WmsOutStockDetailsVo.java index 8eb1bc37..16d7776b 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/vo/WmsOutStockDetailsVo.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/domain/vo/WmsOutStockDetailsVo.java @@ -155,5 +155,9 @@ public class WmsOutStockDetailsVo implements Serializable { @ExcelProperty(value = "库存ID") private Long inventoryDetailsId; - + /** + * 库存数量 + */ + private Double inventoryAmount; + private String outState; //出库状态 0未出库 1已出库 } diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/mapper/WmsOutStockDetailsMapper.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/mapper/WmsOutStockDetailsMapper.java index b53942d7..8426b1dc 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/mapper/WmsOutStockDetailsMapper.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/mapper/WmsOutStockDetailsMapper.java @@ -1,5 +1,6 @@ package org.dromara.wms.mapper; +import java.util.Collection; import java.util.List; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.baomidou.mybatisplus.core.toolkit.Constants; @@ -36,4 +37,14 @@ public interface WmsOutStockDetailsMapper extends BaseMapperPlus selectCustomWmsOutStockDetailsVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + /** + * 更新出库单明细的项目ID + * + * @param outStockBillId 出库单ID + * @param projectId 项目ID + * @param outStockBillStatus + */ + void updateOutProjectIdByBillsId(@Param("outStockBillId") Long outStockBillId, @Param("projectId") Long projectId,@Param("outStockBillStatus") String outStockBillStatus); + + void deleteDetailsByBillIds(@Param("ids")Collection ids); } diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsOutStockBillService.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsOutStockBillService.java index 09504512..7a251749 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsOutStockBillService.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsOutStockBillService.java @@ -69,4 +69,6 @@ public interface IWmsOutStockBillService { Boolean deleteWithValidByIds(Collection ids, Boolean isValid); Boolean deliver(@NotEmpty(message = "主键不能为空") Long outStockBillId); + + Boolean updateOutStockBillProject(WmsOutStockBillBo bo); } 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 b80c7ffe..8e02fe43 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 @@ -107,6 +107,7 @@ public class WmsInventoryDetailsServiceImpl implements IWmsInventoryDetailsServi .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.getInventoryAmount() != null, WmsInventoryDetails::getInventoryAmount, bo.getInventoryAmount()) .eq(bo.getLockedAmount() != null, WmsInventoryDetails::getLockedAmount, bo.getLockedAmount()) @@ -118,7 +119,7 @@ public class WmsInventoryDetailsServiceImpl implements IWmsInventoryDetailsServi .select(WmsBaseProduct::getProductCode, WmsBaseProduct::getProductName, WmsBaseProduct::getExternalBrand, WmsBaseProduct::getProductSpe) .like(StringUtils.isNotBlank(bo.getProductCode()), WmsBaseProduct::getProductCode, bo.getProductCode()) .like(StringUtils.isNotBlank(bo.getProductName()), WmsBaseProduct::getProductName, bo.getProductName()) - .eq(StringUtils.isNotBlank(bo.getExternalBrand()), WmsBaseProduct::getExternalBrand, bo.getExternalBrand()); + .like(StringUtils.isNotBlank(bo.getExternalBrand()), WmsBaseProduct::getExternalBrand, bo.getExternalBrand()); return 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 fb63b440..30d68698 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 @@ -6,18 +6,15 @@ import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.RequiredArgsConstructor; import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.MapstructUtils; 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.common.satoken.utils.LoginHelper; import org.dromara.system.api.RemoteCodeRuleService; -import org.dromara.wms.domain.*; +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.WmsOutStockBillVo; -import org.dromara.wms.mapper.WmsInventoryDetailsMapper; -import org.dromara.wms.mapper.WmsInventoryLedgerMapper; import org.dromara.wms.mapper.WmsOutStockBillMapper; import org.dromara.wms.mapper.WmsOutStockDetailsMapper; import org.dromara.wms.service.IWmsInventoryDetailsService; @@ -25,8 +22,6 @@ import org.dromara.wms.service.IWmsOutStockBillService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.time.LocalDateTime; -import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; @@ -140,8 +135,22 @@ public class WmsOutStockBillServiceImpl implements IWmsOutStockBillService { @Override public Boolean updateByBo(WmsOutStockBillBo bo) { WmsOutStockBill update = MapstructUtils.convert(bo, WmsOutStockBill.class); + boolean b = baseMapper.updateById(update) > 0; + if (b) { + // 更新出库单明细 + Long outStockBillId = update.getOutStockBillId(); + MPJLambdaWrapper lqw = JoinWrappers.lambda(WmsOutStockDetails.class) + .eq(WmsOutStockDetails::getOutStockBillId, outStockBillId); + wmsOutStockDetailsMapper.delete(lqw); + List outStockDetailsList = bo.getOutStockDetailsList(); + outStockDetailsList.forEach(item -> { + item.setOutStockBillId(outStockBillId); + }); - return baseMapper.updateById(update) > 0; + wmsOutStockDetailsMapper.insert(outStockDetailsList); + + } + return b; } @@ -155,27 +164,57 @@ public class WmsOutStockBillServiceImpl implements IWmsOutStockBillService { @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - return baseMapper.deleteByIds(ids) > 0; + boolean b = baseMapper.deleteByIds(ids) > 0; + if (b) { + // 删除出库单明细 + wmsOutStockDetailsMapper.deleteDetailsByBillIds(ids); + } + return b; } @Override public Boolean deliver(Long outStockBillId) { + + WmsOutStockBill wmsOutStockBill = baseMapper.selectById(outStockBillId); + if (wmsOutStockBill == null) { + throw new ServiceException("出库单不存在"); + } + wmsOutStockBill.setOutStockBillStatus(wmsOutStockBill.getProjectId() == null ? "1" : "2");//出库单状态 1出库 2已完成 + baseMapper.updateById(wmsOutStockBill); + + // 子表 MPJLambdaWrapper lqw = JoinWrappers.lambda(WmsOutStockDetails.class) .selectAll(WmsOutStockDetails.class) .eq(WmsOutStockDetails::getOutStockBillId, outStockBillId); - // 校验出库单是否存在 List outStockDetailsList = wmsOutStockDetailsMapper.selectList(lqw); - if (outStockDetailsList == null || outStockDetailsList.isEmpty()) { - throw new ServiceException("出库单不存在"); - } + outStockDetailsList.forEach(item -> { item.setOutStockBillId(outStockBillId); + // 更新出库状态 + WmsOutStockDetails tag = new WmsOutStockDetails(); + tag.setOutStockDetailsId(item.getOutStockDetailsId()); + tag.setOutState("1"); + wmsOutStockDetailsMapper.updateById(tag); // 从出库明细中获取库存ID Long inventoryId = item.getInventoryDetailsId(); inventoryDetailsService.outStoreLossInventoryAmount(inventoryId, - item.getOutStockAmount(),item.getWarehouseId(),item.getBatchNumber(),item.getMaterielId(),"3"); + item.getOutStockAmount(), item.getWarehouseId(), item.getBatchNumber(), item.getMaterielId(), "3"); }); return true; } + + @Override + public Boolean updateOutStockBillProject(WmsOutStockBillBo bo) { + WmsOutStockBill update = MapstructUtils.convert(bo, WmsOutStockBill.class); + boolean b = baseMapper.updateById(update) > 0; + if (b) { + String outStockBillStatus = update.getOutStockBillStatus(); + if (outStockBillStatus.equals("1")) { + outStockBillStatus = "2"; + } + wmsOutStockDetailsMapper.updateOutProjectIdByBillsId(bo.getOutStockBillId(), bo.getProjectId(), outStockBillStatus); + } + return b; + } } diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsOutStockDetailsServiceImpl.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsOutStockDetailsServiceImpl.java index 16fbabf0..d9862d08 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsOutStockDetailsServiceImpl.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsOutStockDetailsServiceImpl.java @@ -9,6 +9,7 @@ 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.wms.domain.WmsBaseProduct; +import org.dromara.wms.domain.WmsInventoryDetails; import org.dromara.wms.domain.WmsOutStockDetails; import org.dromara.wms.domain.bo.WmsOutStockDetailsBo; import org.dromara.wms.domain.vo.WmsOutStockDetailsVo; @@ -94,7 +95,10 @@ public class WmsOutStockDetailsServiceImpl implements IWmsOutStockDetailsService .selectAll(WmsOutStockDetails.class) .leftJoin(WmsBaseProduct.class, WmsBaseProduct::getProductId, WmsOutStockDetails::getMaterielId) .select(WmsBaseProduct::getProductCode, WmsBaseProduct::getProductName, WmsBaseProduct::getExternalBrand, WmsBaseProduct::getProductSpe) - .eq(bo.getOutStockBillId() != null, WmsOutStockDetails::getOutStockBillId, bo.getOutStockBillId()); + .eq(bo.getOutStockBillId() != null, WmsOutStockDetails::getOutStockBillId, bo.getOutStockBillId()) + .leftJoin(WmsInventoryDetails.class, WmsInventoryDetails::getInventoryDetailsId, WmsOutStockDetails::getInventoryDetailsId) + .select( WmsInventoryDetails::getInventoryAmount/*, WmsInventoryDetails::getLockedAmount*/) + ; return lqw; } diff --git a/ruoyi-modules/ruoyi-wms/src/main/resources/mapper/wms/WmsOutStockDetailsMapper.xml b/ruoyi-modules/ruoyi-wms/src/main/resources/mapper/wms/WmsOutStockDetailsMapper.xml index d2210568..faba982e 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/resources/mapper/wms/WmsOutStockDetailsMapper.xml +++ b/ruoyi-modules/ruoyi-wms/src/main/resources/mapper/wms/WmsOutStockDetailsMapper.xml @@ -11,4 +11,15 @@ ${ew.getCustomSqlSegment} + + update wms_out_stock_details set out_project_id = #{projectId}, out_stock_bill_status = #{outStockBillStatus} where out_stock_bill_id = #{outStockBillId} + + + + delete from wms_out_stock_details where out_stock_bill_id in + + #{id} + + +