TmsSignInResultServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. package com.steerinfo.dil.service.impl;
  2. import com.steerinfo.dil.config.WebExceptionHandler;
  3. import com.steerinfo.dil.mapper.OmsOrderChildMapper;
  4. import com.steerinfo.dil.mapper.OmsTransOrderMapper;
  5. import com.steerinfo.dil.mapper.TmsReplaceFrontResultMapper;
  6. import com.steerinfo.dil.mapper.TmsSignInResultMapper;
  7. import com.steerinfo.dil.model.*;
  8. import com.steerinfo.dil.util.DaZongUtil;
  9. import com.steerinfo.dil.util.DataChange;
  10. import com.steerinfo.framework.mapper.IBaseMapper;
  11. import com.steerinfo.framework.service.impl.BaseServiceImpl;
  12. import org.apache.ibatis.annotations.One;
  13. import org.apache.log4j.Logger;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.scheduling.annotation.Scheduled;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import java.math.BigDecimal;
  19. import java.text.DateFormat;
  20. import java.text.SimpleDateFormat;
  21. import java.util.*;
  22. /**
  23. * TmsSignInResult服务实现:
  24. * @author generator
  25. * @version 1.0-SNAPSHORT 2023-11-14 02:50
  26. * 类描述
  27. * 修订历史:
  28. * 日期:2023-11-14
  29. * 作者:generator
  30. * 参考:
  31. * 描述:TmsSignInResult服务实现
  32. * @see null
  33. * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
  34. */
  35. @Service(value = "tmsSignInResultService")
  36. public class TmsSignInResultServiceImpl {
  37. static final Logger log = Logger.getLogger(TmsSignInResultServiceImpl.class);
  38. @Autowired
  39. private TmsSignInResultMapper tmsSignInResultMapper;
  40. @Autowired
  41. private TmsReplaceFrontResultMapper tmsReplaceFrontResultMapper;
  42. @Autowired
  43. private OmsTransOrderMapper omsTransOrderMapper;
  44. @Autowired
  45. OmsOrderChildMapper omsOrderChildMapper;
  46. @Autowired
  47. OmsTransOrderServiceImpl omsTransOrderService;
  48. @Autowired
  49. TmsQueueResultServiceImpl tmsQueueResultService;
  50. @Autowired
  51. DaZongUtil daZongUtil;
  52. @Autowired
  53. OmsOrderChildServiceImpl omsOrderChildService;
  54. @Transactional(rollbackFor = Exception.class)
  55. public String signIn(Map<String, Object> map) throws Exception {
  56. //查询运输订单
  57. List<BigDecimal> transOrderIds = omsTransOrderMapper.getTransOrderIdByNumber(map);
  58. if(transOrderIds.size() != 1){
  59. throw new Exception("操作失败!运输订单异常!");
  60. }
  61. OmsTransOrder omsTransOrder = omsTransOrderMapper.selectByPrimaryKey(transOrderIds.get(0));
  62. BigDecimal isBan = DataChange.dataToBigDecimal(omsTransOrder.getAlternateFields24());
  63. if(isBan.compareTo(BigDecimal.ONE) == 0){
  64. throw new Exception("该订单已禁用,无法签到!");
  65. }
  66. //查询状态为正在执行的运单数量(仅查采购与销售)
  67. List<BigDecimal> orderIds = omsTransOrderMapper.getTransOrderByDriver(omsTransOrder.getDriverId());
  68. if(orderIds.size() > 0 && !"生产".equals(omsTransOrder.getBusinessScene())){
  69. for(BigDecimal orderId : orderIds){
  70. try {
  71. omsTransOrderService.correctTransOrder(orderId);
  72. orderIds = omsTransOrderMapper.getTransOrderByDriver(omsTransOrder.getDriverId());
  73. } catch (Exception e) {
  74. e.printStackTrace();
  75. }
  76. }
  77. }
  78. if (orderIds.size() > 0 && !"生产".equals(omsTransOrder.getBusinessScene())) {
  79. //已有正在签到的运单
  80. //判断正在执行中的运单是否与当前签到的运单是否相同
  81. if(transOrderIds.get(0).compareTo(orderIds.get(0)) == 0){
  82. //查询换车头实绩
  83. Map<String,Object> searchMap = new HashMap<>();
  84. searchMap.put("transOrderId",transOrderIds.get(0));
  85. searchMap.put("deleted",0);
  86. List<TmsReplaceFrontResult> replaceFrontResults = tmsReplaceFrontResultMapper.selectByParameters(searchMap);
  87. if(replaceFrontResults.size() != 0 && replaceFrontResults.get(0).getReplaceTime() != null){
  88. Map<String,Object> driver = omsTransOrderMapper.findDriverMes(omsTransOrder.getDriverId());
  89. if(driver.get("innerCode") == null || driver.get("innerCode").equals(" ")){
  90. throw new Exception("司机没有身份证内码,无法线上签到!请线下签到或联系管理员录入身份证内码!");
  91. }
  92. //换车头后点击签到,推送大宗签到
  93. try{
  94. DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  95. Map<String, Object> params = new HashMap<>();
  96. params.put("rjhh", omsTransOrder.getSerialNumber());
  97. params.put("qdsj", dateFormat.format(new Date()));
  98. daZongUtil.execute("30010000039", new Map[]{params});
  99. }catch (Exception e){
  100. log.error(e.getMessage());
  101. throw new Exception("已签到,请进厂!");
  102. }
  103. return "签到成功,请进厂!";
  104. }
  105. throw new Exception("请勿重复签到!");
  106. }
  107. throw new Exception("签到失败,请先完成当前运单!");
  108. }else{
  109. omsTransOrder.setConfirmReason("系统签到");
  110. omsTransOrder.setDriverConfirmTime(new Date());
  111. omsTransOrder.setOrderCommunicationDuration(
  112. new BigDecimal(
  113. (omsTransOrder.getDriverConfirmTime().getTime() - omsTransOrder.getIssueTime().getTime()) / 60000
  114. )
  115. );
  116. omsTransOrder.setUpdateUsername(map.get("userName").toString());
  117. omsTransOrder.setUpdateTime(new Date());
  118. omsTransOrder.setDeleted(new BigDecimal(5));
  119. omsTransOrderMapper.updateByPrimaryKeySelective(omsTransOrder);
  120. //获取物资子表
  121. if("采购".equals(omsTransOrder.getBusinessScene())) {
  122. Map<String, Object> objectObjectHashMap = new HashMap<>();
  123. objectObjectHashMap.put("transOrderId",omsTransOrder.getTransOrderId());
  124. objectObjectHashMap.put("deleted",0);
  125. List<OmsOrderChild> omsOrderChildList = omsOrderChildMapper.selectByParameters(objectObjectHashMap);
  126. if(omsOrderChildList.get(0).getMaterialNumber() == null || omsOrderChildList.get(0).getMaterialNumber().compareTo(BigDecimal.ZERO) == 0) {
  127. //获取原发
  128. Map<String,Object> orderMap = omsTransOrderService.matching(omsTransOrder.getTransOrderId());
  129. if(orderMap == null || DataChange.dataToBigDecimal(orderMap.get("materialNumber")).compareTo(BigDecimal.ZERO) == 0) {
  130. log.info("未匹配到原发运输订单"+omsTransOrder.getTransOrderId());
  131. throw new Exception("未匹配到原发,请联系派车人手动录入原发");
  132. }
  133. omsOrderChildList.get(0).setMaterialNumber(DataChange.dataToBigDecimal(orderMap.get("materialNumber")));
  134. omsOrderChildList.get(0).setAlternateFields15(orderMap.get("oldTransOrderId").toString());
  135. omsOrderChildMapper.updateByPrimaryKeySelective(omsOrderChildList.get(0));
  136. omsTransOrderService.dispatchPushUpdateYf(omsTransOrder.getTransOrderId(),omsOrderChildList.get(0));
  137. }
  138. }
  139. //推送大宗
  140. Map<String,Object> config = omsTransOrderMapper.getConfigByName("接单推送大宗");
  141. config = config == null ? new HashMap<>() : config;
  142. if("是".equals(config.get("valueString"))){
  143. omsTransOrderService.dispatchPushById(omsTransOrder.getTransOrderId());
  144. }else{
  145. log.info("配置如此,无需上传大宗");
  146. }
  147. }
  148. //查询运输订单下的签到实绩
  149. Map<String,Object> searchMap = new HashMap<>();
  150. searchMap.put("transOrderId",transOrderIds.get(0));
  151. searchMap.put("deleted",0);
  152. List<TmsSignInResult> list = tmsSignInResultMapper.selectByParameters(searchMap);
  153. Map<String,Object> config = omsTransOrderMapper.getConfigByName("签到过期时间");
  154. config = config == null ? new HashMap<>() : config;
  155. BigDecimal expireHour = DataChange.dataToBigDecimal(config.get("valueNumber"));
  156. for(TmsSignInResult item : list){
  157. item.setSignInMode(map.get("signInMode").toString());
  158. item.setSignInAddress(map.get("signInAddress").toString());
  159. item.setLocationMode(map.get("locationMode").toString());
  160. item.setSignInTime(new Date());
  161. if(expireHour.compareTo(BigDecimal.ZERO) > 0){
  162. item.setExpireTime(
  163. new Date(item.getSignInTime().getTime() + expireHour.multiply(new BigDecimal(1000*60*60)).longValue())
  164. );
  165. }
  166. item.setResultImage(DataChange.getString(map.get("resultImage")));
  167. item.setUpdateTime(new Date());
  168. item.setUpdateUsername(map.get("userName").toString());
  169. tmsSignInResultMapper.updateByPrimaryKeySelective(item);
  170. omsTransOrderService.updateOrderStatus(transOrderIds.get(0),item.getSegmentSqe(),"签到",item.getUpdateUsername());
  171. omsOrderChildService.updateOrderChildInfo(transOrderIds.get(0),null,item.getSignInTime(),"签到");
  172. map.put("resultId",item.getResultId());//返回给日志记录
  173. List<TmsReplaceFrontResult> replaceFrontResults = tmsReplaceFrontResultMapper.selectByParameters(searchMap);
  174. if(replaceFrontResults.size() == 0){
  175. if ("采购".equals(omsTransOrder.getBusinessScene()) || "销售".equals(omsTransOrder.getBusinessScene())) {
  176. Map<String,Object> driver = omsTransOrderMapper.findDriverMes(omsTransOrder.getDriverId());
  177. if(driver.get("innerCode") == null || driver.get("innerCode").equals(" ")){
  178. throw new Exception("司机没有身份证内码,无法线上签到!请线下签到或联系管理员录入身份证内码!");
  179. }
  180. //如果运输实绩中没有换车头实绩,直接推送大宗
  181. DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  182. Map<String, Object> params = new HashMap<>();
  183. params.put("rjhh", omsTransOrder.getSerialNumber());
  184. params.put("qdsj", dateFormat.format(item.getSignInTime()));
  185. daZongUtil.execute("30010000039", new Map[]{params});
  186. }
  187. }
  188. return "签到成功!";
  189. }
  190. throw new Exception("没有能修改的记录!");
  191. }
  192. public List<Map<String, Object>> getSignInResultList(Map<String, Object> map) {
  193. return tmsSignInResultMapper.getTmsSignInResultList(map);
  194. }
  195. @Transactional(rollbackFor = Exception.class)
  196. public String signInExpireCheck() {
  197. List<TmsSignInResult> list = tmsSignInResultMapper.getSignInExpireList();
  198. List<OmsTransOrder> transOrders = new ArrayList<>();
  199. for(TmsSignInResult item : list){
  200. //回退运单及签到实绩
  201. item.setLocationMode(null);
  202. item.setSignInMode(null);
  203. item.setSignInTime(null);
  204. item.setSignInTime(null);
  205. item.setUpdateTime(new Date());
  206. item.setUpdateUsername("system");
  207. OmsTransOrder omsTransOrder = omsTransOrderMapper.selectByPrimaryKey(item.getTransOrderId());
  208. omsTransOrder.setOrderStatus("签到过期");
  209. omsTransOrder.setCurrentLineSeq(item.getSegmentSqe().subtract(BigDecimal.ONE));
  210. omsTransOrder.setUpdateTime(new Date());
  211. omsTransOrder.setUpdateUsername("system");
  212. transOrders.add(omsTransOrder);
  213. }
  214. if(list.size() > 0){
  215. tmsSignInResultMapper.batchUpdate(list);
  216. omsTransOrderMapper.batchUpdate(transOrders);
  217. }
  218. return "执行成功!";
  219. }
  220. }