From 9828db9febf4ad5cb0b79a72eedca6922b466104 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期日, 27 七月 2025 13:54:52 +0800
Subject: [PATCH] 用户端修改  推广功能

---
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TDriverPromotionActivityMapper.java               |   17 ++
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java                  |   23 ++
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java                                  |    5 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java                         |    2 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java             |    2 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriverPromotionActivity.java                   |  105 +++++++++++++
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TDriverPromotionActivityMapper.xml        |    7 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java     |   43 +++++
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java                      |   41 +++++
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/IOrderTaxiService.java                          |    3 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/model/OrderCrossCity.java                          |   36 ++++
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java                 |   30 +++
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/model/OrderTaxi.java                                    |   22 ++
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java         |   42 +++++
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java                 |    3 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverPromotionActivityServiceImpl.java |   21 ++
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/TDriverPromotionActivityService.java          |   18 ++
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserInfo.java                                   |   29 +++
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java                                     |   27 +++
 19 files changed, 464 insertions(+), 12 deletions(-)

diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
index 3280f80..b6fb4c6 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
@@ -138,7 +138,8 @@
     
     @Resource
     private ISystemPriceCityService systemPriceCityService;
-    
+
+
     
     /**
      * 获取正在进行中的订单
@@ -2091,6 +2092,30 @@
     }
 
 
+
+    /**
+     * 推广订单支付成功回调
+     *
+     * @param orderId
+     * @return
+     */
+    private void promotion(Integer orderType,Integer orderId){
+        switch (orderType){
+            case 1:
+                orderPrivateCarService.promotion(orderId);
+                break;
+            case 2:
+                orderTaxiService.promotion(orderId);
+                break;
+            case 3:
+                orderCrossCityService.promotion(orderId);
+                break;
+            default:
+                    break;
+        }
+    }
+
+
     @ResponseBody
     @PostMapping("/api/get/unPayOrder")
     @ApiOperation(value = "获取未支付订单", tags = {"用户端-首页"}, notes = "")
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java
index 4c69f92..77335e1 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java
@@ -106,10 +106,11 @@
             @ApiImplicitParam(value = "ip地址", name = "registIp", required = false, dataType = "String"),
             @ApiImplicitParam(value = "登录端口-小程序传Applets", name = "loginType", required = false, dataType = "String"),
             @ApiImplicitParam(value = "当前定位区县行政编号", name = "registAreaCode", required = false, dataType = "String"),
+            @ApiImplicitParam(value = "司机id", name = "driverId", required = false, dataType = "int"),
     })
