AmsSaleOrderMaterialServiceImpl.java 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809
  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);
  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);
  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. /*
  462. 运输订单子表
  463. */
  464. OmstruckOrderMaterial omstruckOrderMaterial = new OmstruckOrderMaterial();
  465. // 主键
  466. BigDecimal orderMaterialId = omstruckOrderMaterialMapper.selectMaxId();
  467. omstruckOrderMaterial.setOrderMaterialId(orderMaterialId);
  468. // 运输订单id
  469. omstruckOrderMaterial.setOrderId(orderId);
  470. // 物资id
  471. omstruckOrderMaterial.setMaterialId(materialId);
  472. // 物资重量
  473. omstruckOrderMaterial.setOrderMaterialWeight(materialNumber);
  474. // 新增车序号表
  475. result += amsSaleOrderMaterialMapper.insertSelective(amsSaleOrderMaterial);
  476. // 新增车序号-物资中间表
  477. result += amsSaleTrucknoMaterialMapper.insertSelective(amsSaleTrucknoMaterial);
  478. // 新增定向派单表
  479. result += amsDispatchSaleOrderMapper.insertSelective(amsDispatchSaleOrder);
  480. // 新增运输订单
  481. result += omstruckOrderMapper.insertSelective(omstruckOrder);
  482. // 新增运输订单子表
  483. result += omstruckOrderMaterialMapper.insertSelective(omstruckOrderMaterial);
  484. // 调用websocket
  485. Map<String,Object> orderIdMap = new HashMap<>();
  486. orderIdMap.put("orderId",orderId);
  487. pushMesToWebsocket(orderIdMap);
  488. // 生成运输执行总实绩
  489. result += tmsTruckFeign.addTotalResult(orderIdMap);
  490. // 车序号累加
  491. count++;
  492. }
  493. return result;
  494. }
  495. /**
  496. * 承运商直接派发销售订单
  497. * @param mapValue
  498. * @return
  499. */
  500. @Override
  501. public int dispatchTruckOrderByCarrier(Map<String, Object> mapValue) {
  502. int result = 0;
  503. // 得到列内容
  504. List<Map<String,Object>> mapList = (List<Map<String, Object>>) mapValue.get("mapList");
  505. // 销售订单主键
  506. BigDecimal saleOrderId = DataChange.dataToBigDecimal(mapValue.get("saleOrderId"));
  507. // 得到最大的车序号
  508. BigDecimal count = DataChange.dataToBigDecimal(mapValue.get("truckNo"));
  509. // 车序号计数
  510. if (count.intValue() == 0) {
  511. count = new BigDecimal(1);
  512. }
  513. // 遍历每一个列
  514. for (Map<String, Object> map : mapList) {
  515. // 销售订单-物资中间表id
  516. BigDecimal saleMaterialId = DataChange.dataToBigDecimal(map.get("saleMaterialId"));
  517. // 物资id
  518. BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId"));
  519. // 收货地址id
  520. BigDecimal saleShippingAddressId = DataChange.dataToBigDecimal(map.get("saleShippingAddressId"));
  521. if (saleShippingAddressId.intValue() == 0) {
  522. saleShippingAddressId = null;
  523. }
  524. // 承运商id
  525. BigDecimal carrierId = DataChange.dataToBigDecimal(map.get("carrierId"));
  526. // 运输线路id
  527. BigDecimal lineId = DataChange.dataToBigDecimal(map.get("lineId"));
  528. // 通过线路id判断是否是钢材
  529. BigDecimal isSteel = amsSaleOrderMaterialMapper.getIsSteel(lineId);
  530. // 物资重量
  531. BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("orderPlanWeight"));
  532. // 车牌号
  533. String capacityNumber = (String) map.get("capacityNumber");
  534. // 得到运力id
  535. BigDecimal capacityId = amsSaleOrderMaterialMapper.getCapacityId(capacityNumber);
  536. // 收货方姓名
  537. String consigneeName = String.valueOf(map.get("saleOrderConsignee"));
  538. // 收货方电话
  539. String consigneeTel = String.valueOf(map.get("saleOrderConsigneeTel"));
  540. // 截止日期
  541. String dateOfReceiptStr = "4102415999000";
  542. Date dateOfReceipt = new Date(Long.valueOf(dateOfReceiptStr));
  543. /*
  544. 车序号表
  545. */
  546. AmsSaleOrderMaterial amsSaleOrderMaterial = new AmsSaleOrderMaterial();
  547. // 主键
  548. BigDecimal saleOrderMaterialId = amsSaleOrderMaterialMapper.selectMaxId();
  549. amsSaleOrderMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
  550. // 销售订单主键
  551. amsSaleOrderMaterial.setSaleOrderId(saleOrderId);
  552. // 车序号
  553. amsSaleOrderMaterial.setSaleOrderMaterialTruckNo(count);
  554. // 收货地址
  555. amsSaleOrderMaterial.setSaleShippingAddressId(saleShippingAddressId);
  556. // 截止日期
  557. amsSaleOrderMaterial.setSaleDateOfReceipt(dateOfReceipt);
  558. // 收货方姓名
  559. if (!consigneeName.equals("null") && !consigneeName.equals("undefined")) {
  560. amsSaleOrderMaterial.setSaleOrderConsignee(consigneeName);
  561. }
  562. // 收货方联系方式
  563. if (!consigneeTel.equals("null") && !consigneeTel.equals("undefined")) {
  564. amsSaleOrderMaterial.setSaleOrderConsigneeTel(consigneeTel);
  565. }
  566. // 下发状态
  567. amsSaleOrderMaterial.setIssueStatus(new BigDecimal(2));
  568. /*
  569. 车序号与物资子表
  570. */
  571. AmsSaleTrucknoMaterial amsSaleTrucknoMaterial = new AmsSaleTrucknoMaterial();
  572. // 主键
  573. BigDecimal truckNoMaterialId = amsSaleTrucknoMaterialMapper.selectMaxId();
  574. amsSaleTrucknoMaterial.setTrucknoMaterialId(truckNoMaterialId);
  575. // 销售订单-物资中间表id
  576. amsSaleTrucknoMaterial.setMaterialId(saleMaterialId);
  577. // 车序号主键
  578. amsSaleTrucknoMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
  579. // 物资重量
  580. amsSaleTrucknoMaterial.setSaleOrderMaterialNumber(materialNumber);
  581. /*
  582. 定向派单表
  583. */
  584. AmsDispatchSaleOrder amsDispatchSaleOrder = new AmsDispatchSaleOrder();
  585. // 主键
  586. BigDecimal dispatchId = amsDispatchSaleOrderMapper.selectOtherId();
  587. amsDispatchSaleOrder.setDispatchId(dispatchId);
  588. // 车序号表id
  589. amsDispatchSaleOrder.setSaleOrderMaterialId(saleOrderMaterialId);
  590. // 承运商id
  591. amsDispatchSaleOrder.setCarrierId(carrierId);
  592. // 派单时间和成交时间
  593. amsDispatchSaleOrder.setDispatchTime(new Date());
  594. amsDispatchSaleOrder.setDispatchDealTime(new Date());
  595. // 成交类型
  596. amsDispatchSaleOrder.setDispatchType(new BigDecimal(0));
  597. // 车序号状态
  598. amsDispatchSaleOrder.setDispatchStatus(new BigDecimal(2));
  599. /*
  600. 运输订单
  601. */
  602. OmstruckOrder omstruckOrder = new OmstruckOrder();
  603. // 运输订单主键
  604. BigDecimal orderId = omstruckOrderMapper.selectMaxId();
  605. omstruckOrder.setOrderId(orderId);
  606. omstruckOrder.setCarrierId(carrierId);
  607. // 车序号主键
  608. omstruckOrder.setOrderPlanId(saleOrderMaterialId);
  609. // 运输订单号
  610. omstruckOrder.setOrderNumber(DataChange.generateEightDigitsNumber("WYSDD",orderId.intValue()));
  611. // 运力id
  612. omstruckOrder.setCapacityId(capacityId);
  613. // 下发时间
  614. omstruckOrder.setOrderIssueTime(new Date());
  615. // 承运商
  616. omstruckOrder.setCarrierId(carrierId);
  617. // 运单状态
  618. omstruckOrder.setOrderStatus(new BigDecimal(4));
  619. BigDecimal status;
  620. // 非钢材(危化品和焦炭)
  621. if (isSteel != null && (isSteel.intValue() == 3 || isSteel.intValue() == 4)) {
  622. status = new BigDecimal(2);
  623. }
  624. // 钢材
  625. else {
  626. status = new BigDecimal(1);
  627. }
  628. // 订单类型
  629. omstruckOrder.setOrderType(status);
  630. // 运输线路id
  631. omstruckOrder.setLineId(lineId);
  632. /*
  633. 运输订单子表
  634. */
  635. OmstruckOrderMaterial omstruckOrderMaterial = new OmstruckOrderMaterial();
  636. // 主键
  637. BigDecimal orderMaterialId = omstruckOrderMaterialMapper.selectMaxId();
  638. omstruckOrderMaterial.setOrderMaterialId(orderMaterialId);
  639. // 运输订单id
  640. omstruckOrderMaterial.setOrderId(orderId);
  641. // 物资id
  642. omstruckOrderMaterial.setMaterialId(materialId);
  643. // 物资重量
  644. omstruckOrderMaterial.setOrderMaterialWeight(materialNumber);
  645. // 新增车序号表
  646. result += amsSaleOrderMaterialMapper.insertSelective(amsSaleOrderMaterial);
  647. // 新增车序号-物资中间表
  648. result += amsSaleTrucknoMaterialMapper.insertSelective(amsSaleTrucknoMaterial);
  649. // 新增定向派单表
  650. result += amsDispatchSaleOrderMapper.insertSelective(amsDispatchSaleOrder);
  651. // 新增运输订单
  652. result += omstruckOrderMapper.insertSelective(omstruckOrder);
  653. // 新增运输订单子表
  654. result += omstruckOrderMaterialMapper.insertSelective(omstruckOrderMaterial);
  655. // 调用websocket
  656. Map<String,Object> orderIdMap = new HashMap<>();
  657. orderIdMap.put("orderId",orderId);
  658. pushMesToWebsocket(orderIdMap);
  659. // 生成运输执行总实绩
  660. result += tmsTruckFeign.addTotalResult(orderIdMap);
  661. // 车序号累加
  662. count = new BigDecimal(count.intValue() + 1);
  663. }
  664. // 修改状态为开启状态
  665. AmsSaleOrder amsSaleOrder = new AmsSaleOrder();
  666. amsSaleOrder.setSaleOrderId(saleOrderId);
  667. amsSaleOrder.setCloseStatus(new BigDecimal(0));
  668. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  669. return result;
  670. }
  671. /**
  672. * 关闭销售订单
  673. * @param saleOrderId
  674. * @return
  675. */
  676. @Override
  677. public int closeSaleOrder(BigDecimal saleOrderId) {
  678. AmsSaleOrder amsSaleOrder = new AmsSaleOrder();
  679. amsSaleOrder.setSaleOrderId(saleOrderId);
  680. amsSaleOrder.setCloseStatus(new BigDecimal(1));
  681. int result = amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  682. return result;
  683. }
  684. /**
  685. * 发送消息到 websocket 推送消息
  686. * orderId 订单Id
  687. * @return
  688. */
  689. public String pushMesToWebsocket(Map<String, Object> map) {
  690. Map<String, Object> mesMap = omstruckOrderMapper.pushMesToWebsocket(map);
  691. //添加消息实体
  692. HashMap<Object, Object> mapp = new HashMap<>();
  693. mapp.put("messageType", 3);
  694. mapp.put("sendPerson", "system");
  695. mapp.put("receivePerson", mesMap.get("capacityNumber"));
  696. mapp.put("messageContent",(String) mesMap.get("orderNumber") + new Date());
  697. mapp.put("createTime", new Date());
  698. ArrayList<Object> list = new ArrayList<>();
  699. list.add(mapp);
  700. //调用websocket接口推送
  701. HashMap<Object, Object> sendMap = new HashMap<>();
  702. //将消息实体放入list中存到map中
  703. sendMap.put("messages", list);
  704. String s = imFeign.sendToUser(sendMap);
  705. System.out.println(s);
  706. return s;
  707. }
  708. @Override
  709. public Map<String, Object> getPriceMap(Map<String, Object> map) {
  710. Object addressId = map.get("addressId");
  711. String place = (String) map.get("place");
  712. Map<String,Object> priceMap = new HashMap<>();
  713. priceMap.put("addressId",addressId);
  714. priceMap.put("place",place);
  715. BigDecimal priceId = omstruckOrderMapper.getPriceId(priceMap);
  716. BigDecimal priceValue;
  717. if (priceId == null) {
  718. priceValue = omstruckOrderMapper.findMaxPrice(addressId);
  719. if (priceValue != null) {
  720. priceMap.put("priceValue", priceValue);
  721. List<Map<String, Object>> priceIdList = omstruckOrderMapper.findMaxPriceId(priceMap);
  722. priceId = (BigDecimal) priceIdList.get(0).get("priceId");
  723. }
  724. else {
  725. Map<String,Object> map1 = new HashMap<>();
  726. map1.put("priceValue",-1);
  727. map1.put("priceId",-1);
  728. return map1;
  729. }
  730. }
  731. else {
  732. AmsContractTransportPrice amsContractTransportPrice = amsContractTransportPriceMapper.selectByPrimaryKey(priceId);
  733. priceValue = amsContractTransportPrice.getPriceValue();
  734. }
  735. priceMap.put("priceId",priceId);
  736. priceMap.put("priceValue",priceValue);
  737. return priceMap;
  738. }
  739. /**
  740. * 得到单价和单价id
  741. * @param map
  742. * @return
  743. */
  744. @Override
  745. public Map<String, Object> getBenPrice(Map<String, Object> map) {
  746. BigDecimal saleOrderId = DataChange.dataToBigDecimal(map.get("saleOrderId"));
  747. BigDecimal carrierId = DataChange.dataToBigDecimal(map.get("carrierId"));
  748. Map<String, Object> saleMessage = amsSaleOrderMaterialMapper.getSaleMessage(saleOrderId);
  749. String isSelfMention = (String) saleMessage.get("isSelfMention");
  750. BigDecimal receiveId = (BigDecimal) saleMessage.get("receiveId");
  751. BigDecimal priceId = null;
  752. BigDecimal priceValue = null;
  753. Map<String,Object> resultMap = new HashMap<>();
  754. List<Map<String,Object>> mapList = amsSaleOrderMaterialMapper.getPriceList(carrierId);
  755. if ((isSelfMention.equals("否") && receiveId.intValue() == 1516) && (mapList != null && mapList.size() != 0)) {
  756. Map<String, Object> priceMap = mapList.get(1);
  757. priceId = (BigDecimal) priceMap.get("priceId");
  758. priceValue = (BigDecimal) priceMap.get("priceValue");
  759. }
  760. if ((isSelfMention.equals("否") && receiveId.intValue() == 836) && (mapList != null && mapList.size() != 0)) {
  761. Map<String, Object> priceMap = mapList.get(0);
  762. priceId = (BigDecimal) priceMap.get("priceId");
  763. priceValue = (BigDecimal) priceMap.get("priceValue");
  764. }
  765. resultMap.put("priceId",priceId);
  766. resultMap.put("priceValue",priceValue);
  767. return resultMap;
  768. }
  769. /**
  770. * 销售直接选择车牌号派发副产品运输订单
  771. * @param mapValue
  772. * @return
  773. */
  774. @Override
  775. public int dispatchByproductOrderBySale(Map<String, Object> mapValue) {
  776. return 0;
  777. }
  778. }