Bläddra i källkod

新增订单退料清单

fgd 1 år sedan
förälder
incheckning
13b2c7d848

+ 9 - 0
sd-business/src/main/java/com/sd/business/controller/order/OrderController.java

@@ -10,6 +10,7 @@ import com.sd.business.entity.order.enums.OrderExceptionTypeEnum;
 import com.sd.business.entity.order.vo.CompareVo;
 import com.sd.business.entity.order.vo.OrderInfoVo;
 import com.sd.business.entity.order.vo.SkuSpecPriceVo;
+import com.sd.business.entity.production.vo.OutBomVo;
 import com.sd.business.service.order.OrderService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
@@ -184,4 +185,12 @@ public class OrderController {
         orderService.cancelSuspendOrder(dto.getId());
     }
 
+    /**
+     * 订单删除退料清单
+     */
+    @PostMapping("/returnBomList")
+    public List<OutBomVo> returnBomList(@RequestBody BaseSelectDto dto) {
+        return orderService.returnBomList(dto.getId());
+    }
+
 }

+ 1 - 1
sd-business/src/main/java/com/sd/business/entity/warehouse/constant/WarehouseConstant.java

@@ -23,6 +23,6 @@ public interface WarehouseConstant {
     /**
      * 生产次品仓
      */
-    Long PRODUCTION_DEFECTIVE = 1684037092708990977L;
+    Long PRODUCTION_DEFECTIVE = 1684037357424099330L;
 
 }

+ 8 - 0
sd-business/src/main/java/com/sd/business/service/order/OrderService.java

@@ -10,6 +10,7 @@ import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.order.vo.CompareVo;
 import com.sd.business.entity.order.vo.OrderInfoVo;
 import com.sd.business.entity.order.vo.SkuSpecPriceVo;
+import com.sd.business.entity.production.vo.OutBomVo;
 import com.sd.business.entity.statement.vo.StatementOrderClassifyTotalCountVo;
 
 import java.math.BigDecimal;
@@ -148,4 +149,11 @@ public interface OrderService extends BaseService<OrderInfo> {
      * @return
      */
     StatementOrderClassifyTotalCountVo getOrderClassifyTotalCount(List<Long> statementIds);
+
+    /**
+     * 订单删除退料清单
+     * @param id
+     * @return
+     */
+    List<OutBomVo> returnBomList(Long id);
 }

+ 75 - 1
sd-business/src/main/java/com/sd/business/service/order/impl/OrderServiceImpl.java

@@ -39,6 +39,7 @@ import com.sd.business.entity.order.vo.*;
 import com.sd.business.entity.price.po.PriceBillingStandard;
 import com.sd.business.entity.price.po.PriceBillingStandardDetail;
 import com.sd.business.entity.production.po.ProductionWorkOrder;
+import com.sd.business.entity.production.vo.OutBomVo;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.entity.statement.po.StatementOfAccount;
 import com.sd.business.entity.statement.vo.StatementOrderClassifyTotalCountVo;
@@ -68,6 +69,7 @@ import java.math.BigDecimal;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * <p>
@@ -938,7 +940,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
 
         Map<Long, BomSpecBo> bomSpecBo = skuSpecService.getBomSpecBoByIdList(Collections.singleton(bomSpecId));
         IWrapper<OrderInfo> wrapper = getWrapper();
-        wrapper.ge("o", OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey());
+        wrapper.in("o", OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey(), OrderStatusEnum.COMPLETION_PRODUCTION.getKey());
         wrapper.in("o", OrderInfo::getStatementOfAccountId, accountIds);
         if (ObjectUtil.equal(bomSpecBo.get(bomSpecId).getClassifyParentId(), 1L)) {
             // 查询主材消耗数量
@@ -1026,6 +1028,78 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
         return this.baseMapper.getOrderClassifyTotalCount(wrapper);
     }
 
