Quellcode durchsuchen

Merge remote-tracking branch 'origin/master'

24282 vor 1 Jahr
Ursprung
Commit
5ff9e4e704

+ 10 - 0
sd-business/src/main/java/com/sd/business/controller/purchase/PurchaseBomController.java

@@ -1,7 +1,9 @@
 package com.sd.business.controller.purchase;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sd.business.entity.purchase.dto.PurchaseBomDetailsSelectDto;
 import com.sd.business.entity.purchase.dto.PurchaseBomSelectDto;
+import com.sd.business.entity.purchase.vo.PurchaseBomDetailsVo;
 import com.sd.business.entity.purchase.vo.PurchaseBomSelectVo;
 import com.sd.business.service.purchase.PurchaseBomService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,4 +29,12 @@ public class PurchaseBomController {
         return purchaseBomService.getPage(dto);
     }
 
+    /**
+     * 采购合同 bom分页
+     */
+    @PostMapping("/purchaseDetailsPage")
+    public Page<PurchaseBomDetailsVo> purchaseDetailsPage(@RequestBody PurchaseBomDetailsSelectDto dto) {
+        return purchaseBomService.getDetailsPage(dto);
+    }
+
 }

+ 9 - 4
sd-business/src/main/java/com/sd/business/mapper/purchase/PurchaseBomMapper.java

@@ -4,10 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.sd.business.entity.purchase.po.PurchaseBom;
-import com.sd.business.entity.purchase.vo.PurchaseBomInfoVo;
-import com.sd.business.entity.purchase.vo.PurchaseBomSelectVo;
-import com.sd.business.entity.purchase.vo.PurchaseBomVo;
-import com.sd.business.entity.purchase.vo.PurchaseInTransitBomVo;
+import com.sd.business.entity.purchase.vo.*;
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
@@ -63,4 +60,12 @@ public interface PurchaseBomMapper extends BaseMapper<PurchaseBom> {
      * @return
      */
     Date getPurchaseBomDeliveryDate(@Param("ew") IWrapper<PurchaseBom> wrapper);
+
+    /**
+     * 采购合同 bom分页
+     * @param page
+     * @param wrapper
+     * @return
+     */
+    Page<PurchaseBomDetailsVo> getDetailsPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<PurchaseBomDetailsVo> wrapper);
 }

+ 59 - 2
sd-business/src/main/java/com/sd/business/service/order/impl/OrderServiceImpl.java

@@ -28,6 +28,7 @@ import com.sd.business.entity.in.dto.InOutStorageDto;
 import com.sd.business.entity.in.emums.InDetailTypeEnum;
 import com.sd.business.entity.in.emums.InOutTypeEnum;
 import com.sd.business.entity.in.po.InOutStorageBom;
+import com.sd.business.entity.inventory.po.Inventory;
 import com.sd.business.entity.order.dto.*;
 import com.sd.business.entity.order.enums.OrderExceptionTypeEnum;
 import com.sd.business.entity.order.enums.OrderStatusEnum;
@@ -44,6 +45,7 @@ import com.sd.business.service.bom.BomService;
 import com.sd.business.service.bom.BomSpecService;
 import com.sd.business.service.department.DepartmentService;
 import com.sd.business.service.in.InOutStorageService;
+import com.sd.business.service.inventory.InventoryService;
 import com.sd.business.service.order.*;
 import com.sd.business.service.price.PriceBillingStandardDetailService;
 import com.sd.business.service.price.PriceBillingStandardService;
@@ -106,6 +108,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
     private StatementOfAccountService statementOfAccountService;
 
     @Autowired
+    private InventoryService inventoryService;
+
+    @Autowired
     private ISysUserService sysUserService;
 
     @Override
