From 080cf38c08b15accfd7bd51036f3efffbed31cd9 Mon Sep 17 00:00:00 2001 From: Gauthier LO Date: Wed, 21 May 2025 12:28:11 +0200 Subject: [PATCH] fix: seperated mabang api call, result sent by websocket --- .../admin/PlatformOrderController.java | 19 ++++++ .../shippingInvoice/InvoiceController.java | 68 +++++-------------- .../ShippingInvoiceFactory.java | 10 ++- .../modules/business/entity/Invoice.java | 4 ++ .../mapper/PlatformOrderContentMapper.java | 2 +- .../business/mapper/PlatformOrderMapper.java | 3 +- .../mapper/xml/PlatformOrderContentMapper.xml | 10 +++ .../mapper/xml/PlatformOrderMapper.xml | 9 +++ .../service/IPlatformOrderService.java | 4 +- .../impl/PlatformOrderMabangServiceImpl.java | 13 ++-- .../impl/PlatformOrderServiceImpl.java | 11 ++- .../business/vo/InvoiceOrdersEditParam.java | 18 +++++ .../message/service/ISysMessageService.java | 7 ++ .../service/impl/SysMessageServiceImpl.java | 30 +++++++- 14 files changed, 144 insertions(+), 64 deletions(-) create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/InvoiceOrdersEditParam.java diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/PlatformOrderController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/PlatformOrderController.java index 4130a7e5f..d7d940072 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/PlatformOrderController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/PlatformOrderController.java @@ -38,6 +38,7 @@ import org.jeecg.modules.business.mapper.PlatformOrderContentMapper; import org.jeecg.modules.business.mapper.PlatformOrderMapper; import org.jeecg.modules.business.service.*; import org.jeecg.modules.business.vo.*; +import org.jeecg.modules.message.service.ISysMessageService; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; @@ -46,6 +47,7 @@ import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; +import org.springframework.http.HttpStatus; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.freemarker.FreeMarkerTemplateUtils; import org.springframework.web.bind.annotation.*; @@ -68,6 +70,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +import static org.jeecg.modules.business.entity.Invoice.InvoicingMethod.PRESHIPPING; import static org.jeecg.modules.business.vo.PlatformOrderOperation.Action.*; /** @@ -102,6 +105,8 @@ public class PlatformOrderController { private IShopService shopService; @Autowired private ISecurityService securityService; + @Autowired + private ISysMessageService sysMessageService; @Autowired private Environment env; @@ -661,4 +666,18 @@ public class PlatformOrderController { throw new RuntimeException(e); } } + + @PostMapping("/editOrdersRemark") + public Result editOrdersRemark(@RequestBody InvoiceOrdersEditParam param) { + String userId = ((LoginUser) SecurityUtils.getSubject().getPrincipal()).getId(); + if(param.getInvoicingMethod() == PRESHIPPING) { + ResponsesWithMsg mabangResponses = platformOrderMabangService.editOrdersRemark(param.getInvoiceNumber()); + if(!mabangResponses.getFailures().isEmpty()) + sysMessageService.sendProgress(userId, HttpStatus.BAD_REQUEST.value(),mabangResponses.getFailures(), "websocket.mabang.editOrdersRemarkError", "editOrdersRemark"); + else sysMessageService.sendProgress(userId, HttpStatus.OK.value(), null,"websocket.mabang.editOrdersRemarkSuccess", "editOrdersRemark"); + return Result.OK(mabangResponses); + } + sysMessageService.pushProgress(userId, "Method not supported"); + return Result.error(HttpStatus.NOT_FOUND.value(), "Invoicing method not supported"); + } } \ No newline at end of file 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 108eafd12..a66109993 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 @@ -23,7 +23,7 @@ import org.jeecg.modules.business.mapper.PlatformOrderMapper; import org.jeecg.modules.business.mapper.PurchaseOrderContentMapper; import org.jeecg.modules.business.service.*; import org.jeecg.modules.business.vo.*; -import org.jeecg.modules.message.websocket.WebSocketSender; +import org.jeecg.modules.message.service.ISysMessageService; import org.jeecg.modules.quartz.entity.QuartzJob; import org.jeecg.modules.quartz.service.IQuartzJobService; import org.springframework.beans.factory.annotation.Autowired; @@ -119,7 +119,7 @@ public class InvoiceController { @Autowired private ICreditService creditService; @Autowired - private IPlatformOrderMabangService platformOrderMabangService; + private ISysMessageService sysMessageService; @Autowired Environment env; @@ -251,20 +251,11 @@ public class InvoiceController { @PostMapping(value = "/makeComplete") public Result makeCompleteShippingInvoice(@RequestBody ShippingInvoiceParam param) { try { - 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()); - 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); + return Result.OK(metaData); } catch (UserException e) { return Result.error(e.getMessage()); } catch (IOException | ParseException e) { @@ -335,7 +326,6 @@ 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."); @@ -369,14 +359,7 @@ public class InvoiceController { emailService.sendSimpleMessage(destEmail, subject, htmlBody, session); log.info("Mail sent successfully"); } - 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); + return Result.OK(metaData); } catch (UserException e) { return Result.error(e.getMessage()); } catch (IOException e) { @@ -399,7 +382,6 @@ 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())) { @@ -426,14 +408,7 @@ public class InvoiceController { emailService.sendSimpleMessage(destEmail, subject, htmlBody, session); log.info("Mail sent successfully"); } - 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); + return Result.OK(metaData); } catch (UserException e) { return Result.error(e.getMessage()); } catch (IOException | ParseException e) { @@ -599,9 +574,12 @@ public class InvoiceController { lambdaQueryWrapper.isNull(PlatformOrder::getShippingInvoiceNumber); lambdaQueryWrapper.inSql(PlatformOrder::getId, "SELECT id FROM platform_order po WHERE po.erp_status = '3' AND po.shipping_time between '" + param.getStart() + "' AND '" + param.getEnd() + "'" ); // on récupère les résultats de la requete - List orderID = platformOrderMapper.selectList(lambdaQueryWrapper); + List platformOrderIds = platformOrderMapper.selectList(lambdaQueryWrapper); + if(platformOrderIds == null || platformOrderIds.isEmpty()) { + return Result.error(404, "No orders for selected client/shops"); + } // on récupère seulement les ID des commandes - List orderIds = orderID.stream().map(PlatformOrder::getId).collect(Collectors.toList()); + List orderIds = platformOrderIds.stream().map(PlatformOrder::getId).collect(Collectors.toList()); ShippingInvoiceOrderParam args = new ShippingInvoiceOrderParam(param.clientID(), orderIds, "postShipping"); // on check s'il y a des SKU sans prix return checkSkuPrices(args); @@ -804,7 +782,7 @@ public class InvoiceController { @RequestParam(value = "complete[]", required = false) List completeClientIds) throws IOException { String userId = ((LoginUser) SecurityUtils.getSubject().getPrincipal()).getId(); - pushProgress(userId, "开始执行开票任务,请稍候..."); + sysMessageService.pushProgress(userId, "开始执行开票任务,请稍候..."); List metaDataErrorList = new ArrayList<>(); TaskHistory ongoingBITask = taskHistoryService.getLatestRunningTask(SI_G.name()); @@ -817,19 +795,19 @@ public class InvoiceController { TaskHistory lastRunningTask = taskHistoryService.getLatestRunningTask(SI_G.name()); if(shippingClientIds != null) { - pushProgress(userId, "正在处理 预发货 客户发票..."); + sysMessageService.pushProgress(userId, "正在处理 预发货 客户发票..."); log.info("Making shipping invoice for clients : {}", shippingClientIds); invoiceList.addAll(shippingInvoiceService.breakdownInvoiceClientByType(shippingClientIds, 0)); } if(completeClientIds != null) { - pushProgress(userId, "正在处理 已发货 客户发票..."); + sysMessageService.pushProgress(userId, "正在处理 已发货 客户发票..."); log.info("Making complete shipping invoice for clients : {}", completeClientIds); invoiceList.addAll(shippingInvoiceService.breakdownInvoiceClientByType(completeClientIds, 1)); } if (invoiceList.isEmpty()) { lastRunningTask.setOngoing(SUCCESS.getCode()); taskHistoryService.updateById(lastRunningTask); - pushProgress(userId, "没有生成任何发票。"); + sysMessageService.pushProgress(userId, "没有生成任何发票。"); return Result.ok("Nothing invoiced"); } List filenameList = new ArrayList<>(); @@ -852,7 +830,7 @@ public class InvoiceController { } if (cpt % step == 0 || cpt == total) { int percent = (int)(((double) cpt / total) * 100); - pushProgress(userId, "发票生成进度:" + percent + "% (" + cpt + "/" + total + ")"); + sysMessageService.pushProgress(userId, "发票生成进度:" + percent + "% (" + cpt + "/" + total + ")"); } log.info("Generating detail files ...{}/{}", cpt++, invoiceList.size()); } @@ -877,7 +855,7 @@ public class InvoiceController { emailService.sendMessageWithAttachment(destEmail, subject, htmlBody, zipFilename,session); Map summary = new HashMap<>(); summary.put("total", total); - pushProgress(userId, "全部完成", summary); + sysMessageService.pushProgress(userId, "全部完成", summary); log.info("Mail sent successfully"); lastRunningTask.setOngoing(SUCCESS.getCode()); @@ -888,22 +866,10 @@ public class InvoiceController { e.printStackTrace(); lastRunningTask.setOngoing(CANCELLED.getCode()); taskHistoryService.updateById(lastRunningTask); - pushProgress(userId, "发票任务失败!"); + sysMessageService.pushProgress(userId, "发票任务失败!"); return Result.error("An error occurred while trying to send an email."); } } - private void pushProgress(String userId, String message) { - pushProgress(userId, message, null); - } - private void pushProgress(String userId, String message, Map data) { - JSONObject msg = new JSONObject(); - msg.put("cmd", "user"); - msg.put("msgTxt", message); - if (data != null) { - msg.put("data", data); - } - WebSocketSender.sendToUser(userId, msg.toJSONString()); - } /** * Get an estimate of shipping fees for selected orders 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 1bc12723e..55e47aed8 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 @@ -123,7 +123,10 @@ public class ShippingInvoiceFactory { public ShippingInvoice createShippingInvoice(String customerId, List orderIds, String type, String start, String end) throws UserException { log.info("Creating an invoice with arguments:\n client ID: {}, order IDs: {}]", customerId, orderIds); // find orders and their contents of the invoice - Map> uninvoicedOrderToContent = platformOrderService.fetchOrderDataForUpdate(orderIds); + Map> uninvoicedOrderToContent = platformOrderService.fetchUninvoicedOrderDataForUpdate(orderIds); + if (uninvoicedOrderToContent == null || uninvoicedOrderToContent.isEmpty()) { + throw new UserException("Orders not found or already invoiced"); + } Set platformOrders = uninvoicedOrderToContent.keySet(); List savRefunds = savRefundWithDetailService.findUnprocessedRefundsByClient(customerId); List shopIds = platformOrders.stream() @@ -169,7 +172,10 @@ public class ShippingInvoiceFactory { public CompleteInvoice createCompleteShippingInvoice(String username, String customerId, BigDecimal balance, List orderIds, String shippingMethod, String start, String end) throws UserException, MessagingException, InterruptedException { log.info("Creating a complete invoice for \n client ID: {}, order IDs: {}]", customerId, orderIds); // find orders and their contents of the invoice - Map> uninvoicedOrderToContent = platformOrderService.fetchOrderDataForUpdate(orderIds); + Map> uninvoicedOrderToContent = platformOrderService.fetchUninvoicedOrderDataForUpdate(orderIds); + if (uninvoicedOrderToContent == null || uninvoicedOrderToContent.isEmpty()) { + throw new UserException("Orders not found or already invoiced"); + } Set platformOrders = uninvoicedOrderToContent.keySet(); List savRefunds = savRefundWithDetailService.findUnprocessedRefundsByClient(customerId); List shopIds = platformOrders.stream() diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Invoice.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Invoice.java index 674d26841..571e4d677 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Invoice.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Invoice.java @@ -3,7 +3,9 @@ package org.jeecg.modules.business.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonValue; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -125,8 +127,10 @@ public class Invoice implements Serializable { POSTSHIPPING("post-shipping"), ALL("all"); + @JsonValue private final String method; + @JsonCreator public static InvoicingMethod fromString(String method) { for(InvoicingMethod invoicingMethod : InvoicingMethod.values()) { if(invoicingMethod.method.equalsIgnoreCase(method)) { diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderContentMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderContentMapper.java index 82a1714f3..575f12751 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderContentMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderContentMapper.java @@ -46,9 +46,9 @@ public interface PlatformOrderContentMapper extends BaseMapper fetchOrderContent(List orderIds); List fetchOrderContentForUpdate(List orderIds); + List fetchUninvoicedOrderContentForUpdate(List orderIds); List searchSkuDetail(List skuIDs); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderMapper.java index a55d785e7..c5506b7cc 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderMapper.java @@ -256,8 +256,9 @@ public interface PlatformOrderMapper extends BaseMapper { @Param("start") String startDate, @Param("end") String endDate, @Param("order") String order, @Param("column") String column, @Param("offset") Integer offset, @Param("size") Integer pageSize); + void selectBatchIdsForUpdate(@Param("ids") List orderIds); @MapKey("id") - Map selectBatchIdsForUpdate(@Param("ids") List orderIds); + Map selectBatchUninvoicedIdsForUpdate(@Param("ids") List orderIds); PlatformOrder selectForUpdateSkipLock(@Param("id") String orderId); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderContentMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderContentMapper.xml index 969f1497b..21b461cbb 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderContentMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderContentMapper.xml @@ -84,6 +84,16 @@ AND platform_order_id IN #{item} FOR UPDATE; + +