Browse Source

转trade优化,采购入库新增单价字段

fgd 1 year ago
parent
commit
e17debc624

+ 5 - 0
sd-business/src/main/java/com/sd/business/entity/in/po/InOutStorageBom.java

@@ -41,5 +41,10 @@ public class InOutStorageBom extends BasePo implements InOutFun {
     @DecimalMin(value = "0.01", message = "出入库数量必须大于0")
     private BigDecimal quantity;
 
+    /**
+     * 单价
+     */
+    private BigDecimal unitPrice;
+
 
 }

+ 2 - 1
sd-business/src/main/java/com/sd/business/service/inventory/InventoryService.java

@@ -3,6 +3,7 @@ package com.sd.business.service.inventory;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.service.BaseService;
 import com.sd.business.entity.in.dto.CorrectionDto;
+import com.sd.business.entity.in.po.InOutStorageBom;
 import com.sd.business.entity.inventory.bo.InOutFun;
 import com.sd.business.entity.inventory.dto.GetQuantityDto;
 import com.sd.business.entity.inventory.dto.InventorySelectDto;
@@ -101,7 +102,7 @@ public interface InventoryService extends BaseService<Inventory> {
      *
      * @param
      */
-    void purchaseInStorage(Long purchaseId, Long departmentId, Long warehouseId, List<? extends InOutFun> list);
+    void purchaseInStorage(Long purchaseId, Long departmentId, Long warehouseId, List<InOutStorageBom> list);
 
     /**
      * 锁定库存

+ 4 - 3
sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryServiceImpl.java

@@ -414,8 +414,8 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
     }
 
     @Override
-    public void purchaseInStorage(Long purchaseId, Long departmentId, Long warehouseId, List<? extends InOutFun> list) {
-        List<Long> bomSpecIdList = list.stream().map(InOutFun::getBomSpecId).collect(Collectors.toList());
+    public void purchaseInStorage(Long purchaseId, Long departmentId, Long warehouseId, List<InOutStorageBom> list) {
+        List<Long> bomSpecIdList = list.stream().map(InOutStorageBom::getBomSpecId).collect(Collectors.toList());
         synchronized (this) {
             // 通过事业部id和出库id获取bom规格库存
             List<Inventory> inventoryList = getInventoryList(departmentId, warehouseId, bomSpecIdList);
@@ -430,6 +430,7 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
                 // 获取入库单价
                 PurchaseBom purchaseBom = purchaseBomMap.get(item.getBomSpecId());
                 BigDecimal inUnitPrice = purchaseBom == null ? BigDecimal.ZERO : purchaseBom.getUnitPrice();
+                item.setUnitPrice(inUnitPrice);
 
                 InOutStorageDetails inOutStorageDetails = new InOutStorageDetails();
                 inOutStorageDetails.setDepartmentId(departmentId);
@@ -441,7 +442,7 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
             }).collect(Collectors.toList());
             inOutStorageDetailsService.saveBatch(inOutStorageDetailsList);
 
-            for (InOutFun inOutFun : list) {
+            for (InOutStorageBom inOutFun : list) {
 
                 // 库存
                 Inventory inventory = map.computeIfAbsent(inOutFun.getBomSpecId(), item -> {

+ 11 - 7
sd-business/src/main/java/com/sd/business/service/order/impl/OrderServiceImpl.java

@@ -614,6 +614,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
         return detail(dto.getId());
     }
 
+    @DSTransactional
     @Override
     public void turnToRegularOrder(Long id) {
         OrderInfo orderInfo = getById(id);
@@ -632,6 +633,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
             }
         }
 
+        if (ObjectUtil.equal(orderInfo.getStatus(), OrderStatusEnum.STOCK_PREPARATION.getKey())) {
+            List<OrderSku> list = orderSkuService.list(q -> q.eq(OrderSku::getOrderId, orderInfo.getId()));
+            lockStorage(list);
+            update(q -> q
+                    .eq(BaseIdPo::getId, orderInfo.getId())
+                    .set(OrderInfo::getLockStorage, StatusConstant.YES));
+        }
+
         update(q -> q
                 .eq(BaseIdPo::getId, orderInfo.getId())
                 .set(OrderInfo::getExceptionType, OrderExceptionTypeEnum.NORMAL.getKey().toString())
@@ -639,18 +648,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
                 .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
         );
 
-        // 对已生产的订单生成对账单
-        if (Arrays.asList(exceptionType.split(",")).contains(OrderExceptionTypeEnum.ORDER_CLOSURE.getKey().toString())
-                && ObjectUtil.equals(orderInfo.getStatus(), OrderStatusEnum.COMPLETION_PRODUCTION.getKey())) {
+        // 转trade
+        if (Arrays.asList(exceptionType.split(",")).contains(OrderExceptionTypeEnum.ORDER_CLOSURE.getKey().toString())) {
             // 订单分类修改为无理由订单
             update(q -> q
                     .eq(BaseIdPo::getId, orderInfo.getId())
                     .set(OrderInfo::getClassify, OrderClassifyEnum.NO_REASON_ORDER.getKey())
             );
-            StatementOfAccountDto statement = new StatementOfAccountDto();
-            statement.setDepartmentId(orderInfo.getDepartmentId());
-            statement.setOrderIdList(Collections.singletonList(orderInfo.getId()));
-            statementOfAccountService.add(statement);
         }
 
     }

+ 29 - 0
sd-business/src/main/java/com/sd/business/service/production/impl/StockPreparationServiceImpl.java

@@ -16,6 +16,7 @@ import com.sd.business.entity.in.emums.InOutTypeEnum;
 import com.sd.business.entity.in.emums.OutDetailTypeEnum;
 import com.sd.business.entity.in.po.InOutStorageBom;
 import com.sd.business.entity.inventory.po.Inventory;
+import com.sd.business.entity.order.enums.OrderClassifyEnum;
 import com.sd.business.entity.order.enums.OrderExceptionTypeEnum;
 import com.sd.business.entity.order.enums.OrderStatusEnum;
 import com.sd.business.entity.order.po.OrderInfo;
@@ -30,6 +31,7 @@ import com.sd.business.entity.production.vo.StockPreparationVo;
 import com.sd.business.entity.production.vo.UncompletedVo;
 import com.sd.business.entity.sku.po.Sku;
 import com.sd.business.entity.sku.po.SkuSpec;
+import com.sd.business.entity.statement.dto.StatementOfAccountDto;
 import com.sd.business.entity.warehouse.constant.WarehouseConstant;
 import com.sd.business.mapper.production.StockPreparationMapper;
 import com.sd.business.service.bom.BomClassifyService;
@@ -45,6 +47,7 @@ import com.sd.business.service.production.ProductionWorkOrderService;
 import com.sd.business.service.production.StockPreparationService;
 import com.sd.business.service.sku.SkuService;
 import com.sd.business.service.sku.SkuSpecService;
+import com.sd.business.service.statement.StatementOfAccountService;
 import com.sd.framework.util.Assert;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -99,6 +102,9 @@ public class StockPreparationServiceImpl implements StockPreparationService {
     @Autowired
     private InventoryService inventoryService;
 
+    @Autowired
+    private StatementOfAccountService statementOfAccountService;
+
     @Override
     public List<UncompletedVo> uncompletedList(StockPreparationDto dto) {
 
@@ -219,6 +225,29 @@ public class StockPreparationServiceImpl implements StockPreparationService {
             productionWorkOrderService.saveBatch(productionWorkOrderList);
         }
 
+        List<OrderInfo> orderInfoList = orderService.list(q -> q.in(BaseIdPo::getId, orderIdList));
+        List<OrderInfo> statementOrderList = new ArrayList<>();
+        for (OrderInfo orderInfo : orderInfoList) {
+            // 订单分类为无理由的订单,直接完成并生成对账单
+            if (ObjectUtil.equals(orderInfo.getClassify(), OrderClassifyEnum.NO_REASON_ORDER.getKey())) {
+                orderService.update(q -> q
+                        .eq(BaseIdPo::getId, orderInfo.getId())
+                        .set(OrderInfo::getStatus, OrderStatusEnum.COMPLETION_PRODUCTION.getKey()));
+                statementOrderList.add(orderInfo);
+            }
+        }
+        // 生成对账单
+        if (!statementOrderList.isEmpty()) {
+            Map<Long, List<OrderInfo>> statementMap = statementOrderList.stream().collect(Collectors.groupingBy(OrderInfo::getDepartmentId));
+            for (Long departmentId : statementMap.keySet()) {
+                List<Long> orderIds = statementMap.get(departmentId).stream().map(BaseIdPo::getId).collect(Collectors.toList());
+                StatementOfAccountDto statement = new StatementOfAccountDto();
+                statement.setDepartmentId(departmentId);
+                statement.setOrderIdList(orderIds);
+                statementOfAccountService.add(statement);
+            }
+        }
+
     }
 
     @Override

+ 19 - 0
sd-wln/src/main/java/com/sd/wln/service/impl/WlnOrderServiceImpl.java

@@ -13,6 +13,7 @@ import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.framework.mybatis.holder.LogicHolder;
 import com.sd.business.entity.bom.bo.BomSpecBo;
 import com.sd.business.entity.department.po.Department;
+import com.sd.business.entity.order.enums.OrderClassifyEnum;
 import com.sd.business.entity.order.enums.OrderExceptionTypeEnum;
 import com.sd.business.entity.order.enums.OrderStatusEnum;
 import com.sd.business.entity.order.po.OrderInfo;
@@ -22,12 +23,14 @@ import com.sd.business.entity.order.po.OrderSkuBom;
 import com.sd.business.entity.price.po.PriceBillingStandardDetail;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.entity.sku.po.SkuSpecLink;
+import com.sd.business.entity.statement.dto.StatementOfAccountDto;
 import com.sd.business.service.inventory.InventoryService;
 import com.sd.business.service.order.OrderPackageBomService;
 import com.sd.business.service.order.OrderService;
 import com.sd.business.service.order.OrderSkuBomService;
 import com.sd.business.service.order.OrderSkuService;
 import com.sd.business.service.sku.SkuSpecService;
+import com.sd.business.service.statement.StatementOfAccountService;
 import com.sd.wln.context.OrderContext;
 import com.sd.wln.service.WlnOrderService;
 import com.sd.wln.util.WlnUtil;
@@ -74,6 +77,9 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     @Autowired
     private SkuSpecService skuSpecService;
 
+    @Autowired
+    private StatementOfAccountService statementOfAccountService;
+
     @Override
     public void syncOrder() {
 
@@ -551,6 +557,19 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     private void addExceptionType(OrderInfo orderInfo, OrderExceptionTypeEnum exceptionTypeEnum) {
 
         if (orderInfo.getStatus() != null && orderInfo.getStatus() >= OrderStatusEnum.IN_PRODUCTION.getKey()) {
+            // 万里牛状态异常:订单关闭的订单类型修改为无理由并生成对账单
+            if (ObjectUtil.equals(exceptionTypeEnum, OrderExceptionTypeEnum.ORDER_CLOSURE)
+                    && ObjectUtil.notEqual(orderInfo.getClassify(), OrderClassifyEnum.NO_REASON_ORDER.getKey())) {
+                if (ObjectUtil.equals(orderInfo.getStatus(), OrderStatusEnum.IN_PRODUCTION.getKey())) {
+                    orderInfo.setStatus(OrderStatusEnum.COMPLETION_PRODUCTION.getKey());
+                }
+                orderInfo.setClassify(OrderClassifyEnum.NO_REASON_ORDER.getKey());
+                // 生成对账单
+                StatementOfAccountDto statement = new StatementOfAccountDto();
+                statement.setDepartmentId(orderInfo.getDepartmentId());
+                statement.setOrderIdList(Collections.singletonList(orderInfo.getId()));
+                statementOfAccountService.add(statement);
+            }
             return;
         }