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 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().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().eq("type", 1)); JSONObject jsonObject = JSON.parseObject(systemConfig.getContent()); Integer num5 = jsonObject.getInteger("num5"); OrderTransfer orderTransfer = orderTransferService.selectOne(new EntityWrapper().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().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 state = Arrays.asList(102, 103, 104, 105, 106, 201, 401); int count = orderService.selectCount(new EntityWrapper().eq("driverId", driverId).eq("status", 1).in("state", state)); if(count > 0){ return ResultUtil.error("还有未完成的订单"); } DriverWork driverWork = this.selectOne(new EntityWrapper().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().eq("type", 6)); Double num1 = JSON.parseObject(systemConfig.getContent()).getDouble("num1"); List drivers = driverService.selectList(new EntityWrapper().eq("approvalStatus", 2).eq("status", 1).lt("balance", num1)); for (Driver driver : drivers) { DriverWork driverWork = this.selectOne(new EntityWrapper().eq("driverId", driver.getId()).eq("status", 1)); if(null != driverWork){ driverWork.setStatus(2); driverWork.setOffWorkTime(new Date()); this.updateById(driverWork); } } } }