TmstruckUnloadResultServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  1. package com.steerinfo.dil.service.impl;
  2. import com.steerinfo.dil.feign.OmsFeign;
  3. import com.steerinfo.dil.mapper.*;
  4. import com.steerinfo.dil.model.TmstruckUnloadResult;
  5. import com.steerinfo.dil.service.ITmstruckUnloadResultService;
  6. import com.steerinfo.dil.util.DataChange;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Service;
  9. import org.springframework.transaction.annotation.Transactional;
  10. import javax.xml.crypto.Data;
  11. import java.math.BigDecimal;
  12. import java.util.Date;
  13. import java.util.HashMap;
  14. import java.util.List;
  15. import java.util.Map;
  16. /**
  17. * TmstruckUnloadResult服务实现:
  18. * @author generator
  19. * @version 1.0-SNAPSHORT 2021-09-09 07:58
  20. * 类描述
  21. * 修订历史:
  22. * 日期:2021-09-09
  23. * 作者:generator
  24. * 参考:
  25. * 描述:TmstruckUnloadResult服务实现
  26. * @see null
  27. * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
  28. */
  29. @Service(value = "tmstruckUnloadResultService")
  30. public class TmstruckUnloadResultServiceImpl implements ITmstruckUnloadResultService {
  31. @Autowired
  32. private TmstruckUnloadResultMapper tmstruckUnloadResultMapper;
  33. @Autowired
  34. private TmstruckReceiveResultServiceImpl tmstruckReceiveResultService;
  35. @Autowired
  36. private TmstruckLoadResultMapper tmstruckLoadResultMapper;
  37. @Autowired
  38. private UtilsServiceImpl utilsService;
  39. @Autowired
  40. private TmstruckMeasureCommissionServiceImpl tmstruckMeasureCommissionService;
  41. @Autowired
  42. OmsFeign omsFeign;
  43. @Autowired
  44. UtilsMapper utilsMapper;
  45. @Autowired
  46. TmstruckLeaveFactoryResultServiceImpl tmstruckLeaveFactoryResultService;
  47. @Autowired
  48. TmstruckTimeTaskResultServiceImpl tmstruckTimeTaskResultService;
  49. @Autowired
  50. TmstruckTimeTaskResultMapper tmstruckTimeTaskResultMapper;
  51. @Autowired
  52. private RulesServiceImpl rulesService;
  53. /**
  54. * 新增卸货实绩
  55. * 总实绩ID、卸货点
  56. * @param map
  57. * @return
  58. */
  59. @Override
  60. public int addUnloadResult(Map<String, Object> map) {
  61. TmstruckUnloadResult tmstruckUnloadResult = new TmstruckUnloadResult();
  62. //生成主键ID
  63. BigDecimal maxId = tmstruckUnloadResultMapper.selectMaxId();
  64. tmstruckUnloadResult.setId(maxId);
  65. //插入实绩总表ID
  66. tmstruckUnloadResult.setResultTotalId(DataChange.dataToBigDecimal(map.get("resultTotalId")));
  67. // 添加路段顺序号
  68. tmstruckUnloadResult.setSegmentSqe(DataChange.dataToBigDecimal(map.get("segmentSqe")));
  69. //插入卸货点 通过总实绩ID查询卸货点
  70. tmstruckUnloadResult.setResultUnloadPlaceId(tmstruckUnloadResultMapper.getUnloadPointId(map));
  71. //新增卸车实绩
  72. return tmstruckUnloadResultMapper.insertSelective(tmstruckUnloadResult);
  73. }
  74. /**
  75. * 查询所有卸货实绩
  76. * @param map
  77. * @return
  78. */
  79. @Override
  80. public List<Map<String, Object>> getUnloadResult(Map<String, Object> map) {
  81. Integer orderType = (Integer) map.get("orderTypee");
  82. switch (orderType){
  83. case 1:
  84. break;
  85. case 2:
  86. break;
  87. case 3:
  88. break;
  89. case 4:
  90. break;
  91. case 5:
  92. case 6:
  93. case 7:
  94. case 8:
  95. case 17:
  96. case 18:
  97. return tmstruckUnloadResultMapper.getCGUnloadResult(map); //apiId:103
  98. case 9:
  99. return tmstruckUnloadResultMapper.getImportedDomesticNzUnloadResult(map); //apiId:355
  100. case 10:
  101. case 20:
  102. case 15:
  103. case 16:
  104. return tmstruckUnloadResultMapper.getImportedDomesticNzUnload2Result(map); //apiId:356
  105. case 11:
  106. return tmstruckUnloadResultMapper.getInFactoryUnloadResult(map); //apiId:360
  107. case 12:
  108. case 13:
  109. case 14:
  110. case 19:
  111. case 100:
  112. return tmstruckUnloadResultMapper.getSporadicSuppliesUnloadResult(map);//apiId:389
  113. }
  114. return null;
  115. }
  116. /**
  117. * 更新卸货实绩内容 扫码人员扫码后获取信息传输数据给接口
  118. * @param map
  119. * @return
  120. */
  121. @Override
  122. @Transactional
  123. public int updateUnloadResult(Map<String, Object> map) throws Exception {
  124. //通过运输订单号查询订单类型
  125. String orderNumber = (String) map.get("orderNumber");
  126. //通过订单号查询订单类型 及总实绩Id
  127. Map<String, Object> mesMap = utilsMapper.getOrderTypeByOrderNumber(orderNumber);
  128. //卸货时查询是否含有净重
  129. BigDecimal totalId = DataChange.dataToBigDecimal(mesMap.get("totalId"));
  130. Integer netWeight = tmstruckUnloadResultMapper.getNetWeightByTotalId(totalId);
  131. int orderType = DataChange.dataToBigDecimal(mesMap.get("orderType")).intValue();
  132. //判断是不是内转
  133. if(orderType == 11 || orderType == 15 || orderType == 16){
  134. //如果是内转新增卸货实绩
  135. Integer sqe = utilsMapper.getLineSequenceByOrderNumber((String) map.get("orderNumber"));
  136. sqe = sqe == null ? 1 : sqe +1;
  137. map.put("resultId",tmstruckUnloadResultMapper.selectMaxId());
  138. map.put("Sqe",sqe);
  139. map.put("totalId",totalId);
  140. TmstruckUnloadResult tmstruckUnloadResult = generateUnload(map);
  141. tmstruckUnloadResultMapper.insertSelective(tmstruckUnloadResult);
  142. //更新路段顺序号
  143. //内转只要是卸货都直接关闭订单 事务跨服务更改同表同一行数据 不能调用 会锁行
  144. //如果没有净重更新路段顺序号需要继续回皮 有就结束订单
  145. if(netWeight == 0){
  146. mesMap.put("orderLineSequence",sqe);
  147. utilsService.updateOrderLineSqeByOrderNumber(mesMap);
  148. }else {
  149. omsFeign.closeInwardOrder(DataChange.dataToBigDecimal(mesMap.get("orderId")).intValue(), sqe, null);
  150. }
  151. //卸货成功后推送消息给websocket
  152. utilsService.pushMesToWebsocket((String) mesMap.get("capacityNumber"), "卸货");
  153. //根据运输订单查找需求备注
  154. BigDecimal orderId = DataChange.dataToBigDecimal(mesMap.get("orderId"));
  155. Map<String,Object> remarkMap=tmstruckTimeTaskResultMapper.selectInwardDueTimeByOrderId(orderId);
  156. String remark =(String) remarkMap.get("remark");
  157. if (remark.contains("计时")){
  158. map.put("inwardTypes",3);
  159. tmstruckTimeTaskResultService.addTimeTaskResult(map);
  160. }
  161. return 1;
  162. }
  163. //如果是零星多拼订单 需要查询这个物资是否已经卸过了
  164. if(orderType == 12 || orderType == 13){
  165. map.put("updateLoadResult", 1); //需要路段顺序号查询
  166. Integer checkMaterial = tmstruckUnloadResultMapper.checkMaterialIdUnload(DataChange.dataToBigDecimal(mesMap.get("totalId")), DataChange.dataToBigDecimal(map.get("materialId")));
  167. if(checkMaterial != null){
  168. return -2; //已卸过此物资
  169. }
  170. }
  171. Map<String, Object> dataMap = tmstruckUnloadResultMapper.selectUnloadMesByOrderNo(mesMap);
  172. if(dataMap == null){
  173. return -3; //该订单没有卸货作业
  174. }
  175. map.putAll(dataMap);
  176. updateUnloadResultBy(map); //更新卸货实绩
  177. if(netWeight == 0){ //如果没有净重 则更新路段顺序号 有则不更新
  178. //路段顺序号 + 1
  179. map.put("orderId", mesMap.get("orderId"));
  180. utilsService.updateOrderLineSequence(map);
  181. }
  182. switch (orderType){
  183. case 5:
  184. case 6:
  185. case 7:
  186. case 8:
  187. case 9:
  188. case 10:
  189. case 12:
  190. case 17:
  191. case 18:
  192. case 20:
  193. tmstruckReceiveResultService.addReceiveResult(DataChange.dataToBigDecimal(map.get("resultTotalId"))); //新增完卸车实绩后新增一条收货实绩
  194. break;
  195. }
  196. //卸货成功后推送消息给websocket
  197. utilsService.pushMesToWebsocket((String) mesMap.get("capacityNumber"), "卸货");
  198. return 1;
  199. }
  200. /*
  201. 内转物流新增卸货实绩
  202. */
  203. private TmstruckUnloadResult generateUnload(Map<String, Object> map) {
  204. TmstruckUnloadResult tmstruckUnloadResult = new TmstruckUnloadResult();
  205. tmstruckUnloadResult.setResultId(DataChange.dataToBigDecimal(map.get("resultId")));
  206. tmstruckUnloadResult.setResultTotalId(DataChange.dataToBigDecimal(map.get("totalId")));
  207. tmstruckUnloadResult.setSegmentSqe(DataChange.dataToBigDecimal(map.get("Sqe")));
  208. //添加卸货点
  209. if(map.get("warehouseId") !=null){
  210. tmstruckUnloadResult.setResultUnloadPlaceId(DataChange.dataToBigDecimal(map.get("warehouseId")));
  211. }
  212. if(map.get("personnelSsoId") !=null){
  213. //通过SSo主键查询人员管理主键
  214. Integer personnelId = utilsMapper.getPersonnelIdBySsoId((String)map.get("personnelSsoId"));
  215. if(personnelId !=null){
  216. tmstruckUnloadResult.setUnloaderId(new BigDecimal(personnelId));
  217. }
  218. }
  219. //判断物资是否为空
  220. if(map.get("materialId") != null){
  221. tmstruckUnloadResult.setMaterialId(DataChange.dataToBigDecimal(map.get("materialId")));
  222. }
  223. //添加卸货时间
  224. tmstruckUnloadResult.setResultEndTime(new Date());
  225. //确认卸货设为同意
  226. tmstruckUnloadResult.setUnloadStatus("同意");
  227. tmstruckUnloadResult.setInsertTime(new Date());
  228. tmstruckUnloadResult.setInsertUsername("admin");
  229. return tmstruckUnloadResult;
  230. }
  231. /**
  232. * 扫码确认卸货 更新卸货实绩
  233. * 运输订单号
  234. * 卸货时间
  235. * 卸货地点
  236. * @param map
  237. * @return
  238. */
  239. public int updateUnloadResultBy(Map<String, Object> map){
  240. TmstruckUnloadResult tmstruckUnloadResult = new TmstruckUnloadResult();
  241. tmstruckUnloadResult.setResultId(DataChange.dataToBigDecimal(map.get("resultId")));
  242. // 修改卸货点
  243. if(map.get("warehouseId") != null){
  244. tmstruckUnloadResult.setResultUnloadPlaceId(DataChange.dataToBigDecimal(map.get("warehouseId")));
  245. }
  246. if(map.get("personnelSsoId") != null){
  247. //通过SSo主键查询人员管理主键
  248. Integer personnelId = utilsMapper.getPersonnelIdBySsoId((String) map.get("personnelSsoId"));
  249. if(personnelId != null){
  250. tmstruckUnloadResult.setUnloaderId(new BigDecimal(personnelId));
  251. }
  252. }
  253. //判断物资id是否为空
  254. if (map.get("materialId") != null){
  255. tmstruckUnloadResult.setMaterialId(DataChange.dataToBigDecimal(map.get("materialId")));
  256. }
  257. //获得卸货时间
  258. tmstruckUnloadResult.setResultEndTime(new Date());
  259. //扫码后确认卸货所以卸货状态码为 同意
  260. tmstruckUnloadResult.setUnloadStatus("同意");
  261. tmstruckUnloadResult.setInsertTime(new Date());
  262. tmstruckUnloadResult.setInsertUsername("admin");
  263. //新增卸车实绩内容
  264. return tmstruckUnloadResultMapper.updateByPrimaryKeySelective(tmstruckUnloadResult);
  265. }
  266. //内转物流更新卸车实绩
  267. @Override
  268. public int updateUnloadresultForconverted(Map<String, Object> map) {
  269. //获取装车实绩id
  270. //通过运输订单号查找装车实绩
  271. String orderNumber =(String) map.get("orderNumber");
  272. Map<String,Object> map1 = tmstruckUnloadResultMapper.selectUnloadResultIdByOrderNumber(orderNumber);
  273. //获取结束时间
  274. Integer LoadResultId=(Integer)map1.get("loadResultId");
  275. Date endTime=(Date)map.get("endTime");
  276. TmstruckUnloadResult tmstruckUnloadResult=new TmstruckUnloadResult();
  277. //根据主键id设置装车结束时间
  278. tmstruckUnloadResult.setResultId(new BigDecimal(LoadResultId));
  279. tmstruckUnloadResult.setResultEndTime(endTime);
  280. //获取装车开始时间
  281. Date startTime = (Date)map1.get("startTime");
  282. //开始时间
  283. long LoadstartTime = startTime.getTime();
  284. long LoadendTime = endTime.getTime();
  285. long time = LoadendTime - LoadstartTime;
  286. long l = time / 1000;
  287. //设置标准时长
  288. tmstruckUnloadResult.setResultDuration(new BigDecimal(l));
  289. int i = tmstruckUnloadResultMapper.updateByPrimaryKeySelective(tmstruckUnloadResult);
  290. return i;
  291. }
  292. //根据运输订单查找装车实绩id
  293. @Override
  294. public Map<String, Object> selectLoadResultIdByOrderNumber(String orderNumber) {
  295. return tmstruckUnloadResultMapper.selectUnloadResultIdByOrderNumber(orderNumber);
  296. }
  297. //零星物资判断物资是否需要多次计量,并发送计量委托
  298. @Override
  299. public int materialIdIsNorWeight(Map<String, Object> map) {
  300. //获取订单id
  301. String orderNumber =(String) map.get("orderNumber");
  302. List<Map<String, Object>> maps = tmstruckUnloadResultMapper.selectMaterialForUnload(orderNumber);
  303. for (Map<String,Object> map1:maps){
  304. BigDecimal materialId =(BigDecimal) map1.get("materialId");
  305. BigDecimal orderId =(BigDecimal) map1.get("orderId");
  306. Map<String,Object> map2=new HashMap<>();
  307. map2.put("materialId",materialId);
  308. map2.put("orderId",orderId);
  309. //判断物资是否被计量
  310. Integer integer = tmstruckUnloadResultMapper.selectUnloadMaterialId(map2);
  311. if (integer==0){
  312. //调用计量实绩接口,发送计量委托
  313. tmstruckMeasureCommissionService.addLXMeasureCommission(map2);
  314. }
  315. }
  316. return 2;
  317. }
  318. //内转物流新增卸车实绩
  319. @Override
  320. public int addUnloadresultForconverted(Map<String, Object> map) {
  321. TmstruckUnloadResult tmstruckUnloadResult=new TmstruckUnloadResult();
  322. //设置主键id
  323. BigDecimal maxId = tmstruckUnloadResultMapper.selectMaxId();
  324. tmstruckUnloadResult.setId(maxId);
  325. //获取开始时间
  326. Date startTime =(Date) map.get("startTime");
  327. //获取运输订单号
  328. String OrderNumber=map.get("OrderNumber").toString();
  329. //绑定总实绩id
  330. Map<String,Object> map2=tmstruckLoadResultMapper.selectLoadResultIdByOrderNumber(OrderNumber);
  331. BigDecimal reultTotalId=(BigDecimal)map2.get("resultTotalId");
  332. //设置总实绩id
  333. tmstruckUnloadResult.setResultTotalId(reultTotalId);
  334. tmstruckUnloadResult.setResultStartTime(startTime);
  335. //获取用户id
  336. Integer personnelId=(Integer)map.get("personnelId");
  337. String personnelName= tmstruckLoadResultMapper.selectPersonNameByPersonnelId(personnelId);
  338. tmstruckUnloadResult.setInsertTime(new Date());
  339. tmstruckUnloadResult.setInsertUsername(personnelName);
  340. int i=tmstruckUnloadResultMapper.insertSelective(tmstruckUnloadResult);
  341. return i;
  342. }
  343. }