TmstruckWeightResultServiceImpl.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  1. package com.steerinfo.dil.service.impl;
  2. import com.steerinfo.dil.mapper.TmstrainWeightResultMapper;
  3. import com.steerinfo.dil.mapper.TmstruckReceiptResultMapper;
  4. import com.steerinfo.dil.mapper.UtilsMapper;
  5. import com.steerinfo.dil.model.TmstrainWeightResult;
  6. import com.steerinfo.dil.model.TmstruckReceiptResult;
  7. import com.steerinfo.dil.model.TmstruckWeightResult;
  8. import com.steerinfo.dil.mapper.TmstruckWeightResultMapper;
  9. import com.steerinfo.dil.service.ITmstruckWeightResultService;
  10. import com.steerinfo.dil.util.DataChange;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Service;
  13. import org.springframework.transaction.annotation.Transactional;
  14. import java.text.SimpleDateFormat;
  15. import java.util.Date;
  16. import java.math.BigDecimal;
  17. import java.util.List;
  18. import java.util.Map;
  19. /**
  20. * TmstruckWeightResult服务实现:
  21. * @author generator
  22. * @version 1.0-SNAPSHORT 2021-10-25 02:28
  23. * 类描述
  24. * 修订历史:
  25. * 日期:2021-10-25
  26. * 作者:generator
  27. * 参考:
  28. * 描述:TmstruckWeightResult服务实现
  29. * @see null
  30. * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
  31. */
  32. @Service(value = "tmstruckWeightResultService")
  33. public class TmstruckWeightResultServiceImpl implements ITmstruckWeightResultService {
  34. @Autowired
  35. TmstruckWeightResultMapper tmstruckWeightResultMapper;
  36. @Autowired
  37. UtilsServiceImpl utilsService;
  38. @Autowired
  39. UtilsMapper utilsMapper;
  40. @Autowired
  41. TmstruckReceiptResultMapper tmstruckReceiptResultMapper;
  42. @Autowired
  43. TmstrainWeightResultMapper tmstrainWeightResultMapper;
  44. /**
  45. * 接收计量实绩信息
  46. * "orderNumber":"WYSDD2021091000000002",
  47. * "resultTareCalculateNumber":"1号汽车衡",
  48. * "resultCrossCalculateNumber":"1号汽车衡",
  49. * "resultTareWeight":40.00,
  50. * "resultCrossWeight":40.00,
  51. * "resultNetWeight":0,
  52. * "resultTareWeightTime":"2021-09-10 09:05:22",
  53. * "resultCrossWeightTime":"2021-09-10 09:05:22",
  54. * "resultPoundNo":"Bd123456780",
  55. * "materialId":40
  56. * @param mapList
  57. * @return
  58. */
  59. @Override
  60. @Transactional
  61. public String receiveTmsTruckWeightResult(List<Map<String, Object>> mapList){
  62. //遍历列表
  63. StringBuilder sb = new StringBuilder();
  64. for (Map<String, Object> map : mapList) {
  65. sb.append(" ");
  66. String resultTareCalculateNumber = (String) map.get("resultTareCalculateNumber");
  67. //如果计量衡名字中含有铁专线 则代表是轨道衡 走轨道衡路线
  68. if(resultTareCalculateNumber.contains("铁专线")){
  69. sb.append(addTrainWeightResult(map));
  70. }else {
  71. //走汽车衡
  72. sb.append(addTruckWeightResult(map));
  73. }
  74. }
  75. return sb.toString();
  76. }
  77. /**
  78. * 添加汽车衡计量实绩
  79. * @param map
  80. * @return
  81. */
  82. public String addTruckWeightResult(Map<String, Object> map) {
  83. //通过运输订单号查询计量实绩Id
  84. Map<String, Object> stringObjectMap = tmstruckWeightResultMapper.selectWeightIdByOrderId(map);
  85. if(stringObjectMap == null){
  86. //通过传来的运输订单号 与 物资ID查询计重实绩ID
  87. stringObjectMap = tmstruckWeightResultMapper.selectTotalIdByOrderNo(map);
  88. if(stringObjectMap == null){
  89. return map.get("orderNumber") + "没有此订单信息或物资信息(" + map.get("materialId") + ")错误";
  90. }
  91. }
  92. map.putAll(stringObjectMap);
  93. TmstruckWeightResult tmstruckWeightResult = null;
  94. try {
  95. tmstruckWeightResult = generateWeightResult(map);
  96. } catch (Exception e) {
  97. return e.getMessage();
  98. }
  99. tmstruckWeightResultMapper.updateByPrimaryKeySelective(tmstruckWeightResult);
  100. //推送数据
  101. utilsService.pushMesToWebsocket((String) stringObjectMap.get("capacityNumber"), "计量");
  102. return map.get("orderNumber") + "成功";
  103. }
  104. /**
  105. * 生成汽运计量实体类
  106. * @param map
  107. * @return
  108. */
  109. public TmstruckWeightResult generateWeightResult(Map<String, Object> map) throws Exception {
  110. TmstruckWeightResult tmstruckWeightResult = new TmstruckWeightResult();
  111. tmstruckWeightResult.setId(DataChange.dataToBigDecimal(map.get("weightTaskResultId")));
  112. BigDecimal orderType = DataChange.dataToBigDecimal(map.get("orderTypee"));
  113. //磅单号
  114. tmstruckWeightResult.setResultPoundNo((String) map.get("resultPoundNo"));
  115. String resultCrossWeightTime = (String) map.get("resultCrossWeightTime");
  116. tmstruckWeightResult.setMaterialId(DataChange.dataToBigDecimal(map.get("materialId")));
  117. //如果是采购订单 先计毛再计皮
  118. if("56789".contains(orderType.toString())
  119. || orderType.intValue() == 12
  120. || orderType.intValue() == 14
  121. ){
  122. //如果毛重数据为空 则是第一次计量为毛重 此时第一次计量时间放皮重时间里面
  123. if(resultCrossWeightTime == null || resultCrossWeightTime.length() == 0){
  124. addMaoWeightResult(tmstruckWeightResult, map);
  125. //更新订单中路段顺序号
  126. map.put("segmentSqe", map.get("grossSegmentSqe")); //毛重路段顺序
  127. utilsService.updateOrderLineSequence(map);
  128. }else {
  129. addWeightResult(tmstruckWeightResult, map); //添加计量实绩数据
  130. //更新订单中路段顺序号
  131. map.put("segmentSqe", map.get("tareSegmentSqe")); //皮重路段顺序
  132. utilsService.updateOrderLineSequence(map);
  133. String orderNumber = (String) map.get("orderNumber");
  134. //如果是采购订单 计皮后自动完成签收
  135. //查询是此订单是否已签收过
  136. Integer check = utilsMapper.checkoutReceipt(orderNumber);
  137. if(check == null){
  138. autoReceipt(orderNumber);
  139. }
  140. }
  141. }
  142. else if(orderType.intValue() == 10){
  143. //查询还有几条没有净重的实绩
  144. Integer resultNum = tmstruckWeightResultMapper.selectNoNetWeightResult((String) map.get("orderNumber"));
  145. if(resultNum == 2){
  146. //如果有两条则是走先计皮后计毛顺序
  147. addWeightResult(tmstruckWeightResult, map); //添加计量实绩数据 (正常添加对应皮毛重方法)
  148. if(resultCrossWeightTime == null || resultCrossWeightTime.length() == 0){
  149. map.put("segmentSqe", map.get("tareSegmentSqe")); //皮重路段顺序
  150. }else{
  151. map.put("segmentSqe", map.get("grossSegmentSqe")); //毛重路段顺序
  152. }
  153. utilsService.updateOrderLineSequence(map);
  154. }else{
  155. //只剩一条数据时则是计毛后计皮顺序
  156. //如果毛重数据为空 则是第一次计量为毛重 此时第一次计量时间放皮重时间里面
  157. if(resultCrossWeightTime == null || resultCrossWeightTime.length() == 0){
  158. addMaoWeightResult(tmstruckWeightResult, map);
  159. //更新订单中路段顺序号
  160. map.put("segmentSqe", map.get("grossSegmentSqe")); //毛重路段顺序
  161. utilsService.updateOrderLineSequence(map);
  162. }else {
  163. addWeightResult(tmstruckWeightResult, map); //添加计量实绩数据
  164. //更新订单中路段顺序号
  165. map.put("segmentSqe", map.get("tareSegmentSqe")); //皮重路段顺序
  166. utilsService.updateOrderLineSequence(map);
  167. String orderNumber = (String) map.get("orderNumber");
  168. //如果是采购订单 计皮后自动完成签收
  169. //查询是此订单是否已签收过
  170. Integer check = utilsMapper.checkoutReceipt(orderNumber);
  171. if(check == null){
  172. autoReceipt(orderNumber);
  173. }
  174. }
  175. }
  176. }
  177. else{
  178. addWeightResult(tmstruckWeightResult, map); //添加计量实绩数据
  179. // 更新订单中路段顺序号,如果毛重时间为空则为计皮:也就是销售第一次计皮,反之有毛重时间则为计毛
  180. if(resultCrossWeightTime == null || resultCrossWeightTime.length() == 0){
  181. map.put("segmentSqe", map.get("tareSegmentSqe")); //皮重路段顺序
  182. }else{
  183. map.put("segmentSqe", map.get("grossSegmentSqe")); //毛重路段顺序
  184. }
  185. utilsService.updateOrderLineSequence(map);
  186. }
  187. return tmstruckWeightResult;
  188. }
  189. /**
  190. * 添加第一次为毛重数据的计量实绩
  191. * @param tmstruckWeightResult
  192. * @param map
  193. */
  194. public void addMaoWeightResult(TmstruckWeightResult tmstruckWeightResult, Map<String, Object> map) throws Exception{
  195. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  196. //设置毛重时间
  197. String firstTime = (String) map.get("resultTareWeightTime");
  198. tmstruckWeightResult.setResultGrossWeightTime(sdf.parse(firstTime));
  199. //添加毛重汽车衡
  200. Integer tareId = tmstruckWeightResultMapper.selectTruckCalculateId((String) map.get("resultTareCalculateNumber"));
  201. if(tareId == null){
  202. throw new Exception("没有此计量衡:" + map.get("resultTareCalculateNumber"));
  203. }
  204. tmstruckWeightResult.setResultGrossPlaceId(new BigDecimal(tareId));
  205. //设置毛重
  206. BigDecimal resultTareWeight = DataChange.dataToBigDecimal(map.get("resultTareWeight"));
  207. tmstruckWeightResult.setResultGrossWeight(resultTareWeight);
  208. tmstruckWeightResult.setInsertTime(new Date());
  209. tmstruckWeightResult.setInsertUsername("admin");
  210. }
  211. /**
  212. * 添加计量实绩添加数据
  213. * @param tmstruckWeightResult
  214. * @param map
  215. * @return
  216. */
  217. public void addWeightResult(TmstruckWeightResult tmstruckWeightResult, Map<String, Object> map) throws Exception{
  218. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  219. //设置皮重汽车衡
  220. String resultTareCalculateNumber = (String) map.get("resultTareCalculateNumber");
  221. if(resultTareCalculateNumber != null){
  222. if(!"".equals(resultTareCalculateNumber)){
  223. Integer tareId = tmstruckWeightResultMapper.selectTruckCalculateId(resultTareCalculateNumber);
  224. if(tareId == null){
  225. throw new Exception("没有此皮重汽车衡:" + map.get("resultTareCalculateNumber"));
  226. }
  227. tmstruckWeightResult.setResultTarePlaceId(new BigDecimal(tareId));
  228. }
  229. }
  230. //设置毛重汽车衡
  231. String resultCrossCalculateNumber = (String) map.get("resultCrossCalculateNumber");
  232. if(resultCrossCalculateNumber != null){
  233. if(!"".equals(resultCrossCalculateNumber)){
  234. Integer crossId = tmstruckWeightResultMapper.selectTruckCalculateId(resultCrossCalculateNumber);
  235. if(crossId == null){
  236. throw new Exception("没有此毛重汽车衡:" + map.get("resultCrossCalculateNumber"));
  237. }
  238. tmstruckWeightResult.setResultGrossPlaceId(new BigDecimal(crossId));
  239. }
  240. }
  241. //毛重
  242. if(map.get("resultCrossWeight") != null){
  243. String resultCrossWeight = String.valueOf(map.get("resultCrossWeight"));
  244. if(!"".equals(resultCrossWeight))
  245. tmstruckWeightResult.setResultGrossWeight(DataChange.dataToBigDecimal(resultCrossWeight));
  246. }
  247. //皮重
  248. if(map.get("resultTareWeight") != null){
  249. String resultTareWeight = String.valueOf(map.get("resultTareWeight"));
  250. if(!"".equals(resultTareWeight))
  251. tmstruckWeightResult.setResultTareWeight(DataChange.dataToBigDecimal(resultTareWeight));
  252. }
  253. //净重
  254. if(map.get("resultNetWeight") != null){
  255. String resultNetWeight = String.valueOf(map.get("resultNetWeight"));
  256. if(!"".equals(resultNetWeight)){
  257. tmstruckWeightResult.setResultNetWeight(DataChange.dataToBigDecimal(resultNetWeight));
  258. }
  259. }
  260. //设置皮重时间
  261. if(map.get("resultTareWeightTime") != null){
  262. String resultTareWeightTime = (String) map.get("resultTareWeightTime");
  263. if(!"".equals(resultTareWeightTime)){
  264. tmstruckWeightResult.setResultTareWeightTime(sdf.parse(resultTareWeightTime));
  265. }
  266. }
  267. //设置毛重时间
  268. if(map.get("resultCrossWeightTime") != null){
  269. String resultGrossWeightTime = (String) map.get("resultCrossWeightTime");
  270. if(!"".equals(resultGrossWeightTime)){
  271. tmstruckWeightResult.setResultGrossWeightTime(sdf.parse(resultGrossWeightTime));
  272. }
  273. }
  274. tmstruckWeightResult.setUpdateTime(new Date());
  275. tmstruckWeightResult.setUpdateUsername("admin");
  276. }
  277. /**
  278. * 自动签收
  279. * @return
  280. */
  281. public void autoReceipt(String orderNumber){
  282. TmstruckReceiptResult tmstruckReceiptResult = new TmstruckReceiptResult();
  283. //通过运输订单号查询总实绩ID
  284. BigDecimal resultTotalId = utilsMapper.getTotalIdByOrderNumber(orderNumber);
  285. tmstruckReceiptResult.setResultTotalId(resultTotalId);
  286. tmstruckReceiptResult.setStatus(new BigDecimal(1));
  287. tmstruckReceiptResult.setInsertUsername("admin");
  288. tmstruckReceiptResult.setInsertTime(new Date());
  289. tmstruckReceiptResultMapper.updateByTotalResultId(tmstruckReceiptResult);
  290. System.out.println(orderNumber + "收货成功");
  291. }
  292. /**
  293. * 添加火车计量实绩
  294. * @param map
  295. * @return
  296. */
  297. public String addTrainWeightResult(Map<String, Object> map){
  298. //通过采购订单号和车皮号 查询火运总实绩ID和物资ID
  299. Map<String, Object> totalIdAndMateMap = tmstrainWeightResultMapper.getResultIdByPurNoAndWagonNo(map);
  300. if(totalIdAndMateMap == null){
  301. return "采购订单号"+ map.get("purchaseOrderNo")+"或车皮信息"+ map.get("orderNumber")+"错误";
  302. }
  303. if(totalIdAndMateMap.get("resultTotalId") == null){
  304. return "采购订单号"+ map.get("purchaseOrderNo")+"或车皮信息"+ map.get("orderNumber")+"错误";
  305. }
  306. map.putAll(totalIdAndMateMap);
  307. TmstrainWeightResult tmstrainWeightResult = null;
  308. try {
  309. tmstrainWeightResult = generateTrainWeightResult(map);
  310. } catch (Exception e) {
  311. return e.getMessage(); //捕获异常信息
  312. }
  313. tmstrainWeightResultMapper.insertSelective(tmstrainWeightResult);
  314. return map.get("orderNumber") + "成功";
  315. }
  316. /**
  317. * 生成火运计量实体
  318. * @param map
  319. * @return
  320. */
  321. public TmstrainWeightResult generateTrainWeightResult(Map<String, Object> map) throws Exception {
  322. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  323. TmstrainWeightResult tmstrainWeightResult = new TmstrainWeightResult();
  324. tmstrainWeightResult.setResultId(tmstrainWeightResultMapper.selectMaxId());
  325. //磅单号
  326. tmstrainWeightResult.setResultPoundNo((String) map.get("resultPoundNo"));
  327. //添加火运总实绩ID
  328. tmstrainWeightResult.setResultTotalId(DataChange.dataToBigDecimal(map.get("resultTotalId")));
  329. //设置物资ID
  330. tmstrainWeightResult.setMaterialId(DataChange.dataToBigDecimal(map.get("materialId")));
  331. //如果没有计毛时间 则是第一次计量
  332. String resultCrossWeightTime = (String) map.get("resultCrossWeightTime");
  333. if(resultCrossWeightTime == null || resultCrossWeightTime.length() == 0){
  334. //设置毛重时间
  335. String firstTime = (String) map.get("resultTareWeightTime");
  336. tmstrainWeightResult.setResultGrossWeightTime(sdf.parse(firstTime));
  337. //添加毛重轨道衡
  338. Integer tareId = tmstruckWeightResultMapper.selectTruckCalculateId((String) map.get("resultTareCalculateNumber"));
  339. if(tareId == null){
  340. throw new Exception("没有此计量衡:" + map.get("resultTareCalculateNumber"));
  341. }
  342. tmstrainWeightResult.setResultGrossPlaceId(new BigDecimal(tareId));
  343. //设置毛重
  344. BigDecimal resultTareWeight = DataChange.dataToBigDecimal(map.get("resultTareWeight"));
  345. tmstrainWeightResult.setResultGrossWeight(resultTareWeight);
  346. tmstrainWeightResult.setInsertTime(new Date());
  347. tmstrainWeightResult.setInsertUsername("admin");
  348. }else {
  349. //设置皮重轨道衡
  350. Integer tareId = tmstruckWeightResultMapper.selectTruckCalculateId((String) map.get("resultTareCalculateNumber"));
  351. if(tareId == null){
  352. throw new Exception("没有此计量衡:" + map.get("resultTareCalculateNumber"));
  353. }
  354. tmstrainWeightResult.setResultTarePlaceId(new BigDecimal(tareId));
  355. //设置毛重轨道衡
  356. Integer crossId = tmstruckWeightResultMapper.selectTruckCalculateId((String) map.get("resultCrossCalculateNumber"));
  357. if(crossId == null){
  358. throw new Exception("没有此计量衡:" + map.get("resultCrossCalculateNumber"));
  359. }
  360. tmstrainWeightResult.setResultGrossPlaceId(new BigDecimal(crossId));
  361. //毛重
  362. BigDecimal resultCrossWeight = DataChange.dataToBigDecimal(map.get("resultCrossWeight"));
  363. tmstrainWeightResult.setResultGrossWeight(resultCrossWeight);
  364. //皮重
  365. BigDecimal resultTareWeight = DataChange.dataToBigDecimal(map.get("resultTareWeight"));
  366. tmstrainWeightResult.setResultTareWeight(resultTareWeight);
  367. //净重
  368. tmstrainWeightResult.setResultNetWeight(DataChange.dataToBigDecimal(map.get("resultNetWeight")));
  369. //设置皮重时间
  370. String resultTareWeightTime = (String) map.get("resultTareWeightTime");
  371. tmstrainWeightResult.setResultTareWeightTime(sdf.parse(resultTareWeightTime));
  372. //设置毛重时间
  373. String resultGrossWeightTime = (String) map.get("resultCrossWeightTime");
  374. tmstrainWeightResult.setResultGrossWeightTime(sdf.parse(resultGrossWeightTime));
  375. tmstrainWeightResult.setUpdateTime(new Date());
  376. tmstrainWeightResult.setUpdateUsername("admin");
  377. }
  378. return tmstrainWeightResult;
  379. }
  380. }