定时统计司机工作情况,车辆使用情况

master
YIN 2025-01-03 09:15:40 +08:00
parent 8bc652b66e
commit 635226f888
3 changed files with 229 additions and 0 deletions

View File

@ -0,0 +1,183 @@
package com.cpxt.web.task;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cpxt.biz.domain.*;
import com.cpxt.biz.mapper.*;
import com.cpxt.common.utils.DateUtils;
import com.cpxt.common.utils.Helper;
import com.e6yun.project.sdk.api.E6SdkApi;
import com.e6yun.project.sdk.api.exception.ApiException;
import com.e6yun.project.sdk.api.pojo.basevo.basic.VehicleInfoResp;
import com.e6yun.project.sdk.api.pojo.business.GetVehicleInfoVO;
import org.apache.commons.beanutils.PropertyUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component("statTask")
public class StatTask {
// 域名
private static final String ADDRESS = "http://api.e6yun.com/";
// 公钥
private static final String APP_KEY = "FEB9F91D-BCD7-4DC2-97D1-CB599EEAF9D5";
// 密钥
private static final String SECRET_KEY = "A8211E8F-9E95-4C80-9414-CD5E1F675FEF";
/*添加代码 begin*/
private static StatTask statTask;
@Autowired
private BizCarStateMapper stateMapper;
@Autowired
private BizCarMapper carMapper;
@Autowired
private BizDriverMapper driverMapper;
@Autowired
private TrackTempMapper trackMapper;
@Autowired
private StatCarMapper statCarMapper;
@Autowired
private StatDriverMapper statDriverMapper;
@PostConstruct
public void init(){
statTask = this;
// statTask.commonService = this.commonService;
statTask.carMapper = this.carMapper;
statTask.statCarMapper = this.statCarMapper;
statTask.driverMapper = this.driverMapper;
statTask.stateMapper = this.stateMapper;
statTask.trackMapper = this.trackMapper;
}
// 定时统计车辆使用情况
public void statWorkData(){
Date now = new Date();
LambdaQueryWrapper<BizCar> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(BizCar::getStatus,1);
List<BizCar> carList = statTask.carMapper.selectList(queryWrapper);
String today = DateUtils.getDate();
LambdaQueryWrapper<StatCar> statCarQueryWrapper = new LambdaQueryWrapper<>();
statCarQueryWrapper.eq(StatCar::getStatDate, today);
List<StatCar> statCarList = statTask.statCarMapper.selectList(statCarQueryWrapper);
// 当天没有统计数据,初始化所有车辆统计数
if (statCarList==null || statCarList.size()<=0){
statTask.statCarMapper.initStatCar(today);
}
for (BizCar car : carList) {
StatCar todayStat = statTask.statCarMapper.selectTodayByCarId(car.getId());
Map map = statTask.statCarMapper.getTodayOdometer(car.getId().toString());
BigDecimal odometer = new BigDecimal(0);
if (map!=null && Helper.FInt(map.get("minOdometer"))>0) {
BigDecimal min = new BigDecimal(Helper.FDouble(map.get("minOdometer")));
BigDecimal max = new BigDecimal(Helper.FDouble(map.get("maxOdometer")));
odometer = max.subtract(min);
}
todayStat.setOdometer(odometer);
// 获取车辆今日订单数
Map jrdd = statTask.statCarMapper.getTodayOrderCount(car.getId());
if (jrdd!=null)
todayStat.setOrderCount(Helper.FInt(jrdd.get("orderCount")));
Map jrsj = statTask.statCarMapper.selectDriverByCarId(car.getId());
int usetime = 0;
if (jrsj!=null){
Long driverId = Helper.FLong(jrsj.get("driver_id"));
List<BizDriverClock> clocks = statTask.statDriverMapper.selectDriverClockList(driverId);
for (BizDriverClock clock : clocks) {
Date ontime = clock.getOnTime();
Date offtime = clock.getOffTime();
if (offtime==null)
offtime = now;
if (ontime.getDay()!=now.getDay())
ontime = DateUtils.dateTime(DateUtils.YYYY_MM_DD, DateUtils.getDate());
int diffsecond = Helper.FInt( (offtime.getTime() - ontime.getTime()) / 1000);
usetime += diffsecond;
}
}
todayStat.setUseTime(usetime);
statTask.statCarMapper.updateById(todayStat);
}
LambdaQueryWrapper<BizDriver> bizDriverQueryWrapper = new LambdaQueryWrapper<>();
bizDriverQueryWrapper.eq(BizDriver::getStatus,1);
List<BizDriver> driverList = statTask.driverMapper.selectList(bizDriverQueryWrapper);
LambdaQueryWrapper<StatDriver> statDriverQueryWrapper = new LambdaQueryWrapper<>();
statDriverQueryWrapper.eq(StatDriver::getStatDate, today);
List<StatDriver> statDriverList = statTask.statDriverMapper.selectList(statDriverQueryWrapper);
// 当天没有统计数据,初始化所有车辆统计数
if (statDriverList==null || statDriverList.size()<=0){
statTask.statDriverMapper.initStatDriver(today);
}
for (BizDriver driver : driverList) {
StatDriver todayStat = statTask.statDriverMapper.selectTodayByDriverId(driver.getId());
List<BizDriverClock> clocks = statTask.statDriverMapper.selectDriverClockList(driver.getId());
int usetime = 0;
BigDecimal odometer = new BigDecimal(0);
for (BizDriverClock clock : clocks) {
Date ontime = clock.getOnTime();
Date offtime = clock.getOffTime();
if (offtime==null)
offtime = now;
if (ontime.getDay()!=now.getDay())
ontime = DateUtils.dateTime(DateUtils.YYYY_MM_DD, DateUtils.getDate());
int diffsecond = Helper.FInt( (offtime.getTime() - ontime.getTime()) / 1000);
usetime += diffsecond;
if (Helper.FInt(driver.getCurrentCarId())>0) {
Map map = statTask.statDriverMapper.getTodayOdometer(
driver.getCurrentCarId().toString(),
DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, ontime),
DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, offtime));
if (map != null && Helper.FInt(map.get("minOdometer")) > 0) {
BigDecimal min = new BigDecimal(Helper.FDouble(map.get("minOdometer")));
BigDecimal max = new BigDecimal(Helper.FDouble(map.get("maxOdometer")));
odometer = odometer.add(max.subtract(min));
}
}
}
todayStat.setOnlineTime(usetime);
todayStat.setOdometer(odometer);
Map jrdd = statTask.statDriverMapper.getTodayOrderCount(driver.getId());
if (jrdd!=null)
todayStat.setOrderCount(Helper.FInt(jrdd.get("orderCount")));
statTask.statDriverMapper.updateById(todayStat);
}
}
}

