TmstruckWeightResultServiceImpl.java 38 KB

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