-    public ResultUtil<LoginWarpper> captchaLogin(String phone, String code, String registIp, String registAreaCode,String loginType,String jsCode){
+    public ResultUtil<LoginWarpper> captchaLogin(String phone, String code, String registIp, String registAreaCode,String loginType,String jsCode,Integer driverId){
         try {
-            return userInfoService.captchaLogin(phone, code, registIp, registAreaCode,loginType);
+            return userInfoService.captchaLogin(phone, code, registIp, registAreaCode,loginType,driverId);
         }catch (Exception e){
             e.printStackTrace();
             return ResultUtil.runErr();
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/model/OrderCrossCity.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/model/OrderCrossCity.java
index 01a306e..cf0690f 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/model/OrderCrossCity.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/model/OrderCrossCity.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.annotations.TableName;
 import com.baomidou.mybatisplus.enums.IdType;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -360,6 +361,13 @@
 
 
     /**
+     * 推广订单 1否 2是
+     */
+    @TableField("promotion")
+    private Integer promotion;
+
+
+    /**
      * 乘客反馈情况
      */
     @TableField("abnormalIntro")
@@ -371,8 +379,36 @@
     @TableField("abnormalImg")
     private String abnormalImg;
 
+    private Integer promotionDriverId;
+
+    private BigDecimal promotionMoney;
+
     private String splitAllocation;
 
+    public Integer getPromotion() {
+        return promotion;
+    }
+
+    public void setPromotion(Integer promotion) {
+        this.promotion = promotion;
+    }
+
+    public Integer getPromotionDriverId() {
+        return promotionDriverId;
+    }
+
+    public void setPromotionDriverId(Integer promotionDriverId) {
+        this.promotionDriverId = promotionDriverId;
+    }
+
+    public BigDecimal getPromotionMoney() {
+        return promotionMoney;
+    }
+
+    public void setPromotionMoney(BigDecimal promotionMoney) {
+        this.promotionMoney = promotionMoney;
+    }
+
     public Integer getAbnormal() {
         return abnormal;
     }
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java
index 9e97d56..2f6c4d5 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java
@@ -327,4 +327,7 @@
      */
     void addAppeal(Integer uid, Integer orderId,String abnormalIntro, String abnormalImg);
 
+    void promotion(Integer orderId);
+
+
 }
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
index bb1de00..5eb8a64 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -192,6 +192,11 @@
 	
 	@Autowired
 	private IRegionService regionService;
+
+
+
+	@Autowired
+	private TDriverPromotionActivityService driverPromotionActivityService;
 	
 	
 	@Value("${callbackPath}")
@@ -1294,6 +1299,11 @@
 //            orderCrossCity.setTelX(map.get("telX"));
 //            orderCrossCity.setBindId(map.get("bindId"));
 //        }
+
+		// 是否推广订单
+		Integer promotion = isPromotion(uid);
+		orderCrossCity.setPromotion(promotion);
+
 		this.insert(orderCrossCity);
 		
 		if (driver.getState() == 2) {
@@ -1386,8 +1396,19 @@
 		
 		return ResultUtil.success(baseWarpper);
 	}
-	
-	
+
+	private Integer isPromotion(Integer userId){
+		UserInfo userInfo = userInfoService.selectById(userId);
+		if(userInfo.getBindDriverId()!=null && userInfo.getBindExpireDate().getTime()<=System.currentTimeMillis()){
+			String registAreaCode = userInfo.getRegistAreaCode();
+			TDriverPromotionActivity tDriverPromotionActivity = driverPromotionActivityService.selectOne(new EntityWrapper<TDriverPromotionActivity>().eq("districtCode", registAreaCode).ge("startTime", new Date()).lt("endTime", new Date()).last("AND FIND_IN_SET(" + 3 + ", bizType) limit 1"));
+			if(tDriverPromotionActivity!=null){
+				return 2;
+			}
+		}
+		return null;
+
+	}
 	/**
 	 * 获取订单
 	 *
@@ -2701,4 +2722,21 @@
 		orderCrossCity.setAbnormal(1);
 		this.baseMapper.updateById(orderCrossCity);
 	}
+
+	@Override
+	public void promotion(Integer orderId) {
+		OrderCrossCity orderCrossCity = this.baseMapper.selectById(orderId);
+		UserInfo userInfo = userInfoService.selectById(orderCrossCity.getUserId());
+		if(userInfo.getBindDriverId()!=null && userInfo.getBindExpireDate().getTime()<=System.currentTimeMillis()){
+			String registAreaCode = userInfo.getRegistAreaCode();
+			TDriverPromotionActivity tDriverPromotionActivity = driverPromotionActivityService.selectOne(new EntityWrapper<TDriverPromotionActivity>().eq("districtCode", registAreaCode).ge("startTime", new Date()).lt("endTime", new Date()).last("AND FIND_IN_SET(" + 3 + ", bizType) limit 1"));
+			if(tDriverPromotionActivity!=null){
+				Double payMoney = orderCrossCity.getPayMoney();
+				BigDecimal bigDecimal = tDriverPromotionActivity.getCommissionRatio().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(payMoney)).setScale(2, RoundingMode.HALF_UP);
+				orderCrossCity.setPromotionDriverId(userInfo.getBindDriverId());
+				orderCrossCity.setPromotionMoney(bigDecimal);
+				this.baseMapper.updateById(orderCrossCity);
+			}
+		}
+	}
 }
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java
index dde5b28..fa43519 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.annotations.TableName;
 import com.baomidou.mybatisplus.enums.IdType;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -425,6 +426,15 @@
     private Integer abnormal;
 
 
+
+    /**
+     * 推广订单 1否 2是
+     */
+    @TableField("promotion")
+    private Integer promotion;
+
+
+
     /**
      * 乘客反馈情况
      */
@@ -437,6 +447,13 @@
     @TableField("abnormalImg")
     private String abnormalImg;
 
+
+    private Integer promotionDriverId;
+
+    private BigDecimal promotionMoney;
+
+
+
     private Integer totalPeopleNum;
     /**
      * 预估里程(米)
@@ -449,6 +466,30 @@
 
     private String splitAllocation;
 
+    public Integer getPromotion() {
+        return promotion;
+    }
+
+    public void setPromotion(Integer promotion) {
+        this.promotion = promotion;
+    }
+
+    public Integer getPromotionDriverId() {
+        return promotionDriverId;
+    }
+
+    public void setPromotionDriverId(Integer promotionDriverId) {
+        this.promotionDriverId = promotionDriverId;
+    }
+
+    public BigDecimal getPromotionMoney() {
+        return promotionMoney;
+    }
+
+    public void setPromotionMoney(BigDecimal promotionMoney) {
+        this.promotionMoney = promotionMoney;
+    }
+
     public Integer getAbnormal() {
         return abnormal;
     }
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java
index 0ed17e0..3a6bb39 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java
@@ -330,4 +330,6 @@
      */
     void addAppeal(Integer uid, Integer orderId,String abnormalIntro, String abnormalImg);
 
+    void promotion(Integer orderId);
+
 }
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index 85a8d0c..5a22d0d 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -158,6 +158,9 @@
 	private Lock lock = new ReentrantLock();
 	@Autowired
 	private AppOrderController appOrderController;
+
+	@Autowired
+	private TDriverPromotionActivityService driverPromotionActivityService;
 	
 	/**
 	 * 专车下单操作
@@ -594,6 +597,12 @@
 				orderPrivateCar.setTotalPeopleNum(peopleNum);
 				orderPrivateCar.setIsReassign(1);
 				orderPrivateCar.setIsDelete(1);
+
+				// 是否推广订单
+				Integer promotion = isPromotion(uid);
+				orderPrivateCar.setPromotion(promotion);
+
+
 				this.insert(orderPrivateCar);
 				
 				//判断独享,一口价,拼车
@@ -729,7 +738,22 @@
 		}
 		return ResultUtil.success(baseWarpper);
 	}
-	
+
+
+	private Integer isPromotion(Integer userId){
+		UserInfo userInfo = userInfoService.selectById(userId);
+		if(userInfo.getBindDriverId()!=null && userInfo.getBindExpireDate().getTime()<=System.currentTimeMillis()){
+			String registAreaCode = userInfo.getRegistAreaCode();
+			TDriverPromotionActivity tDriverPromotionActivity = driverPromotionActivityService.selectOne(new EntityWrapper<TDriverPromotionActivity>().eq("districtCode", registAreaCode).ge("startTime", new Date()).lt("endTime", new Date()).last("AND FIND_IN_SET(" + 1 + ", bizType) limit 1"));
+			if(tDriverPromotionActivity!=null){
+				return 2;
+			}
+		}
+		return null;
+
+	}
+
+
 	/**
 	 * 下单后继续等待
 	 *
@@ -2715,4 +2739,21 @@
 		this.baseMapper.updateById(orderPrivateCar);
 		
 	}
+
+	@Override
+	public void promotion(Integer orderId) {
+		OrderPrivateCar orderPrivateCar = this.baseMapper.selectById(orderId);
+		UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
+		if(userInfo.getBindDriverId()!=null && userInfo.getBindExpireDate().getTime()<=System.currentTimeMillis()){
+			String registAreaCode = userInfo.getRegistAreaCode();
+			TDriverPromotionActivity tDriverPromotionActivity = driverPromotionActivityService.selectOne(new EntityWrapper<TDriverPromotionActivity>().eq("districtCode", registAreaCode).ge("startTime", new Date()).lt("endTime", new Date()).last("AND FIND_IN_SET(" + 1 + ", bizType) limit 1"));
+			if(tDriverPromotionActivity!=null){
+				Double payMoney = orderPrivateCar.getPayMoney();
+				BigDecimal bigDecimal = tDriverPromotionActivity.getCommissionRatio().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(payMoney)).setScale(2, RoundingMode.HALF_UP);
+				orderPrivateCar.setPromotionDriverId(userInfo.getBindDriverId());
+				orderPrivateCar.setPromotionMoney(bigDecimal);
+				this.baseMapper.updateById(orderPrivateCar);
+			}
+		}
+	}
 }
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TDriverPromotionActivityMapper.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TDriverPromotionActivityMapper.java
new file mode 100644
index 0000000..8b627b6
--- /dev/null
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TDriverPromotionActivityMapper.java
@@ -0,0 +1,17 @@
+package com.stylefeng.guns.modular.system.dao;
+
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.TDriverPromotionActivity;
+
+/**
+ * <p>
+ * 司机推广活动主表 Mapper 接口
+ * </p>
+ *
+ * @author administrator
+ * @since 2025-07-23
+ */
+public interface TDriverPromotionActivityMapper extends BaseMapper<TDriverPromotionActivity> {
+
+}
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TDriverPromotionActivityMapper.xml b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TDriverPromotionActivityMapper.xml
new file mode 100644
index 0000000..e4515a0
--- /dev/null
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TDriverPromotionActivityMapper.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.stylefeng.guns.modular.system.dao.TDriverPromotionActivityMapper">
+
+    <!-- 通用查询映射结果 -->
+
+</mapper>
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriverPromotionActivity.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriverPromotionActivity.java
new file mode 100644
index 0000000..a2e62ff
--- /dev/null
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriverPromotionActivity.java
@@ -0,0 +1,105 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 司机推广活动主表
+ * </p>
+ *
+ * @author administrator
+ * @since 2025-07-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("t_driver_promotion_activity")
+public class TDriverPromotionActivity extends Model<TDriverPromotionActivity> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 推广活动ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * 关联业务:1-专车/2-出租车/3-城际/4-顺风车/5-代驾
+     */
+    private String bizType;
+    /**
+     * 推广活动标题
+     */
+    private String activityTitle;
+    /**
+     * 活动区域-省
+     */
+    private String province;
+    /**
+     * 省code
+     */
+    private String provinceCode;
+    /**
+     * 活动区域-市
+     */
+    private String city;
+    /**
+     * 市code
+     */
+    private String cityCode;
+    /**
+     * 活动区域-区/县
+     */
+    private String district;
+    /**
+     * 区code
+     */
+    private String districtCode;
+    /**
+     * 活动开始时间
+     */
+    private Date startTime;
+    /**
+     * 活动结束时间
+     */
+    private Date endTime;
+    /**
+     * 抽佣比例(如 10.00 代表 10%)
+     */
+    private BigDecimal commissionRatio;
+    /**
+     * 司机乘客绑定有效期(天)
+     */
+    private Integer bindingDays;
+    /**
+     * 推广活动说明
+     */
+    private String activityDesc;
+    /**
+     * 状态:1-未开始 2-进行中 3-已结束
+     */
+    private Integer status;
+    /**
+     * 创建人
+     */
+    private String creator;
+    private Date createTime;
+    private Date updateTime;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserInfo.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserInfo.java
index 273005e..0eb4e24 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserInfo.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserInfo.java
@@ -133,6 +133,35 @@
     @TableField("state")
     private Integer state;
 
+
+    /**
+     * 绑定的司机id
+     */
+    @TableField("bindDriverId")
+    private Integer bindDriverId;
+
+    /**
+     * 绑定司机有效期
+     */
+
+    private Date bindExpireDate;
+
+    public Integer getBindDriverId() {
+        return bindDriverId;
+    }
+
+    public void setBindDriverId(Integer bindDriverId) {
+        this.bindDriverId = bindDriverId;
+    }
+
+    public Date getBindExpireDate() {
+        return bindExpireDate;
+    }
+
+    public void setBindExpireDate(Date bindExpireDate) {
+        this.bindExpireDate = bindExpireDate;
+    }
+
     public String getRegistIp() {
         return registIp;
     }
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java
index 96bf060..b30e749 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java
@@ -36,7 +36,7 @@
      * @param code
      * @return
      */
-    ResultUtil<LoginWarpper> captchaLogin(String phone, String code, String registIp, String registAreaCode,String loginType) throws Exception;
+    ResultUtil<LoginWarpper> captchaLogin(String phone, String code, String registIp, String registAreaCode,String loginType,Integer driverId) throws Exception;
 
     /**
      * 手机一键登录
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/TDriverPromotionActivityService.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/TDriverPromotionActivityService.java
new file mode 100644
index 0000000..4ccec88
--- /dev/null
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/TDriverPromotionActivityService.java
@@ -0,0 +1,18 @@
+package com.stylefeng.guns.modular.system.service;
+
+
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.TDriverPromotionActivity;
+
+/**
+ * <p>
+ * 司机推广活动主表 服务类
+ * </p>
+ *
+ * @author administrator
+ * @since 2025-07-23
+ */
+public interface TDriverPromotionActivityService extends IService<TDriverPromotionActivity> {
+
+}
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverPromotionActivityServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverPromotionActivityServiceImpl.java
new file mode 100644
index 0000000..7bd9569
--- /dev/null
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverPromotionActivityServiceImpl.java
@@ -0,0 +1,21 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.TDriverPromotionActivityMapper;
+import com.stylefeng.guns.modular.system.model.TDriverPromotionActivity;
+import com.stylefeng.guns.modular.system.service.TDriverPromotionActivityService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 司机推广活动主表 服务实现类
+ * </p>
+ *
+ * @author administrator
+ * @since 2025-07-23
+ */
+@Service
+public class TDriverPromotionActivityServiceImpl extends ServiceImpl<TDriverPromotionActivityMapper, TDriverPromotionActivity> implements TDriverPromotionActivityService {
+
+}
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java
index 291c45f..885a57d 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java
@@ -27,6 +27,7 @@
 import com.stylefeng.guns.modular.taxi.model.PaymentRecord;
 import com.stylefeng.guns.modular.taxi.service.IPaymentRecordService;
 import com.stylefeng.guns.modular.taxi.service.ITransactionDetailsService;
+import org.apache.commons.lang.time.DateUtils;
 import org.apache.shiro.authc.SimpleAuthenticationInfo;
 import org.apache.shiro.authc.UsernamePasswordToken;
 import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
@@ -50,6 +51,7 @@
 import java.net.URLConnection;
 import java.security.spec.AlgorithmParameterSpec;
 import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Lock;
@@ -124,6 +126,10 @@
 
     @Autowired
     private PayMoneyUtil payMoneyUtil;
+
+
+    @Autowired
+    private TDriverPromotionActivityService driverPromotionActivityService;
 
     @Value("${callbackPath}")
     private String callbackPath;
@@ -221,7 +227,7 @@
      * @return
      */
     @Override
-    public synchronized ResultUtil<LoginWarpper> captchaLogin(String phone, String code, String registIp, String registAreaCode,String loginType) throws Exception {
+    public synchronized ResultUtil<LoginWarpper> captchaLogin(String phone, String code, String registIp, String registAreaCode,String loginType,Integer driverId) throws Exception {
         UserInfo userInfo = userInfoMapper.queryByPhone(phone);
         String nickName = null;
         if (null == userInfo) {
@@ -269,6 +275,24 @@
             }else {
                 userInfo.setCompanyId(1);
             }
+
+
+
+
+
+            // 是否需要绑定司机
+            TDriverPromotionActivity tDriverPromotionActivity = driverPromotionActivityService.selectOne(new EntityWrapper<TDriverPromotionActivity>().eq("districtCode", registAreaCode).ge("startTime", new Date()).lt("endTime", new Date()).last(" limit 1"));
+            if(tDriverPromotionActivity!=null){
+                Integer bindingDays = tDriverPromotionActivity.getBindingDays();
+                // 当前时间+绑定天数
+                Date endTime = DateUtils.addDays(new Date(), bindingDays);
+                userInfo.setBindDriverId(driverId);
+                userInfo.setBindExpireDate(endTime);
+            }
+
+
+
+
             this.insert(userInfo);
 
             this.addCoupon(userInfo);//添加优惠券
@@ -379,7 +403,7 @@
     }
     @Override
     public synchronized ResultUtil<LoginWarpper> captchaLogin(String phone, String code, Integer uid, Integer type, Integer userType,String loginType) throws Exception {
-        ResultUtil<LoginWarpper> resultUtil = this.captchaLogin(phone, code, null, null,loginType);
+        ResultUtil<LoginWarpper> resultUtil = this.captchaLogin(phone, code, null, null,loginType,null);
         if(resultUtil.getCode() == 200 && null != uid){
             if(type == 2){//司机分享
                 Driver driver = driverMapper.selectById(uid);
@@ -1226,7 +1250,7 @@
             if(null == userInfo){
                 return ResultUtil.error("获取用户信息失败");
             }
-            return this.captchaLogin(userInfo.get("phone"), "1234", null, registAreaCode, loginType);
+            return this.captchaLogin(userInfo.get("phone"), "1234", null, registAreaCode, loginType,null);
         }else{
             return ResultUtil.error(jsonObject.getString("msg"));
         }
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/model/OrderTaxi.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/model/OrderTaxi.java
index 7cfedfc..137f696 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/model/OrderTaxi.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/model/OrderTaxi.java
@@ -6,6 +6,7 @@
 import com.baomidou.mybatisplus.enums.IdType;
 import com.stylefeng.guns.modular.system.model.BaseBean;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -375,8 +376,29 @@
     @TableField("abnormalImg")
     private String abnormalImg;
 
+
+    private Integer promotionDriverId;
+
+    private BigDecimal promotionMoney;
+
+
     private String splitAllocation;
 
+    public Integer getPromotionDriverId() {
+        return promotionDriverId;
+    }
+
+    public void setPromotionDriverId(Integer promotionDriverId) {
+        this.promotionDriverId = promotionDriverId;
+    }
+
+    public BigDecimal getPromotionMoney() {
+        return promotionMoney;
+    }
+
+    public void setPromotionMoney(BigDecimal promotionMoney) {
+        this.promotionMoney = promotionMoney;
+    }
 
     public Integer getAbnormal() {
         return abnormal;
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/IOrderTaxiService.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/IOrderTaxiService.java
index 7c63faf..be2011e 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/IOrderTaxiService.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/IOrderTaxiService.java
@@ -310,4 +310,7 @@
      * @param orderId
      */
     void addAppeal(Integer uid, Integer orderId,String abnormalIntro, String abnormalImg);
+
+    void promotion(Integer orderId);
+
 }
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
index 30055e5..4ab0ae6 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
@@ -188,8 +188,10 @@
 	
 	@Value("${callbackPath}")
 	private String callbackPath;
-	
-	
+
+
+	@Autowired
+	private TDriverPromotionActivityService driverPromotionActivityService;
 	/**
 	 * 出租车下单操作
 	 *
@@ -2306,4 +2308,21 @@
 		orderTaxi.setAbnormal(1);
 		this.baseMapper.updateById(orderTaxi);
 	}
+
+	@Override
+	public void promotion(Integer orderId) {
+		OrderTaxi orderTaxi = this.baseMapper.selectById(orderId);
+		UserInfo userInfo = userInfoService.selectById(orderTaxi.getUserId());
+		if(userInfo.getBindDriverId()!=null && userInfo.getBindExpireDate().getTime()<=System.currentTimeMillis()){
+			String registAreaCode = userInfo.getRegistAreaCode();
+			TDriverPromotionActivity tDriverPromotionActivity = driverPromotionActivityService.selectOne(new EntityWrapper<TDriverPromotionActivity>().eq("districtCode", registAreaCode).ge("startTime", new Date()).lt("endTime", new Date()).last("AND FIND_IN_SET(" + 2 + ", bizType) limit 1"));
+			if(tDriverPromotionActivity!=null){
+				Double payMoney = orderTaxi.getPayMoney();
+				BigDecimal bigDecimal = tDriverPromotionActivity.getCommissionRatio().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(payMoney)).setScale(2, RoundingMode.HALF_UP);
+				orderTaxi.setPromotionDriverId(userInfo.getBindDriverId());
+				orderTaxi.setPromotionMoney(bigDecimal);
+				this.baseMapper.updateById(orderTaxi);
+			}
+		}
+	}
 }

--
Gitblit v1.7.1