From c8cfc8fb2d247773af0531ddc131bfbd25d35d73 Mon Sep 17 00:00:00 2001 From: Gauthier LO Date: Mon, 12 May 2025 15:06:14 +0200 Subject: [PATCH] feat: fix order list, invoice number in order on mabang --- .../jeecg/common/constant/CommonConstant.java | 2 +- .../admin/PurchaseOrderController.java | 8 +- .../controller/admin/SkuController.java | 73 +---------- .../shippingInvoice/InvoiceController.java | 38 +++++- .../ShippingInvoiceFactory.java | 13 +- .../mapper/xml/PlatformOrderMapper.xml | 25 +++- .../service/IPlatformOrderMabangService.java | 6 + .../service/IProviderMabangService.java | 4 - .../service/ISkuListMabangService.java | 2 + .../PlatformOrderShippingInvoiceService.java | 7 +- .../service/impl/InvoiceServiceImpl.java | 4 + .../impl/PlatformOrderMabangServiceImpl.java | 115 +++++++++++++++--- .../impl/ProviderMabangServiceImpl.java | 45 ------- .../impl/SkuListMabangServiceImpl.java | 78 ++++++++++++ 14 files changed, 262 insertions(+), 158 deletions(-) diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java index 8e3299a93..84d9a84bf 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java @@ -323,7 +323,7 @@ public interface CommonConstant { String X_MiniFlowExclusionFieldMode = "X-Miniflowexclusionfieldmode"; /**===============================================================================================*/ - String TOKEN_IS_INVALID_MSG = "Token失效,请重新登录!"; + String TOKEN_IS_INVALID_MSG = "Your session has expired, please log in again"; String X_FORWARDED_SCHEME = "X-Forwarded-Scheme"; 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 42130a11f..54bcdf08a 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 @@ -79,6 +79,8 @@ public class PurchaseOrderController { @Autowired private IShippingInvoiceService shippingInvoiceService; @Autowired private IProviderMabangService providerMabangService; + @Autowired + private IPlatformOrderMabangService platformOrderMabangService; private static final Integer DEFAULT_NUMBER_OF_THREADS = 2; private static final Integer MABANG_API_RATE_LIMIT_PER_MINUTE = 10; @@ -625,7 +627,7 @@ public class PurchaseOrderController { } else { log.info("Updating order erp status to 2 in Mabang"); List platformOrderIds = platformOrderService.getPlatformOrderIdsByInvoiceNumbers(invoiceNumbers); - Response, List> updateResponse = providerMabangService.updateOrderStatusToPreparing(platformOrderIds); + Response, List> updateResponse = platformOrderMabangService.updateOrderStatusToPreparing(platformOrderIds); Responses updateOrderStatusResponse = new Responses(); if(updateResponse.getStatus() == HttpStatus.SC_INTERNAL_SERVER_ERROR) { String errMsg = updateResponse.getError().get(0).getReason(); @@ -634,10 +636,10 @@ public class PurchaseOrderController { } else { List updateOrderStatusSuccess = updateResponse.getData().stream() - .map(UpdateResult::getPlatformOrderId) + .map(UpdateResult::getPlatformOrderNumber) .collect(Collectors.toList()); List updateOrderStatusFailure = updateResponse.getError().stream() - .map(UpdateResult::getPlatformOrderId) + .map(UpdateResult::getPlatformOrderNumber) .collect(Collectors.toList()); log.info("Update order errors : {}", updateResponse.getError()); updateOrderStatusResponse.getSuccesses().addAll(updateOrderStatusSuccess); 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 5ec9a222c..bc42b7c8f 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 @@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.base.CaseFormat; -import com.google.common.collect.Lists; import freemarker.template.Template; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -15,12 +14,7 @@ import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.oConvertUtils; -import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.SkuData; -import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.SkuListRawStream; -import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.SkuListRequestBody; -import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.SkuUpdateListStream; import org.jeecg.modules.business.entity.*; -import org.jeecg.modules.business.model.SkuDocument; import org.jeecg.modules.business.mongoService.SkuMongoService; import org.jeecg.modules.business.service.*; import org.jeecg.modules.business.vo.*; @@ -622,70 +616,11 @@ public class SkuController { public Result compareClientSkuWithMabang(@RequestParam(name="clientId") String clientId, @RequestParam(name="erpStatuses[]") List erpStatuses) { Map clientSkus = skuService.listInUninvoicedOrders(clientId, erpStatuses); - List skuIds = new ArrayList<>(clientSkus.keySet()); - List clientSkuDocs = new ArrayList<>(); - for(String skuId: skuIds) { - List skus = skuMongoService.findBySkuId(skuId); - if(skus.isEmpty()) { - skuMongoService.migrateOneSku(clientSkus.get(skuId)); - skus = skuMongoService.findBySkuId(skuId); - } - SkuDocument sku = skus.get(0); - clientSkuDocs.add(sku); - } - - List> erpCodePartition = Lists.partition(clientSkuDocs, 50) - .stream() - .map(skus -> skus.stream().map(SkuDocument::getErpCode).collect(Collectors.toList())) - .collect(Collectors.toList()); - List skusFromMabang = new ArrayList<>(); - for(List partition : erpCodePartition) { - SkuListRequestBody body = new SkuListRequestBody(); - body.setStockSkuList(String.join(",", partition)); - SkuListRawStream rawStream = new SkuListRawStream(body); - SkuUpdateListStream stream = new SkuUpdateListStream(rawStream); - skusFromMabang.addAll(stream.all()); - } - List desyncedSkus = new ArrayList<>(); - List syncedSkus = new ArrayList<>(); - for(SkuDocument sku : clientSkuDocs) { - SkuData skuData = skusFromMabang.stream().filter(s -> s.getErpCode().equals(sku.getErpCode())) - .findFirst().orElse(null); - if(skuData != null) { - boolean isDesynced = false; - BigDecimal mabangPrice = skuData.getSalePrice().setScale(2, RoundingMode.HALF_UP); // because price from mabang has 4 decimal places, so Objects.equals will always return false - if(skuData.getWeight() == null && sku.getLatestSkuWeight() != null) { - log.info("sku {} doesn't have a weight on Mabang but has one in Mongo", skuData.getErpCode()); - isDesynced = true; - } - if (sku.getLatestSkuWeight() != null && !Objects.equals(skuData.getWeight(), sku.getLatestSkuWeight().getWeight())) { - log.info("sku {} has a different weight on Mabang and in Mongo : mabang :{}; mongo :{}", skuData.getErpCode() ,skuData.getWeight(), sku.getLatestSkuWeight().getWeight()); - isDesynced = true; - } - if(skuData.getSalePrice() == null && sku.getLatestSkuPrice() != null) { - log.info("sku {} doesn't have a price on Mabang but has one in mongo", skuData.getErpCode()); - isDesynced = true; - } - if(sku.getLatestSkuPrice() != null && !Objects.equals(mabangPrice, sku.getLatestSkuPrice().getPrice())) { - log.info("sku {} has a different price on Mabang and in Mongo : mabang :{}; mongo :{}", skuData.getErpCode() ,skuData.getSalePrice(), sku.getLatestSkuPrice().getPrice()); - isDesynced = true; - } - if(isDesynced) - desyncedSkus.add(skuData.getErpCode()); - else - syncedSkus.add(skuData.getErpCode()); - } else { - desyncedSkus.add(sku.getErpCode()); - } - } - if(!desyncedSkus.isEmpty()) { - log.info("Desynced skus : {}", desyncedSkus); - skuService.setIsSynced(desyncedSkus, false); - } - if(!syncedSkus.isEmpty()) { - log.info("Synced skus : {}", syncedSkus); - skuService.setIsSynced(syncedSkus, true); + if(clientSkus.isEmpty()) { + log.info("No skus to compare"); + return Result.OK(); } + skuListMabangService.compareClientSkusWithMabang(clientSkus); 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 d2da89780..9f8bd3508 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 @@ -15,7 +15,6 @@ import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.business.controller.UserException; -import org.jeecg.modules.business.domain.api.mabang.getorderlist.OrderStatus; import org.jeecg.modules.business.domain.purchase.invoice.PurchaseInvoiceEntry; import org.jeecg.modules.business.entity.*; import org.jeecg.modules.business.mapper.ExchangeRatesMapper; @@ -54,6 +53,7 @@ import java.util.stream.Collectors; import static org.jeecg.common.util.SqlInjectionUtil.specialFilterContentForDictSql; import static org.jeecg.modules.business.entity.Invoice.InvoiceType.*; +import static org.jeecg.modules.business.entity.Invoice.InvoicingMethod.*; import static org.jeecg.modules.business.entity.Task.TaskCode.SI_G; import static org.jeecg.modules.business.entity.TaskHistory.TaskStatus.*; import static org.jeecg.modules.business.vo.PlatformOrderFront.*; @@ -117,6 +117,8 @@ public class InvoiceController { @Autowired private ICreditService creditService; @Autowired + private IPlatformOrderMabangService platformOrderMabangService; + @Autowired Environment env; @Value("${jeecg.path.shippingInvoiceDir}") @@ -246,10 +248,20 @@ public class InvoiceController { @PostMapping(value = "/makeComplete") public Result makeCompleteShippingInvoice(@RequestBody ShippingInvoiceParam param) { try { - String method = param.getErpStatuses().toString().equals("[3]") ? "post" : param.getErpStatuses().toString().equals("[1, 2]") ? "pre-shipping" : "all"; + JSONObject response = new JSONObject(); + + String method = param.getErpStatuses().toString().equals("[3]") ? POSTSHIPPING.getMethod() : param.getErpStatuses().toString().equals("[1, 2]") ? PRESHIPPING.getMethod() : ALL.getMethod(); InvoiceMetaData metaData = shippingInvoiceService.makeCompleteInvoicePostShipping(param, method); balanceService.updateBalance(param.clientID(), metaData.getInvoiceCode(), COMPLETE.name()); - return Result.OK(metaData); + + if(method.equals(PRESHIPPING.getMethod())) { + ResponsesWithMsg mabangResponses = platformOrderMabangService.editOrdersRemark(metaData.getInvoiceCode()); + response.put("metaData", metaData); + response.put("mabangResponses", mabangResponses); + return Result.OK(response); + } + response.put("metaData", metaData); + return Result.OK(response); } catch (UserException e) { return Result.error(e.getMessage()); } catch (IOException | ParseException e) { @@ -320,6 +332,7 @@ public class InvoiceController { public Result makeManualPurchaseInvoice(@RequestBody ShippingInvoiceOrderParam param) { InvoiceMetaData metaData; try { + JSONObject response = new JSONObject(); List skuQuantities = skuService.getSkuQuantitiesFromOrderIds(param.orderIds()); if(skuQuantities.isEmpty()) { return Result.error("Nothing to invoice."); @@ -353,7 +366,14 @@ public class InvoiceController { emailService.sendSimpleMessage(destEmail, subject, htmlBody, session); log.info("Mail sent successfully"); } - return Result.OK(metaData); + if(param.getType().equals(PRESHIPPING.getMethod())) { + ResponsesWithMsg mabangResponses = platformOrderMabangService.editOrdersRemark(metaData.getInvoiceCode()); + response.put("metaData", metaData); + response.put("mabangResponses", mabangResponses); + return Result.OK(response); + } + response.put("metaData", metaData); + return Result.OK(response); } catch (UserException e) { return Result.error(e.getMessage()); } catch (IOException e) { @@ -376,6 +396,7 @@ public class InvoiceController { @PostMapping(value = "/makeManualComplete") public Result makeManualCompleteInvoice(@RequestBody ShippingInvoiceOrderParam param) { try { + JSONObject response = new JSONObject(); InvoiceMetaData metaData = shippingInvoiceService.makeCompleteInvoice(param); String clientCategory = clientCategoryService.getClientCategoryByClientId(param.clientID()); if(clientCategory.equals(ClientCategory.CategoryName.CONFIRMED.getName()) || clientCategory.equals(ClientCategory.CategoryName.VIP.getName())) { @@ -402,7 +423,14 @@ public class InvoiceController { emailService.sendSimpleMessage(destEmail, subject, htmlBody, session); log.info("Mail sent successfully"); } - return Result.OK(metaData); + if(param.getType().equals(PRESHIPPING.getMethod())) { + ResponsesWithMsg mabangResponses = platformOrderMabangService.editOrdersRemark(metaData.getInvoiceCode()); + response.put("metaData", metaData); + response.put("mabangResponses", mabangResponses); + return Result.OK(response); + } + response.put("metaData", metaData); + return Result.OK(response); } catch (UserException e) { return Result.error(e.getMessage()); } catch (IOException | ParseException e) { diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/shippingInvoice/ShippingInvoiceFactory.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/shippingInvoice/ShippingInvoiceFactory.java index 9134e4d6c..cfb07dd3e 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/shippingInvoice/ShippingInvoiceFactory.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/shippingInvoice/ShippingInvoiceFactory.java @@ -36,6 +36,7 @@ import java.util.stream.Collectors; import static cn.hutool.core.date.DateTime.now; import static java.util.stream.Collectors.*; import static org.jeecg.modules.business.entity.Invoice.InvoiceType.*; +import static org.jeecg.modules.business.entity.Invoice.InvoicingMethod.*; @Slf4j @Component @@ -132,11 +133,11 @@ public class ShippingInvoiceFactory { List extraFees = extraFeeService.findNotInvoicedByShops(shopIds); log.info("Orders to be invoiced: {}", uninvoicedOrderToContent); String subject; - if(type.equals("shipping")) + if(type.equals(POSTSHIPPING.getMethod())) subject = String.format("Shipping fees from %s to %s", start, end); - else if(type.equals("pre-shipping")) + else if(type.equals(PRESHIPPING.getMethod())) subject = String.format("Pre-Shipping fees, order time from %s to %s", start, end); - else if(type.equals("all")) + else if(type.equals(ALL.getMethod())) subject = String.format("Shipping fees, order time from %s to %s", start, end); else throw new UserException("Couldn't create shipping invoice of unknown type."); @@ -180,11 +181,11 @@ public class ShippingInvoiceFactory { String subject; if(shippingMethod.equals("shipping")) subject = String.format("Purchase and Shipping fees from %s to %s", start, end); - else if(shippingMethod.equals("post")) + else if(shippingMethod.equals(POSTSHIPPING.getMethod())) subject = String.format("Purchase and post-Shipping fees from %s to %s", start, end); - else if (shippingMethod.equals("pre-shipping")) + else if (shippingMethod.equals(PRESHIPPING.getMethod())) subject = String.format("Purchase and pre-Shipping fees, order time from %s to %s", start, end); - else if(shippingMethod.equals("all")) + else if(shippingMethod.equals(ALL.getMethod())) subject = String.format("Purchase and Shipping fees, order time from %s to %s", start, end); else throw new UserException("Couldn't create complete invoice for unknown shipping method"); if(balance != null) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderMapper.xml index caa632ebd..900788aa9 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderMapper.xml @@ -684,6 +684,8 @@ SELECT platform_order_id FROM platform_order - WHERE shipping_invoice_number = #{invoiceNumber}; + WHERE shipping_invoice_number = #{invoiceNumber} OR purchase_invoice_number = #{invoiceNumber}; SELECT count(po.id) FROM platform_order po - JOIN platform_order_content poc ON po.id = poc.platform_order_id - JOIN sku s ON poc.sku_id = s.id - JOIN logistic_channel lc ON po.logistic_channel_name = lc.zh_name + JOIN logistic_channel lc ON po.logistic_channel_name = lc.zh_name WHERE po.erp_status IN #{erpStatus} @@ -1308,6 +1320,7 @@ AND po.order_time BETWEEN #{start} AND #{end} + AND po.shipping_invoice_number IS NULL