mirror of https://github.com/jeecgboot/jeecg-boot
feat: mark orders without phone number as abnormal (except MT-BOUTSHOES)
parent
3775c581e1
commit
2bb112f952
|
@ -2,6 +2,7 @@ package org.jeecg.modules.business.domain.job;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import net.sf.json.JSONArray;
|
||||||
import net.sf.json.JSONObject;
|
import net.sf.json.JSONObject;
|
||||||
import org.jeecg.modules.business.domain.api.mabang.getorderlist.Order;
|
import org.jeecg.modules.business.domain.api.mabang.getorderlist.Order;
|
||||||
import org.jeecg.modules.business.domain.api.mabang.getorderlist.OrderListRequestBody;
|
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.entity.PlatformOrder;
|
||||||
import org.jeecg.modules.business.service.IPlatformOrderMabangService;
|
import org.jeecg.modules.business.service.IPlatformOrderMabangService;
|
||||||
import org.jeecg.modules.business.service.IPlatformOrderService;
|
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.Job;
|
||||||
import org.quartz.JobDataMap;
|
import org.quartz.JobDataMap;
|
||||||
import org.quartz.JobExecutionContext;
|
import org.quartz.JobExecutionContext;
|
||||||
|
@ -19,10 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
|
@ -37,17 +37,22 @@ public class SuspendNoPhoneOrdersJob implements Job {
|
||||||
private IPlatformOrderService platformOrderService;
|
private IPlatformOrderService platformOrderService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private IPlatformOrderMabangService platformOrderMabangService;
|
private IPlatformOrderMabangService platformOrderMabangService;
|
||||||
|
@Autowired
|
||||||
|
private IShopService shopService;
|
||||||
|
|
||||||
private static final String DEFAULT_COUNTRY = "France";
|
private static final String DEFAULT_COUNTRY = "France";
|
||||||
private static final String DEFAULT_LOGISTIC = "义速宝Colissimo专线普货(深圳)";
|
private static final String DEFAULT_LOGISTIC = "义速宝Colissimo专线普货(深圳)";
|
||||||
private static final String DEFAULT_ABNORMAL_LABEL_NAME = "法国义达缺电话号码";
|
private static final String DEFAULT_ABNORMAL_LABEL_NAME = "法国义达缺电话号码";
|
||||||
|
private static final String DEFAULT_PHONE = "0783421907";
|
||||||
|
private static final List<String> DEFAULT_PHONE_SHOPS = Collections.singletonList("MT-BOUTSHOES");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(JobExecutionContext context) throws JobExecutionException {
|
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
|
// Default parameters
|
||||||
String country = DEFAULT_COUNTRY;
|
String country = DEFAULT_COUNTRY;
|
||||||
String logistic = DEFAULT_LOGISTIC;
|
String logistic = DEFAULT_LOGISTIC;
|
||||||
|
List<String> phoneShops = DEFAULT_PHONE_SHOPS;
|
||||||
LocalDateTime endDateTime = LocalDateTime.now();
|
LocalDateTime endDateTime = LocalDateTime.now();
|
||||||
LocalDateTime startDateTime = endDateTime.minusDays(30);
|
LocalDateTime startDateTime = endDateTime.minusDays(30);
|
||||||
// Retrieve parameters from job data map
|
// Retrieve parameters from job data map
|
||||||
|
@ -69,6 +74,13 @@ public class SuspendNoPhoneOrdersJob implements Job {
|
||||||
if (json.has("endDateTime")) {
|
if (json.has("endDateTime")) {
|
||||||
endDateTime = LocalDateTime.parse(json.getString("endDateTime"), formatter);
|
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) {
|
} catch (Exception e) {
|
||||||
log.warn("Failed to parse parameters, fallback to default values. Reason: {}", e.getMessage());
|
log.warn("Failed to parse parameters, fallback to default values. Reason: {}", e.getMessage());
|
||||||
|
@ -102,17 +114,35 @@ public class SuspendNoPhoneOrdersJob implements Job {
|
||||||
Map<String, Order> mabangOrderMap = mabangOrders.stream()
|
Map<String, Order> mabangOrderMap = mabangOrders.stream()
|
||||||
.collect(Collectors.toMap(Order::getPlatformOrderId, Function.identity()));
|
.collect(Collectors.toMap(Order::getPlatformOrderId, Function.identity()));
|
||||||
List<String> finalOrdersToSuspend = new ArrayList<>();
|
List<String> finalOrdersToSuspend = new ArrayList<>();
|
||||||
|
List<String> updatedPhoneOrders = new ArrayList<>();
|
||||||
|
List<String> suspendedOrders = new ArrayList<>();
|
||||||
for (PlatformOrder localOrder : localOrders) {
|
for (PlatformOrder localOrder : localOrders) {
|
||||||
Order mabang = mabangOrderMap.get(localOrder.getPlatformOrderId());
|
Order mabang = mabangOrderMap.get(localOrder.getPlatformOrderId());
|
||||||
if (mabang == null) continue;
|
if (mabang == null) continue;
|
||||||
boolean stillCanSend = "1".equals(mabang.getCanSend());
|
boolean stillCanSend = "1".equals(mabang.getCanSend());
|
||||||
boolean stillValidStatus = Arrays.asList("1", "2").contains(mabang.getStatus());
|
boolean stillValidStatus = Arrays.asList("1", "2").contains(mabang.getStatus());
|
||||||
|
|
||||||
if (stillCanSend && stillValidStatus) {
|
if (stillCanSend && stillValidStatus) {
|
||||||
log.info("Order {} eligible for suspension: CanSend={}, ERP Status={}",
|
String platformOrderId = mabang.getPlatformOrderId();
|
||||||
localOrder.getPlatformOrderId(), mabang.getCanSend(), mabang.getStatus());
|
String shopErpCode = mabang.getShopErpCode();
|
||||||
finalOrdersToSuspend.add(localOrder.getPlatformOrderId());
|
String phone = mabang.getPhone1();
|
||||||
|
String shopId = shopService.getIdByCode(shopErpCode);
|
||||||
|
if (phoneShops.contains(shopErpCode) && (phone == null || phone.trim().isEmpty())) {
|
||||||
|
ResponsesWithMsg<String> 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 {
|
} 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 {
|
||||||
log.info("Order {} skipped due to updated Mabang status: CanSend={}, ERP Status={}",
|
log.info("Order {} skipped due to updated Mabang status: CanSend={}, ERP Status={}",
|
||||||
localOrder.getPlatformOrderId(), mabang.getCanSend(), mabang.getStatus());
|
localOrder.getPlatformOrderId(), mabang.getCanSend(), mabang.getStatus());
|
||||||
}
|
}
|
||||||
|
@ -126,7 +156,7 @@ public class SuspendNoPhoneOrdersJob implements Job {
|
||||||
OrderSuspendResponse response = request.send();
|
OrderSuspendResponse response = request.send();
|
||||||
boolean success = response.success();
|
boolean success = response.success();
|
||||||
if (success) {
|
if (success) {
|
||||||
log.info("Successfully suspended order {} from Mabang", id);
|
suspendedOrders.add(id);
|
||||||
} else {
|
} else {
|
||||||
log.warn("Failed to suspend order {} from Mabang", id);
|
log.warn("Failed to suspend order {} from Mabang", id);
|
||||||
}
|
}
|
||||||
|
@ -138,7 +168,10 @@ public class SuspendNoPhoneOrdersJob implements Job {
|
||||||
}, executor)).collect(Collectors.toList());
|
}, executor)).collect(Collectors.toList());
|
||||||
futures.stream().map(CompletableFuture::join).collect(Collectors.toList());
|
futures.stream().map(CompletableFuture::join).collect(Collectors.toList());
|
||||||
executor.shutdown();
|
executor.shutdown();
|
||||||
log.info("Successfully suspended {} orders", finalOrdersToSuspend.size());
|
log.info("Total orders updated with default phone: {} ", updatedPhoneOrders.size());
|
||||||
log.info("[Test] SuspendNoPhoneOrdersJob completed successfully.");
|
log.info(" Platform order IDs: {}", updatedPhoneOrders);
|
||||||
|
log.info("Total suspended {} orders", suspendedOrders.size());
|
||||||
|
log.info("orders suspended: {}", suspendedOrders);
|
||||||
|
log.info("SuspendNoPhoneOrdersJob completed successfully.");
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -53,4 +53,6 @@ public interface IPlatformOrderMabangService extends IService<Order> {
|
||||||
ResponsesWithMsg<String> deleteOrderRemark(String invoiceNumber);
|
ResponsesWithMsg<String> deleteOrderRemark(String invoiceNumber);
|
||||||
|
|
||||||
Response<List<UpdateResult>, List<UpdateResult>> updateOrderStatusToPreparing(List<String> platformOrderIds);
|
Response<List<UpdateResult>, List<UpdateResult>> updateOrderStatusToPreparing(List<String> platformOrderIds);
|
||||||
|
|
||||||
|
ResponsesWithMsg<String> updateReceiverPhone(String platformOrderId, String receiverPhone, String shopId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -529,4 +529,26 @@ public class PlatformOrderMabangServiceImpl extends ServiceImpl<PlatformOrderMab
|
||||||
|
|
||||||
return updateResponse;
|
return updateResponse;
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public ResponsesWithMsg<String> updateReceiverPhone(String platformOrderId, String receiverPhone, String shopId) {
|
||||||
|
ResponsesWithMsg<String> 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue