TmstruckTimeTaskResultServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376
  1. package com.steerinfo.dil.service.impl;
  2. import com.steerinfo.dil.feign.OmsFeign;
  3. import com.steerinfo.dil.mapper.TmstruckTimeTaskResultMapper;
  4. import com.steerinfo.dil.mapper.UtilsMapper;
  5. import com.steerinfo.dil.model.TmstruckTimeTaskResult;
  6. import com.steerinfo.dil.service.ITmstruckTimeTaskResultService;
  7. import com.steerinfo.dil.util.DataChange;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Service;
  10. import org.springframework.transaction.annotation.Transactional;
  11. import javax.xml.crypto.Data;
  12. import java.math.BigDecimal;
  13. import java.util.Date;
  14. import java.util.HashMap;
  15. import java.util.List;
  16. import java.util.Map;
  17. /**
  18. * TmstruckTimeTskResult服务实现:
  19. * @author generator
  20. * @version 1.0-SNAPSHORT 2021-10-22 07:28
  21. * 类描述
  22. * 修订历史:
  23. * 日期:2021-10-22
  24. * 作者:generator
  25. * 参考:
  26. * 描述:TmstruckTimeTskResult服务实现
  27. * @see null
  28. * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
  29. */
  30. @Service(value = "tmstruckTimeTaskResultService")
  31. public class TmstruckTimeTaskResultServiceImpl implements ITmstruckTimeTaskResultService {
  32. @Autowired
  33. private TmstruckTimeTaskResultMapper tmstruckTimeTaskResultMapper;
  34. @Autowired
  35. private UtilsMapper utilsMapper;
  36. @Autowired
  37. private UtilsServiceImpl utilsService;
  38. @Autowired
  39. private OmsFeign omsFeign;
  40. /**
  41. * 通用生成实例数据
  42. *
  43. * @param map
  44. * @return
  45. */
  46. public TmstruckTimeTaskResult generateTimeTaskResult(Map<String, Object> map) {
  47. TmstruckTimeTaskResult tmstruckTimeTaskResult = new TmstruckTimeTaskResult();
  48. //获取主键ID
  49. tmstruckTimeTaskResult.setId(tmstruckTimeTaskResultMapper.selectMaxId());
  50. String orderNumber = (String) map.get("orderNumber");
  51. BigDecimal inwardType = DataChange.dataToBigDecimal(map.get("inwardType"));
  52. //通过运输订单号查询总实绩ID等数据
  53. map.putAll(tmstruckTimeTaskResultMapper.getResultTotalIdByOrderNum(orderNumber));
  54. tmstruckTimeTaskResult.setResultTotalId(DataChange.dataToBigDecimal(map.get("resultTotalId")));
  55. //生成时间
  56. tmstruckTimeTaskResult.setResultTime(new Date());
  57. //生成订单结束
  58. tmstruckTimeTaskResult.setResultUomId(new BigDecimal(900));
  59. //设置时间类型
  60. tmstruckTimeTaskResult.setResultTimeType(inwardType);
  61. String personnelSsoId =(String) map.get("personnelSsoId");
  62. tmstruckTimeTaskResult.setInsertUsername(personnelSsoId);
  63. tmstruckTimeTaskResultMapper.insertSelective(tmstruckTimeTaskResult);
  64. return tmstruckTimeTaskResult;
  65. }
  66. /**
  67. * 司机申请开始
  68. *
  69. * @param map
  70. * @return
  71. */
  72. @Override
  73. public int applyStartTime(Map<String, Object> map) {
  74. //设置时间类型 0
  75. TmstruckTimeTaskResult tmstruckTimeTaskResult = generateTimeTaskResult(map);
  76. return tmstruckTimeTaskResultMapper.insertSelective(tmstruckTimeTaskResult);
  77. }
  78. /**
  79. * 用车单位确认开始
  80. *
  81. * @param map
  82. * @return
  83. */
  84. @Override
  85. public int unitSureStartTime(Map<String, Object> map) {
  86. //设置时间类型 1
  87. TmstruckTimeTaskResult tmstruckTimeTaskResult = generateTimeTaskResult(map);
  88. return tmstruckTimeTaskResultMapper.insertSelective(tmstruckTimeTaskResult);
  89. }
  90. /**
  91. * 司机申请暂停
  92. *
  93. * @param map
  94. * @return
  95. */
  96. @Override
  97. public int applyStartTimeout(Map<String, Object> map) {
  98. //设置时间类型 4
  99. TmstruckTimeTaskResult tmstruckTimeTaskResult = generateTimeTaskResult(map);
  100. return tmstruckTimeTaskResultMapper.insertSelective(tmstruckTimeTaskResult);
  101. }
  102. /**
  103. * 用车单位确认
  104. *
  105. * @param map
  106. * @return
  107. */
  108. @Override
  109. public int unitSureStartTimeout(Map<String, Object> map) {
  110. //设置时间类型 5
  111. TmstruckTimeTaskResult tmstruckTimeTaskResult = generateTimeTaskResult(map);
  112. return tmstruckTimeTaskResultMapper.insertSelective(tmstruckTimeTaskResult);
  113. }
  114. /**
  115. * 司机申请暂停结束
  116. *
  117. * @param map
  118. * @return
  119. */
  120. @Override
  121. public int applyEndTimeout(Map<String, Object> map) {
  122. //设置时间类型 6
  123. TmstruckTimeTaskResult tmstruckTimeTaskResult = generateTimeTaskResult(map);
  124. return tmstruckTimeTaskResultMapper.insertSelective(tmstruckTimeTaskResult);
  125. }
  126. /**
  127. * 用车单位确认暂停结束
  128. *
  129. * @param map
  130. * @return
  131. */
  132. @Override
  133. public int unitSureEndTimeout(Map<String, Object> map) {
  134. int i=0;
  135. //map中传输的参数为InwardType,orderNumber
  136. //根据运输订单号查找订单id
  137. //如果订单类型为5
  138. String personnelSsoId =(String) map.get("personnelSsoId");
  139. String orderNumber =(String) map.get("orderNumber");
  140. //根据运输订单号查找运输订单id
  141. BigDecimal orderId = utilsMapper.getOrderIdByOrderNumber(orderNumber);
  142. map.put("orderId",orderId);
  143. BigDecimal inwardType =DataChange.dataToBigDecimal(map.get("inwardType"));
  144. if (inwardType.intValue()==5){
  145. generateTimeTaskResult(map);
  146. }else if (inwardType.intValue()==7){
  147. TmstruckTimeTaskResult tmstruckTimeTaskResult = generateTimeTaskResult(map);
  148. //生成计时实绩暂停
  149. //根据运输订单号查找总实绩id
  150. BigDecimal totalId = utilsMapper.getTotalIdByOrderNumber(orderNumber);
  151. //根据总实绩id查找开始时间
  152. Map<String, Object> lastTimeout = tmstruckTimeTaskResultMapper.getLastTimeout(totalId);
  153. Date startTime =(Date) lastTimeout.get("resultTime");
  154. //根据总实绩id查找结束时间
  155. Map<String, Object> lastTimeEnd = tmstruckTimeTaskResultMapper.getLastTimeEnd(totalId);
  156. Date EndTime = (Date) lastTimeEnd.get("resultTime");
  157. long dueTime=EndTime.getTime()-startTime.getTime();
  158. tmstruckTimeTaskResult.setTimeTaskResultId(tmstruckTimeTaskResult.getTimeTaskResultId());
  159. tmstruckTimeTaskResult.setResultValue(new BigDecimal((dueTime/(1000*60))));
  160. tmstruckTimeTaskResult.setUpdateTime(new Date());
  161. tmstruckTimeTaskResult.setUpdateUsername(personnelSsoId);
  162. i+=tmstruckTimeTaskResultMapper.updateByPrimaryKeySelective(tmstruckTimeTaskResult);
  163. }
  164. return i;
  165. }
  166. //判断计时订单结束后推单
  167. @Override
  168. public int pushOrderForPause(Map<String, Object> map) {
  169. int i=0;
  170. //关闭内转订单
  171. map.put("orderStatus", 2);
  172. i = utilsMapper.updateOrderStatusByOrderIdOrNum(map);
  173. BigDecimal orderId1 = DataChange.dataToBigDecimal(map.get("orderId"));
  174. map= tmstruckTimeTaskResultMapper.selectInwardDueTimeByOrderId(orderId1);
  175. //根据运输订单id查找需求日期是否超过一个月
  176. if(map != null) {
  177. Date dueDate = (Date) map.get("dueTime");
  178. //当前时间小于截至日期
  179. long DueTime = dueDate.getTime() + 86400000;
  180. //获取当前时间
  181. Date date = new Date();
  182. long nowTime = date.getTime();
  183. if (nowTime < DueTime) {
  184. //推送
  185. omsFeign.addNewTransportOrder(orderId1);
  186. }
  187. }
  188. return i;
  189. }
  190. /**
  191. * 司机申请结束
  192. * @param map
  193. * @return
  194. */
  195. @Override
  196. public int applyEndTime(Map<String, Object> map) {
  197. //设置时间类型 2
  198. TmstruckTimeTaskResult tmstruckTimeTaskResult = generateTimeTaskResult(map);
  199. return tmstruckTimeTaskResultMapper.insertSelective(tmstruckTimeTaskResult);
  200. }
  201. /**
  202. * 用车单位确认结束
  203. * @param map
  204. * @return
  205. */
  206. @Override
  207. public int unitSureEndTime(Map<String, Object> map) {
  208. //设置时间类型 3
  209. TmstruckTimeTaskResult tmstruckTimeTaskResult = generateTimeTaskResult(map);
  210. //查询当前车辆排队开始时间 计算出总时长
  211. Map<String, Object> startTimeMap = tmstruckTimeTaskResultMapper.getStartTime(tmstruckTimeTaskResult.getResultTotalId());
  212. Date endTime = new Date();
  213. //计算当前时间与确认开始时间相差的毫秒数(时间戳)
  214. Date startTime = (Date) startTimeMap.get("resultTime");
  215. long allTime = endTime.getTime() - startTime.getTime();
  216. //查询所有确认暂停结束的时长时间戳
  217. List<Map<String, Object>> allTimeout = tmstruckTimeTaskResultMapper.getAllTimeout(tmstruckTimeTaskResult.getResultTotalId());
  218. long allTimeoutTime = 0;
  219. //计算所有暂停时间时长时间戳总和
  220. for (Map<String, Object> timeoutMap : allTimeout) {
  221. BigDecimal resultTime = DataChange.dataToBigDecimal(timeoutMap.get("resultValue"));
  222. allTimeoutTime += resultTime.longValue();
  223. }
  224. long realTime = allTime - allTimeoutTime;
  225. //计算总工作时长(分钟)
  226. realTime = realTime / (1000 * 60);
  227. tmstruckTimeTaskResult.setResultValue(new BigDecimal(realTime));
  228. return tmstruckTimeTaskResultMapper.insertSelective(tmstruckTimeTaskResult);
  229. }
  230. /**
  231. * 查询计时作业
  232. * @param map
  233. * @return
  234. */
  235. @Override
  236. public List<Map<String, Object>> getAllTimeTaskResult(Map<String, Object> map) {
  237. return tmstruckTimeTaskResultMapper.getAllTimeTaskResult(map);
  238. }
  239. /**
  240. * 添加计时作业实绩
  241. * @param map
  242. * @return
  243. */
  244. @Override
  245. @Transactional(rollbackFor = Exception.class)
  246. public int addTimeTaskResult(Map<String, Object> map) throws Exception {
  247. //判断是否是计时开始还是计时结束
  248. int i=0;
  249. BigDecimal inwardType =DataChange.dataToBigDecimal(map.get("inwardTypes")) ;
  250. String orderNumber = (String) map.get("orderNumber");
  251. String personnelSsoId = (String) map.get("personnelSsoId");
  252. BigDecimal resultTotalId = utilsMapper.getTotalIdByOrderNumber(orderNumber);
  253. TmstruckTimeTaskResult tmstruckTimeTaskResult = new TmstruckTimeTaskResult();
  254. BigDecimal orderId = utilsMapper.getOrderIdByOrderNumber(orderNumber);
  255. map.put("orderId", orderId);
  256. //根据运输订单id查找实绩中是否已经含有计时结束的实绩,如果有则抛出异常
  257. int countEndTimeNum = tmstruckTimeTaskResultMapper.CountTimeTaskByOrderId(orderId);
  258. if (countEndTimeNum >= 1) {
  259. throw new Exception("请勿重复计时");
  260. }
  261. tmstruckTimeTaskResult.setTimeTaskResultId(tmstruckTimeTaskResultMapper.selectMaxId());
  262. tmstruckTimeTaskResult.setResultTotalId(DataChange.dataToBigDecimal(resultTotalId));
  263. //获取计时开始的订单类型
  264. tmstruckTimeTaskResult.setResultTimeType(inwardType);
  265. tmstruckTimeTaskResult.setResultTime(new Date());
  266. tmstruckTimeTaskResult.setInsertTime(new Date());
  267. if (personnelSsoId!=null) {
  268. tmstruckTimeTaskResult.setInsertUsername(personnelSsoId);
  269. }
  270. //新增第一条计时实绩
  271. i += tmstruckTimeTaskResultMapper.insertSelective(tmstruckTimeTaskResult);
  272. if(inwardType.intValue() == 3){
  273. //获取最新暂停结束确认时间
  274. Map<String, Object> map2 = new HashMap<>();
  275. map2.put("type", 7);
  276. map2.put("orderId", orderId);
  277. BigDecimal resultPauseTime = utilsMapper.TimeTaskPause(map2);
  278. if(resultPauseTime != null) {
  279. Map<String, Object> timeMaps = utilsMapper.FristTimeTask(map);
  280. Date resultTime2 = (Date) timeMaps.get("resultTime");
  281. Map<String, Object> timeStatus = utilsMapper.getTimeStatus(map);
  282. Date resultTime1 = (Date) timeStatus.get("resultTime");
  283. long dateTime1 = resultTime2.getTime() - resultTime1.getTime();
  284. BigDecimal dateTime3 = new BigDecimal(dateTime1 / (1000 * 60));
  285. int Time1 = dateTime3.intValue() - resultPauseTime.intValue();
  286. tmstruckTimeTaskResult.setTimeTaskResultId(tmstruckTimeTaskResult.getTimeTaskResultId());
  287. tmstruckTimeTaskResult.setResultValue(new BigDecimal((Time1)));
  288. tmstruckTimeTaskResult.setResultUomId(new BigDecimal(900));
  289. if (personnelSsoId != null) {
  290. tmstruckTimeTaskResult.setUpdateUsername(personnelSsoId);
  291. }
  292. i += tmstruckTimeTaskResultMapper.updateByPrimaryKeySelective(tmstruckTimeTaskResult);
  293. } else {
  294. Map<String, Object> timeMaps = utilsMapper.FristTimeTask(map);
  295. Date resultTime2 = (Date) timeMaps.get("resultTime");
  296. Map<String, Object> timeStatus = utilsMapper.getTimeStatus(map);
  297. Date resultTime1 = (Date) timeStatus.get("resultTime");
  298. long dateTime1 = resultTime2.getTime() - resultTime1.getTime();
  299. BigDecimal dateTime3 = new BigDecimal(dateTime1 / (1000 * 60));
  300. tmstruckTimeTaskResult.setTimeTaskResultId(tmstruckTimeTaskResult.getTimeTaskResultId());
  301. tmstruckTimeTaskResult.setResultValue(dateTime3);
  302. tmstruckTimeTaskResult.setResultUomId(new BigDecimal(900));
  303. if (personnelSsoId != null) {
  304. tmstruckTimeTaskResult.setUpdateUsername(personnelSsoId);
  305. }
  306. i += tmstruckTimeTaskResultMapper.updateByPrimaryKeySelective(tmstruckTimeTaskResult);
  307. }
  308. Map<String, Object> orderMes = utilsMapper.getOrderTypeByOrderNumber(orderNumber);
  309. BigDecimal orderType =DataChange.dataToBigDecimal(orderMes.get("orderType"));
  310. if (orderType.intValue()==21) {
  311. pushOrderForPause(map);
  312. }
  313. }
  314. return i;
  315. }
  316. //通过运输订单号判断计时是否开始
  317. @Override
  318. @Transactional(rollbackFor = Exception.class)
  319. public int JudgeTimeTask(Map<String, Object> mapValue) throws Exception {
  320. String orderNumber =(String)mapValue.get("orderNumber");
  321. BigDecimal orderId = utilsMapper.getOrderIdByOrderNumber(orderNumber);
  322. //通过运输订单号查找当前是第几次
  323. BigDecimal inwardType = utilsMapper.getInwardType(orderId);
  324. if (inwardType!=null){
  325. throw new Exception("计时已经开始");
  326. }
  327. return inwardType.intValue();
  328. }
  329. @Override
  330. @Transactional(rollbackFor = Exception.class)
  331. public int JudgeTimeTaskPause(Map<String, Object> mapValue) throws Exception {
  332. String orderNumber =(String)mapValue.get("orderNumber");
  333. int i=0;
  334. BigDecimal orderId = utilsMapper.getOrderIdByOrderNumber(orderNumber);
  335. //通过运输订单号查找当前是第几次
  336. BigDecimal inwardStartTime = utilsMapper.getInwardStartTime(orderId);
  337. // System.out.println(inwardStartTime);
  338. BigDecimal inwardEndTime = utilsMapper.getInwardEndTime(orderId);
  339. // System.out.println(inwardEndTime);
  340. int Time=inwardEndTime.intValue()-inwardStartTime.intValue();
  341. // System.out.println(Time);
  342. if (Time==0) {
  343. i=0;
  344. }else if (Time==-1){
  345. i=1;
  346. }else {
  347. i=3;
  348. }
  349. return i;
  350. }
  351. }