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 94a354836..4eb38d1b3 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 @@ -1332,12 +1332,16 @@ public class InvoiceController { String orderId = params.get("orderId"); try { PlatformOrder orderToEdit = platformOrderService.selectForUpdateSkipLock(orderId); + + if(orderToEdit == null) { + return Result.error(404,"Order not found."); + } orderToEdit.setCanSend("2"); boolean edited = platformOrderService.updateById(orderToEdit); return Result.OK(edited); } catch (Exception e) { if(e instanceof CannotAcquireLockException) { - return Result.error("Order is already being edited by another user"); + return Result.error(409,"Order is already being edited by another user."); } throw new RuntimeException(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 b37915747..1bc12723e 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 @@ -170,8 +170,6 @@ public class ShippingInvoiceFactory { 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); - System.out.println("Sleeping for 1 minute for testing"); - Thread.sleep(60000); 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/mapper/PlatformOrderMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderMapper.java index 7cfaf48bc..a55d785e7 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 @@ -172,12 +172,12 @@ public interface PlatformOrderMapper extends BaseMapper { List fetchOrderInShopsWithoutShopifyNote(@Param("shops") List shopCodes); List fetchOrderInShopsReadyForAbnNumberJob(@Param("shops") List shopCodes); - List fetchUninvoicedShippedOrderIDInShops(@Param("startDate") String startDate, + List fetchUninvoicedShippedOrderIDInShops(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("shops") List shops, @Param("warehouses") List warehouses); - List fetchUninvoicedOrderIDInShopsAndOrderTime(@Param("startDate") String startDate, + List fetchUninvoicedOrderIDInShopsAndOrderTime(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("shops") List shops, @Param("erpStatuses") List erpStatuses, 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 4f5dff595..2953afe64 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 @@ -82,7 +82,7 @@ FROM platform_order_content WHERE erp_status <> 5 AND platform_order_id IN #{item} - FOR UPDATE; + FOR UPDATE NOWAIT; - SELECT po.id FROM platform_order po JOIN logistic_channel lc ON po.logistic_channel_name = lc.zh_name @@ -538,7 +540,7 @@ AND po.shipping_time between #{startDate} AND #{endDate} AND po.erp_status = 3; - SELECT po.id FROM platform_order po JOIN logistic_channel lc ON po.logistic_channel_name = lc.zh_name @@ -576,7 +578,8 @@ item="erpStatus" > #{erpStatus} - ; + + FOR UPDATE; SELECT * FROM platform_order WHERE id = #{id} - FOR UPDATE SKIP LOCKED; -- todo : NO WAIT is recognized but not SKIP LOCKED + FOR UPDATE; diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderService.java index b92f7e562..49a80bc45 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderService.java @@ -152,8 +152,6 @@ public interface IPlatformOrderService extends IService { List fetchOrderInShopsReadyForAbnNumberJob(List shopCodes); - List fetchUninvoicedShippedOrderIDInShops(String startDate, String endDate, List shops, List warehouses); - /** * Fetch all platform orders between 2 dates and of status erp_status 4 or 5 * this list will then be archived diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/PlatformOrderShippingInvoiceService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/PlatformOrderShippingInvoiceService.java index 40a412162..a61c2c8d8 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/PlatformOrderShippingInvoiceService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/PlatformOrderShippingInvoiceService.java @@ -207,8 +207,7 @@ public class PlatformOrderShippingInvoiceService { return new Period(beginZoned, endZoned, ""); } public List getShippingOrderIdBetweenDate(List shops, String start, String end, List wareHouses) { - List orders = platformOrderMapper.fetchUninvoicedShippedOrderIDInShops( start, end, shops, wareHouses); - return orders.stream().map(PlatformOrder::getId).collect(Collectors.toList()); + return platformOrderMapper.fetchUninvoicedShippedOrderIDInShops( start, end, shops, wareHouses); } /** * Make an invoice based on parameters. @@ -284,16 +283,14 @@ public class PlatformOrderShippingInvoiceService { @Transactional public InvoiceMetaData makeCompleteInvoicePostShipping(ShippingInvoiceParam param, String method, String ... user) throws UserException, ParseException, IOException, MessagingException, InterruptedException { String username = user.length > 0 ? user[0] : ((LoginUser) SecurityUtils.getSubject().getPrincipal()).getUsername(); - List platformOrderList; + List orderIds; if(method.equals(POSTSHIPPING.getMethod())) { //On récupère les commandes entre 2 dates d'expédition avec un status 3 - platformOrderList = platformOrderMapper.fetchUninvoicedShippedOrderIDInShops(param.getStart(), param.getEnd(), param.shopIDs(), param.getWarehouses()); + orderIds = platformOrderMapper.fetchUninvoicedShippedOrderIDInShops(param.getStart(), param.getEnd(), param.shopIDs(), param.getWarehouses()); } else { // On récupère les commandes entre 2 dates de commandes avec un status (1,2) ou (1,2,3) - platformOrderList = platformOrderMapper.fetchUninvoicedOrderIDInShopsAndOrderTime(param.getStart(), param.getEnd(), param.shopIDs(), param.getErpStatuses(), param.getWarehouses()); + orderIds = platformOrderMapper.fetchUninvoicedOrderIDInShopsAndOrderTime(param.getStart(), param.getEnd(), param.shopIDs(), param.getErpStatuses(), param.getWarehouses()); } - // on récupère seulement les ID des commandes - List orderIds = platformOrderList.stream().map(PlatformOrder::getId).collect(Collectors.toList()); // Creates invoice by factory CompleteInvoice invoice = factory.createCompleteShippingInvoice(username, param.clientID(), param.getBalance() ,orderIds, method, param.getStart(), param.getEnd()); return getInvoiceMetaDataAndInsert(username, invoice); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderMabangServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderMabangServiceImpl.java index 1831da244..61845e741 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderMabangServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderMabangServiceImpl.java @@ -155,11 +155,13 @@ public class PlatformOrderMabangServiceImpl extends ServiceImpl> findUninvoicedOrders(List shopIds, Date begin, Date end, List warehouses) { List orderList = platformOrderMap.findUninvoicedOrders(shopIds, begin, end, warehouses); - List orderContents = platformOrderContentMap.fetchOrderContent(orderList.stream().map(PlatformOrder::getId).collect(toList())); + List orderContents = platformOrderContentMap.fetchOrderContentForUpdate(orderList.stream().map(PlatformOrder::getId).collect(toList())); Map orderMap = orderList.stream().collect(toMap(PlatformOrder::getId, Function.identity())); return orderContents.stream().collect(groupingBy(platformOrderContent -> orderMap.get(platformOrderContent.getPlatformOrderId()))); } @@ -306,7 +306,7 @@ public class PlatformOrderServiceImpl extends ServiceImpl orderMap.get(platformOrderContent.getPlatformOrderId()))); } - // TODO: maybe duplicate this for non invoicing usage + // TODO: maybe duplicate this for non invoicing usage ! @Override public Map> fetchOrderData(List orderIds) { List orderList = platformOrderMap.selectBatchIds(orderIds); @@ -400,10 +400,6 @@ public class PlatformOrderServiceImpl extends ServiceImpl fetchUninvoicedShippedOrderIDInShops(String startDate, String endDate, List shops, List warehouses) { - return platformOrderMap.fetchUninvoicedShippedOrderIDInShops(startDate, endDate, shops, warehouses); - } @Override public List fetchOrdersToArchiveBetweenDate(String startDate, String endDate) { return platformOrderMap.fetchOrdersToArchiveBetweenDate(startDate, endDate);