Merge remote-tracking branch 'origin/master'
# Conflicts: # cpxt-system/src/main/java/com/cpxt/biz/mapper/StatCarMapper.javamaster
commit
1fb39e73bf
|
|
@ -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,12 +1,18 @@
|
||||||
package com.cpxt.biz.mapper;
|
package com.cpxt.biz.mapper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.cpxt.biz.domain.BizDriverClock;
|
||||||
import com.cpxt.biz.domain.StatCar;
|
import com.cpxt.biz.domain.StatCar;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.apache.ibatis.annotations.Select;
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
import org.apache.ibatis.annotations.Update;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 车辆统计Mapper接口
|
* 车辆统计Mapper接口
|
||||||
|
|
@ -24,4 +30,22 @@ public interface StatCarMapper extends BaseMapper<StatCar>
|
||||||
|
|
||||||
@Select("select t.sumo from (SELECT car_no,SUM(odometer) sumo FROM `stat_car` where stat_date >= #{startTime} and stat_date <= #{endTime} GROUP BY car_no ORDER BY sumo desc limit 5) t")
|
@Select("select t.sumo from (SELECT car_no,SUM(odometer) sumo FROM `stat_car` where stat_date >= #{startTime} and stat_date <= #{endTime} GROUP BY car_no ORDER BY sumo desc limit 5) t")
|
||||||
List<Double> selectOdometerTop5Odometer(@Param("startTime")String startTime,@Param("endTime") String endTime);
|
List<Double> selectOdometerTop5Odometer(@Param("startTime")String startTime,@Param("endTime") String endTime);
|
||||||
|
@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;
|
package com.cpxt.biz.mapper;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
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 com.cpxt.biz.domain.StatDriver;
|
||||||
|
import org.apache.ibatis.annotations.Insert;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 司机统计Mapper接口
|
* 司机统计Mapper接口
|
||||||
|
|
@ -16,4 +22,21 @@ import org.apache.ibatis.annotations.Mapper;
|
||||||
public interface StatDriverMapper extends BaseMapper<StatDriver>
|
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