package com.stylefeng.guns.modular.system.service.impl;
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
import com.stylefeng.guns.core.util.ToolUtil;
|
import com.stylefeng.guns.modular.system.dao.DriverOnlineMapper;
|
import com.stylefeng.guns.modular.system.model.Driver;
|
import com.stylefeng.guns.modular.system.model.DriverAssessment;
|
import com.stylefeng.guns.modular.system.model.DriverOnline;
|
import com.stylefeng.guns.modular.system.model.DriverWork;
|
import com.stylefeng.guns.modular.system.service.IDriverAssessmentService;
|
import com.stylefeng.guns.modular.system.service.IDriverOnlineService;
|
import com.stylefeng.guns.modular.system.service.IDriverService;
|
import com.stylefeng.guns.modular.system.service.IDriverWorkService;
|
import com.stylefeng.guns.modular.system.util.RedisUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.text.SimpleDateFormat;
|
import java.util.Date;
|
|
@Service
|
public class DriverOnlineServiceImpl extends ServiceImpl<DriverOnlineMapper, DriverOnline> implements IDriverOnlineService {
|
|
@Resource
|
private DriverOnlineMapper driverOnlineMapper;
|
|
@Autowired
|
private RedisUtil redisUtil;
|
|
@Autowired
|
private IDriverWorkService driverWorkService;
|
|
@Autowired
|
private IDriverAssessmentService driverAssessmentService;
|
|
@Autowired
|
private IDriverService driverService;
|
|
|
/**
|
* 添加数据
|
* @param driverId
|
* @throws Exception
|
*/
|
@Override
|
public void addDriverOnline(Integer driverId) throws Exception {
|
DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driverId).eq("state", 1));
|
if(null == driverWork){//非上班状态不记录
|
redisUtil.remove("ONLINE_" + driverId);
|
return;
|
}
|
|
//查询数据及条件判断
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
DriverOnline query = driverOnlineMapper.query(driverId, sdf.format(new Date()), 0);//正常记录数据
|
DriverOnline query1 = null;//考勤范围内的数据
|
DriverAssessment driverAssessment = driverAssessmentService.selectOne(new EntityWrapper<DriverAssessment>()
|
.eq("companyId", driverService.selectById(driverId).getCompanyId()));
|
Date s = null;
|
Date e = null;
|
long now = System.currentTimeMillis();
|
if(null != driverAssessment){//在考勤范围内记录数据
|
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
String[] split = driverAssessment.getAssessment().split(" - ");
|
s = sdf1.parse(sdf.format(new Date()) + " " + split[0]);
|
e = sdf1.parse(sdf.format(new Date()) + " " + split[1]);
|
if(now > s.getTime() && now <= e.getTime()){
|
query1 = driverOnlineMapper.query(driverId, sdf.format(new Date()), 1);
|
}
|
}
|
|
//开始修改数据
|
if(query != null){
|
String value = redisUtil.getValue("ONLINE_" + driverId);
|
if(ToolUtil.isEmpty(value)){
|
redisUtil.setStrValue("ONLINE_" + driverId, String.valueOf(now / 1000));//存入秒
|
return;
|
}
|
Long ss = (now / 1000) - Long.valueOf(value);
|
if(ss.longValue() >= 600){//间隔时间大于10分钟则为离线
|
redisUtil.remove("ONLINE_" + driverId);
|
return;
|
}
|
|
query.setDuration(query.getDuration() + ss);
|
driverOnlineMapper.updateById(query);
|
|
//记录考勤范围内的数据
|
if(null != s && null != e && now > s.getTime() && now <= e.getTime()){
|
if(null != query1){
|
query1.setDuration(query1.getDuration() + ss);
|
driverOnlineMapper.updateById(query1);
|
}else{
|
query1 = new DriverOnline();
|
query1.setDriverId(driverId);
|
query1.setDate(new Date());
|
query1.setAssessment(1);
|
query1.setDuration(ss);
|
driverOnlineMapper.insert(query1);
|
}
|
}
|
|
}else{
|
DriverOnline driverOnline = new DriverOnline();
|
driverOnline.setDriverId(driverId);
|
driverOnline.setDate(new Date());
|
driverOnline.setAssessment(0);
|
driverOnline.setDuration(0L);
|
driverOnlineMapper.insert(driverOnline);
|
}
|
redisUtil.setStrValue("ONLINE_" + driverId, String.valueOf(now / 1000));//存入秒
|
}
|
|
|
/**
|
* 获取给定日期范围的在线时长
|
* @param driverId
|
* @param assessment
|
* @param start yyyy-MM-dd
|
* @param end yyyy-MM-dd
|
* @return
|
*/
|
@Override
|
public Integer querySumTime(Integer driverId, Integer assessment, Date start, Date end) {
|
return driverOnlineMapper.querySumTime(driverId, assessment, start, end);
|
}
|
}
|