|
@@ -7,6 +7,7 @@ import cn.hutool.json.JSONObject;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
import cn.hutool.json.JSONUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
|
|
+import com.fs.common.core.redis.RedisCache;
|
|
|
import com.fs.common.event.TemplateBean;
|
|
import com.fs.common.event.TemplateBean;
|
|
|
import com.fs.common.event.TemplateEvent;
|
|
import com.fs.common.event.TemplateEvent;
|
|
|
import com.fs.common.event.TemplateListenEnum;
|
|
import com.fs.common.event.TemplateListenEnum;
|
|
@@ -40,6 +41,7 @@ import com.fs.hisStore.enums.ShipperCodeEnum;
|
|
|
import com.fs.hisStore.mapper.FsStoreOrderItemScrmMapper;
|
|
import com.fs.hisStore.mapper.FsStoreOrderItemScrmMapper;
|
|
|
import com.fs.hisStore.mapper.FsStoreOrderScrmMapper;
|
|
import com.fs.hisStore.mapper.FsStoreOrderScrmMapper;
|
|
|
import com.fs.hisStore.mapper.FsStoreProductScrmMapper;
|
|
import com.fs.hisStore.mapper.FsStoreProductScrmMapper;
|
|
|
|
|
+import com.fs.hisStore.param.FsStoreAfterSalesParam;
|
|
|
import com.fs.hisStore.service.IFsExpressScrmService;
|
|
import com.fs.hisStore.service.IFsExpressScrmService;
|
|
|
import com.fs.hisStore.service.IFsStoreOrderScrmService;
|
|
import com.fs.hisStore.service.IFsStoreOrderScrmService;
|
|
|
import com.fs.hisStore.vo.FsStoreOrderItemVO;
|
|
import com.fs.hisStore.vo.FsStoreOrderItemVO;
|
|
@@ -58,6 +60,8 @@ import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
|
|
|
|
|
|
|
+import static com.fs.hisStore.constants.StoreConstants.DELIVERY;
|
|
|
|
|
+
|
|
|
@Service
|
|
@Service
|
|
|
@Slf4j
|
|
@Slf4j
|
|
|
public class DfOrderServiceImpl implements IErpOrderService {
|
|
public class DfOrderServiceImpl implements IErpOrderService {
|
|
@@ -115,9 +119,15 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private IFsStoreOrderService fsStoreOrderService;
|
|
private IFsStoreOrderService fsStoreOrderService;
|
|
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private IFsStoreOrderScrmService fsStoreOrderScrmService;
|
|
|
|
|
+
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private SysConfigMapper sysConfigMapper;
|
|
private SysConfigMapper sysConfigMapper;
|
|
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private RedisCache redisCache;
|
|
|
|
|
+
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public ErpOrderResponse addOrder(ErpOrder order) {
|
|
public ErpOrderResponse addOrder(ErpOrder order) {
|
|
@@ -184,6 +194,61 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
return new ErpOrderResponse();
|
|
return new ErpOrderResponse();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 退款 取消订单
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param order
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public ErpOrderResponse refundOrderScrm(ErpRefundOrder order) {
|
|
|
|
|
+ //获取代服账户
|
|
|
|
|
+ String orderCode = order.getOrderCode();
|
|
|
|
|
+ FsStoreOrderScrm fsStoreOrder = fsStoreOrderScrmMapper.selectFsStoreOrderByOrderCode(orderCode);
|
|
|
|
|
+ FsStoreOrderDf df = fsStoreOrderDfMapper.selectFsStoreOrderDfByOrderId(fsStoreOrder.getId());
|
|
|
|
|
+ if (df == null) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+ Long dfAccountId = getSFAccountIndex(fsStoreOrder.getId());
|
|
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
|
|
+ map.put("loginAccount", df.getLoginAccount());
|
|
|
|
|
+ FsDfAccount dfAccount = fsDfAccountMapper.selectFsDfAccountById(dfAccountId);
|
|
|
|
|
+ if (dfAccount != null && StringUtils.isNotBlank(dfAccount.getCallBackUrl())) {
|
|
|
|
|
+ map.put("callBackUrl", dfAccount.getCallBackUrl());
|
|
|
|
|
+ }
|
|
|
|
|
+ map.put("orderNumber", orderCode);
|
|
|
|
|
+ map.put("mailNumber", fsStoreOrder.getDeliveryId());
|
|
|
|
|
+ try {
|
|
|
|
|
+ //2.请求
|
|
|
|
|
+ log.info("开始取消订单,参数: {}", JSON.toJSONString(map));
|
|
|
|
|
+ String response = client.execute(RequestUrlEnum.ORDER_CANCEL, map, dfAccountId);
|
|
|
|
|
+ DFApiResponse dfApiResponse = JSON.parseObject(response, DFApiResponse.class);
|
|
|
|
|
+ //3.处理请求结果
|
|
|
|
|
+ if (dfApiResponse != null && "ok".equals(dfApiResponse.getCode())) {
|
|
|
|
|
+ //存储订单推送用的哪个账户
|
|
|
|
|
+ log.info("订单取消成功: {}", response);
|
|
|
|
|
+ //修改df表
|
|
|
|
|
+ df.setStatus(2);
|
|
|
|
|
+ df.setUpdateTime(DateUtils.getNowDate());
|
|
|
|
|
+ fsStoreOrderDfMapper.updateFsStoreOrderDf(df);
|
|
|
|
|
+ //可以回调 也可以查询订单
|
|
|
|
|
+ Map<String, Object> orderResultQueryParam = new HashMap<>();
|
|
|
|
|
+ orderResultQueryParam.put("orderNumber", orderCode);
|
|
|
|
|
+ orderResultQueryParam.put("exInterfaceType", 2); //2为查询取消订单结果
|
|
|
|
|
+// getOrderResult(orderResultQueryParam,sfAccountIndex);
|
|
|
|
|
+ ErpOrderResponse erpOrderResponse = new ErpOrderResponse();
|
|
|
|
|
+ erpOrderResponse.setCode(orderCode);
|
|
|
|
|
+ erpOrderResponse.setSuccess(true);
|
|
|
|
|
+ return erpOrderResponse;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ throw new RuntimeException(String.format("订单取消失败,原因: %s", dfApiResponse.getMsg()));
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+ return new ErpOrderResponse();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public ErpDeliverysResponse getDeliver(ErpDeliverysRequest request) {
|
|
public ErpDeliverysResponse getDeliver(ErpDeliverysRequest request) {
|
|
|
ErpDeliverysResponse erpDeliverysResponse = new ErpDeliverysResponse();
|
|
ErpDeliverysResponse erpDeliverysResponse = new ErpDeliverysResponse();
|
|
@@ -310,8 +375,10 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
- public BaseResponse refundUpdateScrm(ErpRefundUpdateRequest param) {
|
|
|
|
|
- return null;
|
|
|
|
|
|
|
+ public BaseResponse refundUpdateScrm(ErpRefundUpdateRequest request) {
|
|
|
|
|
+ ErpRefundOrder erpRefundOrder = new ErpRefundOrder();
|
|
|
|
|
+ erpRefundOrder.setOrderCode(request.getTid());
|
|
|
|
|
+ return refundOrderScrm(erpRefundOrder);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -414,6 +481,101 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void getOrderScrmDeliveryStatus(FsStoreOrderScrm order) {
|
|
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
|
|
+ Long dfAccountId = getSFAccountIndex(order.getId());
|
|
|
|
|
+ map.put("orderNumber", order.getOrderCode());
|
|
|
|
|
+ map.put("mailNumber", order.getDeliveryId());
|
|
|
|
|
+ try {
|
|
|
|
|
+ String response = client.execute(RequestUrlEnum.ORDER_DELIVERY_STATUS, map, dfAccountId);
|
|
|
|
|
+ DFApiResponse dfApiResponse = JSON.parseObject(response, DFApiResponse.class);
|
|
|
|
|
+ if ("运单不存在".equals(dfApiResponse.getMsg())) {
|
|
|
|
|
+
|
|
|
|
|
+ //查看原来物流状态
|
|
|
|
|
+ cancelOrderScrm(order);
|
|
|
|
|
+ log.info("代服管家 getOrderDeliveryStatus: {}", response);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ //3.处理请求结果
|
|
|
|
|
+ if (dfApiResponse != null && "ok".equals(dfApiResponse.getCode())) {
|
|
|
|
|
+ String jsonString = JSON.toJSONString(dfApiResponse.getResult());
|
|
|
|
|
+// List<DFOrderStatusResultRequest> requestList = JSON.parseArray(jsonString, DFOrderStatusResultRequest.class);
|
|
|
|
|
+ DFOrderStatusResultRequest temp = JSON.parseObject(jsonString, DFOrderStatusResultRequest.class);
|
|
|
|
|
+ //0待揽收 1已揽收 2运输中 3派送中 4异常件 5退回件 6退回签收 7转寄件 8作废件 9已签收 10 已取消
|
|
|
|
|
+ Integer deliveryStatus = 0;
|
|
|
|
|
+ String stateEx = "0";
|
|
|
|
|
+ FsStoreOrderScrm fsStoreOrderMap = new FsStoreOrderScrm();
|
|
|
|
|
+ fsStoreOrderMap.setId(order.getId());
|
|
|
|
|
+ Integer status = temp.getStatus();
|
|
|
|
|
+ switch (status) {
|
|
|
|
|
+ case 0:
|
|
|
|
|
+ //0待揽收 1已揽收 2运输中
|
|
|
|
|
+ deliveryStatus = status;
|
|
|
|
|
+ stateEx = status.toString();
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 1:
|
|
|
|
|
+ //0待揽收 1已揽收 2运输中
|
|
|
|
|
+ deliveryStatus = status;
|
|
|
|
|
+ stateEx = status.toString();
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 2:
|
|
|
|
|
+ //0待揽收 1已揽收 2运输中
|
|
|
|
|
+ deliveryStatus = status;
|
|
|
|
|
+ stateEx = status.toString();
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 3:
|
|
|
|
|
+ //3派送中
|
|
|
|
|
+ deliveryStatus = 2;
|
|
|
|
|
+ stateEx = "202";
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 4:
|
|
|
|
|
+ // 4异常件
|
|
|
|
|
+ deliveryStatus = status;
|
|
|
|
|
+ stateEx = status.toString();
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 5:
|
|
|
|
|
+ //5退回件
|
|
|
|
|
+ deliveryStatus = 4;
|
|
|
|
|
+ stateEx = "407"; //退货未签收
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 6:
|
|
|
|
|
+ // 6退回签收 7转寄件 8作废件 9已签收 10 已取消
|
|
|
|
|
+ deliveryStatus = status;
|
|
|
|
|
+ stateEx = "406"; //退货签收
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 9:
|
|
|
|
|
+ //已签收
|
|
|
|
|
+ deliveryStatus = 3;
|
|
|
|
|
+ stateEx = "301"; //退货签收
|
|
|
|
|
+// SysConfig sysConfig = sysConfigMapper.selectConfigByConfigKey("his.store");
|
|
|
|
|
+// Map<String, Object> config = (Map<String, Object>) JSON.parse(sysConfig.getConfigValue());
|
|
|
|
|
+// Object isUpdateOrder = config.get("isUpdateOrder");
|
|
|
|
|
+// if (isUpdateOrder == null || "1".equals(isUpdateOrder.toString())) {
|
|
|
|
|
+// fsStoreOrderService.getGoods(order.getId(), "物流自动");
|
|
|
|
|
+// }
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 10:
|
|
|
|
|
+ //取消订单
|
|
|
|
|
+ String mailNumber = temp.getMailNumber();
|
|
|
|
|
+ List<FsStoreOrderScrm> fsStoreOrders = fsStoreOrderScrmMapper.selectFsStoreOrderListByDeliveryId(mailNumber);
|
|
|
|
|
+ if (fsStoreOrders != null && !fsStoreOrders.isEmpty()) {
|
|
|
|
|
+ fsStoreOrders.forEach(tempOrder -> {
|
|
|
|
|
+ cancelOrderScrm(order);
|
|
|
|
|
+ log.info("代服管家 订单取消成功: {}", response);
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ fsStoreOrderMap.setDeliveryStatus(deliveryStatus); //物流状态:0-暂无轨迹信息 1-已揽收 2-在途中,3-签收,4-问题件
|
|
|
|
|
+ fsStoreOrderMap.setDeliveryType(stateEx);
|
|
|
|
|
+ fsStoreOrderScrmMapper.updateFsStoreOrder(fsStoreOrderMap);
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private void cancelOrder(FsStoreOrder order) {
|
|
private void cancelOrder(FsStoreOrder order) {
|
|
|
Integer deliveryStatus = order.getDeliveryStatus();
|
|
Integer deliveryStatus = order.getDeliveryStatus();
|
|
|
if (deliveryStatus == null || deliveryStatus == 0) {
|
|
if (deliveryStatus == null || deliveryStatus == 0) {
|
|
@@ -443,6 +605,37 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
fsStoreOrderDfMapper.updateFsStoreOrderDf(df);
|
|
fsStoreOrderDfMapper.updateFsStoreOrderDf(df);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private void cancelOrderScrm(FsStoreOrderScrm order) {
|
|
|
|
|
+ Integer deliveryStatus = order.getDeliveryStatus();
|
|
|
|
|
+ if (deliveryStatus == null || deliveryStatus == 0) {
|
|
|
|
|
+ //没有物流信息
|
|
|
|
|
+ //修改订单状态 方便后续重新发货
|
|
|
|
|
+ order.setStatus(OrderInfoEnum.STATUS_1.getValue());
|
|
|
|
|
+ order.setExtendOrderId("");
|
|
|
|
|
+ order.setDeliveryId("");
|
|
|
|
|
+ fsStoreOrderScrmMapper.updateFsStoreOrder(order);
|
|
|
|
|
+ fsStoreOrderScrmLogsService.create(order.getId(), OrderLogEnum.UPDATE_ORDER_DF.getValue(),
|
|
|
|
|
+ "运单不存在," + OrderLogEnum.UPDATE_ORDER_DF.getDesc());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ //有物流信息->售后处理
|
|
|
|
|
+ //取消订单
|
|
|
|
|
+ FsStoreAfterSalesParam afterSalesParam = new FsStoreAfterSalesParam();
|
|
|
|
|
+// afterSalesParam.setOrderId(order.getId());
|
|
|
|
|
+// afterSalesParam.setOrderCode(order.getOrderCode());
|
|
|
|
|
+// afterSalesParam.setReasons("代服管家取消订单");
|
|
|
|
|
+// afterSalesParam.setOperator("代服管家");
|
|
|
|
|
+// fsStoreOrderScrmService.afterSales(afterSalesParam);
|
|
|
|
|
+ fsStoreOrderScrmService.refundOrderMoney(order.getId());
|
|
|
|
|
+ fsStoreOrderScrmLogsService.create(order.getId(), OrderLogEnum.REFUND_ORDER_DF.getValue(),
|
|
|
|
|
+ "运单不存在," + OrderLogEnum.REFUND_ORDER_DF.getDesc());
|
|
|
|
|
+ }
|
|
|
|
|
+ FsStoreOrderDf df = new FsStoreOrderDf();
|
|
|
|
|
+ df.setOrderId(order.getId());
|
|
|
|
|
+ df.setStatus(2);
|
|
|
|
|
+ df.setUpdateTime(new Date());
|
|
|
|
|
+ fsStoreOrderDfMapper.updateFsStoreOrderDf(df);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 获取erp推送参数
|
|
* 获取erp推送参数
|
|
|
*
|
|
*
|
|
@@ -632,7 +825,7 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
couponPrice = BigDecimal.ZERO;
|
|
couponPrice = BigDecimal.ZERO;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (ObjectUtil.equal(1, fsStoreOrder.getPayType())) {
|
|
|
|
|
|
|
+ if ("1".equals(fsStoreOrder.getPayType())) {
|
|
|
//在线支付
|
|
//在线支付
|
|
|
orderPayMethod = 1;
|
|
orderPayMethod = 1;
|
|
|
} else { // 如果是线上付款
|
|
} else { // 如果是线上付款
|
|
@@ -1011,6 +1204,7 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
order.setDeliverySendTime(DateUtils.getNowDate()); //更新发货时间
|
|
order.setDeliverySendTime(DateUtils.getNowDate()); //更新发货时间
|
|
|
fsStoreOrderMapper.updateFsStoreOrder(order);
|
|
fsStoreOrderMapper.updateFsStoreOrder(order);
|
|
|
fsStoreOrderLogsService.create(order.getOrderId(), FsStoreOrderLogEnum.DELIVERY_GOODS.getValue(), FsStoreOrderLogEnum.DELIVERY_GOODS.getDesc());
|
|
fsStoreOrderLogsService.create(order.getOrderId(), FsStoreOrderLogEnum.DELIVERY_GOODS.getValue(), FsStoreOrderLogEnum.DELIVERY_GOODS.getDesc());
|
|
|
|
|
+ redisCache.deleteObject(DELIVERY+":"+order.getExtendOrderId());
|
|
|
if (order.getCompanyId() != null && order.getCompanyId() > 0) {
|
|
if (order.getCompanyId() != null && order.getCompanyId() > 0) {
|
|
|
companyService.subtractCompanyMoney(order);
|
|
companyService.subtractCompanyMoney(order);
|
|
|
}
|
|
}
|
|
@@ -1087,6 +1281,7 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
|
|
|
|
|
fsStoreOrderScrmMapper.updateFsStoreOrder(order);
|
|
fsStoreOrderScrmMapper.updateFsStoreOrder(order);
|
|
|
fsStoreOrderScrmLogsService.create(order.getId(), FsStoreOrderLogEnum.DELIVERY_GOODS.getValue(), FsStoreOrderLogEnum.DELIVERY_GOODS.getDesc());
|
|
fsStoreOrderScrmLogsService.create(order.getId(), FsStoreOrderLogEnum.DELIVERY_GOODS.getValue(), FsStoreOrderLogEnum.DELIVERY_GOODS.getDesc());
|
|
|
|
|
+ redisCache.deleteObject(DELIVERY+":"+order.getExtendOrderId());
|
|
|
//订阅物流回调
|
|
//订阅物流回调
|
|
|
// String lastFourNumber = "";
|
|
// String lastFourNumber = "";
|
|
|
// if (order.getDeliverySn().equals(ShipperCodeEnum.SF.getValue())) {
|
|
// if (order.getDeliverySn().equals(ShipperCodeEnum.SF.getValue())) {
|