allegro / allegro/allegro-api

Allegro Delivery – błąd ShipmentIdNotReceivedException (IN_PROGRESS) mimo utworzenia przesyłki – ryzyko duplikowania przesyłek

已關閉
#13,889 4 則留言 0 個 reaction 已指派 1 人 已被 @PrzemyslawLukanowski 認領 在 GitHub 檢視
brak_odpowiedzi Orders - shipment management
主要語言
沒有語言資料
星號
244
分支
40
PR 合併指標
30 天內沒有已合併 PR

描述

Dzień dobry,
Przesyłam następujący problem od naszego zespołu wprowadzającego nowe formy dostaw(allegro delivery) - aktualnie testują wszystko na testowej wersji sandbox i spotkali się z takimi problemami:

Zauważyliśmy dwa problemy przy testowaniu zakładania przesyłek.
Dla przykładu zlecenia 6t3vwekfmd+13e1f6199@user.allegrogroup.pl
Zlecenie ma dwie paczki.
Pierwsza paczka.
Utworzył się komunikat założenia przesyłki RFT:
{
"input" : {
"sender" : {
"company" : "STALCO",
"street" : "Ofiar Katynia 1",
"postalCode" : "32-050",
"city" : "Skawina",
"countryCode" : "PL",
"email" : "xxx,
"phone" : "xxx"
},
"receiver" : {
"company" : "Jakub xx",
"street" : "xx,
"postalCode" : "30-122",
"city" : "Kraków",
"countryCode" : "PL",
"email" : "6t3vwekfmd+13e1f6199@user.allegrogroup.pl",
"phone" : "+48 xxx,
"point" : "764630"
},
"packages" : [ {
"type" : "PACKAGE",
"length" : {
"value" : "44",
"unit" : "CENTIMETER"
},
"width" : {
"value" : "40",
"unit" : "CENTIMETER"
},
"height" : {
"value" : "20",
"unit" : "CENTIMETER"
},
"weight" : {
"value" : "5",
"unit" : "KILOGRAMS"
}
} ]
}
}

W odpowiedzi błąd:
RESPONSE BODY : {"RESPONSE_STATUS":"ER","RESPONSE_TXT":"pl.quantum.l4s.qallegro.exceptions.ShipmentIdNotReceivedException: {\"commandId\":\"fb4200b7-cb53-48d4-87ac-3d96c69dd78f\",\"status\":\"IN_PROGRESS\",\"errors\":null,\"shipmentId\":null}\r\n\tat pl.quantum.l4s.qallegro.services.QCreateCommandsStatus.getShipmentId(QCreateCommandsStatus.java:79)\r\n\tat pl.quantum.l4s.qallegro.services.QCreateCommandsStatus.createCommandsStatus(QCreateCommandsStatus.java:63)\r\n\tat pl.quantum.l4s.qallegro.services.QCreateCommandsService.readResponse(QCreateCommandsService.java:289)\r\n\tat pl.quantum.l4s.qallegro.services.QCreateCommandsService.createCommands(QCreateCommandsService.java:94)\r\n\tat java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)\r\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:580)\r\n\tat org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:154)\r\n\tat org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:118)\r\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:560)\r\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java:452)\r\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$2(ResourceMethodInvoker.java:413)\r\n\tat org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:321)\r\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:415)\r\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:378)\r\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:356)\r\n\tat org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:70)\r\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:429)\r\n\tat org.jboss.resteasy.core.SynchronousDispatcher.lambda$invokePropagateNotFound$6(SynchronousDispatcher.java:275)\r\n\tat org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:154)\r\n\tat org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:321)\r\n\tat org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:157)\r\n\tat org.jboss.resteasy.core.SynchronousDispatcher.invokePropagateNotFound(SynchronousDispatcher.java:260)\r\n\tat org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:224)\r\n\tat org.jboss.resteasy.plugins.server.servlet.FilterDispatcher.doFilter(FilterDispatcher.java:62)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:162)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:138)\r\n\tat org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:70)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:162)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:138)\r\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:165)\r\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:88)\r\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:113)\r\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:90)\r\n\tat org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:664)\r\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:72)\r\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)\r\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\r\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903)\r\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1776)\r\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n\tat org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:975)\r\n\tat org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:493)\r\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n\tat java.base/java.lang.Thread.run(Thread.java:1583)\r\n\n"}
Przesyłka nie złożona, błąd w odpowiedzi.

