From 2bb112f95259f861bdb90793d09add04f4f589cb Mon Sep 17 00:00:00 2001 From: Xue YANG Date: Mon, 23 Jun 2025 17:15:37 +0200 Subject: [PATCH] feat: mark orders without phone number as abnormal (except MT-BOUTSHOES) --- .../domain/job/SuspendNoPhoneOrdersJob.java | 57 +++++++++++++++---- .../service/IPlatformOrderMabangService.java | 2 + .../impl/PlatformOrderMabangServiceImpl.java | 22 +++++++ 3 files changed, 69 insertions(+), 12 deletions(-) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/SuspendNoPhoneOrdersJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/SuspendNoPhoneOrdersJob.java index edcfbc304..e3055354c 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/SuspendNoPhoneOrdersJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/SuspendNoPhoneOrdersJob.java @@ -2,6 +2,7 @@ package org.jeecg.modules.business.domain.job; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; +import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.jeecg.modules.business.domain.api.mabang.getorderlist.Order; import org.jeecg.modules.business.domain.api.mabang.getorderlist.OrderListRequestBody; @@ -11,6 +12,8 @@ import org.jeecg.modules.business.domain.api.mabang.orderDoOrderAbnormal.OrderSu import org.jeecg.modules.business.entity.PlatformOrder; import org.jeecg.modules.business.service.IPlatformOrderMabangService; import org.jeecg.modules.business.service.IPlatformOrderService; +import org.jeecg.modules.business.service.IShopService; +import org.jeecg.modules.business.vo.ResponsesWithMsg; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; @@ -19,10 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -37,17 +37,22 @@ public class SuspendNoPhoneOrdersJob implements Job { private IPlatformOrderService platformOrderService; @Autowired private IPlatformOrderMabangService platformOrderMabangService; + @Autowired + private IShopService shopService; private static final String DEFAULT_COUNTRY = "France"; private static final String DEFAULT_LOGISTIC = "义速宝Colissimo专线普货(深圳)"; private static final String DEFAULT_ABNORMAL_LABEL_NAME = "法国义达缺电话号码"; + private static final String DEFAULT_PHONE = "0783421907"; + private static final List DEFAULT_PHONE_SHOPS = Collections.singletonList("MT-BOUTSHOES"); @Override public void execute(JobExecutionContext context) throws JobExecutionException { - log.info("[Test] Starting SuspendNoPhoneOrdersJob (Filtering and printing localOrders pending review)"); + log.info("Starting SuspendNoPhoneOrdersJob (Filtering and printing localOrders pending review)"); // Default parameters String country = DEFAULT_COUNTRY; String logistic = DEFAULT_LOGISTIC; + List phoneShops = DEFAULT_PHONE_SHOPS; LocalDateTime endDateTime = LocalDateTime.now(); LocalDateTime startDateTime = endDateTime.minusDays(30); // Retrieve parameters from job data map @@ -69,6 +74,13 @@ public class SuspendNoPhoneOrdersJob implements Job { if (json.has("endDateTime")) { endDateTime = LocalDateTime.parse(json.getString("endDateTime"), formatter); } + if (json.has("phoneShops")) { + JSONArray jsonArray = json.getJSONArray("phoneShops"); + phoneShops = new ArrayList<>(); + for (int i = 0; i < jsonArray.size(); i++) { + phoneShops.add(jsonArray.getString(i)); + } + } } } catch (Exception e) { log.warn("Failed to parse parameters, fallback to default values. Reason: {}", e.getMessage()); @@ -102,17 +114,35 @@ public class SuspendNoPhoneOrdersJob implements Job { Map mabangOrderMap = mabangOrders.stream() .collect(Collectors.toMap(Order::getPlatformOrderId, Function.identity())); List finalOrdersToSuspend = new ArrayList<>(); + List updatedPhoneOrders = new ArrayList<>(); + List suspendedOrders = new ArrayList<>(); for (PlatformOrder localOrder : localOrders) { Order mabang = mabangOrderMap.get(localOrder.getPlatformOrderId()); if (mabang == null) continue; boolean stillCanSend = "1".equals(mabang.getCanSend()); boolean stillValidStatus = Arrays.asList("1", "2").contains(mabang.getStatus()); - if (stillCanSend && stillValidStatus) { - log.info("Order {} eligible for suspension: CanSend={}, ERP Status={}", - localOrder.getPlatformOrderId(), mabang.getCanSend(), mabang.getStatus()); + String platformOrderId = mabang.getPlatformOrderId(); + String shopErpCode = mabang.getShopErpCode(); + String phone = mabang.getPhone1(); + String shopId = shopService.getIdByCode(shopErpCode); + if (phoneShops.contains(shopErpCode) && (phone == null || phone.trim().isEmpty())) { + ResponsesWithMsg res = platformOrderMabangService.updateReceiverPhone( + platformOrderId, DEFAULT_PHONE, shopId); + if (res.getFailures().isEmpty()) { + updatedPhoneOrders.add(platformOrderId); + log.info("Order {} from shop {} has no phone number, updated successfully to phone number {}, skipping suspension", + platformOrderId, shopErpCode, DEFAULT_PHONE); + continue; + } else { + res.getFailures().forEach((orderId, message) -> { + log.warn("Failed to update phone for order {}: {}", orderId, message); + }); + } + } + //the order that will be suspended finalOrdersToSuspend.add(localOrder.getPlatformOrderId()); - } else { + }else { log.info("Order {} skipped due to updated Mabang status: CanSend={}, ERP Status={}", localOrder.getPlatformOrderId(), mabang.getCanSend(), mabang.getStatus()); } @@ -126,7 +156,7 @@ public class SuspendNoPhoneOrdersJob implements Job { OrderSuspendResponse response = request.send(); boolean success = response.success(); if (success) { - log.info("Successfully suspended order {} from Mabang", id); + suspendedOrders.add(id); } else { log.warn("Failed to suspend order {} from Mabang", id); } @@ -138,7 +168,10 @@ public class SuspendNoPhoneOrdersJob implements Job { }, executor)).collect(Collectors.toList()); futures.stream().map(CompletableFuture::join).collect(Collectors.toList()); executor.shutdown(); - log.info("Successfully suspended {} orders", finalOrdersToSuspend.size()); - log.info("[Test] SuspendNoPhoneOrdersJob completed successfully."); + log.info("Total orders updated with default phone: {} ", updatedPhoneOrders.size()); + log.info(" Platform order IDs: {}", updatedPhoneOrders); + log.info("Total suspended {} orders", suspendedOrders.size()); + log.info("orders suspended: {}", suspendedOrders); + log.info("SuspendNoPhoneOrdersJob completed successfully."); } } \ No newline at end of file diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderMabangService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderMabangService.java index e04245139..a6e3cf095 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderMabangService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderMabangService.java @@ -53,4 +53,6 @@ public interface IPlatformOrderMabangService extends IService { ResponsesWithMsg deleteOrderRemark(String invoiceNumber); Response, List> updateOrderStatusToPreparing(List platformOrderIds); + + ResponsesWithMsg updateReceiverPhone(String platformOrderId, String receiverPhone, String shopId); } 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 5960487f1..06466d3e7 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 @@ -529,4 +529,26 @@ public class PlatformOrderMabangServiceImpl extends ServiceImpl updateReceiverPhone(String platformOrderId, String receiverPhone, String shopId) { + ResponsesWithMsg responses = new ResponsesWithMsg<>(); + try { + PlatformOrderOperation op = new PlatformOrderOperation(); + op.setOrderIds(platformOrderId); + op.setAction("EDIT"); + op.setPhone(receiverPhone); + op.setShopId(shopId); + ChangeWarehouseRequestBody body = new ChangeWarehouseRequestBody(op); + ChangeWarehouseRequest request = new ChangeWarehouseRequest(body); + ChangeOrderResponse response = request.send(); + if (response.success()) { + responses.addSuccess(platformOrderId); + } else { + responses.addFailure(platformOrderId, response.getMessage()); + } + } catch (Exception e) { + responses.addFailure(platformOrderId, e.getMessage()); + } + return responses; + } }