فهرست منبع

成品库导出调整

fgd 1 سال پیش
والد
کامیت
1003fc2b41

+ 6 - 0
sd-business/src/main/java/com/sd/business/entity/inventory/dto/InventoryFinishedErpImportDataDto.java

@@ -38,4 +38,10 @@ public class InventoryFinishedErpImportDataDto {
      */
     @ExcelProperty(value = "业务数量")
     private String quantity;
+
+    /**
+     * 万里牛出库单编号
+     */
+    @ExcelProperty(value = "万里牛出库单单编号")
+    private String outboundOrderCode;
 }

+ 101 - 45
sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryFinishedOrderServiceImpl.java

@@ -19,14 +19,17 @@ import com.sd.business.entity.inventory.enums.FinishedOperationTypeEnum;
 import com.sd.business.entity.inventory.po.InventoryFinishedOrder;
 import com.sd.business.entity.inventory.po.InventoryFinishedOrderDetail;
 import com.sd.business.entity.inventory.vo.InventoryFinishedOrderVo;
+import com.sd.business.entity.order.enums.OrderStatusEnum;
 import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.order.po.OrderSku;
+import com.sd.business.entity.outbound.po.OutboundOrder;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.mapper.inventory.InventoryFinishedOrderMapper;
 import com.sd.business.service.inventory.InventoryFinishedOrderDetailService;
 import com.sd.business.service.inventory.InventoryFinishedOrderService;
 import com.sd.business.service.order.OrderService;
 import com.sd.business.service.order.OrderSkuService;
+import com.sd.business.service.outbound.OutboundOrderService;
 import com.sd.business.service.sku.SkuSpecService;
 import com.sd.business.util.CodeEnum;
 import com.sd.framework.util.TemplateExcelUtil;
@@ -67,6 +70,9 @@ public class InventoryFinishedOrderServiceImpl extends ServiceImpl<InventoryFini
     private SkuSpecService skuSpecService;
 
     @Autowired
+    private OutboundOrderService outboundOrderService;
+
+    @Autowired
     private HttpServletResponse response;
 
     @Transactional(rollbackFor = Exception.class)
