|
@@ -1,6 +1,7 @@
|
|
|
package com.fs.erp.service.impl;
|
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
+import cn.hutool.db.sql.Order;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.alibaba.fastjson.PropertyNamingStrategy;
|
|
@@ -34,6 +35,7 @@ import org.springframework.stereotype.Service;
|
|
|
import java.io.IOException;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
+import java.text.ParseException;
|
|
|
import java.util.*;
|
|
|
import java.util.HashMap;
|
|
|
|
|
@@ -53,8 +55,21 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
|
|
|
|
|
|
@Value("${fsConfig.erpWdShopCode}")
|
|
|
private String shopCode;
|
|
|
+
|
|
|
+ private static final Integer NORMAL_TYPE = 1;
|
|
|
+ private static final Integer REFUND_TYPE = 2;
|
|
|
@Override
|
|
|
public ErpOrderResponse addOrder(ErpOrder order) {
|
|
|
+ return getErpOrderResponse(order,NORMAL_TYPE);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * @param order 订单参数
|
|
|
+ * @param type 1正常 2退款
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private ErpOrderResponse getErpOrderResponse(ErpOrder order,Integer type) {
|
|
|
WdtClient client = WdtClient.getInstance();
|
|
|
//测试环境sid、appkey、密钥请到旺店通开放平台-自助对接-申请测试环境内查看,测试环境url=https://sandbox.wangdian.cn/openapi2/
|
|
|
//调用正式环境时请将sid、appkey、appsecret切换为实际参数,参数在旺店通开放平台-自助对接-应用管理内应用状态为已上线的应用中查看,调用正式环境注意切换正式环境url=https://api.wangdian.cn/openapi2/
|
|
@@ -67,7 +82,12 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
|
|
|
// 订单id
|
|
|
erpWdtTrade.setTid(order.getPlatform_code());
|
|
|
// 平台状态
|
|
|
- erpWdtTrade.setTradeStatus(TradeStatus.PAID_WAITING_FOR_SHIPMENT.getValue());
|
|
|
+ if(Objects.equals(type, NORMAL_TYPE)){
|
|
|
+ erpWdtTrade.setTradeStatus(TradeStatus.PAID_WAITING_FOR_SHIPMENT.getValue());
|
|
|
+ }else if(Objects.equals(type, REFUND_TYPE)){
|
|
|
+ erpWdtTrade.setTradeStatus(TradeStatus.REFUNDED.getValue());
|
|
|
+ }
|
|
|
+
|
|
|
// 支付状态
|
|
|
erpWdtTrade.setPayStatus(PaymentStatus.FULLY_PAID.getValue());
|
|
|
// 发货条件
|
|
@@ -98,8 +118,7 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
|
|
|
erpWdtTrade.setBuyerMessage(order.getBuyer_memo());
|
|
|
// 卖家备注
|
|
|
erpWdtTrade.setSellerMemo(order.getSeller_memo());
|
|
|
-// erpWdtTrade.setWarehouseNo(order.getWarehouse_code());
|
|
|
- erpWdtTrade.setWarehouseNo("beiliyou2-test");
|
|
|
+ erpWdtTrade.setWarehouseNo(order.getWarehouse_code());
|
|
|
|
|
|
// 已付金额
|
|
|
FsStoreOrder fsStoreOrder = fsStoreOrderService.selectFsStoreOrderByOrderCode(order.getPlatform_code());
|
|
@@ -127,15 +146,22 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
|
|
|
// 单价
|
|
|
erpWdtOrder.setPrice(fsStoreProduct.getPrice());
|
|
|
// 状态
|
|
|
- erpWdtOrder.setStatus(TradeStatus.SHIPPED.getValue());
|
|
|
- // 退款状态
|
|
|
- erpWdtOrder.setRefundStatus(RefundStatus.NO_REFUND.getValue());
|
|
|
+ if(Objects.equals(type, NORMAL_TYPE)){
|
|
|
+ erpWdtOrder.setStatus(TradeStatus.SHIPPED.getValue());
|
|
|
+ // 退款状态
|
|
|
+ erpWdtOrder.setRefundStatus(RefundStatus.NO_REFUND.getValue());
|
|
|
+ } else {
|
|
|
+ erpWdtOrder.setStatus(TradeStatus.REFUNDED.getValue());
|
|
|
+ // 退款状态
|
|
|
+ erpWdtOrder.setRefundStatus(RefundStatus.REFUND_SUCCESSFUL.getValue());
|
|
|
+ }
|
|
|
+
|
|
|
// 平台货品ID
|
|
|
erpWdtOrder.setGoodsId(String.valueOf(fsStoreProduct.getProductId()));
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(fsStoreOrderItem.getJsonInfo());
|
|
|
+ JSONObject jsonObject = JSON.parseObject(fsStoreOrderItem.getJsonInfo());
|
|
|
erpWdtOrder.setSpecId(jsonObject.getString("sku"));
|
|
|
- erpWdtOrder.setGoodsNo("WDTPOS");
|
|
|
- erpWdtOrder.setSpecNo("BLACK007");
|
|
|
+ erpWdtOrder.setGoodsNo(jsonObject.getString("barCode"));
|
|
|
+ erpWdtOrder.setSpecNo(jsonObject.getString("sku"));
|
|
|
// 货品名称
|
|
|
erpWdtOrder.setGoodsName(fsStoreProduct.getProductName());
|
|
|
// 调整
|
|
@@ -151,7 +177,7 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
|
|
|
}
|
|
|
|
|
|
// 最后一个商品的分摊优惠等于总优惠减去前面分摊优惠之和
|
|
|
- Asserts.check(CollectionUtils.isNotEmpty(erpWdtOrderList),"订单 {} 商品不能为空!",order.getPlatform_code());
|
|
|
+ Asserts.check(CollectionUtils.isNotEmpty(erpWdtOrderList),"订单 {} 商品不能为空!", order.getPlatform_code());
|
|
|
long size = erpWdtOrderList.size();
|
|
|
if(size > 1) {
|
|
|
ErpWdtOrder erpWdtOrder = erpWdtOrderList.get(erpWdtOrderList.size() - 1);
|
|
@@ -172,7 +198,9 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
|
|
|
|
|
|
try {
|
|
|
String response = client.execute("trade_push.php", map);
|
|
|
- ErpWdtApiResponse erpWdtApiResponse = JSON.parseObject(response, ErpWdtApiResponse.class);
|
|
|
+ ParserConfig config = new ParserConfig();
|
|
|
+ config.propertyNamingStrategy = PropertyNamingStrategy.CamelCase;
|
|
|
+ ErpWdtApiResponse erpWdtApiResponse = JSON.parseObject(response, ErpWdtApiResponse.class,config);
|
|
|
if(ObjectUtil.equal(0,erpWdtApiResponse.getCode())){
|
|
|
log.info("订单推送成功: {}", response);
|
|
|
ErpOrderResponse erpOrderResponse = new ErpOrderResponse();
|
|
@@ -221,12 +249,29 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
|
|
|
|
|
|
@Override
|
|
|
public BaseResponse refundUpdate(ErpRefundUpdateRequest param) {
|
|
|
+ log.info("退款单更新: {}", param);
|
|
|
+ FsStoreOrder fsStoreOrder = fsStoreOrderService.selectFsStoreOrderByOrderCode(param.getTid());
|
|
|
+
|
|
|
+ // 待发货状态,售前退款
|
|
|
+ if(ObjectUtil.equal(1, fsStoreOrder.getStatus())){
|
|
|
+ log.info("售前退款 参数: {}",param);
|
|
|
+ try {
|
|
|
+ ErpOrder order = fsStoreOrderService.getErpOrder(fsStoreOrder);
|
|
|
+
|
|
|
+ Asserts.check(ObjectUtils.isNotNull(order),"该订单不存在!");
|
|
|
+
|
|
|
+ return getErpOrderResponse(order,REFUND_TYPE);
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //--------------售后退款------------
|
|
|
+ log.info("售后退款 参数: {}", param);
|
|
|
WdtClient client = WdtClient.getInstance();
|
|
|
Map<String,String> map = new HashMap<>();
|
|
|
|
|
|
|
|
|
- FsStoreOrder fsStoreOrder = fsStoreOrderService.selectFsStoreOrderByOrderCode(param.getTid());
|
|
|
-
|
|
|
Asserts.check(ObjectUtils.isNotNull(fsStoreOrder), "该订单不存在! 订单id: {} ", param.getTid());
|
|
|
|
|
|
List<FsStoreOrderItemVO> fsStoreOrderItemVOS = fsStoreOrderItemService.selectFsStoreOrderItemListByOrderId(fsStoreOrder.getId());
|
|
@@ -249,14 +294,13 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
|
|
|
.orderList(refundOrders)
|
|
|
.build());
|
|
|
|
|
|
- ErpWdtRefundRequest refundRequest = ErpWdtRefundRequest.builder()
|
|
|
- .apiRefundList(erpWdtApiRefunds)
|
|
|
- .build();
|
|
|
|
|
|
- map.put("api_refund_list",JSON.toJSONString(refundRequest));
|
|
|
+ map.put("api_refund_list",convertToSnakeCase(erpWdtApiRefunds));
|
|
|
try {
|
|
|
String execute = client.execute("sales_refund_push.php", map);
|
|
|
- ErpWdtApiResponse erpWdtApiResponse = JSON.parseObject(execute, ErpWdtApiResponse.class);
|
|
|
+ ParserConfig config = new ParserConfig();
|
|
|
+ config.propertyNamingStrategy = PropertyNamingStrategy.CamelCase;
|
|
|
+ ErpWdtApiResponse erpWdtApiResponse = JSON.parseObject(execute, ErpWdtApiResponse.class,config);
|
|
|
if(ObjectUtil.equal(0, erpWdtApiResponse.getCode())){
|
|
|
log.info("退款单更新成功: {}", erpWdtApiResponse);
|
|
|
return new BaseResponse();
|