Druga paczka:
Utworzył się komunikat założenia przesyłki RFT:
{
"input" : {
"sender" : {
"company" : "STALCO",
"street" : "Ofiar Katynia 1",
"postalCode" : "32-050",
"city" : "Skawina",
"countryCode" : "PL",
"email" : "sxxxo.pl",
"phone" : "xxx"
},
"receiver" : {
"company" : "Jakub xx",
"street" : "Lxxx,
"postalCode" : "30-122",
"city" : "Kraków",
"countryCode" : "PL",
"email" : "6t3vwekfmd+13e1f6199@user.allegrogroup.pl",
"phone" : "+48 xxxx",
"point" : "764630"
},
"packages" : [ {
"type" : "PACKAGE",
"length" : {
"value" : "44",
"unit" : "CENTIMETER"
},
"width" : {
"value" : "40",
"unit" : "CENTIMETER"
},
"height" : {
"value" : "15",
"unit" : "CENTIMETER"
},
"weight" : {
"value" : "5",
"unit" : "KILOGRAMS"
}
} ]
}
}

W odpowiedzi potwierdzenie złożenia przesyłki : cc1ebd35-b337-441f-bd82-1da4a11d1526
RESPONSE BODY : {"RESPONSE_STATUS":"OK","RESPONSE_REF_NR":"cc1ebd35-b337-441f-bd82-1da4a11d1526","RESPONSE_PACKAGE_INFO":[{"TRACKING_NR":"3401009616921","ADDITIONAL_INFO":"AD0CBSF7BFMF6M1QN"}]}
Potem wyszedł komunikat na pobranie etykiety i tu przetworzyło się prawidłowo etykieta się pobrała.

Pierwszy problem jest taki, przy testach dostajemy bardzo często błąd:
RESPONSE BODY : {"RESPONSE_STATUS":"ER","RESPONSE_TXT":"pl.quantum.l4s.qallegro.exceptions.ShipmentIdNotReceivedException: {\"commandId\":\"fb4200b7-cb53-48d4-87ac-3d96c69dd78f\",\"status\":\"IN_PROGRESS\",\"errors\":null,\"shipmentId\":null}

Z czym jest on związany?

Drugi problem jest taki, że mimo odpowiedź o błędzie złożenia przesyłki to na koncie Allegro widać, że przesyłka się złożyła.
To potencjalnie tworzy problemy przy dalszym procesowaniu przesyłek z błędem.
Jak ponowimy komunikat na błędną przesyłkę i uda się go przetworzyć, to na koncie Allegro będą widoczne trzy przesyłki a realnie są dwie.
Tu powinien być mechanizm, że nie zakłada się przesyłka bez pozytywnej odpowiedzi na komunikat złożenia przesyłki.

貢獻指南

這個儲存庫沒有索引到貢獻指南

研究方向

Start by reproducing the Allegro Delivery shipment-creation flow in the sandbox and read the stack-trace entry points QCreateCommandsStatus.getShipmentId/createCommandsStatus and QCreateCommandsService.readResponse/createCommands. Check how an IN_PROGRESS response is handled and verify that retries do not create duplicate shipments; done means successful shipments are reported reliably and failed responses do not lead to extra shipments.

由索引模型根據 Issue 內容生成。

評估

技術堆疊
java
領域
api, backend
Issue 類型
缺陷
難度
4/5
預估耗時
3-5 天
活躍度
活躍
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。