From b23a273b896c07f17ccef12efdc67c6fb642fc97 Mon Sep 17 00:00:00 2001 From: Gauthier LO Date: Fri, 27 Dec 2024 15:31:56 +0100 Subject: [PATCH] feat : first sheet and latest weight imported in Mabang --- .../admin/PurchaseOrderController.java | 10 ++- .../controller/admin/SkuWeightController.java | 87 ++++++++++--------- .../impl/SkuListMabangServiceImpl.java | 52 +++++++++-- 3 files changed, 95 insertions(+), 54 deletions(-) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/PurchaseOrderController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/PurchaseOrderController.java index ac94aae36..59a9f83a2 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/PurchaseOrderController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/PurchaseOrderController.java @@ -212,9 +212,13 @@ public class PurchaseOrderController { BeanUtils.copyProperties(purchaseOrderPage, purchaseOrder); purchaseOrder.setPaymentDocumentString(new String(purchaseOrderPage.getPaymentDocument())); purchaseOrder.setInventoryDocumentString(new String(purchaseOrderPage.getInventoryDocument())); + Map responsesMappedByReason = new HashMap<>(); if(purchaseOrderPage.getPlatformOrderId() == null) { + Responses purchaseUpdateResponse = new Responses(); purchaseOrderService.updateById(purchaseOrder); - return Result.OK("sys.api.entryEditSuccess"); + purchaseUpdateResponse.addSuccess("updated"); + responsesMappedByReason.put("orderUpdate : " + purchaseOrder.getInvoiceNumber(), purchaseUpdateResponse); + return Result.OK("sys.api.entryEditSuccess", responsesMappedByReason); } List platformOrderIds = new ArrayList<>(Arrays.asList(purchaseOrderPage.getPlatformOrderId().split(","))); log.info("Editing purchase order and attributing it to orders : {}", platformOrderIds); @@ -222,7 +226,7 @@ public class PurchaseOrderController { platformOrderService.removePurchaseInvoiceNumber(purchaseOrder.getInvoiceNumber(), purchaseOrder.getClientId()); List platformOrders = platformOrderService.selectByPlatformOrderIds(platformOrderIds); log.info("Platform orders found for attribution : {}", platformOrders.stream().map(PlatformOrder::getPlatformOrderId).collect(Collectors.toList())); - Map responsesMappedByReason = new HashMap<>(); + Responses platformOrderIdUpdateResponse = new Responses(); if(!platformOrders.isEmpty()) { for(PlatformOrder po : platformOrders) { @@ -237,7 +241,7 @@ public class PurchaseOrderController { platformOrderIdUpdateResponse.getFailures().addAll(platformOrderIds); } purchaseOrderService.updateById(purchaseOrder); - responsesMappedByReason.put("Platform Order IDs Update / 平台订单号码更新 : " + purchaseOrder.getInvoiceNumber(), platformOrderIdUpdateResponse); + responsesMappedByReason.put("orderIdUpdate : " + purchaseOrder.getInvoiceNumber(), platformOrderIdUpdateResponse); return Result.OK("sys.api.entryEditSuccess", responsesMappedByReason); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuWeightController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuWeightController.java index a6829606b..9254ab1df 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuWeightController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuWeightController.java @@ -186,56 +186,59 @@ public class SkuWeightController extends JeecgController skuWeightSuccesses = new ArrayList<>(); - mabangResponses.getSuccesses().forEach(skuErpCode -> skuWeightSuccesses.add(skuWeightMappedByErpCode.get(skuErpCode))); + mabangResponses.getSuccesses().forEach(skuErpCode -> { + String erpCode = skuErpCode.split(":")[0].trim(); + skuWeightSuccesses.add(skuWeightMappedByErpCode.get(erpCode)); + }); skuWeightSuccesses.forEach(skuWeight -> skuMongoService.upsertSkuWeight(skuWeight)); skuWeightService.saveBatch(skuWeights); - responses.setSuccesses(mabangResponses.getSuccesses()); + responses.getSuccesses().addAll(mabangResponses.getSuccesses()); + responses.getFailures().addAll(mabangResponses.getFailures()); } catch (Exception e) { e.printStackTrace(); String msg = e.getMessage(); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/SkuListMabangServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/SkuListMabangServiceImpl.java index df1cd96dd..e2002b3ec 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/SkuListMabangServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/SkuListMabangServiceImpl.java @@ -638,11 +638,38 @@ public class SkuListMabangServiceImpl extends ServiceImpl skuWeights) { Responses responses = new Responses(); List failures = new ArrayList<>(); - List skus = skuService.listByIds(skuWeights.stream() - .map(SkuWeight::getSkuId).collect(toList())); - + List skuIds = skuWeights.stream() + .map(SkuWeight::getSkuId) + .collect(toList()); + List skus = skuService.listByIds(skuIds); + // Map skuWeights by skuId, if skuId already in map, keep the skuWeight with the latest effective date + Map skuWeightMappedById = skuWeights.stream() + .collect(Collectors.toMap(SkuWeight::getSkuId, Function.identity(), (skuWeight1, skuWeight2) -> { + if(skuWeight1.getEffectiveDate().after(skuWeight2.getEffectiveDate())) { + log.info("The weight [{}] for sku [{}] is more recent.", skuWeight1.getWeight() ,skuWeight1.getSkuId()); + return skuWeight1; + } + log.info("The weight [{}] for sku [{}] is more recent.", skuWeight2.getWeight() ,skuWeight2.getSkuId()); + return skuWeight2; + })); + List skusToUpdate = new ArrayList<>(); + for(Sku sku : skus) { + SkuWeight latestSkuWeight = skuWeightService.getBySkuId(sku.getId()); + if(latestSkuWeight == null) { + skusToUpdate.add(sku); + continue; + } + Date latestEffectiveDate = latestSkuWeight.getEffectiveDate(); + Date effectiveDateToImport = skuWeightMappedById.get(sku.getId()).getEffectiveDate(); + if(latestEffectiveDate.after(effectiveDateToImport)) { + log.info("Sku {} has a more recent weight in DB. Therefore won't be imported to Mabang", sku.getErpCode()); + responses.addSuccess(sku.getErpCode()); + continue; + } + skusToUpdate.add(sku); + } Map remarkMappedByErpCode = new HashMap<>(); - List> skusPartition = Lists.partition(skus.stream().map(Sku::getErpCode).collect(toList()), 50); + List> skusPartition = Lists.partition(skusToUpdate.stream().map(Sku::getErpCode).collect(toList()), 50); for(List skuPartition : skusPartition) { SkuListRequestBody body = new SkuListRequestBody(); body.setStockSkuList(String.join(",", skuPartition)); @@ -664,15 +691,22 @@ public class SkuListMabangServiceImpl extends ServiceImpl skuDataList = skuWeights.stream() .map(skuWeight -> { - Sku sku = skus.stream() + Sku sku = skusToUpdate.stream() .filter(s -> s.getId().equals(skuWeight.getSkuId())) .findFirst() .orElse(null); - if(null == sku) { + Sku skuInDb = skus.stream() + .filter(s -> s.getId().equals(skuWeight.getSkuId())) + .findFirst() + .orElse(null); + if(null == skuInDb) { log.error("Sku not found : {}", skuWeight.getSkuId()); failures.add(skuWeight.getSkuId()); return null; } + if(null == sku) { + return null; + } SkuData skuData = new SkuData(); skuData.setErpCode(sku.getErpCode()); if(remarkMappedByErpCode.containsKey(sku.getErpCode())) { @@ -713,14 +747,14 @@ public class SkuListMabangServiceImpl extends ServiceImpl successes = results.stream() .filter(SkuChangeResponse::success) - .map(SkuChangeResponse::getStockSku) + .map(response -> response.getStockSku() + " : Mabang OK") .collect(toList()); failures.addAll(results.stream() .filter(response -> !response.success()) - .map(SkuChangeResponse::getStockSku) + .map(response -> response.getStockSku() + " | Mabang") .collect(toList())); - responses.setSuccesses(successes); + responses.getSuccesses().addAll(successes); responses.setFailures(failures); return responses; }