zangbin 3 rokov pred
rodič
commit
5c29972844

+ 198 - 0
lb-app/src/main/java/com/ydd/app/service/impl/ApiDadaValuationServiceImpl.java

@@ -26,6 +26,7 @@ import com.ydd.module.service.*;
 import com.ydd.module.utils.CommonUtils;
 import com.ydd.third.common.config.DeliveryConfig;
 import com.ydd.third.common.utils.AddressLngLatExchanger;
+import com.ydd.third.common.utils.CoordinateUtils;
 import com.ydd.third.common.vo.GDMapTripResult;
 import com.ydd.third.common.vo.ResObject;
 import com.ydd.third.common.vo.shop.AmountResultVo;
@@ -39,11 +40,16 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
+import static java.math.BigDecimal.ROUND_DOWN;
+
 /**
  * 达达配送商-计价serviceImpl
  * @author 叶君翔
@@ -283,6 +289,198 @@ public class ApiDadaValuationServiceImpl implements ApiDadaValuationService {
 
     }
 
+    public OrderFreightDto dadaValuation(Long shopId, Member member, OrderReq orderReq) {
+        try {
+            BigDecimal valuationPrice = BigDecimal.ZERO;
+
+            // 获取合适运费包(门店>商户>通用)
+            Long packageId = iPackageFreightService.getPackageId(shopId, member);
+            PackageFreight packageFreight = iPackageFreightService.getById(packageId);
+            if (packageFreight == null) {
+              log.warn("无合适运费包!");
+              return null;
+            }
+            // 基础运费
+            if (packageFreight.getAmount() != null) {
+              valuationPrice = valuationPrice.add(packageFreight.getAmount());
+            }
+
+            // 订单加价详情
+            OrderFreightDto orderFreight = new OrderFreightDto();
+            orderFreight.setOrderId(orderReq.getOrderId());
+            orderFreight.setFreightPackageId(packageFreight.getId());
+            orderFreight.setAmount(packageFreight.getAmount());
+            orderFreight.setMaxAmount(packageFreight.getMaxAmount());
+
+            String startLonLat = orderReq.getSendAddress().getLng() + "," + orderReq.getSendAddress().getLat();
+            String endLonLat = orderReq.getReceiptAddress().getLng() + "," + orderReq.getReceiptAddress().getLat();
+            // 获取订单距离
+            GDMapTripResult bicyclingInfo = AddressLngLatExchanger.getBicyclingInfo(startLonLat, endLonLat);
+            orderFreight.setDistance(Integer.valueOf(bicyclingInfo.getDistance() + ""));
+            // 获取距离加价配置
+            List<PackageFreightDistance> distanceList = iPackageFreightDistanceService.getPackageById(packageId);
+            if (distanceList != null && distanceList.size() > 0) {
+                BigDecimal orderKm = new BigDecimal(String.valueOf(bicyclingInfo.getDistance())).divide(new BigDecimal(String.valueOf(1000)), 2, BigDecimal.ROUND_UP);
+                BigDecimal distanceAdd = new BigDecimal(BigInteger.ZERO);
+                for (PackageFreightDistance distance : distanceList) {
+                    // 起始 < orderKm <= 无穷大
+                    if (distance.getEndDistance() == null && orderKm.compareTo(distance.getStartDistance()) == 1) {
+                        // 计算加价次数
+                        BigDecimal addNum = orderKm.subtract(distance.getStartDistance()).divide(distance.getDistance())
+                                .setScale(0, ROUND_DOWN);
+                        valuationPrice = valuationPrice.add(distance.getPrice().multiply(addNum));
+                        distanceAdd = distanceAdd.add(distance.getPrice().multiply(addNum));
+                    }
+
+                    // 起始 < orderKm <= 结束值
+                    if (distance.getEndDistance() != null && orderKm.compareTo(distance.getEndDistance()) == 1) {
+                        // 计算加价次数
+                        BigDecimal addNum = distance.getEndDistance().subtract(distance.getStartDistance()).divide(distance.getDistance())
+                                .setScale(0, ROUND_DOWN);
+                        valuationPrice = valuationPrice.add(distance.getPrice().multiply(addNum));
+                        distanceAdd = distanceAdd.add(distance.getPrice().multiply(addNum));
+                    }
+
+                    if (distance.getEndDistance() != null &&
+                            (orderKm.compareTo(distance.getStartDistance()) == 1 && orderKm.compareTo(distance.getEndDistance()) < 1)) {
+                        // 计算加价次数
+                        BigDecimal addNum = orderKm.subtract(distance.getStartDistance()).divide(distance.getDistance())
+                                .setScale(0, ROUND_DOWN);
+                        valuationPrice = valuationPrice.add(distance.getPrice().multiply(addNum));
+                        distanceAdd = distanceAdd.add(distance.getPrice().multiply(addNum));
+                    }
+                }
+                orderFreight.setDistanceAdd(distanceAdd);
+            }
+
+            // 获取重量加价配置
+            List<PackageFreightWeight> weightList = iPackageFreightWeightService.getPackageById(packageId);
+            if(weightList != null && weightList.size() > 0) {
+                BigDecimal orderWeight = new BigDecimal(Integer.toString(orderReq.getWeight()));
+                BigDecimal weightAdd = new BigDecimal(BigInteger.ZERO);
+                for (PackageFreightWeight weight : weightList) {
+                    // 起始 < orderWeight <= 无穷大
+                    if (weight.getEndWeight() == null && orderWeight.compareTo(weight.getStartWeight()) == 1) {
+                        // 计算加价次数
+                        BigDecimal addNum = orderWeight.subtract(weight.getStartWeight()).divide(weight.getWeight())
+                                .setScale(0, ROUND_DOWN);
+                        valuationPrice = valuationPrice.add(weight.getPrice().multiply(addNum));
+                        weightAdd = weightAdd.add(weight.getPrice().multiply(addNum));
+                    }
+
+                    // 起始 < orderWeight <= 结束值
+                    if (weight.getEndWeight() != null && orderWeight.compareTo(weight.getEndWeight()) == 1) {
+                        // 计算加价次数
+                        BigDecimal addNum = weight.getEndWeight().subtract(weight.getStartWeight()).divide(weight.getWeight())
+                                .setScale(0, ROUND_DOWN);
+                        valuationPrice = valuationPrice.add(weight.getPrice().multiply(addNum));
+                        weightAdd = weightAdd.add(weight.getPrice().multiply(addNum));
+                    }
+
+                    if (weight.getEndWeight() != null &&
+                            (orderWeight.compareTo(weight.getStartWeight()) == 1 && orderWeight.compareTo(weight.getEndWeight()) < 1)) {
+                        // 计算加价次数
+                        BigDecimal addNum = orderWeight.subtract(weight.getStartWeight()).divide(weight.getWeight())
+                                .setScale(0, ROUND_DOWN);
+                        valuationPrice = valuationPrice.add(weight.getPrice().multiply(addNum));
+                        weightAdd = weightAdd.add(weight.getPrice().multiply(addNum));
+                    }
+                }
+                orderFreight.setWeightAdd(weightAdd);
+            }
+
+            // 获取商品金额加价配置
+            List<PackageFreightMoney> moneyList = iPackageFreightMoneyService.getPackageById(packageId);
+            if (moneyList != null && moneyList.size() > 0) {
+                BigDecimal orderAmount = orderReq.getProductAmount();
+                BigDecimal moneyAdd = new BigDecimal(BigInteger.ZERO);
+                for (PackageFreightMoney money : moneyList) {
+                    // 起始 < orderAmount <= 结束值
+                    if (orderAmount.compareTo(money.getEndMoney()) == 1) {
+                        valuationPrice = valuationPrice.add(money.getPrice());
+                        moneyAdd = moneyAdd.add(money.getPrice());
+                    }
+
+                    if (orderAmount.compareTo(money.getStartMoney()) == 1 && orderAmount.compareTo(money.getEndMoney()) < 1) {
+                        valuationPrice = valuationPrice.add(money.getPrice());
+                        moneyAdd = moneyAdd.add(money.getPrice());
+                    }
+                }
+                orderFreight.setProductAmountAdd(moneyAdd);
+            }
+
+            // 获取时间段加价配置
+            List<PackageFreightTime> timeList = iPackageFreightTimeService.getPackageById(packageId);
+            if (timeList != null && timeList.size() > 0) {
+                Date newDate = new Date();
+                SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
+                String now = sdf.format(newDate);
+                BigDecimal timeAdd = new BigDecimal(BigInteger.ZERO);
+                for (PackageFreightTime time : timeList) {
+                    // 起始时间段 < now <= 结束时间段
+                    if (now.compareTo(time.getEndTime()) > 0) {
+                        valuationPrice = valuationPrice.add(time.getPrice());
+                        timeAdd = timeAdd.add(time.getPrice());
+                    }
+
+                    if (now.compareTo(time.getStartTime()) > 0 && (now.compareTo(time.getEndTime()) < 0 || now.compareTo(time.getEndTime()) == 0)) {
+                        valuationPrice = valuationPrice.add(time.getPrice());
+                        timeAdd = timeAdd.add(time.getPrice());
+                    }
+                }
+                orderFreight.setTimeAdd(timeAdd);
+            }
+
+            // 获取日期加价配置
+            List<PackageFreightDate> dateList = iPackageFreightDateService.getPackageById(packageId);
+            if (dateList != null && dateList.size() > 0) {
+                Date newDate = new Date();
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                Date now = sdf.parse(sdf.format(newDate));
+                BigDecimal dateAdd = new BigDecimal(BigInteger.ZERO);
+                for (PackageFreightDate date : dateList) {
+                    // 起始日期 < now <= 结束日期
+                    if (now.getTime() > date.getEndDate().getTime()) {
+                        valuationPrice = valuationPrice.add(date.getPrice());
+                        dateAdd = dateAdd.add(date.getPrice());
+                    }
+
+                    if (now.getTime() > date.getStartDate().getTime() && now.getTime() <= date.getEndDate().getTime()) {
+                        valuationPrice = valuationPrice.add(date.getPrice());
+                        dateAdd = dateAdd.add(date.getPrice());
+                    }
+                }
+                orderFreight.setDateAdd(dateAdd);
+            }
+
+            // 获取每周加价配置
+            List<PackageFreightWeek> weekList = iPackageFreightWeekService.getPackageById(packageId);
+            if (weekList != null && weekList.size() > 0) {
+                Calendar calendar = Calendar.getInstance();
+                Integer todayWeek = calendar.get(Calendar.DAY_OF_WEEK);
+                BigDecimal weekAdd = new BigDecimal(BigInteger.ZERO);
+                for (PackageFreightWeek week : weekList) {
+                    if (todayWeek.equals(week.getWeek())) {
+                        valuationPrice = valuationPrice.add(week.getPrice());
+                        weekAdd = weekAdd.add(week.getPrice());
+                    }
+                }
+                orderFreight.setWeekAdd(weekAdd);
+            }
+
+            // 加价超过最高运费,返回最高运费
+            if (packageFreight.getMaxAmount() != null && packageFreight.getMaxAmount().compareTo(valuationPrice) < 0) {
+                orderFreight.setDeliveryAmount(packageFreight.getMaxAmount());
+            } else {
+                orderFreight.setDeliveryAmount(valuationPrice);
+            }
+            return orderFreight;
+        }catch (Exception e) {
+            log.error("运费包计算异常", e);
+            return null;
+        }
+    }
+
     private ValuationRes queryOrderDeliverFee(OrderReq orderReq, DeliveryInfo delivery, Long merchantId, Long shopId, OrderFreightDto orderFreight) {
         orderReq.setOrderSn(SnCodeUtils.createSn());
         orderReq.setAmount(orderReq.getProductAmount());

+ 131 - 0
web-ui/src/views/module/dadaStatistics/rechargeStatistics.vue

@@ -0,0 +1,131 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch">
+      <el-form-item label="手机号" prop="mobile">
+        <el-input
+          v-model="queryParams.mobile"
+          placeholder="请输入手机号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="商家名称" prop="merchantName">
+        <el-input
+          v-model="queryParams.merchantName"
+          placeholder="请输入商家名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="充值时间" prop="createTime">
+        <el-date-picker v-model="date" type="datetimerange" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间"
+                        :default-time="['00:00:00', '23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search"  @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh"  @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <Pagination uri="/module/memberBalanceLog/countRecharge" :request-params="queryParams" ref="pagination" :showIndex="false">
+      <el-table-column label="用户名/手机号" align="center" prop="member">
+        <template slot-scope="scope">
+          <span>{{ scope.row.nickname }}</span><br/>
+          <span>{{ scope.row.mobile }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="日期" align="center" prop="day" />
+      <el-table-column label="商家名称" align="center" prop="merchantName">
+        <template slot-scope="scope">
+          <span v-if="scope.row.merchantName != null">{{ scope.row.merchantName }}</span>
+          <span v-else> -- </span>
+        </template>
+      </el-table-column>
+      <el-table-column label="充值金额(元)" align="center" prop="amount">
+        <template slot-scope="scope">
+          <span>¥{{ scope.row.amount }}</span>
+        </template>
+      </el-table-column>
+
+    </Pagination>
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Paginations'
+
+export default {
+  name: "rechangeStatistics",
+  components: {
+    Pagination
+  },
+  data() {
+    return {
+      merchantList: [],
+      // 遮罩层
+      loading: true,
+      date:[],
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 用户账户明细表格数据
+      memberBalanceLogList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        nickname: undefined,
+        mobile: undefined,
+        merchantName: undefined,
+        memberType: undefined,
+        startTime: undefined,
+        endTime: undefined
+      },
+      
+    };
+  },
+  created() {
+    this.getList();
+  },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      if (this.date !== null && this.date !== "") {
+        if (this.date[0] !== undefined) {
+          this.queryParams.startTime = this.date[0];
+          this.queryParams.endTime = this.date[1];
+        }
+      } else {
+        this.queryParams.startTime = "";
+        this.queryParams.endTime = "";
+      }
+      this.$refs.pagination.handleSearch(true)
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.date = []
+      this.queryParams.startTime = "";
+      this.queryParams.endTime = "";
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+  
+};
+</script>