@@ -246,6 +251,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
     @DSTransactional
     @Override
     public void add(OrderInfoDto orderDto) {
+        List<OrderSkuDto> orderSkuList = orderDto.getOrderSkuList();
+        // 自建订单判断库存
+        if (ObjectUtil.equals(orderDto.getType(), 1)) {
+            this.checkSkuInventory(orderSkuList);
+        }
+
         orderDto.setSource(1);
         orderDto.setCode("PI" + new Date().getTime());
         orderDto.setSettlementStatus(1);
@@ -254,7 +265,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
         orderDto.setExceptionType(OrderExceptionTypeEnum.NORMAL.getKey().toString());
         this.save(orderDto);
 
-        List<OrderSkuDto> orderSkuList = orderDto.getOrderSkuList();
         List<OrderSku> tempOrderSkuList = orderSkuList.stream()
                 .peek(item -> item.setOrderId(orderDto.getId()))
                 .peek(item -> item.setStockPreparationStatus(StatusConstant.NO))
@@ -302,9 +312,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
     @DSTransactional
     @Override
     public void edit(OrderInfoDto orderDto) {
+        List<OrderSkuDto> orderSkuList = orderDto.getOrderSkuList();
+        // 自建订单判断库存
+        if (ObjectUtil.equals(orderDto.getType(), 1)) {
+            this.checkSkuInventory(orderSkuList);
+        }
+
         this.updateById(orderDto);
 
-        List<OrderSkuDto> orderSkuList = orderDto.getOrderSkuList();
         List<OrderSku> tempOrderSkuList = orderSkuList.stream()
                 .peek(item -> item.setOrderId(orderDto.getId()))
                 .peek(item -> item.setStockPreparationStatus(StatusConstant.NO))
@@ -710,4 +725,46 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
         ObsFileUtil.removeFile(id);
     }
 
+    private void checkSkuInventory(List<OrderSkuDto> orderSkuList) {
+        List<Long> bomSpecIdList = orderSkuList.stream().map(OrderSku::getBomSpecId).collect(Collectors.toList());
+        // 区分半成品仓和包材仓库
+        Map<Long, BomSpecBo> bomSpecBoMap = skuSpecService.getBomSpecBoByIdList(bomSpecIdList);
+        // 自建订单判断库存
+        for (OrderSkuDto orderSkuDto : orderSkuList) {
+            // 判断sku库存
+            Long bomSpecId = orderSkuDto.getBomSpecId();
+            BomSpecBo bomSpecBo = bomSpecBoMap.get(bomSpecId);
+            if (bomSpecBo == null) {
+                throw new ServiceException("未知bom规格id:" + bomSpecId);
+            }
+            Long warehouseId;
+            // 主材
+            if (ObjectUtil.equals(bomSpecBo.getClassifyParentId(), 1L)) {
+                warehouseId = WarehouseConstant.SEMI_FINISHED_PRODUCT;
+            } else {
+                warehouseId = WarehouseConstant.PACKAGING_MATERIAL;
+            }
+            Inventory inventory = inventoryService.getOne(q -> q.eq(Inventory::getWarehouseId, warehouseId)
+                    .eq(Inventory::getBomSpecId, bomSpecId));
+            if (inventory == null || inventory.getQuantity().compareTo(orderSkuDto.getQuantity()) < 0) {
+                throw new ServiceException("操作失败,品名为:" + bomSpecBo.getBomSpecName() + " 的bom库存不足,库存为:" +
+                        (inventory == null ? BigDecimal.ZERO : inventory.getQuantity()));
+            }
+
+            // 判断包材库存
+            for (OrderSkuBom orderSkuBom : orderSkuDto.getOrderSkuBomList()) {
+                BomSpec bomSpec = bomSpecService.getById(orderSkuBom.getBomSpecId());
+                if (bomSpec == null) {
+                    throw new ServiceException("未知bom规格id:" + orderSkuBom.getBomSpecId());
+                }
+                Inventory bomInventory = inventoryService.getOne(q -> q.eq(Inventory::getWarehouseId, WarehouseConstant.PACKAGING_MATERIAL)
+                        .eq(Inventory::getBomSpecId, orderSkuBom.getBomSpecId()));
+                if (bomInventory == null || bomInventory.getQuantity().compareTo(orderSkuBom.getQuantity()) < 0) {
+                    throw new ServiceException("操作失败,品名为:" + bomSpec.getName() + " 的bom库存不足,库存为:" +
+                            (bomInventory == null ? BigDecimal.ZERO : bomInventory.getQuantity()));
+                }
+            }
+        }
+    }
+
 }

