TmstruckWeightResultServiceImpl.java 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892
  1. package com.steerinfo.dil.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.steerinfo.dil.feign.OmsFeign;
  4. import com.steerinfo.dil.feign.TmstruckFeign;
  5. import com.steerinfo.dil.mapper.*;
  6. import com.steerinfo.dil.model.TmstruckReceiveResult;
  7. import com.steerinfo.dil.model.TmstruckWeightResult;
  8. import com.steerinfo.dil.service.ITmstruckWeightResultService;
  9. import com.steerinfo.dil.util.DataChange;
  10. import com.steerinfo.dil.util.newFileTool;
  11. import org.apache.commons.lang.time.FastDateFormat;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.scripting.groovy.GroovyScriptEvaluator;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import java.io.IOException;
  19. import java.text.ParseException;
  20. import java.text.SimpleDateFormat;
  21. import java.util.*;
  22. import java.math.BigDecimal;
  23. /**
  24. * TmstruckWeightResult服务实现:
  25. * @author generator
  26. * @version 1.0-SNAPSHORT 2021-10-25 02:28
  27. * 类描述
  28. * 修订历史:
  29. * 日期:2021-10-25
  30. * 作者:generator
  31. * 参考:
  32. * 描述:TmstruckWeightResult服务实现
  33. * @see null
  34. * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
  35. */
  36. @Service(value = "tmstruckWeightResultService")
  37. public class TmstruckWeightResultServiceImpl implements ITmstruckWeightResultService {
  38. @Autowired
  39. KDWebServiceServiceImpl KDWebServiceServiceImpl;
  40. @Autowired
  41. TmstruckWeightResultMapper tmstruckWeightResultMapper;
  42. @Autowired
  43. UtilsServiceImpl utilsService;
  44. @Autowired
  45. UtilsMapper utilsMapper;
  46. @Autowired
  47. OmsFeign omsFeign;
  48. @Autowired
  49. TmstruckFeign tmstruckFeign;
  50. @Autowired
  51. TmstruckReceiveResultMapper tmstruckReceiveResultMapper;
  52. @Autowired
  53. TmstrainWeightResultServiceImpl tmstrainWeightResultService;
  54. //属于采购订单的订单类型(先计毛后计皮)
  55. final private List<Integer> judgeOrderTypeList = Arrays.asList(5, 6, 7, 8, 9, 12, 15, 17, 18,23,24,19);
  56. //老厂区需要给金蝶回传的数据订单类型
  57. final private List<Integer> judgeToKDTypeList = Arrays.asList(5,6,7,8,17,18,23,20);
  58. Logger logger = LoggerFactory.getLogger(getClass());
  59. /**
  60. * 接收达钢计量实绩信息
  61. * "orderNumber":"WYSDD2021091000000002",
  62. * "resultTareCalculateNumber":"1号汽车衡",
  63. * "resultCrossCalculateNumber":"1号汽车衡",
  64. * "resultTareWeight":40.00,
  65. * "resultCrossWeight":40.00,
  66. * "resultNetWeight":0,
  67. * "resultTareWeightTime":"2021-09-10 09:05:22",
  68. * "resultCrossWeightTime":"2021-09-10 09:05:22",
  69. * "resultPoundNo":"Bd123456780",
  70. * "materialId":40
  71. * @param mapList
  72. * @return
  73. */
  74. @Override
  75. @Transactional
  76. public String receiveTmsTruckWeightResultByDaGang(List<Map<String, Object>> mapList){
  77. //遍历列表
  78. StringBuilder sb = new StringBuilder();
  79. for (Map<String, Object> map : mapList) {
  80. sb.append(" ");
  81. String resultTareCalculateNumber = (String) map.get("resultTareCalculateNumber");
  82. //如果计量衡名字中含有铁专线 则代表是轨道衡 走轨道衡路线
  83. if(resultTareCalculateNumber.contains("铁专线")){
  84. sb.append(tmstrainWeightResultService.addTrainWeightResult(map));
  85. }else {
  86. //走汽车衡
  87. map.put("needCheckToKD", "1"); //老厂区专属变量 用于区分新、老厂区 老厂区部分秤需要给金蝶传输数据
  88. sb.append(addTruckWeightResult(map));
  89. }
  90. }
  91. return sb.toString();
  92. }
  93. /*
  94. * 接收达兴计量实绩
  95. * @Author TXF
  96. * @Date 2022/2/9 14:57
  97. * @param mapList
  98. * @return
  99. **/
  100. @Transactional
  101. @Override
  102. public String receiveTmsTruckWeightResultByDaXing(List<Map<String, Object>> mapList) {
  103. StringBuilder sb = new StringBuilder();
  104. //遍历列表
  105. for (Map<String, Object> map : mapList) {
  106. sb.append(addTruckWeightResult(map));
  107. }
  108. return sb.toString();
  109. }
  110. /**
  111. * 添加汽车衡计量实绩
  112. * @param map
  113. * @return
  114. */
  115. public String addTruckWeightResult(Map<String, Object> map) {
  116. System.out.println("---------------------------------" + new Date() + "新接收到的计量实绩" + "---------------------------------");
  117. JSONObject jsonObject = new JSONObject(map);
  118. logger.info("计量信息:{}", jsonObject.toString());
  119. System.out.println("---------------------------------" + new Date() + "新接收到的计量实绩" + "---------------------------------");
  120. try{
  121. new Thread( new Runnable() {
  122. public void run(){
  123. try {
  124. newFileTool.newFile(jsonObject.toString(),"计量传输物流实绩");
  125. } catch (IOException e) {
  126. e.printStackTrace();
  127. }
  128. }
  129. }).start();
  130. }catch (Exception e) {
  131. e.printStackTrace();
  132. }
  133. if(map.get("flag") != null && map.get("flag").equals("GCXS")){
  134. System.out.println("这是钢材销售");
  135. TmstruckWeightResult tmstruckWeightResult = null;
  136. try {
  137. tmstruckWeightResult = generateSteelWeightResult(map);
  138. tmstruckWeightResultMapper.updateByPrimaryKeySelective(tmstruckWeightResult);
  139. utilsService.pushMesToWebsocket((String) map.get("carNo"), "计量");
  140. return map.get("carNo") + "传输成功";
  141. } catch (Exception e) {
  142. System.out.println(map.get("carNo") + e.getMessage() + "传输失败");
  143. return map.get("carNo") + e.getMessage() + "传输失败";
  144. }
  145. }
  146. //首先通过运输订单号查询订单类型
  147. Map<String, Object> oneMap = utilsMapper.getOrderTypeByOrderNumber((String) map.get("orderNumber")); //用于判断订单类型
  148. if(oneMap == null){
  149. return map.get("orderNumber") + "系统无此订单";
  150. }
  151. int orderType= DataChange.dataToBigDecimal(oneMap.get("orderType")).intValue();
  152. if(orderType == 11 || orderType == 15 || orderType == 16){
  153. return insertWeightResultBy11(map, oneMap);
  154. }
  155. //为1的时候计量重新更新单据
  156. if(DataChange.dataToBigDecimal(map.get("WLReUpdateFlag")).intValue() == 1){
  157. return linkUpdateAPO(map, orderType);
  158. }
  159. //通过运输订单号查询计量实绩Id
  160. Map<String, Object> stringObjectMap = tmstruckWeightResultMapper.selectWeightIdByOrderId(map);
  161. if(stringObjectMap == null){
  162. //通过传来的运输订单号 与 物资ID查询计重实绩ID
  163. stringObjectMap = tmstruckWeightResultMapper.selectTotalIdByOrderNo(map);
  164. if(stringObjectMap == null){
  165. return map.get("orderNumber") + "没有此订单信息或物资信息(" + map.get("materialId") + ")错误";
  166. }
  167. }
  168. map.putAll(stringObjectMap);
  169. TmstruckWeightResult tmstruckWeightResult = null;
  170. try {
  171. tmstruckWeightResult = generateWeightResult(map);
  172. } catch (Exception e) {
  173. return e.getMessage();
  174. }
  175. //如果含有这个变量则代表是老区订单需要判断是否回传给金蝶
  176. if(map.get("needCheckToKD") != null){
  177. if(map.get("resultNetWeight") != null){
  178. Object resultCrossWeightTime = map.get("resultCrossWeightTime");
  179. if (judgeToKDTypeList.contains(orderType) && resultCrossWeightTime != null && !"".equals(resultCrossWeightTime)) {
  180. String resultNetWeight = String.valueOf(map.get("resultNetWeight")); //如果净重不为空 或者净重不为0
  181. if (!"null".equals(resultNetWeight) && !"".equals(resultNetWeight) && !"0".equals(resultNetWeight)) {
  182. //回传数据给金蝶方法
  183. sendMesToKD(map, orderType);
  184. }
  185. }
  186. }
  187. }
  188. tmstruckWeightResultMapper.updateByPrimaryKeySelective(tmstruckWeightResult);
  189. //如果订单类型是零星订单 需要查询一下是否还有未计量物资
  190. if(orderType == 12 || orderType == 13){
  191. dealWithLxOrder(map, stringObjectMap);
  192. }
  193. //推送数据
  194. try {
  195. utilsService.pushMesToWebsocket((String) oneMap.get("capacityNumber"), "计量");
  196. } catch (Exception e) {
  197. e.printStackTrace();
  198. }
  199. return map.get("orderNumber") + "成功";
  200. }
  201. private TmstruckWeightResult generateSteelWeightResult(Map<String, Object> map) throws Exception {
  202. TmstruckWeightResult tmstruckWeightResult = new TmstruckWeightResult();
  203. //该数据为不走物流扫码的数据
  204. //1.通过车号去寻找正在作业的5的运输订单号
  205. String carNo = (String) map.get("carNo");
  206. Map<String,Object> orderMes = tmstruckWeightResultMapper.getOrderMes(carNo);
  207. if (orderMes == null){
  208. throw new Exception("该车没有正在运行中的信息");
  209. }
  210. map.putAll(orderMes);
  211. tmstruckWeightResult.setId(DataChange.dataToBigDecimal(map.get("weightTaskResultId")));
  212. int orderType = DataChange.dataToBigDecimal(orderMes.get("orderTypee")).intValue();
  213. //磅单号
  214. tmstruckWeightResult.setResultPoundNo((String) map.get("resultPoundNo"));
  215. String resultCrossWeightTime = (String) map.get("resultCrossWeightTime");
  216. if(map.get("orderNumber") != null) {
  217. tmstruckWeightResult.setInsertUpdateRemark((String)map.get("orderNumber"));
  218. }
  219. //根据传输过来的物资名称和规格型号
  220. Object resultNetWeight = map.get("resultNetWeight");
  221. if(resultNetWeight != null && !"".equals(resultNetWeight)) {
  222. BigDecimal materialId = tmstruckWeightResultMapper.getMaterialId(map);
  223. if(materialId == null){
  224. throw new Exception("系统找不到该物资");
  225. }
  226. map.put("materialId",materialId);
  227. //判断此物资是不是已经有净重了,如果有抛出异常
  228. //int netWeightCount = tmstruckWeightResultMapper.getHaveNetWeightByMaterial(map);
  229. //if(netWeightCount != 0){
  230. // throw new Exception("该物资已有净重,不能再次录入");
  231. //}
  232. tmstruckWeightResult.setMaterialId(materialId);
  233. tmstruckWeightResult.setMaterialNum(DataChange.dataToBigDecimal(map.get("goodNum")));
  234. BigDecimal materialNum = DataChange.dataToBigDecimal(map.get("goodNum"));
  235. //通过订单ID和物资id,查询当单个物资的理重方便后续计算
  236. Map<String, Object> saleMaterialMes = tmstruckWeightResultMapper.getSaleOrderMaterialNum(map);
  237. if(saleMaterialMes == null) {
  238. throw new Exception("该订单没有该物资分录");
  239. }
  240. BigDecimal saleMaterialId = DataChange.dataToBigDecimal(saleMaterialMes.get("saleMaterialId"));//销售订单存放物资子表id
  241. BigDecimal orderMaterialId = DataChange.dataToBigDecimal(saleMaterialMes.get("orderMaterialId"));
  242. BigDecimal materialWeight = DataChange.dataToBigDecimal(saleMaterialMes.get("materialWeight"));//旧总理重
  243. tmstruckWeightResult.setSaleMaterialId(saleMaterialId);
  244. map.put("orderMaterialId",orderMaterialId);
  245. map.put("saleMaterialId",saleMaterialId);
  246. BigDecimal newWeight = null;
  247. if (materialWeight.intValue() != 0) { //如果总重量不为0,才进行重量更新
  248. BigDecimal orderMaterialNumber = DataChange.dataToBigDecimal(saleMaterialMes.get("orderMaterialNumber"));//旧件数
  249. BigDecimal theoreticalWeight = materialWeight.multiply(materialNum);
  250. newWeight = theoreticalWeight.divide(orderMaterialNumber,3, 4);//得到现有理重
  251. map.put("newWeight",newWeight);
  252. //更新运输订单物资子表的件数和理论重量
  253. }
  254. tmstruckWeightResultMapper.updateOrderMaterial(map);
  255. tmstruckWeightResultMapper.updateSaleMaterialId(saleMaterialId,materialNum,newWeight);
  256. }else{
  257. //根据运单id查询其中一个物资id,确保报表能有数据
  258. BigDecimal materialId = tmstruckWeightResultMapper.getMaterialIdByOrderId(DataChange.dataToBigDecimal(map.get("orderId")));
  259. if (materialId != null) {
  260. tmstruckWeightResult.setMaterialId(materialId);
  261. }
  262. }
  263. addWeightResult(tmstruckWeightResult, map); //添加计量实绩数据
  264. // 更新订单中路段顺序号,如果毛重时间为空则为计皮:也就是销售第一次计皮,反之有毛重时间则为计毛
  265. if(resultCrossWeightTime == null || resultCrossWeightTime.length() == 0){
  266. map.put("segmentSqe", map.get("tareSegmentSqe")); //皮重路段顺序
  267. }else{
  268. map.put("segmentSqe", map.get("grossSegmentSqe")); //毛重路段顺序
  269. }
  270. if(orderType == 1 || orderType == 4){
  271. //如果是钢材订单,获取下一个还没计量的实绩 将毛重数据作为下一个计量实绩的皮重
  272. //并且是第二次传入重量才执行
  273. List<Map<String, Object>> steelMapList = tmstruckWeightResultMapper.getNoNetWeightResultId(DataChange.dataToBigDecimal(map.get("resultTotalId")));
  274. if(steelMapList.size() >= 2){ //当前更新还未提交所以如果是拼装需要查询两个出来 以第二个为准
  275. Map<String, Object> steelMap = steelMapList.get(1);
  276. if(resultNetWeight != null && !"".equals(resultNetWeight)){
  277. updateSteelAssemble(map, steelMap); //更新下一拼实绩
  278. map.put("segmentSqe", steelMap.get("tareSegmentSqe")); // 修改路段顺序号直接到下一皮重路段顺序
  279. }
  280. }
  281. }
  282. utilsService.updateOrderLineSequence(map);
  283. return tmstruckWeightResult;
  284. }
  285. /**
  286. * 生成汽运计量实体类
  287. * @Author TXF
  288. * @Date 2022/1/5 16:41
  289. * @param map
  290. * @return
  291. **/
  292. public TmstruckWeightResult generateWeightResult(Map<String, Object> map) throws Exception {
  293. TmstruckWeightResult tmstruckWeightResult = new TmstruckWeightResult();
  294. tmstruckWeightResult.setId(DataChange.dataToBigDecimal(map.get("weightTaskResultId")));
  295. int orderType = DataChange.dataToBigDecimal(map.get("orderTypee")).intValue();
  296. //磅单号
  297. tmstruckWeightResult.setResultPoundNo((String) map.get("resultPoundNo"));
  298. String resultCrossWeightTime = (String) map.get("resultCrossWeightTime");
  299. tmstruckWeightResult.setMaterialId(DataChange.dataToBigDecimal(map.get("materialId")));
  300. //如果是采购订单 先计毛再计皮
  301. if(judgeOrderTypeList.contains(orderType)){
  302. //如果毛重数据为空 则是第一次计量为毛重 此时第一次计量时间放皮重时间里面
  303. if(resultCrossWeightTime == null || resultCrossWeightTime.length() == 0){
  304. addMaoWeightResult(tmstruckWeightResult, map);
  305. //更新订单中路段顺序号
  306. map.put("segmentSqe", map.get("grossSegmentSqe")); //毛重路段顺序
  307. utilsService.updateOrderLineSequence(map);
  308. }else {
  309. addWeightResult(tmstruckWeightResult, map);
  310. //更新订单中路段顺序号
  311. map.put("segmentSqe", map.get("tareSegmentSqe")); //皮重路段顺序
  312. utilsService.updateOrderLineSequence(map);
  313. if (orderType==19){
  314. //获取第二个还未计量的物资将第一个物资的皮重作为第二个物资的毛重。
  315. List<Map<String, Object>> resultMapList = tmstruckWeightResultMapper.getNoNetWeightResultForSaleReturn(DataChange.dataToBigDecimal(map.get("resultTotalId")));
  316. if (resultMapList.size()>=2){//如果为多拼
  317. Map<String, Object> saleReturnMap = resultMapList.get(1);
  318. Object resultNetWeight = map.get("resultNetWeight");
  319. if(resultNetWeight != null && !"".equals(resultNetWeight)){
  320. updateSaleReturnAssemble(map, saleReturnMap); //更新下一拼实绩
  321. map.put("segmentSqe", saleReturnMap.get("tareSegmentSqe"));
  322. utilsService.updateOrderLineSequence(map);// 修改路段顺序号直接到下一皮重路段顺序
  323. }
  324. }
  325. }//添加计量实绩数据
  326. String orderNumber = (String) map.get("orderNumber");
  327. //如果是采购订单 计皮后自动完成签收
  328. //查询是此订单是否已签收过
  329. Integer check = utilsMapper.checkoutReceipt(orderNumber);
  330. if(check == null){
  331. autoReceipt(orderNumber, map.get("resultTareWeightTime"));
  332. }
  333. }
  334. }
  335. else if(orderType == 10 || orderType == 20 || orderType == 14){
  336. //查询还有几条没有净重的实绩
  337. Integer resultNum = tmstruckWeightResultMapper.selectNoNetWeightResult((String) map.get("orderNumber"));
  338. if(resultNum == 2){
  339. //如果有两条则是走先计皮后计毛顺序
  340. addWeightResult(tmstruckWeightResult, map); //添加计量实绩数据 (正常添加对应皮毛重方法)
  341. if(resultCrossWeightTime == null || resultCrossWeightTime.length() == 0){
  342. map.put("segmentSqe", map.get("tareSegmentSqe")); //皮重路段顺序
  343. }else{
  344. map.put("segmentSqe", map.get("grossSegmentSqe")); //毛重路段顺序
  345. }
  346. utilsService.updateOrderLineSequence(map);
  347. }else if(resultNum == 1){
  348. //只剩一条数据时则是计毛后计皮顺序
  349. //如果毛重数据为空 则是第一次计量为毛重 此时第一次计量时间放皮重时间里面
  350. if(resultCrossWeightTime == null || resultCrossWeightTime.length() == 0){
  351. addMaoWeightResult(tmstruckWeightResult, map);
  352. //更新订单中路段顺序号
  353. map.put("segmentSqe", map.get("grossSegmentSqe")); //毛重路段顺序
  354. utilsService.updateOrderLineSequence(map);
  355. }else {
  356. addWeightResult(tmstruckWeightResult, map); //添加计量实绩数据
  357. //更新订单中路段顺序号
  358. map.put("segmentSqe", map.get("tareSegmentSqe")); //皮重路段顺序
  359. utilsService.updateOrderLineSequence(map);
  360. String orderNumber = (String) map.get("orderNumber");
  361. //如果是采购订单 计皮后自动完成签收
  362. //查询是此订单是否已签收过
  363. Integer check = utilsMapper.checkoutReceipt(orderNumber);
  364. if(check == null){
  365. autoReceipt(orderNumber, map.get("resultTareWeightTime"));
  366. }
  367. if(orderType == 20){
  368. //此订单类型比较特殊 如果订单类型为20则需要回传金蝶
  369. sendMesToKD(map, orderType);
  370. }
  371. }
  372. }
  373. }
  374. else{
  375. addWeightResult(tmstruckWeightResult, map); //添加计量实绩数据
  376. // 更新订单中路段顺序号,如果毛重时间为空则为计皮:也就是销售第一次计皮,反之有毛重时间则为计毛
  377. if(resultCrossWeightTime == null || resultCrossWeightTime.length() == 0){
  378. map.put("segmentSqe", map.get("tareSegmentSqe")); //皮重路段顺序
  379. }else{
  380. map.put("segmentSqe", map.get("grossSegmentSqe")); //毛重路段顺序
  381. }
  382. if(orderType == 1 || orderType == 4){
  383. //如果是钢材订单,获取下一个还没计量的实绩 将毛重数据作为下一个计量实绩的皮重
  384. //并且是第二次传入重量才执行
  385. List<Map<String, Object>> steelMapList = tmstruckWeightResultMapper.getNoNetWeightResultId(DataChange.dataToBigDecimal(map.get("resultTotalId")));
  386. if(steelMapList.size() >= 2){ //当前更新还未提交所以如果是拼装需要查询两个出来 以第二个为准
  387. Map<String, Object> steelMap = steelMapList.get(1);
  388. Object resultNetWeight = map.get("resultNetWeight");
  389. if(resultNetWeight != null && !"".equals(resultNetWeight)){
  390. updateSteelAssemble(map, steelMap); //更新下一拼实绩
  391. map.put("segmentSqe", steelMap.get("tareSegmentSqe")); // 修改路段顺序号直接到下一皮重路段顺序
  392. }
  393. }
  394. }
  395. utilsService.updateOrderLineSequence(map);
  396. }
  397. return tmstruckWeightResult;
  398. }
  399. /**
  400. * 添加第一次为毛重数据的计量实绩
  401. * @param tmstruckWeightResult
  402. * @param map
  403. */
  404. public void addMaoWeightResult(TmstruckWeightResult tmstruckWeightResult, Map<String, Object> map) throws Exception{
  405. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  406. //设置毛重时间
  407. String firstTime = (String) map.get("resultTareWeightTime");
  408. tmstruckWeightResult.setResultGrossWeightTime(sdf.parse(firstTime));
  409. //添加毛重汽车衡
  410. Integer tareId = tmstruckWeightResultMapper.selectTruckCalculateId((String) map.get("resultTareCalculateNumber"));
  411. if(tareId == null){
  412. throw new Exception("没有此计量衡:" + map.get("resultTareCalculateNumber"));
  413. }
  414. tmstruckWeightResult.setResultGrossPlaceId(new BigDecimal(tareId));
  415. //设置毛重
  416. BigDecimal resultTareWeight = DataChange.dataToBigDecimal(map.get("resultTareWeight"));
  417. tmstruckWeightResult.setResultGrossWeight(resultTareWeight);
  418. tmstruckWeightResult.setInsertTime(new Date());
  419. tmstruckWeightResult.setInsertUsername("admin");
  420. }
  421. /**
  422. * 添加计量实绩添加数据
  423. * @param tmstruckWeightResult
  424. * @param map
  425. * @return
  426. */
  427. public void addWeightResult(TmstruckWeightResult tmstruckWeightResult, Map<String, Object> map) throws Exception{
  428. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  429. //设置皮重汽车衡
  430. String resultTareCalculateNumber = (String) map.get("resultTareCalculateNumber");
  431. if(resultTareCalculateNumber != null){
  432. if(!"".equals(resultTareCalculateNumber)){
  433. Integer tareId = tmstruckWeightResultMapper.selectTruckCalculateId(resultTareCalculateNumber);
  434. if(tareId == null){
  435. throw new Exception("没有此皮重汽车衡:" + map.get("resultTareCalculateNumber"));
  436. }
  437. tmstruckWeightResult.setResultTarePlaceId(new BigDecimal(tareId));
  438. }
  439. }
  440. //设置毛重汽车衡
  441. String resultCrossCalculateNumber = (String) map.get("resultCrossCalculateNumber");
  442. if(resultCrossCalculateNumber != null){
  443. if(!"".equals(resultCrossCalculateNumber)){
  444. Integer crossId = tmstruckWeightResultMapper.selectTruckCalculateId(resultCrossCalculateNumber);
  445. if(crossId == null){
  446. throw new Exception("没有此毛重汽车衡:" + map.get("resultCrossCalculateNumber"));
  447. }
  448. tmstruckWeightResult.setResultGrossPlaceId(new BigDecimal(crossId));
  449. }
  450. }
  451. //毛重
  452. if(map.get("resultCrossWeight") != null){
  453. String resultCrossWeight = String.valueOf(map.get("resultCrossWeight"));
  454. if(!"".equals(resultCrossWeight))
  455. tmstruckWeightResult.setResultGrossWeight(DataChange.dataToBigDecimal(resultCrossWeight));
  456. }
  457. //皮重
  458. if(map.get("resultTareWeight") != null){
  459. String resultTareWeight = String.valueOf(map.get("resultTareWeight"));
  460. if(!"".equals(resultTareWeight))
  461. tmstruckWeightResult.setResultTareWeight(DataChange.dataToBigDecimal(resultTareWeight));
  462. }
  463. //净重
  464. if(map.get("resultNetWeight") != null){
  465. String resultNetWeight = String.valueOf(map.get("resultNetWeight"));
  466. if(!"".equals(resultNetWeight)){
  467. tmstruckWeightResult.setResultNetWeight(DataChange.dataToBigDecimal(resultNetWeight));
  468. }
  469. }
  470. //设置皮重时间
  471. if(map.get("resultTareWeightTime") != null){
  472. String resultTareWeightTime = (String) map.get("resultTareWeightTime");
  473. if(!"".equals(resultTareWeightTime)){
  474. tmstruckWeightResult.setResultTareWeightTime(sdf.parse(resultTareWeightTime));
  475. }
  476. }
  477. //设置毛重时间
  478. if(map.get("resultCrossWeightTime") != null){
  479. String resultGrossWeightTime = (String) map.get("resultCrossWeightTime");
  480. if(!"".equals(resultGrossWeightTime)){
  481. tmstruckWeightResult.setResultGrossWeightTime(sdf.parse(resultGrossWeightTime));
  482. }
  483. }
  484. tmstruckWeightResult.setUpdateTime(new Date());
  485. tmstruckWeightResult.setUpdateUsername("admin");
  486. }
  487. /**
  488. * 自动签收
  489. * @return
  490. */
  491. public void autoReceipt(String orderNumber, Object tareWeightTime){
  492. TmstruckReceiveResult tmstruckReceiveResult = new TmstruckReceiveResult();
  493. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  494. //通过运输订单号查询总实绩ID
  495. BigDecimal resultTotalId = utilsMapper.getTotalIdByOrderNumber(orderNumber);
  496. tmstruckReceiveResult.setResultTotalId(resultTotalId);
  497. tmstruckReceiveResult.setStatus(new BigDecimal(1));
  498. tmstruckReceiveResult.setInsertUsername("admin");
  499. Date receiptTime;
  500. try {
  501. //取皮重时间为收货时间
  502. receiptTime = sdf.parse((String) tareWeightTime);
  503. } catch (ParseException e) {
  504. receiptTime = new Date();
  505. System.out.println(e.getMessage());
  506. }
  507. tmstruckReceiveResult.setInsertTime(receiptTime);
  508. tmstruckReceiveResult.setUpdateTime(receiptTime);
  509. int i = tmstruckReceiveResultMapper.updateByTotalResultId(tmstruckReceiveResult);
  510. if(i == 1) {
  511. System.out.println(orderNumber + "收货成功");
  512. }else {
  513. System.out.println(orderNumber + "收货失败");
  514. }
  515. }
  516. /**
  517. * 纯内转订单类型
  518. * @Author TXF
  519. * @Date 2022/2/18 9:55
  520. * @param map
  521. * @return
  522. **/
  523. public String insertWeightResultBy11(Map<String, Object> map, Map<String, Object> oneMap){
  524. TmstruckWeightResult tmstruckWeightResult = new TmstruckWeightResult();
  525. tmstruckWeightResult.setResultPoundNo((String) map.get("resultPoundNo"));
  526. tmstruckWeightResult.setMaterialId(DataChange.dataToBigDecimal(map.get("materialId")));
  527. int sqe = DataChange.dataToBigDecimal(oneMap.get("Sqe")).intValue(); //获取订单路段顺序号
  528. sqe = sqe + 1;
  529. Object resultNetWeight = map.get("resultNetWeight");
  530. if(resultNetWeight != null && !"".equals((String) resultNetWeight)){
  531. //判断是否有卸货实绩已经卸过货 如果有卸货实绩 则结束订单
  532. Integer resultId = utilsMapper.getUnloadResultByTotalId(DataChange.dataToBigDecimal(oneMap.get("totalId")));
  533. if(resultId != null){
  534. int orderIds = DataChange.dataToBigDecimal(oneMap.get("orderIds")).intValue();
  535. omsFeign.closeInwardOrder(orderIds, sqe, (String) resultNetWeight);
  536. }else {
  537. Map<String, Object> threeMap = new HashMap<>(); //用于更新路段顺序号
  538. threeMap.put("orderLineSequence", sqe);
  539. threeMap.put("orderNumber", map.get("orderNumber"));
  540. utilsMapper.updateLineSeqByOrderIdOrNum2(threeMap); //更新订单路段顺序号
  541. }
  542. }else {
  543. Map<String, Object> threeMap = new HashMap<>(); //用于更新路段顺序号
  544. threeMap.put("orderLineSequence", sqe);
  545. threeMap.put("orderNumber", map.get("orderNumber"));
  546. utilsMapper.updateLineSeqByOrderIdOrNum2(threeMap); //更新订单路段顺序号
  547. }
  548. //首先查询这个订单号的这个物资ID是否有计量实绩
  549. Map<String, Object> twoMap = tmstruckWeightResultMapper.selectResultIdByOrderNoAndMaterialId(map); //判断这个物资是否已经计量过
  550. Object resultCrossWeightTime = map.get("resultCrossWeightTime");
  551. if(twoMap == null){//如果查出来为空,则进行新增操作
  552. tmstruckWeightResult.setId(tmstruckWeightResultMapper.selectMaxId()); //新增主键
  553. tmstruckWeightResult.setResultTotalId(DataChange.dataToBigDecimal(oneMap.get("totalId"))); //新增总实绩ID
  554. if(resultCrossWeightTime == null || "".equals(String.valueOf(resultCrossWeightTime))){//只有一条数据的情况
  555. tmstruckWeightResult.setTareSegmentSqe(new BigDecimal(sqe));
  556. }
  557. else {
  558. tmstruckWeightResult.setTareSegmentSqe(new BigDecimal(sqe));
  559. tmstruckWeightResult.setGrossSegmentSqe(new BigDecimal(sqe));
  560. }
  561. try {
  562. addWeightResult(tmstruckWeightResult, map);
  563. } catch (Exception e) {
  564. return e.getMessage();
  565. }
  566. tmstruckWeightResultMapper.insertSelective(tmstruckWeightResult); //新增计量实绩
  567. }else {
  568. //如果不为空则证明进行过至少一次计量
  569. tmstruckWeightResult.setId(DataChange.dataToBigDecimal(twoMap.get("weightTaskResultId")));
  570. //取出计量数据与传进来的毛皮数据进行对比
  571. BigDecimal inTareWeight = DataChange.dataToBigDecimal(twoMap.get("resultTareWeight"));
  572. if(inTareWeight.compareTo(DataChange.dataToBigDecimal(map.get("resultTareWeight"))) > 0){
  573. //如果取出来的皮重 大于 传进来的皮重 则需要调换路段顺序号
  574. tmstruckWeightResult.setGrossSegmentSqe(DataChange.dataToBigDecimal(twoMap.get("tareSegmentSqe")));
  575. tmstruckWeightResult.setTareSegmentSqe(new BigDecimal(sqe));
  576. }else{
  577. tmstruckWeightResult.setGrossSegmentSqe(new BigDecimal(sqe));
  578. }
  579. try {
  580. addWeightResult(tmstruckWeightResult, map);
  581. } catch (Exception e) {
  582. return e.getMessage();
  583. }
  584. tmstruckWeightResultMapper.updateByPrimaryKeySelective(tmstruckWeightResult);
  585. }
  586. //推送数据
  587. utilsService.pushMesToWebsocket((String) oneMap.get("capacityNumber"), "计量");
  588. return map.get("orderNumber") + "成功";
  589. }
  590. /**
  591. * 处理零星订单多拼方法
  592. * @Author TXF
  593. * @Date 2022/3/15 18:37
  594. * @param map
  595. * @param stringObjectMap
  596. * @return
  597. **/
  598. public void dealWithLxOrder(Map<String, Object> map, Map<String, Object> stringObjectMap){
  599. if(map.get("resultNetWeight") != null){
  600. String resultNetWeight = String.valueOf(map.get("resultNetWeight"));
  601. if(! ("".equals(resultNetWeight) || "null".equals(resultNetWeight))){
  602. //查询是否还有物资如果为空则为已经计量完成
  603. Integer materialId = utilsMapper.getNextMaterialId(DataChange.dataToBigDecimal(stringObjectMap.get("orderId")));
  604. if(materialId != null){
  605. stringObjectMap.put("materialId", materialId);
  606. stringObjectMap.put("asd", 1);
  607. Map<String, Object> returnMap = null;
  608. try {
  609. returnMap = tmstruckFeign.sendMeasureCommission(stringObjectMap);
  610. String code = (String) returnMap.get("code");
  611. if(!"200".equals(code)){
  612. System.out.println(returnMap.get("data"));
  613. }
  614. } catch (Exception e) {
  615. System.out.println(e.getMessage());
  616. }
  617. }
  618. }
  619. }
  620. }
  621. /**
  622. * 修改拼装钢材物资
  623. * @param map
  624. * @param steelMap
  625. */
  626. public void updateSteelAssemble(Map<String, Object> map, Map<String, Object> steelMap) throws Exception{
  627. //更新实绩
  628. TmstruckWeightResult steelWightModel = new TmstruckWeightResult();
  629. steelWightModel.setId(DataChange.dataToBigDecimal(steelMap.get("weightTaskResultId"))); //查询出来的主键
  630. steelMap.put("resultTareCalculateNumber", map.get("resultCrossCalculateNumber")); //皮重汽车衡即为毛重汽车衡
  631. steelMap.put("resultTareWeight", map.get("resultCrossWeight"));//皮重即为毛重
  632. steelMap.put("resultTareWeightTime", map.get("resultCrossWeightTime"));//皮重时间即为毛重时间
  633. addWeightResult(steelWightModel, steelMap);
  634. tmstruckWeightResultMapper.updateByPrimaryKeySelective(steelWightModel);
  635. }
  636. //修改拼装退货物资
  637. /**
  638. * 修改拼装钢材物资
  639. * @param map
  640. * @param steelMap
  641. */
  642. public void updateSaleReturnAssemble(Map<String, Object> map, Map<String, Object> steelMap) throws Exception{
  643. //更新实绩
  644. TmstruckWeightResult SaleReturn = new TmstruckWeightResult();
  645. SaleReturn.setId(DataChange.dataToBigDecimal(steelMap.get("weightTaskResultId"))); //查询出来的主键
  646. steelMap.put("resultCrossCalculateNumber", map.get("resultTareCalculateNumber")); //皮重汽车衡即为毛重汽车衡
  647. steelMap.put("resultCrossWeight", map.get("resultTareWeight"));//毛重即皮重
  648. steelMap.put("resultCrossWeightTime", map.get("resultTareWeightTime"));//毛重时间即皮重时间
  649. addWeightResult(SaleReturn, steelMap);
  650. tmstruckWeightResultMapper.updateByPrimaryKeySelective(SaleReturn);
  651. }
  652. /**
  653. * 回传数据给金蝶方法
  654. * @Author TXF
  655. * @Date 2022/2/9 15:46
  656. * @param
  657. * @return
  658. **/
  659. public void sendMesToKD(Map<String, Object> map, Integer orderType){
  660. String resultTareCalculateNumber = String.valueOf(map.get("resultTareCalculateNumber"));
  661. if(! resultTareCalculateNumber.contains("精煤")){ //如果不是精煤称的则不回传金蝶 或者没有皮重称
  662. return;
  663. }
  664. String orderNumber = (String) map.get("orderNumber");
  665. Map<String, Object> mesMap = new HashMap<>();
  666. switch (orderType){
  667. case 6:
  668. //查询订单信息
  669. mesMap = tmstruckWeightResultMapper.getPurOrderMesToKD(orderNumber);
  670. break;
  671. case 20:
  672. case 23:
  673. mesMap = tmstruckWeightResultMapper.get20PurOrderMesToKD(orderNumber);
  674. }
  675. //将map数据全放进mesMap中
  676. map.putAll(mesMap);
  677. //访问金蝶接口
  678. KDWebServiceServiceImpl.sendMesToKD(map);
  679. }
  680. /**
  681. * 计量联动删除方法
  682. * @param mapList
  683. * @return
  684. */
  685. public String linkageDeleteTransportOrder(List<Map<String, Object>> mapList) throws Exception{
  686. try{
  687. new Thread( new Runnable() {
  688. public void run(){
  689. try {
  690. newFileTool.newFile(mapList.toString(),"计量-物流联动删单");
  691. } catch (IOException e) {
  692. e.printStackTrace();
  693. }
  694. }
  695. }).start();
  696. }catch (Exception e) {
  697. e.printStackTrace();
  698. }
  699. //联动删除
  700. for (Map<String, Object> map : mapList) {
  701. String orderNumber = (String) map.get("orderNumber");
  702. //判断该运输订单号是否是钢材的
  703. Map<String,Object> orderMes = tmstruckWeightResultMapper.getOOType(orderNumber);
  704. BigDecimal resultTotalId = DataChange.dataToBigDecimal(orderMes.get("resultTotalId"));
  705. BigDecimal orderId = DataChange.dataToBigDecimal(orderMes.get("orderId"));
  706. Integer orderType = DataChange.dataToBigDecimal(orderMes.get("orderType")).intValue();
  707. if(orderType == 1 || orderType == 4) {
  708. //删皮,此时没有物资名称,只有运输订单号
  709. if(map.get("good") == null || "".equals(map.get("good"))){
  710. //清空皮重信息,且将进厂时间清空,且将路段顺序号置为0
  711. tmstruckWeightResultMapper.updateWeightTare(resultTotalId);
  712. tmstruckWeightResultMapper.updateEnfactoryResult(resultTotalId);
  713. tmstruckWeightResultMapper.updateOrderLineSqe(orderId);
  714. }
  715. //如果传输了物资,则判断该物资是第几拼
  716. if(map.get("good") != null && !"".equals(map.get("good"))){
  717. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  718. //查询物资
  719. BigDecimal materialId = tmstruckWeightResultMapper.getMaterialId(map);
  720. if(materialId == null) {
  721. return "没有找到该物资,返回failed";
  722. }
  723. //查询该物资id及对应的净重还有毛重时间是哪一拼
  724. String resultGrossWeightTime = (String) map.get("resultCrossWeightTime");
  725. Date resultGrossWeightTime1 = sdf.parse(resultGrossWeightTime);
  726. Map<String, Object> weightMap = new HashMap<>();
  727. weightMap.put("resultTotalId",orderMes.get("resultTotalId"));
  728. weightMap.put("materialId",materialId);
  729. weightMap.put("resultGrossWeightTime",resultGrossWeightTime);
  730. Map<String,Object> map1 = tmstruckWeightResultMapper.selectWeightMes(weightMap);
  731. //根据查询信息判断是哪一拼
  732. Integer spellNum = (DataChange.dataToBigDecimal(map1.get("grossSqe")).intValue() + DataChange.dataToBigDecimal(map1.get("tareSqe")).intValue()) / 6;
  733. if(spellNum == 1){
  734. //如果是第一拼
  735. tmstruckWeightResultMapper.updateWeightResult(DataChange.dataToBigDecimal(map1.get("weightTaskResultId")));
  736. //删除下二拼的皮重
  737. tmstruckWeightResultMapper.updateWeightTareNoGross(resultTotalId);
  738. tmstruckWeightResultMapper.updateEnfactoryResult(resultTotalId);
  739. tmstruckWeightResultMapper.updateOrderLineSqe(orderId);
  740. }else{
  741. tmstruckWeightResultMapper.updateWeightResult(DataChange.dataToBigDecimal(map1.get("weightTaskResultId")));
  742. tmstruckWeightResultMapper.updateWeightTareNoGross(resultTotalId);
  743. //查询有净重的实绩的最大路段顺序号
  744. Integer orderLineSqe = tmstruckWeightResultMapper.selectOrderLineSqe(resultTotalId);
  745. tmstruckWeightResultMapper.updateOrderLineSqeBySqe(orderId,orderLineSqe);
  746. }
  747. }
  748. }else{
  749. tmstruckWeightResultMapper.linkageDeleteTransportOrder(orderNumber);
  750. }
  751. }
  752. return "success";
  753. }
  754. /**
  755. * 计量联动修改方法(修改关联的采购订单,以及同步修改运输订单物资子表的物资)
  756. * @param map
  757. * @param orderType
  758. * @return
  759. */
  760. public String linkUpdateAPO(Map<String, Object> map, Integer orderType){
  761. //如果等于1 则代表是需要变更采购订单号的订单
  762. Map<String, Object> mesMap = tmstruckWeightResultMapper.getAPOMes(String.valueOf(map.get("ArrivalBillNo")));
  763. if (mesMap == null){
  764. return map.get("ArrivalBillNo") + "系统没有此订单号!失败";
  765. }
  766. mesMap.put("orderNumber", map.get("orderNumber"));
  767. if(orderType == 20 || orderType == 15 || orderType == 16 || orderType == 23 || orderType == 24){
  768. //20订单修改的表不一样呀,找寻该采购订单对应的最新需求id和计划id
  769. BigDecimal planId = tmstruckWeightResultMapper.selectNewPlanId(mesMap);
  770. mesMap.put("planId",planId);
  771. tmstruckWeightResultMapper.updatePurchaseInwordAPOId(mesMap);
  772. tmstruckWeightResultMapper.updateOmsTruckMaterialId(mesMap);
  773. }else{
  774. //修改订单管理采购订单ID 以及物资子表 物资ID
  775. tmstruckWeightResultMapper.updateOmsTruckPlanId(mesMap);
  776. tmstruckWeightResultMapper.updateOmsTruckMaterialId(mesMap);
  777. }
  778. return mesMap.get("orderNumber") + "数据修改成功";
  779. }
  780. @Override
  781. public Boolean checkOrder(Map<String, Object> map) {
  782. //获取三个参数
  783. try {
  784. if (map != null) {
  785. JSONObject jsonObject = new JSONObject(map);
  786. FastDateFormat format = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
  787. logger.info("=========" + "计量检查" + format.format(new Date()));
  788. logger.info(jsonObject.toString());
  789. logger.info("=========" + "计量检查" + format.format(new Date()));
  790. try{
  791. new Thread( new Runnable() {
  792. public void run(){
  793. try {
  794. newFileTool.newFile(jsonObject.toString(),"计量物流金蝶核对");
  795. } catch (IOException e) {
  796. e.printStackTrace();
  797. }
  798. }
  799. }).start();
  800. }catch (Exception e) {
  801. e.printStackTrace();
  802. }
  803. //判断该车的运输订单号是否是钢材且是否是正在作业中的,如果不是就返回true
  804. int i = tmstruckWeightResultMapper.checkOrderIsSteel(map);
  805. if (i == 0) {
  806. return true;
  807. }
  808. //判断该分录是不是在物流系统,如果不在返回true
  809. int j = tmstruckWeightResultMapper.checkOrder(map);
  810. if (j == 0) {
  811. //如果是自提,则更换规格
  812. BigDecimal jlSaleOrderMaterialId = tmstruckWeightResultMapper.getJlSaleOrderMaterialId(map);
  813. BigDecimal wlSaleOrderMaterialId = tmstruckWeightResultMapper.getWlSaleOrderMaterialId(map);
  814. BigDecimal wlOrderId = tmstruckWeightResultMapper.getJlOrderId(wlSaleOrderMaterialId);
  815. if(jlSaleOrderMaterialId != null) {
  816. //如果车序号子表存在,判断拼数是否相同
  817. BigDecimal jlSpell = tmstruckWeightResultMapper.getJlSpell(jlSaleOrderMaterialId);
  818. BigDecimal wlSpell = tmstruckWeightResultMapper.getWlSpell(map);
  819. //如果拼数相同,则继续更换运单,否则返回
  820. if (jlSpell.compareTo(wlSpell) == 0) {
  821. //判断正确的车序号主键有没有派车
  822. BigDecimal jlOrderId = tmstruckWeightResultMapper.getJlOrderId(jlSaleOrderMaterialId);
  823. if(jlOrderId != null) {
  824. //分别更新
  825. tmstruckWeightResultMapper.updateOrderPlanId(jlOrderId,wlSaleOrderMaterialId);
  826. tmstruckWeightResultMapper.updateOrderPlanId(wlOrderId,jlSaleOrderMaterialId);
  827. //清空运输订单子表的某个数据
  828. tmstruckWeightResultMapper.updateOrderMaterialId(jlOrderId);
  829. tmstruckWeightResultMapper.updateOrderMaterialId(wlOrderId);
  830. }else{
  831. tmstruckWeightResultMapper.updateOrderPlanId(wlOrderId,jlSaleOrderMaterialId);
  832. tmstruckWeightResultMapper.updateOrderMaterialId(wlOrderId);
  833. }
  834. }
  835. }else {
  836. //如果对不上,那么就将运输订单里面的状态变一下
  837. tmstruckWeightResultMapper.updateOmsRedQrCode(map);
  838. }
  839. //根据分录ID查询车序号
  840. utilsService.pushMesToWebsocket((String) map.get("carNo"), "计量");
  841. return false;
  842. }else{
  843. return true;
  844. }
  845. }
  846. } catch (Exception e) {
  847. return true;
  848. }
  849. return true;
  850. }
  851. }