Browse Source

feat:计算车费按照配置计算

wrj 8 tháng trước cách đây
mục cha
commit
3e25de16a8

+ 10 - 9
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TFareSetting.java

@@ -4,6 +4,7 @@ package com.ylx.massage.domain;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -17,11 +18,11 @@ public class TFareSetting extends Model<TFareSetting> {
     //主键
     private String id;
     //起步价
-    private Double baseFare;
+    private BigDecimal baseFare;
     //起步距离(公里)
-    private Double baseDistance;
+    private BigDecimal baseDistance;
     //超出起步价后每公里费用
-    private Double additionalFarePer;
+    private BigDecimal additionalFarePer;
     //是否启用0否 1是
     private Integer enable;
     //部门id
@@ -44,27 +45,27 @@ public class TFareSetting extends Model<TFareSetting> {
         this.id = id;
     }
 
-    public Double getBaseFare() {
+    public BigDecimal getBaseFare() {
         return baseFare;
     }
 
-    public void setBaseFare(Double baseFare) {
+    public void setBaseFare(BigDecimal baseFare) {
         this.baseFare = baseFare;
     }
 
-    public Double getBaseDistance() {
+    public BigDecimal getBaseDistance() {
         return baseDistance;
     }
 
-    public void setBaseDistance(Double baseDistance) {
+    public void setBaseDistance(BigDecimal baseDistance) {
         this.baseDistance = baseDistance;
     }
 
-    public Double getAdditionalFarePer() {
+    public BigDecimal getAdditionalFarePer() {
         return additionalFarePer;
     }
 
-    public void setAdditionalFarePer(Double additionalFarePer) {
+    public void setAdditionalFarePer(BigDecimal additionalFarePer) {
         this.additionalFarePer = additionalFarePer;
     }
 

+ 18 - 3
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TJsDay.java

@@ -4,6 +4,7 @@ package com.ylx.massage.domain;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.ylx.common.annotation.Excel;
+import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
@@ -17,50 +18,64 @@ import java.util.Date;
  * @since 2024-08-14 18:00:31
  */
 @SuppressWarnings("serial")
+@ApiModel(value = "TJsDay", description = "技师数据统计")
 public class TJsDay extends Model<TJsDay> {
     //主键
-
-    @TableField("order_no")
-    @ApiModelProperty("订单号")
+    @ApiModelProperty("id")
     private String id;
     //在线时长
     @Excel(name = "在线时长")
+    @ApiModelProperty("在线时长")
     private Integer onLine;
     //订单数
+    @ApiModelProperty("订单数")
     @Excel(name = "订单数")
     private Integer orderNum;
     //营业额
+    @ApiModelProperty("营业额")
     @Excel(name = "营业额")
     private BigDecimal turnover;
     //加钟数
+    @ApiModelProperty("add_num")
     @Excel(name = "加钟数")
     private Integer addNum;
     //升级数
+    @ApiModelProperty("升级数")
     @Excel(name = "升级数")
     private Integer upgradeNum;
     //充值
+    @ApiModelProperty("充值")
     @Excel(name = "充值")
     private BigDecimal recharge;
     //技师id
+    @ApiModelProperty("技师id")
     private String jsId;
     //技师openid
+    @ApiModelProperty("技师openid")
     private String openId;
     //统计日期
+    @ApiModelProperty("统计日期")
     @Excel(name = "统计日期")
     private String countDate;
     //技师姓名
+    @ApiModelProperty("技师姓名")
     @Excel(name = "技师姓名")
     private String name;
     //部门id
+    @ApiModelProperty("部门id")
     private String deptId;
     //部门名称
+    @ApiModelProperty("部门名称")
     @Excel(name = "部门名称")
     private String deptName;
     //系统创建时间
+    @ApiModelProperty("系统创建时间")
     private Date createTime;
     //系统修改时间
+    @ApiModelProperty("系统修改时间")
     private Date updateTime;
     //是否删除0否1是
+    @ApiModelProperty("是否删除0否1是")
     private Integer isDelete;
 
 

+ 2 - 2
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TOrderServiceImpl.java

@@ -157,7 +157,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         if (order.getDistance() != null && order.getDistance().compareTo(BigDecimal.ZERO) > 0) {
             //判断是否可以免车费
             if (!this.isFree(js, order.getDistance())) {
-                BigDecimal bigDecimal = massageUtil.calculateTaxiFare(order.getDistance());
+                BigDecimal bigDecimal = massageUtil.calculateTaxiFare(order.getDistance(),order.getDeptId());
                 order.setFare(bigDecimal.setScale(MassageConstants.INTEGER_TWO, RoundingMode.HALF_UP));
             }
         }
@@ -235,7 +235,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
             if (order.getDistance() != null && order.getDistance().compareTo(BigDecimal.ZERO) > 0) {
                 //判断是否可以免车费
                 if (!this.isFree(js, order.getDistance())) {
-                    BigDecimal bigDecimal = massageUtil.calculateTaxiFare(order.getDistance());
+                    BigDecimal bigDecimal = massageUtil.calculateTaxiFare(order.getDistance(),order.getDeptId());
                     order.setFare(bigDecimal.setScale(MassageConstants.INTEGER_TWO, RoundingMode.HALF_UP));
                 }
             }

+ 23 - 7
nightFragrance-massage/src/main/java/com/ylx/massage/utils/MassageUtil.java

@@ -1,9 +1,13 @@
 package com.ylx.massage.utils;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ylx.massage.domain.TFareSetting;
+import com.ylx.massage.service.TFareSettingService;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 
@@ -13,7 +17,7 @@ import java.math.RoundingMode;
  */
 
 @Component
-public class  MassageUtil {
+public class MassageUtil {
 
     @Value("${fare.base-fare}")
     private BigDecimal baseFare;
@@ -24,15 +28,27 @@ public class  MassageUtil {
     @Value("${fare.base-distance-km}")
     private BigDecimal baseDistanceKm;
 
+    @Resource
+    private TFareSettingService fareSettingService;
+
     /**
      * 计算出租车费用
+     *
      * @param distance 全程距离(公里)
      * @return 费用总额(元)
      */
-    public BigDecimal calculateTaxiFare(BigDecimal distance) {
-        final BigDecimal BASE_FARE = baseFare; // 起步价
-        final BigDecimal ADDITIONAL_FARE_PER_KM = additionalFarePerKm; // 超出起步价后每公里费用
-        final BigDecimal BASE_DISTANCE_KM = baseDistanceKm; // 起步距离(公里)
+    public BigDecimal calculateTaxiFare(BigDecimal distance, String deptId) {
+        BigDecimal BASE_FARE = baseFare; // 起步价
+        BigDecimal ADDITIONAL_FARE_PER_KM = additionalFarePerKm; // 超出起步价后每公里费用
+        BigDecimal BASE_DISTANCE_KM = baseDistanceKm; // 起步距离(公里)
+        LambdaQueryWrapper<TFareSetting> tFareSettingLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        tFareSettingLambdaQueryWrapper.eq(TFareSetting::getDeptId, deptId).eq(TFareSetting::getEnable, 1);
+        TFareSetting fareSetting = fareSettingService.getOne(tFareSettingLambdaQueryWrapper);
+        if (null != fareSetting) {
+            BASE_FARE = fareSetting.getBaseFare();
+            ADDITIONAL_FARE_PER_KM = fareSetting.getAdditionalFarePer();
+            BASE_DISTANCE_KM = fareSetting.getBaseDistance();
+        }
 
         // 计算超出起步价的公里数,注意应该向上取整,因为不足1公里也要按1公里计费
         BigDecimal extraKms = distance.subtract(BASE_DISTANCE_KM).setScale(0, RoundingMode.UP);
@@ -40,8 +56,8 @@ public class  MassageUtil {
         // 计算总费用
 
         BigDecimal totalFare = BASE_FARE;
-        if(extraKms.compareTo(BigDecimal.ZERO) > 0) {
-            totalFare= totalFare.add(extraKms.multiply(ADDITIONAL_FARE_PER_KM));
+        if (extraKms.compareTo(BigDecimal.ZERO) > 0) {
+            totalFare = totalFare.add(extraKms.multiply(ADDITIONAL_FARE_PER_KM));
         }
         return totalFare.multiply(new BigDecimal("2"));
     }