TmstruckUnloadResultServiceImpl.java 15 KB

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