From a661e711cebd9f0b684dc73ab732b239812f076f Mon Sep 17 00:00:00 2001
From: zhibing.pu <393733352@qq.com>
Date: 星期日, 28 四月 2024 09:23:08 +0800
Subject: [PATCH] 新增加功能

---
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java             |    4 
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java                              |    8 +
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java                                 |   26 ++--
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/WithdrawalController.java                            |   22 +++
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverActivityOnline.java                 |   15 ++
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverOnlineServiceImpl.java       |  212 +++++++++++++++++++++++++----------
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml                  |    6 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java           |    4 
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverOnlineMapper.xml              |    4 
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverOnlineService.java               |    6 +
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IWithdrawalService.java                   |    2 
 ManagementIGOTravel/guns-admin/src/main/resources/application-dev.yml                                                      |    6 
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverOnlineMapper.java                     |    4 
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverOnline.java                         |   15 ++
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java |    4 
 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/WithdrawalMapper.java                         |    2 
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java                              |    8 
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java                              |    4 
 18 files changed, 249 insertions(+), 103 deletions(-)

diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
index e858a79..e4da94f 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
@@ -1252,18 +1252,18 @@
                         case 4:
                             OrderLogistics orderLogistics = orderLogisticsService.selectById(map.get("incomeId").toString());
                             List<Income> incomes3 = incomeService.queryData(1, null, 2, orderLogistics.getId(), 4);
-                            map1.put("travelMoney", orderLogistics != null ? orderLogistics.getTravelMoney() : 0);//行程费
+                            map1.put("travelMoney", orderLogistics != null ? orderLogistics.getOrderMoney() : 0);//行程费
                             map1.put("parkMoney", 0);//停车费
-                            map1.put("tipMoney", orderLogistics != null ? orderLogistics.getTipMoney() : 0);//小费
+                            map1.put("tipMoney", 0);//小费
                             map1.put("roadTollMoney", 0);//过路费
                             map1.put("rakeMoney", incomes3.size() > 0 ? incomes3.get(0).getMoney() : 0);//抽成
                             break;
                         case 5:
                             OrderLogistics orderLogistics1 = orderLogisticsService.selectById(map.get("incomeId").toString());
                             List<Income> incomes4 = incomeService.queryData(1, null, 2, orderLogistics1.getId(), 5);
-                            map1.put("travelMoney", orderLogistics1 != null ? orderLogistics1.getTravelMoney() : 0);//行程费
+                            map1.put("travelMoney", orderLogistics1 != null ? orderLogistics1.getOrderMoney() : 0);//行程费
                             map1.put("parkMoney", 0);//停车费
-                            map1.put("tipMoney", orderLogistics1 != null ? orderLogistics1.getTipMoney() : 0);//小费
+                            map1.put("tipMoney", 0);//小费
                             map1.put("roadTollMoney", 0);//过路费
                             map1.put("rakeMoney", incomes4.size() > 0 ? incomes4.get(0).getMoney() : 0);//抽成
                             break;
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverOnlineMapper.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverOnlineMapper.java
index a9fa7fc..3fc4b48 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverOnlineMapper.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverOnlineMapper.java
@@ -15,7 +15,7 @@
      * @param driverId
      * @return
      */
-    DriverOnline query(@Param("driverId") Integer driverId, @Param("day") String day, @Param("assessment") Integer assessment);
+    DriverOnline query(@Param("driverId") Integer driverId, @Param("day") String day, @Param("type") Integer type, @Param("assessment") Integer assessment);
 
 
     /**
@@ -31,5 +31,5 @@
 
 
 
-    List<DriverOnline> queryList(@Param("day") String day, @Param("duration") Long duration);
+    List<DriverOnline> queryList(@Param("day") String day, @Param("type") Integer type, @Param("duration") Long duration);
 }
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverOnlineMapper.xml b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverOnlineMapper.xml
index 5cff6bc..c4d4597 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverOnlineMapper.xml
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverOnlineMapper.xml
@@ -19,7 +19,7 @@
         `date` as `date`,
         duration as duration,
         assessment as assessment
-        from t_driver_online where driverId = #{driverId} and DATE_FORMAT(`date`, '%Y-%m-%d') = #{day} and assessment = #{assessment}
+        from t_driver_online where driverId = #{driverId} and DATE_FORMAT(`date`, '%Y-%m-%d') = #{day} and type = #{type} and assessment = #{assessment}
     </select>
 
 
@@ -47,6 +47,6 @@
         `date` as `date`,
         duration as duration,
         assessment as assessment
-        from t_driver_online where DATE_FORMAT(`date`, '%Y-%m-%d') = #{day} and duration &gt;= #{duration}
+        from t_driver_online where DATE_FORMAT(`date`, '%Y-%m-%d') = #{day} and type = #{type} and duration &gt;= #{duration}
     </select>
 </mapper>
\ No newline at end of file
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverActivityOnline.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverActivityOnline.java
index d641bca..19ad35c 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverActivityOnline.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverActivityOnline.java
@@ -44,6 +44,11 @@
     @TableField("money")
     private Double money;
     /**
+     * 自动下班时间
+     */
+    @TableField("offlineTime")
+    private Double offlineTime;
+    /**
      * 活动开始时间
      */
     @TableField("startTime")
