Browse Source

商城代码,erp及退款

chenguo 6 days ago
parent
commit
4080ba75bc

+ 5 - 0
fs-service/src/main/java/com/fs/erp/service/impl/DfOrderServiceImpl.java

@@ -89,6 +89,11 @@ public class DfOrderServiceImpl implements IErpOrderService
         return getErpOrderResponse(order);
     }
 
+    @Override
+    public ErpOrderResponse addOrderScrm(ErpOrder order) {
+        return null;
+    }
+
     /**
      * 退款 取消订单
      *

+ 5 - 0
fs-service/src/main/java/com/fs/erp/service/impl/ErpOrderServiceImpl.java

@@ -59,6 +59,11 @@ public class ErpOrderServiceImpl implements IErpOrderService
         return response;
     }
 
+    @Override
+    public ErpOrderResponse addOrderScrm(ErpOrder order) {
+        return addOrder( order);
+    }
+
     @Override
     public ErpOrderResponse refundOrder(ErpRefundOrder order) {
         FsSysConfig sysConfig = configUtil.getSysConfig();

+ 5 - 0
fs-service/src/main/java/com/fs/erp/service/impl/HzOMSErpOrderServiceImpl.java

@@ -63,6 +63,11 @@ public class HzOMSErpOrderServiceImpl implements IErpOrderService {
         return null;
     }
 
+    @Override
+    public ErpOrderResponse addOrderScrm(ErpOrder order) {
+        return addOrder( order);
+    }
+
     @Override
     public ErpOrderResponse refundOrder(ErpRefundOrder order) {
         String orderCode = order.getOrderCode();

+ 5 - 1
fs-service/src/main/java/com/fs/erp/service/impl/JSTErpOrderServiceImpl.java

@@ -21,8 +21,10 @@ import com.fs.his.service.IFsStoreOrderService;
 import com.fs.his.service.IFsStoreProductService;
 import com.fs.hisStore.domain.FsStoreOrderItemScrm;
 import com.fs.hisStore.domain.FsStoreOrderScrm;
+import com.fs.hisStore.domain.FsStoreProductScrm;
 import com.fs.hisStore.service.IFsStoreOrderItemScrmService;
 import com.fs.hisStore.service.IFsStoreOrderScrmService;
+import com.fs.hisStore.service.IFsStoreProductScrmService;
 import com.fs.hisStore.vo.FsStoreOrderItemVO;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.util.Asserts;
@@ -58,6 +60,8 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
 
     @Autowired
     private IFsStoreProductService fsStoreProductService;
+    @Autowired
+    private IFsStoreProductScrmService fsStoreProductScrmService;
 
 //    @Autowired
 //    private FsStoreDeliversMapper fsStoreDeliversMapper;
@@ -300,7 +304,7 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
             orderItemDTO.setShopIId(orderItemDTO.getSkuId());//款式编码ID,当前没有这个目前就与SKU ID一致
             orderItemDTO.setPropertiesValue(sku);//商品属性
 
-            FsStoreProduct fsStoreProduct = fsStoreProductService.selectFsStoreProductById(item.getProductId());
+            FsStoreProductScrm fsStoreProduct = fsStoreProductScrmService.selectFsStoreProductById(item.getProductId());
 
             orderItemDTO.setAmount(fsStoreProduct.getPrice());
 

+ 5 - 0
fs-service/src/main/java/com/fs/erp/service/impl/K9OrderScrmServiceImpl.java

@@ -57,6 +57,11 @@ public class K9OrderScrmServiceImpl implements IErpOrderService {
         return addOmsOrder(order.getPlatform_code());
     }
 
+    @Override
+    public ErpOrderResponse addOrderScrm(ErpOrder order) {
+        return addOmsOrder(order.getPlatform_code());
+    }
+
 
     /**
      * 退款

+ 195 - 0
fs-service/src/main/java/com/fs/erp/service/impl/WdtErpOrderServiceImpl.java

@@ -26,6 +26,12 @@ import com.fs.his.service.IFsStoreOrderService;
 import com.fs.his.service.IFsStoreProductService;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.his.vo.FsStoreOrderItemVO;
+import com.fs.hisStore.domain.FsStoreOrderItemScrm;
+import com.fs.hisStore.domain.FsStoreOrderScrm;
+import com.fs.hisStore.domain.FsStoreProductScrm;
+import com.fs.hisStore.service.IFsStoreOrderItemScrmService;
+import com.fs.hisStore.service.IFsStoreOrderScrmService;
+import com.fs.hisStore.service.IFsStoreProductScrmService;
 import com.hc.openapi.tool.util.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
@@ -55,6 +61,15 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
     @Autowired
     private IFsStoreProductService fsStoreProductService;
 
+    @Autowired
+    private IFsStoreOrderScrmService fsStoreOrderScrmService;
+
+    @Autowired
+    private IFsStoreOrderItemScrmService fsStoreOrderItemScrmService;
+
+    @Autowired
+    private IFsStoreProductScrmService fsStoreProductScrmService;
+
 //    @Value("${fsConfig.erpWdShopCode}")
 //    private String shopCode;
 
@@ -83,6 +98,11 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
         return getErpOrderResponse(order);
     }
 
+    @Override
+    public ErpOrderResponse addOrderScrm(ErpOrder order) {
+        return getErpOrderResponseScrm(order);
+    }
+
     /**
      * 获取erp推送参数
      * @param order 订单参数
@@ -263,6 +283,181 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
         return new ErpOrderResponse();
     }
 
+    private ErpOrderResponse getErpOrderResponseScrm(ErpOrder order) {
+        FsSysConfig sysConfig = configUtil.getSysConfig();
+        String shopCode = sysConfig.getErpWdShopCode();
+
+        //测试环境sid、appkey、密钥请到旺店通开放平台-自助对接-申请测试环境内查看,测试环境url=https://sandbox.wangdian.cn/openapi2/
+        //调用正式环境时请将sid、appkey、appsecret切换为实际参数,参数在旺店通开放平台-自助对接-应用管理内应用状态为已上线的应用中查看,调用正式环境注意切换正式环境url=https://api.wangdian.cn/openapi2/
+
+        ErpWdtBusinessRequestParams erpWdtBusinessRequestParams = new ErpWdtBusinessRequestParams();
+        erpWdtBusinessRequestParams.setShopNo(shopCode);
+        erpWdtBusinessRequestParams.setSwitchMode(0);
+        ErpWdtTrade erpWdtTrade = new ErpWdtTrade();
+        FsStoreOrderScrm fsStoreOrder = fsStoreOrderScrmService.selectFsStoreOrderByOrderCode(order.getPlatform_code());
+        BigDecimal couponPrice = fsStoreOrder.getCouponPrice();
+        if (couponPrice == null) {
+            couponPrice = BigDecimal.ZERO;
+        }
+
+        // 平台状态
+        erpWdtTrade.setTradeStatus(TradeStatus.PAID_WAITING_FOR_SHIPMENT.getValue());
+
+        // 订单id
+        erpWdtTrade.setTid(order.getPlatform_code());
+
+
+        // 如果是货到付款
+        if("2".equals(fsStoreOrder.getPayType())){
+            // 支付状态
+            erpWdtTrade.setPayStatus(PaymentStatus.PARTIALLY_PAID.getValue());
+            // 发货条件
+            erpWdtTrade.setDeliveryTerm(DeliveryTerm.CASH_ON_DELIVERY.getValue());
+            // 货到付款金额 = 物流代收金额-优惠金额
+            erpWdtTrade.setCodAmount(fsStoreOrder.getPayDelivery().subtract(couponPrice));
+
+        } else if("3".equals(fsStoreOrder.getPayType())){
+            // 支付状态
+            erpWdtTrade.setPayStatus(PaymentStatus.UNPAID.getValue());
+            // 发货条件
+            erpWdtTrade.setDeliveryTerm(DeliveryTerm.CASH_ON_DELIVERY.getValue());
+            // 货到付款金额 = 物流代收金额-优惠金额
+            erpWdtTrade.setCodAmount(fsStoreOrder.getPayDelivery().subtract(couponPrice));
+        } else { // 如果是线上付款
+            // 支付状态
+            erpWdtTrade.setPayStatus(PaymentStatus.FULLY_PAID.getValue());
+            // 发货条件
+            erpWdtTrade.setDeliveryTerm(DeliveryTerm.PAYMENT_BEFORE_DELIVERY.getValue());
+        }
+
+        // 下单时间
+        erpWdtTrade.setTradeTime(order.getDeal_datetime());
+        // 支付时间
+        erpWdtTrade.setPayTime(order.getDeal_datetime());
+        // 分销类别
+        erpWdtTrade.setFenxiaoType(FenxiaoType.JINGXIAO.getValue());
+        // 客户网名
+        erpWdtTrade.setBuyerNick(order.getReceiver_name());
+        // 收件人姓名
+        erpWdtTrade.setReceiverName(order.getReceiver_name());
+        // 省份
+        erpWdtTrade.setReceiverProvince(order.getReceiver_province());
+        // 市
+        erpWdtTrade.setReceiverCity(order.getReceiver_city());
+        // 区
+        erpWdtTrade.setReceiverDistrict(order.getReceiver_district());
+        // 详细地址
+        erpWdtTrade.setReceiverAddress(order.getReceiver_address());
+        // 手机
+        erpWdtTrade.setReceiverMobile(order.getReceiver_mobile());
+        // 固定电话
+        erpWdtTrade.setReceiverTelno(order.getReceiver_mobile());
+        // 买家备注
+        erpWdtTrade.setBuyerMessage(order.getBuyer_memo());
+        // 卖家备注
+        erpWdtTrade.setSellerMemo(order.getSeller_memo());
+        erpWdtTrade.setWarehouseNo(order.getWarehouse_code());
+
+        // 运费金额
+        erpWdtTrade.setPostAmount(fsStoreOrder.getFreightPrice());
+        // 已付金额
+        if(ObjectUtils.isNotNull(fsStoreOrder)){
+            erpWdtTrade.setPaid(fsStoreOrder.getPayMoney());
+        }
+
+        List<com.fs.hisStore.vo.FsStoreOrderItemVO> fsStoreOrderItemVOS = fsStoreOrderItemScrmService.selectFsStoreOrderItemListByOrderId(fsStoreOrder.getId());
+        List<ErpWdtOrder> erpWdtOrderList = new ArrayList<>();
+        // 商品总价
+        BigDecimal totalPrice = fsStoreOrder.getTotalPrice();
+
+        // 总折扣金额 = 优惠券金额 + 折扣金额
+        BigDecimal totalDiscountPrice = BigDecimal.ZERO;
+        // 折扣金额
+        BigDecimal discountPrice = totalPrice.subtract(fsStoreOrder.getPayPrice());
+        totalDiscountPrice = couponPrice.add(discountPrice);
+
+        // 防止除零错误
+        if (totalPrice.compareTo(BigDecimal.ZERO) == 0) {
+            totalPrice = BigDecimal.ONE;
+        }
+
+        for (com.fs.hisStore.vo.FsStoreOrderItemVO fsStoreOrderItem : fsStoreOrderItemVOS) {
+            ErpWdtOrder erpWdtOrder = new ErpWdtOrder();
+            //平台订单货品表主键
+            erpWdtOrder.setOid(String.format("%s%s",fsStoreOrder.getOrderCode(),fsStoreOrderItem.getItemId()));
+            erpWdtOrder.setNum(BigDecimal.valueOf(fsStoreOrderItem.getNum()));
+            FsStoreProductScrm fsStoreProduct = fsStoreProductScrmService.selectFsStoreProductById(fsStoreOrderItem.getProductId());
+            Asserts.check(ObjectUtils.isNotNull(fsStoreProduct),"该产品不存在! 产品id: {} ",fsStoreOrderItem.getProductId());
+            // 单价
+            erpWdtOrder.setPrice(fsStoreProduct.getPrice());
+            // 状态
+            erpWdtOrder.setStatus(TradeStatus.PAID_WAITING_FOR_SHIPMENT.getValue());
+            // 退款状态
+            erpWdtOrder.setRefundStatus(RefundStatus.NO_REFUND.getValue());
+
+            // 平台货品ID
+            erpWdtOrder.setGoodsId(String.valueOf(fsStoreProduct.getProductId()));
+            JSONObject jsonObject = JSON.parseObject(fsStoreOrderItem.getJsonInfo());
+            erpWdtOrder.setSpecId(jsonObject.getString("sku"));
+            erpWdtOrder.setGoodsNo(jsonObject.getString("barCode"));
+            erpWdtOrder.setSpecNo(jsonObject.getString("sku"));
+            // 货品名称
+            erpWdtOrder.setGoodsName(fsStoreProduct.getProductName());
+            // 调整
+            erpWdtOrder.setAdjustAmount(BigDecimal.ZERO);
+            // 优惠
+            erpWdtOrder.setDiscount(BigDecimal.ZERO);
+            // 分摊优惠
+            // 分摊比例
+            BigDecimal price = fsStoreProduct.getPrice().multiply(BigDecimal.valueOf(fsStoreOrderItem.getNum()));
+            BigDecimal divide = price.divide(totalPrice, RoundingMode.HALF_UP);
+            erpWdtOrder.setShareDiscount(divide.multiply(totalDiscountPrice));
+
+            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(totalDiscountPrice.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(new ArrayList<>(Arrays.asList(erpWdtTrade)));
+
+        Map<String,String> map = new HashMap<>();
+        map.put("shop_no",erpWdtBusinessRequestParams.getShopNo());
+        map.put("switch_mode", String.valueOf(erpWdtBusinessRequestParams.getSwitchMode()));
+        map.put("trade_list", convertToSnakeCase(erpWdtBusinessRequestParams.getTradeList()));
+
+
+        try {
+            String response = client.execute("trade_push.php", map);
+            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();
+                erpOrderResponse.setCode(order.getPlatform_code());
+                erpOrderResponse.setSuccess(true);
+                erpOrderResponse.setRequestRawData(JSON.toJSONString(map));
+                erpOrderResponse.setResponseRawData(response);
+                return erpOrderResponse;
+            } else {
+                throw new RuntimeException(String.format("订单推送失败,原因: %s",erpWdtApiResponse.getMessage()));
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return new ErpOrderResponse();
+    }
+
     /**
      * 获取erp推送参数
      * @param order 订单参数

+ 4 - 0
fs-service/src/main/java/com/fs/his/config/FsSysConfig.java

@@ -70,4 +70,8 @@ public class FsSysConfig {
     String codeUrl;
 
     String hookUrl;//hook地址
+
+
+    //不推送erp的公司id
+    List<Long> noErpCompany;
 }

+ 8 - 4
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -1530,7 +1530,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService
     @Override
     public R createOmsOrder(Long orderId) throws ParseException {
         FsStoreOrderScrm order=fsStoreOrderMapper.selectFsStoreOrderById(orderId);
-        FsErpConfig erpConfig = configUtil.getErpConfig();
+        FsSysConfig erpConfig = configUtil.getSysConfig();
         List<Long> noErpCompany = erpConfig.getNoErpCompany();
         if (noErpCompany.contains(order.getCompanyId())) {
             log.info("订单:{},相关公司不推送erp", order.getOrderCode());
@@ -1541,6 +1541,9 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService
             return R.error("订单:" + order.getOrderCode() +",已推送erp/订单状态不正确");
         }
         ErpOrder erpOrder = getErpOrder(order);
+        if(erpOrderService == jSTOrderService){
+            erpOrder.setShop_code(erpConfig.getErpJstShopCode());
+        }
         ErpOrderResponse response= erpOrderService.addOrderScrm(erpOrder);
 //        ErpOrderResponse response= k9OrderService.addOmsOrder(order.getId());
 
@@ -1556,7 +1559,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService
 
     @Override
     public ErpOrder getErpOrder(FsStoreOrderScrm order) throws ParseException {
-        FsErpConfig erpConfig = configUtil.getErpConfig();
+        FsSysConfig erpConfig = configUtil.getSysConfig();
         ErpOrder erpOrder=new ErpOrder();
         if (order.getCompanyId()!=null){
             erpOrder.setVip_code(order.getUserId().toString()+ order.getCompanyId().toString());
@@ -1566,6 +1569,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService
         erpOrder.setPlatform_code(order.getOrderCode());
         erpOrder.setWarehouse_code(erpConfig.getErpWarehouseCode());
         erpOrder.setShop_code(erpConfig.getErpShopCode());
+        erpOrder.setBuyer_account(order.getRealName());
 
 //      erpOrder.setPost_fee(order.getTotalPostage().doubleValue());
         erpOrder.setSeller_memo(order.getMark());
@@ -2706,8 +2710,8 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService
     private IErpOrderService getErpService(){
         //判断是否开启erp
         IErpOrderService erpOrderService = null;
-        FsErpConfig erpConfig = configUtil.getErpConfig();
-        FsSysConfig sysConfig = configUtil.getSysConfig();
+        //FsErpConfig erpConfig = configUtil.getErpConfig();
+        FsSysConfig erpConfig = configUtil.getSysConfig();
         Integer erpOpen = erpConfig.getErpOpen();
         if (erpOpen != null && erpOpen == 1) {
             //判断erp类型

+ 19 - 5
fs-service/src/main/java/com/fs/task/StoreTask.java

@@ -16,6 +16,7 @@ import com.fs.erp.dto.ErpOrderQueryRequert;
 import com.fs.erp.dto.ErpOrderQueryResponse;
 import com.fs.erp.service.IErpGoodsService;
 import com.fs.erp.service.IErpOrderService;
+import com.fs.his.config.FsSysConfig;
 import com.fs.his.dto.ExpressInfoDTO;
 import com.fs.his.service.IFsExpressService;
 import com.fs.his.service.IFsUserService;
@@ -116,8 +117,16 @@ public class StoreTask
     private IErpOrderService wdtOrderService;
 
     @Autowired
-    @Qualifier("k9OrderScrmServiceImpl")
-    private IErpOrderService k9OrderService;
+    @Qualifier("hzOMSErpOrderServiceImpl")
+    private IErpOrderService hzOMSOrderService;
+
+    @Autowired
+    @Qualifier("dfOrderServiceImpl")
+    private IErpOrderService dfOrderService;
+
+    @Autowired
+    @Qualifier("JSTErpOrderServiceImpl")
+    private IErpOrderService jSTOrderService;
 
     @Autowired
     private ConfigUtil configUtil;
@@ -444,7 +453,7 @@ public class StoreTask
     private IErpOrderService getErpOrderService(){
         //判断是否开启erp
         IErpOrderService erpOrderService = null;
-        FsErpConfig erpConfig = configUtil.getErpConfig();
+        FsSysConfig erpConfig = configUtil.getSysConfig();
         Integer erpOpen = erpConfig.getErpOpen();
         if (erpOpen != null && erpOpen == 1) {
             //判断erp类型
@@ -457,8 +466,13 @@ public class StoreTask
                     //旺店通
                     erpOrderService = wdtOrderService;
                 } else if (erpType == 3) {
-                    //旺店通
-                    erpOrderService = k9OrderService;
+                    //瀚智
+                    erpOrderService = hzOMSOrderService;
+                } else if (erpType == 4) {
+                    //瀚智
+                    erpOrderService = dfOrderService;
+                } else if (erpType == 5) {
+                    erpOrderService = jSTOrderService;
                 }
             }
         }