|
|
@@ -1,5 +1,6 @@
|
|
|
package com.fs.erp.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.convert.Convert;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.http.HttpUtil;
|
|
|
@@ -7,6 +8,7 @@ import cn.hutool.json.JSONObject;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.fs.common.core.redis.RedisCache;
|
|
|
import com.fs.common.event.TemplateBean;
|
|
|
import com.fs.common.event.TemplateEvent;
|
|
|
@@ -15,6 +17,7 @@ import com.fs.common.utils.DateUtils;
|
|
|
import com.fs.company.service.ICompanyService;
|
|
|
import com.fs.erp.domain.ErpDeliverys;
|
|
|
import com.fs.erp.domain.ErpOrder;
|
|
|
+import com.fs.erp.domain.ErpOrderItem;
|
|
|
import com.fs.erp.domain.ErpRefundOrder;
|
|
|
import com.fs.erp.dto.*;
|
|
|
import com.fs.erp.dto.df.*;
|
|
|
@@ -30,6 +33,7 @@ import com.fs.his.enums.FsStoreOrderStatusEnum;
|
|
|
import com.fs.his.mapper.*;
|
|
|
import com.fs.his.param.FsStoreOrderSalesParam;
|
|
|
import com.fs.his.service.IFsExpressService;
|
|
|
+import com.fs.his.service.IFsIntegralOrderService;
|
|
|
import com.fs.his.service.IFsStoreOrderLogsService;
|
|
|
import com.fs.his.service.IFsStoreOrderService;
|
|
|
import com.fs.his.utils.ConfigUtil;
|
|
|
@@ -69,6 +73,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
|
|
|
@@ -147,10 +152,14 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
private IFastGptRoleService fastGptRoleService;
|
|
|
@Autowired
|
|
|
private WxWorkService wxWorkService;
|
|
|
+ @Autowired
|
|
|
+ private FsIntegralOrderMapper fsIntegralOrderMapper;
|
|
|
|
|
|
|
|
|
@Override
|
|
|
public ErpOrderResponse addOrder(ErpOrder order) {
|
|
|
+ if (order.getIsIntegralOrder())
|
|
|
+ return getErpIntegralOrderResponse(order);
|
|
|
return getErpOrderResponse(order);
|
|
|
}
|
|
|
|
|
|
@@ -335,7 +344,8 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
return erpDeliverysResponse;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ @Autowired
|
|
|
+ private FsIntegralOrderDfMapper integralOrderDfMapper;
|
|
|
/**
|
|
|
* 目前仅查询下单用户
|
|
|
*
|
|
|
@@ -347,20 +357,40 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
ErpOrderQueryResponse response = new ErpOrderQueryResponse();
|
|
|
String orderNumber = requset.getCode();
|
|
|
if (StrUtil.isNotBlank(orderNumber)) {
|
|
|
- FsStoreOrder order = fsStoreOrderMapper.selectFsStoreOrderByOrderCode(orderNumber);
|
|
|
- if (order != null) {
|
|
|
- //获取下单账户
|
|
|
- FsStoreOrderDf df = fsStoreOrderDfMapper.selectFsStoreOrderDfByOrderId(order.getOrderId());
|
|
|
- if (df == null) {
|
|
|
- return null;
|
|
|
+ //金牛积分商品的逻辑
|
|
|
+ if (OrderContextHolder.hasIntegralOrder()) {
|
|
|
+ FsIntegralOrder order = fsIntegralOrderMapper.selectOne(Wrappers.<FsIntegralOrder>lambdaQuery().eq(FsIntegralOrder::getOrderCode, orderNumber));
|
|
|
+ if (order != null) {
|
|
|
+ //获取下单账户
|
|
|
+ FsIntegralOrderDf df = integralOrderDfMapper.selectOne(Wrappers.<FsIntegralOrderDf>lambdaQuery().eq(FsIntegralOrderDf::getOrderId,order.getOrderId()));
|
|
|
+ if (df == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ Long dfAccountId = getSFAccountIndex(order.getOrderId());
|
|
|
+ if (dfAccountId != null) {
|
|
|
+ Map<String, Object> orderResultQueryParam = new HashMap<>();
|
|
|
+ orderResultQueryParam.put("orderNumber", orderNumber);
|
|
|
+ orderResultQueryParam.put("exInterfaceType", df.getStatus());
|
|
|
+ getIntegralOrderResult(orderResultQueryParam, dfAccountId);
|
|
|
+ return response;
|
|
|
+ }
|
|
|
}
|
|
|
- Long dfAccountId = getSFAccountIndex(order.getOrderId());
|
|
|
- if (dfAccountId != null) {
|
|
|
- Map<String, Object> orderResultQueryParam = new HashMap<>();
|
|
|
- orderResultQueryParam.put("orderNumber", orderNumber);
|
|
|
- orderResultQueryParam.put("exInterfaceType", df.getStatus());
|
|
|
- getOrderResult(orderResultQueryParam, dfAccountId);
|
|
|
- return response;
|
|
|
+ }else {
|
|
|
+ FsStoreOrder order = fsStoreOrderMapper.selectFsStoreOrderByOrderCode(orderNumber);
|
|
|
+ if (order != null) {
|
|
|
+ //获取下单账户
|
|
|
+ FsStoreOrderDf df = fsStoreOrderDfMapper.selectFsStoreOrderDfByOrderId(order.getOrderId());
|
|
|
+ if (df == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ Long dfAccountId = getSFAccountIndex(order.getOrderId());
|
|
|
+ if (dfAccountId != null) {
|
|
|
+ Map<String, Object> orderResultQueryParam = new HashMap<>();
|
|
|
+ orderResultQueryParam.put("orderNumber", orderNumber);
|
|
|
+ orderResultQueryParam.put("exInterfaceType", df.getStatus());
|
|
|
+ getOrderResult(orderResultQueryParam, dfAccountId);
|
|
|
+ return response;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
response.setErrorDesc("该订单不存在/顺丰账户不存在");
|
|
|
@@ -430,7 +460,11 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
if ("运单不存在".equals(dfApiResponse.getMsg())) {
|
|
|
|
|
|
//查看原来物流状态
|
|
|
- cancelOrder(order);
|
|
|
+ if (OrderContextHolder.hasIntegralOrder()) {
|
|
|
+ cancelOrder(OrderContextHolder.getIntegralOrder());
|
|
|
+ }else {
|
|
|
+ cancelOrder(order);
|
|
|
+ }
|
|
|
log.info("代服管家 getOrderDeliveryStatus: {}", response);
|
|
|
return;
|
|
|
}
|
|
|
@@ -489,18 +523,39 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
Map<String, Object> config = (Map<String, Object>) JSON.parse(sysConfig.getConfigValue());
|
|
|
Object isUpdateOrder = config.get("isUpdateOrder");
|
|
|
if (isUpdateOrder == null || "1".equals(isUpdateOrder.toString())) {
|
|
|
+ if (OrderContextHolder.hasIntegralOrder()) {
|
|
|
+ FsIntegralOrder integralOrder = OrderContextHolder.getIntegralOrder();
|
|
|
+ //积分订单修改状态已完成
|
|
|
+ integralOrder.setStatus(3);//设置已完成状态
|
|
|
+ int i = fsIntegralOrderMapper.updateById(integralOrder);
|
|
|
+ log.info("积分订单编号{}完成订单,更新条数{}",integralOrder.getOrderCode(),i);
|
|
|
+ }else {
|
|
|
+// fsStoreOrderService.getGoods(order.getOrderId(), "物流自动");
|
|
|
fsStoreOrderService.getGoods(orderId, "物流自动");
|
|
|
+ }
|
|
|
}
|
|
|
break;
|
|
|
case 10:
|
|
|
//取消订单
|
|
|
String mailNumber = temp.getMailNumber();
|
|
|
- List<FsStoreOrder> fsStoreOrders = fsStoreOrderMapper.selectFsStoreOrderListByDeliverySn(mailNumber);
|
|
|
- if (fsStoreOrders != null && !fsStoreOrders.isEmpty()) {
|
|
|
- fsStoreOrders.forEach(tempOrder -> {
|
|
|
- cancelOrder(order);
|
|
|
- log.info("代服管家 订单取消成功: {}", response);
|
|
|
- });
|
|
|
+ if (OrderContextHolder.hasIntegralOrder()) {
|
|
|
+ List<FsIntegralOrder> orders = fsIntegralOrderMapper.selectList(Wrappers.<FsIntegralOrder>lambdaQuery().eq(FsIntegralOrder::getDeliverySn, mailNumber));
|
|
|
+ if (orders != null && !orders.isEmpty()) {
|
|
|
+ orders.forEach(tempOrder->{
|
|
|
+ log.info("订单状态查询取消订单{}",tempOrder.getOrderCode());
|
|
|
+ cancelOrder(tempOrder);
|
|
|
+ log.info("代服管家 订单取消成功: {}", response);
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ List<FsStoreOrder> fsStoreOrders = fsStoreOrderMapper.selectFsStoreOrderListByDeliverySn(mailNumber);
|
|
|
+ if (fsStoreOrders != null && !fsStoreOrders.isEmpty()) {
|
|
|
+ fsStoreOrders.forEach(tempOrder -> {
|
|
|
+ cancelOrder(order);
|
|
|
+ log.info("代服管家 订单取消成功: {}", response);
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
@@ -514,9 +569,18 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
}
|
|
|
|
|
|
|
|
|
- fsStoreOrderMap.setDeliveryStatus(deliveryStatus); //物流状态:0-暂无轨迹信息 1-已揽收 2-在途中,3-签收,4-问题件
|
|
|
- fsStoreOrderMap.setDeliveryType(stateEx);
|
|
|
- fsStoreOrderMapper.updateFsStoreOrder(fsStoreOrderMap);
|
|
|
+ if (OrderContextHolder.hasIntegralOrder()){
|
|
|
+ //加积分订单的字段,然后在这里更新它
|
|
|
+ FsIntegralOrder integralOrder = OrderContextHolder.getIntegralOrder();
|
|
|
+ integralOrder.setDeliveryStatus(deliveryStatus);
|
|
|
+ integralOrder.setDeliveryType(stateEx);
|
|
|
+ int i = fsIntegralOrderMapper.updateById(integralOrder);
|
|
|
+ log.info("更新订单{}物流状态为{}and{}更新条数{}",integralOrder.getOrderCode(),deliveryStatus,stateEx,i);
|
|
|
+ }else {
|
|
|
+ fsStoreOrderMap.setDeliveryStatus(deliveryStatus); //物流状态:0-暂无轨迹信息 1-已揽收 2-在途中,3-签收,4-问题件
|
|
|
+ fsStoreOrderMap.setDeliveryType(stateEx);
|
|
|
+ fsStoreOrderMapper.updateFsStoreOrder(fsStoreOrderMap);
|
|
|
+ }
|
|
|
}
|
|
|
} catch (IOException e) {
|
|
|
e.printStackTrace();
|
|
|
@@ -704,7 +768,6 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
}
|
|
|
|
|
|
private void cancelOrder(FsStoreOrder order) {
|
|
|
- Long orderId = order.getOrderId();
|
|
|
Integer deliveryStatus = order.getDeliveryStatus();
|
|
|
if (deliveryStatus == null || deliveryStatus == 0) {
|
|
|
//没有物流信息
|
|
|
@@ -713,26 +776,55 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
order.setExtendOrderId("");
|
|
|
order.setDeliverySn("");
|
|
|
fsStoreOrderMapper.updateFsStoreOrder(order);
|
|
|
- fsStoreOrderLogsService.create(orderId, FsStoreOrderLogEnum.UPDATE_ORDER_DF.getValue(),
|
|
|
+ fsStoreOrderLogsService.create(order.getOrderId(), FsStoreOrderLogEnum.UPDATE_ORDER_DF.getValue(),
|
|
|
"运单不存在," + FsStoreOrderLogEnum.UPDATE_ORDER_DF.getDesc());
|
|
|
} else {
|
|
|
//有物流信息->售后处理
|
|
|
//取消订单
|
|
|
FsStoreOrderSalesParam afterSalesParam = new FsStoreOrderSalesParam();
|
|
|
- afterSalesParam.setOrderId(orderId);
|
|
|
+ afterSalesParam.setOrderId(order.getOrderId());
|
|
|
afterSalesParam.setReasons("代服管家取消订单");
|
|
|
afterSalesParam.setOperator("代服管家");
|
|
|
fsStoreOrderService.afterSales(afterSalesParam);
|
|
|
- fsStoreOrderLogsService.create(orderId, FsStoreOrderLogEnum.REFUND_ORDER_DF.getValue(),
|
|
|
+ fsStoreOrderLogsService.create(order.getOrderId(), FsStoreOrderLogEnum.REFUND_ORDER_DF.getValue(),
|
|
|
"运单不存在," + FsStoreOrderLogEnum.REFUND_ORDER_DF.getDesc());
|
|
|
}
|
|
|
FsStoreOrderDf df = new FsStoreOrderDf();
|
|
|
- df.setOrderId(orderId);
|
|
|
+ df.setOrderId(order.getOrderId());
|
|
|
df.setStatus(2);
|
|
|
df.setUpdateTime(new Date());
|
|
|
fsStoreOrderDfMapper.updateFsStoreOrderDf(df);
|
|
|
}
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IFsIntegralOrderService integralOrderService;
|
|
|
+ /**
|
|
|
+ * 积分订单商品取消订单逻辑
|
|
|
+ * */
|
|
|
+ private void cancelOrder(FsIntegralOrder order) {
|
|
|
+ //进入这个方法代表查询不到物流信息
|
|
|
+ Integer deliveryStatus = order.getDeliveryStatus();
|
|
|
+ //这个if进入代表调用代服创建运单失败,修改推送标识,由定时任务重新推送erp
|
|
|
+ if (deliveryStatus == null || deliveryStatus == 0) {
|
|
|
+ log.info("推送失败积分订单id:{}",order.getOrderId());
|
|
|
+ //没有物流信息
|
|
|
+ //修改订单状态 方便后续重新发货,让机器重新去
|
|
|
+ order.setStatus(1);//设置待发货状态
|
|
|
+ order.setDeliverySn("");
|
|
|
+ integralOrderMapper.updateById(order);
|
|
|
+ } else {
|
|
|
+ log.info("积分订单物流被取消,退款积分订单{}",order.getOrderCode());
|
|
|
+ //以前查询到过物流信息,现在查不到,物流被人为取消
|
|
|
+ integralOrderService.mandatoryRefunds(order.getOrderCode());
|
|
|
+ }
|
|
|
+ log.info("取消订单代服记录更新id{}",order.getOrderCode());
|
|
|
+ FsIntegralOrderDf df = new FsIntegralOrderDf();
|
|
|
+ df.setOrderId(order.getOrderId());
|
|
|
+ df.setStatus(2);
|
|
|
+ df.setIsPush(0);
|
|
|
+ integralOrderDfMapper.updateById(df);
|
|
|
+ }
|
|
|
+
|
|
|
private void cancelOrderScrm(FsStoreOrderScrm order) {
|
|
|
Integer deliveryStatus = order.getDeliveryStatus();
|
|
|
if (deliveryStatus == null || deliveryStatus == 0) {
|
|
|
@@ -866,6 +958,53 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
return new ErpOrderResponse();
|
|
|
}
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private FsIntegralOrderMapper integralOrderMapper;
|
|
|
+
|
|
|
+ private ErpOrderResponse getErpIntegralOrderResponse(ErpOrder order){
|
|
|
+ FsIntegralOrder fsIntegralOrder = integralOrderMapper.selectOne(Wrappers.<FsIntegralOrder>lambdaQuery().eq(FsIntegralOrder::getOrderCode, order.getPlatform_code()));
|
|
|
+ if (fsIntegralOrder == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ Long dfAccountId = getSFAccountIndex(fsIntegralOrder.getOrderId());
|
|
|
+ //1.获取请求参数
|
|
|
+ ExternalOrderRequestVo vo = getCreateOrderRequestParam(order, fsIntegralOrder, dfAccountId);
|
|
|
+ if (vo == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ Map<String, Object> map = JSON.parseObject(JSON.toJSONString(vo), Map.class);
|
|
|
+ //2.请求
|
|
|
+ log.info("开始推送订单,参数: {}", JSON.toJSONString(map));
|
|
|
+ String response = client.execute(RequestUrlEnum.CREAT_ORDER, map, dfAccountId);
|
|
|
+ DFApiResponse dfApiResponse = JSON.parseObject(response, DFApiResponse.class);
|
|
|
+ //3.处理请求结果
|
|
|
+ if (dfApiResponse != null && "ok".equals(dfApiResponse.getCode())) {
|
|
|
+ //存储订单推送用的哪个账户
|
|
|
+ FsIntegralOrderDf df = addDfOrder(fsIntegralOrder, dfAccountId);
|
|
|
+ log.info("订单推送成功: {}", response);
|
|
|
+ //可以回调 也可以查询订单
|
|
|
+ Map<String, Object> orderResultQueryParam = new HashMap<>();
|
|
|
+ orderResultQueryParam.put("orderNumber", order.getPlatform_code());
|
|
|
+ orderResultQueryParam.put("exInterfaceType", df.getStatus());
|
|
|
+ try {
|
|
|
+ getIntegralOrderResult(orderResultQueryParam, dfAccountId);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.info("推送订单完成,查询订单问题{}", e.getMessage());
|
|
|
+ }
|
|
|
+ ErpOrderResponse erpOrderResponse = new ErpOrderResponse();
|
|
|
+ erpOrderResponse.setCode(order.getPlatform_code());
|
|
|
+ erpOrderResponse.setSuccess(true);
|
|
|
+ return erpOrderResponse;
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException(String.format("订单推送失败,原因: %s", dfApiResponse.getMsg()));
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return new ErpOrderResponse();
|
|
|
+ }
|
|
|
+
|
|
|
private @NotNull FsStoreOrderDf addDfOrderScrm(FsStoreOrderScrm fsStoreOrder, Long dfAccountId) {
|
|
|
FsStoreOrderDf df = new FsStoreOrderDf();
|
|
|
df.setOrderId(fsStoreOrder.getId());
|
|
|
@@ -918,6 +1057,38 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
return df;
|
|
|
}
|
|
|
|
|
|
+ private @NotNull FsIntegralOrderDf addDfOrder(FsIntegralOrder fsIntegralOrder, Long dfAccountId){
|
|
|
+// FsStoreOrderDf df = new FsStoreOrderDf();
|
|
|
+ FsIntegralOrderDf df = new FsIntegralOrderDf();
|
|
|
+ df.setOrderId(fsIntegralOrder.getOrderId());
|
|
|
+ df.setOrderCode(fsIntegralOrder.getOrderCode());
|
|
|
+ FsDfAccount dfAccount = fsDfAccountMapper.selectFsDfAccountById(dfAccountId);
|
|
|
+ df.setAppKey(dfAccount.getDfAppKey());
|
|
|
+ df.setAppSecret(dfAccount.getDfAppsecret());
|
|
|
+ df.setLoginAccount(dfAccount.getLoginAccount());
|
|
|
+ df.setMonthlyCard(dfAccount.getMonthlyCard());
|
|
|
+ df.setExpressProductCode(dfAccount.getExpressProductCode());
|
|
|
+ df.setTotalPrice(fsIntegralOrder.getPayMoney());
|
|
|
+// df.setPlatformPrice(fsStoreOrder.getPayPrice());
|
|
|
+ df.setPlatformPrice(BigDecimal.ZERO);
|
|
|
+ df.setStatus(1);
|
|
|
+ df.setIsPush(1);//已经创建过erp订单标识
|
|
|
+ //查询是否存在
|
|
|
+// FsStoreOrderDf temp = fsStoreOrderDfMapper.selectFsStoreOrderDfByOrderId(df.getOrderId());
|
|
|
+ FsIntegralOrderDf temp = integralOrderDfMapper.selectById(df.getOrderId());
|
|
|
+ if (temp != null) {
|
|
|
+ //修改
|
|
|
+// df.setUpdateTime(DateUtils.getNowDate());
|
|
|
+// fsStoreOrderDfMapper.updateFsStoreOrderDf(df);
|
|
|
+ df.setUpdateTime(LocalDateTime.now());
|
|
|
+ integralOrderDfMapper.updateById(df);
|
|
|
+ } else {
|
|
|
+ df.setUpdateTime(LocalDateTime.now());
|
|
|
+ integralOrderDfMapper.insert(df);
|
|
|
+ }
|
|
|
+ return df;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 通用erpOrderScrm获取创建订单参数
|
|
|
*
|
|
|
@@ -1131,6 +1302,109 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
return vo;
|
|
|
}
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private FsIntegralGoodsMapper fsIntegralGoodsMapper;
|
|
|
+
|
|
|
+ private ExternalOrderRequestVo getCreateOrderRequestParam(ErpOrder order, FsIntegralOrder fsIntegralOrder, Long dfAccountId) {
|
|
|
+ ExternalOrderRequestVo vo = new ExternalOrderRequestVo();
|
|
|
+ FsDfAccount dfAccount = fsDfAccountMapper.selectFsDfAccountById(dfAccountId);
|
|
|
+ if (dfAccount == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ String loginAccount = dfAccount.getLoginAccount();
|
|
|
+ vo.setMonthlyCard(dfAccount.getMonthlyCard()); //月结卡号
|
|
|
+ vo.setExpressProductCode(dfAccount.getExpressProductCode()); //物流产品编码
|
|
|
+
|
|
|
+
|
|
|
+ vo.setLoginAccount(loginAccount); //代服系统登录账号
|
|
|
+ String callBackUrl = dfAccount.getCallBackUrl();
|
|
|
+// if (StringUtils.isNotBlank(callBackUrl)) {//TODO:到时候写完了回调接口这里写死或者放配置里面
|
|
|
+// vo.setCallBackUrl(callBackUrl); //订单下单后异步通知地址
|
|
|
+// }
|
|
|
+// FsStoreOrderDf temp = fsStoreOrderDfMapper.selectFsStoreOrderDfByOrderId(fsStoreOrder.getOrderId());
|
|
|
+ FsIntegralOrderDf temp = integralOrderDfMapper.selectById(fsIntegralOrder.getOrderId());
|
|
|
+ if (temp != null) {
|
|
|
+ vo.setParcelQuantity(temp.getParcelQuantity());//包裹数量
|
|
|
+ }
|
|
|
+
|
|
|
+ vo.setOrderNumber(order.getPlatform_code()); //订单号(不能重复)
|
|
|
+
|
|
|
+ int orderPayMethod = 1;//默认在线支付,这个只有积分支付
|
|
|
+// BigDecimal couponPrice = fsIntegralOrder.getCouponPrice();
|
|
|
+// if (couponPrice == null) {
|
|
|
+ BigDecimal couponPrice = BigDecimal.ZERO;
|
|
|
+// }
|
|
|
+
|
|
|
+// if (ObjectUtil.equal(1, fsIntegralOrder.getPayType())) {
|
|
|
+// //在线支付
|
|
|
+// orderPayMethod = 1;
|
|
|
+// } else { // 如果是线上付款
|
|
|
+// orderPayMethod = 2;
|
|
|
+// // 货到付款金额 = 订单剩余支付金额
|
|
|
+// vo.setCollectingMoney(fsIntegralOrder.getPayRemain().doubleValue());
|
|
|
+// vo.setCollectionCardNumber(dfAccount.getMonthlyCard()); // 就是月结账号
|
|
|
+// }
|
|
|
+ //订单付款方式 1:在线支付 2:货到付款
|
|
|
+ //如果填了2,代收金额必须大于0,代收卡号必填
|
|
|
+ vo.setOrderPayMethod(orderPayMethod);
|
|
|
+
|
|
|
+// vo.setConsignmentNumber(Integer.valueOf(Math.toIntExact(fsIntegralOrder.getTotalNum()))); //托寄物数量 必填
|
|
|
+ vo.setConsignmentNumber(1);
|
|
|
+ vo.setBuyerMessage(fsIntegralOrder.getRemark()); //买家留言
|
|
|
+
|
|
|
+ vo.setSenderName(dfAccount.getSenderName()); //寄件人
|
|
|
+ vo.setSenderPhone(dfAccount.getSenderPhone()); //寄件人手机
|
|
|
+ vo.setSenderProvince(dfAccount.getSenderProvince());//寄件人省
|
|
|
+ vo.setSenderCity(dfAccount.getSenderCity());//寄件人市
|
|
|
+ vo.setSenderDistrict(dfAccount.getSenderDistrict());//寄件人区
|
|
|
+ vo.setSenderAddress(dfAccount.getSenderAddress());//寄件人地址
|
|
|
+ vo.setReceiverName(order.getReceiver_name());//收件人
|
|
|
+ vo.setReceiverPhone(order.getReceiver_mobile()); //收件人手机
|
|
|
+ vo.setReceiverTelephone(order.getReceiver_phone());//收件人电话 否
|
|
|
+ vo.setReceiverProvince(order.getReceiver_province()); //收件人省
|
|
|
+ vo.setReceiverCity(order.getReceiver_city()); //收件人市
|
|
|
+ vo.setReceiverDistrict(order.getReceiver_district()); //收件人区
|
|
|
+ vo.setReceiverAddress(order.getReceiver_address()); // 收件人地址
|
|
|
+ vo.setExpressPayMethod(1); //物流付款方式 1:寄付月结 2:寄付现结 3:收方付 4:第三方付
|
|
|
+ //订单sku集合
|
|
|
+ StringBuilder consignmentStr = new StringBuilder();
|
|
|
+// List<FsStoreOrderItem> items = fsStoreOrderItemMapper.selectFsStoreOrderItemListByOrderId(fsStoreOrder.getOrderId());
|
|
|
+ List<ErpOrderItem> items = order.getDetails();
|
|
|
+ if (items != null && items.size() > 0) {
|
|
|
+ ArrayList<ExteriorOrderSkuVo> orderSkus = new ArrayList<>();
|
|
|
+ items.forEach(item -> {
|
|
|
+ ExteriorOrderSkuVo skuVo = new ExteriorOrderSkuVo();
|
|
|
+// FsStoreProduct product = fsStoreProductMapper.selectFsStoreProductById(item.getProductId());
|
|
|
+ FsIntegralGoods goods = fsIntegralGoodsMapper.selectFsIntegralGoodsByGoodsId(Convert.toLong(item.getOid()));
|
|
|
+ Asserts.check(ObjectUtils.isNotNull(goods), "该产品不存在! 产品id: {} ", item.getOid());
|
|
|
+ skuVo.setProductName(goods.getGoodsName()); //商品名称
|
|
|
+// com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(item.getJsonInfo());
|
|
|
+ skuVo.setSkuCode("默认"); //sku编码
|
|
|
+ skuVo.setProductCode(goods.getBarCode()); //商品编号
|
|
|
+ skuVo.setAttributeNames("默认"); //商品规格,格式:颜色:红色,尺寸:L码....以此类推
|
|
|
+ skuVo.setProductNumber(Math.toIntExact(item.getQty())); //商品预定数量
|
|
|
+ skuVo.setPrice(Convert.toDouble(item.getPrice())); //商品单价
|
|
|
+
|
|
|
+// skuVo.setAdjustAmount(0d); //调整金额
|
|
|
+ // 优惠
|
|
|
+ skuVo.setSubAmount(Convert.toDouble(item.getPrice()) * item.getQty());
|
|
|
+
|
|
|
+ //组装寄托物
|
|
|
+ consignmentStr.append(goods.getGoodsName()).append("*").append(item.getQty()).append(",");
|
|
|
+ orderSkus.add(skuVo);
|
|
|
+ });
|
|
|
+ if (consignmentStr.length() > 0) {
|
|
|
+ consignmentStr.deleteCharAt(consignmentStr.length() - 1);
|
|
|
+ }
|
|
|
+ if (consignmentStr.length() > 100) {
|
|
|
+ consignmentStr.delete(consignmentStr.length() - 4, consignmentStr.length());
|
|
|
+ consignmentStr.append("...");
|
|
|
+ }
|
|
|
+ vo.setOrderSkus(orderSkus);
|
|
|
+ vo.setConsignment(consignmentStr.toString()); //寄托物 必填
|
|
|
+ }
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 获取账户索引 后续添加规则
|
|
|
@@ -1213,6 +1487,59 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void getIntegralOrderResult(Map<String, Object> map, Long dfAccountId){
|
|
|
+ try {
|
|
|
+ String status = map.get("exInterfaceType").toString();
|
|
|
+ log.info("开始查询订单结果,参数为: {}", JSON.toJSONString(map));
|
|
|
+ String response = client.execute(RequestUrlEnum.ORDER_RESULT, map, dfAccountId);
|
|
|
+ DFApiResponse dfApiResponse = JSON.parseObject(response, DFApiResponse.class);
|
|
|
+ if (dfApiResponse != null && "ok".equals(dfApiResponse.getCode())) {
|
|
|
+ log.info("查询订单结果,结果: {}", JSON.toJSONString(dfApiResponse));
|
|
|
+ Object result = dfApiResponse.getResult();
|
|
|
+ if (result != null) {
|
|
|
+ String jsonString = JSON.toJSONString(result);
|
|
|
+ //下单
|
|
|
+ if ("1".equals(status)) {
|
|
|
+ //下单结果
|
|
|
+ BspOrderResponseWrapper bspOrderResponse = JSONUtil.toBean(jsonString, BspOrderResponseWrapper.class);
|
|
|
+ if (bspOrderResponse != null) {
|
|
|
+ String failMsg = bspOrderResponse.getFailMsg();
|
|
|
+ if (StringUtils.isNotBlank(failMsg)) {
|
|
|
+ if (failMsg.equals("暂未结果, 请稍后再查")) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //下单失败 返回未推送状态
|
|
|
+ String orderNumber = bspOrderResponse.getOrderNumber();
|
|
|
+ try {
|
|
|
+ rollBackIntegralOrder(orderNumber, failMsg);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.info("{}订单获取运单失败,订单状态回滚失败,失败原因:{},失败信息为:{}", orderNumber,e.getMessage(),failMsg);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ setIntegralExpress(bspOrderResponse);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if ("2".equals(status)) {
|
|
|
+ //取消订单
|
|
|
+ DFCancelOrderResultResponse cancelResponse = JSONUtil.toBean(jsonString, DFCancelOrderResultResponse.class);
|
|
|
+ if (cancelResponse != null) {
|
|
|
+ if (cancelResponse.getIsCancelSuss() == 1) {
|
|
|
+ log.info("查询订单取消成功,返回结果{}", JSON.toJSONString(cancelResponse));
|
|
|
+ } else {
|
|
|
+ log.info("查询订单取消失败,返回结果{}", JSON.toJSONString(cancelResponse));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ log.info(String.format("查询订单失败,原因: %s", dfApiResponse.getMsg()));
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void getOrderScrmResult(Map<String, Object> map, Long dfAccountId) {
|
|
|
try {
|
|
|
String status = map.get("exInterfaceType").toString();
|
|
|
@@ -1282,6 +1609,17 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
//推送失败消息
|
|
|
}
|
|
|
|
|
|
+ private void rollBackIntegralOrder(String orderNumber, String failMsg){
|
|
|
+ //积分的回退不用修改扩展id,定时任务准备使用df表的ispush字段来查询
|
|
|
+ FsIntegralOrderDf df = integralOrderDfMapper.selectOne(Wrappers.<FsIntegralOrderDf>lambdaQuery().eq(FsIntegralOrderDf::getOrderCode, orderNumber));
|
|
|
+ df.setStatus(0); //回到默认
|
|
|
+ df.setFailMsg(failMsg); //失败消息
|
|
|
+ df.setUpdateTime(LocalDateTime.now());
|
|
|
+ df.setIsPush(0);
|
|
|
+ integralOrderDfMapper.updateById(df);
|
|
|
+ log.info("{}订单获取运单失败,失败信息为:{}", orderNumber,failMsg);
|
|
|
+ }
|
|
|
+
|
|
|
private void rollBackOrderScrm(String orderNumber, String failMsg) {
|
|
|
FsStoreOrderScrm fsStoreOrder = fsStoreOrderScrmMapper.selectFsStoreOrderByOrderCode(orderNumber);
|
|
|
FsStoreOrderScrm tempOrder = new FsStoreOrderScrm();
|
|
|
@@ -1372,6 +1710,60 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void setIntegralExpress(BspOrderResponseWrapper bspResponse){
|
|
|
+ String orderNumber = bspResponse.getOrderNumber();
|
|
|
+ //快递单号
|
|
|
+ String mailNumber = bspResponse.getMailNumber();
|
|
|
+ //快递名字
|
|
|
+ BspOrderResponse bspOrderResponse = bspResponse.getBspResponse();
|
|
|
+ if (bspOrderResponse != null) {
|
|
|
+ AtomicBoolean flag = new AtomicBoolean(false);
|
|
|
+ List<OrderResponse> list = bspOrderResponse.getBody();
|
|
|
+ if (list != null && !list.isEmpty()) {
|
|
|
+ for (OrderResponse orderResponse : list) {
|
|
|
+ List<RlsInfo> rlsInfo = orderResponse.getRlsInfo();
|
|
|
+ if (rlsInfo != null && !rlsInfo.isEmpty()) {
|
|
|
+ for (RlsInfo info : rlsInfo) {
|
|
|
+ List<RlsDetail> rlsDetails = info.getRlsDetail();
|
|
|
+ if (rlsDetails != null && !rlsDetails.isEmpty()) {
|
|
|
+ for (RlsDetail rlsDetail : rlsDetails) {
|
|
|
+ String proCode = rlsDetail.getProCode();
|
|
|
+ if (StringUtils.isNotBlank(proCode)) {
|
|
|
+// FsStoreOrder order = fsStoreOrderMapper.selectFsStoreOrderByOrderCode(orderNumber);
|
|
|
+ FsIntegralOrder order = fsIntegralOrderMapper.selectOne(Wrappers.<FsIntegralOrder>lambdaQuery().eq(FsIntegralOrder::getOrderCode, orderNumber));
|
|
|
+ if (order != null && order.getStatus() == 1) {//等于待发货
|
|
|
+ order.setDeliverySn(mailNumber);
|
|
|
+ order.setDeliveryName(proCode);
|
|
|
+ order.setDeliveryCode("SF");
|
|
|
+ order.setStatus(2);//修改积分订单为待收货状态
|
|
|
+ order.setDeliveryTime(DateUtils.getNowDate()); //更新发货时间
|
|
|
+ fsIntegralOrderMapper.updateById(order);
|
|
|
+// fsStoreOrderLogsService.create(order.getOrderId(), FsStoreOrderLogEnum.DELIVERY_GOODS.getValue(), FsStoreOrderLogEnum.DELIVERY_GOODS.getDesc());
|
|
|
+// redisCache.deleteObject(DELIVERY+":"+order.getOrderCode());
|
|
|
+// if (order.getCompanyId() != null && order.getCompanyId() > 0) {
|
|
|
+// companyService.subtractCompanyMoney(order);
|
|
|
+// }积分商品没有这个
|
|
|
+ flag.set(true);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ if (flag.get()) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ if (flag.get()) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 顺丰会有自己的轨迹推送 不使用快递鸟(代服务管家设置推送地址)
|
|
|
*
|