puzhibing
2023-06-30 f58cca364b731eac2d60a440ffaa804be3cd43fd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package com.agentdriving.driver.modular.system.service.impl;
 
import com.agentdriving.driver.core.util.ToolUtil;
import com.agentdriving.driver.modular.system.dao.DriverWorkMapper;
import com.agentdriving.driver.modular.system.model.*;
import com.agentdriving.driver.modular.system.service.*;
import com.agentdriving.driver.modular.system.util.RedisUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.agentdriving.driver.modular.system.model.*;
import com.agentdriving.driver.modular.system.service.*;
import com.agentdriving.driver.modular.system.util.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.Arrays;
import java.util.Date;
import java.util.List;
 
/**
* 司机上下班操作记录
* @author pzb
* @Date 2023/2/15 15:48
*/
@Service
public class DriverWorkServiceImpl extends ServiceImpl<DriverWorkMapper, DriverWork> implements IDriverWorkService {
 
    @Autowired
    private IDriverService driverService;
 
    @Autowired
    private ISystemConfigService systemConfigService;
 
    @Autowired
    private IOrderService orderService;
 
    @Autowired
    private IOrderTransferService orderTransferService;
 
    @Autowired
    private RedisUtil redisUtil;
 
 
 
    /**
     * 司机上班操作
     * @param driverId
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil driverWork(Integer driverId) throws Exception {
        Driver driver = driverService.selectById(driverId);
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 6));
        Double num1 = JSON.parseObject(systemConfig.getContent()).getDouble("num1");
        if(driver.getBalance() == null || driver.getBalance().compareTo(num1) < 0){
            return ResultUtil.error("账户余额不足,请先充值");
        }
        systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 1));
        JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
        Integer num5 = jsonObject.getInteger("num5");
        OrderTransfer orderTransfer = orderTransferService.selectOne(new EntityWrapper<OrderTransfer>().eq("oldDriverId", driverId)
                .eq("status", 1).isNotNull("successTime").orderBy("createTime desc limit 0, 1"));
        if(null != orderTransfer){
            int i = Double.valueOf((System.currentTimeMillis() - orderTransfer.getSuccessTime().getTime()) / 60000).intValue();
            if(num5 > i){
                return ResultUtil.error("暂时还无法上班,请" + (num5 - i) + "分钟后重试");
            }
        }
 
        DriverWork driverWork = this.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driverId).eq("status", 1));
        if(null != driverWork){
            return ResultUtil.error("您正在上班中");
        }
        driverWork = new DriverWork();
        driverWork.setDriverId(driverId);
        driverWork.setWorkTime(new Date());
        driverWork.setOnlineTime(0L);
        driverWork.setStatus(1);
        this.insert(driverWork);
        return ResultUtil.success();
    }
 
 
    /**
     * 司机下班操作
     * @param driverId      司机id
     * @param onlineTime    在线时长(秒)
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil driverOffWork(Integer driverId, Long onlineTime) throws Exception {
        List<Integer> state = Arrays.asList(102, 103, 104, 105, 106, 201, 401);
        int count = orderService.selectCount(new EntityWrapper<Order>().eq("driverId", driverId).eq("status", 1).in("state", state));
        if(count > 0){
            return ResultUtil.error("还有未完成的订单");
        }
        DriverWork driverWork = this.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driverId).eq("status", 1));
        if(null == driverWork){
            return ResultUtil.error("您还未上班");
        }
        driverWork.setOffWorkTime(new Date());
        driverWork.setOnlineTime(0L);
        String value = redisUtil.getValue("ONLINE" + driverId);
        if(ToolUtil.isNotEmpty(value)){
            Integer online = Integer.valueOf(value.split("_")[0]);
            driverWork.setOnlineTime(online.longValue());
        }
        driverWork.setStatus(2);
        this.updateById(driverWork);
        Driver driver = driverService.selectById(driverId);
        driver.setServerStatus(1);
        driverService.updateById(driver);
        return ResultUtil.success();
    }
 
 
    @Override
    public void taskDriverOffWork() {
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 6));
        Double num1 = JSON.parseObject(systemConfig.getContent()).getDouble("num1");
        List<Driver> drivers = driverService.selectList(new EntityWrapper<Driver>().eq("approvalStatus", 2).eq("status", 1).lt("balance", num1));
        for (Driver driver : drivers) {
            DriverWork driverWork = this.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driver.getId()).eq("status", 1));
            if(null != driverWork){
                driverWork.setStatus(2);
                driverWork.setOffWorkTime(new Date());
                this.updateById(driverWork);
            }
        }
    }
}