Prechádzať zdrojové kódy

推送erp 优惠金额分摊计算

xdd 2 mesiacov pred
rodič
commit
a9f44a1231

+ 2 - 2
fs-service-system/src/main/java/com/fs/erp/converter/ErpWdtToErpOrderMapper.java

@@ -55,8 +55,8 @@ public interface ErpWdtToErpOrderMapper {
     default ErpOrderQueryResponse toErpOrderQueryResponse(ErpWdtTradeQueryResponse source){
         ErpOrderQueryResponse response = new ErpOrderQueryResponse();
         List<ErpOrderQuery> erpOrderQueryList = new ArrayList<>();
-        if(CollectionUtil.isNotEmpty(source.getTradeList())){
-            List<ErpWdtTradeInfo> trades = source.getTradeList();
+        if(CollectionUtil.isNotEmpty(source.getTrades())){
+            List<ErpWdtTradeInfo> trades = source.getTrades();
             for (ErpWdtTradeInfo trade : trades) {
                 ErpOrderQuery erpOrderQuery = toErpOrderQuery(trade);
                 erpOrderQueryList.add(erpOrderQuery);

+ 2 - 2
fs-service-system/src/main/java/com/fs/erp/dto/wdt/ErpWdtTradeQueryResponse.java

@@ -46,7 +46,7 @@ public class ErpWdtTradeQueryResponse {
     /**
      * 订单列表节点,响应参数的1级数据节点,包含当前页的订单及其明细的数据节点
      */
-    @JsonProperty("trade_list")
-    private List<ErpWdtTradeInfo> tradeList;
+    @JsonProperty("trades")
+    private List<ErpWdtTradeInfo> trades;
 }
 

+ 32 - 7
fs-service-system/src/main/java/com/fs/erp/service/impl/WdtErpOrderServiceImpl.java

@@ -22,6 +22,7 @@ import com.fs.store.service.IFsStoreOrderService;
 import com.fs.store.service.IFsStoreProductService;
 import com.fs.store.vo.FsStoreOrderItemVO;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringEscapeUtils;
 import org.apache.http.util.Asserts;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -31,6 +32,7 @@ import org.springframework.stereotype.Service;
 
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.HashMap;
 
@@ -64,7 +66,7 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
         // 订单id
         erpWdtTrade.setTid(order.getPlatform_code());
         // 平台状态
-        erpWdtTrade.setTradeStatus(TradeStatus.SHIPPED.getValue());
+        erpWdtTrade.setTradeStatus(TradeStatus.PAID_WAITING_FOR_SHIPMENT.getValue());
         // 支付状态
         erpWdtTrade.setPayStatus(PaymentStatus.FULLY_PAID.getValue());
         // 发货条件
@@ -97,8 +99,11 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
         erpWdtTrade.setSellerMemo(order.getSeller_memo());
 //        erpWdtTrade.setWarehouseNo(order.getWarehouse_code());
         erpWdtTrade.setWarehouseNo("beiliyou2-test");
+
         // 已付金额
         FsStoreOrder fsStoreOrder = fsStoreOrderService.selectFsStoreOrderByOrderCode(order.getPlatform_code());
+        // 运费金额
+        erpWdtTrade.setPostAmount(fsStoreOrder.getFreightPrice());
         if(ObjectUtils.isNotNull(fsStoreOrder)){
             erpWdtTrade.setPaid(fsStoreOrder.getPayMoney());
         }
@@ -106,10 +111,15 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
         List<FsStoreOrderItemVO> fsStoreOrderItemVOS = fsStoreOrderItemService.selectFsStoreOrderItemListByOrderId(fsStoreOrder.getId());
         List<ErpWdtOrder> erpWdtOrderList = new ArrayList<>();
 
+
+        // 优惠券金额
+        BigDecimal couponPrice = fsStoreOrder.getCouponPrice();
+        // 商品总价
+        BigDecimal totalPrice = fsStoreOrder.getTotalPrice();
         for (FsStoreOrderItemVO fsStoreOrderItem : fsStoreOrderItemVOS) {
             ErpWdtOrder erpWdtOrder = new ErpWdtOrder();
             //平台订单货品表主键
-            erpWdtOrder.setOid(String.valueOf(fsStoreOrderItem.getItemId()));
+            erpWdtOrder.setOid(String.format("%s%s",fsStoreOrderItem.getOrderCode(),fsStoreOrderItem.getItemId()));
             erpWdtOrder.setNum(BigDecimal.valueOf(fsStoreOrderItem.getNum()));
             FsStoreProduct fsStoreProduct = fsStoreProductService.selectFsStoreProductById(fsStoreOrderItem.getProductId());
             Asserts.check(ObjectUtils.isNotNull(fsStoreProduct),"该产品不存在! 产品id: {} ",fsStoreOrderItem.getProductId());
@@ -123,7 +133,8 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
             erpWdtOrder.setGoodsId(String.valueOf(fsStoreProduct.getProductId()));
             JSONObject jsonObject = JSONObject.parseObject(fsStoreOrderItem.getJsonInfo());
             erpWdtOrder.setSpecId(jsonObject.getString("sku"));
-            erpWdtOrder.setGoodsNo(jsonObject.getString("sku"));
+            erpWdtOrder.setGoodsNo("WDTPOS");
+            erpWdtOrder.setSpecNo("BLACK007");
             // 货品名称
             erpWdtOrder.setGoodsName(fsStoreProduct.getProductName());
             // 调整
@@ -131,12 +142,26 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
             // 优惠
             erpWdtOrder.setDiscount(BigDecimal.ZERO);
             // 分摊优惠
-            erpWdtOrder.setShareDiscount(BigDecimal.ZERO);
+            // 分摊比例
+            BigDecimal divide = fsStoreProduct.getPrice().divide(totalPrice, RoundingMode.HALF_UP);
+            erpWdtOrder.setShareDiscount(divide.multiply(couponPrice));
+
             erpWdtOrderList.add(erpWdtOrder);
         }
 
+        // 最后一个商品的分摊优惠等于总优惠减去前面分摊优惠之和
+        Asserts.check(CollectionUtils.isNotEmpty(erpWdtOrderList),"订单 {} 商品不能为空!",order.getPlatform_code());
+        long size = erpWdtOrderList.size();
+        if(size > 1) {
+            ErpWdtOrder erpWdtOrder = erpWdtOrderList.get(erpWdtOrderList.size() - 1);
+            erpWdtOrder.setShareDiscount(couponPrice.subtract(erpWdtOrderList.stream()
+                            .limit(size - 1L)
+                    .map(item -> Optional.ofNullable(item.getShareDiscount()).orElse(BigDecimal.ZERO))
+                    .reduce(BigDecimal.ZERO, BigDecimal::add)));
+        }
+
         erpWdtTrade.setOrderList(erpWdtOrderList);
-        erpWdtBusinessRequestParams.setTradeList(Arrays.asList(erpWdtTrade));
+        erpWdtBusinessRequestParams.setTradeList(new ArrayList<>(Arrays.asList(erpWdtTrade)));
 
         Map<String,String> map = new HashMap<>();
         map.put("shop_no",erpWdtBusinessRequestParams.getShopNo());
@@ -175,9 +200,9 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
     public ErpOrderQueryResponse getOrder(ErpOrderQueryRequert param) {
         WdtClient client = WdtClient.getInstance();
         Map<String,String> map = new HashMap<>();
-        map.put("tid",param.getCode());
+        map.put("src_tid",param.getCode());
         try {
-            String execute = client.execute("sales_api_trade_query.php", map);
+            String execute = client.execute("sales_trade_query.php", map);
             ParserConfig config = new ParserConfig();
             config.propertyNamingStrategy = PropertyNamingStrategy.CamelCase;
             ErpWdtTradeQueryResponse tradeQueryResponseDTO = JSON.parseObject(execute, ErpWdtTradeQueryResponse.class);

+ 0 - 6
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderServiceImpl.java

@@ -1428,12 +1428,6 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             payment.setPaytime(new Timestamp(timeLong));
         }
         payments.add(payment);
-//      if(order.getCouponPrice()!=null&&order.getCouponPrice().doubleValue()>0){
-//            ErpOrderPayment coupon=new ErpOrderPayment();
-//            coupon.setPay_type_code("coupon");
-//            coupon.setPayment(order.getCouponPrice().doubleValue());
-//            payments.add(coupon);
-//      }
         //1.新疆、西藏、内蒙古、海南的订单(代收+非代收)全部发EMS
         //2.全款订单选择中通,快递ID 452  ZTO 中通商城标快 ZTBK.17782167502
         //3.新疆  西藏 内蒙古 海南  全款订单走顺丰丰云配  【非全款】的就根据公司配置那来 配的哪个走哪个快递