TmstruckUnloadResultServiceImpl.java 19 KB

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