|
@@ -10,6 +10,7 @@ import cn.hutool.core.util.StrUtil;
|
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
|
|
|
import com.fjhx.common.constant.SourceConstant;
|
|
|
+import com.fjhx.common.utils.TransactionUtil;
|
|
|
import com.fjhx.item.entity.product.po.ProductInfo;
|
|
|
import com.fjhx.item.service.product.ProductInfoService;
|
|
|
import com.fjhx.tenant.entity.dict.dto.DictTenantDataDto;
|
|
@@ -26,7 +27,12 @@ import com.fjhx.victoriatourist.entity.jd.po.JdOrderDetails;
|
|
|
import com.fjhx.victoriatourist.entity.jd.vo.CommonDictData;
|
|
|
import com.fjhx.victoriatourist.entity.jd.vo.JdInfoVo;
|
|
|
import com.fjhx.victoriatourist.entity.jd.vo.TellBackOrderVO;
|
|
|
-import com.fjhx.victoriatourist.service.jd.*;
|
|
|
+import com.fjhx.victoriatourist.service.jd.JdApiService;
|
|
|
+import com.fjhx.victoriatourist.service.jd.JdBackDetailsService;
|
|
|
+import com.fjhx.victoriatourist.service.jd.JdBackService;
|
|
|
+import com.fjhx.victoriatourist.service.jd.JdInfoService;
|
|
|
+import com.fjhx.victoriatourist.service.jd.JdOrderDetailsService;
|
|
|
+import com.fjhx.victoriatourist.service.jd.JdOrderService;
|
|
|
import com.fjhx.victoriatourist.service.jd.constants.InitDictConstant;
|
|
|
import com.fjhx.victoriatourist.service.jd.constants.JdParamConstant;
|
|
|
import com.fjhx.victoriatourist.service.jd.constants.RunParamConstant;
|
|
@@ -43,9 +49,21 @@ import com.jd.open.api.sdk.domain.supplier.PoQueryForJosWebService.response.getp
|
|
|
import com.jd.open.api.sdk.domain.supplier.ReturnOrderForJosWebService.response.detail.DetailResultDto;
|
|
|
import com.jd.open.api.sdk.domain.supplier.ReturnOrderForJosWebService.response.get.RoDto;
|
|
|
import com.jd.open.api.sdk.domain.supplier.ReturnOrderForJosWebService.response.get.RoResultDto;
|
|
|
-import com.jd.open.api.sdk.request.supplier.*;
|
|
|
+import com.jd.open.api.sdk.request.supplier.VcConfirmpurchaseorderRequest;
|
|
|
+import com.jd.open.api.sdk.request.supplier.VcGetReturnOrderDetailRequest;
|
|
|
+import com.jd.open.api.sdk.request.supplier.VcGetcomponentlistRequest;
|
|
|
+import com.jd.open.api.sdk.request.supplier.VcGetdetailbyorderidRequest;
|
|
|
+import com.jd.open.api.sdk.request.supplier.VcGetpurchaseorderlistRequest;
|
|
|
+import com.jd.open.api.sdk.request.supplier.VcGetwaredeliverdistinctlistRequest;
|
|
|
+import com.jd.open.api.sdk.request.supplier.VcReturnOrderListPageGetRequest;
|
|
|
import com.jd.open.api.sdk.response.AbstractResponse;
|
|
|
-import com.jd.open.api.sdk.response.supplier.*;
|
|
|
+import com.jd.open.api.sdk.response.supplier.VcConfirmpurchaseorderResponse;
|
|
|
+import com.jd.open.api.sdk.response.supplier.VcGetReturnOrderDetailResponse;
|
|
|
+import com.jd.open.api.sdk.response.supplier.VcGetcomponentlistResponse;
|
|
|
+import com.jd.open.api.sdk.response.supplier.VcGetdetailbyorderidResponse;
|
|
|
+import com.jd.open.api.sdk.response.supplier.VcGetpurchaseorderlistResponse;
|
|
|
+import com.jd.open.api.sdk.response.supplier.VcGetwaredeliverdistinctlistResponse;
|
|
|
+import com.jd.open.api.sdk.response.supplier.VcReturnOrderListPageGetResponse;
|
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.io.IOUtils;
|
|
@@ -64,7 +82,12 @@ import org.springframework.stereotype.Service;
|
|
|
import javax.annotation.Resource;
|
|
|
import java.io.IOException;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
-import java.util.*;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -108,8 +131,6 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
@Override
|
|
|
public String build2LoginUrl() {
|
|
|
String url = RunParamConstant.JD_LOGIN_URL;
|
|
@@ -118,7 +139,6 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
return url;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
@Override
|
|
|
public void tellBackOrer(TellBackOrderVO tellBackOrderVO) {
|
|
|
JdClient client = jdClientFactory.getJdClient();
|
|
@@ -130,22 +150,22 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
String code = response.getCode();
|
|
|
- if(!"0".equals(code)){
|
|
|
+ if (!"0".equals(code)) {
|
|
|
//失败
|
|
|
- log.error("回告失败:{},{}",response.getZhDesc(), response.getMsg());
|
|
|
+ log.error("回告失败:{},{}", response.getZhDesc(), response.getMsg());
|
|
|
throw new RuntimeException("回告失败");
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
Boolean successFlag = false;
|
|
|
String msg = "回告失败";
|
|
|
- try{
|
|
|
+ try {
|
|
|
successFlag = JSONObject.parse(response.getMsg()).getJSONObject("jingdong_vc_confirmpurchaseorder_responce").getJSONObject("base_result").getBoolean("success");
|
|
|
msg = msg + ":" + JSONObject.parse(response.getMsg()).getJSONObject("jingdong_vc_confirmpurchaseorder_responce").getJSONObject("base_result").getString("result_message");
|
|
|
- }catch (Exception e){
|
|
|
- log.error("回告返回解析异常:{}",response.getMsg());
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("回告返回解析异常:{}", response.getMsg());
|
|
|
}
|
|
|
- if(!successFlag){
|
|
|
+ if (!successFlag) {
|
|
|
//失败
|
|
|
- log.error("回告失败:{},{}",response.getZhDesc(), response.getMsg());
|
|
|
+ log.error("回告失败:{},{}", response.getZhDesc(), response.getMsg());
|
|
|
throw new RuntimeException(msg);
|
|
|
}
|
|
|
}
|
|
@@ -155,11 +175,11 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
VcConfirmpurchaseorderRequest request = new VcConfirmpurchaseorderRequest();
|
|
|
request.setOrderId(tellBackOrderVO.getOrderId());
|
|
|
request.setDeliveryTime(tellBackOrderVO.getDeliveryTime());
|
|
|
- request.setWareId(tellBackOrderVO.getBackInfo().stream().map(o->StrUtil.toString(o.getWareId())).collect(Collectors.joining(",")));
|
|
|
- request.setConfirmNum(tellBackOrderVO.getBackInfo().stream().map(o->StrUtil.toString(o.getConfirmNum())).collect(Collectors.joining(",")));
|
|
|
- request.setBackExplanation(tellBackOrderVO.getBackInfo().stream().map(o->StrUtil.toString(o.getNonDeliveryReason())).collect(Collectors.joining(",")));
|
|
|
+ request.setWareId(tellBackOrderVO.getBackInfo().stream().map(o -> StrUtil.toString(o.getWareId())).collect(Collectors.joining(",")));
|
|
|
+ request.setConfirmNum(tellBackOrderVO.getBackInfo().stream().map(o -> StrUtil.toString(o.getConfirmNum())).collect(Collectors.joining(",")));
|
|
|
+ request.setBackExplanation(tellBackOrderVO.getBackInfo().stream().map(o -> StrUtil.toString(o.getNonDeliveryReason())).collect(Collectors.joining(",")));
|
|
|
// request.setBackExplanationType(tellBackOrderVO.getBackInfo().stream().map(o->StrUtil.toString(o.getBackExplanationType())).collect(Collectors.joining(",")));
|
|
|
- request.setDeliverCenterId(tellBackOrderVO.getBackInfo().stream().map(o->StrUtil.toString(o.getDeliverCenterId())).collect(Collectors.joining(",")));
|
|
|
+ request.setDeliverCenterId(tellBackOrderVO.getBackInfo().stream().map(o -> StrUtil.toString(o.getDeliverCenterId())).collect(Collectors.joining(",")));
|
|
|
return request;
|
|
|
}
|
|
|
|
|
@@ -167,23 +187,22 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
@Scheduled(cron = "0 0 0/1 * * ? ")
|
|
|
//每分钟执行一次
|
|
|
// @Scheduled(cron = "0 0/1 * * * ? ")
|
|
|
- void refreshToken(){
|
|
|
+ void refreshToken() {
|
|
|
JdInfoVo jdInfoVo = jdInfoService.getOne();
|
|
|
//如果过期时间减去当前时间小于90分钟,则要刷新token
|
|
|
- if(ObjectUtil.isNotNull(jdInfoVo.getExpireTime())){
|
|
|
+ if (ObjectUtil.isNotNull(jdInfoVo.getExpireTime())) {
|
|
|
long between = DateUtil.between(DateUtil.date(), jdInfoVo.getExpireTime(), DateUnit.MINUTE, false);
|
|
|
- if(between <= 0){
|
|
|
- if(jdInfoVo.getOnline()>0){
|
|
|
+ if (between <= 0) {
|
|
|
+ if (jdInfoVo.getOnline() > 0) {
|
|
|
jdInfoVo.setOnline(0);
|
|
|
jdInfoService.updateById(jdInfoVo);
|
|
|
}
|
|
|
- }else if(90 >= between){
|
|
|
+ } else if (90 >= between) {
|
|
|
refreshToken(jdInfoVo);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 刷新Token
|
|
|
*/
|
|
@@ -197,7 +216,7 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
return;
|
|
|
}
|
|
|
String path = RunParamConstant.JD_REFRESH_URL;
|
|
|
- path = String.format(path, JdParamConstant.appKey,JdParamConstant.appSecret, jdInfoVo.getRefreshToken());
|
|
|
+ path = String.format(path, JdParamConstant.appKey, JdParamConstant.appSecret, jdInfoVo.getRefreshToken());
|
|
|
try {
|
|
|
JSONObject responseJson = getJSON(new HttpGet(path));
|
|
|
dealJdTokenResponse(responseJson);
|
|
@@ -208,16 +227,17 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
|
|
|
/**
|
|
|
* 开始京东订单采集
|
|
|
+ *
|
|
|
* @author hj
|
|
|
* @date 2023/12/13 22:30
|
|
|
*/
|
|
|
@Async
|
|
|
- public void startJdOrder(){
|
|
|
+ public void startJdOrder() {
|
|
|
ThreadUtil.safeSleep(RunParamConstant.SLEEP_ONE_MINUTE);
|
|
|
JdClient jdClient = jdClientFactory.getJdClient();
|
|
|
- while (true){
|
|
|
+ while (true) {
|
|
|
JdInfoVo jdInfoVo = validJdInfo();
|
|
|
- if(ObjectUtil.isNull(jdInfoVo)){
|
|
|
+ if (ObjectUtil.isNull(jdInfoVo)) {
|
|
|
ThreadUtil.safeSleep(RunParamConstant.SLEEP_ONE_MINUTE);
|
|
|
continue;
|
|
|
}
|
|
@@ -227,20 +247,19 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
/**
|
|
|
* 开始京东退货单采集
|
|
|
+ *
|
|
|
* @author hj
|
|
|
* @date 2023/12/13 22:30
|
|
|
*/
|
|
|
@Async
|
|
|
- public void startJdBackOrder(){
|
|
|
+ public void startJdBackOrder() {
|
|
|
ThreadUtil.safeSleep(RunParamConstant.SLEEP_ONE_MINUTE);
|
|
|
JdClient jdClient = jdClientFactory.getJdClient();
|
|
|
- while (true){
|
|
|
+ while (true) {
|
|
|
JdInfoVo jdInfoVo = validJdInfo();
|
|
|
- if(ObjectUtil.isNull(jdInfoVo)){
|
|
|
+ if (ObjectUtil.isNull(jdInfoVo)) {
|
|
|
ThreadUtil.safeSleep(RunParamConstant.SLEEP_ONE_MINUTE);
|
|
|
continue;
|
|
|
}
|
|
@@ -250,19 +269,18 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
/**
|
|
|
* 刷新京东状态
|
|
|
+ *
|
|
|
* @param
|
|
|
*/
|
|
|
@Async
|
|
|
- public void refreshJdState(){
|
|
|
+ public void refreshJdState() {
|
|
|
ThreadUtil.safeSleep(RunParamConstant.SLEEP_ONE_MINUTE);
|
|
|
JdClient jdClient = jdClientFactory.getJdClient();
|
|
|
- while (true){
|
|
|
+ while (true) {
|
|
|
JdInfoVo jdInfoVo = validJdInfo();
|
|
|
- if(ObjectUtil.isNull(jdInfoVo)){
|
|
|
+ if (ObjectUtil.isNull(jdInfoVo)) {
|
|
|
ThreadUtil.safeSleep(RunParamConstant.SLEEP_FIVE_MINUTE);
|
|
|
continue;
|
|
|
}
|
|
@@ -272,7 +290,7 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private static final Map<String, String> componentDictTypeMap = new HashMap<String, String>(){{
|
|
|
+ private static final Map<String, String> componentDictTypeMap = new HashMap<String, String>() {{
|
|
|
put("confirmState", "回告状态");
|
|
|
put("orderAttribute", "订单属性");
|
|
|
put("Status", "删除状态");
|
|
@@ -280,12 +298,11 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
put("OrderState", "订单状态");
|
|
|
}};
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 初始化租户字典表
|
|
|
*/
|
|
|
@Async
|
|
|
- public void initTenantDict(){
|
|
|
+ public void initTenantDict() {
|
|
|
JdClient jdClient = jdClientFactory.getJdClient();
|
|
|
handleDeliveryCenter(jdClient);
|
|
|
handleComponent(jdClient);
|
|
@@ -308,7 +325,7 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
jdOrderDetailsService.lambdaQuery().isNull(JdOrderDetails::getProductId).list().forEach(jdOrderDetails -> {
|
|
|
Long wareId = jdOrderDetails.getWareId();
|
|
|
ProductInfo productInfo = productInfoMap.get(StrUtil.toString(wareId));
|
|
|
- if(ObjectUtil.isNotNull(productInfo)){
|
|
|
+ if (ObjectUtil.isNotNull(productInfo)) {
|
|
|
jdOrderDetails.setProductId(productInfo.getId());
|
|
|
jdOrderDetailsService.updateById(jdOrderDetails);
|
|
|
}
|
|
@@ -318,18 +335,18 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
}
|
|
|
|
|
|
//订单状态:审核不通过/供应商驳回/已完成
|
|
|
- private static final ArrayList<String> notIn = new ArrayList<String>(){{
|
|
|
+ private static final ArrayList<String> notIn = new ArrayList<String>() {{
|
|
|
add("7");
|
|
|
add("20");
|
|
|
add("3");
|
|
|
}};
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 处理刷新token数据
|
|
|
+ *
|
|
|
+ * @param jdClient
|
|
|
* @author hj
|
|
|
* @date 2023/12/21 9:01
|
|
|
- * @param jdClient
|
|
|
*/
|
|
|
public void handleRefreshDate(JdClient jdClient) {
|
|
|
DynamicDataSourceContextHolder.push(SourceConstant.VICTORIATOURIST);
|
|
@@ -363,7 +380,7 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
for (JdOrder jdOrder : jdOrderList) {
|
|
|
Long id = collect.get(jdOrder.getOrderId()).getId();
|
|
|
jdOrder.setId(id);
|
|
|
- if(JdParamConstant.JD_ORDER_STATE_FINISH.equals(jdOrder.getState())) {
|
|
|
+ if (JdParamConstant.JD_ORDER_STATE_FINISH.equals(jdOrder.getState())) {
|
|
|
List<JdOrderDetails> jdOrderDetailsList = new ArrayList<>();
|
|
|
//重新插入明细
|
|
|
boolean hasExFlag = dealOrderDetail(jdClient, jdOrder, jdOrderDetailsList);
|
|
@@ -392,7 +409,7 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
if (hasExFlag) {
|
|
|
jdOrder.setHasEx(RunParamConstant.EXCEPTION);
|
|
|
jdOrder.setHandleStatus(RunParamConstant.EXCEPTION_STATE_UNTREATED);
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
jdOrder.setHasEx(RunParamConstant.NO_EXCEPTION);
|
|
|
jdOrder.setHandleStatus(null);
|
|
|
}
|
|
@@ -402,9 +419,9 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
}
|
|
|
pageIndex++;
|
|
|
} while (pageIndex <= totalPage);
|
|
|
- }catch (Exception e){
|
|
|
+ } catch (Exception e) {
|
|
|
log.error("刷新京东状态失败", e);
|
|
|
- }finally {
|
|
|
+ } finally {
|
|
|
DynamicDataSourceContextHolder.poll();
|
|
|
SecurityUtils.clearTenantId();
|
|
|
}
|
|
@@ -430,27 +447,27 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
} else {
|
|
|
item.setProductId(list.get(0).getId());
|
|
|
}
|
|
|
- if(JdParamConstant.JD_ORDER_STATE_FINISH.equals(jdOrder.getState())){
|
|
|
+ if (JdParamConstant.JD_ORDER_STATE_FINISH.equals(jdOrder.getState())) {
|
|
|
//如果京东采购单状态 = 已完成 & 明细数据中存在 实收 != 回告 & 分流类型 == 仓库发货(10),则给京东采购单打上【异常】标记
|
|
|
//如果实收>回告,则:给对应的明细打上【多货】标记;如果实收<回告,则:给对应的明细打上【少货】标记
|
|
|
- if(
|
|
|
+ if (
|
|
|
ObjectUtil.isNotNull(item.getActualNum())
|
|
|
- && ObjectUtil.isNotNull(item.getConfirmNum())
|
|
|
- && ObjectUtil.isNotEmpty(jdOrder.getDiversionType())
|
|
|
- && item.getActualNum().compareTo(item.getConfirmNum()) != 0
|
|
|
- && jdOrder.getDiversionType()==10
|
|
|
- ){
|
|
|
+ && ObjectUtil.isNotNull(item.getConfirmNum())
|
|
|
+ && ObjectUtil.isNotEmpty(jdOrder.getDiversionType())
|
|
|
+ && item.getActualNum().compareTo(item.getConfirmNum()) != 0
|
|
|
+ && jdOrder.getDiversionType() == 10
|
|
|
+ ) {
|
|
|
String exDesc;
|
|
|
- if (item.getActualNum().compareTo(item.getConfirmNum()) > 0){
|
|
|
+ if (item.getActualNum().compareTo(item.getConfirmNum()) > 0) {
|
|
|
exDesc = RunParamConstant.EXCESS;
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
exDesc = RunParamConstant.SHORTAGE;
|
|
|
}
|
|
|
item.setHasEx(RunParamConstant.EXCEPTION);
|
|
|
item.setExDesc(exDesc);
|
|
|
item.setHandleStatus(RunParamConstant.EXCEPTION_STATE_UNTREATED);
|
|
|
hasExFlag.set(true);
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
item.setHasEx(null);
|
|
|
item.setExDesc(null);
|
|
|
item.setHandleStatus(null);
|
|
@@ -463,18 +480,19 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
|
|
|
/**
|
|
|
* 处理回告状态、订单属性、删除状态、图书回告不满足原因、订单状态
|
|
|
+ *
|
|
|
+ * @param jdClient
|
|
|
* @author hj
|
|
|
* @date 2023/12/13 21:56
|
|
|
- * @param jdClient
|
|
|
*/
|
|
|
private void handleComponent(JdClient jdClient) {
|
|
|
- componentDictTypeMap.forEach((k,v)->{
|
|
|
- VcGetcomponentlistRequest request=new VcGetcomponentlistRequest();
|
|
|
+ componentDictTypeMap.forEach((k, v) -> {
|
|
|
+ VcGetcomponentlistRequest request = new VcGetcomponentlistRequest();
|
|
|
DynamicDataSourceContextHolder.push(SourceConstant.BASE);
|
|
|
SecurityUtils.setTenantId(RunParamConstant.tenantId);
|
|
|
try {
|
|
|
request.setType(k);
|
|
|
- VcGetcomponentlistResponse response=jdClient.execute(request);
|
|
|
+ VcGetcomponentlistResponse response = jdClient.execute(request);
|
|
|
|
|
|
DictTenantType dictTenantType = handleDictType(k, v);
|
|
|
|
|
@@ -483,7 +501,7 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
for (Component component : arg89) {
|
|
|
commonDictDataList.add(new CommonDictData(component.getKey(), component.getName()));
|
|
|
}
|
|
|
- if ("orderAttribute".equals(k)){
|
|
|
+ if ("orderAttribute".equals(k)) {
|
|
|
System.out.println(123);
|
|
|
}
|
|
|
handleDictData(commonDictDataList, dictTenantType);
|
|
@@ -499,13 +517,14 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
|
|
|
/**
|
|
|
* 处理配送中心字典转换
|
|
|
+ *
|
|
|
+ * @param jdClient
|
|
|
* @author hj
|
|
|
* @date 2023/12/13 21:55
|
|
|
- * @param jdClient
|
|
|
*/
|
|
|
- public void handleDeliveryCenter(JdClient jdClient){
|
|
|
+ public void handleDeliveryCenter(JdClient jdClient) {
|
|
|
//获取京东仓库,并存入字典表
|
|
|
- VcGetwaredeliverdistinctlistRequest request=new VcGetwaredeliverdistinctlistRequest();
|
|
|
+ VcGetwaredeliverdistinctlistRequest request = new VcGetwaredeliverdistinctlistRequest();
|
|
|
DynamicDataSourceContextHolder.push(SourceConstant.BASE);
|
|
|
SecurityUtils.setTenantId(RunParamConstant.tenantId);
|
|
|
try {
|
|
@@ -520,14 +539,14 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
}
|
|
|
handleDictData(commonDictDataList, dictTenantType);
|
|
|
} catch (Exception e) {
|
|
|
- log.error("转换配送中心到字典出现异常",e);
|
|
|
+ log.error("转换配送中心到字典出现异常", e);
|
|
|
}
|
|
|
SecurityUtils.clearTenantId();
|
|
|
DynamicDataSourceContextHolder.poll();
|
|
|
}
|
|
|
|
|
|
|
|
|
- private static final Map<String, String> returnStatesMap = new HashMap<String, String>(){{
|
|
|
+ private static final Map<String, String> returnStatesMap = new HashMap<String, String>() {{
|
|
|
put("1", "初始退货单");
|
|
|
put("2", "等待经理审核");
|
|
|
put("3", "等待总监审核");
|
|
@@ -546,6 +565,7 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
|
|
|
/**
|
|
|
* 处理jd退货状态字典
|
|
|
+ *
|
|
|
* @author hj
|
|
|
* @date 2023/12/20 22:27
|
|
|
*/
|
|
@@ -555,19 +575,20 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
try {
|
|
|
DictTenantType dictTenantType = handleDictType(InitDictConstant.RETURN_STATES, InitDictConstant.RETURN_STATES_LABEL);
|
|
|
List<CommonDictData> commonDictDataList = new ArrayList<>();
|
|
|
- returnStatesMap.forEach((k,v)->{
|
|
|
+ returnStatesMap.forEach((k, v) -> {
|
|
|
commonDictDataList.add(new CommonDictData(k, v));
|
|
|
});
|
|
|
handleDictData(commonDictDataList, dictTenantType);
|
|
|
} catch (Exception e) {
|
|
|
- log.error("处理jd退货状态字典出现异常",e);
|
|
|
+ log.error("处理jd退货状态字典出现异常", e);
|
|
|
}
|
|
|
SecurityUtils.clearTenantId();
|
|
|
DynamicDataSourceContextHolder.poll();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 处理字典表
|
|
|
+ *
|
|
|
* @author hj
|
|
|
* @date 2023/12/21 9:01
|
|
|
*/
|
|
@@ -577,17 +598,17 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
List<DictTenantData> list = dictTenantDataService.lambdaQuery().eq(DictTenantData::getDictCode, dictTenantType.getCode()).orderByAsc(DictTenantData::getSort).list();
|
|
|
Map<String, DictTenantData> dictDataMap = new HashMap<>();
|
|
|
int sort = 10;
|
|
|
- if(CollectionUtil.isNotEmpty(list)) {
|
|
|
- dictDataMap = list.stream().collect(Collectors.toMap(DictTenantData::getDictKey, o -> o, (v1, v2) ->v2));
|
|
|
- sort = list.get(list.size()-1).getSort() + 10;
|
|
|
+ if (CollectionUtil.isNotEmpty(list)) {
|
|
|
+ dictDataMap = list.stream().collect(Collectors.toMap(DictTenantData::getDictKey, o -> o, (v1, v2) -> v2));
|
|
|
+ sort = list.get(list.size() - 1).getSort() + 10;
|
|
|
}
|
|
|
List<DictTenantData> dataList = new ArrayList<>();
|
|
|
for (CommonDictData commonDictData : commonDictDataList) {
|
|
|
DictTenantDataDto dictTenantDataDto = new DictTenantDataDto();
|
|
|
DictTenantData dictTenantData = dictDataMap.get(commonDictData.getKey());
|
|
|
- if(ObjectUtil.isNotNull(dictTenantData)){
|
|
|
+ if (ObjectUtil.isNotNull(dictTenantData)) {
|
|
|
BeanUtil.copyProperties(dictTenantData, dictTenantDataDto);
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
dictTenantDataDto.setDictCode(dictTenantType.getCode());
|
|
|
dictTenantDataDto.setDictKey(StrUtil.toString(commonDictData.getKey()));
|
|
|
dictTenantDataDto.setTenantId(RunParamConstant.tenantId);
|
|
@@ -602,18 +623,19 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
|
|
|
/**
|
|
|
* 处理字典类型表
|
|
|
- * @author hj
|
|
|
- * @date 2023/12/13 22:03
|
|
|
+ *
|
|
|
* @param code
|
|
|
* @param name
|
|
|
+ * @author hj
|
|
|
+ * @date 2023/12/13 22:03
|
|
|
*/
|
|
|
- private DictTenantType handleDictType(String code, String name){
|
|
|
+ private DictTenantType handleDictType(String code, String name) {
|
|
|
DictTenantType dictTenantType = new DictTenantType();
|
|
|
List<DictTenantType> deliveryCenters = dictTenantTypeService.list(q -> q.eq(DictTenantType::getTenantId, RunParamConstant.tenantId).eq(DictTenantType::getCode, code));
|
|
|
//处理字典类型表
|
|
|
- if(CollectionUtil.isNotEmpty(deliveryCenters)){
|
|
|
+ if (CollectionUtil.isNotEmpty(deliveryCenters)) {
|
|
|
dictTenantType = deliveryCenters.get(0);
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
dictTenantType.setCode(code);
|
|
|
dictTenantType.setName(name);
|
|
|
dictTenantType.setTenantId(RunParamConstant.tenantId);
|
|
@@ -628,7 +650,7 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
/**
|
|
|
* 获取京东订单
|
|
|
*/
|
|
|
- private void getJdOrderList(JdClient client, JdInfoVo jdInfoVo){
|
|
|
+ private void getJdOrderList(JdClient client, JdInfoVo jdInfoVo) {
|
|
|
DynamicDataSourceContextHolder.push(SourceConstant.VICTORIATOURIST);
|
|
|
SecurityUtils.setTenantId(RunParamConstant.tenantId);
|
|
|
try {
|
|
@@ -636,6 +658,7 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
int totalPage = 1;
|
|
|
int pageSize = 50;
|
|
|
do {
|
|
|
+
|
|
|
//获取开始同步的时间
|
|
|
Date startTime = jdInfoVo.getInitQueryDate();
|
|
|
Date endTime = new Date();
|
|
@@ -656,7 +679,7 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
|
|
|
//处理数据(过滤已存在的数据)
|
|
|
List<Long> jdOrderIds = purchaseOrderList.stream().map(PurchaseOrderDto::getOrderId).collect(Collectors.toList());
|
|
|
- if(CollectionUtil.isNotEmpty(jdOrderIds)){
|
|
|
+ if (CollectionUtil.isNotEmpty(jdOrderIds)) {
|
|
|
//获取已同步的京东订单id
|
|
|
List<Long> existOrderIds = jdOrderService.lambdaQuery().select(JdOrder::getOrderId).in(JdOrder::getOrderId, jdOrderIds).list().stream().map(JdOrder::getOrderId).collect(Collectors.toList());
|
|
|
//过滤出未同步的数据
|
|
@@ -665,35 +688,46 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
List<JdOrder> jdOrderList = BeanUtil.copyToList(purchaseOrderListFilter, JdOrder.class);
|
|
|
//赋值租户id
|
|
|
jdOrderList.forEach(item -> item.setTenantId(RunParamConstant.tenantId));
|
|
|
- //将数据存储到库
|
|
|
- jdOrderService.saveBatch(jdOrderList);
|
|
|
- //获取明细
|
|
|
- List<JdOrderDetails> jdOrderDetailsList = new ArrayList<>();
|
|
|
- for (JdOrder jdOrder : jdOrderList) {
|
|
|
- boolean hasExFlag = dealOrderDetail(client, jdOrder, jdOrderDetailsList);
|
|
|
- if (hasExFlag){
|
|
|
- jdOrder.setHasEx(RunParamConstant.EXCEPTION);
|
|
|
- jdOrder.setHandleStatus(RunParamConstant.EXCEPTION_STATE_UNTREATED);
|
|
|
- jdOrderService.updateById(jdOrder);
|
|
|
+
|
|
|
+ TransactionUtil.execute(() -> {
|
|
|
+
|
|
|
+ //将数据存储到库
|
|
|
+ jdOrderService.saveBatch(jdOrderList);
|
|
|
+
|
|
|
+ //获取明细
|
|
|
+ List<JdOrderDetails> jdOrderDetailsList = new ArrayList<>();
|
|
|
+
|
|
|
+ for (JdOrder jdOrder : jdOrderList) {
|
|
|
+ boolean hasExFlag;
|
|
|
+ try {
|
|
|
+ hasExFlag = dealOrderDetail(client, jdOrder, jdOrderDetailsList);
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (hasExFlag) {
|
|
|
+ jdOrder.setHasEx(RunParamConstant.EXCEPTION);
|
|
|
+ jdOrder.setHandleStatus(RunParamConstant.EXCEPTION_STATE_UNTREATED);
|
|
|
+ jdOrderService.updateById(jdOrder);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- // //赋值租户id
|
|
|
- // jdOrderList.forEach(item -> item.setTenantId(tenantId));
|
|
|
- DynamicDataSourceContextHolder.push(SourceConstant.VICTORIATOURIST);
|
|
|
- jdOrderDetailsService.saveOrUpdateBatch(jdOrderDetailsList);
|
|
|
+
|
|
|
+ DynamicDataSourceContextHolder.push(SourceConstant.VICTORIATOURIST);
|
|
|
+ jdOrderDetailsService.saveOrUpdateBatch(jdOrderDetailsList);
|
|
|
+ });
|
|
|
+
|
|
|
}
|
|
|
pageIndex++;
|
|
|
} while (pageIndex <= totalPage);
|
|
|
- } catch (Exception e){
|
|
|
+ } catch (Exception e) {
|
|
|
log.error("获取京东订单出错:" + e.getMessage(), e);
|
|
|
- }finally {
|
|
|
+ } finally {
|
|
|
SecurityUtils.clearTenantId();
|
|
|
DynamicDataSourceContextHolder.poll();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 获取京东退货订单
|
|
|
*/
|
|
@@ -723,7 +757,7 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
|
|
|
//过滤出不在数据库里的新数据
|
|
|
List<Long> returnIds = roDtoList.stream().map(RoDto::getReturnId).collect(Collectors.toList());
|
|
|
- if(CollectionUtil.isNotEmpty(returnIds)){
|
|
|
+ if (CollectionUtil.isNotEmpty(returnIds)) {
|
|
|
List<Long> existReturnIds = jdBackService.lambdaQuery().select(JdBack::getReturnId).in(JdBack::getReturnId, returnIds).list().stream().map(JdBack::getReturnId).collect(Collectors.toList());
|
|
|
roDtoList = roDtoList.stream().filter(item -> !existReturnIds.contains(item.getReturnId())).collect(Collectors.toList());
|
|
|
//转成我们自己的实体类
|
|
@@ -758,9 +792,9 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
}
|
|
|
pageIndex++;
|
|
|
} while (pageIndex <= totalPage);
|
|
|
- }catch (Exception e){
|
|
|
+ } catch (Exception e) {
|
|
|
log.error("获取京东退货订单出错:" + e.getMessage(), e);
|
|
|
- }finally {
|
|
|
+ } finally {
|
|
|
SecurityUtils.clearTenantId();
|
|
|
DynamicDataSourceContextHolder.poll();
|
|
|
}
|
|
@@ -768,13 +802,12 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
- public void startJdSalesReturns(){
|
|
|
+ public void startJdSalesReturns() {
|
|
|
JdClient jdClient = jdClientFactory.getJdClient();
|
|
|
- while (true){
|
|
|
+ while (true) {
|
|
|
JdInfoVo jdInfoVo = jdInfoService.getOne();
|
|
|
boolean online = jdInfoVo.getOnline() > 0 ? true : false;
|
|
|
- if(!online){
|
|
|
+ if (!online) {
|
|
|
log.info("京东已经下线");
|
|
|
ThreadUtil.safeSleep(RunParamConstant.SLEEP_TEN_SECOND);
|
|
|
continue;
|
|
@@ -787,7 +820,7 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
}
|
|
|
try {
|
|
|
getJdBackOrder(jdClient, jdInfoVo);
|
|
|
- }catch (Exception e){
|
|
|
+ } catch (Exception e) {
|
|
|
log.error("获取京东订单列表出错:" + e.getMessage(), e);
|
|
|
}
|
|
|
ThreadUtil.safeSleep(30000);
|
|
@@ -874,18 +907,19 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
|
|
|
/**
|
|
|
* 将jd返回的json对象转换成jdInfoVo
|
|
|
- * @author hj
|
|
|
- * @date 2023/12/10 22:03
|
|
|
+ *
|
|
|
* @param responseJson
|
|
|
* @param jdInfoVo
|
|
|
+ * @author hj
|
|
|
+ * @date 2023/12/10 22:03
|
|
|
*/
|
|
|
private void convertJdInfoVO(JSONObject responseJson, JdInfoVo jdInfoVo) {
|
|
|
jdInfoVo.setAccessToken(responseJson.getString(RunParamConstant.ACCESS_TOKEN));
|
|
|
jdInfoVo.setRefreshToken(responseJson.getString(RunParamConstant.REFRESH_TOKEN));
|
|
|
int expires_in = responseJson.getIntValue("expires_in", 0);
|
|
|
int offsetHour = 24;
|
|
|
- if(expires_in>0){
|
|
|
- offsetHour = expires_in/60/60;
|
|
|
+ if (expires_in > 0) {
|
|
|
+ offsetHour = expires_in / 60 / 60;
|
|
|
}
|
|
|
jdInfoVo.setExpireTime(DateUtil.offsetHour(new Date(), offsetHour));
|
|
|
jdInfoVo.setLastRefreshTime(DateUtil.date());
|
|
@@ -894,9 +928,10 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
|
|
|
/**
|
|
|
* 处理jd返回对象
|
|
|
+ *
|
|
|
+ * @param responseJson
|
|
|
* @author hj
|
|
|
* @date 2023/12/10 22:07
|
|
|
- * @param responseJson
|
|
|
*/
|
|
|
private void dealJdTokenResponse(JSONObject responseJson) {
|
|
|
if (ObjectUtil.isNotEmpty(responseJson.getString(RunParamConstant.ACCESS_TOKEN)) && ObjectUtil.isNotEmpty(responseJson.getString(RunParamConstant.REFRESH_TOKEN))) {
|
|
@@ -911,10 +946,6 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
/**
|
|
|
* 获取京东订单信息分页
|
|
|
*/
|
|
@@ -924,7 +955,7 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
request.setCreatedDateEnd(endTime);
|
|
|
request.setPageIndex(pageIndex);
|
|
|
request.setPageSize(pageSize);
|
|
|
- if(CollectionUtil.isNotEmpty(orderIds)){
|
|
|
+ if (CollectionUtil.isNotEmpty(orderIds)) {
|
|
|
String orderIdsStr = orderIds.stream().map(Object::toString).collect(Collectors.joining(","));
|
|
|
request.setOrderIds(orderIdsStr);
|
|
|
}
|
|
@@ -962,19 +993,19 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
}*/
|
|
|
|
|
|
|
|
|
- void validSuccess(AbstractResponse response, String method){
|
|
|
+ void validSuccess(AbstractResponse response, String method) {
|
|
|
String code = response.getCode();
|
|
|
- if(!"0".equals(code)){
|
|
|
- log.error("获取{}失败:{}", method ,response.getZhDesc());
|
|
|
- throw new RuntimeException("获取"+ method +"失败:" + response.getZhDesc());
|
|
|
+ if (!"0".equals(code)) {
|
|
|
+ log.error("获取{}失败:{}", method, response.getZhDesc());
|
|
|
+ throw new RuntimeException("获取" + method + "失败:" + response.getZhDesc());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
- private JdInfoVo validJdInfo(){
|
|
|
+ private JdInfoVo validJdInfo() {
|
|
|
JdInfoVo jdInfoVo = jdInfoService.getOne();
|
|
|
boolean online = jdInfoVo.getOnline() > 0 ? true : false;
|
|
|
- if(!online){
|
|
|
+ if (!online) {
|
|
|
log.info("京东已经下线");
|
|
|
return null;
|
|
|
}
|