AmsSaleOrderMaterialServiceImpl.java 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691
  1. package com.steerinfo.dil.service.impl;
  2. import com.steerinfo.dil.controller.AmsSaleTrucknoMaterialController;
  3. import com.steerinfo.dil.feign.IMFeign;
  4. import com.steerinfo.dil.feign.TmsTruckFeign;
  5. import com.steerinfo.dil.mapper.*;
  6. import com.steerinfo.dil.model.*;
  7. import com.steerinfo.dil.service.IAmsSaleOrderMaterialService;
  8. import com.steerinfo.dil.util.DataChange;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Service;
  11. import org.springframework.transaction.annotation.Transactional;
  12. import java.math.BigDecimal;
  13. import java.text.ParseException;
  14. import java.text.SimpleDateFormat;
  15. import java.util.*;
  16. /**
  17. * AmsSaleOrderMaterial服务实现:
  18. * @author generator
  19. * @version 1.0-SNAPSHORT 2021-09-06 07:10
  20. * 类描述
  21. * 修订历史:
  22. * 日期:2021-09-06
  23. * 作者:generator
  24. * 参考:
  25. * 描述:AmsSaleOrderMaterial服务实现
  26. * @see null
  27. * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
  28. */
  29. @Service(value = "amsSaleOrderMaterialService")
  30. public class AmsSaleOrderMaterialServiceImpl implements IAmsSaleOrderMaterialService {
  31. @Autowired
  32. private AmsSaleOrderMaterialMapper amsSaleOrderMaterialMapper;
  33. @Autowired
  34. AmsSaleTrucknoMaterialMapper amsSaleTrucknoMaterialMapper;
  35. @Autowired
  36. AmsDispatchSaleOrderMapper amsDispatchSaleOrderMapper;
  37. @Autowired
  38. OmstruckOrderMapper omstruckOrderMapper;
  39. @Autowired
  40. OmstruckOrderMaterialMapper omstruckOrderMaterialMapper;
  41. @Autowired
  42. IMFeign imFeign;
  43. @Autowired
  44. TmsTruckFeign tmsTruckFeign;
  45. @Autowired
  46. AmsSaleOrderMapper amsSaleOrderMapper;
  47. @Override
  48. public int addAmsSaleOrderMaterial(AmsSaleOrderMaterial amsSaleOrderMaterial) {
  49. long id;
  50. if(amsSaleOrderMaterialMapper.selectMaxId()==null){
  51. id = 1;
  52. }else {
  53. id = amsSaleOrderMaterialMapper.selectMaxId().longValue()+1;
  54. }
  55. //生成主键id
  56. amsSaleOrderMaterial.setSaleOrderMaterialId(new BigDecimal(id));
  57. //生成车序号
  58. amsSaleOrderMaterial.setSaleOrderMaterialTruckNo(new BigDecimal(id));
  59. //常规字段
  60. amsSaleOrderMaterial.setInsertUsername("admin");
  61. amsSaleOrderMaterial.setInsertTime(new Date());
  62. amsSaleOrderMaterial.setUpdateUsername("admin");
  63. amsSaleOrderMaterial.setUpdateTime(new Date());
  64. amsSaleOrderMaterial.setInsertUpdateRemark("无");
  65. amsSaleOrderMaterial.setDeleted(new BigDecimal(0));
  66. amsSaleOrderMaterial.setUpdated(new BigDecimal(0));
  67. return amsSaleOrderMaterialMapper.insert(amsSaleOrderMaterial);
  68. }
  69. @Override
  70. public List<Map<String, Object>> selectBySaleOrderMaterialId(BigDecimal saleOrderMaterialId) {
  71. return amsSaleOrderMaterialMapper.selectBySaleOrderMaterialId(saleOrderMaterialId);
  72. }
  73. @Override
  74. public int updateAmsSaleOrderMaterial(AmsSaleOrderMaterial amsSaleOrderMaterial) {
  75. amsSaleOrderMaterial.setUpdateTime(new Date());
  76. return amsSaleOrderMaterialMapper.updateByPrimaryKeySelective(amsSaleOrderMaterial);
  77. }
  78. @Override
  79. public int deleteAmsSaleOrderMaterialBySaleOrderMaterialId(BigDecimal saleOrderMaterialId) {
  80. AmsSaleOrderMaterial amsSaleOrderMaterial = amsSaleOrderMaterialMapper.selectByPrimaryKey(saleOrderMaterialId);
  81. amsSaleOrderMaterial.setDeleted(new BigDecimal(1));
  82. return amsSaleOrderMaterialMapper.updateByPrimaryKey(amsSaleOrderMaterial);
  83. }
  84. @Override
  85. public String getAddress(BigDecimal saleOrderMaterialId) {
  86. return amsSaleOrderMaterialMapper.getAddress(saleOrderMaterialId);
  87. }
  88. @Override
  89. public int updateAddress(Map<String, Object> map) {
  90. String saleOrderMaterialId = map.get("saleOrderMaterialId").toString();
  91. //查询收货地址表中是否有该地址,无则新增,有则取收货地址Id
  92. String saleShippingAddress = (String) map.get("saleShippingAddress");
  93. BigDecimal addressId = amsSaleOrderMaterialMapper.getReceiveAddressId(saleShippingAddress);
  94. //获得原车次表信息
  95. AmsSaleOrderMaterial amsSaleOrderMaterial1 = amsSaleOrderMaterialMapper.selectByPrimaryKey(new BigDecimal(saleOrderMaterialId));
  96. if(addressId!=null){
  97. long id;
  98. if(amsSaleOrderMaterialMapper.selectMaxId()==null){
  99. id = 1;
  100. }else {
  101. id = amsSaleOrderMaterialMapper.selectMaxId().longValue()+1;
  102. }
  103. //生成主键id
  104. amsSaleOrderMaterial1.setSaleOrderMaterialId(new BigDecimal(id));
  105. amsSaleOrderMaterial1.setSaleShippingAddressId(addressId);
  106. //新增修改了地址的数据
  107. amsSaleOrderMaterialMapper.insert(amsSaleOrderMaterial1);
  108. }else {
  109. //新增收货地址,取得收货地址的Id
  110. Map<String,Object> mapReceive = new HashMap<>();
  111. long id;
  112. if(amsSaleOrderMaterialMapper.selectMaxIdReceive()==null){
  113. id = 1;
  114. }else {
  115. id = amsSaleOrderMaterialMapper.selectMaxIdReceive().longValue()+1;
  116. }
  117. mapReceive.put("addressId",new BigDecimal(id));
  118. mapReceive.put("addressDeliveryAddress",saleShippingAddress);
  119. amsSaleOrderMaterialMapper.insertReceiveAddress(mapReceive);
  120. //新增修改了地址的数据
  121. long id1;
  122. if(amsSaleOrderMaterialMapper.selectMaxId()==null){
  123. id1 = 1;
  124. }else {
  125. id1 = amsSaleOrderMaterialMapper.selectMaxId().longValue()+1;
  126. }
  127. //生成主键id
  128. amsSaleOrderMaterial1.setSaleOrderMaterialId(new BigDecimal(id1));
  129. amsSaleOrderMaterial1.setSaleShippingAddressId(new BigDecimal(id));
  130. //新增修改了地址的数据
  131. amsSaleOrderMaterialMapper.insert(amsSaleOrderMaterial1);
  132. }
  133. //修改原地址记录状态
  134. AmsSaleOrderMaterial amsSaleOrderMaterial2 = amsSaleOrderMaterialMapper.selectByPrimaryKey(new BigDecimal(saleOrderMaterialId));
  135. amsSaleOrderMaterial2.setUpdated(new BigDecimal(1));
  136. return amsSaleOrderMaterialMapper.updateByPrimaryKeySelective(amsSaleOrderMaterial2);
  137. }
  138. @Override
  139. public List<Map<String, Object>> getAddressDeliveryAddress() {
  140. return amsSaleOrderMaterialMapper.getAddressDeliveryAddress();
  141. }
  142. public List<Map<String, Object>> getSaleMaterial(Map<String, Object> mapValue) {
  143. return amsSaleOrderMaterialMapper.getSaleMaterial(mapValue);
  144. }
  145. public Integer selectById(BigDecimal saleOrderMaterialId) {
  146. return amsSaleOrderMaterialMapper.selectById(saleOrderMaterialId);
  147. }
  148. public Integer selectByCxh(Map<String, Object> m) {
  149. return amsSaleOrderMaterialMapper.selectByCxh(m);
  150. }
  151. /**
  152. * 展示车序号信息
  153. * @param mapValue
  154. * @return
  155. */
  156. @Override
  157. public List<Map<String, Object>> getTruckNoList(Map<String, Object> mapValue) {
  158. List<Map<String,Object>> mapList = amsSaleOrderMaterialMapper.getTruckNoList(mapValue);
  159. return mapList;
  160. }
  161. /**
  162. * 添加车序号与物资
  163. * @param mapList
  164. * @return
  165. */
  166. @Transactional
  167. @Override
  168. public int addTruckNo(List<Map<String, Object>> mapList) {
  169. int result = 0;
  170. for (Map<String, Object> map : mapList) {
  171. // 销售订单id
  172. BigDecimal saleOrderId = DataChange.dataToBigDecimal(map.get("saleOrderId"));
  173. // 车序号
  174. BigDecimal truckNo = DataChange.dataToBigDecimal(map.get("truckNo"));
  175. AmsSaleOrderMaterial amsSaleOrderMaterial;
  176. Map<String,Object> saleMap = new HashMap<>();
  177. saleMap.put("saleOrderId",saleOrderId);
  178. saleMap.put("saleOrderMaterialTruckNo",truckNo);
  179. // 检测销售订单下的车序号是否已存在
  180. List<AmsSaleOrderMaterial> amsSaleOrderMaterials = amsSaleOrderMaterialMapper.selectByParameters(saleMap);
  181. // 如果已存在则不处理
  182. if (amsSaleOrderMaterials != null && amsSaleOrderMaterials.size() != 0) {
  183. amsSaleOrderMaterial = amsSaleOrderMaterials.get(0);
  184. }
  185. // 如果不存在则新增车序号
  186. else {
  187. // 收货地址id
  188. BigDecimal shippingAddressId = DataChange.dataToBigDecimal(map.get("shippingAddressId"));
  189. // 截止日期
  190. String dateOfReceiptStr = (String) map.get("dateOfReceipt");
  191. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  192. Date dateOfReceipt = null;
  193. try {
  194. dateOfReceipt = sdf.parse(dateOfReceiptStr);
  195. } catch (ParseException e) {
  196. e.printStackTrace();
  197. }
  198. // 收货方姓名
  199. String orderConsignee = (String) map.get("orderConsignee");
  200. // 收货方联系方式
  201. Object orderConsigneeTel = map.get("orderConsigneeTel");
  202. amsSaleOrderMaterial = new AmsSaleOrderMaterial();
  203. BigDecimal saleOrderMaterialId = amsSaleOrderMaterialMapper.selectMaxId();
  204. amsSaleOrderMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
  205. amsSaleOrderMaterial.setSaleOrderId(saleOrderId);
  206. amsSaleOrderMaterial.setSaleOrderMaterialTruckNo(truckNo);
  207. amsSaleOrderMaterial.setSaleShippingAddressId(shippingAddressId);
  208. // 钢材收货日期
  209. amsSaleOrderMaterial.setSaleDateOfReceipt(dateOfReceipt);
  210. amsSaleOrderMaterial.setSaleOrderConsignee(orderConsignee);
  211. if (orderConsignee != null) {
  212. amsSaleOrderMaterial.setSaleOrderConsigneeTel(orderConsigneeTel.toString());
  213. }
  214. amsSaleOrderMaterial.setInsertTime(new Date());
  215. amsSaleOrderMaterial.setInsertUsername("admin");
  216. amsSaleOrderMaterial.setDeleted(new BigDecimal(0));
  217. amsSaleOrderMaterial.setInsertUpdateRemark("无");
  218. amsSaleOrderMaterial.setUpdated(new BigDecimal(0));
  219. amsSaleOrderMaterial.setIssueStatus(new BigDecimal(0));
  220. result += amsSaleOrderMaterialMapper.insertSelective(amsSaleOrderMaterial);
  221. }
  222. // 新增车序号与物资中间表
  223. AmsSaleTrucknoMaterial amsSaleTrucknoMaterial = new AmsSaleTrucknoMaterial();
  224. // 物资id
  225. BigDecimal materialId = DataChange.dataToBigDecimal(map.get("saleMaterialId"));
  226. // 物资数量
  227. BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber"));
  228. BigDecimal saleTrucknoMaterialId = amsSaleTrucknoMaterialMapper.selectMaxId();
  229. amsSaleTrucknoMaterial.setTrucknoMaterialId(saleTrucknoMaterialId);
  230. amsSaleTrucknoMaterial.setMaterialId(materialId);
  231. amsSaleTrucknoMaterial.setSaleOrderMaterialId(amsSaleOrderMaterial.getSaleOrderMaterialId());
  232. amsSaleTrucknoMaterial.setSaleOrderMaterialNumber(materialNumber);
  233. amsSaleTrucknoMaterial.setInsertTime(new Date());
  234. amsSaleTrucknoMaterial.setInsertUsername("admin");
  235. amsSaleTrucknoMaterial.setInsertUpdateRemark("无");
  236. result += amsSaleTrucknoMaterialMapper.insertSelective(amsSaleTrucknoMaterial);
  237. }
  238. return result;
  239. }
  240. /**
  241. * 下发车序号
  242. * @param mapList
  243. * @return
  244. */
  245. @Override
  246. public int issueTruckNo(List<Map<String, Object>> mapList) {
  247. int result = 0;
  248. for (Map<String, Object> map : mapList) {
  249. BigDecimal saleOrderMaterialId = DataChange.dataToBigDecimal(map.get("saleOrderMaterialId"));
  250. AmsSaleOrderMaterial amsSaleOrderMaterial = new AmsSaleOrderMaterial();
  251. amsSaleOrderMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
  252. amsSaleOrderMaterial.setIssueStatus(new BigDecimal(1));
  253. result += amsSaleOrderMaterialMapper.updateByPrimaryKeySelective(amsSaleOrderMaterial);
  254. }
  255. return result;
  256. }
  257. /**
  258. * 展示车序号下的物资详情
  259. * @param saleOrderMaterialId
  260. * @return
  261. */
  262. @Override
  263. public List<Map<String, Object>> getTruckNoMaterialList(BigDecimal saleOrderMaterialId) {
  264. List<Map<String, Object>> mapList = amsSaleOrderMaterialMapper.getTruckNoMaterialList(saleOrderMaterialId);
  265. return mapList;
  266. }
  267. /**
  268. * 销售订单下的物资
  269. * @param saleOrderId
  270. * @return
  271. */
  272. @Override
  273. public List<Map<String, Object>> getSaleMaterialList(BigDecimal saleOrderId) {
  274. List<Map<String, Object>> saleMaterialList = amsSaleOrderMaterialMapper.getSaleMaterialList(saleOrderId);
  275. return saleMaterialList;
  276. }
  277. /**
  278. * 销售直接派发销售订单
  279. * @param mapValue
  280. * @return
  281. */
  282. @Transactional
  283. @Override
  284. public int dispatchTruckOrderBySale(Map<String, Object> mapValue) {
  285. int result = 0;
  286. // 得到列内容
  287. List<Map<String,Object>> mapList = (List<Map<String, Object>>) mapValue.get("mapList");
  288. // 销售订单主键
  289. BigDecimal saleOrderId = DataChange.dataToBigDecimal(mapValue.get("saleOrderId"));
  290. // 车序号计数
  291. int count = 1;
  292. // 遍历每一个列
  293. for (Map<String, Object> map : mapList) {
  294. // 销售订单-物资中间表id
  295. BigDecimal saleMaterialId = DataChange.dataToBigDecimal(map.get("saleMaterialId"));
  296. // 物资id
  297. BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId"));
  298. // 收货地址id
  299. BigDecimal saleShippingAddressId = DataChange.dataToBigDecimal(map.get("saleShippingAddressId"));
  300. if (saleShippingAddressId.intValue() == 0) {
  301. saleShippingAddressId = null;
  302. }
  303. // 承运商id
  304. BigDecimal carrierId = DataChange.dataToBigDecimal(map.get("carrierId"));
  305. // 运输线路id
  306. BigDecimal lineId = DataChange.dataToBigDecimal(map.get("lineId"));
  307. // 通过线路id判断是否是钢材
  308. BigDecimal isSteel = amsSaleOrderMaterialMapper.getIsSteel(lineId);
  309. // 物资重量
  310. BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("orderPlanWeight"));
  311. // 车牌号
  312. String capacityNumber = (String) map.get("capacityNumber");
  313. // 得到运力id
  314. BigDecimal capacityId = amsSaleOrderMaterialMapper.getCapacityId(capacityNumber);
  315. // 收货方姓名
  316. String consigneeName = String.valueOf(map.get("saleOrderConsignee"));
  317. // 收货方电话
  318. String consigneeTel = String.valueOf(map.get("saleOrderConsigneeTel"));
  319. // 截止日期
  320. String dateOfReceiptStr = String.valueOf(map.get("saleDateOfReceipt"));
  321. Date dateOfReceipt = null;
  322. if (!"null".equals(dateOfReceiptStr) && !"undefined".equals(dateOfReceiptStr)) {
  323. dateOfReceipt = new Date(Long.valueOf(dateOfReceiptStr));
  324. }
  325. /*
  326. 车序号表
  327. */
  328. AmsSaleOrderMaterial amsSaleOrderMaterial = new AmsSaleOrderMaterial();
  329. // 主键
  330. BigDecimal saleOrderMaterialId = amsSaleOrderMaterialMapper.selectMaxId();
  331. amsSaleOrderMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
  332. // 销售订单主键
  333. amsSaleOrderMaterial.setSaleOrderId(saleOrderId);
  334. // 车序号
  335. amsSaleOrderMaterial.setSaleOrderMaterialTruckNo(new BigDecimal(count));
  336. // 收货地址
  337. amsSaleOrderMaterial.setSaleShippingAddressId(saleShippingAddressId);
  338. // 截止日期
  339. amsSaleOrderMaterial.setSaleDateOfReceipt(dateOfReceipt);
  340. // 收货方姓名
  341. if (!consigneeName.equals("null") && !consigneeName.equals("undefined")) {
  342. amsSaleOrderMaterial.setSaleOrderConsignee(consigneeName);
  343. }
  344. // 收货方联系方式
  345. if (!consigneeTel.equals("null") && !consigneeTel.equals("undefined")) {
  346. amsSaleOrderMaterial.setSaleOrderConsigneeTel(consigneeTel);
  347. }
  348. // 下发状态
  349. amsSaleOrderMaterial.setIssueStatus(new BigDecimal(2));
  350. /*
  351. 车序号与物资子表
  352. */
  353. AmsSaleTrucknoMaterial amsSaleTrucknoMaterial = new AmsSaleTrucknoMaterial();
  354. // 主键
  355. BigDecimal truckNoMaterialId = amsSaleTrucknoMaterialMapper.selectMaxId();
  356. amsSaleTrucknoMaterial.setTrucknoMaterialId(truckNoMaterialId);
  357. // 销售订单-物资中间表id
  358. amsSaleTrucknoMaterial.setMaterialId(saleMaterialId);
  359. // 车序号主键
  360. amsSaleTrucknoMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
  361. // 物资重量
  362. amsSaleTrucknoMaterial.setSaleOrderMaterialNumber(materialNumber);
  363. /*
  364. 定向派单表
  365. */
  366. AmsDispatchSaleOrder amsDispatchSaleOrder = new AmsDispatchSaleOrder();
  367. // 主键
  368. BigDecimal dispatchId = amsDispatchSaleOrderMapper.selectOtherId();
  369. amsDispatchSaleOrder.setDispatchId(dispatchId);
  370. // 车序号表id
  371. amsDispatchSaleOrder.setSaleOrderMaterialId(saleOrderMaterialId);
  372. // 承运商id
  373. amsDispatchSaleOrder.setCarrierId(carrierId);
  374. // 派单时间和成交时间
  375. amsDispatchSaleOrder.setDispatchTime(new Date());
  376. amsDispatchSaleOrder.setDispatchDealTime(new Date());
  377. // 成交类型
  378. amsDispatchSaleOrder.setDispatchType(new BigDecimal(0));
  379. // 车序号状态
  380. amsDispatchSaleOrder.setDispatchStatus(new BigDecimal(2));
  381. /*
  382. 运输订单
  383. */
  384. OmstruckOrder omstruckOrder = new OmstruckOrder();
  385. // 运输订单主键
  386. BigDecimal orderId = omstruckOrderMapper.selectMaxId();
  387. omstruckOrder.setOrderId(orderId);
  388. // 车序号主键
  389. omstruckOrder.setOrderPlanId(saleOrderMaterialId);
  390. // 运输订单号
  391. omstruckOrder.setOrderNumber(DataChange.generateEightDigitsNumber("WYSDD",orderId.intValue()));
  392. // 运力id
  393. omstruckOrder.setCapacityId(capacityId);
  394. // 下发时间
  395. omstruckOrder.setOrderIssueTime(new Date());
  396. // 运单状态
  397. omstruckOrder.setOrderStatus(new BigDecimal(4));
  398. BigDecimal status;
  399. // 非钢材(危化品和焦炭)
  400. if (isSteel != null && (isSteel.intValue() == 3 || isSteel.intValue() == 4)) {
  401. status = new BigDecimal(2);
  402. }
  403. // 钢材
  404. else {
  405. status = new BigDecimal(1);
  406. }
  407. // 订单类型
  408. omstruckOrder.setOrderType(status);
  409. // 运输线路id
  410. omstruckOrder.setLineId(lineId);
  411. /*
  412. 运输订单子表
  413. */
  414. OmstruckOrderMaterial omstruckOrderMaterial = new OmstruckOrderMaterial();
  415. // 主键
  416. BigDecimal orderMaterialId = omstruckOrderMaterialMapper.selectMaxId();
  417. omstruckOrderMaterial.setOrderMaterialId(orderMaterialId);
  418. // 运输订单id
  419. omstruckOrderMaterial.setOrderId(orderId);
  420. // 物资id
  421. omstruckOrderMaterial.setMaterialId(materialId);
  422. // 物资重量
  423. omstruckOrderMaterial.setOrderMaterialWeight(materialNumber);
  424. // 新增车序号表
  425. result += amsSaleOrderMaterialMapper.insertSelective(amsSaleOrderMaterial);
  426. // 新增车序号-物资中间表
  427. result += amsSaleTrucknoMaterialMapper.insertSelective(amsSaleTrucknoMaterial);
  428. // 新增定向派单表
  429. result += amsDispatchSaleOrderMapper.insertSelective(amsDispatchSaleOrder);
  430. // 新增运输订单
  431. result += omstruckOrderMapper.insertSelective(omstruckOrder);
  432. // 新增运输订单子表
  433. result += omstruckOrderMaterialMapper.insertSelective(omstruckOrderMaterial);
  434. // 调用websocket
  435. Map<String,Object> orderIdMap = new HashMap<>();
  436. orderIdMap.put("orderId",orderId);
  437. pushMesToWebsocket(orderIdMap);
  438. // 生成运输执行总实绩
  439. result += tmsTruckFeign.addTotalResult(orderIdMap);
  440. // 车序号累加
  441. count++;
  442. }
  443. // 得到销售订单中的总重量和销售订单下的总净重
  444. BigDecimal saleMaterialWeight = amsSaleOrderMaterialMapper.getMaterialWeightByOrderId(saleOrderId);
  445. BigDecimal saleMaterialNetWeight = amsSaleOrderMaterialMapper.getMaterialNetWeightBySaleId(saleOrderId);
  446. if (saleMaterialNetWeight == null) {
  447. saleMaterialNetWeight = new BigDecimal(0);
  448. }
  449. // 计算净重所占销售订单中的比例
  450. Double percent = saleMaterialNetWeight.doubleValue()/saleMaterialWeight.doubleValue();
  451. if (percent >= 0.97) {
  452. result = -1;
  453. }
  454. return result;
  455. }
  456. /**
  457. * 承运商直接派发销售订单
  458. * @param mapValue
  459. * @return
  460. */
  461. @Override
  462. public int dispatchTruckOrderByCarrier(Map<String, Object> mapValue) {
  463. int result = 0;
  464. // 得到列内容
  465. List<Map<String,Object>> mapList = (List<Map<String, Object>>) mapValue.get("mapList");
  466. // 销售订单主键
  467. BigDecimal saleOrderId = DataChange.dataToBigDecimal(mapValue.get("saleOrderId"));
  468. // 得到最大的车序号
  469. BigDecimal count = DataChange.dataToBigDecimal(mapValue.get("truckNo"));
  470. // 车序号计数
  471. if (count.intValue() == 0) {
  472. count = new BigDecimal(1);
  473. }
  474. // 遍历每一个列
  475. for (Map<String, Object> map : mapList) {
  476. // 销售订单-物资中间表id
  477. BigDecimal saleMaterialId = DataChange.dataToBigDecimal(map.get("saleMaterialId"));
  478. // 物资id
  479. BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId"));
  480. // 收货地址id
  481. BigDecimal saleShippingAddressId = DataChange.dataToBigDecimal(map.get("saleShippingAddressId"));
  482. if (saleShippingAddressId.intValue() == 0) {
  483. saleShippingAddressId = null;
  484. }
  485. // 承运商id
  486. BigDecimal carrierId = DataChange.dataToBigDecimal(map.get("carrierId"));
  487. // 运输线路id
  488. BigDecimal lineId = DataChange.dataToBigDecimal(map.get("lineId"));
  489. // 通过线路id判断是否是钢材
  490. BigDecimal isSteel = amsSaleOrderMaterialMapper.getIsSteel(lineId);
  491. // 物资重量
  492. BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("orderPlanWeight"));
  493. // 车牌号
  494. String capacityNumber = (String) map.get("capacityNumber");
  495. // 得到运力id
  496. BigDecimal capacityId = amsSaleOrderMaterialMapper.getCapacityId(capacityNumber);
  497. // 收货方姓名
  498. String consigneeName = String.valueOf(map.get("saleOrderConsignee"));
  499. // 收货方电话
  500. String consigneeTel = String.valueOf(map.get("saleOrderConsigneeTel"));
  501. // 截止日期
  502. String dateOfReceiptStr = "4102415999000";
  503. Date dateOfReceipt = new Date(Long.valueOf(dateOfReceiptStr));
  504. /*
  505. 车序号表
  506. */
  507. AmsSaleOrderMaterial amsSaleOrderMaterial = new AmsSaleOrderMaterial();
  508. // 主键
  509. BigDecimal saleOrderMaterialId = amsSaleOrderMaterialMapper.selectMaxId();
  510. amsSaleOrderMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
  511. // 销售订单主键
  512. amsSaleOrderMaterial.setSaleOrderId(saleOrderId);
  513. // 车序号
  514. amsSaleOrderMaterial.setSaleOrderMaterialTruckNo(count);
  515. // 收货地址
  516. amsSaleOrderMaterial.setSaleShippingAddressId(saleShippingAddressId);
  517. // 截止日期
  518. amsSaleOrderMaterial.setSaleDateOfReceipt(dateOfReceipt);
  519. // 收货方姓名
  520. if (!consigneeName.equals("null") && !consigneeName.equals("undefined")) {
  521. amsSaleOrderMaterial.setSaleOrderConsignee(consigneeName);
  522. }
  523. // 收货方联系方式
  524. if (!consigneeTel.equals("null") && !consigneeTel.equals("undefined")) {
  525. amsSaleOrderMaterial.setSaleOrderConsigneeTel(consigneeTel);
  526. }
  527. // 下发状态
  528. amsSaleOrderMaterial.setIssueStatus(new BigDecimal(2));
  529. /*
  530. 车序号与物资子表
  531. */
  532. AmsSaleTrucknoMaterial amsSaleTrucknoMaterial = new AmsSaleTrucknoMaterial();
  533. // 主键
  534. BigDecimal truckNoMaterialId = amsSaleTrucknoMaterialMapper.selectMaxId();
  535. amsSaleTrucknoMaterial.setTrucknoMaterialId(truckNoMaterialId);
  536. // 销售订单-物资中间表id
  537. amsSaleTrucknoMaterial.setMaterialId(saleMaterialId);
  538. // 车序号主键
  539. amsSaleTrucknoMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
  540. // 物资重量
  541. amsSaleTrucknoMaterial.setSaleOrderMaterialNumber(materialNumber);
  542. /*
  543. 定向派单表
  544. */
  545. AmsDispatchSaleOrder amsDispatchSaleOrder = new AmsDispatchSaleOrder();
  546. // 主键
  547. BigDecimal dispatchId = amsDispatchSaleOrderMapper.selectOtherId();
  548. amsDispatchSaleOrder.setDispatchId(dispatchId);
  549. // 车序号表id
  550. amsDispatchSaleOrder.setSaleOrderMaterialId(saleOrderMaterialId);
  551. // 承运商id
  552. amsDispatchSaleOrder.setCarrierId(carrierId);
  553. // 派单时间和成交时间
  554. amsDispatchSaleOrder.setDispatchTime(new Date());
  555. amsDispatchSaleOrder.setDispatchDealTime(new Date());
  556. // 成交类型
  557. amsDispatchSaleOrder.setDispatchType(new BigDecimal(0));
  558. // 车序号状态
  559. amsDispatchSaleOrder.setDispatchStatus(new BigDecimal(2));
  560. /*
  561. 运输订单
  562. */
  563. OmstruckOrder omstruckOrder = new OmstruckOrder();
  564. // 运输订单主键
  565. BigDecimal orderId = omstruckOrderMapper.selectMaxId();
  566. omstruckOrder.setOrderId(orderId);
  567. // 车序号主键
  568. omstruckOrder.setOrderPlanId(saleOrderMaterialId);
  569. // 运输订单号
  570. omstruckOrder.setOrderNumber(DataChange.generateEightDigitsNumber("WYSDD",orderId.intValue()));
  571. // 运力id
  572. omstruckOrder.setCapacityId(capacityId);
  573. // 下发时间
  574. omstruckOrder.setOrderIssueTime(new Date());
  575. // 运单状态
  576. omstruckOrder.setOrderStatus(new BigDecimal(4));
  577. BigDecimal status;
  578. // 非钢材(危化品和焦炭)
  579. if (isSteel != null && (isSteel.intValue() == 3 || isSteel.intValue() == 4)) {
  580. status = new BigDecimal(2);
  581. }
  582. // 钢材
  583. else {
  584. status = new BigDecimal(1);
  585. }
  586. // 订单类型
  587. omstruckOrder.setOrderType(status);
  588. // 运输线路id
  589. omstruckOrder.setLineId(lineId);
  590. /*
  591. 运输订单子表
  592. */
  593. OmstruckOrderMaterial omstruckOrderMaterial = new OmstruckOrderMaterial();
  594. // 主键
  595. BigDecimal orderMaterialId = omstruckOrderMaterialMapper.selectMaxId();
  596. omstruckOrderMaterial.setOrderMaterialId(orderMaterialId);
  597. // 运输订单id
  598. omstruckOrderMaterial.setOrderId(orderId);
  599. // 物资id
  600. omstruckOrderMaterial.setMaterialId(materialId);
  601. // 物资重量
  602. omstruckOrderMaterial.setOrderMaterialWeight(materialNumber);
  603. // 新增车序号表
  604. result += amsSaleOrderMaterialMapper.insertSelective(amsSaleOrderMaterial);
  605. // 新增车序号-物资中间表
  606. result += amsSaleTrucknoMaterialMapper.insertSelective(amsSaleTrucknoMaterial);
  607. // 新增定向派单表
  608. result += amsDispatchSaleOrderMapper.insertSelective(amsDispatchSaleOrder);
  609. // 新增运输订单
  610. result += omstruckOrderMapper.insertSelective(omstruckOrder);
  611. // 新增运输订单子表
  612. result += omstruckOrderMaterialMapper.insertSelective(omstruckOrderMaterial);
  613. // 调用websocket
  614. Map<String,Object> orderIdMap = new HashMap<>();
  615. orderIdMap.put("orderId",orderId);
  616. pushMesToWebsocket(orderIdMap);
  617. // 生成运输执行总实绩
  618. result += tmsTruckFeign.addTotalResult(orderIdMap);
  619. // 车序号累加
  620. count = new BigDecimal(count.intValue() + 1);
  621. }
  622. // 修改状态为开启状态
  623. AmsSaleOrder amsSaleOrder = new AmsSaleOrder();
  624. amsSaleOrder.setSaleOrderId(saleOrderId);
  625. amsSaleOrder.setCloseStatus(new BigDecimal(0));
  626. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  627. return result;
  628. }
  629. /**
  630. * 关闭销售订单
  631. * @param saleOrderId
  632. * @return
  633. */
  634. @Override
  635. public int closeSaleOrder(BigDecimal saleOrderId) {
  636. AmsSaleOrder amsSaleOrder = new AmsSaleOrder();
  637. amsSaleOrder.setSaleOrderId(saleOrderId);
  638. amsSaleOrder.setCloseStatus(new BigDecimal(1));
  639. int result = amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  640. return result;
  641. }
  642. /**
  643. * 发送消息到 websocket 推送消息
  644. * orderId 订单Id
  645. * @return
  646. */
  647. public String pushMesToWebsocket(Map<String, Object> map) {
  648. Map<String, Object> mesMap = omstruckOrderMapper.pushMesToWebsocket(map);
  649. //添加消息实体
  650. HashMap<Object, Object> mapp = new HashMap<>();
  651. mapp.put("messageType", 3);
  652. mapp.put("sendPerson", "system");
  653. mapp.put("receivePerson", mesMap.get("capacityNumber"));
  654. mapp.put("messageContent",(String) mesMap.get("orderNumber") + new Date());
  655. mapp.put("createTime", new Date());
  656. ArrayList<Object> list = new ArrayList<>();
  657. list.add(mapp);
  658. //调用websocket接口推送
  659. HashMap<Object, Object> sendMap = new HashMap<>();
  660. //将消息实体放入list中存到map中
  661. sendMap.put("messages", list);
  662. String s = imFeign.sendToUser(sendMap);
  663. System.out.println(s);
  664. return s;
  665. }
  666. }