TmstruckEnfactoryResultServiceImpl.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. package com.steerinfo.dil.service.impl;
  2. import com.steerinfo.dil.feign.OmsFeign;
  3. import com.steerinfo.dil.mapper.TmstruckEnfactoryResultMapper;
  4. import com.steerinfo.dil.mapper.UtilsMapper;
  5. import com.steerinfo.dil.model.TmstruckEnfactoryResult;
  6. import com.steerinfo.dil.service.ITmstruckEnfactoryResultService;
  7. import com.steerinfo.dil.util.DataChange;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Service;
  10. import org.springframework.transaction.annotation.Transactional;
  11. import java.math.BigDecimal;
  12. import java.util.*;
  13. /**
  14. * TmstruckEnfactoryResult服务实现:
  15. * @author TXF
  16. * @version 1.0-SNAPSHORT 2021-09-08 06:23
  17. * 类描述
  18. * 修订历史:
  19. * 日期:2021-09-08
  20. * 作者:generator
  21. * 参考:
  22. * 描述:TmstruckEnfactoryResult服务实现
  23. * @see null
  24. * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
  25. */
  26. @Service(value = "tmstruckEnfactoryResultService")
  27. public class TmstruckEnfactoryResultServiceImpl implements ITmstruckEnfactoryResultService {
  28. @Autowired
  29. private TmstruckEnfactoryResultMapper tmstruckEnfactoryResultMapper;
  30. @Autowired
  31. private TmstruckMeasureCommissionServiceImpl tmstruckMeasureCommissionService;
  32. @Autowired
  33. private TmstruckWeightResultServiceImpl tmstruckWeightResultService;
  34. @Autowired
  35. private UtilsServiceImpl utilsService;
  36. @Autowired
  37. private RulesServiceImpl rulesService;
  38. @Autowired
  39. OmsFeign omsFeign;
  40. @Autowired
  41. UtilsMapper utilsMapper;
  42. /**
  43. * 派单时新增进厂实绩
  44. * map: 总实绩Id、线路起点
  45. * @param map
  46. * @return
  47. */
  48. @Override
  49. public int addEnFactoryResult(Map<String, Object> map) {
  50. TmstruckEnfactoryResult tmstruckEnfactoryResult = new TmstruckEnfactoryResult();
  51. BigDecimal resultTotalId = DataChange.dataToBigDecimal(map.get("resultTotalId"));
  52. //生成进厂作业主键Id
  53. //添加主键
  54. tmstruckEnfactoryResult.setResultId(tmstruckEnfactoryResultMapper.selectMaxId());
  55. //通过总实绩ID查询订单类型
  56. Map<String, Object> mesMap = utilsMapper.getOrderTypeByTotalId(resultTotalId);
  57. int gatepostId = rulesService.calculateDxGatepostId(mesMap);
  58. //添加门岗ID
  59. tmstruckEnfactoryResult.setGatepostId(new BigDecimal(gatepostId));
  60. //添加实绩总表Id
  61. tmstruckEnfactoryResult.setResultTotalId(resultTotalId);
  62. // 添加路段顺序号
  63. tmstruckEnfactoryResult.setSegmenSqe(DataChange.dataToBigDecimal(map.get("segmentSqe")));
  64. return tmstruckEnfactoryResultMapper.insertSelective(tmstruckEnfactoryResult);
  65. }
  66. /**
  67. * 通过运输订单号查找排队顺序号
  68. * @param orderNumber
  69. * @return
  70. */
  71. @Override
  72. public Integer selectNodeNumber(String orderNumber) {
  73. return tmstruckEnfactoryResultMapper.selectNodeNumber(orderNumber);
  74. }
  75. /**
  76. * 获取进厂实绩
  77. * 1:销售订单;2:焦炭发运计划;3:水渣发运计划;4:内转到异地库;5:采购辅料订单;6:采购老区燃料订单;
  78. * 7:采购新区燃料订单;8:采购进口矿(万州-厂内);9:采购内转(达州-厂内);10:采购内转(老区-厂内); 11:厂内内转
  79. * @param map
  80. * @return
  81. */
  82. @Override
  83. public List<Map<String, Object>> getAllEnFactoryResult(Map<String, Object> map) {
  84. Integer orderType = (Integer) map.get("orderTypee");
  85. switch (orderType){
  86. case 1:
  87. case 2:
  88. case 3:
  89. return tmstruckEnfactoryResultMapper.getXSEnFactoryResult(map); //apiId:210
  90. case 4:
  91. return tmstruckEnfactoryResultMapper.getSteelNZEnFactoryResult(map); //apiId:261
  92. case 5:
  93. case 6:
  94. case 7:
  95. case 8:
  96. return tmstruckEnfactoryResultMapper.getCGJKEnFactoryResult(map); //apiID: 99
  97. case 9:
  98. return tmstruckEnfactoryResultMapper.getImportedDomesticNzLoadResult(map); //apiId:99
  99. case 10:
  100. return tmstruckEnfactoryResultMapper.getCGNZEnFactory(map); //apiId:99
  101. case 11:
  102. return tmstruckEnfactoryResultMapper.getInFactoryMaterialEnFactoryResult(map); //apiId:357
  103. case 12:
  104. case 13:
  105. case 15:
  106. case 16:
  107. return tmstruckEnfactoryResultMapper.getSporadicSuppliesEnFactoryResult(map);// apiId:416
  108. }
  109. return null;
  110. }
  111. /**
  112. * 通过运输订单id查询物资信息
  113. * @param orderId
  114. * @return
  115. */
  116. @Override
  117. public List<Map<String, Object>> getMaterial(Integer orderId) {
  118. return tmstruckEnfactoryResultMapper.getMaterial(orderId);
  119. }
  120. /**
  121. * 通过PDA进厂
  122. * orderNumber 运输订单号 gatepostId 门岗Id
  123. * 1:销售订单;2:焦炭发运计划;3:水渣发运计划;4:内转到异地库;5:采购辅料订单;6:采购老区燃料订单;
  124. * 7:采购新区燃料订单;8:采购进口矿(万州-厂内);9:采购内转(达州-厂内);10:采购内转(老区-厂内); 11:厂内内转
  125. * @param map
  126. * @return
  127. */
  128. @Transactional(rollbackFor = Exception.class)
  129. public int enFactoryResultByPDA(Map<String, Object> map) throws Exception {
  130. int i = 0;
  131. //通过运输订单号查询订单类型
  132. String orderNumber = (String) map.get("orderNumber");
  133. Map<String, Object> selectMap = tmstruckEnfactoryResultMapper.selectEnFactoryResultId(orderNumber);
  134. if(selectMap == null){
  135. throw new Exception("该车已进厂!!");
  136. }
  137. map.putAll(selectMap);
  138. BigDecimal orderType = DataChange.dataToBigDecimal(map.get("orderTypee"));
  139. BigDecimal orderId = DataChange.dataToBigDecimal(map.get("orderId"));
  140. //判断委托是否发送成功
  141. int checkMeasureCommission = 0;
  142. switch (orderType.intValue()){
  143. case 1:
  144. case 4:
  145. //查询未装车实绩
  146. List<Map<String, Object>> mapList = rulesService.judgeLastMaterial(DataChange.dataToBigDecimal(map.get("orderId")));
  147. if(mapList.size() == 1){
  148. //如果是单拼 不需要走计算 直接走钢材的汽车衡(钢材)
  149. Map<String, Object> mesMap = new HashMap<>();
  150. mesMap.put("materialId",mapList.get(0).get("materialId"));
  151. map.put("materialId", mapList.get(0).get("materialId"));
  152. mesMap.put("nature", 1);
  153. mesMap.put("orderId", orderId);
  154. mesMap.put("orderType", orderType);
  155. //计算计皮汽车衡
  156. int tarePlaceId = rulesService.calculateWeighbridge(mesMap);
  157. mesMap.put("tarePlaceId", tarePlaceId);
  158. //更新汽车衡
  159. i += tmstruckWeightResultService.updateWeightResult(mesMap);
  160. }else {
  161. //如果是多拼
  162. Map<String, Object> mesMap = rulesService.calculateMaterial(mapList);
  163. //获取物资ID
  164. HashMap<String, Object> calculateMap = new HashMap<>();
  165. calculateMap.put("orderId", map.get("orderId"));
  166. calculateMap.put("materialId", mesMap.get("materialId"));
  167. calculateMap.put("nature", 1); // 1:进厂秤
  168. //计算计皮汽车衡
  169. int tarePlaceId = rulesService.calculateWeighbridge(calculateMap);
  170. calculateMap.put("tarePlaceId", tarePlaceId);
  171. //更新汽车衡
  172. i += tmstruckWeightResultService.updateWeightResult(calculateMap);
  173. }
  174. checkMeasureCommission = tmstruckMeasureCommissionService.addXSMeasureCommission(map); //添加计皮委托
  175. break;
  176. case 2:
  177. case 3:
  178. Map<String, Object> mesMap = new HashMap<>();
  179. mesMap.put("orderId", orderId);
  180. mesMap.put("orderType", orderType);
  181. int tarePlaceId = rulesService.calculateWeighbridge(mesMap);
  182. mesMap.put("tarePlaceId", tarePlaceId);
  183. //更新汽车衡
  184. i += tmstruckWeightResultService.updateWeightResult(mesMap);
  185. checkMeasureCommission = tmstruckMeasureCommissionService.addXSMeasureCommission(map); //添加计皮委托
  186. break;
  187. case 5:
  188. case 6:
  189. case 7:
  190. case 8:
  191. case 9:
  192. //计算计毛汽车衡并更新计量实绩 (暂时无法计算汽车衡) 需要写一个单独的方法 先计皮再计毛的
  193. HashMap<String, Object> calculateMap56789 = new HashMap<>();
  194. calculateMap56789.put("orderId", map.get("orderId"));
  195. calculateMap56789.put("orderType", orderType);
  196. //计算计量汽车衡
  197. int grossPlaceId = rulesService.calculateWeighbridge(calculateMap56789);
  198. calculateMap56789.put("grossPlaceId", grossPlaceId);
  199. i += tmstruckWeightResultService.updateWeightResult(calculateMap56789);
  200. //通过订单ID查询物资Id
  201. List<Integer> materialIdList = utilsMapper.getMaterialIdByOrderId(DataChange.dataToBigDecimal(map.get("orderId")));
  202. map.put("materialId", materialIdList.get(0));
  203. checkMeasureCommission = tmstruckMeasureCommissionService.addMaoMeasureCommission(map); //添加计毛委托 并发送计毛委托
  204. break;
  205. case 10:
  206. HashMap<String, Object> calculateMap10 = new HashMap<>();
  207. calculateMap10.put("orderId", map.get("orderId"));
  208. calculateMap10.put("orderType", orderType);
  209. //计算计量汽车衡并更新计量实绩
  210. int placeId = rulesService.calculateWeighbridge(calculateMap10);
  211. if(placeId == 15){ //第一次计量
  212. calculateMap10.put("tarePlaceId", placeId); //皮重
  213. }else {
  214. calculateMap10.put("grossPlaceId", placeId); //毛重
  215. }
  216. i += tmstruckWeightResultService.updateWeightResult(calculateMap10);
  217. checkMeasureCommission = tmstruckMeasureCommissionService.addMaoMeasureCommission(map); //添加计量委托
  218. break;
  219. case 11:
  220. break;
  221. case 12:
  222. case 13:
  223. case 15:
  224. //无法确定汽车衡
  225. HashMap<String, Object> calculateMap1213 = new HashMap<>();
  226. calculateMap1213.put("orderId", map.get("orderId"));
  227. calculateMap1213.put("orderType", orderType);
  228. //计算计量汽车衡并更新计量实绩
  229. int placeId1213 = rulesService.calculateWeighbridge(calculateMap1213);
  230. if(orderType.intValue() == 12){
  231. calculateMap1213.put("grossPlaceId", placeId1213);
  232. }else {
  233. calculateMap1213.put("tarePlaceId", placeId1213);
  234. }
  235. i += tmstruckWeightResultService.updateWeightResult(calculateMap1213);
  236. //发送计量委托(查询物资顺序第一个装卸货的物资)
  237. //拿到需要计量的物资ID
  238. Integer materialId = utilsMapper.getLxFirstMaterialId(DataChange.dataToBigDecimal(map.get("orderId")));
  239. map.put("materialId", materialId);
  240. checkMeasureCommission += tmstruckMeasureCommissionService.addLXMeasureCommission(map);
  241. case 16:
  242. }
  243. if(checkMeasureCommission == 0){
  244. throw new Exception("委托发送失败");
  245. }
  246. i += updateEnFactoryResultByPDA(map); //添加进厂实绩
  247. //修改路段顺序号
  248. i += utilsService.updateOrderLineSequence(map);
  249. utilsService.pushMesToWebsocket((String) map.get("capacityNumber"), "车辆进厂");
  250. return i;
  251. }
  252. /**
  253. * 通过门禁进厂
  254. * 运输订单号 orderNumber,车牌号capacityNumber,
  255. * 门岗名称 gatepostName,进厂时间 resultEntryGateTime,(进厂方式)
  256. * @param map
  257. * @return
  258. */
  259. public int enFactoryResultByMJ(Map<String, Object> map){
  260. int i = 0;
  261. //通过运输订单号查询订单类型
  262. String orderNumber = (String) map.get("orderNumber");
  263. String subString = orderNumber.substring(0,orderNumber.length() - 1);
  264. map.putAll(tmstruckEnfactoryResultMapper.selectEnFactoryResultId(subString));
  265. BigDecimal orderType = DataChange.dataToBigDecimal(map.get("orderTypee"));
  266. switch (orderType.intValue()){
  267. case 1:
  268. case 4:
  269. i += updateEnFactoryResultByMJ(map); //添加进厂实绩
  270. // i += tmstruckMeasureCommissionService.addPiMeasureCommission(map); //添加计皮委托
  271. break;
  272. case 2:
  273. break;
  274. case 5:
  275. case 6:
  276. case 7:
  277. case 8:
  278. case 9:
  279. i += updateEnFactoryResultByMJ(map); //添加进厂实绩
  280. i += tmstruckMeasureCommissionService.addMaoMeasureCommission(map); //添加计毛委托 并发送计毛委托
  281. break;
  282. case 10: // 采购内转(老区-厂内)
  283. break;
  284. case 11:
  285. break;
  286. case 12:
  287. break;
  288. }
  289. omsFeign.pushMesToWebsocket(map);
  290. return i;
  291. }
  292. /**
  293. * APP查询进厂实绩
  294. * @return
  295. */
  296. @Override
  297. public List<Map<String, Object>> getEnfactoryResultList() {
  298. return tmstruckEnfactoryResultMapper.getEnfactoryResultList();
  299. }
  300. /**
  301. * APP通过运输订单id查询进厂实绩
  302. * @param orderNumber
  303. * @return
  304. */
  305. @Override
  306. public List<Map<String, Object>> getEnfactoryMessageByOrderId(String orderNumber) {
  307. return tmstruckEnfactoryResultMapper.getEnfactoryMessageByOrderId(orderNumber);
  308. }
  309. /**
  310. * 通过PDA添加进厂实绩方法
  311. * @param map
  312. * @return
  313. */
  314. public int updateEnFactoryResultByPDA(Map<String, Object> map){
  315. TmstruckEnfactoryResult tmstruckEnfactoryResult = new TmstruckEnfactoryResult();
  316. //获取进厂实绩id
  317. tmstruckEnfactoryResult.setResultId(DataChange.dataToBigDecimal(map.get("resultId")));
  318. //添加门岗
  319. tmstruckEnfactoryResult.setGatepostId(DataChange.dataToBigDecimal(map.get("gatepostId")));
  320. //添加进厂时间
  321. tmstruckEnfactoryResult.setResultEntryGateTime(new Date());
  322. tmstruckEnfactoryResult.setInsertTime(new Date());
  323. tmstruckEnfactoryResult.setResultEntryMode("手动抬杠");
  324. tmstruckEnfactoryResult.setInsertUsername("admin");
  325. return tmstruckEnfactoryResultMapper.updateByPrimaryKeySelective(tmstruckEnfactoryResult);
  326. }
  327. /**
  328. * 通过门禁系统添加进厂实绩方法
  329. * @param map
  330. * @return
  331. */
  332. public int updateEnFactoryResultByMJ(Map<String, Object> map){
  333. TmstruckEnfactoryResult tmstruckEnfactoryResult=new TmstruckEnfactoryResult();
  334. //进门方式
  335. tmstruckEnfactoryResult.setResultEntryMode("自动抬杆");
  336. //添加进厂时间
  337. tmstruckEnfactoryResult.setResultEntryGateTime(new Date((long) map.get("resultEntryGateTime")));
  338. //添加门岗
  339. String gatepostName = (String) map.get("gatepostName");
  340. Integer gatepostNameId = tmstruckEnfactoryResultMapper.selectGatepostIdByGatepostName(gatepostName);
  341. tmstruckEnfactoryResult.setGatepostId(new BigDecimal(gatepostNameId));
  342. tmstruckEnfactoryResult.setInsertTime(new Date());
  343. tmstruckEnfactoryResult.setInsertUsername("admin");
  344. return tmstruckEnfactoryResultMapper.updateByPrimaryKeySelective(tmstruckEnfactoryResult);
  345. }
  346. }