TmstruckUnloadResultServiceImpl.java 15 KB

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