@@ -98,7 +103,15 @@
     public void setMoney(Double money) {
         this.money = money;
     }
-
+    
+    public Double getOfflineTime() {
+        return offlineTime;
+    }
+    
+    public void setOfflineTime(Double offlineTime) {
+        this.offlineTime = offlineTime;
+    }
+    
     public Date getStartTime() {
         return startTime;
     }
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverOnline.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverOnline.java
index 87a9422..3d9dff7 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverOnline.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverOnline.java
@@ -24,6 +24,11 @@
     @TableField("driverId")
     private Integer driverId;
     /**
+     * 获取业务类型(1=专车,2=出租车,3=城际,4=小件物流)
+     */
+    @TableField("type")
+    private Integer type;
+    /**
      * 在线日期
      */
     @TableField("date")
@@ -55,7 +60,15 @@
     public void setDriverId(Integer driverId) {
         this.driverId = driverId;
     }
-
+    
+    public Integer getType() {
+        return type;
+    }
+    
+    public void setType(Integer type) {
+        this.type = type;
+    }
+    
     public Date getDate() {
         return date;
     }
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverOnlineService.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverOnlineService.java
index ef66b3b..5756c30 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverOnlineService.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverOnlineService.java
@@ -25,4 +25,10 @@
      * @return
      */
     Integer querySumTime(Integer driverId, Integer assessment, Date start, Date end);
+    
+    
+    /**
+     * 定时检测司机是否连续接单
+     */
+    void deductionDuration();
 }
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverOnlineServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverOnlineServiceImpl.java
index c2af891..9c60452 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverOnlineServiceImpl.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverOnlineServiceImpl.java
@@ -3,22 +3,29 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.smallLogistics.model.OrderLogistics;
+import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService;
+import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar;
+import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService;
+import com.stylefeng.guns.modular.system.dao.DriverActivityHistoryMapper;
+import com.stylefeng.guns.modular.system.dao.DriverActivityOnlineMapper;
 import com.stylefeng.guns.modular.system.dao.DriverOnlineMapper;
-import com.stylefeng.guns.modular.system.model.Driver;
-import com.stylefeng.guns.modular.system.model.DriverAssessment;
-import com.stylefeng.guns.modular.system.model.DriverOnline;
-import com.stylefeng.guns.modular.system.model.DriverWork;
+import com.stylefeng.guns.modular.system.model.*;
 import com.stylefeng.guns.modular.system.service.IDriverAssessmentService;
 import com.stylefeng.guns.modular.system.service.IDriverOnlineService;
 import com.stylefeng.guns.modular.system.service.IDriverService;
 import com.stylefeng.guns.modular.system.service.IDriverWorkService;
+import com.stylefeng.guns.modular.system.util.PushUtil;
 import com.stylefeng.guns.modular.system.util.RedisUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
