From 8b80a4134c53eadbf2c7260af2a0952885e74f1a Mon Sep 17 00:00:00 2001 From: Gauthier LO Date: Wed, 23 Oct 2024 15:50:15 +0200 Subject: [PATCH] feat: product order improvement --- .../controller/admin/SkuController.java | 25 +- .../shippingInvoice/InvoiceController.java | 10 +- .../domain/job/MabangSkuStockUpdateJob.java | 81 ++----- .../domain/job/SkuShippingQtyJob.java | 2 + .../modules/business/mapper/SkuMapper.java | 7 +- .../modules/business/mapper/xml/SkuMapper.xml | 214 ++++++++++++++++++ .../service/ISkuListMabangService.java | 2 + .../modules/business/service/ISkuService.java | 7 +- .../impl/SkuListMabangServiceImpl.java | 59 +++++ .../business/service/impl/SkuServiceImpl.java | 41 +++- 10 files changed, 383 insertions(+), 65 deletions(-) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java index 688131955..4f739968f 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java @@ -405,7 +405,7 @@ public class SkuController { } else { if(clientId != null) { - total = skuService.countAllClientSkus(); + total = skuService.countAllClientSkus(clientId); skuOrdersPage = skuService.fetchSkusByClient(clientId, pageNo, pageSize, parsedColumn, parsedOrder); } else { total = skuService.countAllSkus(); @@ -419,6 +419,23 @@ public class SkuController { page.setTotal(total); return Result.OK(page); } + @GetMapping("/listAllSelectableSkuIds") + public Result listAllSelectableSkuIds(@RequestParam(name = "clientId") String clientId, + @RequestParam(name = "erpCodes", required = false) String erpCodes, + @RequestParam(name = "zhNames", required = false) String zhNames, + @RequestParam(name = "enNames", required = false) String enNames + ) { + List selectableSkuIds; + if(erpCodes != null || zhNames != null || enNames != null) { + List erpCodeList = erpCodes == null ? null : Arrays.asList(erpCodes.split(",")); + List zhNameList = zhNames == null ? null : Arrays.asList(zhNames.split(",")); + List enNameList = enNames == null ? null : Arrays.asList(enNames.split(",")); + selectableSkuIds = skuService.listSelectableSkuIdsWithFilters(clientId, erpCodeList, zhNameList, enNameList); + } else { + selectableSkuIds = skuService.listSelectableSkuIds(clientId); + } + return Result.OK(selectableSkuIds); + } @GetMapping("/searchExistingSkuByKeywords") public Result searchExistingSkuByKeywords(@RequestParam("keywords") String keywords) { String parsedKeywords = keywords.trim().replaceAll("[{}=$]", ""); @@ -472,4 +489,10 @@ public class SkuController { } return Result.OK(); } + + @PostMapping("/syncSkuQty") + public Result syncSkuQty(@RequestBody List erpCodes) { + skuListMabangService.mabangSkuStockUpdate(erpCodes); + return Result.OK(); + } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java index 578e64645..ea8f8cb54 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java @@ -738,10 +738,18 @@ public class InvoiceController { List refunds = savRefundWithDetailService.getRefundsByInvoiceNumber(invoiceNumber); return shippingInvoiceService.exportToExcel(factureDetails, refunds, invoiceNumber, invoiceEntity, internalCode); } + @GetMapping(value = "/downloadInvoiceInventory") + public byte[] downloadInvoiceInventory(@RequestParam("invoiceCode") String invoiceCode, @RequestParam("internalCode") String internalCode, @RequestParam("invoiceEntity") String invoiceEntity) throws IOException { + InvoiceMetaData metaData = new InvoiceMetaData("", invoiceCode, internalCode, invoiceEntity, ""); + List skuOrderPages = skuService.getInventoryByInvoiceNumber(metaData.getInvoiceCode()); + return shippingInvoiceService.exportPurchaseInventoryToExcel(skuOrderPages, metaData); + } @GetMapping(value = "/downloadInventory") public byte[] downloadInventory(@RequestParam("invoiceCode") String invoiceCode, @RequestParam("internalCode") String internalCode, @RequestParam("invoiceEntity") String invoiceEntity) throws IOException { InvoiceMetaData metaData = new InvoiceMetaData("", invoiceCode, internalCode, invoiceEntity, ""); - List skuOrderPages = skuService.getInventoryByInvoiceNumber(metaData.getInvoiceCode()); + String clientId = clientService.getClientIdByCode(internalCode); + List erpCodes = skuService.listSelectableSkuIds(clientId).stream().map(SkuOrderPage::getErpCode).collect(Collectors.toList()); + List skuOrderPages = skuService.getInventory(erpCodes, metaData.getInvoiceCode()); return shippingInvoiceService.exportPurchaseInventoryToExcel(skuOrderPages, metaData); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/MabangSkuStockUpdateJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/MabangSkuStockUpdateJob.java index a7e18165d..6b5aba241 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/MabangSkuStockUpdateJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/MabangSkuStockUpdateJob.java @@ -1,86 +1,49 @@ package org.jeecg.modules.business.domain.job; -import com.amazonaws.services.dynamodbv2.xspec.S; import lombok.extern.slf4j.Slf4j; -import org.jeecg.modules.business.domain.api.mabang.stockGetStockQuantity.SkuStockData; -import org.jeecg.modules.business.domain.api.mabang.stockGetStockQuantity.SkuStockRawStream; -import org.jeecg.modules.business.domain.api.mabang.stockGetStockQuantity.SkuStockRequestBody; -import org.jeecg.modules.business.domain.api.mabang.stockGetStockQuantity.SkuStockStream; +import org.codehaus.jettison.json.JSONArray; +import org.codehaus.jettison.json.JSONException; +import org.codehaus.jettison.json.JSONObject; import org.jeecg.modules.business.entity.Sku; -import org.jeecg.modules.business.mongoService.SkuMongoService; +import org.jeecg.modules.business.service.ISkuListMabangService; import org.jeecg.modules.business.service.ISkuService; -import org.jeecg.modules.business.service.MigrationService; import org.quartz.Job; +import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.Date; import java.util.List; import java.util.stream.Collectors; @Slf4j @Component public class MabangSkuStockUpdateJob implements Job { @Autowired - private ISkuService skuService; + private ISkuListMabangService skuListMabangService; @Autowired - private SkuMongoService skuMongoService; + private ISkuService skuService; @Override public void execute(JobExecutionContext context) throws JobExecutionException { - List skuList = skuService.listSkus().stream().map(Sku::getErpCode).collect(Collectors.toList()); - StringBuilder skus = new StringBuilder(); - List updateList = new ArrayList<>(); - List skuToUpdate = new ArrayList<>(); log.info("Sku stock update Job has started."); - int count = 1; - for(int i = 1; i <= skuList.size(); i++) { - if(i%100 != 1) - skus.append(","); - skus.append(skuList.get(i - 1)); - if(i%100 == 0) { - SkuStockRequestBody body = (new SkuStockRequestBody()) - .setStockSkus(skus.toString()) - .setTotal(skuList.size()); - log.info("Sending request for page {}/{}.", count++, body.getTotalPages()); - - SkuStockRawStream rawStream = new SkuStockRawStream(body); - SkuStockStream stream = new SkuStockStream(rawStream); - updateList.addAll(stream.all()); - skus = new StringBuilder(); + List erpCodes = skuService.listSkus().stream().map(Sku::getErpCode).collect(Collectors.toList()); + JobDataMap jobDataMap = context.getMergedJobDataMap(); + String parameter = ((String) jobDataMap.get("parameter")); + if (parameter != null) { + try { + JSONObject jsonObject = new JSONObject(parameter); + if (!jsonObject.isNull("skus")) { + JSONArray array = jsonObject.getJSONArray("skus"); + for(int i = 0; i < array.length(); i++) { + erpCodes.add(array.getString(i)); + } + } + } catch (JSONException e) { + log.error("Error while parsing parameter as JSON, falling back to default parameters."); } } - if(skus.length() != 0) { - SkuStockRequestBody body = (new SkuStockRequestBody()) - .setStockSkus(skus.toString()) - .setTotal(skuList.size()); - SkuStockRawStream rawStream = new SkuStockRawStream(body); - SkuStockStream stream = new SkuStockStream(rawStream); - updateList.addAll(stream.all()); - } - updateList.forEach(skuStockData -> { - Sku sku = skuService.getByErpCode(skuStockData.getStockSku()); - Integer availableAmount = skuStockData.getWarehouseStock("SZBA宝安仓").getStockQuantity(); - Integer purchasingAmount = skuStockData.getWarehouseStock("SZBA宝安仓").getShippingQuantity(); - if(sku.getAvailableAmount().equals(availableAmount) && sku.getPurchasingAmount().equals(purchasingAmount)) { - return; - } - sku.setAvailableAmount(availableAmount); - sku.setPurchasingAmount(purchasingAmount); - sku.setUpdateBy("mabang api"); - sku.setUpdateTime(new Date()); - skuToUpdate.add(sku); - }); - if(skuToUpdate.isEmpty()) { - return; - } - log.info("Updating stock for {} skus.", skuToUpdate.size()); - skuService.updateBatchStockByIds(skuToUpdate); - for(Sku sku : skuToUpdate) { - skuMongoService.updateStock(sku); - } + skuListMabangService.mabangSkuStockUpdate(erpCodes); log.info("Sku stock update Job has ended."); } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/SkuShippingQtyJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/SkuShippingQtyJob.java index 681a79c8f..bf4a3b537 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/SkuShippingQtyJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/SkuShippingQtyJob.java @@ -17,6 +17,7 @@ import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; @@ -28,6 +29,7 @@ import java.util.stream.Collectors; import static java.util.stream.Collectors.*; @Slf4j +@Component public class SkuShippingQtyJob implements Job { @Autowired private IPlatformOrderService platformOrderService; diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SkuMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SkuMapper.java index 2cecc7b86..9a2e8857b 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SkuMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SkuMapper.java @@ -51,7 +51,7 @@ public interface SkuMapper extends BaseMapper { Integer countAllSkus(); Integer countAllSkuWeightsWithFilters(@Param("erpCodes") String erpCodesRegex, @Param("zhNames") String zhNamesRegex, @Param("enNames") String enNamesRegex); - Integer countAllClientSkus(); + Integer countAllClientSkus(@Param("clientId") String clientId); Integer countAllClientSkusWithFilters(@Param("clientId") String clientId, @Param("erpCodes") String erpCodesRegex, @Param("zhNames") String zhNamesRegex, @Param("enNames") String enNamesRegex); List fetchSkuWeights(@Param("offset") Integer offset, @Param("size") Integer pageSize, @Param("column") String column, @Param("order") String order); @@ -59,6 +59,9 @@ public interface SkuMapper extends BaseMapper { List fetchSkuWeightsWithFilters(@Param("offset") Integer offset, @Param("size") Integer pageSize, @Param("column") String column, @Param("order") String order, @Param("erpCodes") String erpCodesRegex, @Param("zhNames") String zhNamesRegex, @Param("enNames") String enNamesRegex); List fetchSkusByClientWithFilters(@Param("clientId") String clientId, @Param("offset") Integer offset, @Param("size") Integer pageSize, @Param("column") String column, @Param("order") String order, @Param("erpCodes") String erpCodesRegex, @Param("zhNames") String zhNamesRegex, @Param("enNames") String enNamesRegex); + List listSelectableSkuIdsWithFilters(@Param("clientId") String clientId, @Param("erpCodes") String erpCodeList, @Param("zhNames") String zhNameList, @Param("enNames") String enNameList); + List listSelectableSkuIds(@Param("clientId") String clientId); + String getIdFromErpCode(@Param("erpCode") String erpCode); List listSkus(); @@ -69,6 +72,8 @@ public interface SkuMapper extends BaseMapper { List getInventoryByInvoiceNumber(@Param("invoiceNumber") String invoiceNumber); + List getInventory(@Param("erpCodes") List erpCodes, @Param("invoiceNumber") String invoiceNumber); + List listByClientId(@Param("clientId") String clientId); List searchExistingSkuByKeywords(@Param("keywords") List keywords); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SkuMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SkuMapper.xml index fa122e1d3..93f327aa6 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SkuMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SkuMapper.xml @@ -402,6 +402,149 @@ ; + + +