TmstruckEnfactoryResultServiceImpl.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493
  1. package com.steerinfo.dil.service.impl;
  2. import com.steerinfo.dil.feign.OmsFeign;
  3. import com.steerinfo.dil.mapper.DilCapacityTimesMapper;
  4. import com.steerinfo.dil.mapper.TmstruckEnfactoryResultMapper;
  5. import com.steerinfo.dil.mapper.UtilsMapper;
  6. import com.steerinfo.dil.model.DilCapacityTimes;
  7. import com.steerinfo.dil.model.TmstruckEnfactoryResult;
  8. import com.steerinfo.dil.model.TmstruckLeaveFactoryResult;
  9. import com.steerinfo.dil.service.ITmstruckEnfactoryResultService;
  10. import com.steerinfo.dil.util.DataChange;
  11. import io.swagger.models.auth.In;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.stereotype.Service;
  14. import org.springframework.transaction.annotation.Transactional;
  15. import java.math.BigDecimal;
  16. import java.util.*;
  17. /**
  18. * TmstruckEnfactoryResult服务实现:
  19. * @author TXF
  20. * @version 1.0-SNAPSHORT 2021-09-08 06:23
  21. * 类描述
  22. * 修订历史:
  23. * 日期:2021-09-08
  24. * 作者:generator
  25. * 参考:
  26. * 描述:TmstruckEnfactoryResult服务实现
  27. * @see null
  28. * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
  29. */
  30. @Service(value = "tmstruckEnfactoryResultService")
  31. public class TmstruckEnfactoryResultServiceImpl implements ITmstruckEnfactoryResultService {
  32. @Autowired
  33. private TmstruckEnfactoryResultMapper tmstruckEnfactoryResultMapper;
  34. @Autowired
  35. private TmstruckMeasureCommissionServiceImpl tmstruckMeasureCommissionService;
  36. @Autowired
  37. private TmstruckTimeTaskResultServiceImpl tmstruckTimeTaskResultService;
  38. @Autowired
  39. private DilCapacityTimesMapper dilCapacityTimesMapper;
  40. @Autowired
  41. private UtilsServiceImpl utilsService;
  42. @Autowired
  43. private RulesServiceImpl rulesService;
  44. @Autowired
  45. OmsFeign omsFeign;
  46. @Autowired
  47. UtilsMapper utilsMapper;
  48. /**
  49. * 派单时新增进厂实绩
  50. * map: 总实绩Id、线路Id、路段顺序号
  51. * @param map
  52. * @return
  53. */
  54. @Override
  55. public int addEnFactoryResult(Map<String, Object> map) {
  56. TmstruckEnfactoryResult tmstruckEnfactoryResult = new TmstruckEnfactoryResult();
  57. BigDecimal resultTotalId = DataChange.dataToBigDecimal(map.get("resultTotalId"));
  58. tmstruckEnfactoryResult.setResultTotalId(resultTotalId);
  59. //添加主键
  60. tmstruckEnfactoryResult.setResultId(tmstruckEnfactoryResultMapper.selectMaxId());
  61. List<Integer> gatepostIdList = utilsMapper.getLineSegmentGateCalcId(map);
  62. gatepostIdList.remove(null);
  63. //随机取门岗Id
  64. Integer gatepostId = utilsService.randomGetValue(gatepostIdList);
  65. //获取门岗ID
  66. tmstruckEnfactoryResult.setGatepostId(new BigDecimal(gatepostId));
  67. // 添加路段顺序号
  68. tmstruckEnfactoryResult.setSegmenSqe(DataChange.dataToBigDecimal(map.get("segmentSqe")));
  69. int i=tmstruckEnfactoryResultMapper.insertSelective(tmstruckEnfactoryResult);
  70. try{
  71. tmstruckEnfactoryResultMapper.clearRepeat(tmstruckEnfactoryResult);
  72. }catch (Exception e){
  73. e.printStackTrace();
  74. }
  75. return i;
  76. }
  77. /**
  78. * 通过运输订单号查找排队顺序号
  79. * @param orderNumber
  80. * @return
  81. */
  82. @Override
  83. public Integer selectNodeNumber(String orderNumber) {
  84. return tmstruckEnfactoryResultMapper.selectNodeNumber(orderNumber);
  85. }
  86. /**
  87. * 获取进厂实绩
  88. * 1:销售订单;2:焦炭发运计划;3:水渣发运计划;4:内转到异地库;5:采购辅料订单;6:采购老区燃料订单;
  89. * 7:采购新区燃料订单;8:采购进口矿(万州-厂内);9:采购内转(达州-厂内);10:采购内转(老区-厂内); 11:厂内内转
  90. * @param map
  91. * @return
  92. */
  93. @Override
  94. public List<Map<String, Object>> getAllEnFactoryResult(Map<String, Object> map) {
  95. Integer orderType = (Integer) map.get("orderTypee");
  96. switch (orderType){
  97. case 1:
  98. case 2:
  99. case 3:
  100. return tmstruckEnfactoryResultMapper.getXSEnFactoryResult(map); //apiId:210
  101. case 4:
  102. return tmstruckEnfactoryResultMapper.getSteelNZEnFactoryResult(map); //apiId:261
  103. case 5:
  104. case 6:
  105. case 7:
  106. case 8:
  107. case 17:
  108. case 18:
  109. return tmstruckEnfactoryResultMapper.getCGJKEnFactoryResult(map); //apiID: 99
  110. case 9:
  111. return tmstruckEnfactoryResultMapper.getImportedDomesticNzLoadResult(map); //apiId:99
  112. case 10:
  113. case 20:
  114. case 23:
  115. case 24:
  116. case 15:
  117. case 16:
  118. return tmstruckEnfactoryResultMapper.getCGNZEnFactory(map); //apiId:99
  119. case 11:
  120. return tmstruckEnfactoryResultMapper.getInFactoryMaterialEnFactoryResult(map); //apiId:357
  121. case 12:
  122. case 13:
  123. case 14:
  124. case 19:
  125. case 100:
  126. return tmstruckEnfactoryResultMapper.getSporadicSuppliesEnFactoryResult(map);// apiId:416
  127. }
  128. return null;
  129. }
  130. /**
  131. * 通过运输订单id查询物资信息
  132. * @param orderId
  133. * @return
  134. */
  135. @Override
  136. public List<Map<String, Object>> getMaterial(Integer orderId) {
  137. return tmstruckEnfactoryResultMapper.getMaterial(orderId);
  138. }
  139. /**
  140. * 通过PDA进厂
  141. * orderNumber 运输订单号 gatepostId 门岗Id
  142. * 1:销售订单;2:焦炭发运计划;3:水渣发运计划;4:内转到异地库;5:采购辅料订单;6:采购老区燃料订单;
  143. * 7:采购新区燃料订单;8:采购进口矿(万州-厂内);9:采购内转(达州-厂内);10:采购内转(老区-厂内); 11:厂内内转
  144. * @param map
  145. * @return
  146. */
  147. @Transactional(rollbackFor = Exception.class)
  148. public int enFactoryResultByPDA(Map<String, Object> map) throws Exception {
  149. int i = 0;
  150. //通过运输订单号查询订单类型
  151. String orderNumber = (String) map.get("orderNumber");
  152. //通过订单号查询订单类型 及总实绩Id
  153. Map<String, Object> mesMap = utilsMapper.getOrderTypeByOrderNumber(orderNumber);
  154. String capacityNumber = (String) mesMap.get("capacityNumber");
  155. BigDecimal resultTotalId = DataChange.dataToBigDecimal(mesMap.get("totalId"));
  156. int orderType = DataChange.dataToBigDecimal(mesMap.get("orderType")).intValue();
  157. if(orderType == 11 || orderType == 15 || orderType == 16){//内转计时调用方法
  158. return orderType11Use(map, mesMap, capacityNumber, resultTotalId);
  159. }
  160. else if (orderType == 21){//调用计时作业方法
  161. return orderType21Use(map, orderNumber, DataChange.dataToBigDecimal(mesMap.get("orderId")));
  162. }
  163. //如果订单类型为2 则需要财务公司审核才能进厂//如果订单为销售,1,2,内转钢材异地库-4
  164. if(orderType == 2 || orderType == 1 || orderType == 4){
  165. Integer saleOrderStatus = tmstruckEnfactoryResultMapper.getSaleOrderStatus(DataChange.dataToBigDecimal(mesMap.get("orderId")));
  166. if(saleOrderStatus != 4){
  167. throw new Exception("审批未通过不能进厂!");
  168. }
  169. }
  170. Map<String, Object> selectMap = tmstruckEnfactoryResultMapper.selectEnFactoryResultId(resultTotalId);
  171. if(orderType == 1) {
  172. selectMap = tmstruckEnfactoryResultMapper.selectEnFactoryResultIdSteel(resultTotalId);
  173. }
  174. if(selectMap == null){
  175. if (orderType == 20 || orderType == 12 || orderType == 13 || orderType == 14) {
  176. selectMap = tmstruckEnfactoryResultMapper.selectEnFactoryResultIdGatepost(resultTotalId);
  177. }else{
  178. throw new Exception("该车已进厂!!");
  179. }
  180. }else{
  181. if(orderType != 1) {
  182. BigDecimal segmentSqe = DataChange.dataToBigDecimal(selectMap.get("segmentSqe"));
  183. BigDecimal orderSegmentSqe = DataChange.dataToBigDecimal(mesMap.get("orderSegmentSqe"));
  184. //如果当前路段顺序号 +1 不等于进厂路段顺序号 则不允许进厂 (针对同一路线多次进厂情况)
  185. if(segmentSqe.intValue() != (orderSegmentSqe.intValue() + 1)){
  186. throw new Exception("作业环节未到进厂!");
  187. }
  188. }
  189. }
  190. map.putAll(mesMap);
  191. map.putAll(selectMap);
  192. map.remove("Sqe");
  193. //判断委托是否发送成功
  194. int checkMeasureCommission = 0;
  195. switch (orderType){
  196. case 1:
  197. case 4:
  198. checkMeasureCommission = steelOrderEnFactory(map, selectMap, resultTotalId);
  199. break;
  200. case 2:
  201. case 3:
  202. checkMeasureCommission = tmstruckMeasureCommissionService.addXSMeasureCommission(map); //添加计皮委托
  203. break;
  204. case 5:
  205. Integer num = tmstruckEnfactoryResultMapper.selectAllEnFactoryNum(resultTotalId);
  206. if(num == 2){
  207. //如果辅料有两次进厂,则判断还剩几次没进厂数据,如果还剩两次则发委托
  208. Integer judgeNum = tmstruckEnfactoryResultMapper.selectEnFactoryNumber(resultTotalId);
  209. if (judgeNum == 1){
  210. checkMeasureCommission = 1;
  211. break;
  212. }
  213. }
  214. checkMeasureCommission = tmstruckMeasureCommissionService.addMaoMeasureCommission(map); //添加计毛委托 并发送计毛委托
  215. break;
  216. case 6:
  217. case 7:
  218. case 8:
  219. // case 9:
  220. case 10:
  221. case 17:
  222. case 18:
  223. case 23:
  224. case 24:
  225. checkMeasureCommission = tmstruckMeasureCommissionService.addMaoMeasureCommission(map); //添加计毛委托 并发送计毛委托
  226. break;
  227. case 12:
  228. case 13:
  229. case 14:
  230. //发送计量委托(查询物资顺序第一个装卸货的物资)
  231. Integer materialId = utilsMapper.getLxFirstMaterialId(DataChange.dataToBigDecimal(map.get("orderId")));
  232. map.put("materialId", materialId);
  233. checkMeasureCommission += tmstruckMeasureCommissionService.sendMeasureCommissionByGatepost(map);
  234. break;
  235. case 20:
  236. checkMeasureCommission += tmstruckMeasureCommissionService.sendMeasureCommissionByGatepost(map);
  237. break;
  238. case 19:
  239. checkMeasureCommission = 1;
  240. }
  241. if(checkMeasureCommission == 0){
  242. throw new Exception("委托发送失败");
  243. }else if (checkMeasureCommission == -2){
  244. throw new Exception("没有获取到门岗");
  245. }
  246. try {
  247. DilCapacityTimes dilCapacityTimes = new DilCapacityTimes();
  248. dilCapacityTimes.setId(dilCapacityTimesMapper.getDilCapacityTimesId());
  249. dilCapacityTimes.setTimesCapacityNumber(map.get("capacityNumber").toString());
  250. dilCapacityTimes.setTimesValue(new Date());
  251. dilCapacityTimes.setTimesType(new BigDecimal(1));
  252. dilCapacityTimesMapper.insertSelective(dilCapacityTimes);
  253. } catch (Exception e) {
  254. e.printStackTrace();
  255. }
  256. i += tmstruckEnfactoryResultMapper.updateByPrimaryKeySelective(generateEnFactoryResult(map)); //添加进厂实绩
  257. //修改路段顺序号
  258. i += utilsService.updateOrderLineSequence(map);
  259. utilsService.pushMesToWebsocket(capacityNumber, "车辆进厂");
  260. return i;
  261. }
  262. /**
  263. * 钢材进厂处理方法
  264. * @param map
  265. * @param selectMap
  266. * @param resultTotalId
  267. * @return
  268. * @throws Exception
  269. */
  270. public int steelOrderEnFactory(Map<String, Object> map, Map<String, Object> selectMap,BigDecimal resultTotalId) throws Exception{
  271. if(!"OK".equals(selectMap.get("insertUpdateRemark")) && DataChange.dataToBigDecimal(map.get("orderType")).intValue() == 1){
  272. throw new Exception("钢材科未确认进厂!");
  273. }
  274. //发送空委托
  275. map.put("firstMC", 1); //空委托依据
  276. int checkMeasureCommission = tmstruckMeasureCommissionService.addSteelMeasureCommission(map);
  277. if(checkMeasureCommission == 1 && DataChange.dataToBigDecimal(map.get("orderType")).intValue() == 1){
  278. //查询是否拼装
  279. Map<String, Object> isSpellingMap = tmstruckEnfactoryResultMapper.getSteelIsSpelling(resultTotalId);
  280. if (isSpellingMap != null) {
  281. int isSpelling = DataChange.dataToBigDecimal(isSpellingMap.get("isSpelling")).intValue();
  282. if(isSpelling == 1){
  283. //拼装移出队列
  284. tmstruckEnfactoryResultMapper.deleteQQSL(isSpellingMap.get("listId"));
  285. }else {
  286. //单拼移出队列
  287. tmstruckEnfactoryResultMapper.deleteQQL(isSpellingMap.get("listId"));
  288. }
  289. //修改排队实绩表
  290. tmstruckEnfactoryResultMapper.updateQQR(isSpellingMap.get("resultId"));
  291. }
  292. }
  293. return checkMeasureCommission;
  294. }
  295. /**
  296. * 计时作业方法
  297. * @Author TXF
  298. * @Date 2022/3/18 16:57
  299. * @param map
  300. * @param orderNumber
  301. * @param orderId
  302. * @return
  303. **/
  304. public int orderType21Use(Map<String, Object> map, String orderNumber, BigDecimal orderId) throws Exception{
  305. int gatepostId = DataChange.dataToBigDecimal(map.get("gatepostId")).intValue();
  306. if(TmstruckMeasureCommissionServiceImpl.daXingGatepost.contains(gatepostId)){
  307. //如果是达兴的门岗扫码则不进行计时判断
  308. map.put("inwardTypes",0);
  309. map.put("orderNumber",orderNumber);
  310. }else {
  311. //首先判断是否还有计时开始
  312. BigDecimal startTime = utilsMapper.getTime(DataChange.dataToBigDecimal(orderId));
  313. //如果计时已经开始
  314. if (startTime == null) {
  315. map.put("inwardTypes", 1);
  316. map.put("orderNumber", orderNumber);
  317. } else {
  318. map.put("inwardTypes", 3);
  319. map.put("orderNumber", orderNumber);
  320. }
  321. }
  322. return tmstruckTimeTaskResultService.addTimeTaskResult(map);
  323. }
  324. /**
  325. * 内转订单类型处理方法
  326. * @Author TXF
  327. * @Date 2022/3/18 16:59
  328. * @param
  329. * @return
  330. **/
  331. public int orderType11Use(Map<String, Object> map, Map<String, Object> mesMap, String capacityNumber, BigDecimal resultTotalId){
  332. //内转订单类型 没有生成实绩 直接新增
  333. int sqe = DataChange.dataToBigDecimal(mesMap.get("Sqe")).intValue();
  334. sqe = sqe + 1;
  335. map.put("resultId", tmstruckEnfactoryResultMapper.selectMaxId()); //插入进厂实绩Id
  336. map.put("Sqe", sqe); //查询路段顺序号 + 1
  337. map.put("totalId",resultTotalId);
  338. tmstruckEnfactoryResultMapper.insertSelective(generateEnFactoryResult(map));
  339. mesMap.put("orderLineSequence", sqe);
  340. utilsService.updateOrderLineSqeByOrderNumber(mesMap); //更新路段顺序号
  341. utilsService.pushMesToWebsocket(capacityNumber, "车辆进厂");
  342. return 1;
  343. }
  344. /**
  345. * 通过门禁进厂
  346. * 运输订单号 orderNumber,车牌号capacityNumber,
  347. * 门岗名称 gatepostName,进厂时间 resultEntryGateTime,(进厂方式)
  348. * @param map
  349. * @return
  350. */
  351. public int enFactoryResultByMJ(Map<String, Object> map){
  352. int i = 0;
  353. //通过运输订单号查询订单类型
  354. String orderNumber = (String) map.get("orderNumber");
  355. String subString = orderNumber.substring(0,orderNumber.length() - 1);
  356. map.putAll(tmstruckEnfactoryResultMapper.selectEnFactoryResultId(null));
  357. BigDecimal orderType = DataChange.dataToBigDecimal(map.get("orderTypee"));
  358. switch (orderType.intValue()){
  359. case 1:
  360. case 4:
  361. i += updateEnFactoryResultByMJ(map); //添加进厂实绩
  362. // i += tmstruckMeasureCommissionService.addPiMeasureCommission(map); //添加计皮委托
  363. break;
  364. case 2:
  365. break;
  366. case 5:
  367. case 6:
  368. case 7:
  369. case 8:
  370. case 9:
  371. i += updateEnFactoryResultByMJ(map); //添加进厂实绩
  372. i += tmstruckMeasureCommissionService.addMaoMeasureCommission(map); //添加计毛委托 并发送计毛委托
  373. break;
  374. case 10: // 采购内转(老区-厂内)
  375. break;
  376. case 11:
  377. break;
  378. case 12:
  379. break;
  380. }
  381. omsFeign.pushMesToWebsocket(map);
  382. return i;
  383. }
  384. /**
  385. * APP查询进厂实绩
  386. * @return
  387. */
  388. @Override
  389. public List<Map<String, Object>> getEnfactoryResultList() {
  390. return tmstruckEnfactoryResultMapper.getEnfactoryResultList();
  391. }
  392. /**
  393. * APP通过运输订单id查询进厂实绩
  394. * @param orderNumber
  395. * @return
  396. */
  397. @Override
  398. public List<Map<String, Object>> getEnfactoryMessageByOrderId(String orderNumber) {
  399. return tmstruckEnfactoryResultMapper.getEnfactoryMessageByOrderId(orderNumber);
  400. }
  401. @Override
  402. public int updateEnSge() {
  403. List<Map<String,Object>>maplist = tmstruckEnfactoryResultMapper.getEnResult();
  404. int i = 0;
  405. for (Map<String,Object>map:maplist
  406. ) {
  407. BigDecimal resultId = DataChange.dataToBigDecimal(map.get("resultId"));
  408. TmstruckEnfactoryResult tmstruckEnfactoryResult = new TmstruckEnfactoryResult();
  409. tmstruckEnfactoryResult.setResultId(resultId);
  410. tmstruckEnfactoryResult.setSegmenSqe(new BigDecimal(6));
  411. i = tmstruckEnfactoryResultMapper.updateByPrimaryKeySelective(tmstruckEnfactoryResult);
  412. }
  413. return i;
  414. }
  415. /**
  416. * 生成进厂实绩
  417. * @param map
  418. * @return
  419. */
  420. public TmstruckEnfactoryResult generateEnFactoryResult(Map<String, Object> map){
  421. TmstruckEnfactoryResult tmstruckEnfactoryResult = new TmstruckEnfactoryResult();
  422. //获取进厂实绩id
  423. tmstruckEnfactoryResult.setResultId(DataChange.dataToBigDecimal(map.get("resultId")));
  424. //添加门岗
  425. tmstruckEnfactoryResult.setGatepostId(DataChange.dataToBigDecimal(map.get("gatepostId")));
  426. //添加进厂时间
  427. tmstruckEnfactoryResult.setResultEntryGateTime(new Date());
  428. tmstruckEnfactoryResult.setInsertTime(new Date());
  429. tmstruckEnfactoryResult.setResultEntryMode("手动抬杠");
  430. tmstruckEnfactoryResult.setInsertUsername("admin");
  431. if(map.get("Sqe") != null){
  432. tmstruckEnfactoryResult.setSegmenSqe(DataChange.dataToBigDecimal(map.get("Sqe")));
  433. }
  434. if(map.get("totalId") != null){
  435. tmstruckEnfactoryResult.setResultTotalId(DataChange.dataToBigDecimal(map.get("totalId")));
  436. tmstruckEnfactoryResultMapper.updateEnfactoryStatus(DataChange.dataToBigDecimal(map.get("totalId")));
  437. }
  438. return tmstruckEnfactoryResult;
  439. }
  440. /**
  441. * 通过门禁系统添加进厂实绩方法
  442. * @param map
  443. * @return
  444. */
  445. public int updateEnFactoryResultByMJ(Map<String, Object> map){
  446. TmstruckEnfactoryResult tmstruckEnfactoryResult=new TmstruckEnfactoryResult();
  447. //进门方式
  448. tmstruckEnfactoryResult.setResultEntryMode("自动抬杆");
  449. //添加进厂时间
  450. tmstruckEnfactoryResult.setResultEntryGateTime(new Date((long) map.get("resultEntryGateTime")));
  451. //添加门岗
  452. String gatepostName = (String) map.get("gatepostName") ;
  453. Integer gatepostNameId = tmstruckEnfactoryResultMapper.selectGatepostIdByGatepostName(gatepostName);
  454. tmstruckEnfactoryResult.setGatepostId(new BigDecimal(gatepostNameId));
  455. tmstruckEnfactoryResult.setInsertTime(new Date());
  456. tmstruckEnfactoryResult.setInsertUsername("admin");
  457. return tmstruckEnfactoryResultMapper.updateByPrimaryKeySelective(tmstruckEnfactoryResult);
  458. }
  459. }