+import java.util.Arrays;
 import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 public class DriverOnlineServiceImpl extends ServiceImpl<DriverOnlineMapper, DriverOnline> implements IDriverOnlineService {
@@ -37,6 +44,24 @@
 
     @Autowired
     private IDriverService driverService;
+    
+    @Resource
+    private DriverActivityOnlineMapper driverActivityOnlineMapper;
+    
+    @Resource
+    private DriverActivityHistoryMapper driverActivityHistoryMapper;
+    
+    @Autowired
+    private IOrderPrivateCarService orderPrivateCarService;
+    
+    @Autowired
+    private IOrderLogisticsService orderLogisticsService;
+    
+    @Autowired
+    private PushUtil pushUtil;
+    
+    
+    
 
 
     /**
@@ -48,68 +73,74 @@
     public void addDriverOnline(Integer driverId) throws Exception {
         DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driverId).eq("state", 1));
         if(null == driverWork){//非上班状态不记录
-            redisUtil.remove("ONLINE_" + driverId);
+            for (int i = 1; i < 5; i++) {
+                redisUtil.remove("ONLINE_" + i + "_" + driverId);
+            }
             return;
         }
-
-        //查询数据及条件判断
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-        DriverOnline query = driverOnlineMapper.query(driverId, sdf.format(new Date()), 0);//正常记录数据
-        DriverOnline query1 = null;//考勤范围内的数据
-        DriverAssessment driverAssessment = driverAssessmentService.selectOne(new EntityWrapper<DriverAssessment>()
-                .eq("companyId", driverService.selectById(driverId).getCompanyId()));
-        Date s = null;
-        Date e = null;
-        long now = System.currentTimeMillis();
-        if(null != driverAssessment){//在考勤范围内记录数据
-            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            String[] split = driverAssessment.getAssessment().split(" - ");
-            s = sdf1.parse(sdf.format(new Date()) + " " + split[0]);
-            e = sdf1.parse(sdf.format(new Date()) + " " + split[1]);
-            if(now > s.getTime() && now <= e.getTime()){
-                query1 = driverOnlineMapper.query(driverId, sdf.format(new Date()), 1);
-            }
-        }
-
-        //开始修改数据
-        if(query != null){
-            String value = redisUtil.getValue("ONLINE_" + driverId);
-            if(ToolUtil.isEmpty(value)){
-                redisUtil.setStrValue("ONLINE_" + driverId, String.valueOf(now / 1000));//存入秒
-                return;
-            }
-            Long ss = (now / 1000) - Long.valueOf(value);
-            if(ss.longValue() >= 600){//间隔时间大于10分钟则为离线
-                redisUtil.remove("ONLINE_" + driverId);
-                return;
-            }
-
-            query.setDuration(query.getDuration() + ss);
-            driverOnlineMapper.updateById(query);
-
-            //记录考勤范围内的数据
-            if(null != s && null != e && now > s.getTime() && now <= e.getTime()){
-                if(null != query1){
-                    query1.setDuration(query1.getDuration() + ss);
-                    driverOnlineMapper.updateById(query1);
-                }else{
-                    query1 = new DriverOnline();
-                    query1.setDriverId(driverId);
-                    query1.setDate(new Date());
-                    query1.setAssessment(1);
-                    query1.setDuration(ss);
-                    driverOnlineMapper.insert(query1);
+        String[] split1 = driverWork.getType().split(",");
+        for (String ty : split1) {
+            //查询数据及条件判断
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            DriverOnline query = driverOnlineMapper.query(driverId, sdf.format(new Date()), Integer.valueOf(ty), 0);//正常记录数据
+            DriverOnline query1 = null;//考勤范围内的数据
+            DriverAssessment driverAssessment = driverAssessmentService.selectOne(new EntityWrapper<DriverAssessment>()
+                    .eq("companyId", driverService.selectById(driverId).getCompanyId()));
+            Date s = null;
+            Date e = null;
+            long now = System.currentTimeMillis();
+            if(null != driverAssessment){//在考勤范围内记录数据
+                SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                String[] split = driverAssessment.getAssessment().split(" - ");
+                s = sdf1.parse(sdf.format(new Date()) + " " + split[0]);
+                e = sdf1.parse(sdf.format(new Date()) + " " + split[1]);
+                if(now > s.getTime() && now <= e.getTime()){
+                    query1 = driverOnlineMapper.query(driverId, sdf.format(new Date()), Integer.valueOf(ty), 1);
                 }
             }
-        }else{
-            DriverOnline driverOnline = new DriverOnline();
-            driverOnline.setDriverId(driverId);
-            driverOnline.setDate(new Date());
-            driverOnline.setAssessment(0);
-            driverOnline.setDuration(0L);
-            driverOnlineMapper.insert(driverOnline);
+    
+            //开始修改数据
+            if(query != null){
+                String value = redisUtil.getValue("ONLINE_" + ty + "_" + driverId);
+                if(ToolUtil.isEmpty(value)){
+                    redisUtil.setStrValue("ONLINE_" + ty + "_" + driverId, String.valueOf(now / 1000));//存入秒
+                    return;
+                }
+                Long ss = (now / 1000) - Long.valueOf(value);
+                if(ss.longValue() >= 600){//间隔时间大于10分钟则为离线
+                    redisUtil.remove("ONLINE_" + ty + "_" + driverId);
+                    return;
+                }
+        
+                query.setDuration(query.getDuration() + ss);
+                driverOnlineMapper.updateById(query);
+        
+                //记录考勤范围内的数据
+                if(null != s && null != e && now > s.getTime() && now <= e.getTime()){
+                    if(null != query1){
+                        query1.setDuration(query1.getDuration() + ss);
+                        driverOnlineMapper.updateById(query1);
+                    }else{
+                        query1 = new DriverOnline();
+                        query1.setDriverId(driverId);
+                        query1.setType(Integer.valueOf(ty));
+                        query1.setDate(new Date());
+                        query1.setAssessment(1);
+                        query1.setDuration(ss);
+                        driverOnlineMapper.insert(query1);
+                    }
+                }
+            }else{
+                DriverOnline driverOnline = new DriverOnline();
+                driverOnline.setDriverId(driverId);
+                driverOnline.setType(Integer.valueOf(ty));
+                driverOnline.setDate(new Date());
+                driverOnline.setAssessment(0);
+                driverOnline.setDuration(0L);
+                driverOnlineMapper.insert(driverOnline);
+            }
+            redisUtil.setStrValue("ONLINE_" + ty + "_" + driverId, String.valueOf(now / 1000));//存入秒
         }
-        redisUtil.setStrValue("ONLINE_" + driverId, String.valueOf(now / 1000));//存入秒
     }
 
 
@@ -125,4 +156,63 @@
     public Integer querySumTime(Integer driverId, Integer assessment, Date start, Date end) {
         return driverOnlineMapper.querySumTime(driverId, assessment, start, end);
     }
+    
+    
+    /**
+     * 定时检测司机是否连续接单
+     */
+    @Override
+    public void deductionDuration() {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        String format = sdf.format(new Date());
+        List<DriverActivityHistory> driverActivityHistories = driverActivityHistoryMapper.selectList(new EntityWrapper<DriverActivityHistory>().eq("DATE_FORMAT(date, '%Y-%m-%d')", format).eq("type", 3).eq("carryOut", 1));
+        List<Integer> collect = driverActivityHistories.stream().map(DriverActivityHistory::getDriverId).collect(Collectors.toList());
+        if(collect.size() == 0){
+            return;
+        }
+        for (DriverActivityHistory driverActivityHistory : driverActivityHistories) {
+            DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driverActivityHistory.getDriverId()).eq("state", 1));
+            if(null == driverWork){
+                continue;
+            }
+            DriverActivityOnline driverActivityOnline = driverActivityOnlineMapper.selectById(driverActivityHistory.getActivityId());
+            DriverOnline driverOnline = this.selectOne(new EntityWrapper<DriverOnline>().eq("DATE_FORMAT(date, '%Y-%m-%d')", format)
+                    .eq("driverId", driverActivityHistory.getDriverId()).eq("type", driverActivityOnline.getType()));
+            if(null == driverOnline){
+                continue;
+            }
+            Integer driverId = driverOnline.getDriverId();
+            long m = Double.valueOf(driverActivityOnline.getOfflineTime() * 3600000L).longValue();
+            
+            //找出最后一次接单的时间
+            long mm = 0L;
+            OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectOne(new EntityWrapper<OrderPrivateCar>().eq("driverId", driverId).eq("isDelete", 1).ne("state", 10));
+            Date snatchOrderTime = null;
+            if(null != orderPrivateCar){
+                snatchOrderTime = orderPrivateCar.getSnatchOrderTime();
+                mm = snatchOrderTime.getTime();
+            }
+            OrderLogistics orderLogistics = orderLogisticsService.selectOne(new EntityWrapper<OrderLogistics>().eq("driverId", driverId).eq("isDelete", 1).ne("state", 10));
+            if(null != orderLogistics && snatchOrderTime.before(orderLogistics.getSnatchOrderTime())){
+                mm = orderLogistics.getSnatchOrderTime().getTime();
+            }
+            
+            //超时不接单,直接将之前的在线时长清零
+            //推送司机下班提醒
+            if(mm >= m){
+                this.deleteById(driverOnline.getId());
+                driverWork.setState(2);
+                driverWork.setEndTime(new Date());
+                driverWorkService.updateById(driverWork);
+                Driver driver = driverService.selectById(driverWork.getDriverId());
+                driver.setState(1);
+                driverService.updateById(driver);
+                // TODO 待翻译
+                pushUtil.pushOffline(driverOnline.getDriverId(), 2, "您已连续" + driverActivityOnline.getOfflineTime() + "小时未接单,系统将强制更改您的状态为:下班");
+            }
+            
+        }
+        
+        
+    }
 }
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
index 69436f8..f471517 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -1699,7 +1699,7 @@
                     activityWarpper.setId(driverActivityOnline.getId());
                     StringBuffer sb = new StringBuffer(language == 1 ? "今日" :
                             language == 2 ? "Today, stay online receiving orders of " : "Aujourd’hui, reste en ligne à recevoir des commandes ");