+    @Override
+    public List<OutBomVo> returnBomList(Long id) {
+        OrderInfo orderInfo = this.getById(id);
+        if (orderInfo == null) {
+            throw new ServiceException("未找到订单");
+        }
+        List<OrderSku> orderSkuList = orderSkuService.list(q -> q.eq(OrderSku::getOrderId, id));
+        List<OrderSkuBom> orderSkuBomList = orderSkuBomService.list(q -> q.eq(OrderSkuBom::getOrderId, id));
+        Map<Long, OrderSku> orderSkuMap = orderSkuList.stream().collect(Collectors.toMap(BaseIdPo::getId, Function.identity()));
+        if (Objects.equals(orderInfo.getClassify(), OrderClassifyEnum.OUTSOURCE_ORDER.getKey())) {
+            orderSkuList = Collections.emptyList();
+        }
+
+        Map<Long, OutBomVo> map = Stream.concat(
+                        // 主材
+                        orderSkuList.stream()
+                                .map(item -> {
+                                    OutBomVo outBomVo = new OutBomVo();
+                                    outBomVo.setBomSpecId(item.getBomSpecId());
+                                    outBomVo.setOutQuantity(item.getQuantity());
+                                    return outBomVo;
+                                }),
+
+                        // 包材
+                        orderSkuBomList.stream().map(item -> {
+                            OrderSku orderSku = orderSkuMap.get(item.getOrderSkuId());
+                            OutBomVo outBomVo = new OutBomVo();
+                            outBomVo.setBomSpecId(item.getBomSpecId());
+                            outBomVo.setOutQuantity(item.getQuantity().multiply(orderSku.getQuantity()));
+                            return outBomVo;
+                        })
+                )
+                .collect(Collectors.toMap(
+                        OutBomVo::getBomSpecId,
+                        Function.identity(),
+                        (v1, v2) -> {
+                            v1.setOutQuantity(v1.getOutQuantity().add(v2.getOutQuantity()));
+                            return v1;
+                        })
+                );
+
+        // 合并sku主材和包材
+        List<OutBomVo> outBomVoList = new ArrayList<>(map.values());
+
+        // 区分半成品仓和包材仓库
+        Map<Long, BomSpecBo> bomSpecBoMap = skuSpecService.getBomSpecBoByIdList(map.keySet());
+
+        for (OutBomVo outBomVo : outBomVoList) {
+            Long bomSpecId = outBomVo.getBomSpecId();
+            BomSpecBo bomSpecBo = bomSpecBoMap.get(bomSpecId);
+            outBomVo.setBomSpecCode(bomSpecBo.getBomSpecCode());
+            outBomVo.setBomSpecName(bomSpecBo.getBomSpecName());
+            outBomVo.setClassifyId(bomSpecBo.getClassifyId());
+            outBomVo.setClassifyName(bomSpecBo.getClassifyName());
+            outBomVo.setClassifyParentId(bomSpecBo.getClassifyParentId());
+
+            // 主材
+            if (Objects.equals(bomSpecBo.getClassifyParentId(), 1L)) {
+                outBomVo.setWarehouseId(WarehouseConstant.SEMI_FINISHED_PRODUCT);
+                outBomVo.setWarehouseName("半成品仓");
+            }
+            // 包材
+            else {
+                outBomVo.setWarehouseId(WarehouseConstant.PACKAGING_MATERIAL);
+                outBomVo.setWarehouseName("包材仓");
+            }
+        }
+        return outBomVoList.stream()
+                .sorted(Comparator.comparing(OutBomVo::getWarehouseId, Comparator.reverseOrder()).thenComparing(OutBomVo::getBomSpecCode))
+                .collect(Collectors.toList());
+    }
+
     /**
      * 删除订单以及订单关联数据
      */

+ 1 - 1
sd-business/src/main/java/com/sd/business/service/production/impl/ProductionOrderServiceImpl.java

@@ -101,7 +101,7 @@ public class ProductionOrderServiceImpl implements ProductionOrderService {
     public Page<ProductionOrderVo> getPage(ProductionOrderDto dto) {
 
         IWrapper<ProductionOrderVo> wrapper = IWrapper.getWrapper();
-        wrapper.ge("oi", OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey());
+        wrapper.in("oi", OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey(), OrderStatusEnum.COMPLETION_PRODUCTION.getKey());
         wrapper.like("oi", OrderInfo::getCode, dto.getCode());
         wrapper.like("oi", OrderInfo::getWlnCode, dto.getWlnCode());
         wrapper.eq("oi", OrderInfo::getDepartmentId, dto.getDepartmentId());