瀏覽代碼

update
1.移库、出入库

wks 4 月之前
父節點
當前提交
71114069a7

+ 10 - 0
ruoyi-admin-wms/src/main/java/com/ruoyi/wms/domain/bo/BaseOrderDetailBo.java

@@ -46,6 +46,16 @@ public class BaseOrderDetailBo extends BaseEntity {
      */
     private String unit;
 
+    /**
+     * 基准数量
+     */
+    private BigDecimal baseQuantity;
+
+    /**
+     * 基准单位
+     */
+    private String baseUnit;
+
     /**
      * 金额
      */

+ 4 - 0
ruoyi-admin-wms/src/main/java/com/ruoyi/wms/domain/bo/CheckOrderDetailBo.java

@@ -5,6 +5,7 @@ import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.io.Serial;
 import java.math.BigDecimal;
 
 /**
@@ -19,6 +20,9 @@ import java.math.BigDecimal;
 @AutoMapper(target = CheckOrderDetail.class, reverseConvertGenerate = false)
 public class CheckOrderDetailBo extends BaseOrderDetailBo {
 
+    @Serial
+    private static final long serialVersionUID = -4707101744565763244L;
+
     /**
      * 盘点数量
      */

+ 5 - 0
ruoyi-admin-wms/src/main/java/com/ruoyi/wms/domain/entity/InventoryHistory.java

@@ -59,6 +59,11 @@ public class InventoryHistory extends BaseHistoryEntity {
      */
     private BigDecimal quantity;
 
+    /**
+     * 单位
+     */
+    private String unit;
+
     /**
      * 更新前数量
      */

+ 5 - 0
ruoyi-admin-wms/src/main/java/com/ruoyi/wms/service/CheckOrderService.java

@@ -46,6 +46,8 @@ public class CheckOrderService {
 
     private final InventoryHistoryService inventoryHistoryService;
 
+    private final WmsUnitConfigService wmsUnitConfigService;
+
     /**
      * 查询库存盘点单据
      */
@@ -158,6 +160,9 @@ public class CheckOrderService {
         } else {
             updateByBo(bo);
         }
+        // 3.单位换算
+        wmsUnitConfigService.unitConversion(bo.getDetails());
+
         // 保存库存 inventory
         inventoryService.updateInventory(details);
         // 新增库存记录 inventory history

+ 1 - 0
ruoyi-admin-wms/src/main/java/com/ruoyi/wms/service/InventoryHistoryService.java

@@ -46,6 +46,7 @@ public class InventoryHistoryService extends ServiceImpl<InventoryHistoryMapper,
             } else {
                 inventoryHistory.setQuantity(detail.getQuantity().negate());
             }
+            inventoryHistory.setUnit(detail.getBaseUnit());
             inventoryHistory.setWarehouseId(detail.getWarehouseId());
             inventoryHistory.setAmount(detail.getAmount());
             inventoryHistory.setBeforeQuantity(detail.getBeforeQuantity());

+ 3 - 3
ruoyi-admin-wms/src/main/java/com/ruoyi/wms/service/InventoryService.java

@@ -176,14 +176,14 @@ public class InventoryService extends ServiceImpl<InventoryMapper, Inventory> {
             Inventory result = inventoryMapper.selectOne(wrapper);
             if (result != null) {
                 BigDecimal before = result.getQuantity();
-                BigDecimal after = before.add(orderDetailsBo.getQuantity());
+                BigDecimal after = before.add(orderDetailsBo.getBaseQuantity());
                 result.setQuantity(after);
                 orderDetailsBo.setAfterQuantity(after);
                 orderDetailsBo.setBeforeQuantity(before);
                 updateList.add(result);
             } else {
                 orderDetailsBo.setBeforeQuantity(BigDecimal.ZERO);
-                orderDetailsBo.setAfterQuantity(orderDetailsBo.getQuantity());
+                orderDetailsBo.setAfterQuantity(orderDetailsBo.getBaseQuantity());
                 Inventory inventory = MapstructUtils.convert(orderDetailsBo, Inventory.class);
                 addList.add(inventory);
             }
@@ -214,7 +214,7 @@ public class InventoryService extends ServiceImpl<InventoryMapper, Inventory> {
                 throw new ServiceException("库存不足", HttpStatus.CONFLICT, itemSkuMapVo.getItem().getItemName() + "(" + itemSkuMapVo.getItemSku().getSkuName() + ")库存不足,当前库存:0");
             }
             BigDecimal beforeQuantity = result.getQuantity();
-            BigDecimal afterQuantity = beforeQuantity.subtract(shipmentOrderDetailBo.getQuantity());
+            BigDecimal afterQuantity = beforeQuantity.subtract(shipmentOrderDetailBo.getBaseQuantity());
             if (afterQuantity.signum() == -1) {
                 ItemSkuMapVo itemSkuMapVo = itemSkuService.queryItemSkuMapVo(shipmentOrderDetailBo.getSkuId());
                 throw new ServiceException("库存不足", HttpStatus.CONFLICT, itemSkuMapVo.getItem().getItemName() + "(" + itemSkuMapVo.getItemSku().getSkuName() + ")库存不足,当前库存:" + beforeQuantity);

+ 11 - 3
ruoyi-admin-wms/src/main/java/com/ruoyi/wms/service/MovementOrderService.java

@@ -12,11 +12,15 @@ import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.mybatis.core.domain.BaseEntity;
 import com.ruoyi.common.mybatis.core.page.PageQuery;
 import com.ruoyi.common.mybatis.core.page.TableDataInfo;
+import com.ruoyi.wms.domain.bo.BaseOrderDetailBo;
 import com.ruoyi.wms.domain.bo.MovementOrderBo;
+import com.ruoyi.wms.domain.dto.WmsUnitAuxiliaryDto;
 import com.ruoyi.wms.domain.entity.MovementOrder;
 import com.ruoyi.wms.domain.entity.MovementOrderDetail;
+import com.ruoyi.wms.domain.po.UnitPo;
 import com.ruoyi.wms.domain.vo.MovementOrderVo;
 import com.ruoyi.wms.mapper.MovementOrderMapper;
+import com.ruoyi.wms.utils.UnitCalculation;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.SerializationUtils;
 import org.springframework.stereotype.Service;
@@ -45,6 +49,8 @@ public class MovementOrderService {
 
     private final InventoryHistoryService inventoryHistoryService;
 
+    private final WmsUnitConfigService wmsUnitConfigService;
+
 
     /**
      * 查询移库单
@@ -163,7 +169,6 @@ public class MovementOrderService {
     @Transactional
     public void move(MovementOrderBo bo) {
 
-
         // 1.校验商品明细不能为空!
         validateBeforeMove(bo);
 
@@ -173,14 +178,17 @@ public class MovementOrderService {
         } else {
             updateByBo(bo);
         }
-        // 4.更新库存Inventory
+
+        // 4. 单位替换
+        wmsUnitConfigService.unitConversion(bo.getDetails());
+
+        // 5.更新库存Inventory
         MovementOrderBo shipmentBo = getShipmentBo(bo);
         inventoryService.subtract(shipmentBo.getDetails());
 
         MovementOrderBo receiptBo = getReceiptBo(bo);
         inventoryService.add(receiptBo.getDetails());
 
-
         // 6.创建库存记录流水
         inventoryHistoryService.saveInventoryHistory(shipmentBo, ServiceConstants.InventoryHistoryOrderType.MOVEMENT, false);
         inventoryHistoryService.saveInventoryHistory(receiptBo, ServiceConstants.InventoryHistoryOrderType.MOVEMENT, true);

+ 6 - 2
ruoyi-admin-wms/src/main/java/com/ruoyi/wms/service/ReceiptOrderService.java

@@ -49,6 +49,8 @@ public class ReceiptOrderService {
 
     private final InventoryHistoryService inventoryHistoryService;
 
+    private final WmsUnitConfigService wmsUnitConfigService;
+
     /**
      * 查询入库单
      */
@@ -134,11 +136,13 @@ public class ReceiptOrderService {
         } else {
             updateByBo(bo);
         }
+        // 3.单位换算
+        wmsUnitConfigService.unitConversion(bo.getDetails());
 
-        // 3.增加库存
+        // 4.增加库存
         inventoryService.add(bo.getDetails());
 
-        // 4.保存库存记录
+        // 5.保存库存记录
         inventoryHistoryService.saveInventoryHistory(bo, ServiceConstants.InventoryHistoryOrderType.RECEIPT, true);
     }
 

+ 6 - 0
ruoyi-admin-wms/src/main/java/com/ruoyi/wms/service/ShipmentOrderService.java

@@ -55,6 +55,8 @@ public class ShipmentOrderService  extends ServiceImpl<ShipmentOrderMapper, Ship
 
     private final InventoryHistoryService inventoryHistoryService;
 
+    private final WmsUnitConfigService wmsUnitConfigService;
+
     /**
      * 查询出库单
      */
@@ -179,6 +181,10 @@ public class ShipmentOrderService  extends ServiceImpl<ShipmentOrderMapper, Ship
         } else {
             updateByBo(bo);
         }
+
+        // 3.单位换算
+        wmsUnitConfigService.unitConversion(bo.getDetails());
+
         // 3.更新库存:Inventory表
         inventoryService.subtract(bo.getDetails());
 

+ 8 - 0
ruoyi-admin-wms/src/main/java/com/ruoyi/wms/service/WmsUnitConfigService.java

@@ -1,6 +1,8 @@
 package com.ruoyi.wms.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.wms.domain.bo.BaseOrderDetailBo;
+import com.ruoyi.wms.domain.bo.MovementOrderDetailBo;
 import com.ruoyi.wms.domain.dto.WmsUnitAuxiliaryDto;
 import com.ruoyi.wms.domain.entity.WmsUnitConfig;
 
@@ -22,4 +24,10 @@ public interface WmsUnitConfigService extends IService<WmsUnitConfig> {
      * @return 辅助单位列表
      */
     Map<Long, Map<String, WmsUnitAuxiliaryDto>> getBySkuId(List<Long> itemSkuIdList);
+
+    /**
+     * 单位替换
+     * @param details 详情
+     */
+    void unitConversion(List<? extends BaseOrderDetailBo> details);
 }

+ 16 - 0
ruoyi-admin-wms/src/main/java/com/ruoyi/wms/service/impl/WmsUnitConfigServiceImpl.java

@@ -1,10 +1,13 @@
 package com.ruoyi.wms.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.wms.domain.bo.BaseOrderDetailBo;
 import com.ruoyi.wms.domain.dto.WmsUnitAuxiliaryDto;
 import com.ruoyi.wms.domain.entity.WmsUnitConfig;
+import com.ruoyi.wms.domain.po.UnitPo;
 import com.ruoyi.wms.service.WmsUnitConfigService;
 import com.ruoyi.wms.mapper.WmsUnitConfigMapper;
+import com.ruoyi.wms.utils.UnitCalculation;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -27,6 +30,19 @@ public class WmsUnitConfigServiceImpl extends ServiceImpl<WmsUnitConfigMapper, W
         return unitAuxiliaryDtoList.stream().collect(Collectors.groupingBy(WmsUnitAuxiliaryDto::getItemSkuId, Collectors.toMap(WmsUnitAuxiliaryDto::getAuxiliaryUnit, value -> value, (d1, d2) -> d1)));
     }
 
+    @Override
+    public void unitConversion(List<? extends BaseOrderDetailBo> details) {
+        List<Long> skuId = details.stream().map(BaseOrderDetailBo::getSkuId).toList();
+        Map<Long, Map<String, WmsUnitAuxiliaryDto>> wmsUnitConfigMap = this.getBySkuId(skuId);
+        details.forEach(movementOrderDetailBo -> {
+            UnitPo unitPo = UnitCalculation.conversion(movementOrderDetailBo.getSkuId(), movementOrderDetailBo.getUnit(), movementOrderDetailBo.getQuantity(), wmsUnitConfigMap);
+            movementOrderDetailBo.setBaseUnit(unitPo.getBaseUnit());
+            movementOrderDetailBo.setBaseQuantity(unitPo.getBaseQuantity());
+        });
+
+    }
+
+
 }