TmstruckLeaveFactoryResultServiceImpl.java 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830
  1. package com.steerinfo.dil.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.steerinfo.dil.feign.*;
  5. import com.steerinfo.dil.mapper.*;
  6. import com.steerinfo.dil.model.DilCapacityTimes;
  7. import com.steerinfo.dil.model.TmstruckLeaveFactoryResult;
  8. import com.steerinfo.dil.model.TmstruckWeightResult;
  9. import com.steerinfo.dil.service.ITmstruckLeaveFactoryResultService;
  10. import com.steerinfo.dil.util.DataChange;
  11. import com.steerinfo.dil.util.HTTPRequestUtils;
  12. import com.steerinfo.dil.util.getRequestUtils;
  13. import com.steerinfo.dil.util.newFileTool;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.scheduling.annotation.Scheduled;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import java.io.IOException;
  19. import java.math.BigDecimal;
  20. import java.text.DateFormat;
  21. import java.text.SimpleDateFormat;
  22. import java.util.*;
  23. /**
  24. * TmstruckLeaveFactoryResult服务实现:
  25. * @author generator
  26. * @version 1.0-SNAPSHORT 2021-09-11 10:32
  27. * 类描述
  28. * 修订历史:
  29. * 日期:2021-09-11
  30. * 作者:generator
  31. * 参考:
  32. * 描述:TmstruckLeaveFactoryResult服务实现
  33. * @see null
  34. * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
  35. */
  36. @Service(value = "tmstruckLeaveFactoryResultService")
  37. public class TmstruckLeaveFactoryResultServiceImpl implements ITmstruckLeaveFactoryResultService {
  38. @Autowired
  39. private TmstruckLeaveFactoryResultMapper tmstruckLeaveFactoryResultMapper;
  40. @Autowired
  41. private TmstruckEnfactoryResultMapper tmstruckEnfactoryResultMapper;
  42. @Autowired
  43. private TmstruckLoadResultMapper tmstruckLoadResultMapper;
  44. @Autowired
  45. private UtilsServiceImpl utilsService;
  46. @Autowired
  47. private UtilsMapper utilsMapper;
  48. @Autowired
  49. private OtmsFeign otmsFeign;
  50. @Autowired
  51. private TmstruckEnfactoryResultServiceImpl tmstruckEnfactoryResultService;
  52. @Autowired
  53. private DilCapacityTimesMapper dilCapacityTimesMapper;
  54. @Autowired
  55. TmstruckSmsRusultServiceImpl tmstruckSmsRusultService;
  56. @Autowired
  57. OmsFeign omsFeign;
  58. @Autowired
  59. BmsTruckFeign bmsTruckFeign;
  60. @Autowired
  61. AmsFeign amsFeign;
  62. @Autowired
  63. JoinFeign joinFeign;
  64. //果园库测试接口:"http://113.204.217.110:9810/dagang/receiving";
  65. //果园库正式接口
  66. private String guoYuanUrl="http://114.117.208.165:9810/dagang/receiving";
  67. //城嘉库登录访问接口
  68. private String chengJiaLoginUrl="http://116.204.73.104:8083/dagon/login";
  69. //城嘉库推送数据接口
  70. private String chengJiaSendUrl="http://116.204.73.104:8083/dagon/selectSaleSteelOrder";
  71. /**
  72. * 查看运输线路是否为出厂
  73. * @param orderNumber
  74. * @return
  75. */
  76. @Override
  77. public Integer selectTransportRoute(String orderNumber) {
  78. return tmstruckLeaveFactoryResultMapper.selectTransportRoute(orderNumber);
  79. }
  80. /**
  81. * 派单后新增出厂实绩
  82. * 总实绩ID、线路终点
  83. * @param map
  84. * @return
  85. */
  86. @Override
  87. public int addLeaveFactory(Map<String, Object> map) {
  88. TmstruckLeaveFactoryResult tmstruckLeaveFactoryResult = new TmstruckLeaveFactoryResult();
  89. //添加主键
  90. tmstruckLeaveFactoryResult.setId(tmstruckLeaveFactoryResultMapper.selectMaxId());
  91. //添加总实绩ID
  92. BigDecimal resultTotalId = DataChange.dataToBigDecimal(map.get("resultTotalId"));
  93. tmstruckLeaveFactoryResult.setResultTotalId(resultTotalId);
  94. List<Integer> gatepostIdList = utilsMapper.getLineSegmentGateCalcId(map);
  95. gatepostIdList.remove(null);
  96. //随机取门岗值
  97. Integer gatepostId = utilsService.randomGetValue(gatepostIdList);
  98. try{
  99. //如果是物资里有钒渣,则取5
  100. map.put("con","钒渣");
  101. if(utilsMapper.getMaterialNumByTotal(map) > 0){
  102. gatepostId=5;
  103. }
  104. }catch (Exception e){
  105. e.printStackTrace();
  106. }
  107. //获取门岗ID
  108. tmstruckLeaveFactoryResult.setGatepostId(new BigDecimal(gatepostId));
  109. //添加路段顺序号
  110. tmstruckLeaveFactoryResult.setSegmentSqe(DataChange.dataToBigDecimal(map.get("segmentSqe")));
  111. //添加门岗ID 出厂门岗为线路的终点
  112. int i=tmstruckLeaveFactoryResultMapper.insertSelective(tmstruckLeaveFactoryResult);
  113. try{
  114. tmstruckLeaveFactoryResultMapper.clearRepeat(tmstruckLeaveFactoryResult);
  115. }catch (Exception e){
  116. e.printStackTrace();
  117. }
  118. return i;
  119. }
  120. @Override
  121. public Map<String, Object> getTruckFactoryResult(String orderNumber) {
  122. return tmstruckLeaveFactoryResultMapper.getTruckFactoryResult(orderNumber);
  123. }
  124. /**
  125. * APP查询出厂信息
  126. * @param orderNumber
  127. * @return
  128. */
  129. @Override
  130. public List<Map<String, Object>> getLeaveFactoryList(String orderNumber) {
  131. return tmstruckLeaveFactoryResultMapper.getLeaveFactoryList(orderNumber);
  132. }
  133. /**
  134. * 查询所有的出厂实绩
  135. * 1:销售订单;2:焦炭发运计划;3:水渣发运计划;4:内转到异地库;5:采购辅料订单;6:采购老区燃料订单;
  136. * 7:采购新区燃料订单;8:采购进口矿(万州-厂内);9:采购内转(达州-厂内);10:采购内转(老区-厂内); 11:厂内内转
  137. * @param map
  138. * @return
  139. */
  140. @Override
  141. public List<Map<String, Object>> getLeaveFactoryResult(Map<String, Object> map) {
  142. Integer orderType = (Integer) map.get("orderTypee");
  143. switch (orderType){
  144. case 1:
  145. case 2:
  146. case 3:
  147. return tmstruckLeaveFactoryResultMapper.selectAllLeaveFacatoryForSale(map);
  148. case 4:
  149. return tmstruckLeaveFactoryResultMapper.selectSteelNzLeaveFactory(map);
  150. case 5:
  151. case 6:
  152. case 7:
  153. case 8:
  154. case 17:
  155. case 18:
  156. return tmstruckLeaveFactoryResultMapper.getCGLeaveFactoryResult(map); //apiId:110
  157. case 9:
  158. return tmstruckLeaveFactoryResultMapper.getImportedDomesticNzEnFactoryResult(map); //apiId:110
  159. case 10:
  160. case 20:
  161. case 23:
  162. case 24:
  163. return tmstruckEnfactoryResultMapper.getCgNzOutFactory(map);
  164. case 11:
  165. return tmstruckLeaveFactoryResultMapper.getInFactoryOutFactoryResult(map); //apiId:361
  166. case 12:
  167. case 13:
  168. case 14:
  169. case 19:
  170. case 100:
  171. return tmstruckLeaveFactoryResultMapper.getSporadicLeaveFactory(map);//apiId:421
  172. }
  173. return null;
  174. }
  175. /**
  176. * 通过 PDA 出厂
  177. * 1:销售订单;2:焦炭发运计划;3:水渣发运计划;4:内转到异地库;5:采购辅料订单;6:采购老区燃料订单;
  178. * 7:采购新区燃料订单;8:采购进口矿(万州-厂内);9:采购内转(达州-厂内);10:采购内转(老区-厂内); 11:厂内内转
  179. * @param map
  180. * @return
  181. */
  182. @Transactional(rollbackFor = Exception.class)
  183. @Override
  184. public int leaveFactoryByPDA(Map<String, Object> map) throws Exception{
  185. int i = 0;
  186. String orderNumber = (String) map.get("orderNumber");
  187. orderNumber = orderNumber.substring(0, orderNumber.length() - 1);
  188. //通过订单号查询订单类型 及总实绩Id
  189. Map<String, Object> mesMap = utilsMapper.getOrderTypeByOrderNumber(orderNumber);
  190. int orderType = DataChange.dataToBigDecimal(mesMap.get("orderType")).intValue();
  191. String capacityNumber = (String) mesMap.get("capacityNumber");
  192. if(orderType == 11 || orderType == 15 || orderType == 16){
  193. return orderType11Use(map, mesMap,capacityNumber);
  194. }else if(orderType == 21){
  195. return tmstruckEnfactoryResultService.orderType21Use(map, orderNumber, DataChange.dataToBigDecimal(mesMap.get("orderId")));
  196. }
  197. Map<String, Object> selectMap = tmstruckLeaveFactoryResultMapper.selectResultId(DataChange.dataToBigDecimal(mesMap.get("resultTotalId")));
  198. if(selectMap == null){
  199. if(orderType == 4) {
  200. return i;
  201. }
  202. throw new Exception("该车已出厂!!");
  203. }else{
  204. BigDecimal segmentSqe = DataChange.dataToBigDecimal(selectMap.get("segmentSqe"));
  205. BigDecimal orderSegmentSqe = DataChange.dataToBigDecimal(mesMap.get("orderSegmentSqe"));
  206. //如果当前路段顺序号 +1 不等于出厂路段顺序号 则不允许出厂
  207. if(segmentSqe.intValue() != (orderSegmentSqe.intValue() + 1) && orderType != 1){
  208. throw new Exception("该车作业环节未全部完成!");
  209. }
  210. }
  211. if(orderType == 2){
  212. Map<String,Object> loadResultMap = tmstruckLoadResultMapper.getLoadResultMap(DataChange.dataToBigDecimal(mesMap.get("resultTotalId")));
  213. //根据总实绩ID查询该车有没有装货
  214. if(loadResultMap == null || (loadResultMap != null && loadResultMap.get("loadEndTime") == null)){
  215. throw new Exception("该车未扫装货,请提醒司机去补扫装货");
  216. }
  217. // 查询运单所属的销售订单id
  218. BigDecimal saleOrderId = tmstruckLeaveFactoryResultMapper.getSaleOrderId(orderNumber);
  219. // 得到销售订单下已出厂车辆已计量净重
  220. Double allNetWeight = tmstruckLeaveFactoryResultMapper.getLeaveFactoryNetWeight(saleOrderId);
  221. if (allNetWeight != null) {
  222. // 得到当前运单净重
  223. Double nowNetWeight = tmstruckLeaveFactoryResultMapper.getNowNetWeight(orderNumber);
  224. // 得到销售订单下单总重量
  225. Double saleWeight = tmstruckLeaveFactoryResultMapper.getSaleMaterialWeight(saleOrderId);
  226. //判断当前订单是否可出厂
  227. Integer canWork = tmstruckLeaveFactoryResultMapper.getCanWorkStatus(DataChange.dataToBigDecimal(mesMap.get("orderId")));
  228. if (allNetWeight + nowNetWeight > saleWeight && canWork == null) {
  229. throw new Exception("该销售订单吨位已超额,不允许出厂,请司机联系销售公司走流程卸货!");
  230. }
  231. }
  232. }
  233. if(orderType == 13 ){
  234. //检查物资类型
  235. List<String> materials=null;
  236. try{
  237. materials=tmstruckLeaveFactoryResultMapper.getMaterial(orderNumber);
  238. }catch (Exception e){
  239. e.printStackTrace();
  240. System.out.println("查询物资失败,不检查是否装货,不影响后续执行");
  241. }
  242. //检查是否装货
  243. if(materials!=null && materials.size()>0){
  244. Map<String,Object> loadResultMap = tmstruckLoadResultMapper.getLoadResultMap(DataChange.dataToBigDecimal(mesMap.get("resultTotalId")));
  245. if(loadResultMap == null || (loadResultMap != null && loadResultMap.get("loadEndTime") == null)){
  246. throw new Exception("该车未扫装货,请提醒司机去补扫装货");
  247. }
  248. }
  249. }
  250. if(orderType == 23 || orderType == 24) {
  251. //查询卸货
  252. Map<String,Object> unloadMap = tmstruckLeaveFactoryResultMapper.getUnloadResult(DataChange.dataToBigDecimal(mesMap.get("orderId")));
  253. if (unloadMap == null || (unloadMap != null && unloadMap.get("resultEndTime") == null)) {
  254. throw new Exception("该车未扫卸货,请提醒司机去补扫卸货");
  255. }
  256. }
  257. if(orderType == 1 && "true".equals(tmstruckLeaveFactoryResultMapper.getPrintFlag())) {
  258. //如果是钢材订单,且打印送货单是必须打印,那么进这个方法
  259. Integer printNumber = tmstruckLeaveFactoryResultMapper.getPrintNumber(DataChange.dataToBigDecimal(mesMap.get("orderId")));
  260. if(printNumber == 0){
  261. throw new Exception("未打印送货单,请提醒司机去打印");
  262. }
  263. }
  264. map.putAll(mesMap);
  265. map.putAll(selectMap);
  266. map.remove("Sqe");
  267. map.put("orderNumber", orderNumber);
  268. BigDecimal orderId = DataChange.dataToBigDecimal(map.get("orderId"));
  269. i += updateLeaveResultByPDA(map); //更新出厂实绩
  270. //更新路段顺序号
  271. i += utilsService.updateOrderLineSequence(map);
  272. //判断是否抵达签收,然后根据各自类型不同情况判断是否需要关单
  273. Boolean isArrivalFlag = isArrivalType(""+orderType);
  274. //查询自提
  275. String isSelfMention = tmstruckLeaveFactoryResultMapper.getIsSelfMention(orderId);
  276. if(!isArrivalFlag || "是".equals(isSelfMention)){
  277. //不涉及抵达签收,或者自提,统一在此处直接关单
  278. i += utilsService.closeOrderNormally(map);
  279. }
  280. if(isArrivalFlag){
  281. //如果涉及抵达签收,则标记为允许
  282. utilsMapper.updateArrival(map);
  283. }
  284. switch (orderType){
  285. case 1:
  286. try {
  287. if(isSelfMention != null && isSelfMention.equals("是")) {
  288. break;
  289. }
  290. } catch (Exception e) {
  291. e.printStackTrace();
  292. }
  293. //查询该订单的出库单制作日期
  294. // try {
  295. // List<String> easPrimaryIds = tmstruckLeaveFactoryResultMapper.getEasPrimaryIds(orderNumber);
  296. // Map<String, Object> easPrimaryMap = new HashMap<>();
  297. // easPrimaryMap.put("easPrimaryList",easPrimaryIds);
  298. // amsFeign.getMakeOrderDate(easPrimaryMap);
  299. // } catch (Exception e) {
  300. // e.printStackTrace();
  301. // }
  302. //判断该订单是不是异地库
  303. try {
  304. String addressPlace = tmstruckLeaveFactoryResultMapper.getAddressPlace(orderId);
  305. if (addressPlace != null && addressPlace.contains("城嘉库")) {
  306. List<Map<String,Object>> data =getOffSiteWarehouse(orderNumber);
  307. //调用城嘉库登录接口获取token
  308. String token = DagonloginChenJiaku();
  309. if (token != null) {
  310. for (Map<String,Object> map1:data) {
  311. map1.put("token", token);
  312. //接口发送日期
  313. map1.put("sendTime",new Date());
  314. ///调用城嘉库推送接口
  315. sendMesToChengJia(map1);
  316. }
  317. } else {
  318. System.out.println("登录城嘉库失败");
  319. }
  320. }else if(addressPlace!=null && addressPlace.contains("果园港")){
  321. //果园库
  322. List<Map<String,Object>> data =getOffSiteWarehouse(orderNumber);
  323. Map<String,Object> details=new HashMap<>();
  324. DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  325. for(Map<String,Object> temp:data){
  326. temp.put("resultOutGateTime",format.format((Date)(temp.get("outGateTime"))));
  327. temp.put("orderIssueTime",format.format((Date)(temp.get("orderIssueTime"))));
  328. temp.remove("outGateTime");
  329. temp.put("orderWagonNo",temp.get("capacityNo"));
  330. }
  331. //发送时间
  332. details.put("sendTime",format.format(new Date()));
  333. //系统代码
  334. details.put("sysCode", "DGXT");
  335. //仓库代码
  336. details.put("warehouseCode", "LJJT");
  337. //运输方式
  338. details.put("transportType", "汽运");
  339. //详细数据
  340. details.put("details", data);
  341. //推送数据
  342. sendMesToGuoyuan(details);
  343. }
  344. } catch (IOException e) {
  345. e.printStackTrace();
  346. }
  347. try {
  348. //发送短信
  349. Map<String,Object> messageMap = tmstruckLeaveFactoryResultMapper.getMessageMap(orderId);
  350. if(messageMap.get("saleOrderConsigneeTEL") != null){
  351. String capacityNum = (String) messageMap.get("capacityNumber");
  352. String mobile = (String)messageMap.get("saleOrderConsigneeTEL");
  353. tmstruckSmsRusultService.generaSendMessage(mobile,capacityNum,orderId);
  354. }
  355. // 调用结算
  356. }catch (Exception ex){
  357. System.out.println(ex.getMessage());
  358. }
  359. //销售厂外监控
  360. try {
  361. Map<String, Object> parem = getTruckFactoryResult(orderNumber);
  362. parem.put("turnOf","0");
  363. otmsFeign.createTotalResult(parem);
  364. } catch (Exception e) {
  365. e.printStackTrace();
  366. }
  367. try {
  368. System.out.println(orderId + "生成结算数据");
  369. bmsTruckFeign.addDetailsOrder(orderId);
  370. } catch (Exception e) {
  371. e.printStackTrace();
  372. }
  373. break;
  374. case 2:
  375. case 3:
  376. //查询司机是否已确认订单 如果订单未确认 则不允许出厂
  377. Integer driverConfirmation = utilsMapper.getDriverConfirmation(orderId);
  378. if(driverConfirmation == null){
  379. throw new Exception("请提醒司机确认订单!");
  380. }
  381. // i += utilsService.closeOrderNormally(map);
  382. // 判断是否要自动派单
  383. Map<String,Object> mapValue = omsFeign.getSaleAllMessages(orderId.intValue());
  384. Object closeStatus = mapValue.get("closeStatus");
  385. if (closeStatus != null && DataChange.dataToBigDecimal(closeStatus).intValue() == 0) {
  386. amsFeign.dispatchTruckOrderByCarrier(mapValue);
  387. }
  388. try {
  389. bmsTruckFeign.addDetailsOrder(orderId);
  390. } catch (Exception e) {
  391. e.printStackTrace();
  392. }
  393. break;
  394. case 4:
  395. // i += utilsService.closeOrderNormally(map);
  396. break;
  397. case 5:
  398. case 6:
  399. case 7:
  400. case 8:
  401. //判断出厂路段顺序号是否为最后一个 采购订单关闭订单
  402. // i += utilsService.closeOrderNormally(map);
  403. //查询是否为一车多趟采购订单类型
  404. Integer isMoreTripsStatus = tmstruckLeaveFactoryResultMapper.getIsMoreTripsStatus(DataChange.dataToBigDecimal(map.get("orderId")));
  405. if(isMoreTripsStatus != null && isMoreTripsStatus == 1){
  406. //如果是一车多趟 则重新下一个运输订单
  407. omsFeign.addNewTransportOrder(orderId.intValue());
  408. }
  409. break;
  410. case 9:
  411. case 17:
  412. case 18:
  413. //判断出厂路段顺序号是否为最后一个 采购订单关闭订单
  414. // i += utilsService.closeOrderNormally(map);
  415. break;
  416. case 10:
  417. case 20:
  418. //生成新的采购内转运输订单
  419. //判断出厂路段顺序号是否为最后一个 采购订单关闭订单
  420. // i += utilsService.closeOrderNormally(map);
  421. //根据运输订单ID查询路段顺序号
  422. Integer orderStatus = tmstruckLeaveFactoryResultMapper.getOrderStatus(orderId);
  423. if(orderStatus == 2){
  424. //判断是否满足条件--计划是否被启用
  425. Integer j = tmstruckLeaveFactoryResultMapper.getPlanEnable(orderId);
  426. if(j == 1){
  427. //生成新的运输订单
  428. omsFeign.addPurInwardOrder(orderId);
  429. }
  430. try {
  431. bmsTruckFeign.addInwardDetailsOrder(map);
  432. } catch (Exception e) {
  433. e.printStackTrace();
  434. }
  435. }
  436. break;
  437. case 23:
  438. case 24:
  439. // i += utilsService.closeOrderNormally(map);
  440. omsFeign.addPurInwardOrder(orderId);
  441. try {
  442. bmsTruckFeign.addInwardDetailsOrder(map);
  443. } catch (Exception e) {
  444. e.printStackTrace();
  445. }
  446. break;
  447. case 12:
  448. case 13:
  449. case 19:
  450. case 14:
  451. //关闭当前订单
  452. // i += utilsService.closeOrderNormally(map);
  453. //生成新的零星订单
  454. omsFeign.pushMessageToDriver(map);
  455. break;
  456. }
  457. utilsService.pushMesToWebsocket((String) map.get("capacityNumber"), "出厂");
  458. return i;
  459. }
  460. /**
  461. * 内转订单类型
  462. * @Author TXF
  463. * @Date 2022/3/18 18:03
  464. * @param map
  465. * @param mesMap
  466. * @param capacityNumber
  467. * @return
  468. **/
  469. public int orderType11Use(Map<String, Object> map, Map<String, Object> mesMap, String capacityNumber){
  470. //内转订单类型 没有生成实绩 直接新增
  471. int sqe = DataChange.dataToBigDecimal(mesMap.get("Sqe")).intValue();
  472. sqe = sqe + 1;
  473. map.put("resultId",tmstruckLeaveFactoryResultMapper.selectMaxId());//出厂实绩ID
  474. map.put("Sqe",sqe);//查询路段顺序号+1
  475. map.put(("totalId"),mesMap.get("totalId"));
  476. tmstruckLeaveFactoryResultMapper.insertSelective(generateLeaveFactory(map));
  477. //更新路段顺序号
  478. mesMap.put("orderLineSequence",sqe);
  479. utilsService.updateOrderLineSqeByOrderNumber(mesMap);
  480. utilsService.pushMesToWebsocket(capacityNumber, "出厂");
  481. return 1;
  482. }
  483. //内转订单类型新增出厂实绩
  484. private TmstruckLeaveFactoryResult generateLeaveFactory(Map<String, Object> map) {
  485. TmstruckLeaveFactoryResult tmstruckLeaveFactoryResult = new TmstruckLeaveFactoryResult();
  486. //获取出厂实绩ID
  487. tmstruckLeaveFactoryResult.setResultId(DataChange.dataToBigDecimal(map.get("resultId")));
  488. //添加门岗
  489. tmstruckLeaveFactoryResult.setGatepostId(DataChange.dataToBigDecimal(map.get("gatepostId")));
  490. //添加路段顺序号
  491. tmstruckLeaveFactoryResult.setSegmentSqe(DataChange.dataToBigDecimal(map.get("Sqe")));
  492. //添加出厂时间
  493. tmstruckLeaveFactoryResult.setResultOutGateTime(new Date());
  494. tmstruckLeaveFactoryResult.setInsertTime(new Date());
  495. tmstruckLeaveFactoryResult.setResultOutMode("手动抬杆");
  496. tmstruckLeaveFactoryResult.setInsertUsername("admin");
  497. if(map.get("Sqe") !=null){
  498. tmstruckLeaveFactoryResult.setSegmentSqe(DataChange.dataToBigDecimal(map.get("Sqe")));
  499. }
  500. if(map.get("totalId") !=null){
  501. tmstruckLeaveFactoryResult.setResultTotalId(DataChange.dataToBigDecimal(map.get("totalId")));
  502. }
  503. return tmstruckLeaveFactoryResult;
  504. }
  505. /**
  506. * 更新出厂实绩
  507. * @param mapValue {运输订单号:orderNumber 门岗名称:gatepostName}
  508. * @return
  509. */
  510. public int updateLeaveResultByPDA(Map<String, Object> mapValue){
  511. TmstruckLeaveFactoryResult tmstruckLeaveFactoryResult = new TmstruckLeaveFactoryResult();
  512. tmstruckLeaveFactoryResult.setResultId(DataChange.dataToBigDecimal(mapValue.get("resultId")));
  513. //通过门岗名称获取门岗ID
  514. if(mapValue.get("gatepostId") == null){
  515. Integer gatepostId = tmstruckEnfactoryResultMapper.selectGatepostIdByGatepostName((String) mapValue.get("gatepostName"));
  516. if(gatepostId != null){
  517. tmstruckLeaveFactoryResult.setGatepostId(new BigDecimal(gatepostId));
  518. }
  519. }else {
  520. tmstruckLeaveFactoryResult.setGatepostId(DataChange.dataToBigDecimal(mapValue.get("gatepostId")));
  521. }
  522. //设置常规字段 添加 出厂时间 和 出厂方式
  523. tmstruckLeaveFactoryResult.setResultOutGateTime(new Date());
  524. tmstruckLeaveFactoryResult.setResultOutMode("手动抬杠");
  525. tmstruckLeaveFactoryResult.setInsertUsername("admin");
  526. tmstruckLeaveFactoryResult.setInsertTime(new Date());
  527. tmstruckLeaveFactoryResultMapper.updateResultTotalOutStatus(DataChange.dataToBigDecimal(mapValue.get("resultTotalId")));
  528. try {
  529. DilCapacityTimes dilCapacityTimes = new DilCapacityTimes();
  530. dilCapacityTimes.setId(dilCapacityTimesMapper.getDilCapacityTimesId());
  531. dilCapacityTimes.setTimesCapacityNumber(mapValue.get("capacityNumber").toString());
  532. dilCapacityTimes.setTimesValue(new Date());
  533. dilCapacityTimes.setTimesType(new BigDecimal(2));
  534. dilCapacityTimesMapper.insertSelective(dilCapacityTimes);
  535. } catch (Exception e) {
  536. e.printStackTrace();
  537. }
  538. return tmstruckLeaveFactoryResultMapper.updateByPrimaryKeySelective(tmstruckLeaveFactoryResult);
  539. }
  540. /**
  541. * 通过总实绩Id修改出厂实绩出厂门岗
  542. * @param resultTotalId
  543. * @param gatepostId
  544. * @return
  545. */
  546. public int updateLeaveFactoryGatepostId(Integer resultTotalId, Integer gatepostId){
  547. TmstruckLeaveFactoryResult tmstruckLeaveFactoryResult = new TmstruckLeaveFactoryResult();
  548. //通过总实绩ID查询出产实绩
  549. BigDecimal resultId = tmstruckLeaveFactoryResultMapper.getResultIdByTotalId(resultTotalId);
  550. tmstruckLeaveFactoryResult.setResultId(resultId);
  551. tmstruckLeaveFactoryResult.setGatepostId(new BigDecimal(gatepostId));
  552. return tmstruckLeaveFactoryResultMapper.updateByPrimaryKeySelective(tmstruckLeaveFactoryResult);
  553. }
  554. /**
  555. * 查询零星物资出厂列表
  556. * @param mapValue
  557. * @return
  558. */
  559. @Override
  560. public List<Map<String, Object>> getSporadicLeaveFactory(Map<String, Object> mapValue) {
  561. return tmstruckLeaveFactoryResultMapper.getSporadicLeaveFactory(mapValue);
  562. }
  563. public List<Map<String,Object>> getOffSiteWarehouse(String orderNumber) {
  564. List<Map<String, Object>> mapList = tmstruckLeaveFactoryResultMapper.getOffSiteWarehouse(orderNumber);
  565. for (Map<String,Object> map1:mapList){
  566. String materialName =(String) map1.get("materialName");
  567. if (materialName.contains("盘螺")){
  568. map1.put("materialType","盘螺");
  569. }else if (materialName.contains("盘圆")||materialName.contains("盘元")){
  570. map1.put("materialType","盘圆");
  571. }else if (materialName.contains("螺纹")){
  572. map1.put("materialType","螺纹钢");
  573. }
  574. }
  575. return mapList;
  576. }
  577. /**
  578. * 访问城嘉库接口方法
  579. * @param
  580. * @return
  581. */
  582. public String DagonloginChenJiaku() throws IOException {
  583. Map<String, String> reqMap = new HashMap<>();
  584. reqMap.put("username","dagon");
  585. reqMap.put("password","147258");
  586. // JSONObject jsonObject = new JSONObject();
  587. // jsonObject.putAll(reqMap);
  588. // Map<String,Object> map=new HashMap<>();
  589. // map.put("username","dagon");
  590. // map.put("password","147258");
  591. // jsonObject.putAll(map);
  592. // jsonObject.put("username","dagon");
  593. // jsonObject.put("password","147258");
  594. String jsonData = null;
  595. jsonData = getRequestUtils.doPost(chengJiaLoginUrl,reqMap);
  596. if(!"null".equals(jsonData)){
  597. System.out.println(jsonData);
  598. HashMap hashMap = JSON.parseObject(jsonData, HashMap.class);
  599. BigDecimal code = DataChange.dataToBigDecimal( hashMap.get("code"));
  600. System.out.println(hashMap.get("message"));
  601. if(200==code.intValue()){
  602. Map<String,Object> result =(Map<String,Object>) hashMap.get("result");
  603. String token =(String) result.get("token");
  604. return token;
  605. }else {
  606. System.out.println("推送数据失败"+hashMap.get("message"));
  607. }
  608. }
  609. return null;
  610. // String body = restTemplate.postForEntity(chengJiaLoginUrl, reqMap, String.class).getBody();
  611. // System.out.println(body);
  612. // return body;
  613. }
  614. /**
  615. * 推送数据给城嘉库
  616. */
  617. public int sendMesToChengJia(Map<String, Object> map){
  618. String token =(String) map.get("token");
  619. Map<String,Object> jsonObject = new HashMap<>();
  620. jsonObject.remove(token);
  621. jsonObject.putAll(map);
  622. //写入文件
  623. try{
  624. new Thread( new Runnable() {
  625. public void run(){
  626. try {
  627. newFileTool.newFile("发送报文:"+chengJiaSendUrl+":"+jsonObject,"城嘉库报文");
  628. } catch (IOException e) {
  629. e.printStackTrace();
  630. }
  631. }
  632. }).start();
  633. }catch (Exception e) {
  634. e.printStackTrace();
  635. }
  636. String jsonData = null;
  637. jsonData = getRequestUtils.doPostAddHeader(chengJiaSendUrl, jsonObject,token);
  638. //写入文件
  639. try{
  640. String finalJsonData = jsonData;
  641. new Thread(new Runnable() {
  642. public void run(){
  643. try {
  644. newFileTool.newFile("接收报文:"+chengJiaSendUrl+":"+ finalJsonData,"城嘉库报文");
  645. } catch (IOException e) {
  646. e.printStackTrace();
  647. }
  648. }
  649. }).start();
  650. }catch (Exception e) {
  651. e.printStackTrace();
  652. }
  653. if(!"null".equals(jsonData)){
  654. System.out.println(jsonData);
  655. HashMap hashMap = JSON.parseObject(jsonData, HashMap.class);
  656. BigDecimal code = DataChange.dataToBigDecimal(hashMap.get("code"));
  657. System.out.println(hashMap.get("message"));
  658. if(code.intValue()==200){
  659. return 1;
  660. }else {
  661. System.out.println("推送数据失败"+hashMap.get("message"));
  662. }
  663. }
  664. return 0;
  665. }
  666. /**
  667. * 访问重庆果园库接口方法
  668. * @param map
  669. * @return
  670. */
  671. public int sendMesToGuoyuan(Map<String, Object> map){
  672. JSONObject jsonObject = new JSONObject();
  673. jsonObject.putAll(map);
  674. String jsonData = null;
  675. //写入文件
  676. try{
  677. new Thread( new Runnable() {
  678. public void run(){
  679. try {
  680. newFileTool.newFile("发送报文:"+guoYuanUrl+":"+jsonObject.toJSONString(),"果园库报文");
  681. } catch (IOException e) {
  682. e.printStackTrace();
  683. }
  684. }
  685. }).start();
  686. }catch (Exception e) {
  687. e.printStackTrace();
  688. }
  689. try {
  690. jsonData = HTTPRequestUtils.send(guoYuanUrl, jsonObject, "utf-8");
  691. } catch (IOException e) {
  692. e.printStackTrace();
  693. }
  694. //写入文件
  695. try{
  696. String finalJsonData = jsonData;
  697. new Thread(new Runnable() {
  698. public void run(){
  699. try {
  700. newFileTool.newFile("接收报文:"+guoYuanUrl+":"+ finalJsonData,"果园库报文");
  701. } catch (IOException e) {
  702. e.printStackTrace();
  703. }
  704. }
  705. }).start();
  706. }catch (Exception e) {
  707. e.printStackTrace();
  708. }
  709. if(!"null".equals(jsonData)){
  710. System.out.println(jsonData);
  711. try{
  712. HashMap hashMap = JSON.parseObject(jsonData, HashMap.class);
  713. BigDecimal code =DataChange.dataToBigDecimal(hashMap.get("code"));
  714. System.out.println(hashMap.get("message"));
  715. if(code.intValue()==200){
  716. return 1;
  717. }else {
  718. System.out.println("推送数据失败"+hashMap.get("message"));
  719. }
  720. }catch (Exception e){
  721. }
  722. }
  723. return 0;
  724. }
  725. /**
  726. * 自动补扫出厂
  727. */
  728. @Scheduled(fixedRate = 1000*60*60*3)
  729. public void autoLeaveFactory(){
  730. Date date=new Date();
  731. Calendar calendar=Calendar.getInstance();
  732. calendar.setTime(date);
  733. //非钢材,出净重24h后自动出厂,并关单
  734. calendar.add(Calendar.HOUR_OF_DAY,-48);
  735. date=calendar.getTime();
  736. Map<String,Object> map = new HashMap<>();
  737. map.put("nowDate",date);
  738. List<Map<String,Object>> list = tmstruckLeaveFactoryResultMapper.getWeightResultNetted(map);
  739. //钢材,打印送货单3小时后补扫出厂
  740. calendar.setTime(new Date());
  741. calendar.add(Calendar.HOUR_OF_DAY,-3);
  742. date=calendar.getTime();
  743. map.put("nowDate",date);
  744. if(list != null){
  745. list.addAll(tmstruckLeaveFactoryResultMapper.getSteelForLeave(map));
  746. }else{
  747. list = tmstruckLeaveFactoryResultMapper.getSteelForLeave(map);
  748. }
  749. for(Map<String,Object> item:list){
  750. try{
  751. System.out.println(item);
  752. leaveFactoryByPDA(item);
  753. }catch (Exception e){
  754. e.printStackTrace();
  755. if(DataChange.dataToBigDecimal(item.get("orderType")).compareTo(new BigDecimal(1)) != 0) {
  756. tmstruckLeaveFactoryResultMapper.updateOrderStatus(DataChange.dataToBigDecimal(item.get("orderId")));
  757. }
  758. }
  759. }
  760. }
  761. /**
  762. * 校验是否允许抵达
  763. * @param orderType
  764. * @return
  765. */
  766. Boolean isArrivalType(String orderType){
  767. try{
  768. String[] arr = tmstruckLeaveFactoryResultMapper.getVersionValue(10).split(",");
  769. if(arr==null || arr.length<=0){
  770. throw new Exception("数据库数据异常,类型字符串不存在!");
  771. }
  772. for(String temp:arr){
  773. if(temp.equals(orderType)){
  774. return true;
  775. }
  776. }
  777. }catch (Exception e){
  778. e.printStackTrace();
  779. }
  780. return false;
  781. }
  782. }