From 7d069dfd8bf8cadeebabfab7df052d6f8b50ba71 Mon Sep 17 00:00:00 2001 From: Qiuyi LI Date: Thu, 6 Jun 2024 15:13:14 +0200 Subject: [PATCH 01/16] Release 2.3.0 --- .../jeecg-system-start/src/main/resources/banner.txt | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/banner.txt b/jeecg-module-system/jeecg-system-start/src/main/resources/banner.txt index ab49de582..8c35e8f23 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/resources/banner.txt +++ b/jeecg-module-system/jeecg-system-start/src/main/resources/banner.txt @@ -8,7 +8,7 @@ ${AnsiColor.BRIGHT_BLUE} ${AnsiColor.BRIGHT_GREEN} -WIA APP Version: 2.2.0 +WIA APP Version: 2.3.0 Spring Boot Version: ${spring-boot.version}${spring-boot.formatted-version} Website: www.wia-sourcing.com ${AnsiColor.BLACK} diff --git a/pom.xml b/pom.xml index 18263d7fb..52bacd68e 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 org.jeecgframework.boot jeecg-boot-parent - 2.2.0 + 2.3.0 pom WIA APP ${project.version} From cad5c25110338212e8e2a71fdc9e1419e151cb96 Mon Sep 17 00:00:00 2001 From: Qiuyi LI Date: Thu, 13 Jun 2024 15:48:15 +0200 Subject: [PATCH 02/16] Hotfix : Temporarily replace 40cm multiple tubes by 50cm multiple tubes --- .../jeecg/modules/business/domain/job/AddPortraitTubeJob.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/AddPortraitTubeJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/AddPortraitTubeJob.java index 588cbd1e9..8aefb54a7 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/AddPortraitTubeJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/AddPortraitTubeJob.java @@ -252,8 +252,9 @@ public class AddPortraitTubeJob implements Job { if (tube40SingleCount > 0) { adequateTubes.add(Pair.of(TUBE_40_SKU_SINGLE, tube40SingleCount)); } + // 2024-06-13 Temporarily replace 40cm multiple tubes by 50cm multiple tubes if (tube40MultipleCount > 0) { - adequateTubes.add(Pair.of(TUBE_40_SKU_MULTIPLE, tube40MultipleCount)); + adequateTubes.add(Pair.of(TUBE_50_SKU_MULTIPLE, tube40MultipleCount)); } if (tube30SingleDoubleCount > 0) { adequateTubes.add(Pair.of(TUBE_30_SKU_SINGLE_DOUBLE, tube30SingleDoubleCount)); From d828a323a9989ecb0f09e13db2b945c69b428885 Mon Sep 17 00:00:00 2001 From: Qiuyi LI Date: Thu, 13 Jun 2024 15:49:06 +0200 Subject: [PATCH 03/16] Release : 2.3.1 --- .../jeecg-system-start/src/main/resources/banner.txt | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/banner.txt b/jeecg-module-system/jeecg-system-start/src/main/resources/banner.txt index 8c35e8f23..058acedf5 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/resources/banner.txt +++ b/jeecg-module-system/jeecg-system-start/src/main/resources/banner.txt @@ -8,7 +8,7 @@ ${AnsiColor.BRIGHT_BLUE} ${AnsiColor.BRIGHT_GREEN} -WIA APP Version: 2.3.0 +WIA APP Version: 2.3.1 Spring Boot Version: ${spring-boot.version}${spring-boot.formatted-version} Website: www.wia-sourcing.com ${AnsiColor.BLACK} diff --git a/pom.xml b/pom.xml index 52bacd68e..72ccc0a56 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 org.jeecgframework.boot jeecg-boot-parent - 2.3.0 + 2.3.1 pom WIA APP ${project.version} From 0eda4dfee1e9523ceb9e07cc80049826e087b015 Mon Sep 17 00:00:00 2001 From: Qiuyi LI Date: Mon, 24 Jun 2024 17:25:18 +0200 Subject: [PATCH 04/16] Update CJ_Logistics tracking number pattern --- .../business/domain/api/shopify/CreateFulfillmentRequest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/shopify/CreateFulfillmentRequest.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/shopify/CreateFulfillmentRequest.java index e5e24a19d..e7019df65 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/shopify/CreateFulfillmentRequest.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/shopify/CreateFulfillmentRequest.java @@ -43,7 +43,7 @@ public class CreateFulfillmentRequest extends ShopifyRequest { POST_NL("https://postnl.post/", "PostNL International Mail", "LS[0-9]{9}NL"), COLI_COLI("https://www.colicoli.fr/trackings?id=%s", "Coli Coli", "CC[0-9]{14}[A-Z]*"), LUXEMBOURG_POST("https://www.post.lu/particuliers/colis-courrier/track-and-trace#/search", "Luxembourg Post", "LL[0-9]{9}LU"), - CJ_LOGISTICS("https://www.cjlogistics.com/ko/tool/parcel/tracking", "CJ대한통운", "57575[0-9]{7}|58476[0-9]{7}"), + CJ_LOGISTICS("https://www.cjlogistics.com/ko/tool/parcel/tracking", "CJ대한통운", "57575[0-9]{7}|58476[0-9]{7}|59012[0-9]{7}"), ; private final String trackingUrl; From c9dad6b470e3baa49d2bb762608258dfe738de3d Mon Sep 17 00:00:00 2001 From: Qiuyi LI Date: Thu, 27 Jun 2024 17:05:19 +0200 Subject: [PATCH 05/16] Create abstract YDRequestBody for all YD requests --- .../business/domain/api/yd/YDRequestBody.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDRequestBody.java diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDRequestBody.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDRequestBody.java new file mode 100644 index 000000000..5e0dbb726 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDRequestBody.java @@ -0,0 +1,22 @@ +package org.jeecg.modules.business.domain.api.yd; + +public abstract class YDRequestBody { + + private final String serviceMethod; + + private final String paramsJson; + + public YDRequestBody(String serviceMethod, String paramsJson) { + this.serviceMethod = serviceMethod; + this.paramsJson = paramsJson; + } + + public String getServiceMethod() { + return serviceMethod; + } + + public String getParamsJson() { + return paramsJson; + } + +} \ No newline at end of file From 1324273e94bb13ad86cb6ca86110a17029ec663c Mon Sep 17 00:00:00 2001 From: Qiuyi LI Date: Thu, 27 Jun 2024 17:07:07 +0200 Subject: [PATCH 06/16] Create non-abstract YD request bodies --- .../api/yd/YDParcelTraceRequestBody.java | 22 +++++++++++++++++++ .../api/yd/YDTrackingNumberRequestBody.java | 19 ++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDParcelTraceRequestBody.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDTrackingNumberRequestBody.java diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDParcelTraceRequestBody.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDParcelTraceRequestBody.java new file mode 100644 index 000000000..4ecc0da48 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDParcelTraceRequestBody.java @@ -0,0 +1,22 @@ +package org.jeecg.modules.business.domain.api.yd; + +import com.alibaba.fastjson.JSONObject; + +import java.util.List; + +public class YDParcelTraceRequestBody extends YDRequestBody { + + private static final String SERVICE_METHOD = "gettrack"; + private static final String TRACKING_NUMBER = "tracking_number"; + + public YDParcelTraceRequestBody(List billCodes) { + super(SERVICE_METHOD, generateJsonString(billCodes)); + } + + private static String generateJsonString(List billCodes) { + JSONObject param = new JSONObject(); + String billCodesWithComas = String.join(",", billCodes); + param.put(TRACKING_NUMBER, billCodesWithComas); + return param.toJSONString(); + } +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDTrackingNumberRequestBody.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDTrackingNumberRequestBody.java new file mode 100644 index 000000000..9e826770d --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDTrackingNumberRequestBody.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.business.domain.api.yd; + +import com.alibaba.fastjson.JSONObject; + +public class YDTrackingNumberRequestBody extends YDRequestBody { + + private static final String SERVICE_METHOD = "gettrackingnumber"; + private static final String REFERENCE_NO = "reference_no"; + + public YDTrackingNumberRequestBody(String platformOrderId) { + super(SERVICE_METHOD, generateJsonString(platformOrderId)); + } + + private static String generateJsonString(String platformOrderId) { + JSONObject param = new JSONObject(); + param.put(REFERENCE_NO, platformOrderId); + return param.toJSONString(); + } +} From fbcb1aab940d62bb7f770a3c832f26bc23c3225a Mon Sep 17 00:00:00 2001 From: Qiuyi LI Date: Thu, 27 Jun 2024 17:07:53 +0200 Subject: [PATCH 07/16] Create YDTrackingNumberData model --- .../domain/api/yd/YDTrackingNumberData.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDTrackingNumberData.java diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDTrackingNumberData.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDTrackingNumberData.java new file mode 100644 index 000000000..e92eee1b9 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDTrackingNumberData.java @@ -0,0 +1,24 @@ +package org.jeecg.modules.business.domain.api.yd; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Data +public class YDTrackingNumberData { + + @JsonProperty("refrence_no") + private String platformOrderId; + + @JsonProperty("channel_hawbcode") + private String localTrackingNumber; + + public YDTrackingNumberData(String platformOrderId, String localTrackingNumber) { + this.platformOrderId = platformOrderId; + this.localTrackingNumber = localTrackingNumber; + } + + public YDTrackingNumberData() { + } +} From a0993fd7651b11566d238764da3f777a2f1578e1 Mon Sep 17 00:00:00 2001 From: Qiuyi LI Date: Thu, 27 Jun 2024 17:08:33 +0200 Subject: [PATCH 08/16] Transform YDResponse into abstract class --- .../business/domain/api/yd/YDResponse.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDResponse.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDResponse.java index 7f121690f..8b7480340 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDResponse.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDResponse.java @@ -4,38 +4,32 @@ import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import lombok.extern.slf4j.Slf4j; -import java.util.List; - @Slf4j @Data -public class YDResponse { +public abstract class YDResponse { /** * 返回值 */ @JsonProperty("success") - private Integer returnValue; + protected Integer returnValue; /** * 返回中文信息 */ @JsonProperty("cnmessage") - private String cnMessage; + protected String cnMessage; /** * 返回英文信息 */ @JsonProperty("enmessage") - private String enMessage; + protected String enMessage; - @JsonProperty("data") - private List traceDataList; - - public YDResponse(Integer returnValue, String cnMessage, String enMessage, List traceDataList) { + public YDResponse(Integer returnValue, String cnMessage, String enMessage) { this.returnValue = returnValue; this.cnMessage = cnMessage; this.enMessage = enMessage; - this.traceDataList = traceDataList; } public YDResponse() { From 38a832eee492dcec83ffad0c0efb8c7f52feadf2 Mon Sep 17 00:00:00 2001 From: Qiuyi LI Date: Thu, 27 Jun 2024 17:09:14 +0200 Subject: [PATCH 09/16] Create non-abstract YDResponse classes --- .../domain/api/yd/YDParcelTraceResponse.java | 23 +++++++++++++++++++ .../api/yd/YDTrackingNumberResponse.java | 21 +++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDParcelTraceResponse.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDTrackingNumberResponse.java diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDParcelTraceResponse.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDParcelTraceResponse.java new file mode 100644 index 000000000..f2059bfc3 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDParcelTraceResponse.java @@ -0,0 +1,23 @@ +package org.jeecg.modules.business.domain.api.yd; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; + +@Slf4j +@Data +public class YDParcelTraceResponse extends YDResponse { + + @JsonProperty("data") + private List traceDataList; + + public YDParcelTraceResponse(Integer returnValue, String cnMessage, String enMessage, List traceDataList) { + super(returnValue, cnMessage, enMessage); + this.traceDataList = traceDataList; + } + + public YDParcelTraceResponse() { + } +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDTrackingNumberResponse.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDTrackingNumberResponse.java new file mode 100644 index 000000000..310db0097 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDTrackingNumberResponse.java @@ -0,0 +1,21 @@ +package org.jeecg.modules.business.domain.api.yd; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Data +public class YDTrackingNumberResponse extends YDResponse { + + @JsonProperty("data") + private YDTrackingNumberData trackingNumberData; + + public YDTrackingNumberResponse(Integer returnValue, String cnMessage, String enMessage, YDTrackingNumberData trackingNumberData) { + super(returnValue, cnMessage, enMessage); + this.trackingNumberData = trackingNumberData; + } + + public YDTrackingNumberResponse() { + } +} From ced711cb03f1ca5814d51d07a2fc964cceb20e84 Mon Sep 17 00:00:00 2001 From: Qiuyi LI Date: Thu, 27 Jun 2024 17:13:34 +0200 Subject: [PATCH 10/16] Use YDRequestBody in YDRequest for YDJob and CWJob --- .../business/domain/api/yd/YDRequest.java | 26 ++++++------------- .../modules/business/domain/job/CWJob.java | 10 ++++--- .../modules/business/domain/job/YDJob.java | 8 +++--- 3 files changed, 19 insertions(+), 25 deletions(-) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDRequest.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDRequest.java index 481ac6ac8..65725fd4d 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDRequest.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/yd/YDRequest.java @@ -1,7 +1,6 @@ package org.jeecg.modules.business.domain.api.yd; -import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; @@ -23,18 +22,16 @@ import java.util.List; @Slf4j public class YDRequest { private final static String URL = "http://oms.ydhex.com/webservice/PublicService.asmx/ServiceInterfaceUTF8"; - private String appToken; - private String appKey; + private final String appToken; + private final String appKey; + private final YDRequestBody ydRequestBody; - private static final String SERVICE_METHOD = "gettrack"; private static final RequestConfig REQUEST_CONFIG = RequestConfig.custom().build(); - private final List billCodes; - - public YDRequest(String appToken, String appKey, List billCodes) { + public YDRequest(String appToken, String appKey, YDRequestBody ydRequestBody) { this.appToken = appToken; this.appKey = appKey; - this.billCodes = billCodes; + this.ydRequestBody = ydRequestBody; } /** @@ -53,7 +50,7 @@ public class YDRequest { request.setEntity(new UrlEncodedFormEntity(generateFormData(), "UTF-8")); return httpClient.execute(request); } catch (Exception e) { - log.error("Request failed on attempt n°" + attempts); + log.error("Request failed on attempt n°{}", attempts); } } return null; @@ -67,18 +64,11 @@ public class YDRequest { */ private List generateFormData() { List pairs = new ArrayList<>(); - String paramsJson = generateJsonString(billCodes); pairs.add(new BasicNameValuePair("appToken", appToken)); pairs.add(new BasicNameValuePair("appKey", appKey)); - pairs.add(new BasicNameValuePair("serviceMethod", SERVICE_METHOD)); - pairs.add(new BasicNameValuePair("paramsJson", paramsJson)); + pairs.add(new BasicNameValuePair("serviceMethod", ydRequestBody.getServiceMethod())); + pairs.add(new BasicNameValuePair("paramsJson", ydRequestBody.getParamsJson())); return pairs; } - private static String generateJsonString(List billCodes) { - JSONObject param = new JSONObject(); - String billCodesWithComas = String.join(",", billCodes); - param.put("tracking_number", billCodesWithComas); - return param.toJSONString(); - } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/CWJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/CWJob.java index ec3c1e002..deef88f08 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/CWJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/CWJob.java @@ -9,8 +9,9 @@ import org.apache.http.util.EntityUtils; 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.yd.YDParcelTraceRequestBody; +import org.jeecg.modules.business.domain.api.yd.YDParcelTraceResponse; import org.jeecg.modules.business.domain.api.yd.YDRequest; -import org.jeecg.modules.business.domain.api.yd.YDResponse; import org.jeecg.modules.business.domain.api.yd.YDTraceData; import org.jeecg.modules.business.service.IParcelService; import org.jeecg.modules.business.service.IPlatformOrderService; @@ -42,7 +43,7 @@ public class CWJob implements Job { private static final Integer DEFAULT_NUMBER_OF_DAYS = 15; private static final Integer DEFAULT_NUMBER_OF_THREADS = 10; private static final Integer DEFAULT_MAXIMUM_NUMBER_OF_PARCELS_PER_TRANSACTION = 800; - private static final List DEFAULT_TRANSPORTERS = Arrays.asList("诚稳法邮普货" , "诚稳法邮膏体"); + private static final List DEFAULT_TRANSPORTERS = Arrays.asList("诚稳法邮普货", "诚稳法邮膏体"); private final static String APP_TOKEN = "y7j1p5o4obncsdhbk1zgasunb2erpyzvh"; private final static String APP_KEY = "ym27kj0wy5wgx69f58pgd7crm60w07p0l15flj1bacrf5n0e38vqjtrjkkvosd61p"; @@ -99,7 +100,8 @@ public class CWJob implements Job { List parcelTraces = new ArrayList<>(); List ydRequests = new ArrayList<>(); billCodeLists.forEach(billcodeList -> { - YDRequest ydRequest = new YDRequest(APP_TOKEN, APP_KEY, billcodeList); + YDParcelTraceRequestBody ydParcelTraceRequestBody = new YDParcelTraceRequestBody(billcodeList); + YDRequest ydRequest = new YDRequest(APP_TOKEN, APP_KEY, ydParcelTraceRequestBody); ydRequests.add(ydRequest); }); ExecutorService executor = Executors.newFixedThreadPool(DEFAULT_NUMBER_OF_THREADS); @@ -110,7 +112,7 @@ public class CWJob implements Job { try { // String of the response String responseString = EntityUtils.toString(entity, "UTF-8"); - YDResponse ydResponse = mapper.readValue(responseString, YDResponse.class); + YDParcelTraceResponse ydResponse = mapper.readValue(responseString, YDParcelTraceResponse.class); parcelTraces.addAll(ydResponse.getTraceDataList()); success = true; } catch (IOException e) { diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/YDJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/YDJob.java index 2f14c00fc..5bc500ff5 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/YDJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/YDJob.java @@ -9,8 +9,9 @@ import org.apache.http.util.EntityUtils; 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.yd.YDParcelTraceRequestBody; +import org.jeecg.modules.business.domain.api.yd.YDParcelTraceResponse; import org.jeecg.modules.business.domain.api.yd.YDRequest; -import org.jeecg.modules.business.domain.api.yd.YDResponse; import org.jeecg.modules.business.domain.api.yd.YDTraceData; import org.jeecg.modules.business.service.IParcelService; import org.jeecg.modules.business.service.IPlatformOrderService; @@ -99,7 +100,8 @@ public class YDJob implements Job { List parcelTraces = new ArrayList<>(); List ydRequests = new ArrayList<>(); billCodeLists.forEach(billcodeList -> { - YDRequest ydRequest = new YDRequest(APP_TOKEN, APP_KEY, billcodeList); + YDParcelTraceRequestBody ydParcelTraceRequestBody = new YDParcelTraceRequestBody(billcodeList); + YDRequest ydRequest = new YDRequest(APP_TOKEN, APP_KEY, ydParcelTraceRequestBody); ydRequests.add(ydRequest); }); ExecutorService executor = Executors.newFixedThreadPool(DEFAULT_NUMBER_OF_THREADS); @@ -110,7 +112,7 @@ public class YDJob implements Job { try { // String of the response String responseString = EntityUtils.toString(entity, "UTF-8"); - YDResponse ydResponse = mapper.readValue(responseString, YDResponse.class); + YDParcelTraceResponse ydResponse = mapper.readValue(responseString, YDParcelTraceResponse.class); parcelTraces.addAll(ydResponse.getTraceDataList()); success = true; } catch (IOException e) { From f2c5040a4b9cd2fde62fb553f1ce6b326707a4e4 Mon Sep 17 00:00:00 2001 From: Qiuyi LI Date: Thu, 27 Jun 2024 17:14:11 +0200 Subject: [PATCH 11/16] Update PlatformOrder model --- .../modules/business/entity/PlatformOrder.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/PlatformOrder.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/PlatformOrder.java index d6498242f..beb2051e6 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/PlatformOrder.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/PlatformOrder.java @@ -12,14 +12,13 @@ import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; -import java.math.BigDecimal; import java.util.Date; /** * @Description: 平台订单表 * @Author: jeecg-boot - * @Date: 2024-05-30 - * @Version: V1.9 + * @Date: 2024-06-25 + * @Version: V1.10 */ @ApiModel(value = "platform_order对象", description = "平台订单表") @Data @@ -258,5 +257,11 @@ public class PlatformOrder implements Serializable { @Excel(name = "Shopify平台已同步(1=已同步,0=未同步)", width = 15, dicCode = "yn") @Dict(dicCode = "yn") @ApiModelProperty(value = "Shopify平台已同步(1=已同步,0=未同步)") - private java.lang.String shopifySynced; + private String shopifySynced; + /** + * 目的地转单号 + */ + @Excel(name = "目的地转单号", width = 15) + @ApiModelProperty(value = "目的地转单号") + private String localTrackingNumber; } From 3bb661f535bbff509014e124a1b40843686f3d72 Mon Sep 17 00:00:00 2001 From: Qiuyi LI Date: Thu, 27 Jun 2024 17:19:12 +0200 Subject: [PATCH 12/16] Create YDTrackingNumberJob to retrieve local tracking numbers, and to update them in database, also set ready_for_shopify_sync --- .../domain/job/YDTrackingNumberJob.java | 122 ++++++++++++++++++ .../business/mapper/PlatformOrderMapper.java | 5 + .../mapper/xml/PlatformOrderMapper.xml | 34 +++++ .../service/IPlatformOrderService.java | 5 + .../impl/PlatformOrderServiceImpl.java | 12 ++ 5 files changed, 178 insertions(+) create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/YDTrackingNumberJob.java diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/YDTrackingNumberJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/YDTrackingNumberJob.java new file mode 100644 index 000000000..e73a11d81 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/YDTrackingNumberJob.java @@ -0,0 +1,122 @@ +package org.jeecg.modules.business.domain.job; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.http.HttpEntity; +import org.apache.http.util.EntityUtils; +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.yd.YDRequest; +import org.jeecg.modules.business.domain.api.yd.YDTrackingNumberData; +import org.jeecg.modules.business.domain.api.yd.YDTrackingNumberRequestBody; +import org.jeecg.modules.business.domain.api.yd.YDTrackingNumberResponse; +import org.jeecg.modules.business.service.IPlatformOrderService; +import org.quartz.Job; +import org.quartz.JobDataMap; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.stream.Collectors; + +@Slf4j +public class YDTrackingNumberJob implements Job { + + @Autowired + private IPlatformOrderService platformOrderService; + + private static final Integer DEFAULT_NUMBER_OF_THREADS = 10; + + private final static String APP_TOKEN = "y553qci626dds5d6lcughy3ogicvfaxmh"; + private final static String APP_KEY = "ynpoeds5511hg791mmksg6xccqxhax11j16eqz1itylq7whijki20egl0nmyql5h9"; + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + List shops = new ArrayList<>(); + Map> transportersByShop = new HashMap<>(); + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + JobDataMap jobDataMap = context.getMergedJobDataMap(); + String parameter = ((String) jobDataMap.get("parameter")); + if (parameter != null) { + try { + JSONObject jsonObject = new JSONObject(parameter); + if (!jsonObject.isNull("transportersByShop")) { + JSONArray transportersByShopArray = jsonObject.getJSONArray("transportersByShop"); + for (int i = 0; i < transportersByShopArray.length(); i++) { + JSONObject object = transportersByShopArray.getJSONObject((i)); + if (!object.isNull("shop")) { + String shopCode = object.getString("shop"); + shops.add(shopCode); + if (!object.isNull("transporters")) { + JSONArray transportersArray = object.getJSONArray("transporters"); + List transporters = new ArrayList<>(); + for (int j = 0; j < transportersArray.length(); j++) { + transporters.add(transportersArray.getString(j)); + } + transportersByShop.put(shopCode, transporters); + } + } + } + } + } catch (JSONException e) { + log.error("Error while parsing parameter as JSON, falling back to default parameters."); + } + } + + log.info("Starting to retrieve local tracking numbers"); + List localTrackingNumbers = new ArrayList<>(); + List platformOrderIds = new ArrayList<>(); + for (Map.Entry> entry : transportersByShop.entrySet()) { + platformOrderIds.addAll(platformOrderService.fetchShippedOrdersFromShopAndTransporters(entry.getKey(), entry.getValue())); + } + + List ydRequests = new ArrayList<>(); + platformOrderIds.forEach(platformOrderId -> { + YDTrackingNumberRequestBody ydParcelTraceRequestBody = new YDTrackingNumberRequestBody(platformOrderId); + YDRequest ydRequest = new YDRequest(APP_TOKEN, APP_KEY, ydParcelTraceRequestBody); + ydRequests.add(ydRequest); + }); + + + ExecutorService executor = Executors.newFixedThreadPool(DEFAULT_NUMBER_OF_THREADS); + List> futures = ydRequests.stream() + .map(request -> CompletableFuture.supplyAsync(() -> { + boolean success = false; + HttpEntity entity = request.send().getEntity(); + try { + // String of the response + String responseString = EntityUtils.toString(entity, "UTF-8"); + YDTrackingNumberResponse ydResponse = mapper.readValue(responseString, YDTrackingNumberResponse.class); + if (ydResponse.getTrackingNumberData().getLocalTrackingNumber() != null && + !ydResponse.getTrackingNumberData().getLocalTrackingNumber().isEmpty()) { + localTrackingNumbers.add(ydResponse.getTrackingNumberData()); + } + success = true; + } catch (IOException e) { + log.error("Error while parsing response into String", e); + } + return success; + }, executor)) + .collect(Collectors.toList()); + List results = futures.stream().map(CompletableFuture::join).collect(Collectors.toList()); + long nbSuccesses = results.stream().filter(b -> b).count(); + log.info("{}/{} local tracking numbers have been retrieved.", nbSuccesses, ydRequests.size()); + + log.info("Started updating {} local tracking numbers", localTrackingNumbers.size()); + platformOrderService.updateLocalTrackingNumber(localTrackingNumbers); + log.info("Ended updating local tracking numbers for the following orders : {}", localTrackingNumbers.stream() + .map(YDTrackingNumberData::getPlatformOrderId) + .collect(Collectors.toList())); + } +} 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 30ffdbd0c..1d1c8d939 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 @@ -3,6 +3,7 @@ package org.jeecg.modules.business.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.business.domain.api.mabang.getorderlist.Order; +import org.jeecg.modules.business.domain.api.yd.YDTrackingNumberData; import org.jeecg.modules.business.entity.PlatformOrder; import org.jeecg.modules.business.entity.PlatformOrderShopSync; import org.jeecg.modules.business.vo.OrderKpi; @@ -233,4 +234,8 @@ public interface PlatformOrderMapper extends BaseMapper { List findReadyAbnormalOrdersWithSkus(@Param("skus") List skus); void updateShopifySynced(@Param("platformOrderIds") Collection platformOrderIds); + + List fetchShippedOrdersFromShopAndTransporters(@Param("shopCode")String shopCode, @Param("transporters") List transporters); + + void updateLocalTrackingNumber(@Param("data") List data); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderMapper.xml index a73d0fbb0..d8877ca09 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderMapper.xml @@ -1074,4 +1074,38 @@ #{platformOrderId} + + + + + UPDATE platform_order + SET ready_for_shopify_sync = 1, + local_tracking_number = + case platform_order_id + + when #{item.platformOrderId} then #{item.localTrackingNumber} + + end + where platform_order_id in + + #{item.platformOrderId} + + 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 fdd185cf7..531180c05 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 @@ -3,6 +3,7 @@ package org.jeecg.modules.business.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.business.controller.UserException; +import org.jeecg.modules.business.domain.api.yd.YDTrackingNumberData; import org.jeecg.modules.business.entity.*; import org.jeecg.modules.business.vo.PlatformOrderOption; import org.jeecg.modules.business.vo.PlatformOrderQuantity; @@ -256,4 +257,8 @@ public interface IPlatformOrderService extends IService { List findReadyAbnormalOrdersWithSkus(List skus); void updateShopifySynced(Collection platformOrderIds); + + List fetchShippedOrdersFromShopAndTransporters(String shopCode, List transporters); + + void updateLocalTrackingNumber(List data); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderServiceImpl.java index b898bd59d..d8ed680bd 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderServiceImpl.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import lombok.extern.slf4j.Slf4j; import org.jeecg.modules.business.controller.UserException; +import org.jeecg.modules.business.domain.api.yd.YDTrackingNumberData; import org.jeecg.modules.business.entity.*; import org.jeecg.modules.business.mapper.ExchangeRatesMapper; import org.jeecg.modules.business.mapper.PlatformOrderContentMapper; @@ -520,8 +521,19 @@ public class PlatformOrderServiceImpl extends ServiceImpl findReadyAbnormalOrdersWithSkus(List skus) { return platformOrderMap.findReadyAbnormalOrdersWithSkus(skus); } + @Override public void updateShopifySynced(Collection platformOrderIds) { platformOrderMap.updateShopifySynced(platformOrderIds); } + + @Override + public List fetchShippedOrdersFromShopAndTransporters(String shopCode, List transporters) { + return platformOrderMap.fetchShippedOrdersFromShopAndTransporters(shopCode, transporters); + } + + @Override + public void updateLocalTrackingNumber(List data) { + platformOrderMap.updateLocalTrackingNumber(data); + } } From 8b1569896c00393dc581032f136392adcc2c9f8f Mon Sep 17 00:00:00 2001 From: Qiuyi LI Date: Fri, 28 Jun 2024 14:30:09 +0200 Subject: [PATCH 13/16] Update project version --- .../jeecg-system-start/src/main/resources/banner.txt | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/banner.txt b/jeecg-module-system/jeecg-system-start/src/main/resources/banner.txt index 058acedf5..60fe74950 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/resources/banner.txt +++ b/jeecg-module-system/jeecg-system-start/src/main/resources/banner.txt @@ -8,7 +8,7 @@ ${AnsiColor.BRIGHT_BLUE} ${AnsiColor.BRIGHT_GREEN} -WIA APP Version: 2.3.1 +WIA APP Version: 2.4.0 Spring Boot Version: ${spring-boot.version}${spring-boot.formatted-version} Website: www.wia-sourcing.com ${AnsiColor.BLACK} diff --git a/pom.xml b/pom.xml index 72ccc0a56..565e4bb01 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 org.jeecgframework.boot jeecg-boot-parent - 2.3.1 + 2.4.0 pom WIA APP ${project.version} From eacec4b6c8808e3019676a0b79df1da593018183 Mon Sep 17 00:00:00 2001 From: Qiuyi LI Date: Fri, 28 Jun 2024 15:13:19 +0200 Subject: [PATCH 14/16] Hotfix : Use local tracking number when present for shopify syncing --- .../jeecg/modules/business/mapper/xml/PlatformOrderMapper.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderMapper.xml index d8877ca09..b0b90e519 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderMapper.xml @@ -449,7 +449,8 @@