View File

@ -1,10 +1,15 @@
package com.cpxt.biz.mapper;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cpxt.biz.domain.BizDriverClock;
import com.cpxt.biz.domain.StatCar;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
/**
* Mapper
@ -16,4 +21,22 @@ import org.apache.ibatis.annotations.Mapper;
public interface StatCarMapper extends BaseMapper<StatCar>
{
@Insert("insert into stat_car (stat_date, car_id, car_no) select #{statDate}, id, car_no from biz_car where status = 1 ")
void initStatCar(String statDate);
@Select("select min(odometer) minOdometer, max(odometer) maxOdometer from track_${carId} where car_id = #{carId} and gps_time BETWEEN CURDATE() AND CURDATE() + INTERVAL 1 DAY ")
Map getTodayOdometer(String carId);
@Select("select * from stat_car where car_id = #{carId} and stat_date BETWEEN CURDATE() AND CURDATE() + INTERVAL 1 DAY ")
StatCar selectTodayByCarId(Long carId);
@Select("select count(id) orderCount from biz_order where car_id = #{carId} and create_time BETWEEN CURDATE() AND CURDATE() + INTERVAL 1 DAY ")
Map getTodayOrderCount(Long carId);
@Select("select * from biz_driver_clock where car_id = #{carId} and ((on_time BETWEEN CURDATE() AND CURDATE() + INTERVAL 1 DAY ) or off_time BETWEEN CURDATE() AND CURDATE() + INTERVAL 1 DAY)) ")
Map getTodayUsetime(Long carId);
@Select("select driver_id from biz_order where car_id = #{carId} and create_time BETWEEN CURDATE() AND CURDATE() + INTERVAL 1 DAY limit 1 ")
Map selectDriverByCarId(Long carId);
}

View File

@ -1,10 +1,16 @@
package com.cpxt.biz.mapper;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cpxt.biz.domain.BizDriverClock;
import com.cpxt.biz.domain.StatCar;
import com.cpxt.biz.domain.StatDriver;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/**
* Mapper
@ -16,4 +22,21 @@ import org.apache.ibatis.annotations.Mapper;
public interface StatDriverMapper extends BaseMapper<StatDriver>
{
@Insert("insert into stat_driver (stat_date, driver_id, driver_name) select #{statDate}, id, name from biz_driver where status = 1 ")
void initStatDriver(String statDate);
@Select("select min(odometer) minOdometer, max(odometer) maxOdometer from track_${carId} where car_id = #{carId} and gps_time between #{startTime} and #{endTime} ")
Map getTodayOdometer(@Param("carId") String carId, @Param("startTime") String startTime, @Param("endTime") String endTime);
@Select("select * from stat_driver where driver_id = #{driverId} and stat_date BETWEEN CURDATE() AND CURDATE() + INTERVAL 1 DAY")
StatDriver selectTodayByDriverId(Long driverId);
@Select("select count(id) orderCount from biz_order where (driver_id = #{driverId} or copilot_id = #{driverId}) and create_time BETWEEN CURDATE() AND CURDATE() + INTERVAL 1 DAY")
Map getTodayOrderCount(Long driverId);
@Select("select * from biz_driver_clock where driver_id = #{driverId} order by on_time desc limit 1 ")
Map getTodayUsetime(Long driverId);
@Select("select * from biz_driver_clock where driver_id = #{driverId} and ( on_time BETWEEN CURDATE() - INTERVAL 23 HOUR AND NOW() or off_time between CURDATE() and NOW() ) order by on_time asc ")
List<BizDriverClock> selectDriverClockList(Long driverId);
}