AmsSaleOrderMaterialServiceImpl.java 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808
  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. @Autowired
  48. AmsContractTransportPriceMapper amsContractTransportPriceMapper;
  49. @Autowired
  50. RmsReceivePlaceMapper rmsReceivePlaceMapper;
  51. @Override
  52. public int addAmsSaleOrderMaterial(AmsSaleOrderMaterial amsSaleOrderMaterial) {
  53. long id;
  54. if(amsSaleOrderMaterialMapper.selectMaxId()==null){
  55. id = 1;
  56. }else {
  57. id = amsSaleOrderMaterialMapper.selectMaxId().longValue()+1;
  58. }
  59. //生成主键id
  60. amsSaleOrderMaterial.setSaleOrderMaterialId(new BigDecimal(id));
  61. //生成车序号
  62. amsSaleOrderMaterial.setSaleOrderMaterialTruckNo(new BigDecimal(id));
  63. //常规字段
  64. amsSaleOrderMaterial.setInsertUsername("admin");
  65. amsSaleOrderMaterial.setInsertTime(new Date());
  66. amsSaleOrderMaterial.setUpdateUsername("admin");
  67. amsSaleOrderMaterial.setUpdateTime(new Date());
  68. amsSaleOrderMaterial.setInsertUpdateRemark("无");
  69. amsSaleOrderMaterial.setDeleted(new BigDecimal(0));
  70. amsSaleOrderMaterial.setUpdated(new BigDecimal(0));
  71. return amsSaleOrderMaterialMapper.insert(amsSaleOrderMaterial);
  72. }
  73. @Override
  74. public List<Map<String, Object>> selectBySaleOrderMaterialId(BigDecimal saleOrderMaterialId) {
  75. return amsSaleOrderMaterialMapper.selectBySaleOrderMaterialId(saleOrderMaterialId);
  76. }
  77. @Override
  78. public int updateAmsSaleOrderMaterial(AmsSaleOrderMaterial amsSaleOrderMaterial) {
  79. amsSaleOrderMaterial.setUpdateTime(new Date());
  80. return amsSaleOrderMaterialMapper.updateByPrimaryKeySelective(amsSaleOrderMaterial);
  81. }
  82. @Override
  83. public int deleteAmsSaleOrderMaterialBySaleOrderMaterialId(BigDecimal saleOrderMaterialId) {
  84. AmsSaleOrderMaterial amsSaleOrderMaterial = amsSaleOrderMaterialMapper.selectByPrimaryKey(saleOrderMaterialId);
  85. amsSaleOrderMaterial.setDeleted(new BigDecimal(1));
  86. return amsSaleOrderMaterialMapper.updateByPrimaryKey(amsSaleOrderMaterial);
  87. }
  88. @Override
  89. public String getAddress(BigDecimal saleOrderMaterialId) {
  90. return amsSaleOrderMaterialMapper.getAddress(saleOrderMaterialId);
  91. }
  92. @Override
  93. public int updateAddress(Map<String, Object> map) {
  94. String saleOrderMaterialId = map.get("saleOrderMaterialId").toString();
  95. //查询收货地址表中是否有该地址,无则新增,有则取收货地址Id
  96. String saleShippingAddress = (String) map.get("saleShippingAddress");
  97. BigDecimal addressId = amsSaleOrderMaterialMapper.getReceiveAddressId(saleShippingAddress);
  98. //获得原车次表信息
  99. AmsSaleOrderMaterial amsSaleOrderMaterial1 = amsSaleOrderMaterialMapper.selectByPrimaryKey(new BigDecimal(saleOrderMaterialId));
  100. if(addressId!=null){
  101. long id;
  102. if(amsSaleOrderMaterialMapper.selectMaxId()==null){
  103. id = 1;
  104. }else {
  105. id = amsSaleOrderMaterialMapper.selectMaxId().longValue()+1;
  106. }
  107. //生成主键id
  108. amsSaleOrderMaterial1.setSaleOrderMaterialId(new BigDecimal(id));
  109. amsSaleOrderMaterial1.setSaleShippingAddressId(addressId);
  110. //新增修改了地址的数据
  111. amsSaleOrderMaterialMapper.insert(amsSaleOrderMaterial1);
  112. }else {
  113. //新增收货地址,取得收货地址的Id
  114. Map<String,Object> mapReceive = new HashMap<>();
  115. long id;
  116. if(amsSaleOrderMaterialMapper.selectMaxIdReceive()==null){
  117. id = 1;
  118. }else {
  119. id = amsSaleOrderMaterialMapper.selectMaxIdReceive().longValue()+1;
  120. }
  121. mapReceive.put("addressId",new BigDecimal(id));
  122. mapReceive.put("addressDeliveryAddress",saleShippingAddress);
  123. amsSaleOrderMaterialMapper.insertReceiveAddress(mapReceive);
  124. //新增修改了地址的数据
  125. long id1;
  126. if(amsSaleOrderMaterialMapper.selectMaxId()==null){
  127. id1 = 1;
  128. }else {
  129. id1 = amsSaleOrderMaterialMapper.selectMaxId().longValue()+1;
  130. }
  131. //生成主键id
  132. amsSaleOrderMaterial1.setSaleOrderMaterialId(new BigDecimal(id1));
  133. amsSaleOrderMaterial1.setSaleShippingAddressId(new BigDecimal(id));
  134. //新增修改了地址的数据
  135. amsSaleOrderMaterialMapper.insert(amsSaleOrderMaterial1);
  136. }
  137. //修改原地址记录状态
  138. AmsSaleOrderMaterial amsSaleOrderMaterial2 = amsSaleOrderMaterialMapper.selectByPrimaryKey(new BigDecimal(saleOrderMaterialId));
  139. amsSaleOrderMaterial2.setUpdated(new BigDecimal(1));
  140. return amsSaleOrderMaterialMapper.updateByPrimaryKeySelective(amsSaleOrderMaterial2);
  141. }
  142. @Override
  143. public List<Map<String, Object>> getAddressDeliveryAddress() {
  144. return amsSaleOrderMaterialMapper.getAddressDeliveryAddress();
  145. }
  146. public List<Map<String, Object>> getSaleMaterial(Map<String, Object> mapValue) {
  147. return amsSaleOrderMaterialMapper.getSaleMaterial(mapValue);
  148. }
  149. public Integer selectById(BigDecimal saleOrderMaterialId) {
  150. return amsSaleOrderMaterialMapper.selectById(saleOrderMaterialId);
  151. }
  152. public Integer selectByCxh(Map<String, Object> m) {
  153. return amsSaleOrderMaterialMapper.selectByCxh(m);
  154. }
  155. /**
  156. * 展示车序号信息
  157. * @param mapValue
  158. * @return
  159. */
  160. @Override
  161. public List<Map<String, Object>> getTruckNoList(Map<String, Object> mapValue) {
  162. List<Map<String,Object>> mapList = amsSaleOrderMaterialMapper.getTruckNoList(mapValue);
  163. return mapList;
  164. }
  165. /**
  166. * 添加车序号与物资
  167. * @param mapList
  168. * @return
  169. */
  170. @Transactional
  171. @Override
  172. public int addTruckNo(List<Map<String, Object>> mapList) {
  173. int result = 0;
  174. for (Map<String, Object> map : mapList) {
  175. // 销售订单id
  176. BigDecimal saleOrderId = DataChange.dataToBigDecimal(map.get("saleOrderId"));
  177. // 车序号
  178. BigDecimal truckNo = DataChange.dataToBigDecimal(map.get("truckNo"));
  179. AmsSaleOrderMaterial amsSaleOrderMaterial;
  180. Map<String,Object> saleMap = new HashMap<>();
  181. saleMap.put("saleOrderId",saleOrderId);
  182. saleMap.put("saleOrderMaterialTruckNo",truckNo);
  183. // 检测销售订单下的车序号是否已存在
  184. List<AmsSaleOrderMaterial> amsSaleOrderMaterials = amsSaleOrderMaterialMapper.selectByParameters(saleMap);
  185. // 如果已存在则不处理
  186. if (amsSaleOrderMaterials != null && amsSaleOrderMaterials.size() != 0) {
  187. amsSaleOrderMaterial = amsSaleOrderMaterials.get(0);
  188. }
  189. // 如果不存在则新增车序号
  190. else {
  191. amsSaleOrderMaterial = new AmsSaleOrderMaterial();
  192. // 收货地址id
  193. BigDecimal shippingAddressId = DataChange.dataToBigDecimal(map.get("shippingAddressId"));
  194. String place = (String) (map.get("place"));
  195. if (place != null) {
  196. List<Map<String, Object>> placeIdList = amsSaleOrderMaterialMapper.getPlaceId(place,shippingAddressId);
  197. if (placeIdList == null || placeIdList.size() == 0) {
  198. RmsReceivePlace rmsReceivePlace = new RmsReceivePlace();
  199. rmsReceivePlace.setPlaceId(rmsReceivePlaceMapper.selectMaxId());
  200. rmsReceivePlace.setAddressId(shippingAddressId);
  201. rmsReceivePlace.setAddressDeliveryAddress(place);
  202. amsSaleOrderMaterial.setSaleShippingAddressId(rmsReceivePlace.getPlaceId());
  203. rmsReceivePlaceMapper.insertSelective(rmsReceivePlace);
  204. } else {
  205. amsSaleOrderMaterial.setSaleShippingAddressId((BigDecimal) placeIdList.get(0).get("placeId"));
  206. }
  207. }
  208. // 截止日期
  209. // String dateOfReceiptStr = (String) map.get("dateOfReceipt");
  210. // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  211. Date dateOfReceipt = new Date((Long) map.get("dateOfReceipt"));
  212. // try {
  213. // dateOfReceipt = sdf.parse(dateOfReceiptStr);
  214. // } catch (ParseException e) {
  215. // e.printStackTrace();
  216. // }
  217. // 收货方姓名
  218. String orderConsignee = (String) map.get("orderConsignee");
  219. // 收货方联系方式
  220. Object orderConsigneeTel = map.get("orderConsigneeTel");
  221. BigDecimal saleOrderMaterialId = amsSaleOrderMaterialMapper.selectMaxId();
  222. amsSaleOrderMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
  223. amsSaleOrderMaterial.setSaleOrderId(saleOrderId);
  224. amsSaleOrderMaterial.setSaleOrderMaterialTruckNo(truckNo);
  225. // 钢材收货日期
  226. amsSaleOrderMaterial.setSaleDateOfReceipt(dateOfReceipt);
  227. amsSaleOrderMaterial.setSaleOrderConsignee(orderConsignee);
  228. if (orderConsignee != null) {
  229. amsSaleOrderMaterial.setSaleOrderConsigneeTel(orderConsigneeTel.toString());
  230. }
  231. Object priceId = map.get("priceId");
  232. if(priceId != null && !"".equals(priceId)) amsSaleOrderMaterial.setPriceId(DataChange.dataToBigDecimal(priceId));
  233. amsSaleOrderMaterial.setInsertTime(new Date());
  234. amsSaleOrderMaterial.setInsertUsername("admin");
  235. amsSaleOrderMaterial.setDeleted(new BigDecimal(0));
  236. amsSaleOrderMaterial.setInsertUpdateRemark("无");
  237. amsSaleOrderMaterial.setUpdated(new BigDecimal(0));
  238. amsSaleOrderMaterial.setIssueStatus(new BigDecimal(0));
  239. result += amsSaleOrderMaterialMapper.insertSelective(amsSaleOrderMaterial);
  240. }
  241. // 新增车序号与物资中间表
  242. AmsSaleTrucknoMaterial amsSaleTrucknoMaterial = new AmsSaleTrucknoMaterial();
  243. // 物资id
  244. BigDecimal materialId = DataChange.dataToBigDecimal(map.get("saleMaterialId"));
  245. // 物资数量
  246. BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber"));
  247. BigDecimal saleTrucknoMaterialId = amsSaleTrucknoMaterialMapper.selectMaxId();
  248. amsSaleTrucknoMaterial.setTrucknoMaterialId(saleTrucknoMaterialId);
  249. amsSaleTrucknoMaterial.setMaterialId(materialId);
  250. amsSaleTrucknoMaterial.setSaleOrderMaterialId(amsSaleOrderMaterial.getSaleOrderMaterialId());
  251. amsSaleTrucknoMaterial.setSaleOrderMaterialNumber(materialNumber);
  252. amsSaleTrucknoMaterial.setInsertTime(new Date());
  253. amsSaleTrucknoMaterial.setInsertUsername("admin");
  254. amsSaleTrucknoMaterial.setInsertUpdateRemark("无");
  255. result += amsSaleTrucknoMaterialMapper.insertSelective(amsSaleTrucknoMaterial);
  256. }
  257. return result;
  258. }
  259. /**
  260. * 下发车序号
  261. * @param mapList
  262. * @return
  263. */
  264. @Override
  265. public int issueTruckNo(List<Map<String, Object>> mapList) {
  266. int result = 0;
  267. for (Map<String, Object> map : mapList) {
  268. BigDecimal saleOrderMaterialId = DataChange.dataToBigDecimal(map.get("saleOrderMaterialId"));
  269. AmsSaleOrderMaterial amsSaleOrderMaterial = new AmsSaleOrderMaterial();
  270. amsSaleOrderMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
  271. amsSaleOrderMaterial.setIssueStatus(new BigDecimal(1));
  272. result += amsSaleOrderMaterialMapper.updateByPrimaryKeySelective(amsSaleOrderMaterial);
  273. }
  274. return result;
  275. }
  276. /**
  277. * 展示车序号下的物资详情
  278. * @param saleOrderMaterialId
  279. * @return
  280. */
  281. @Override
  282. public List<Map<String, Object>> getTruckNoMaterialList(BigDecimal saleOrderMaterialId) {
  283. List<Map<String, Object>> mapList = amsSaleOrderMaterialMapper.getTruckNoMaterialList(saleOrderMaterialId);
  284. return mapList;
  285. }
  286. /**
  287. * 销售订单下的物资
  288. * @param saleOrderId
  289. * @return
  290. */
  291. @Override
  292. public List<Map<String, Object>> getSaleMaterialList(BigDecimal saleOrderId) {
  293. List<Map<String, Object>> saleMaterialList = amsSaleOrderMaterialMapper.getSaleMaterialList(saleOrderId);
  294. return saleMaterialList;
  295. }
  296. /**
  297. * 销售直接派发销售订单
  298. * @param mapValue
  299. * @return
  300. */
  301. @Transactional
  302. @Override
  303. public int dispatchTruckOrderBySale(Map<String, Object> mapValue) {
  304. int result = 0;
  305. // 得到列内容
  306. List<Map<String,Object>> mapList = (List<Map<String, Object>>) mapValue.get("mapList");
  307. // 销售订单主键
  308. BigDecimal saleOrderId = DataChange.dataToBigDecimal(mapValue.get("saleOrderId"));
  309. if(mapValue.get("sendAgain") == null){
  310. // 得到销售订单中的总重量和销售订单下的总净重
  311. BigDecimal saleMaterialWeight = amsSaleOrderMaterialMapper.getMaterialWeightByOrderId(saleOrderId);
  312. BigDecimal saleMaterialNetWeight = amsSaleOrderMaterialMapper.getMaterialNetWeightBySaleId(saleOrderId);
  313. if (saleMaterialNetWeight == null) {
  314. saleMaterialNetWeight = new BigDecimal(0);
  315. }
  316. // 计算净重所占销售订单中的比例
  317. Double percent = saleMaterialNetWeight.doubleValue()/saleMaterialWeight.doubleValue();
  318. if (percent >= 0.97) {
  319. return -1;
  320. }
  321. }
  322. // 车序号计数
  323. int count = 1;
  324. // 遍历每一个列
  325. for (Map<String, Object> map : mapList) {
  326. // 销售订单-物资中间表id
  327. BigDecimal saleMaterialId = DataChange.dataToBigDecimal(map.get("saleMaterialId"));
  328. // 物资id
  329. BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId"));
  330. // 承运商id
  331. BigDecimal carrierId = DataChange.dataToBigDecimal(map.get("carrierId"));
  332. // 运输线路id
  333. BigDecimal lineId = DataChange.dataToBigDecimal(map.get("lineId"));
  334. // 通过线路id判断是否是钢材
  335. BigDecimal isSteel = amsSaleOrderMaterialMapper.getIsSteel(lineId);
  336. // 物资重量
  337. BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("orderPlanWeight"));
  338. // 车牌号
  339. String capacityNumber = (String) map.get("capacityNumber");
  340. // 得到运力id
  341. BigDecimal capacityId = amsSaleOrderMaterialMapper.getCapacityId(capacityNumber);
  342. // 收货方姓名
  343. String consigneeName = String.valueOf(map.get("saleOrderConsignee"));
  344. // 收货方电话
  345. String consigneeTel = String.valueOf(map.get("saleOrderConsigneeTel"));
  346. // 截止日期
  347. String dateOfReceiptStr = String.valueOf(map.get("saleDateOfReceipt"));
  348. Date dateOfReceipt = null;
  349. if (!"null".equals(dateOfReceiptStr) && !"undefined".equals(dateOfReceiptStr)) {
  350. dateOfReceipt = new Date(Long.valueOf(dateOfReceiptStr));
  351. }
  352. /*
  353. 车序号表
  354. */
  355. AmsSaleOrderMaterial amsSaleOrderMaterial = new AmsSaleOrderMaterial();
  356. // 收货地址id
  357. BigDecimal shippingAddressId = DataChange.dataToBigDecimal(map.get("saleShipperAddressId"));
  358. String place = (String) (map.get("place"));
  359. if (place != null) {
  360. List<Map<String, Object>> placeIdList = amsSaleOrderMaterialMapper.getPlaceId(place,shippingAddressId);
  361. if (placeIdList == null || placeIdList.size() == 0) {
  362. RmsReceivePlace rmsReceivePlace = new RmsReceivePlace();
  363. rmsReceivePlace.setPlaceId(rmsReceivePlaceMapper.selectMaxId());
  364. rmsReceivePlace.setAddressId(shippingAddressId);
  365. rmsReceivePlace.setAddressDeliveryAddress(place);
  366. amsSaleOrderMaterial.setSaleShippingAddressId(rmsReceivePlace.getPlaceId());
  367. rmsReceivePlaceMapper.insertSelective(rmsReceivePlace);
  368. } else {
  369. amsSaleOrderMaterial.setSaleShippingAddressId((BigDecimal) placeIdList.get(0).get("placeId"));
  370. }
  371. }
  372. // 主键
  373. BigDecimal saleOrderMaterialId = amsSaleOrderMaterialMapper.selectMaxId();
  374. amsSaleOrderMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
  375. // 销售订单主键
  376. amsSaleOrderMaterial.setSaleOrderId(saleOrderId);
  377. // 车序号
  378. amsSaleOrderMaterial.setSaleOrderMaterialTruckNo(new BigDecimal(count));
  379. // 截止日期
  380. amsSaleOrderMaterial.setSaleDateOfReceipt(dateOfReceipt);
  381. // 收货方姓名
  382. if (!consigneeName.equals("null") && !consigneeName.equals("undefined")) {
  383. amsSaleOrderMaterial.setSaleOrderConsignee(consigneeName);
  384. }
  385. // 收货方联系方式
  386. if (!consigneeTel.equals("null") && !consigneeTel.equals("undefined")) {
  387. amsSaleOrderMaterial.setSaleOrderConsigneeTel(consigneeTel);
  388. }
  389. // 下发状态
  390. amsSaleOrderMaterial.setIssueStatus(new BigDecimal(2));
  391. /*
  392. 车序号与物资子表
  393. */
  394. AmsSaleTrucknoMaterial amsSaleTrucknoMaterial = new AmsSaleTrucknoMaterial();
  395. // 主键
  396. BigDecimal truckNoMaterialId = amsSaleTrucknoMaterialMapper.selectMaxId();
  397. amsSaleTrucknoMaterial.setTrucknoMaterialId(truckNoMaterialId);
  398. // 销售订单-物资中间表id
  399. amsSaleTrucknoMaterial.setMaterialId(saleMaterialId);
  400. // 车序号主键
  401. amsSaleTrucknoMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
  402. // 物资重量
  403. amsSaleTrucknoMaterial.setSaleOrderMaterialNumber(materialNumber);
  404. /*
  405. 定向派单表
  406. */
  407. AmsDispatchSaleOrder amsDispatchSaleOrder = new AmsDispatchSaleOrder();
  408. // 主键
  409. BigDecimal dispatchId = amsDispatchSaleOrderMapper.selectOtherId();
  410. amsDispatchSaleOrder.setDispatchId(dispatchId);
  411. // 车序号表id
  412. amsDispatchSaleOrder.setSaleOrderMaterialId(saleOrderMaterialId);
  413. // 承运商id
  414. amsDispatchSaleOrder.setCarrierId(carrierId);
  415. // 派单时间和成交时间
  416. amsDispatchSaleOrder.setDispatchTime(new Date());
  417. amsDispatchSaleOrder.setDispatchDealTime(new Date());
  418. // 成交类型
  419. amsDispatchSaleOrder.setDispatchType(new BigDecimal(0));
  420. // 车序号状态
  421. amsDispatchSaleOrder.setDispatchStatus(new BigDecimal(2));
  422. /*
  423. 运输订单
  424. */
  425. OmstruckOrder omstruckOrder = new OmstruckOrder();
  426. // 运输订单主键
  427. BigDecimal orderId = omstruckOrderMapper.selectMaxId();
  428. omstruckOrder.setOrderId(orderId);
  429. // 车序号主键
  430. omstruckOrder.setOrderPlanId(saleOrderMaterialId);
  431. //添加承运商ID 和 运价ID
  432. // Object priceId = map.get("priceId");
  433. Object priceId = map.get("priceId");
  434. if (priceId != null) {
  435. omstruckOrder.setPriceId(DataChange.dataToBigDecimal(priceId));
  436. }
  437. omstruckOrder.setCarrierId(carrierId);
  438. // 运输订单号
  439. omstruckOrder.setOrderNumber(DataChange.generateEightDigitsNumber("WYSDD",orderId.intValue()));
  440. // 运力id
  441. omstruckOrder.setCapacityId(capacityId);
  442. // 承运商
  443. omstruckOrder.setCarrierId(carrierId);
  444. // 下发时间
  445. omstruckOrder.setOrderIssueTime(new Date());
  446. // 运单状态
  447. omstruckOrder.setOrderStatus(new BigDecimal(4));
  448. BigDecimal status;
  449. // 钢材
  450. if (isSteel != null && isSteel.intValue() == 1) {
  451. status = new BigDecimal(1);
  452. }
  453. // 非钢材(危化品,焦炭,副产品)
  454. else {
  455. status = new BigDecimal(2);
  456. }
  457. // 订单类型
  458. omstruckOrder.setOrderType(status);
  459. // 运输线路id
  460. omstruckOrder.setLineId(lineId);
  461. omstruckOrder.setInsertTime(new Date());
  462. /*
  463. 运输订单子表
  464. */
  465. OmstruckOrderMaterial omstruckOrderMaterial = new OmstruckOrderMaterial();
  466. // 主键
  467. BigDecimal orderMaterialId = omstruckOrderMaterialMapper.selectMaxId();
  468. omstruckOrderMaterial.setOrderMaterialId(orderMaterialId);
  469. // 运输订单id
  470. omstruckOrderMaterial.setOrderId(orderId);
  471. // 物资id
  472. omstruckOrderMaterial.setMaterialId(materialId);
  473. // 物资重量
  474. omstruckOrderMaterial.setOrderMaterialWeight(materialNumber);
  475. omstruckOrderMaterial.setInsertTime(new Date());
  476. // 新增车序号表
  477. result += amsSaleOrderMaterialMapper.insertSelective(amsSaleOrderMaterial);
  478. // 新增车序号-物资中间表
  479. result += amsSaleTrucknoMaterialMapper.insertSelective(amsSaleTrucknoMaterial);
  480. // 新增定向派单表
  481. result += amsDispatchSaleOrderMapper.insertSelective(amsDispatchSaleOrder);
  482. // 新增运输订单
  483. result += omstruckOrderMapper.insertSelective(omstruckOrder);
  484. // 新增运输订单子表
  485. result += omstruckOrderMaterialMapper.insertSelective(omstruckOrderMaterial);
  486. // 调用websocket
  487. Map<String,Object> orderIdMap = new HashMap<>();
  488. orderIdMap.put("orderId",orderId);
  489. pushMesToWebsocket(orderIdMap);
  490. // 生成运输执行总实绩
  491. result += tmsTruckFeign.addTotalResult(orderIdMap);
  492. // 车序号累加
  493. count++;
  494. }
  495. return result;
  496. }
  497. /**
  498. * 承运商直接派发销售订单
  499. * @param mapValue
  500. * @return
  501. */
  502. @Override
  503. public int dispatchTruckOrderByCarrier(Map<String, Object> mapValue) {
  504. int result = 0;
  505. // 得到列内容
  506. List<Map<String,Object>> mapList = (List<Map<String, Object>>) mapValue.get("mapList");
  507. // 销售订单主键
  508. BigDecimal saleOrderId = DataChange.dataToBigDecimal(mapValue.get("saleOrderId"));
  509. // 得到最大的车序号
  510. BigDecimal count = DataChange.dataToBigDecimal(mapValue.get("truckNo"));
  511. // 车序号计数
  512. if (count.intValue() == 0) {
  513. count = new BigDecimal(1);
  514. }
  515. // 遍历每一个列
  516. for (Map<String, Object> map : mapList) {
  517. // 销售订单-物资中间表id
  518. BigDecimal saleMaterialId = DataChange.dataToBigDecimal(map.get("saleMaterialId"));
  519. // 物资id
  520. BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId"));
  521. // 收货地址id
  522. BigDecimal saleShippingAddressId = DataChange.dataToBigDecimal(map.get("saleShippingAddressId"));
  523. if (saleShippingAddressId.intValue() == 0) {
  524. saleShippingAddressId = null;
  525. }
  526. // 承运商id
  527. BigDecimal carrierId = DataChange.dataToBigDecimal(map.get("carrierId"));
  528. // 运输线路id
  529. BigDecimal lineId = DataChange.dataToBigDecimal(map.get("lineId"));
  530. // 通过线路id判断是否是钢材
  531. BigDecimal isSteel = amsSaleOrderMaterialMapper.getIsSteel(lineId);
  532. // 物资重量
  533. BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("orderPlanWeight"));
  534. // 车牌号
  535. String capacityNumber = (String) map.get("capacityNumber");
  536. // 得到运力id
  537. BigDecimal capacityId = amsSaleOrderMaterialMapper.getCapacityId(capacityNumber);
  538. // 收货方姓名
  539. String consigneeName = String.valueOf(map.get("saleOrderConsignee"));
  540. // 收货方电话
  541. String consigneeTel = String.valueOf(map.get("saleOrderConsigneeTel"));
  542. // 截止日期
  543. String dateOfReceiptStr = "4102415999000";
  544. Date dateOfReceipt = new Date(Long.valueOf(dateOfReceiptStr));
  545. /*
  546. 车序号表
  547. */
  548. AmsSaleOrderMaterial amsSaleOrderMaterial = new AmsSaleOrderMaterial();
  549. // 主键
  550. BigDecimal saleOrderMaterialId = amsSaleOrderMaterialMapper.selectMaxId();
  551. amsSaleOrderMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
  552. // 销售订单主键
  553. amsSaleOrderMaterial.setSaleOrderId(saleOrderId);
  554. // 车序号
  555. amsSaleOrderMaterial.setSaleOrderMaterialTruckNo(count);
  556. // 收货地址
  557. amsSaleOrderMaterial.setSaleShippingAddressId(saleShippingAddressId);
  558. // 截止日期
  559. amsSaleOrderMaterial.setSaleDateOfReceipt(dateOfReceipt);
  560. // 收货方姓名
  561. if (!consigneeName.equals("null") && !consigneeName.equals("undefined")) {
  562. amsSaleOrderMaterial.setSaleOrderConsignee(consigneeName);
  563. }
  564. // 收货方联系方式
  565. if (!consigneeTel.equals("null") && !consigneeTel.equals("undefined")) {
  566. amsSaleOrderMaterial.setSaleOrderConsigneeTel(consigneeTel);
  567. }
  568. // 下发状态
  569. amsSaleOrderMaterial.setIssueStatus(new BigDecimal(2));
  570. /*
  571. 车序号与物资子表
  572. */
  573. AmsSaleTrucknoMaterial amsSaleTrucknoMaterial = new AmsSaleTrucknoMaterial();
  574. // 主键
  575. BigDecimal truckNoMaterialId = amsSaleTrucknoMaterialMapper.selectMaxId();
  576. amsSaleTrucknoMaterial.setTrucknoMaterialId(truckNoMaterialId);
  577. // 销售订单-物资中间表id
  578. amsSaleTrucknoMaterial.setMaterialId(saleMaterialId);
  579. // 车序号主键
  580. amsSaleTrucknoMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
  581. // 物资重量
  582. amsSaleTrucknoMaterial.setSaleOrderMaterialNumber(materialNumber);
  583. /*
  584. 定向派单表
  585. */
  586. AmsDispatchSaleOrder amsDispatchSaleOrder = new AmsDispatchSaleOrder();
  587. // 主键
  588. BigDecimal dispatchId = amsDispatchSaleOrderMapper.selectOtherId();
  589. amsDispatchSaleOrder.setDispatchId(dispatchId);
  590. // 车序号表id
  591. amsDispatchSaleOrder.setSaleOrderMaterialId(saleOrderMaterialId);
  592. // 承运商id
  593. amsDispatchSaleOrder.setCarrierId(carrierId);
  594. // 派单时间和成交时间
  595. amsDispatchSaleOrder.setDispatchTime(new Date());
  596. amsDispatchSaleOrder.setDispatchDealTime(new Date());
  597. // 成交类型
  598. amsDispatchSaleOrder.setDispatchType(new BigDecimal(0));
  599. // 车序号状态
  600. amsDispatchSaleOrder.setDispatchStatus(new BigDecimal(2));
  601. /*
  602. 运输订单
  603. */
  604. OmstruckOrder omstruckOrder = new OmstruckOrder();
  605. String orgCode =(String) mapValue.get("orgCode");
  606. if (orgCode==null||orgCode.equals("")){
  607. }else {
  608. omstruckOrder.setOptionerCode(orgCode);
  609. }
  610. // 运输订单主键
  611. BigDecimal orderId = omstruckOrderMapper.selectMaxId();
  612. omstruckOrder.setOrderId(orderId);
  613. omstruckOrder.setCarrierId(carrierId);
  614. // 车序号主键
  615. omstruckOrder.setOrderPlanId(saleOrderMaterialId);
  616. // 运输订单号
  617. omstruckOrder.setOrderNumber(DataChange.generateEightDigitsNumber("WYSDD",orderId.intValue()));
  618. // 运力id
  619. omstruckOrder.setCapacityId(capacityId);
  620. // 下发时间
  621. omstruckOrder.setOrderIssueTime(new Date());
  622. // 承运商
  623. omstruckOrder.setCarrierId(carrierId);
  624. // 运单状态
  625. omstruckOrder.setOrderStatus(new BigDecimal(4));
  626. BigDecimal status;
  627. // 非钢材(危化品和焦炭)
  628. if (isSteel != null && (isSteel.intValue() == 3 || isSteel.intValue() == 4)) {
  629. status = new BigDecimal(2);
  630. }
  631. // 钢材
  632. else {
  633. status = new BigDecimal(1);
  634. }
  635. // 订单类型
  636. omstruckOrder.setOrderType(status);
  637. // 运输线路id
  638. omstruckOrder.setLineId(lineId);
  639. omstruckOrder.setInsertTime(new Date());
  640. /*
  641. 运输订单子表
  642. */
  643. OmstruckOrderMaterial omstruckOrderMaterial = new OmstruckOrderMaterial();
  644. // 主键
  645. BigDecimal orderMaterialId = omstruckOrderMaterialMapper.selectMaxId();
  646. omstruckOrderMaterial.setOrderMaterialId(orderMaterialId);
  647. // 运输订单id
  648. omstruckOrderMaterial.setOrderId(orderId);
  649. // 物资id
  650. omstruckOrderMaterial.setMaterialId(materialId);
  651. // 物资重量
  652. omstruckOrderMaterial.setOrderMaterialWeight(materialNumber);
  653. // 新增车序号表
  654. result += amsSaleOrderMaterialMapper.insertSelective(amsSaleOrderMaterial);
  655. // 新增车序号-物资中间表
  656. result += amsSaleTrucknoMaterialMapper.insertSelective(amsSaleTrucknoMaterial);
  657. // 新增定向派单表
  658. result += amsDispatchSaleOrderMapper.insertSelective(amsDispatchSaleOrder);
  659. // 新增运输订单
  660. result += omstruckOrderMapper.insertSelective(omstruckOrder);
  661. // 新增运输订单子表
  662. result += omstruckOrderMaterialMapper.insertSelective(omstruckOrderMaterial);
  663. // 调用websocket
  664. Map<String,Object> orderIdMap = new HashMap<>();
  665. orderIdMap.put("orderId",orderId);
  666. pushMesToWebsocket(orderIdMap);
  667. // 生成运输执行总实绩
  668. result += tmsTruckFeign.addTotalResult(orderIdMap);
  669. // 车序号累加
  670. count = new BigDecimal(count.intValue() + 1);
  671. }
  672. // 修改状态为开启状态
  673. AmsSaleOrder amsSaleOrder = new AmsSaleOrder();
  674. amsSaleOrder.setSaleOrderId(saleOrderId);
  675. amsSaleOrder.setCloseStatus(new BigDecimal(0));
  676. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  677. return result;
  678. }
  679. /**
  680. * 关闭销售订单
  681. * @param saleOrderId
  682. * @return
  683. */
  684. @Override
  685. public int closeSaleOrder(BigDecimal saleOrderId) {
  686. AmsSaleOrder amsSaleOrder = new AmsSaleOrder();
  687. amsSaleOrder.setSaleOrderId(saleOrderId);
  688. amsSaleOrder.setCloseStatus(new BigDecimal(1));
  689. int result = amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  690. return result;
  691. }
  692. /**
  693. * 发送消息到 websocket 推送消息
  694. * orderId 订单Id
  695. * @return
  696. */
  697. public String pushMesToWebsocket(Map<String, Object> map) {
  698. Map<String, Object> mesMap = omstruckOrderMapper.pushMesToWebsocket(map);
  699. //添加消息实体
  700. HashMap<Object, Object> mapp = new HashMap<>();
  701. mapp.put("messageType", 3);
  702. mapp.put("sendPerson", "system");
  703. mapp.put("receivePerson", mesMap.get("capacityNumber"));
  704. mapp.put("messageContent",(String) mesMap.get("orderNumber") + new Date());
  705. mapp.put("createTime", new Date());
  706. ArrayList<Object> list = new ArrayList<>();
  707. list.add(mapp);
  708. //调用websocket接口推送
  709. HashMap<Object, Object> sendMap = new HashMap<>();
  710. //将消息实体放入list中存到map中
  711. sendMap.put("messages", list);
  712. String s = imFeign.sendToUser(sendMap);
  713. System.out.println(s);
  714. return s;
  715. }
  716. @Override
  717. public Map<String, Object> getPriceMap(Map<String, Object> map) {
  718. Object addressId = map.get("addressId");
  719. String place = (String) map.get("place");
  720. Map<String,Object> priceMap = new HashMap<>();
  721. priceMap.put("addressId",addressId);
  722. priceMap.put("place",place);
  723. BigDecimal priceId = omstruckOrderMapper.getPriceId(priceMap);
  724. BigDecimal priceValue;
  725. if (priceId == null) {
  726. priceValue = omstruckOrderMapper.findMaxPrice(addressId);
  727. if (priceValue != null) {
  728. priceMap.put("priceValue", priceValue);
  729. List<Map<String, Object>> priceIdList = omstruckOrderMapper.findMaxPriceId(priceMap);
  730. priceId = (BigDecimal) priceIdList.get(0).get("priceId");
  731. }
  732. else {
  733. Map<String,Object> map1 = new HashMap<>();
  734. map1.put("priceValue",-1);
  735. map1.put("priceId",-1);
  736. return map1;
  737. }
  738. }
  739. else {
  740. AmsContractTransportPrice amsContractTransportPrice = amsContractTransportPriceMapper.selectByPrimaryKey(priceId);
  741. priceValue = amsContractTransportPrice.getPriceValue();
  742. }
  743. priceMap.put("priceId",priceId);
  744. priceMap.put("priceValue",priceValue);
  745. return priceMap;
  746. }
  747. /**
  748. * 得到单价和单价id
  749. * @param map
  750. * @return
  751. */
  752. @Override
  753. public Map<String, Object> getBenPrice(Map<String, Object> map) {
  754. BigDecimal saleOrderId = DataChange.dataToBigDecimal(map.get("saleOrderId"));
  755. BigDecimal carrierId = DataChange.dataToBigDecimal(map.get("carrierId"));
  756. Map<String, Object> saleMessage = amsSaleOrderMaterialMapper.getSaleMessage(saleOrderId);
  757. String isSelfMention = (String) saleMessage.get("isSelfMention");
  758. BigDecimal receiveId = (BigDecimal) saleMessage.get("receiveId");
  759. BigDecimal priceId = null;
  760. BigDecimal priceValue = null;
  761. Map<String,Object> resultMap = new HashMap<>();
  762. List<Map<String,Object>> mapList = amsSaleOrderMaterialMapper.getPriceList(carrierId);
  763. if ((isSelfMention.equals("否") && receiveId.intValue() == 1516) && (mapList != null && mapList.size() != 0)) {
  764. Map<String, Object> priceMap = mapList.get(1);
  765. priceId = (BigDecimal) priceMap.get("priceId");
  766. priceValue = (BigDecimal) priceMap.get("priceValue");
  767. }
  768. if ((isSelfMention.equals("否") && receiveId.intValue() == 836) && (mapList != null && mapList.size() != 0)) {
  769. Map<String, Object> priceMap = mapList.get(0);
  770. priceId = (BigDecimal) priceMap.get("priceId");
  771. priceValue = (BigDecimal) priceMap.get("priceValue");
  772. }
  773. resultMap.put("priceId",priceId);
  774. resultMap.put("priceValue",priceValue);
  775. return resultMap;
  776. }
  777. }