xdd 2 месяцев назад
Родитель
Сommit
141c1be223

+ 62 - 18
fs-service-system/src/main/java/com/fs/erp/service/impl/WdtErpOrderServiceImpl.java

@@ -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();

+ 3 - 0
fs-service-system/src/main/java/com/fs/store/service/IFsStoreOrderService.java

@@ -10,6 +10,7 @@ import com.fs.api.param.OrderListParam;
 import com.fs.api.vo.OrderListVO;
 import com.fs.common.core.domain.R;
 import com.fs.company.domain.CompanyUser;
+import com.fs.erp.domain.ErpOrder;
 import com.fs.store.domain.FsStoreOrder;
 import com.fs.store.dto.ExpressNotifyDTO;
 import com.fs.store.dto.FsStoreOrderComputeDTO;
@@ -131,6 +132,8 @@ public interface IFsStoreOrderService
 
     void createOmsOrder(Long orderId) throws ParseException;
 
+    ErpOrder getErpOrder(FsStoreOrder order) throws ParseException;
+
     FsStoreOrderVO selectFsStoreOrderVOByOrderCode(String orderCode);
 
     Long selectFsStoreOrderTotalCount(int type,Long companyId);

+ 19 - 22
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderServiceImpl.java

@@ -10,7 +10,6 @@ import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
-import cn.hutool.core.date.DateTime;
 import cn.hutool.core.net.URLDecoder;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.NumberUtil;
@@ -23,7 +22,6 @@ import com.alibaba.fastjson.JSONObject;
 import com.fs.api.param.OrderListParam;
 import com.fs.api.vo.OrderListVO;
 import com.fs.api.vo.ProductListVO;
-import com.fs.common.annotation.DataScope;
 import com.fs.common.config.FSSysConfig;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.redis.RedisCache;
@@ -62,8 +60,6 @@ import com.fs.store.param.*;
 import com.fs.store.service.*;
 import com.fs.store.vo.*;
 import com.fs.pay.service.IPayService;
-import com.fs.pay.service.dto.RefundDTO;
-import com.fs.system.domain.SysConfig;
 import com.fs.system.service.ISysConfigService;
 import com.fs.wx.pay.config.WxPayProperties;
 import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
@@ -73,22 +69,17 @@ import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
 import com.github.binarywang.wxpay.config.WxPayConfig;
 import com.github.binarywang.wxpay.exception.WxPayException;
 import com.github.binarywang.wxpay.service.WxPayService;
-import com.google.gson.Gson;
-import com.hc.openapi.tool.util.Ids;
 import lombok.Synchronized;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationEventPublisher;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import com.fs.store.mapper.FsStoreOrderMapper;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
-import javax.swing.plaf.TableHeaderUI;
-
 import static com.fs.store.constants.StoreConstants.DELIVERY;
 
 /**
@@ -1393,9 +1384,23 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         if(!StringUtils.isEmpty(order.getExtendOrderId())&&order.getStatus()!=1){
             return;
         }
+        ErpOrder erpOrder = getErpOrder(order);
+        ErpOrderResponse response= erpOrderService.addOrder(erpOrder);
+        //写入日志
+        logger.info("ErpCreate:"+order.getOrderCode()+":"+JSONUtil.toJsonStr(response));
+        //支付成功后 将订单号写入待发货的REDIS中
+        redisCache.setCacheObject(DELIVERY+":"+response.getCode(),order.getOrderCode());
+        //写入外部订单号
+        order.setExtendOrderId(response.getCode());
+        fsStoreOrderMapper.updateFsStoreOrder(order);
+
+    }
+
+    @Override
+    public ErpOrder getErpOrder(FsStoreOrder order) throws ParseException {
         ErpOrder erpOrder=new ErpOrder();
         if (order.getCompanyId()!=null){
-            erpOrder.setVip_code(order.getUserId().toString()+order.getCompanyId().toString());
+            erpOrder.setVip_code(order.getUserId().toString()+ order.getCompanyId().toString());
         }else {
             erpOrder.setVip_code(order.getUserId().toString());
         }
@@ -1433,7 +1438,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         //3.新疆  西藏 内蒙古 海南  全款订单走顺丰丰云配  【非全款】的就根据公司配置那来 配的哪个走哪个快递
         //4.把现在发中通的规则改成发顺丰风云配 SF.0235402855
         //5.全款支付且应付金额小于等于100元,快递方式默认中通小件455 ZTO 中通小件 ZTPDD
-        if(order.getCompanyId()!=null&&order.getStoreHouseCode()!=null&&order.getStoreHouseCode().equals("WHSP001")){
+        if(order.getCompanyId()!=null&& order.getStoreHouseCode()!=null&& order.getStoreHouseCode().equals("WHSP001")){
             //杭州家有仙妻实业有限公司 全部订单快递方式设置为商城德邦快递
             FsExpress express=expressService.selectFsExpressByOmsCode("SF-WHC");
             erpOrder.setExpress_code(express.getOmsCode());
@@ -1564,7 +1569,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             //erpOrder.setSeller_memo(erpOrder.getSeller_memo()+"-"+order.getDeliveryName());
         }
         else{
-            erpOrder.setSeller_memo(erpOrder.getSeller_memo()+"-"+order.getDeliveryName());
+            erpOrder.setSeller_memo(erpOrder.getSeller_memo()+"-"+ order.getDeliveryName());
         }
         ErpRemarkDTO remarkDTO=new ErpRemarkDTO();
         remarkDTO.setTotalPrice(order.getTotalPrice());
@@ -1632,7 +1637,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         else{
             erpOrder.setReceiver_mobile(order.getUserPhone());
         }
-        String[] address=order.getUserAddress().split(" ");
+        String[] address= order.getUserAddress().split(" ");
         erpOrder.setReceiver_province(address[0]);
         erpOrder.setReceiver_city(address[1]);
         erpOrder.setReceiver_district(address[2]);
@@ -1650,15 +1655,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         //处理地址字符问题
         erpOrder.setReceiver_address(erpOrder.getReceiver_address().replace("+","加"));
         erpOrder.setReceiver_address(erpOrder.getReceiver_address().replace("\n",""));
-        ErpOrderResponse response= erpOrderService.addOrder(erpOrder);
-        //写入日志
-        logger.info("ErpCreate:"+order.getOrderCode()+":"+JSONUtil.toJsonStr(response));
-        //支付成功后 将订单号写入待发货的REDIS中
-        redisCache.setCacheObject(DELIVERY+":"+response.getCode(),order.getOrderCode());
-        //写入外部订单号
-        order.setExtendOrderId(response.getCode());
-        fsStoreOrderMapper.updateFsStoreOrder(order);
-
+        return erpOrder;
     }
 
     @Override