From f54660d0014d2bf774e852988ffb37bcc754b009 Mon Sep 17 00:00:00 2001 From: Gauthier LO Date: Wed, 29 May 2024 15:28:34 +0200 Subject: [PATCH] feat: clear logistic channel name --- .../dochangeorder/ClearLogisticRequest.java | 15 +++++ .../ClearLogisticRequestBody.java | 47 ++++++++++++++ .../dochangeorder/ClearLogisticResponse.java | 49 +++++++++++++++ .../domain/job/ClearLogisticChannelJob.java | 63 +++++++++++++++++++ 4 files changed, 174 insertions(+) create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/dochangeorder/ClearLogisticRequest.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/dochangeorder/ClearLogisticRequestBody.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/dochangeorder/ClearLogisticResponse.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/ClearLogisticChannelJob.java diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/dochangeorder/ClearLogisticRequest.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/dochangeorder/ClearLogisticRequest.java new file mode 100644 index 000000000..04ac10e96 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/dochangeorder/ClearLogisticRequest.java @@ -0,0 +1,15 @@ +package org.jeecg.modules.business.domain.api.mabang.dochangeorder; + +import org.jeecg.modules.business.domain.api.mabang.Request; + +public class EditLogisticRequest extends Request { + public EditLogisticRequest(EditLogisticRequestBody body) { + super(body); + } + + @Override + public ChangeOrderResponse send() { + String jsonString = rawSend().getBody(); + return ChangeOrderResponse.parse(jsonString); + } +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/dochangeorder/ClearLogisticRequestBody.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/dochangeorder/ClearLogisticRequestBody.java new file mode 100644 index 000000000..e4207ce96 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/dochangeorder/ClearLogisticRequestBody.java @@ -0,0 +1,47 @@ +package org.jeecg.modules.business.domain.api.mabang.dochangeorder; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.Data; +import org.apache.commons.lang3.tuple.Pair; +import org.jeecg.modules.business.domain.api.mabang.RequestBody; + +import java.util.HashSet; + +@Data +public class EditLogisticRequestBody implements RequestBody { + + + private String platformOrderId; + private String logisticChannelName; + /** + * 1 : edit, 2: delete, 3: add + */ + private Integer type; + + public EditLogisticRequestBody(String platformOrderId, String logisticChannelName, int type) { + this.platformOrderId = platformOrderId; + this.logisticChannelName = logisticChannelName; + this.type = type; + } + + @Override + public String api() { + return "order-do-change-order"; + } + + @Override + public JSONObject parameters() { + JSONObject json = new JSONObject(); + putNonNull(json, "platformOrderId", platformOrderId); + putNonNull(json, "myLogisticsId", logisticChannelName); + putNonNull(json, "type", type); + return json; + } + + private void putNonNull(JSONObject json, String key, E value) { + if (value != null) { + json.put(key, value); + } + } +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/dochangeorder/ClearLogisticResponse.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/dochangeorder/ClearLogisticResponse.java new file mode 100644 index 000000000..d0801180b --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/dochangeorder/ClearLogisticResponse.java @@ -0,0 +1,49 @@ +package org.jeecg.modules.business.domain.api.mabang.dochangeorder; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import org.jeecg.modules.business.domain.api.mabang.Response; + +public class ChangeOrderResponse extends Response { + private final String message; + /** + * Erp order number + */ + private final String orderId; + + + private ChangeOrderResponse(Code status, String message, String orderId) { + super(status); + this.message = message; + this.orderId = orderId; + } + + public static ChangeOrderResponse parse(String json) { + JSONObject jsonObject = JSON.parseObject(json); + String code = jsonObject.getString("code"); + String message = jsonObject.getString("message"); + if (code.equals("200")) { + JSONObject data = jsonObject.getJSONObject("data"); + String orderId = data.getString("orderId"); + return new ChangeOrderResponse(Code.SUCCESS, message, orderId); + } else { + return new ChangeOrderResponse(Code.ERROR, message, null); + } + } + + public String getMessage() { + return message; + } + + public String getOrderId() { + return orderId; + } + + @Override + public String toString() { + return "ChangeOrderResponse{" + + "message='" + message + '\'' + + ", orderId='" + orderId + '\'' + + '}'; + } +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/ClearLogisticChannelJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/ClearLogisticChannelJob.java new file mode 100644 index 000000000..b53c6ebc7 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/ClearLogisticChannelJob.java @@ -0,0 +1,63 @@ +package org.jeecg.modules.business.domain.job; + +import lombok.extern.slf4j.Slf4j; +import org.codehaus.jettison.json.JSONArray; +import org.codehaus.jettison.json.JSONException; +import org.codehaus.jettison.json.JSONObject; +import org.jeecg.modules.business.domain.api.mabang.dochangeorder.*; +import org.jeecg.modules.business.domain.api.mabang.getorderlist.Order; +import org.quartz.Job; +import org.quartz.JobDataMap; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.stream.Collectors; + +@Slf4j +public class ClearLogisticChannelJob implements Job { + private static final Integer DEFAULT_NUMBER_OF_THREADS = 10; + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + JobDataMap jobDataMap = context.getMergedJobDataMap(); + String parameter = ((String) jobDataMap.get("parameter")); + List platformOrderIds = new ArrayList<>(); + if (parameter != null) { + try { + JSONObject jsonObject = new JSONObject(parameter); + if (!jsonObject.isNull("platformOrderIds")) { + JSONArray orderIds = jsonObject.getJSONArray("platformOrderIds"); + if(orderIds == null) { + throw new RuntimeException("Empty parameter"); + } + for(int i = 0; i < orderIds.length(); i++) { + platformOrderIds.add(orderIds.get(i).toString()); + } + } + else { + throw new RuntimeException("platformOrderIds parameter is mandatory."); + } + } catch (JSONException e) { + throw new RuntimeException(e); + } + } + ExecutorService executor = Executors.newFixedThreadPool(DEFAULT_NUMBER_OF_THREADS); + + List> clearLogisticFutures = platformOrderIds.stream() + .map(orderId -> CompletableFuture.supplyAsync(() -> { + ClearLogisticRequestBody body = new ClearLogisticRequestBody(orderId); + ClearLogisticRequest request = new ClearLogisticRequest(body); + ClearLogisticResponse response = request.send(); + return response.success(); + }, executor)) + .collect(Collectors.toList()); + List clearResults = clearLogisticFutures.stream().map(CompletableFuture::join).collect(Collectors.toList()); + long clearSuccessCount = clearResults.stream().filter(b -> b).count(); + log.info("{}/{} logistic channel names cleared successfully.", clearSuccessCount, platformOrderIds.size()); + } +}