Pu Zhibing
14 小时以前 821fc2f632f8b974a2c0fc37630e13c5fbe6086c
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverOnlineServiceImpl.java
@@ -156,7 +156,14 @@
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        List<DriverActivityHistory> driverActivityHistories = driverActivityHistoryMapper.selectList(new EntityWrapper<DriverActivityHistory>().eq("driverId", driverId)
                .eq("type", 3).eq("carryOut", 1).last(" and day = '" + sdf.format(new Date()) + "'"));
                .eq("type", 3).eq("carryOut", 1).last(" and day = '" + sdf.format(new Date()) + "' and driverActivityId in (select id from t_driver_activity where status = 3 and now() between startTime and endTime)"));
        if(!driverActivityHistories.isEmpty()){
            //如果一直属于上班中,则需要从任务开始时间计算时间
            Date insertTime = driverActivityHistories.get(0).getInsertTime();
            if(driverWork.getStartTime().getTime() < insertTime.getTime()){
                driverWork.setStartTime(insertTime);
            }
        }
        //生成每个活动从开始上班到当前时间的时长记录
        for (DriverActivityHistory driverActivityHistory : driverActivityHistories) {
            String value = redisUtil.getValue("driverActivity_" + driverId + "_" + driverActivityHistory.getId());
@@ -164,10 +171,10 @@
                JSONObject jsonObject = JSON.parseObject(value);
                Long startTime = jsonObject.getLong("startTime");
                long time = System.currentTimeMillis() - startTime;
                redisUtil.setStrValue("driverActivity_" + driverId + "_" + driverActivityHistory.getId(), "{\"startTime\":" + startTime + ", \"time\":" + time + "}");
                redisUtil.setStrValue("driverActivity_" + driverId + "_" + driverActivityHistory.getId(), "{\"startTime\":" + startTime + ", \"time\":" + time + "}", 172800);
            }else{
                long time = System.currentTimeMillis() - driverWork.getStartTime().getTime();
                redisUtil.setStrValue("driverActivity_" + driverId + "_" + driverActivityHistory.getId(), "{\"startTime\":" + driverWork.getStartTime().getTime() + ", \"time\":" + time + "}");
                redisUtil.setStrValue("driverActivity_" + driverId + "_" + driverActivityHistory.getId(), "{\"startTime\":" + driverWork.getStartTime().getTime() + ", \"time\":" + time + "}", 172800);
            }
        }
    }
@@ -210,7 +217,6 @@
                continue;
            }
            Integer driverId = driverOnline.getDriverId();
            Driver driver1 = driverService.selectById(driverId);
            long m = Double.valueOf(driverActivityOnline.getOfflineTime() * 3600000L).longValue();
            
            //找出最后一次接单的时间
