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);
|
}
|
}
|
}
|
}
|