TmstruckUnloadResultServiceImpl.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  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. case 23:
  105. case 24:
  106. return tmstruckUnloadResultMapper.getImportedDomesticNzUnload2Result(map); //apiId:356
  107. case 11:
  108. String con = (String) map.get("con");
  109. if (con!=null){
  110. map.put("con","%"+con+"%");
  111. }
  112. return tmstruckUnloadResultMapper.getInFactoryUnloadResult(map); //apiId:360
  113. case 12:
  114. case 13:
  115. case 14:
  116. case 19:
  117. case 100:
  118. return tmstruckUnloadResultMapper.getSporadicSuppliesUnloadResult(map);//apiId:389
  119. }
  120. return null;
  121. }
  122. /**
  123. * 更新卸货实绩内容 扫码人员扫码后获取信息传输数据给接口
  124. * @param map
  125. * @return
  126. */
  127. @Override
  128. @Transactional
  129. public int updateUnloadResult(Map<String, Object> map) throws Exception {
  130. //通过运输订单号查询订单类型
  131. String orderNumber = (String) map.get("orderNumber");
  132. //通过订单号查询订单类型 及总实绩Id
  133. Map<String, Object> mesMap = utilsMapper.getOrderTypeByOrderNumber(orderNumber);
  134. if(mesMap==null){
  135. return -5;
  136. }
  137. //卸货时查询是否含有净重
  138. BigDecimal totalId = DataChange.dataToBigDecimal(mesMap.get("totalId"));
  139. Integer netWeight = tmstruckUnloadResultMapper.getNetWeightByTotalId(totalId);
  140. int orderType = DataChange.dataToBigDecimal(mesMap.get("orderType")).intValue();
  141. //判断是不是内转
  142. if(orderType == 11 || orderType == 15 || orderType == 16 || orderType == 25){
  143. //根据运输订单id查询需求里面的备注
  144. String requireRemark = utilsMapper.getRequireRemark(DataChange.dataToBigDecimal(mesMap.get("orderId")));
  145. //如果是内转新增卸货实绩
  146. Integer sqe = utilsMapper.getLineSequenceByOrderNumber((String) map.get("orderNumber"));
  147. sqe = sqe == null ? 1 : sqe +1;
  148. map.put("resultId",tmstruckUnloadResultMapper.selectMaxId());
  149. map.put("Sqe",sqe);
  150. map.put("totalId",totalId);
  151. TmstruckUnloadResult tmstruckUnloadResult = generateUnload(map);
  152. try{
  153. Integer resultId=tmstruckUnloadResultMapper.checkMaterialIdUnload(totalId, DataChange.dataToBigDecimal(map.get("materialId")));
  154. if(orderType == 11 && resultId != null){
  155. //如果已经存在,根据主键更新
  156. tmstruckUnloadResult.setResultId(new BigDecimal(resultId));
  157. tmstruckUnloadResultMapper.updateByPrimaryKeySelective(tmstruckUnloadResult);
  158. }else{
  159. //不存在,插入
  160. tmstruckUnloadResultMapper.insertSelective(tmstruckUnloadResult);
  161. }
  162. }catch (Exception e){
  163. e.printStackTrace();
  164. //出现异常,插入
  165. tmstruckUnloadResultMapper.insertSelective(tmstruckUnloadResult);
  166. }
  167. //更新路段顺序号
  168. //内转只要是卸货都直接关闭订单 事务跨服务更改同表同一行数据 不能调用 会锁行
  169. //如果没有净重更新路段顺序号需要继续回皮 有就结束订单
  170. if(netWeight == 0 && orderType != 25){
  171. mesMap.put("orderLineSequence",sqe);
  172. if(requireRemark != null && "不需要过磅".equals(requireRemark)) {
  173. omsFeign.closeInwardOrder(DataChange.dataToBigDecimal(mesMap.get("orderId")).intValue(), sqe, null);
  174. }else{
  175. utilsService.updateOrderLineSqeByOrderNumber(mesMap);
  176. }
  177. } else {
  178. omsFeign.closeInwardOrder(DataChange.dataToBigDecimal(mesMap.get("orderId")).intValue(), sqe, null);
  179. }
  180. //卸货成功后推送消息给websocket
  181. utilsService.pushMesToWebsocket((String) mesMap.get("capacityNumber"), "卸货");
  182. //根据运输订单查找需求备注
  183. BigDecimal orderId = DataChange.dataToBigDecimal(mesMap.get("orderId"));
  184. Map<String,Object> remarkMap=tmstruckTimeTaskResultMapper.selectInwardDueTimeByOrderId(orderId);
  185. String remark =(String) remarkMap.get("remark");
  186. if (remark != null && remark.contains("计时") && orderType != 25){
  187. map.put("inwardTypes",3);
  188. tmstruckTimeTaskResultService.addTimeTaskResult(map);
  189. }
  190. return 1;
  191. }
  192. //如果是零星多拼订单 需要查询这个物资是否已经卸过了
  193. if(orderType == 12 || orderType == 13||orderType==19){
  194. mesMap.put("updateLoadResult", 1); //需要路段顺序号查询
  195. Integer checkMaterial = tmstruckUnloadResultMapper.checkMaterialIdUnload(DataChange.dataToBigDecimal(mesMap.get("totalId")), DataChange.dataToBigDecimal(map.get("materialId")));
  196. if(checkMaterial != null){
  197. return -2; //已卸过此物资
  198. }
  199. if (orderType==19){
  200. //发送计量委托
  201. Map<String,Object> sporadicMap=new HashMap<>();
  202. sporadicMap.put("orderId",DataChange.dataToBigDecimal(mesMap.get("orderId")).intValue());
  203. sporadicMap.put("materialId",DataChange.dataToBigDecimal(map.get("materialId")));
  204. int i = tmstruckMeasureCommissionService.addSporadicOddMeasureCommission(sporadicMap);
  205. if (i==0){
  206. return -4;
  207. }
  208. }
  209. }
  210. Map<String, Object> dataMap = tmstruckUnloadResultMapper.selectUnloadMesByOrderNo(mesMap);
  211. if(dataMap == null){
  212. return -3; //该订单没有卸货作业
  213. }
  214. //获取该实绩的路段顺序号
  215. BigDecimal segmentSqe = DataChange.dataToBigDecimal(dataMap.get("segmentSqe"));
  216. //获取订单的路段顺序号
  217. BigDecimal orderSegmentSqe = DataChange.dataToBigDecimal(mesMap.get("orderSegmentSqe"));
  218. if(segmentSqe.intValue() > (orderSegmentSqe.intValue() + 1)){
  219. return -6;
  220. }
  221. map.putAll(dataMap);
  222. updateUnloadResultBy(map);//更新卸货实绩
  223. if(netWeight == 0 || (netWeight == 1 && (orderType == 10 || orderType == 20||orderType==19))){ //如果没有净重 则更新路段顺序号 有则不更新
  224. //路段顺序号 + 1
  225. map.put("orderId", mesMap.get("orderId"));
  226. utilsService.updateOrderLineSequence(map);
  227. }
  228. switch (orderType){
  229. case 5:
  230. case 6:
  231. case 7:
  232. case 8:
  233. case 9:
  234. case 10:
  235. case 12:
  236. case 17:
  237. case 18:
  238. case 20:
  239. tmstruckReceiveResultService.addReceiveResult(DataChange.dataToBigDecimal(map.get("resultTotalId"))); //新增完卸车实绩后新增一条收货实绩
  240. break;
  241. }
  242. //卸货成功后推送消息给websocket
  243. utilsService.pushMesToWebsocket((String) mesMap.get("capacityNumber"), "卸货");
  244. return 1;
  245. }
  246. /*
  247. 内转物流新增卸货实绩
  248. */
  249. private TmstruckUnloadResult generateUnload(Map<String, Object> map) {
  250. TmstruckUnloadResult tmstruckUnloadResult = new TmstruckUnloadResult();
  251. tmstruckUnloadResult.setResultId(DataChange.dataToBigDecimal(map.get("resultId")));
  252. tmstruckUnloadResult.setResultTotalId(DataChange.dataToBigDecimal(map.get("totalId")));
  253. tmstruckUnloadResult.setSegmentSqe(DataChange.dataToBigDecimal(map.get("Sqe")));
  254. //添加卸货点
  255. if(map.get("warehouseId") !=null){
  256. tmstruckUnloadResult.setResultUnloadPlaceId(DataChange.dataToBigDecimal(map.get("warehouseId")));
  257. }
  258. if(map.get("personnelSsoId") !=null){
  259. //通过SSo主键查询人员管理主键
  260. Integer personnelId = utilsMapper.getPersonnelIdBySsoId((String)map.get("personnelSsoId"));
  261. if(personnelId !=null){
  262. tmstruckUnloadResult.setUnloaderId(new BigDecimal(personnelId));
  263. }
  264. }
  265. //判断物资是否为空
  266. if(map.get("materialId") != null){
  267. tmstruckUnloadResult.setMaterialId(DataChange.dataToBigDecimal(map.get("materialId")));
  268. }
  269. //添加卸货时间
  270. tmstruckUnloadResult.setResultEndTime(new Date());
  271. //确认卸货设为同意
  272. tmstruckUnloadResult.setUnloadStatus("同意");
  273. tmstruckUnloadResult.setInsertTime(new Date());
  274. tmstruckUnloadResult.setInsertUsername("admin");
  275. return tmstruckUnloadResult;
  276. }
  277. /**
  278. * 扫码确认卸货 更新卸货实绩
  279. * 运输订单号
  280. * 卸货时间
  281. * 卸货地点
  282. * @param map
  283. * @return
  284. */
  285. public int updateUnloadResultBy(Map<String, Object> map){
  286. TmstruckUnloadResult tmstruckUnloadResult = new TmstruckUnloadResult();
  287. tmstruckUnloadResult.setResultId(DataChange.dataToBigDecimal(map.get("resultId")));
  288. // 修改卸货点
  289. if(map.get("warehouseId") != null){
  290. tmstruckUnloadResult.setResultUnloadPlaceId(DataChange.dataToBigDecimal(map.get("warehouseId")));
  291. }
  292. if(map.get("personnelSsoId") != null){
  293. //通过SSo主键查询人员管理主键
  294. Integer personnelId = utilsMapper.getPersonnelIdBySsoId((String) map.get("personnelSsoId"));
  295. if(personnelId != null){
  296. tmstruckUnloadResult.setUnloaderId(new BigDecimal(personnelId));
  297. }
  298. }
  299. //判断物资id是否为空
  300. if (map.get("materialId") != null){
  301. tmstruckUnloadResult.setMaterialId(DataChange.dataToBigDecimal(map.get("materialId")));
  302. }
  303. if (map.get("unloadNumber")!=null){
  304. tmstruckUnloadResult.setUnloadNumber(DataChange.dataToBigDecimal(map.get("unloadNumber")));
  305. }
  306. //获得卸货时间
  307. tmstruckUnloadResult.setResultEndTime(new Date());
  308. //扫码后确认卸货所以卸货状态码为 同意
  309. tmstruckUnloadResult.setUnloadStatus("同意");
  310. tmstruckUnloadResult.setInsertTime(new Date());
  311. tmstruckUnloadResult.setInsertUsername("admin");
  312. //新增卸车实绩内容
  313. return tmstruckUnloadResultMapper.updateByPrimaryKeySelective(tmstruckUnloadResult);
  314. }
  315. //内转物流更新卸车实绩
  316. @Override
  317. public int updateUnloadresultForconverted(Map<String, Object> map) {
  318. //获取装车实绩id
  319. //通过运输订单号查找装车实绩
  320. String orderNumber =(String) map.get("orderNumber");
  321. Map<String,Object> map1 = tmstruckUnloadResultMapper.selectUnloadResultIdByOrderNumber(orderNumber);
  322. //获取结束时间
  323. Integer LoadResultId=(Integer)map1.get("loadResultId");
  324. Date endTime=(Date)map.get("endTime");
  325. TmstruckUnloadResult tmstruckUnloadResult=new TmstruckUnloadResult();
  326. //根据主键id设置装车结束时间
  327. tmstruckUnloadResult.setResultId(new BigDecimal(LoadResultId));
  328. tmstruckUnloadResult.setResultEndTime(endTime);
  329. //获取装车开始时间
  330. Date startTime = (Date)map1.get("startTime");
  331. //开始时间
  332. long LoadstartTime = startTime.getTime();
  333. long LoadendTime = endTime.getTime();
  334. long time = LoadendTime - LoadstartTime;
  335. long l = time / 1000;
  336. //设置标准时长
  337. tmstruckUnloadResult.setResultDuration(new BigDecimal(l));
  338. int i = tmstruckUnloadResultMapper.updateByPrimaryKeySelective(tmstruckUnloadResult);
  339. return i;
  340. }
  341. //根据运输订单查找装车实绩id
  342. @Override
  343. public Map<String, Object> selectLoadResultIdByOrderNumber(String orderNumber) {
  344. return tmstruckUnloadResultMapper.selectUnloadResultIdByOrderNumber(orderNumber);
  345. }
  346. //零星物资判断物资是否需要多次计量,并发送计量委托
  347. @Override
  348. public int materialIdIsNorWeight(Map<String, Object> map) {
  349. //获取订单id
  350. String orderNumber =(String) map.get("orderNumber");
  351. List<Map<String, Object>> maps = tmstruckUnloadResultMapper.selectMaterialForUnload(orderNumber);
  352. for (Map<String,Object> map1:maps){
  353. BigDecimal materialId =(BigDecimal) map1.get("materialId");
  354. BigDecimal orderId =(BigDecimal) map1.get("orderId");
  355. Map<String,Object> map2=new HashMap<>();
  356. map2.put("materialId",materialId);
  357. map2.put("orderId",orderId);
  358. //判断物资是否被计量
  359. Integer integer = tmstruckUnloadResultMapper.selectUnloadMaterialId(map2);
  360. if (integer==0){
  361. //调用计量实绩接口,发送计量委托
  362. tmstruckMeasureCommissionService.addLXMeasureCommission(map2);
  363. }
  364. }
  365. return 2;
  366. }
  367. //内转物流新增卸车实绩
  368. @Override
  369. public int addUnloadresultForconverted(Map<String, Object> map) {
  370. TmstruckUnloadResult tmstruckUnloadResult=new TmstruckUnloadResult();
  371. //设置主键id
  372. BigDecimal maxId = tmstruckUnloadResultMapper.selectMaxId();
  373. tmstruckUnloadResult.setId(maxId);
  374. //获取开始时间
  375. Date startTime =(Date) map.get("startTime");
  376. //获取运输订单号
  377. String OrderNumber=map.get("OrderNumber").toString();
  378. //绑定总实绩id
  379. Map<String,Object> map2=tmstruckLoadResultMapper.selectLoadResultIdByOrderNumber(OrderNumber);
  380. BigDecimal reultTotalId=(BigDecimal)map2.get("resultTotalId");
  381. //设置总实绩id
  382. tmstruckUnloadResult.setResultTotalId(reultTotalId);
  383. tmstruckUnloadResult.setResultStartTime(startTime);
  384. //获取用户id
  385. Integer personnelId=(Integer)map.get("personnelId");
  386. String personnelName= tmstruckLoadResultMapper.selectPersonNameByPersonnelId(personnelId);
  387. tmstruckUnloadResult.setInsertTime(new Date());
  388. tmstruckUnloadResult.setInsertUsername(personnelName);
  389. int i=tmstruckUnloadResultMapper.insertSelective(tmstruckUnloadResult);
  390. return i;
  391. }
  392. }