@@ -241,29 +247,37 @@
                String msg = language == 1 ? "您已连续" + driverActivityOnline.getOfflineTime() + "小时未接单,系统将强制更改您的状态为:下班" :
                        language == 2 ? "You have not been accepting orders for " + driverActivityOnline.getOfflineTime() + " hour(s) System will change your state to Off-work" :
                                "Vous n’acceptez pas de commandes depuis " + driverActivityOnline.getOfflineTime() + " heure(s) Le système changera votre état en Hors travail";
                String fileName = "OffLine" + driver.getId() + ".mp3";
                String audioUrl = null;
                try {
                    audioUrl = TextToSpeechUtil.create(language == 1 ? "cmn-CN" : language == 2 ? "en-US" : "fr-FR", msg, "OffLine" + driver.getId() + ".mp3");
                    audioUrl = TextToSpeechUtil.create(language == 1 ? "cmn-CN" : language == 2 ? "en-US" : "fr-FR", msg, fileName);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
                Map<String, String> map = new HashMap<>();
                map.put("msg", msg);
                map.put("audioUrl", audioUrl);
                pushUtil.pushOffline(driverOnline.getDriverId(), 2, map);
                pushUtil.afterWork(driverOnline.getDriverId(), 2, map);
                
                //定时任务删除语音文件
                new Timer().schedule(new TimerTask() {
                    @Override
                    public void run() {
                        Process process = null;
                        try {
                            process = Runtime.getRuntime().exec("rm -rf /usr/local/nginx/html/files/audio/OffLine" + driver.getId() + ".mp3");
                        } catch (IOException e) {
                            throw new RuntimeException(e);
                        }
                        if (process != null) {
                            process.destroy();
                            // 使用Runtime执行命令
                            Process process = Runtime.getRuntime().exec("sudo rm -rf /data/nginx/html/files/audio/" + fileName);
                            // 读取命令的输出
                            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                            String line;
                            while ((line = reader.readLine()) != null) {
                                System.out.println(line);
                            }
                            // 等待命令执行完成
                            process.waitFor();
                            // 关闭流
                            reader.close();
                        } catch (IOException | InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }, 30000);
@@ -279,7 +293,7 @@
    public void deductionDuration1() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        List<DriverActivityHistory> driverActivityHistories = driverActivityHistoryMapper.selectList(new EntityWrapper<DriverActivityHistory>()
                .eq("type", 3).eq("carryOut", 1).last(" and day = '" + sdf.format(new Date()) + "'"));
                .eq("type", 3).eq("carryOut", 1).last(" and day = '" + sdf.format(new Date()) + "' and driverActivityId in (select id from t_driver_activity where status = 3 and now() between startTime and endTime)"));
        for (DriverActivityHistory driverActivityHistory : driverActivityHistories) {
            DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driverActivityHistory.getDriverId()).eq("state", 1));
            if(null == driverWork){
@@ -298,13 +312,13 @@
            //在线时长累计
            Long time = jsonObject.getLong("time") / 60000;
            int count1 = orderPrivateCarService.selectCount(new EntityWrapper<OrderPrivateCar>().eq("driverId", driverActivityHistory.getDriverId())
                    .eq("isDelete", 1).ne("state", 10).last(" and UNIX_TIMESTAMP(snatchOrderTime) > " + (startTime) / 1000));
                    .eq("isDelete", 1).ne("state", 10).last(" and UNIX_TIMESTAMP(snatchOrderTime) > " + (startTime / 1000)));
            int count2 = orderLogisticsService.selectCount(new EntityWrapper<OrderLogistics>().eq("driverId", driverActivityHistory.getDriverId())
                    .eq("isDelete", 1).ne("state", 10).last(" and UNIX_TIMESTAMP(snatchOrderTime) > " + (startTime) / 1000));
                    .eq("isDelete", 1).ne("state", 10).last(" and UNIX_TIMESTAMP(snatchOrderTime) > " + (startTime / 1000)));
    
            Driver driver = driverService.selectById(driverWork.getDriverId());
            //阶段时间累计时长超过设定时长且没有接单,不计入累计总时长(司机服务中不下班)
            if(m <= time && count1 + count2 == 0 && driver.getState() != 3){
            if(m <= time && (count1 + count2) == 0){
                //司机下班,清空当前阶段的累计时长
                driverWork.setState(2);
                driverWork.setEndTime(new Date());
@@ -317,35 +331,42 @@
                String msg = language == 1 ? "您已连续" + driverActivityOnline.getOfflineTime() + "小时未接单,系统将强制更改您的状态为:下班" :
                        language == 2 ? "You have not been accepting orders for " + driverActivityOnline.getOfflineTime() + " hour(s) System will change your state to Off-work" :
                                "Vous n’acceptez pas de commandes depuis " + driverActivityOnline.getOfflineTime() + " heure(s) Le système changera votre état en Hors travail";
                String fileName = "OffLine" + driver.getId() + ".mp3";
                String audioUrl = null;
                try {
                    audioUrl = TextToSpeechUtil.create(language == 1 ? "cmn-CN" : language == 2 ? "en-US" : "fr-FR", msg, "OffLine" + driver.getId() + ".mp3");
                    audioUrl = TextToSpeechUtil.create(language == 1 ? "cmn-CN" : language == 2 ? "en-US" : "fr-FR", msg, fileName);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
                Map<String, String> map = new HashMap<>();
                map.put("msg", msg);
                map.put("audioUrl", audioUrl);
                pushUtil.pushOffline(driverWork.getDriverId(), 2, map);
                pushUtil.afterWork(driverWork.getDriverId(), 2, map);
    
                //定时任务删除语音文件
                new Timer().schedule(new TimerTask() {
                    @Override
                    public void run() {
                        Process process = null;
                        try {
                            process = Runtime.getRuntime().exec("rm -rf /usr/local/nginx/html/files/audio/OffLine" + driver.getId() + ".mp3");
                        } catch (IOException e) {
                            throw new RuntimeException(e);
                        }
                        if (process != null) {
                            process.destroy();
                            // 使用Runtime执行命令
                            Process process = Runtime.getRuntime().exec("sudo rm -rf /data/nginx/html/files/audio/" + fileName);
                            // 读取命令的输出
                            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                            String line;
                            while ((line = reader.readLine()) != null) {
                                System.out.println(line);
                            }
                            // 等待命令执行完成
                            process.waitFor();
                            // 关闭流
                            reader.close();
                        } catch (IOException | InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }, 30000);
            }
            //阶段时间累计有新的订单,计入累计总时长,重置新的开始统计时间戳
            if(m <= time && count1 + count2 > 0){
            } else if(m <= time && (count1 + count2) > 0){
                //阶段时间累计有新的订单,计入累计总时长,重置新的开始统计时间戳
                DriverOnline driverOnline = this.selectOne(new EntityWrapper<DriverOnline>().eq("DATE_FORMAT(date, '%Y-%m-%d')", sdf.format(new Date()))
                        .eq("driverId", driverActivityHistory.getDriverId()));
                if(null == driverOnline){
@@ -359,7 +380,7 @@
                    driverOnline.setDuration(driverOnline.getDuration() + (time * 60));
                    this.updateById(driverOnline);
                }
                redisUtil.setStrValue("driverActivity_" + driverActivityHistory.getDriverId() + "_" + driverActivityHistory.getId(), "{\"startTime\":" + System.currentTimeMillis() + ", \"time\":" + 0 + "}");
                redisUtil.setStrValue("driverActivity_" + driverActivityHistory.getDriverId() + "_" + driverActivityHistory.getId(), "{\"startTime\":" + System.currentTimeMillis() + ", \"time\":" + 0 + "}", 172800);
            }
        }
    }