|
@@ -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");
|
|
|
-
|
|
|
- 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");
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ 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);
|
|
|
}
|