@@ -152,59 +158,73 @@ public class InventoryFinishedOrderServiceImpl extends ServiceImpl<InventoryFini
 
     @Override
     public void erpExcelExport(List<InventoryFinishedErpImportDataDto> list) {
-        Date date = new Date();
-        // 生成入库单
+        List<String> outboundOrderCodes = list.stream().map(InventoryFinishedErpImportDataDto::getOutboundOrderCode).collect(Collectors.toList());
+        Map<String, OutboundOrder> outboundOrderMap = outboundOrderService.mapKEntity(
+                OutboundOrder::getCode,
+                q -> q.in(OutboundOrder::getCode, outboundOrderCodes));
+
+        List<String> wlnCodes = outboundOrderMap.values().stream().map(OutboundOrder::getOrderWlnCode).collect(Collectors.toList());
+        Map<String, OrderInfo> orderInfoMap = orderService.mapKEntity(
+                OrderInfo::getWlnCode,
+                q -> q.in(OrderInfo::getWlnCode, wlnCodes)
+                        .eq(OrderInfo::getStatus, OrderStatusEnum.COMPLETION_PRODUCTION.getKey()));
+
+        List<Long> orderIds = orderInfoMap.values().stream().map(BaseIdPo::getId).collect(Collectors.toList());
+        Map<Long, List<InventoryFinishedOrderDetail>> inventoryFinishedOrderMap = inventoryFinishedOrderDetailService.mapKGroup(
+                InventoryFinishedOrderDetail::getOrderInfoId,
+                q -> q.eq(InventoryFinishedOrderDetail::getOperationType, 1)
+                        .in(InventoryFinishedOrderDetail::getOrderInfoId, orderIds));
+        Map<Long, OrderSku> orderSkuMap = orderSkuService.mapKEntity(BaseIdPo::getId, q -> q.in(OrderSku::getOrderId, orderIds));
+
         List<InOutStorageErpExportVo> inOutStorageErpExportVoList = new ArrayList<>();
-        InOutStorageErpExportVo inOutStorageErpExportVo = new InOutStorageErpExportVo();
-        inOutStorageErpExportVo.setPlantCode("SDTY");
-        inOutStorageErpExportVo.setDocCode("T119");
-        String format = DateUtil.format(date, "-yyyyMM");
-        // 生成e10入库单号后四位,当前天+50 防止与bom入库导出单号重复
-        int day = DateUtil.dayOfMonth(date);
-        int hour = DateUtil.hour(date, true);
-        int codeNum = Integer.parseInt(String.valueOf(day + 50) + hour);
-        String code = inOutStorageErpExportVo.getDocCode() + format + String.format("%04d", codeNum);
-        inOutStorageErpExportVo.setCode(code);
-        inOutStorageErpExportVo.setCreateTime(DateUtil.format(date, "yyyy/MM/dd HH:mm:ss"));
-        inOutStorageErpExportVo.setDeptCode("GPIT");
-        inOutStorageErpExportVo.setEmployeeCode("GPIT02");
-        inOutStorageErpExportVoList.add(inOutStorageErpExportVo);
-        Integer[] serialNumber = {1};
+        Map<Long, String> codeMap = new HashMap<>();
+        // 生成入库单
+        for (OutboundOrder outboundOrder : outboundOrderMap.values()) {
+            Date outboundTime = outboundOrder.getOutboundTime();
+            Long format = Long.parseLong(DateUtil.format(outboundTime, "MMddHH"));
+            if (codeMap.get(format) != null) {
+                continue;
+            }
 
+
+            InOutStorageErpExportVo inOutStorageErpExportVo = new InOutStorageErpExportVo();
+            inOutStorageErpExportVo.setId(format);
+            inOutStorageErpExportVo.setPlantCode("SDTY");
+            inOutStorageErpExportVo.setDocCode("T119");
+
+            // 生成单号,后四位生成规则,取系统单号 dd01
+            // 生成e10入库单号后四位,当前天数+num 防止与bom入库导出单号重复
+            int num;
+            if (Objects.equals("T007", outboundOrder.getStorageCode())) {
+                num = 30;
+            } else {
+                num = 60;
+            }
+            int day = DateUtil.dayOfMonth(outboundTime);
+            int hour = DateUtil.hour(outboundTime, true);
+            int codeNum = Integer.parseInt((day + num) + String.format("%02d", hour));
+            String code = inOutStorageErpExportVo.getDocCode() + DateUtil.format(outboundTime, "-yyyyMM") + String.format("%04d", codeNum);
+            inOutStorageErpExportVo.setCode(code);
+            inOutStorageErpExportVo.setCreateTime(DateUtil.format(outboundTime, "yyyy/MM/dd HH:mm:ss"));
+            inOutStorageErpExportVo.setDeptCode("GPIT");
+            inOutStorageErpExportVo.setEmployeeCode("GPIT02");
+
+            codeMap.put(inOutStorageErpExportVo.getId(), code);
+            inOutStorageErpExportVoList.add(inOutStorageErpExportVo);
+        }
+        inOutStorageErpExportVoList.sort(comparing(InOutStorageErpExportVo::getCode));
+
+        Map<String, Integer> serialNumberMap = new HashMap<>();
         List<String> skuSpecCodes = list.stream().map(InventoryFinishedErpImportDataDto::getSkuSpecCode).collect(Collectors.toList());
         Map<String, SkuSpec> skuSpecMap = skuSpecService.mapKEntity(SkuSpec::getCode, q -> q.in(SkuSpec::getCode, skuSpecCodes));
-        List<Long> skuSpecIds = skuSpecMap.values().stream().map(BaseIdPo::getId).collect(Collectors.toList());
-        Map<Long, Long> inventoryFinishedMap = inventoryFinishedOrderDetailService.mapKV(
-                InventoryFinishedOrderDetail::getSkuSpecId,
-                InventoryFinishedOrderDetail::getOrderSkuId,
-                q -> q.eq(InventoryFinishedOrderDetail::getOperationType, 1)
-                        .in(InventoryFinishedOrderDetail::getSkuSpecId, skuSpecIds)
-                        .isNotNull(InventoryFinishedOrderDetail::getOrderSkuId));
-        Map<Long, OrderSku> orderSkuMap = orderSkuService.mapKEntity(OrderSku::getSkuSpecId,
-                q -> q.in(BaseIdPo::getId, inventoryFinishedMap.values()));
 
         // 生成明细
         List<InOutStorageBomErpExportVo> inOutStorageBomErpExportVoList = list.stream()
                 .map(item -> {
-                    BigDecimal unitCost = BigDecimal.ZERO;
-                    SkuSpec skuSpec = skuSpecMap.get(item.getSkuSpecCode());
-                    if (skuSpec != null) {
-                        OrderSku orderSku = orderSkuMap.get(skuSpec.getId());
-                        if (orderSku != null) {
-                            unitCost = orderSku.getUnitPrice()
-                                    .add(orderSku.getCustomProcessingFee())
-                                    .add(orderSku.getLssueFee())
-                                    .add(orderSku.getDeliveryMaterialsFee())
-                                    .add(orderSku.getPackingLabor())
-                                    .add(orderSku.getPackagingMaterialCost())
-                                    .add(orderSku.getManagementFee());
-                        }
-                    }
                     if (!NumberUtil.isNumber(item.getQuantity())) {
                         item.setQuantity("0");
                     }
                     InOutStorageBomErpExportVo inOutStorageBomErpExportVo = new InOutStorageBomErpExportVo();
-                    inOutStorageBomErpExportVo.setCode(code);
                     inOutStorageBomErpExportVo.setBomSpecCode(item.getSkuSpecFinishedCode());
                     inOutStorageBomErpExportVo.setFeatureCode(item.getFeatureCode());
                     inOutStorageBomErpExportVo.setQuantity(item.getQuantity());
@@ -212,15 +232,51 @@ public class InventoryFinishedOrderServiceImpl extends ServiceImpl<InventoryFini
                     inOutStorageBomErpExportVo.setUnit("PCS");
                     inOutStorageBomErpExportVo.setPieces("0");
                     inOutStorageBomErpExportVo.setSourceRtk("OTHER");
+
+                    OutboundOrder outboundOrder = outboundOrderMap.get(item.getOutboundOrderCode());
+                    SkuSpec skuSpec = skuSpecMap.get(item.getSkuSpecCode());
+                    if (outboundOrder == null || skuSpec == null) {
+                        return inOutStorageBomErpExportVo;
+                    }
+                    inOutStorageBomErpExportVo.setCode(codeMap.get(Long.parseLong(DateUtil.format(outboundOrder.getOutboundTime(), "MMddHH"))));
+                    OrderInfo orderInfo = orderInfoMap.get(outboundOrder.getOrderWlnCode());
+                    if (orderInfo == null) {
+                        return inOutStorageBomErpExportVo;
+                    }
+                    List<InventoryFinishedOrderDetail> orderDetailList = inventoryFinishedOrderMap.getOrDefault(orderInfo.getId(), Collections.emptyList());
+                    InventoryFinishedOrderDetail detail = orderDetailList.stream()
+                            .filter(i -> Objects.equals(i.getSkuSpecId(), skuSpec.getId()))
+                            .findAny().orElse(null);
+                    if (detail == null) {
+                        return inOutStorageBomErpExportVo;
+                    }
+                    BigDecimal unitCost = BigDecimal.ZERO;
+                    OrderSku orderSku = orderSkuMap.get(detail.getOrderSkuId());
+                    if (orderSku != null) {
+                        unitCost = orderSku.getUnitPrice()
+                                .add(orderSku.getCustomProcessingFee())
+                                .add(orderSku.getLssueFee())
+                                .add(orderSku.getDeliveryMaterialsFee())
+                                .add(orderSku.getPackingLabor())
+                                .add(orderSku.getPackagingMaterialCost())
+                                .add(orderSku.getManagementFee());
+                    }
                     inOutStorageBomErpExportVo.setUnitCost(unitCost.toPlainString());
                     inOutStorageBomErpExportVo.setCostAmt(unitCost.multiply(new BigDecimal(item.getQuantity())).toPlainString());
                     return inOutStorageBomErpExportVo;
                 })
-                .sorted(comparing(InOutStorageBomErpExportVo::getCode))
+                .sorted(comparing(InOutStorageBomErpExportVo::getCode, Comparator.nullsFirst(String::compareTo)))
                 .peek(item -> {
-                    item.setSerialNumber(serialNumber[0].toString());
-                    serialNumber[0]++;
-                }).collect(Collectors.toList());
+                    Integer serialNumber = serialNumberMap.get(item.getCode());
+                    if (serialNumber == null) {
+                        serialNumber = 1;
+                        serialNumberMap.put(item.getCode(), serialNumber);
+                    } else {
+                        serialNumberMap.put(item.getCode(), serialNumber+=1);
+                    }
+                    item.setSerialNumber(serialNumber.toString());
+                })
+                .collect(Collectors.toList());
         String fileName = "成品入库单";
         TemplateExcelUtil.writeBrowserMultiSheet("inOutStorageDetails.xlsx", 2, fileName, response, inOutStorageErpExportVoList, inOutStorageBomErpExportVoList);
     }