|
@@ -0,0 +1,104 @@
|
|
|
|
|
+package com.ruoyi.logistics.service.impl;
|
|
|
|
|
+
|
|
|
|
|
+import com.ruoyi.common.core.utils.StringUtils;
|
|
|
|
|
+import com.ruoyi.logistics.domain.*;
|
|
|
|
|
+import com.ruoyi.logistics.service.IBizInancialFeeItemsService;
|
|
|
|
|
+import com.ruoyi.logistics.service.IBizWaybillCostDetailsService;
|
|
|
|
|
+import com.ruoyi.logistics.service.IBizWaybillOrderService;
|
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 费用明细回调入库
|
|
|
|
|
+ *
|
|
|
|
|
+ * @author zxf
|
|
|
|
|
+ * @date 2026-02-03
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
|
|
+@Service
|
|
|
|
|
+public class FeePushService {
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private IBizWaybillOrderService bizWaybillOrderService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private IBizInancialFeeItemsService bizInancialFeeItemsService;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private IBizWaybillCostDetailsService bizWaybillCostDetailsService;
|
|
|
|
|
+ private static final Logger logger = LoggerFactory.getLogger(FeePushService.class);
|
|
|
|
|
+
|
|
|
|
|
+ public boolean processFeePush(SfFeePushRequest request) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ String waybillNo = request.getWaybillNo();
|
|
|
|
|
+ String orderNo = request.getOrderNo();
|
|
|
|
|
+ BigDecimal totalWeight = request.getMeterageWeightQty();
|
|
|
|
|
+ Integer quantity = request.getQuantity();
|
|
|
|
|
+ String productName = request.getProductName();
|
|
|
|
|
+ List<SfFeeInfo> feeList = request.getFeeList();
|
|
|
|
|
+ logger.info("开始处理运费清单 - 运单号: {}, 订单号: {}, 产品: {}, 计费重量: {}kg",
|
|
|
|
|
+ waybillNo, orderNo, productName, totalWeight);
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 根据订单号查询本地订单 如果不存在该订单号 则不进行明细的入库
|
|
|
|
|
+ BizWaybillOrder bizWaybillOrder= new BizWaybillOrder();
|
|
|
|
|
+ bizWaybillOrder.setWaybillNo(orderNo);
|
|
|
|
|
+ bizWaybillOrder.setExternalWaybillNo(waybillNo);
|
|
|
|
|
+ List<BizWaybillOrder> orderList=bizWaybillOrderService.selectBizWaybillOrderList(bizWaybillOrder);
|
|
|
|
|
+ if (orderList.size()==0) {
|
|
|
|
|
+ logger.error("订单不存在: {}", orderNo);
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ //存在的话 就去拿到这个部门id 要知道这个供应商的费率
|
|
|
|
|
+ Long deptId=orderList.get(0).getDeptId();
|
|
|
|
|
+ //先写死
|
|
|
|
|
+ String Rate="1.5";
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 目前订单主表不涉及费用总计啥的 先不管
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 处理费用明细
|
|
|
|
|
+ if (feeList != null && !feeList.isEmpty()) {
|
|
|
|
|
+ for (SfFeeInfo fee : feeList) {
|
|
|
|
|
+ BigDecimal feeAmt = fee.getFeeAmt();
|
|
|
|
|
+ //回调回来的 费用类型 还需与系统 费用类型表-biz_inancial_fee_items
|
|
|
|
|
+ String feeTypeCode = fee.getFeeTypeCode();
|
|
|
|
|
+ BizInancialFeeItems bizInancialFeeItems= new BizInancialFeeItems();
|
|
|
|
|
+ bizInancialFeeItems.setFeeItemCategory("sf");
|
|
|
|
|
+ bizInancialFeeItems.setExtFeeCode(feeTypeCode);
|
|
|
|
|
+ List<BizInancialFeeItems> feeItemsList=bizInancialFeeItemsService.selectBizInancialFeeItemsList(bizInancialFeeItems);
|
|
|
|
|
+ BizWaybillCostDetails bizWaybillCostDetails= new BizWaybillCostDetails();
|
|
|
|
|
+ //顺丰的费用类型代码无法在费用类型表中匹配 这里默认给值 给到外部叫什么名字
|
|
|
|
|
+ bizWaybillCostDetails.setFeeName(feeItemsList.get(0).getExtFeeName());
|
|
|
|
|
+ if(StringUtils.isBlank(feeItemsList.get(0).getFeeItemCode())){
|
|
|
|
|
+ bizWaybillCostDetails.setFeeItemCode("00");
|
|
|
|
|
+ bizWaybillCostDetails.setFeeItemName("瑞鲸-其他");
|
|
|
|
|
+ }
|
|
|
|
|
+ else{
|
|
|
|
|
+ bizWaybillCostDetails.setFeeItemCode(feeItemsList.get(0).getFeeItemCode());
|
|
|
|
|
+ bizWaybillCostDetails.setFeeItemName(feeItemsList.get(0).getFeeItemName());
|
|
|
|
|
+ }
|
|
|
|
|
+ bizWaybillCostDetails.setAmount(feeAmt);
|
|
|
|
|
+ BigDecimal deptRate = new BigDecimal(Rate);
|
|
|
|
|
+ BigDecimal result = feeAmt.multiply(deptRate);
|
|
|
|
|
+ bizWaybillCostDetails.setRateAmount(result);
|
|
|
|
|
+ bizWaybillCostDetails.setDeptId(deptId);
|
|
|
|
|
+ // 记录费用明细
|
|
|
|
|
+ bizWaybillCostDetailsService.insertBizWaybillCostDetails(bizWaybillCostDetails);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ logger.error("处理运费清单失败: {}", e.getMessage(), e);
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+}
|