+ 9 - 4
sd-business/src/main/java/com/sd/business/service/purchase/PurchaseBomService.java

@@ -3,13 +3,11 @@ package com.sd.business.service.purchase;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.service.BaseService;
 import com.sd.business.entity.purchase.dto.PurchaseBoardSelectDto;
+import com.sd.business.entity.purchase.dto.PurchaseBomDetailsSelectDto;
 import com.sd.business.entity.purchase.dto.PurchaseBomSelectDto;
 import com.sd.business.entity.purchase.dto.PurchaseInTransitBomSelectDto;
 import com.sd.business.entity.purchase.po.PurchaseBom;
-import com.sd.business.entity.purchase.vo.PurchaseBomBoardVo;
-import com.sd.business.entity.purchase.vo.PurchaseBomSelectVo;
-import com.sd.business.entity.purchase.vo.PurchaseBomVo;
-import com.sd.business.entity.purchase.vo.PurchaseInTransitBomVo;
+import com.sd.business.entity.purchase.vo.*;
 
 
 /**
@@ -50,4 +48,11 @@ public interface PurchaseBomService extends BaseService<PurchaseBom> {
      * @return
      */
     Page<PurchaseBomBoardVo> getPurchaseBoardPage(PurchaseBoardSelectDto dto);
+
+    /**
+     * 获取采购bom明细分页
+     * @param dto
+     * @return
+     */
+    Page<PurchaseBomDetailsVo> getDetailsPage(PurchaseBomDetailsSelectDto dto);
 }

+ 11 - 0
sd-business/src/main/java/com/sd/business/service/purchase/impl/PurchaseBomServiceImpl.java

@@ -14,6 +14,7 @@ import com.sd.business.entity.bom.po.BomSpec;
 import com.sd.business.entity.bom.vo.BomSpecVo;
 import com.sd.business.entity.inventory.po.Inventory;
 import com.sd.business.entity.purchase.dto.PurchaseBoardSelectDto;
+import com.sd.business.entity.purchase.dto.PurchaseBomDetailsSelectDto;
 import com.sd.business.entity.purchase.dto.PurchaseBomSelectDto;
 import com.sd.business.entity.purchase.dto.PurchaseInTransitBomSelectDto;
 import com.sd.business.entity.purchase.po.Purchase;
@@ -231,4 +232,14 @@ public class PurchaseBomServiceImpl extends ServiceImpl<PurchaseBomMapper, Purch
         page.setRecords(list);
         return page;
     }
+
+    @Override
+    public Page<PurchaseBomDetailsVo> getDetailsPage(PurchaseBomDetailsSelectDto dto) {
+        IWrapper<PurchaseBomDetailsVo> wrapper = IWrapper.getWrapper();;
+        wrapper.like("p", Purchase::getCode, dto.getPurchaseCode());
+        wrapper.like("bs", BomSpec::getCode, dto.getBomSpecCode());
+        wrapper.like("bs", BomSpec::getName, dto.getBomSpecName());
+        wrapper.orderByDesc("p", Purchase::getId);
+        return this.baseMapper.getDetailsPage(dto.getPage(), wrapper);
+    }
 }

+ 20 - 0
sd-business/src/main/resources/mapper/purchase/PurchaseBomMapper.xml

@@ -108,4 +108,24 @@
             ${ew.customSqlSegment}
     </select>
 
+
+    <select id="getDetailsPage" resultType="com.sd.business.entity.purchase.vo.PurchaseBomDetailsVo">
+        select
+            p.code purchaseCode,
+            bs.code bomSpecCode,
+            bs.name bomSpecName,
+            bs.length,
+            bs.width,
+            bs.height,
+            pb.purchase_quantity,
+            pb.arrival_quantity,
+            (pb.purchase_quantity - pb.arrival_quantity) inTransitQuantity,
+            pb.return_quantity
+        from
+            purchase_bom pb
+            LEFT JOIN purchase p on pb.purchase_id = p.id
+            LEFT JOIN bom_spec bs on pb.bom_spec_id = bs.id
+            ${ew.customSqlSegment}
+    </select>
+
 </mapper>