TmstruckUnloadResultServiceImpl.java 15 KB

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