-                    DriverOnline query = driverOnlineMapper.query(uid, sdf1.format(new Date()), 0);
+                    DriverOnline query = driverOnlineMapper.query(uid, sdf1.format(new Date()), driverActivityOnline.getType(), 0);
                     Integer hour = 0;
                     if(null != query){
                         hour = Long.valueOf(query.getDuration() / 3600).intValue();
@@ -2262,7 +2262,7 @@
                 continue;
             }
             Long duration = Long.valueOf(dao.getOnline() * 3600);
-            List<DriverOnline> driverOnlines = driverOnlineMapper.queryList(sdf.format(new Date()), duration);
+            List<DriverOnline> driverOnlines = driverOnlineMapper.queryList(sdf.format(new Date()), dao.getType(), duration);
             for (DriverOnline driverOnline : driverOnlines) {
                 if(dah.getDriverId().compareTo(driverOnline.getDriverId()) == 0){
                     dah.setCarryOut(2);//完成状态
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
index 187a24e..9fe8e77 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
@@ -421,12 +421,12 @@
      * @param id
      * @param type
      */
-    public void pushOffline(Integer id, Integer type){
+    public void pushOffline(Integer id, Integer type, Object object){
         JSONObject msg = new JSONObject();
         msg.put("code", 200);
         msg.put("msg", "SUCCESS");
         msg.put("method", "OFFLINE");
-        msg.put("data", new Object());
+        msg.put("data", object);
 
         //调用推送
         HttpHeaders headers = new HttpHeaders();
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java
index e551fa9..f22157b 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java
@@ -1,5 +1,6 @@
 package com.stylefeng.guns.modular.system.util;
 
+import com.stylefeng.guns.modular.system.service.IDriverOnlineService;
 import com.stylefeng.guns.modular.system.service.IDriverService;
 import com.stylefeng.guns.modular.system.service.IOrderService;
 import com.stylefeng.guns.modular.system.service.ISettlementRecordService;
@@ -33,6 +34,9 @@
     private ISettlementRecordService settlementRecordService;
 
     public Set<Integer> driverIds = new HashSet<>();//存储需要提醒司机预约单的司机id
+    
+    @Autowired
+    private IDriverOnlineService driverOnlineService;
 
 
     public static void main(String[] args) {
@@ -51,10 +55,10 @@
             driverService.taskMinute();
             //处于预约单
             orderService.reservationOrder();
-//            //处理车载端断电后的自动下班
-//            driverService.taskOffWork();
             //处理结束订单后30分钟解绑小号功能
             orderService.taskMidAxbUnBindSend();
+            //处理司机连续不接单的情况
+            driverOnlineService.deductionDuration();
         } catch (Exception e) {
             e.printStackTrace();
         }
diff --git a/ManagementIGOTravel/guns-admin/src/main/resources/application-dev.yml b/ManagementIGOTravel/guns-admin/src/main/resources/application-dev.yml
index db02236..be09c3a 100644
--- a/ManagementIGOTravel/guns-admin/src/main/resources/application-dev.yml
+++ b/ManagementIGOTravel/guns-admin/src/main/resources/application-dev.yml
@@ -42,10 +42,10 @@
 
 spring:
   datasource:
-    url: jdbc:mysql://127.0.0.1:3306/igotravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B0
+    url: jdbc:mysql://127.0.0.1:3306/igotravel2.0?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B0
     username: root
-    password: HjKbXilb9zajmXbl
-#    password: 123456
+#    password: HjKbXilb9zajmXbl
+    password: 123456
     db-name: igotravel #用来搜集数据库的所有表
     filters: wall,mergeStat
 
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
index 4e6a6a2..945781e 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
@@ -260,21 +260,19 @@
             for (Map<String, Object> map : list3) {
                 map.put("name", name);
             }
-            List<TransactionDetails> transactionDetails = transactionDetailsService.selectList(new EntityWrapper<TransactionDetails>().eq("state", 1)
-                    .eq("type", 1).eq("userType", 1).eq("userId", uid).eq("orderType", 3).like("remark", "%跨城订单取消退款%"));
-            List<Map<String, Object>> list4 = new ArrayList<>();
-            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
-            for(TransactionDetails transactionDetails1 : transactionDetails){
-                Map<String, Object> map = new HashMap<>();
-                map.put("money", transactionDetails1.getMoney());
-                map.put("time", DateUtil.conversionFormat(language, sdf.format(transactionDetails1.getInsertTime())));
-                map.put("name", "跨城订单取消退款");
-                map.put("insertTime", Double.valueOf(transactionDetails1.getInsertTime().getTime() / 1000).intValue());
-                list4.add(map);
-            }
+//            List<TransactionDetails> transactionDetails = transactionDetailsService.selectList(new EntityWrapper<TransactionDetails>().eq("state", 1)
+//                    .eq("type", 1).eq("userType", 1).eq("userId", uid).eq("orderType", 3).like("remark", "%跨城订单取消退款%"));
+//            List<Map<String, Object>> list4 = new ArrayList<>();
+//            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+//            for(TransactionDetails transactionDetails1 : transactionDetails){
+//                Map<String, Object> map = new HashMap<>();
+//                map.put("money", transactionDetails1.getMoney());
+//                map.put("time", DateUtil.conversionFormat(language, sdf.format(transactionDetails1.getInsertTime())));
+//                map.put("name", "跨城订单取消退款");
+//                map.put("insertTime", Double.valueOf(transactionDetails1.getInsertTime().getTime() / 1000).intValue());
+//                list4.add(map);
+//            }
             list.addAll(maps);
-//            list.addAll(list1);
-//            list.addAll(list2);
             list.addAll(list3);
 //            list.addAll(list4);
 
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/WithdrawalController.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/WithdrawalController.java
index 475974b..98e9dc4 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/WithdrawalController.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/WithdrawalController.java
@@ -1,9 +1,12 @@
 package com.stylefeng.guns.modular.api;
 
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.stylefeng.guns.modular.system.model.Withdrawal;
 import com.stylefeng.guns.modular.system.service.IUserInfoService;
 import com.stylefeng.guns.modular.system.service.IWithdrawalService;
 import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.system.warpper.WithdrawalVo;
 import com.stylefeng.guns.modular.system.warpper.WithdrawalWarpper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -18,6 +21,7 @@
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 提现控制器
@@ -72,20 +76,30 @@
      */
     @ResponseBody
     @PostMapping("/api/withdrawal/queryWithdrawal")
-    @ApiOperation(value = "获取历史提现数据", tags = {"用户端-个人中心"}, notes = "")
+    @ApiOperation(value = "获取历史提现数据【2.0】", tags = {"用户端-个人中心"}, notes = "")
     @ApiImplicitParams({
             @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"),
             @ApiImplicitParam(value = "页条数", name = "size", required = true, dataType = "int"),
+            @ApiImplicitParam(value = "提现状态(1=待处理,2=已提现,3=提现失败)", name = "state", required = true, dataType = "int"),
             @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public ResultUtil<List<WithdrawalWarpper>> queryWithdrawal(Integer pageNum, Integer size, Integer language, HttpServletRequest request){
+    public ResultUtil<WithdrawalVo> queryWithdrawal(Integer pageNum, Integer size, Integer state, Integer language, HttpServletRequest request){
         try {
             Integer uid = userInfoService.getUserIdFormRedis(request);
             if(null == uid){
                 return ResultUtil.tokenErr();
             }
-            List<Map<String, Object>> list = withdrawalService.queryWithdrawal(uid, pageNum, size, language);
-            return ResultUtil.success(WithdrawalWarpper.getWithdrawalWarpper(list));
+            List<Map<String, Object>> list = withdrawalService.queryWithdrawal(uid, pageNum, size, state, language);
+            WithdrawalVo withdrawalVo = new WithdrawalVo();
+            withdrawalVo.setList(WithdrawalWarpper.getWithdrawalWarpper(list));
+            List<Withdrawal> withdrawals = withdrawalService.selectList(new EntityWrapper<Withdrawal>().eq("userId", uid).eq("userType", 1).ne("flag", 3));
+            double withdrawn = withdrawals.stream().filter(s -> s.getState().compareTo(2) == 0).mapToDouble(Withdrawal::getMoney).sum();
+            withdrawalVo.setWithdrawn(withdrawn);
+            double processing = withdrawals.stream().filter(s -> s.getState().compareTo(1) == 0).mapToDouble(Withdrawal::getMoney).sum();
+            withdrawalVo.setProcessing(processing);
+            double fail = withdrawals.stream().filter(s -> s.getState().compareTo(3) == 0).mapToDouble(Withdrawal::getMoney).sum();
+            withdrawalVo.setFail(fail);
+            return ResultUtil.success(withdrawalVo);
         }catch (Exception e){
             e.printStackTrace();
             return ResultUtil.runErr();
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index 1c14bbf..e0b2fe9 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -1984,6 +1984,10 @@
             query.setState(1);
             query.setRedPacketActivityId(id.getId());
             userRedPacketRecordService.updateById(query);
+            
+            // todo 待翻译
+            String content = 1 == language ? ("您收到一个额度为GHS " + money + " 的红包,请查收") : 2 == language ? "" : "";
+            systemNoticeService.addSystemNotice(1, content, query.getUserId(), 1);
 
             UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
             if(ToolUtil.isNotEmpty(userInfo.getEmail())){
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/WithdrawalMapper.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/WithdrawalMapper.java
index aa3f7ac..a4272cd 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/WithdrawalMapper.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/WithdrawalMapper.java
@@ -17,6 +17,6 @@
      * @param size
      * @return
      */
-    List<Map<String, Object>> queryWithdrawal(@Param("uid") Integer uid, @Param("userType") Integer userType,
+    List<Map<String, Object>> queryWithdrawal(@Param("uid") Integer uid, @Param("userType") Integer userType, @Param("state") Integer status,
                                               @Param("pageNum") Integer pageNum, @Param("size") Integer size);
 }
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml
index dc80a30..a027e24 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml
@@ -30,6 +30,10 @@
         code,
         remark as remark,
         state as state
-        from t_pub_withdrawal where flag != 3 and userType = #{userType} and userId = #{uid} order by insertTime desc limit #{pageNum}, #{size}
+        from t_pub_withdrawal where flag != 3 and userType = #{userType} and userId = #{uid}
+        <if test="null != state">
+            and `state` = #{state}
+        </if>
+        order by insertTime desc limit #{pageNum}, #{size}
     </select>
 </mapper>
\ No newline at end of file
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IWithdrawalService.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IWithdrawalService.java
index 01e948f..dea8637 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IWithdrawalService.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IWithdrawalService.java
@@ -25,7 +25,7 @@
      * @return
      * @throws Exception
      */
-    List<Map<String, Object>> queryWithdrawal(Integer uid, Integer pageNum, Integer size, Integer language) throws Exception;
+    List<Map<String, Object>> queryWithdrawal(Integer uid, Integer pageNum, Integer size, Integer state, Integer language) throws Exception;
 
 
     /**
diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java
index e99ce56..734d668 100644
--- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java
+++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java
@@ -92,10 +92,10 @@
      * @throws Exception
      */
     @Override
-    public List<Map<String, Object>> queryWithdrawal(Integer uid, Integer pageNum, Integer size, Integer language) throws Exception {
+    public List<Map<String, Object>> queryWithdrawal(Integer uid, Integer pageNum, Integer size, Integer state, Integer language) throws Exception {
         pageNum = (pageNum - 1) * size;
         String name = language == 1 ? "手机号:" : language == 2 ? "Phone number:" : "Numéro de portable:";
-        List<Map<String, Object>> list = withdrawalMapper.queryWithdrawal(uid, 1, pageNum, size);
+        List<Map<String, Object>> list = withdrawalMapper.queryWithdrawal(uid, 1, state, pageNum, size);
         for (Map<String, Object> map : list) {
             map.put("name", name + map.get("code"));
             if(null != map.get("insertTime")){

--
Gitblit v1.7.1