package com.steerinfo.dil.service.impl; import com.steerinfo.dil.mapper.TmstruckTimeTaskResultMapper; import com.steerinfo.dil.model.TmstruckTimeTaskResult; import com.steerinfo.dil.service.ITmstruckTimeTaskResultService; import com.steerinfo.dil.util.DataChange; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Map; /** * TmstruckTimeTskResult服务实现: * @author generator * @version 1.0-SNAPSHORT 2021-10-22 07:28 * 类描述 * 修订历史: * 日期:2021-10-22 * 作者:generator * 参考: * 描述:TmstruckTimeTskResult服务实现 * @see null * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved. */ @Service(value = "tmstruckTimeTaskResultService") public class TmstruckTimeTaskResultServiceImpl implements ITmstruckTimeTaskResultService { @Autowired private TmstruckTimeTaskResultMapper tmstruckTimeTaskResultMapper; /** * 通用生成实例数据 * @param map * @return */ public TmstruckTimeTaskResult generateTimeTaskResult(Map map, Integer timeType){ TmstruckTimeTaskResult tmstruckTimeTaskResult = new TmstruckTimeTaskResult(); //获取主键ID tmstruckTimeTaskResult.setId(tmstruckTimeTaskResultMapper.selectMaxId()); String orderNumber = (String) map.get("orderNumber"); //通过运输订单号查询总实绩ID等数据 map.putAll(tmstruckTimeTaskResultMapper.getResultTotalIdByOrderNum(orderNumber)); tmstruckTimeTaskResult.setResultTotalId(DataChange.dataToBigDecimal(map.get("resultTotalId"))); //生成时间 tmstruckTimeTaskResult.setResultTime(new Date()); //设置时间类型 tmstruckTimeTaskResult.setResultTimeType(new BigDecimal(timeType)); return tmstruckTimeTaskResult; } /** * 司机申请开始 * @param map * @return */ @Override public int applyStartTime(Map map) { //设置时间类型 0 TmstruckTimeTaskResult tmstruckTimeTaskResult = generateTimeTaskResult(map, 0); return tmstruckTimeTaskResultMapper.insertSelective(tmstruckTimeTaskResult); } /** * 用车单位确认开始 * @param map * @return */ @Override public int unitSureStartTime(Map map) { //设置时间类型 1 TmstruckTimeTaskResult tmstruckTimeTaskResult = generateTimeTaskResult(map, 1); return tmstruckTimeTaskResultMapper.insertSelective(tmstruckTimeTaskResult); } /** * 司机申请暂停 * @param map * @return */ @Override public int applyStartTimeout(Map map) { //设置时间类型 4 TmstruckTimeTaskResult tmstruckTimeTaskResult = generateTimeTaskResult(map, 4); return tmstruckTimeTaskResultMapper.insertSelective(tmstruckTimeTaskResult); } /** * 用车单位确认 * @param map * @return */ @Override public int unitSureStartTimeout(Map map) { //设置时间类型 5 TmstruckTimeTaskResult tmstruckTimeTaskResult = generateTimeTaskResult(map, 5); return tmstruckTimeTaskResultMapper.insertSelective(tmstruckTimeTaskResult); } /** * 司机申请暂停结束 * @param map * @return */ @Override public int applyEndTimeout(Map map) { //设置时间类型 6 TmstruckTimeTaskResult tmstruckTimeTaskResult = generateTimeTaskResult(map, 6); return tmstruckTimeTaskResultMapper.insertSelective(tmstruckTimeTaskResult); } /** * 用车单位确认暂停结束 * @param map * @return */ @Override public int unitSureEndTimeout(Map map) { //设置时间类型 7 TmstruckTimeTaskResult tmstruckTimeTaskResult = generateTimeTaskResult(map, 7); //查询上一次结束的时间 Map timeMap = tmstruckTimeTaskResultMapper.getLastTimeout(tmstruckTimeTaskResult.getResultTotalId()); Object resultTime = timeMap.get("resultTime"); if(resultTime != null){ Date lastTimeout = (Date) resultTime; //计算相差时间戳 存入当前实绩中 更精确 long differenceTime = new Date().getTime() - lastTimeout.getTime(); tmstruckTimeTaskResult.setResultValue(new BigDecimal(differenceTime)); } return tmstruckTimeTaskResultMapper.insertSelective(tmstruckTimeTaskResult); } /** * 司机申请结束 * @param map * @return */ @Override public int applyEndTime(Map map) { //设置时间类型 2 TmstruckTimeTaskResult tmstruckTimeTaskResult = generateTimeTaskResult(map, 2); return tmstruckTimeTaskResultMapper.insertSelective(tmstruckTimeTaskResult); } /** * 用车单位确认结束 * @param map * @return */ @Override public int unitSureEndTime(Map map) { //设置时间类型 3 TmstruckTimeTaskResult tmstruckTimeTaskResult = generateTimeTaskResult(map, 3); //查询当前车辆排队开始时间 计算出总时长 Map startTimeMap = tmstruckTimeTaskResultMapper.getStartTime(tmstruckTimeTaskResult.getResultTotalId()); Date endTime = new Date(); //计算当前时间与确认开始时间相差的毫秒数(时间戳) Date startTime = (Date) startTimeMap.get("resultTime"); long allTime = endTime.getTime() - startTime.getTime(); //查询所有确认暂停结束的时长时间戳 List> allTimeout = tmstruckTimeTaskResultMapper.getAllTimeout(tmstruckTimeTaskResult.getResultTotalId()); long allTimeoutTime = 0; //计算所有暂停时间时长时间戳总和 for (Map timeoutMap : allTimeout) { BigDecimal resultTime = DataChange.dataToBigDecimal(timeoutMap.get("resultValue")); allTimeoutTime += resultTime.longValue(); } long realTime = allTime - allTimeoutTime; //计算总工作时长(分钟) realTime = realTime / (1000 * 60); tmstruckTimeTaskResult.setResultValue(new BigDecimal(realTime)); return tmstruckTimeTaskResultMapper.insertSelective(tmstruckTimeTaskResult); } /** * 查询计时作业 * @param map * @return */ @Override public List> getAllTimeTaskResult(Map map) { return tmstruckTimeTaskResultMapper.getAllTimeTaskResult(map); } }