定时统计司机工作情况,车辆使用情况
parent
8bc652b66e
commit
635226f888
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue