AmsSaleOrderServiceImpl.java 75 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567
  1. package com.steerinfo.dil.service.impl;
  2. import com.alibaba.druid.support.json.JSONUtils;
  3. import com.steerinfo.dil.feign.JoinFeign;
  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.IAmsSaleOrderService;
  8. import com.steerinfo.dil.util.DataChange;
  9. import com.steerinfo.dil.util.EASDeleteUtil;
  10. import com.steerinfo.dil.util.EASUtil;
  11. import com.steerinfo.dil.util.NumberToWeightUtil;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.stereotype.Service;
  14. import org.springframework.transaction.annotation.Transactional;
  15. import java.math.BigDecimal;
  16. import java.text.ParseException;
  17. import java.text.SimpleDateFormat;
  18. import java.util.*;
  19. /**
  20. * AmsSaleOrder服务实现:
  21. *
  22. * @author generator
  23. * @version 1.0-SNAPSHORT 2021-09-06 07:10
  24. * 类描述
  25. * 修订历史:
  26. * 日期:2021-09-06
  27. * 作者:generator
  28. * 参考:
  29. * 描述:AmsSaleOrder服务实现
  30. * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
  31. * @see null
  32. */
  33. @Service(value = "amsSaleOrderService")
  34. public class AmsSaleOrderServiceImpl implements IAmsSaleOrderService {
  35. @Autowired
  36. private AmsSaleOrderMapper amsSaleOrderMapper;
  37. @Autowired
  38. private AmsSaleOrderMaterialMapper amsSaleOrderMaterialMapper;
  39. @Autowired
  40. private AmsSaleTrucknoMaterialMapper trucknoMaterialMapper;
  41. @Autowired
  42. AmsDispatchSaleOrderMapper amsDispatchSaleOrderMapper;
  43. @Autowired
  44. AmsSaleMaterialMapper amsSaleMaterialMapper;
  45. @Autowired
  46. AmsSaleTrucknoMaterialMapper amsSaleTrucknoMaterialMapper;
  47. @Autowired
  48. RmsReceivePlaceMapper rmsReceivePlaceMapper;
  49. @Autowired
  50. JoinFeign joinFeign;
  51. @Autowired
  52. OmstruckOrderMapper omstruckOrderMapper;
  53. @Autowired
  54. OmstruckOrderMaterialMapper omstruckOrderMaterialMapper;
  55. @Autowired
  56. AmsSaleOrderMaterialServiceImpl amsSaleOrderMaterialService;
  57. @Autowired
  58. TmsTruckFeign tmsTruckFeign;
  59. @Autowired
  60. EASUtil easUtil;
  61. @Autowired
  62. EASDeleteUtil easDeleteUtil;
  63. @Override
  64. public List<Map<String, Object>> getSaleOrderInfo(Map<String, Object> map) {
  65. return amsSaleOrderMapper.getSaleOrderInfo(map);
  66. }
  67. @Override
  68. public List<Map<String, Object>> getSaleOrderReported(Map<String, Object> map) {
  69. return amsSaleOrderMapper.getSaleOrderReported(map);
  70. }
  71. @Override
  72. public List<Map<String, Object>> getSaleOrderDetail(Map<String, Object> map) {
  73. return amsSaleOrderMapper.getSaleOrderDetail(map);
  74. }
  75. @Override
  76. public List<Map<String, Object>> getSalePlanName() {
  77. return amsSaleOrderMapper.getSalePlanName();
  78. }
  79. @Override
  80. public List<Map<String, Object>> getShipperName() {
  81. return amsSaleOrderMapper.getShipperName();
  82. }
  83. @Override
  84. public List<Map<String, Object>> getConsigneeCompanyName() {
  85. return amsSaleOrderMapper.getConsigneeCompanyName();
  86. }
  87. @Override
  88. /**
  89. * map存放为前端获取的amsSaleOrder基础数据以及selectionList物资信息
  90. * map1为基础数据包括,收货地址,收货人等
  91. * map2存放的从selectionList取出的数据,包括物资id,物资名称等。
  92. */
  93. public int addAmsSaleOrder(Map<String, Object> map) throws ParseException {
  94. //获取前端传过来的map,
  95. int i = 0;
  96. Map<String, Object> map1 = (Map<String, Object>) map.get("amsSaleOrder");
  97. AmsSaleOrder amsSaleOrder = new AmsSaleOrder();
  98. Integer id = (amsSaleOrderMapper.selectMaxId()).intValue();
  99. //生成主键id
  100. amsSaleOrder.setSaleOrderId(new BigDecimal(id));
  101. //WXSDD-年月日-8位数的顺序号
  102. String wxsdd = DataChange.generateEightDigitsNumber("WXSDD", id);
  103. amsSaleOrder.setSaleNumber(wxsdd);
  104. //获得是否自提
  105. amsSaleOrder.setSaleOrderIsselfMention((String) map1.get("saleOrderIsselfMention"));
  106. //获取收货地址id
  107. amsSaleOrder.setReceiveId(DataChange.dataToBigDecimal(map1.get("receiveId")));
  108. //获取发货单位id
  109. amsSaleOrder.setShipperId(DataChange.dataToBigDecimal(map1.get("shipperId")));
  110. //获取备注
  111. amsSaleOrder.setSaleRemark((String) map1.get("saleRemark"));
  112. //设置销售订单状态
  113. amsSaleOrder.setSaleOrderStatus(new BigDecimal(0));
  114. amsSaleOrder.setSaleUnitPrice(new BigDecimal(4000));
  115. amsSaleOrder.setSaleOrderTax("13%");
  116. amsSaleOrder.setInsertUsername("admin");
  117. amsSaleOrder.setInsertTime(new Date());
  118. amsSaleOrder.setUpdateUsername("admin");
  119. amsSaleOrder.setUpdateTime(new Date());
  120. amsSaleOrder.setInsertUpdateRemark("无");
  121. amsSaleOrder.setDeleted(new BigDecimal(0));
  122. amsSaleOrder.setSaleOrderStatus(new BigDecimal(0));
  123. //设置收款客户
  124. amsSaleOrder.setSaleOrderReceiveCustomer((String) map1.get("saleOrderReceiveCustomer"));
  125. i += amsSaleOrderMapper.insertSelective(amsSaleOrder);
  126. //获取车序号和物资信息进行新增车序号与物资中间表
  127. //一个销售订单对应多个车序号
  128. List<Map<String, Object>> selectionList = (List<Map<String, Object>>) map.get("selectionList");
  129. for (Map<String, Object> map2 : selectionList) {
  130. BigDecimal materialId = DataChange.dataToBigDecimal(map2.get("materialId"));
  131. Integer cxh = (Integer) map2.get("cxh");
  132. //生成车序号与物资实体
  133. AmsSaleOrderMaterial amsSaleOrderMaterial = new AmsSaleOrderMaterial();
  134. //生成主键
  135. amsSaleOrderMaterial.setSaleOrderMaterialId(amsSaleOrderMaterialMapper.selectMaxId());
  136. amsSaleOrderMaterial.setSaleOrderId(amsSaleOrder.getSaleOrderId());
  137. // 生成定向派单
  138. AmsDispatchSaleOrder amsDispatchSaleOrder = new AmsDispatchSaleOrder();
  139. amsDispatchSaleOrder.setDispatchId(amsDispatchSaleOrderMapper.selectOtherId());
  140. amsDispatchSaleOrder.setSaleOrderMaterialId(amsSaleOrderMaterial.getSaleOrderMaterialId());
  141. //获取收货地址
  142. Integer saleShipperAddressId =(Integer) map2.get("saleShipperAddressId");
  143. amsSaleOrderMaterial.setSaleShippingAddressId(new BigDecimal(saleShipperAddressId));
  144. //根据收货地址查询承运商
  145. Map<String,Object> map4 = amsSaleOrderMapper.selectProvince(saleShipperAddressId);
  146. BigDecimal carrierId = amsSaleOrderMapper.selectCarrierIdByprovince(map4);
  147. //获取收货方电话号码
  148. amsDispatchSaleOrder.setCarrierId(carrierId);
  149. amsDispatchSaleOrder.setDispatchTime(new Date());
  150. //设置成交类型
  151. amsDispatchSaleOrder.setDispatchType(new BigDecimal(0));
  152. //设置下发状态为未下发
  153. amsDispatchSaleOrder.setDispatchStatus(new BigDecimal(1));
  154. amsDispatchSaleOrder.setInsertTime(new Date());
  155. amsDispatchSaleOrder.setInsertUsername("admin");
  156. amsDispatchSaleOrderMapper.insertSelective(amsDispatchSaleOrder);
  157. amsSaleOrderMaterial.setSaleOrderConsigneeTel(map2.get("saleOrderConsigneeTel").toString());
  158. //获取收货日期
  159. String saleDateOfReceipt =(String) map2.get("saleDateOfReceipt");
  160. SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
  161. Date date = simpleDateFormat.parse(saleDateOfReceipt);
  162. amsSaleOrderMaterial.setSaleDateOfReceipt(date);
  163. //获取收货方姓名
  164. amsSaleOrderMaterial.setSaleOrderConsignee((String) map2.get("saleOrderConsignee"));
  165. //设置车序号
  166. amsSaleOrderMaterial.setSaleOrderMaterialTruckNo(new BigDecimal(cxh));
  167. //设置删除状态
  168. amsSaleOrderMaterial.setDeleted(new BigDecimal(0));
  169. i += amsSaleOrderMaterialMapper.insertSelective(amsSaleOrderMaterial);
  170. //新增车序号与物资中间表
  171. AmsSaleTrucknoMaterial trucknoMaterial = new AmsSaleTrucknoMaterial();
  172. trucknoMaterial.setTrucknoMaterialId(trucknoMaterialMapper.selectMaxId());
  173. //设置物资id
  174. trucknoMaterial.setMaterialId(materialId);
  175. //获取车序号物资id
  176. trucknoMaterial.setSaleOrderMaterialId(amsSaleOrderMaterial.getSaleOrderMaterialId());
  177. Integer orderPlanWeight = (Integer) map2.get("orderPlanWeight");
  178. trucknoMaterial.setSaleOrderMaterialNumber(DataChange.dataToBigDecimal(orderPlanWeight));
  179. //获取物资理重
  180. BigDecimal materialTheoreticalWeight = DataChange.dataToBigDecimal(map2.get("materialTheoreticalWeight"));
  181. //判断是否有物资理重
  182. if (materialTheoreticalWeight.intValue() != 0) {
  183. trucknoMaterial.setMaterialTheoreticalWeight(materialTheoreticalWeight);
  184. }
  185. //新增车序号与物资中间表
  186. i += trucknoMaterialMapper.insertSelective(trucknoMaterial);
  187. }
  188. return i;
  189. }
  190. @Override
  191. public int uploadSaleOrder(BigDecimal saleOrderId) {
  192. AmsSaleOrder amsSaleOrder = amsSaleOrderMapper.selectByPrimaryKey(saleOrderId);
  193. // 调用金蝶接口,将销售订单推送到金蝶系统
  194. Map<String, Object> input = joinFeign.getSaleOrder(saleOrderId);
  195. Map<String, Object> head = (Map<String, Object>) input.get("head");
  196. head.put("status","");
  197. // 获得金蝶接口配置
  198. Map<String, Object> totalMap = easUtil.getTotalMap();
  199. // 组装报文
  200. totalMap.put("input",input);
  201. System.out.println(totalMap);
  202. String json = JSONUtils.toJSONString(totalMap);
  203. System.out.println(json);
  204. String s = joinFeign.pushSaleOrderToEas(totalMap);
  205. System.out.println(s);
  206. amsSaleOrder.setSaleOrderStatus(new BigDecimal(1));
  207. return amsSaleOrderMapper.updateByPrimaryKey(amsSaleOrder);
  208. }
  209. @Override
  210. public List<Map<String, Object>> selectBySaleOrderId(BigDecimal saleOrderId) {
  211. return amsSaleOrderMapper.selectBySaleOrderId(saleOrderId);
  212. }
  213. /**
  214. * 修改订单信息、车序号表、车序号物资中间表
  215. *
  216. * @param map
  217. * @return
  218. */
  219. @Override
  220. @Transactional
  221. public int updateAmsSaleOrder(Map<String, Object> map) throws ParseException {
  222. int i = 0;
  223. int j = 0;
  224. Map<String, Object> map1 = (Map<String, Object>) map.get("amsSaleOrder");
  225. AmsSaleOrder amsSaleOrder = new AmsSaleOrder();
  226. //修改销售订单表 更新销售订单基础信息
  227. amsSaleOrder.setSaleOrderId(DataChange.dataToBigDecimal(map1.get("saleOrderId")));
  228. amsSaleOrder.setShipperId(DataChange.dataToBigDecimal(map1.get("shipperId")));
  229. amsSaleOrder.setReceiveId(DataChange.dataToBigDecimal(map1.get("reciveId")));
  230. amsSaleOrder.setSaleOrderIsselfMention((String) map1.get("saleOrderIsselfMention"));
  231. amsSaleOrder.setSaleOrderReceiveCustomer((String) map1.get("saleOrderReciveCustomer"));
  232. amsSaleOrder.setSaleRemark((String) map1.get("saleRemark"));
  233. amsSaleOrder.setUpdateTime(new Date());
  234. i += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  235. //根据销售订单id查找销售车序号和车序号与物资中间表主键
  236. List<Map<String, Object>> map2 = amsSaleOrderMapper.selectSaleOrderMaterialIdBySaleOrderId(DataChange.dataToBigDecimal(map1.get("saleOrderId")));
  237. for (Map<String,Object> Id:map2){
  238. BigDecimal truckNoMaterialId =(BigDecimal) Id.get("TruckNoMaterialId");
  239. BigDecimal saleOrderMaterialId=(BigDecimal) Id.get("saleOrderMaterialId");
  240. //删除对应的车序号表与车序号与物资中间表
  241. j+=amsSaleOrderMaterialMapper.deleteByPrimaryKey(saleOrderMaterialId);
  242. j+=trucknoMaterialMapper.deleteByPrimaryKey(truckNoMaterialId);
  243. }
  244. //新增车序号和物资中间表
  245. //获取车序号和物资信息进行新增车序号与物资中间表
  246. //一个销售订单对应多个车序号
  247. List<Map<String, Object>> selectionList = (List<Map<String, Object>>) map.get("selectionList");
  248. for (Map<String, Object> map3 : selectionList) {
  249. BigDecimal materialId = DataChange.dataToBigDecimal(map3.get("materialId"));
  250. Integer cxh = (Integer) map3.get("cxh");
  251. //生成车序号与物资实体
  252. AmsSaleOrderMaterial amsSaleOrderMaterial = new AmsSaleOrderMaterial();
  253. //生成主键
  254. amsSaleOrderMaterial.setSaleOrderMaterialId(amsSaleOrderMaterialMapper.selectMaxId());
  255. amsSaleOrderMaterial.setSaleOrderId(DataChange.dataToBigDecimal(map1.get("saleOrderId")));
  256. //获取收货地址
  257. amsSaleOrderMaterial.setSaleShippingAddressId(DataChange.dataToBigDecimal(map3.get("saleShipperAddressId")));
  258. //获取收货方电话号码
  259. amsSaleOrderMaterial.setSaleOrderConsigneeTel(map3.get("saleOrderConsigneeTel").toString());
  260. //获取收货日期
  261. String saleDateOfReceipt =(String) map3.get("saleDateOfReceipt");
  262. SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
  263. Date date = simpleDateFormat.parse(saleDateOfReceipt);
  264. amsSaleOrderMaterial.setSaleDateOfReceipt(date);
  265. //获取收货方姓名
  266. amsSaleOrderMaterial.setSaleOrderConsignee((String) map3.get("saleOrderConsignee"));
  267. //设置车序号
  268. amsSaleOrderMaterial.setSaleOrderMaterialTruckNo(new BigDecimal(cxh));
  269. //设置删除状态
  270. amsSaleOrderMaterial.setDeleted(new BigDecimal(0));
  271. i += amsSaleOrderMaterialMapper.insertSelective(amsSaleOrderMaterial);
  272. // 生成定向派单
  273. AmsDispatchSaleOrder amsDispatchSaleOrder = new AmsDispatchSaleOrder();
  274. amsDispatchSaleOrder.setDispatchId(amsDispatchSaleOrderMapper.selectOtherId());
  275. amsDispatchSaleOrder.setSaleOrderMaterialId(amsSaleOrderMaterial.getSaleOrderMaterialId());
  276. //获取收货地址
  277. Integer saleShipperAddressId =(Integer) map3.get("saleShipperAddressId");
  278. amsSaleOrderMaterial.setSaleShippingAddressId(new BigDecimal(saleShipperAddressId));
  279. //根据收货地址查询承运商
  280. Map<String,Object> map4 = amsSaleOrderMapper.selectProvince(saleShipperAddressId);
  281. BigDecimal carrierId = amsSaleOrderMapper.selectCarrierIdByprovince(map4);
  282. //获取收货方电话号码
  283. amsDispatchSaleOrder.setCarrierId(carrierId);
  284. amsDispatchSaleOrder.setDispatchTime(new Date());
  285. //设置成交类型
  286. amsDispatchSaleOrder.setDispatchType(new BigDecimal(0));
  287. //设置下发状态为已下发
  288. amsDispatchSaleOrder.setDispatchStatus(new BigDecimal(0));
  289. amsDispatchSaleOrder.setInsertTime(new Date());
  290. amsDispatchSaleOrder.setInsertUsername("admin");
  291. //新增车序号与物资中间表
  292. AmsSaleTrucknoMaterial trucknoMaterial = new AmsSaleTrucknoMaterial();
  293. trucknoMaterial.setTrucknoMaterialId(trucknoMaterialMapper.selectMaxId());
  294. //设置物资id
  295. trucknoMaterial.setMaterialId(materialId);
  296. //获取车序号物资id
  297. trucknoMaterial.setSaleOrderMaterialId(amsSaleOrderMaterial.getSaleOrderMaterialId());
  298. Integer orderPlanWeight = (Integer) map3.get("orderPlanWeight");
  299. trucknoMaterial.setSaleOrderMaterialNumber(DataChange.dataToBigDecimal(orderPlanWeight));
  300. //获取物资理重
  301. BigDecimal materialTheoreticalWeight = DataChange.dataToBigDecimal(map3.get("materialTheoreticalWeight"));
  302. //判断是否有物资理重
  303. if (materialTheoreticalWeight.intValue() != 0) {
  304. trucknoMaterial.setMaterialTheoreticalWeight(materialTheoreticalWeight);
  305. }
  306. //新增车序号与物资中间表
  307. i += trucknoMaterialMapper.insertSelective(trucknoMaterial);
  308. }
  309. // List<Map<String, Object>> mapList = (List<Map<String, Object>>) map.get("mapList");
  310. // ArrayList<Integer> list = new ArrayList<>();
  311. // for (Map<String, Object> truckMesMap : mapList) {
  312. // //修改车序号表
  313. // BigDecimal saleOrderMaterialId = DataChange.dataToBigDecimal(truckMesMap.get("saleOrderMaterialId"));
  314. // if (!list.contains(saleOrderMaterialId.intValue())) {
  315. // //车序号表专用字段
  316. // BigDecimal saleShipperAddressId = DataChange.dataToBigDecimal(truckMesMap.get("saleShipperAddressId"));
  317. // String saleDateOfReceipt =(String) truckMesMap.get("saleDateOfReceipt");
  318. // SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
  319. // Date date = simpleDateFormat.parse(saleDateOfReceipt);
  320. // String saleOrderConsignee = (String) truckMesMap.get("saleOrderConsignee");
  321. // String saleOrderConsigneeTel = (String) truckMesMap.get("saleOrderConsigneeTel");
  322. // AmsSaleOrderMaterial amsSaleOrderMaterial = new AmsSaleOrderMaterial();
  323. // amsSaleOrderMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
  324. // amsSaleOrderMaterial.setSaleOrderMaterialTruckNo(DataChange.dataToBigDecimal(truckMesMap.get("cxh")));
  325. // amsSaleOrderMaterial.setSaleShippingAddressId(saleShipperAddressId);
  326. // amsSaleOrderMaterial.setSaleDateOfReceipt(date);
  327. // amsSaleOrderMaterial.setSaleOrderConsignee(saleOrderConsignee);
  328. // amsSaleOrderMaterial.setSaleOrderConsigneeTel(saleOrderConsigneeTel);
  329. // i += amsSaleOrderMaterialMapper.updateByPrimaryKeySelective(amsSaleOrderMaterial);
  330. // list.add(saleOrderMaterialId.intValue());
  331. // }
  332. // //修改车车序号物资表
  333. // AmsSaleTrucknoMaterial amsSaleTrucknoMaterial = new AmsSaleTrucknoMaterial();
  334. // amsSaleTrucknoMaterial.setTrucknoMaterialId(DataChange.dataToBigDecimal(truckMesMap.get("trucknoMaterialId")));
  335. // amsSaleTrucknoMaterial.setSaleOrderMaterialNumber(DataChange.dataToBigDecimal(truckMesMap.get("orderPlanWeight")));
  336. // amsSaleTrucknoMaterial.setMaterialId(DataChange.dataToBigDecimal(truckMesMap.get("materialId")));
  337. // i += trucknoMaterialMapper.updateByPrimaryKeySelective(amsSaleTrucknoMaterial);
  338. // }
  339. return i;
  340. }
  341. @Override
  342. public int deleteAmsSaleOrderBySaleOrderId(BigDecimal saleOrderId) {
  343. //删除所有从表信息
  344. //amsSaleOrderMapper.deleteBySaleOrderId(saleOrderId);
  345. AmsSaleOrder amsSaleOrder = amsSaleOrderMapper.selectByPrimaryKey(saleOrderId);
  346. amsSaleOrder.setDeleted(new BigDecimal(1));
  347. return amsSaleOrderMapper.updateByPrimaryKey(amsSaleOrder);
  348. }
  349. @Override
  350. public List<Map<String, Object>> getSaleOrderUpdateLog(Map<String, Object> map) {
  351. return amsSaleOrderMapper.getSaleOrderUpdateLog(map);
  352. }
  353. /**
  354. * 销售公司查询已审核的订单
  355. * @param map
  356. * @return
  357. */
  358. @Override
  359. public List<Map<String, Object>> getSaleOrderListBySaleCompany(Map<String, Object> map) {
  360. return amsSaleOrderMapper.getSaleOrderListBySaleCompany(map);
  361. }
  362. @Override
  363. public List<Map<String, Object>> getAmsSaleOrderApproved(Map<String, Object> map) {
  364. return amsSaleOrderMapper.getAmsSaleOrderApproved(map);
  365. }
  366. @Override
  367. public List<Map<String, Object>> getSaleOrderList(Map<String, Object> mapValue) {
  368. return amsSaleOrderMapper.getSaleOrderList(mapValue);
  369. }
  370. public Map<String, Object> getCarrier(Integer addressId) {
  371. return amsSaleOrderMapper.selectProvince(addressId);
  372. }
  373. /**
  374. * 根据销售订单id查找信息
  375. */
  376. @Override
  377. public Map<String, Object> selectInfoBySaleOrderId(BigDecimal saleOrderId) {
  378. return amsSaleOrderMapper.selectInfoBySaleOrderId(saleOrderId);
  379. }
  380. /**
  381. * 根据销售订单id查找物资信息
  382. *
  383. * @param saleOrderId
  384. * @return
  385. */
  386. @Override
  387. public List<Map<String, Object>> selectMaterialInfoBySaleOrderId(BigDecimal saleOrderId) {
  388. return amsSaleOrderMapper.selectMaterialInfoBySaleOrderId(saleOrderId);
  389. }
  390. @Override
  391. public int addAmsDispatchSaleOrder(List<Map<String, Object>> mapValue) {
  392. int result = 0;
  393. for (Map<String,Object> map : mapValue) {
  394. Integer dispatchId = (Integer)map.get("dispatchId");
  395. AmsDispatchSaleOrder amsDispatchSaleOrder = amsDispatchSaleOrderMapper.selectByPrimaryKey(new BigDecimal(dispatchId));
  396. amsDispatchSaleOrder.setDispatchStatus(new BigDecimal(0));
  397. result = amsDispatchSaleOrderMapper.updateByPrimaryKeySelective(amsDispatchSaleOrder);
  398. }
  399. return result;
  400. }
  401. @Override
  402. public List<Map<String, Object>> getSaleOrderInfoes(Map<String, Object> map) {
  403. return amsSaleOrderMapper.getSaleOrderInfoes(map);
  404. }
  405. @Override
  406. public List<Map<String, Object>> getSaleOrderReportedes(Map<String, Object> map) {
  407. return amsSaleOrderMapper.getSaleOrderReportedes(map);
  408. }
  409. @Override
  410. public List<Map<String, Object>> getSaleOrderListBySaleCompanyes(Map<String, Object> map) {
  411. List<Map<String, Object>> resultList = amsSaleOrderMapper.getSaleOrderListBySaleCompanyes(map);
  412. return resultList;
  413. }
  414. @Override
  415. public List<Map<String, Object>> getAmsSaleOrderApprovedes(Map<String, Object> map) {
  416. List<Map<String,Object>> resultList = amsSaleOrderMapper.getAmsSaleOrderApprovedes(map);
  417. return resultList;
  418. }
  419. /*
  420. * 根据销售订单主键展示销售基本信息、物资信息
  421. * */
  422. @Override
  423. public List<Map<String, Object>> getSaleOrderAndMaterialById(Map<String,Object> mapValue) {
  424. List<Map<String, Object>> mapList=amsSaleOrderMapper.getSaleOrderAndMaterialById(mapValue);
  425. for (Map<String, Object> map : mapList) {
  426. BigDecimal number;
  427. BigDecimal materialNumber = (BigDecimal) map.get("materialNumber");
  428. BigDecimal materialWeight = (BigDecimal) map.get("materialWeight");
  429. if (materialNumber != null && materialNumber.toString().length() != 0) {
  430. number = materialNumber;
  431. }
  432. else {
  433. number = materialWeight;
  434. }
  435. map.put("number",number);
  436. }
  437. return mapList;
  438. }
  439. /**
  440. * 销售焦炭订单
  441. * @param mapValue
  442. * @return
  443. */
  444. @Override
  445. public List<Map<String, Object>> getCokeSaleOrderList(Map<String, Object> mapValue) {
  446. List<Map<String,Object>> mapList = amsSaleOrderMapper.getCokeSaleOrderList(mapValue);
  447. for (Map<String, Object> resultMap : mapList) {
  448. BigDecimal saleOrderId = (BigDecimal) resultMap.get("saleOrderId");
  449. BigDecimal netWeight = amsSaleOrderMapper.getNetWeight(saleOrderId);
  450. BigDecimal carNum = amsSaleOrderMapper.getCarNum(saleOrderId);
  451. resultMap.put("netWeight",netWeight);
  452. resultMap.put("carNum",carNum);
  453. }
  454. return mapList;
  455. }
  456. /**
  457. * 新增钢材销售订单
  458. * @param mapValue
  459. * @return
  460. */
  461. @Override
  462. public int addSteelSaleOrder(Map<String, Object> mapValue) {
  463. List<Map<String,Object>> mapList = (List<Map<String, Object>>) mapValue.get("mapList");
  464. // 得到发货单位
  465. BigDecimal shipperId = DataChange.dataToBigDecimal(mapValue.get("shipperId"));
  466. // 收货单位
  467. BigDecimal receiveId = DataChange.dataToBigDecimal(mapValue.get("receiveId"));
  468. // 是否自提
  469. String isSelfMention = (String) mapValue.get("isSelfMention");
  470. // 备注
  471. String saleRemark = (String) mapValue.get("saleRemark");
  472. // 收款客户
  473. String saleOrderReceiveCustomer = (String) mapValue.get("saleOrderReceiveCustomer");
  474. // 业务员
  475. BigDecimal salerId = DataChange.dataToBigDecimal(mapValue.get("salerId"));
  476. BigDecimal saleOrderId = amsSaleOrderMapper.selectMaxId();
  477. int result = 0;
  478. // 销售订单
  479. AmsSaleOrder amsSaleOrder = new AmsSaleOrder();
  480. amsSaleOrder.setReceiveId(receiveId);
  481. amsSaleOrder.setSaleRemark(saleRemark == null ? "":saleRemark);
  482. amsSaleOrder.setShipperId(shipperId);
  483. amsSaleOrder.setSaleOrderIsselfMention(isSelfMention);
  484. amsSaleOrder.setSaleOrderId(saleOrderId);
  485. amsSaleOrder.setSalerId(salerId);
  486. // 设置钢材订单
  487. amsSaleOrder.setSaleType(new BigDecimal(1));
  488. amsSaleOrder.setSaleNumber(DataChange.generateEightDigitsNumber("WXSDD",saleOrderId.intValue(),"-"));
  489. amsSaleOrder.setInsertTime(new Date());
  490. amsSaleOrder.setInsertUpdateRemark("物流新增销售订单");
  491. amsSaleOrder.setInsertUsername("物流");
  492. amsSaleOrder.setUpdateTime(new Date());
  493. amsSaleOrder.setDeleted(new BigDecimal(0));
  494. amsSaleOrder.setSaleOrderStatus(new BigDecimal(0));
  495. // 税率默认13%
  496. amsSaleOrder.setSaleOrderTax("13%");
  497. // 含税单价某人4000
  498. amsSaleOrder.setSaleUnitPrice(new BigDecimal(4000));
  499. // 收款客户
  500. amsSaleOrder.setSaleOrderReceiveCustomer(saleOrderReceiveCustomer);
  501. // 销售订单物资表
  502. AmsSaleMaterial amsSaleMaterial = new AmsSaleMaterial();
  503. // 车序号物资表
  504. AmsSaleTrucknoMaterial amsSaleTrucknoMaterial = new AmsSaleTrucknoMaterial();
  505. // 遍历每一行
  506. for (Map<String, Object> map : mapList) {
  507. /*
  508. 车序号表
  509. */
  510. // 得到车序号
  511. BigDecimal truckNo = DataChange.dataToBigDecimal(map.get("truckNo"));
  512. Map<String,Object> saleMap = new HashMap<>();
  513. saleMap.put("saleOrderId",saleOrderId);
  514. saleMap.put("saleOrderMaterialTruckNo",truckNo);
  515. // 检测销售订单下的车序号是否已存在
  516. List<AmsSaleOrderMaterial> amsSaleOrderMaterials = amsSaleOrderMaterialMapper.selectByParameters(saleMap);
  517. // 车序号表
  518. AmsSaleOrderMaterial amsSaleOrderMaterial = new AmsSaleOrderMaterial();
  519. if (amsSaleOrderMaterials == null || amsSaleOrderMaterials.size() == 0) {
  520. // 车序号主键
  521. BigDecimal saleOrderMaterialId = amsSaleOrderMaterialMapper.selectMaxId();
  522. BigDecimal shippingAddressId = DataChange.dataToBigDecimal(map.get("shipperAddressId"));
  523. // 车号备注
  524. String truckRemark = (String) (map.get("truckRemark"));
  525. String place = (String) (map.get("place"));
  526. if (place != null && !"null".equals(place)) {
  527. List<Map<String, Object>> placeIdList = amsSaleOrderMaterialMapper.getPlaceId(place,shippingAddressId);
  528. if (placeIdList == null || placeIdList.size() == 0) {
  529. RmsReceivePlace rmsReceivePlace = new RmsReceivePlace();
  530. rmsReceivePlace.setPlaceId(rmsReceivePlaceMapper.selectMaxId());
  531. rmsReceivePlace.setAddressId(shippingAddressId);
  532. rmsReceivePlace.setAddressDeliveryAddress(place);
  533. amsSaleOrderMaterial.setSaleShippingAddressId(rmsReceivePlace.getPlaceId());
  534. rmsReceivePlaceMapper.insertSelective(rmsReceivePlace);
  535. } else {
  536. amsSaleOrderMaterial.setSaleShippingAddressId((BigDecimal) placeIdList.get(0).get("placeId"));
  537. }
  538. }
  539. if (amsSaleOrderMaterial.getSaleShippingAddressId() != null && isSelfMention.equals("否")) {
  540. // 自动匹配承运商
  541. List<Map<String, Object>> carrierList = getCarrierByPlace(amsSaleOrderMaterial.getSaleShippingAddressId());
  542. // 单一承运商才进行匹配
  543. if (carrierList != null && carrierList.size() == 1) {
  544. List<Map<String, Object>> list = new ArrayList<>();
  545. Map<String, Object> map1 = carrierList.get(0);
  546. // 传入车序号主键和承运商id
  547. map1.put("saleOrderMaterialId", saleOrderMaterialId);
  548. map1.put("carrierId", map1.get("value"));
  549. list.add(map1);
  550. dispatchToCarrier(list);
  551. }
  552. }
  553. if (isSelfMention.equals("是")) {
  554. // 根据收货单位id查询出收货单位名称
  555. String consigneeName = amsSaleOrderMapper.selectConsigneeName(receiveId);
  556. // 根据收货单位名称查询承运商id
  557. BigDecimal carrierId = amsSaleOrderMapper.selectCarrierId(consigneeName);
  558. List<Map<String, Object>> list = new ArrayList<>();
  559. Map<String,Object> map1 = new HashMap<>();
  560. // 传入车序号主键和承运商id
  561. if (carrierId != null) {
  562. map1.put("saleOrderMaterialId", saleOrderMaterialId);
  563. map1.put("carrierId", carrierId);
  564. list.add(map1);
  565. dispatchToCarrier(list);
  566. }
  567. }
  568. // 收货方姓名
  569. String consigneeName = String.valueOf(map.get("saleOrderConsignee"));
  570. // 收货方电话
  571. String consigneeTel = String.valueOf(map.get("saleOrderConsigneeTel"));
  572. // 截止日期
  573. String dateOfReceiptStr = String.valueOf(map.get("saleDateOfReceipt"));
  574. Date dateOfReceipt = null;
  575. if (!"null".equals(dateOfReceiptStr) && !"undefined".equals(dateOfReceiptStr)) {
  576. dateOfReceipt = new Date(Long.valueOf(dateOfReceiptStr));
  577. }
  578. amsSaleOrderMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
  579. amsSaleOrderMaterial.setSaleOrderId(saleOrderId);
  580. amsSaleOrderMaterial.setTruckRemark(truckRemark);
  581. amsSaleOrderMaterial.setSaleOrderMaterialTruckNo(truckNo);
  582. if (consigneeName != null && !consigneeName.equals("null")) {
  583. amsSaleOrderMaterial.setSaleOrderConsignee(consigneeName);
  584. }
  585. if (consigneeTel != null && !consigneeTel.equals("null")) {
  586. amsSaleOrderMaterial.setSaleOrderConsigneeTel(consigneeTel);
  587. }
  588. amsSaleOrderMaterial.setSaleDateOfReceipt(dateOfReceipt);
  589. amsSaleOrderMaterial.setInsertTime(new Date());
  590. amsSaleOrderMaterial.setUpdateTime(new Date());
  591. amsSaleOrderMaterial.setInsertUpdateRemark("物流新增");
  592. result += amsSaleOrderMaterialMapper.insertSelective(amsSaleOrderMaterial);
  593. }
  594. else {
  595. amsSaleOrderMaterial = amsSaleOrderMaterials.get(0);
  596. }
  597. /*
  598. 销售订单物资表
  599. */
  600. // 物资
  601. BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId"));
  602. // 物资件数
  603. BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber"));
  604. // 钢材米数
  605. BigDecimal steelMeters = DataChange.dataToBigDecimal(map.get("steelMeters"));
  606. // 是否磅重销售(0:磅重;1:理重)
  607. BigDecimal isPoundSale = DataChange.dataToBigDecimal(map.get("isPoundSale"));
  608. // 销售订单物资表主键
  609. BigDecimal saleMaterialId = amsSaleMaterialMapper.selectMaxId();
  610. amsSaleMaterial.setSaleMaterialId(saleMaterialId);
  611. amsSaleMaterial.setSaleOrderId(saleOrderId);
  612. amsSaleMaterial.setMaterialId(materialId);
  613. amsSaleMaterial.setMaterialNumber(materialNumber);
  614. amsSaleMaterial.setInsertTime(new Date());
  615. amsSaleMaterial.setUpdateTime(new Date());
  616. if (steelMeters != null && !steelMeters.toString().equals("0")) {
  617. amsSaleMaterial.setSteelMeter(steelMeters);
  618. }
  619. amsSaleMaterial.setIsPoundSale(isPoundSale);
  620. amsSaleMaterial.setInsertUpdateRemark("物流新增");
  621. result += amsSaleMaterialMapper.insertSelective(amsSaleMaterial);
  622. /*
  623. 车序号物资表
  624. */
  625. // 车序号物资表主键
  626. BigDecimal truckNoMaterialId = amsSaleTrucknoMaterialMapper.selectMaxId();
  627. amsSaleTrucknoMaterial.setTrucknoMaterialId(truckNoMaterialId);
  628. amsSaleTrucknoMaterial.setSaleOrderMaterialId(amsSaleOrderMaterial.getSaleOrderMaterialId());
  629. amsSaleTrucknoMaterial.setMaterialId(amsSaleMaterial.getSaleMaterialId());
  630. amsSaleTrucknoMaterial.setSaleOrderMaterialNumber(materialNumber);
  631. amsSaleTrucknoMaterial.setInsertTime(new Date());
  632. amsSaleTrucknoMaterial.setUpdateTime(new Date());
  633. amsSaleTrucknoMaterial.setInsertUpdateRemark("物流新增");
  634. result += amsSaleTrucknoMaterialMapper.insertSelective(amsSaleTrucknoMaterial);
  635. }
  636. result += amsSaleOrderMapper.insertSelective(amsSaleOrder);
  637. return result;
  638. }
  639. /**
  640. * 展示销售订单下的车序号和物资
  641. * @param saleOrderId
  642. * @return
  643. */
  644. @Override
  645. public List<Map<String, Object>> getTruckNoAndMaterialList(BigDecimal saleOrderId) {
  646. List<Map<String,Object>> mapList = amsSaleOrderMapper.getTruckNoAndMaterial(saleOrderId);
  647. for (Map<String,Object> map : mapList) {
  648. BigDecimal placeId = (BigDecimal) map.get("placeId");
  649. if (placeId != null) {
  650. List<Map<String, Object>> carrierAndPriceList = getCarrierByPlace(placeId);
  651. map.put("carrierAndPriceList", carrierAndPriceList);
  652. }
  653. }
  654. return mapList;
  655. }
  656. /**
  657. * 销售钢材派车
  658. * @param mapList
  659. * @return
  660. */
  661. @Transactional
  662. @Override
  663. public int dispatchSteelOrder(List<Map<String, Object>> mapList) {
  664. int result = 0;
  665. // 遍历每一行
  666. for (Map<String,Object> map : mapList) {
  667. // 得到车牌号
  668. String capacityNumber = (String) map.get("capacityNumber");
  669. // 得到车序号表主键
  670. BigDecimal saleOrderMaterialId = DataChange.dataToBigDecimal(map.get("saleOrderMaterialId"));
  671. // 得到承运商
  672. BigDecimal carrierId = DataChange.dataToBigDecimal(map.get("carrierId"));
  673. // 查询到车序号的单价
  674. BigDecimal priceId = amsSaleOrderMapper.getOrderPrice(map);
  675. // 运输线路id
  676. BigDecimal lineId = DataChange.dataToBigDecimal(map.get("lineId"));
  677. // 司机电话号码
  678. String driverTel = (String) map.get("driverTel");
  679. BigDecimal isSteel = new BigDecimal(1);
  680. // 得到运力id
  681. BigDecimal capacityId = amsSaleOrderMaterialMapper.getCapacityId(capacityNumber);
  682. if (capacityId == null) {
  683. return 0;
  684. }
  685. List<Map<String,Object>> materialList = amsSaleOrderMaterialMapper.getMaterial(saleOrderMaterialId);
  686. /*
  687. 定向派单表
  688. */
  689. // 通过车序号主键确认定向派单是否已存在
  690. BigDecimal dispatchId0 = amsDispatchSaleOrderMapper.isDispatchExist(saleOrderMaterialId);
  691. if (dispatchId0 == null || dispatchId0.toString().length() == 0) {
  692. AmsDispatchSaleOrder amsDispatchSaleOrder = new AmsDispatchSaleOrder();
  693. // 主键
  694. BigDecimal dispatchId = amsDispatchSaleOrderMapper.selectOtherId();
  695. amsDispatchSaleOrder.setDispatchId(dispatchId);
  696. // 车序号表id
  697. amsDispatchSaleOrder.setSaleOrderMaterialId(saleOrderMaterialId);
  698. // 承运商id
  699. amsDispatchSaleOrder.setCarrierId(carrierId);
  700. // 派单时间和成交时间
  701. amsDispatchSaleOrder.setDispatchTime(new Date());
  702. amsDispatchSaleOrder.setDispatchDealTime(new Date());
  703. // 成交类型
  704. amsDispatchSaleOrder.setDispatchType(new BigDecimal(2));
  705. // 车序号状态
  706. amsDispatchSaleOrder.setDispatchStatus(new BigDecimal(2));
  707. result += amsDispatchSaleOrderMapper.insertSelective(amsDispatchSaleOrder);
  708. }
  709. // 如果已经匹配过承运商或者给某个承运商授权过,则派车时做修改承运商操作
  710. else {
  711. AmsDispatchSaleOrder amsDispatchSaleOrder = amsDispatchSaleOrderMapper.selectByPrimaryKey(dispatchId0);
  712. amsDispatchSaleOrder.setCarrierId(carrierId);
  713. result += amsDispatchSaleOrderMapper.updateByPrimaryKeySelective(amsDispatchSaleOrder);
  714. }
  715. /*
  716. 运输订单
  717. */
  718. OmstruckOrder omstruckOrder = new OmstruckOrder();
  719. Map<String,Object> map1 = new HashMap<>();
  720. map1.put("orderType",new BigDecimal(2));
  721. map1.put("orderPlanId",saleOrderMaterialId);
  722. List<OmstruckOrder> omstruckOrders = omstruckOrderMapper.selectByParameters(map1);
  723. if (omstruckOrders == null || omstruckOrders.size() == 0) {
  724. // 运输订单主键
  725. BigDecimal orderId = omstruckOrderMapper.selectMaxId();
  726. omstruckOrder.setOrderId(orderId);
  727. // 车序号主键
  728. omstruckOrder.setOrderPlanId(saleOrderMaterialId);
  729. //添加承运商ID 和 运价ID
  730. // Object priceId = map.get("priceId");
  731. if (priceId != null) {
  732. omstruckOrder.setPriceId(priceId);
  733. }
  734. else {
  735. omstruckOrder.setPriceId(new BigDecimal(0));
  736. }
  737. omstruckOrder.setCarrierId(carrierId);
  738. // 运输订单号
  739. omstruckOrder.setOrderNumber(DataChange.generateEightDigitsNumber("WYSDD", orderId.intValue()));
  740. // 运力id
  741. omstruckOrder.setCapacityId(capacityId);
  742. // 承运商
  743. omstruckOrder.setCarrierId(carrierId);
  744. // 下发时间
  745. omstruckOrder.setOrderIssueTime(new Date());
  746. // 运单状态
  747. omstruckOrder.setOrderStatus(new BigDecimal(4));
  748. // 司机电话
  749. if (driverTel != null && !"null".equals(driverTel)) {
  750. omstruckOrder.setDriverTel(driverTel);
  751. }
  752. BigDecimal status;
  753. // 钢材
  754. if (isSteel != null && isSteel.intValue() == 1) {
  755. status = new BigDecimal(1);
  756. }
  757. // 非钢材(危化品,焦炭,副产品)
  758. else {
  759. status = new BigDecimal(2);
  760. }
  761. // 订单类型
  762. omstruckOrder.setOrderType(status);
  763. // 运输线路id
  764. omstruckOrder.setLineId(lineId);
  765. omstruckOrder.setInsertTime(new Date());
  766. omstruckOrder.setInsertUsername("");
  767. result += omstruckOrderMapper.insertSelective(omstruckOrder);
  768. }
  769. else {
  770. omstruckOrder = omstruckOrders.get(0);
  771. }
  772. for (Map<String, Object> materialMap : materialList) {
  773. BigDecimal materialId = (BigDecimal) materialMap.get("materialId");
  774. BigDecimal materialWeight = (BigDecimal) materialMap.get("materialWeight");
  775. BigDecimal materialNumber = (BigDecimal) materialMap.get("materialNumber");
  776. /*
  777. 运输订单物资子表
  778. */
  779. OmstruckOrderMaterial omstruckOrderMaterial = new OmstruckOrderMaterial();
  780. // 主键
  781. BigDecimal orderMaterialId = omstruckOrderMaterialMapper.selectMaxId();
  782. omstruckOrderMaterial.setOrderMaterialId(orderMaterialId);
  783. // 运输订单id
  784. omstruckOrderMaterial.setOrderId(omstruckOrder.getOrderId());
  785. // 物资id
  786. omstruckOrderMaterial.setMaterialId(materialId);
  787. // 物资重量
  788. omstruckOrderMaterial.setOrderMaterialWeight(materialWeight);
  789. // 物资件数
  790. omstruckOrderMaterial.setOrderMaterialNumber(materialNumber);
  791. // 新增运输订单子表
  792. result += omstruckOrderMaterialMapper.insertSelective(omstruckOrderMaterial);
  793. }
  794. // 调用websocket
  795. Map<String,Object> orderIdMap = new HashMap<>();
  796. orderIdMap.put("orderId",omstruckOrder.getOrderId());
  797. amsSaleOrderMaterialService.pushMesToWebsocket(orderIdMap);
  798. // 生成运输执行总实绩
  799. result += tmsTruckFeign.addTotalResult(orderIdMap);
  800. }
  801. return result;
  802. }
  803. /**
  804. * 根据详细地址匹配承运商
  805. * @param placeId
  806. * @return
  807. */
  808. @Override
  809. public synchronized List<Map<String,Object>> getCarrierByPlace(BigDecimal placeId) {
  810. BigDecimal addressId = amsSaleOrderMapper.getAddressByPlace(placeId);
  811. List<Map<String,Object>> mapList = amsSaleOrderMapper.getCarrierByPlace(placeId);
  812. return mapList;
  813. }
  814. /**
  815. * 根据详细地址和承运商匹配单价
  816. * @param mapValue
  817. * @return
  818. */
  819. @Override
  820. public Map<String, Object> getPriceByCarrierAndPlace(Map<String, Object> mapValue) {
  821. Map<String,Object> map = amsSaleOrderMapper.getPriceByCarrierAndPlace(mapValue);
  822. return map;
  823. }
  824. /**
  825. * 将车序号下发给承运商
  826. * @param mapList
  827. * @return
  828. */
  829. @Override
  830. public int dispatchToCarrier(List<Map<String,Object>> mapList) {
  831. int result = 0;
  832. // 遍历每一行
  833. for (Map<String, Object> map : mapList) {
  834. // 得到承运商
  835. BigDecimal carrierId =DataChange.dataToBigDecimal(map.get("carrierId"));
  836. // 得到车序号表主键
  837. BigDecimal saleOrderMaterialId =DataChange.dataToBigDecimal(map.get("saleOrderMaterialId"));
  838. AmsDispatchSaleOrder amsDispatchSaleOrder = new AmsDispatchSaleOrder();
  839. BigDecimal dispatchId = amsDispatchSaleOrderMapper.selectOtherId();
  840. amsDispatchSaleOrder.setDispatchId(dispatchId);
  841. amsDispatchSaleOrder.setCarrierId(carrierId);
  842. amsDispatchSaleOrder.setSaleOrderMaterialId(saleOrderMaterialId);
  843. amsDispatchSaleOrder.setInsertTime(new Date());
  844. amsDispatchSaleOrder.setInsertUpdateRemark("授权承运商");
  845. // 派单时间和成交时间
  846. amsDispatchSaleOrder.setDispatchTime(new Date());
  847. amsDispatchSaleOrder.setDispatchDealTime(new Date());
  848. // 成交类型
  849. amsDispatchSaleOrder.setDispatchType(new BigDecimal(2));
  850. // 车序号状态
  851. amsDispatchSaleOrder.setDispatchStatus(new BigDecimal(2));
  852. result += amsDispatchSaleOrderMapper.insertSelective(amsDispatchSaleOrder);
  853. }
  854. return result;
  855. }
  856. @Override
  857. public List<Map<String, Object>> getSaleOrderListToCarrier(Map<String, Object> map) {
  858. List<Map<String, Object>> resultList = amsSaleOrderMapper.getSaleOrderListToCarrier(map);
  859. return resultList;
  860. }
  861. @Override
  862. public List<Map<String, Object>> getSaleOrderListByCarrierSsoId(Map<String, Object> map) {
  863. List<Map<String, Object>> resultList = amsSaleOrderMapper.getSaleOrderListByCarrierSsoId(map);
  864. return resultList;
  865. }
  866. /**
  867. * 同步金蝶删除
  868. * @param saleOrderId
  869. * @return
  870. */
  871. @Override
  872. public int deleteSaleOrderById(BigDecimal saleOrderId) {
  873. int result = 0;
  874. AmsSaleOrder amsSaleOrder = new AmsSaleOrder();
  875. amsSaleOrder.setSaleOrderId(saleOrderId);
  876. amsSaleOrder.setDeleted(new BigDecimal(1));
  877. // 如果是已经上传金蝶的销售订单,则同步删除
  878. AmsSaleOrder amsSaleOrder1 = amsSaleOrderMapper.selectByPrimaryKey(saleOrderId);
  879. if (amsSaleOrder1.getSaleOrderStatus().intValue() == 2 || amsSaleOrder1.getSaleOrderStatus().intValue() == 4) {
  880. Map<String, Object> input = joinFeign.getSaleOrder(saleOrderId);
  881. Map<String, Object> head = (Map<String, Object>) input.get("head");
  882. head.put("status","close");
  883. // 获得金蝶接口配置
  884. Map<String, Object> totalMap = easUtil.getTotalMap();
  885. // 组装报文
  886. totalMap.put("input",input);
  887. System.out.println(totalMap);
  888. String json = JSONUtils.toJSONString(totalMap);
  889. System.out.println(json);
  890. String s = joinFeign.pushSaleOrderToEas(totalMap);
  891. System.out.println(s);
  892. }
  893. // 如果是副产品订单则关闭时同步关闭未进厂的运单
  894. Map<String,Object> map = new HashMap<>();
  895. map.put("saleOrderId",saleOrderId);
  896. List<AmsSaleMaterial> amsSaleMaterials = amsSaleMaterialMapper.selectByParameters(map);
  897. if (amsSaleMaterials != null && amsSaleMaterials.get(0).getSaleWarehouse().equals("副产品库")) {
  898. result += amsSaleOrderMapper.closeOrderNotIn(saleOrderId);
  899. }
  900. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  901. return result;
  902. }
  903. /**
  904. * 查询出销售订单下的所有数据
  905. * @param saleOrderId
  906. * @return
  907. */
  908. @Override
  909. public Map<String, Object> getAllSaleMessages(BigDecimal saleOrderId) {
  910. Map<String,Object> saleMap = amsSaleOrderMapper.getSaleMapMessages(saleOrderId);
  911. List<Map<String,Object>> mapList = amsSaleOrderMapper.getSaleListMessages(saleOrderId);
  912. saleMap.put("mapList",mapList);
  913. return saleMap;
  914. }
  915. /**
  916. * 修改承运商授权
  917. * @param mapValue
  918. * @return
  919. */
  920. @Override
  921. public int updateTruckNoCarrier(Map<String, Object> mapValue) {
  922. BigDecimal carrierId = DataChange.dataToBigDecimal(mapValue.get("carrierId"));
  923. mapValue.remove("carrierId");
  924. List<AmsDispatchSaleOrder> amsDispatchSaleOrders = amsDispatchSaleOrderMapper.selectByParameters(mapValue);
  925. AmsDispatchSaleOrder amsDispatchSaleOrder = amsDispatchSaleOrders.get(0);
  926. amsDispatchSaleOrder.setCarrierId(carrierId);
  927. int result = amsDispatchSaleOrderMapper.updateByPrimaryKeySelective(amsDispatchSaleOrder);
  928. return result;
  929. }
  930. /**
  931. * 批量上传销售订单至金蝶
  932. * @param saleOrderIdList
  933. * @return
  934. */
  935. @Override
  936. public int uploadSaleOrderList(List<Map<String, Object>> saleOrderIdList) {
  937. int result = 0;
  938. for (Map<String, Object> map : saleOrderIdList) {
  939. AmsSaleOrder amsSaleOrder = new AmsSaleOrder();
  940. BigDecimal saleOrderId = DataChange.dataToBigDecimal(map.get("saleOrderId"));
  941. // 调用金蝶接口,将销售订单推送到金蝶系统
  942. Map<String, Object> input = joinFeign.getSaleOrder(saleOrderId);
  943. // 获得金蝶接口配置
  944. Map<String, Object> totalMap = easUtil.getTotalMap();
  945. // 组装报文
  946. totalMap.put("input",input);
  947. System.out.println(totalMap);
  948. String json = JSONUtils.toJSONString(totalMap);
  949. System.out.println(json);
  950. String s = joinFeign.pushSaleOrderToEas(totalMap);
  951. System.out.println(s);
  952. amsSaleOrder.setSaleOrderId(saleOrderId);
  953. amsSaleOrder.setSaleOrderStatus(new BigDecimal(1));
  954. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  955. }
  956. return result;
  957. }
  958. /**
  959. * 新增钒渣销售订单
  960. * @param mapValue
  961. * @return
  962. */
  963. @Override
  964. public int addVanadiumSaleOrder(Map<String, Object> mapValue) {
  965. List<Map<String,Object>> mapList = (List<Map<String, Object>>) mapValue.get("mapList");
  966. // 得到发货单位
  967. BigDecimal shipperId = DataChange.dataToBigDecimal(mapValue.get("shipperId"));
  968. // 收货单位
  969. BigDecimal receiveId = DataChange.dataToBigDecimal(mapValue.get("receiveId"));
  970. // 是否自提
  971. String isSelfMention = (String) mapValue.get("isSelfMention");
  972. // 备注
  973. String saleRemark = (String) mapValue.get("saleRemark");
  974. // 收款客户
  975. String saleOrderReceiveCustomer = (String) mapValue.get("saleOrderReceiveCustomer");
  976. // 业务员
  977. BigDecimal salerId = DataChange.dataToBigDecimal(mapValue.get("salerId"));
  978. BigDecimal saleOrderId = amsSaleOrderMapper.selectMaxId();
  979. int result = 0;
  980. // 销售订单
  981. AmsSaleOrder amsSaleOrder = new AmsSaleOrder();
  982. amsSaleOrder.setReceiveId(receiveId);
  983. amsSaleOrder.setSaleRemark(saleRemark == null ? "":saleRemark);
  984. amsSaleOrder.setShipperId(shipperId);
  985. amsSaleOrder.setSaleOrderIsselfMention(isSelfMention);
  986. amsSaleOrder.setSaleOrderId(saleOrderId);
  987. amsSaleOrder.setSalerId(salerId);
  988. // 设置钒渣订单
  989. amsSaleOrder.setSaleType(new BigDecimal(2));
  990. amsSaleOrder.setSaleNumber(DataChange.generateEightDigitsNumber("WXSDD",saleOrderId.intValue(),"-"));
  991. amsSaleOrder.setInsertTime(new Date());
  992. amsSaleOrder.setInsertUpdateRemark("物流新增销售订单");
  993. amsSaleOrder.setInsertUsername("物流");
  994. amsSaleOrder.setUpdateTime(new Date());
  995. amsSaleOrder.setDeleted(new BigDecimal(0));
  996. amsSaleOrder.setSaleOrderStatus(new BigDecimal(0));
  997. // 税率默认13%
  998. amsSaleOrder.setSaleOrderTax("13%");
  999. // 含税单价某人4000
  1000. amsSaleOrder.setSaleUnitPrice(new BigDecimal(4000));
  1001. // 收款客户
  1002. amsSaleOrder.setSaleOrderReceiveCustomer(saleOrderReceiveCustomer);
  1003. // 销售订单物资表
  1004. AmsSaleMaterial amsSaleMaterial = new AmsSaleMaterial();
  1005. // 车序号物资表
  1006. AmsSaleTrucknoMaterial amsSaleTrucknoMaterial = new AmsSaleTrucknoMaterial();
  1007. // 遍历每一行
  1008. for (Map<String, Object> map : mapList) {
  1009. /*
  1010. 车序号表
  1011. */
  1012. // 得到车序号
  1013. BigDecimal truckNo = DataChange.dataToBigDecimal(map.get("truckNo"));
  1014. Map<String,Object> saleMap = new HashMap<>();
  1015. saleMap.put("saleOrderId",saleOrderId);
  1016. saleMap.put("saleOrderMaterialTruckNo",truckNo);
  1017. // 检测销售订单下的车序号是否已存在
  1018. List<AmsSaleOrderMaterial> amsSaleOrderMaterials = amsSaleOrderMaterialMapper.selectByParameters(saleMap);
  1019. // 车序号表
  1020. AmsSaleOrderMaterial amsSaleOrderMaterial = new AmsSaleOrderMaterial();
  1021. if (amsSaleOrderMaterials == null || amsSaleOrderMaterials.size() == 0) {
  1022. // 车序号主键
  1023. BigDecimal saleOrderMaterialId = amsSaleOrderMaterialMapper.selectMaxId();
  1024. BigDecimal shippingAddressId = DataChange.dataToBigDecimal(map.get("shipperAddressId"));
  1025. // 车号备注
  1026. String truckRemark = (String) (map.get("truckRemark"));
  1027. String place = (String) (map.get("place"));
  1028. if (place != null && !"null".equals(place)) {
  1029. List<Map<String, Object>> placeIdList = amsSaleOrderMaterialMapper.getPlaceId(place,shippingAddressId);
  1030. if (placeIdList == null || placeIdList.size() == 0) {
  1031. RmsReceivePlace rmsReceivePlace = new RmsReceivePlace();
  1032. rmsReceivePlace.setPlaceId(rmsReceivePlaceMapper.selectMaxId());
  1033. rmsReceivePlace.setAddressId(shippingAddressId);
  1034. rmsReceivePlace.setAddressDeliveryAddress(place);
  1035. amsSaleOrderMaterial.setSaleShippingAddressId(rmsReceivePlace.getPlaceId());
  1036. rmsReceivePlaceMapper.insertSelective(rmsReceivePlace);
  1037. } else {
  1038. amsSaleOrderMaterial.setSaleShippingAddressId((BigDecimal) placeIdList.get(0).get("placeId"));
  1039. }
  1040. }
  1041. if (amsSaleOrderMaterial.getSaleShippingAddressId() != null && isSelfMention.equals("否")) {
  1042. // 自动匹配承运商
  1043. List<Map<String, Object>> carrierList = getCarrierByPlace(amsSaleOrderMaterial.getSaleShippingAddressId());
  1044. // 单一承运商才进行匹配
  1045. if (carrierList != null && carrierList.size() == 1) {
  1046. List<Map<String, Object>> list = new ArrayList<>();
  1047. Map<String, Object> map1 = carrierList.get(0);
  1048. // 传入车序号主键和承运商id
  1049. map1.put("saleOrderMaterialId", saleOrderMaterialId);
  1050. map1.put("carrierId", map1.get("value"));
  1051. list.add(map1);
  1052. dispatchToCarrier(list);
  1053. }
  1054. }
  1055. if (isSelfMention.equals("是")) {
  1056. // 根据收货单位id查询出收货单位名称
  1057. String consigneeName = amsSaleOrderMapper.selectConsigneeName(receiveId);
  1058. // 根据收货单位名称查询承运商id
  1059. BigDecimal carrierId = amsSaleOrderMapper.selectCarrierId(consigneeName);
  1060. List<Map<String, Object>> list = new ArrayList<>();
  1061. Map<String,Object> map1 = new HashMap<>();
  1062. // 传入车序号主键和承运商id
  1063. if (carrierId != null) {
  1064. map1.put("saleOrderMaterialId", saleOrderMaterialId);
  1065. map1.put("carrierId", carrierId);
  1066. list.add(map1);
  1067. dispatchToCarrier(list);
  1068. }
  1069. }
  1070. // 收货方姓名
  1071. String consigneeName = String.valueOf(map.get("saleOrderConsignee"));
  1072. // 收货方电话
  1073. String consigneeTel = String.valueOf(map.get("saleOrderConsigneeTel"));
  1074. // 截止日期
  1075. String dateOfReceiptStr = String.valueOf(map.get("saleDateOfReceipt"));
  1076. Date dateOfReceipt = null;
  1077. if (!"null".equals(dateOfReceiptStr) && !"undefined".equals(dateOfReceiptStr)) {
  1078. dateOfReceipt = new Date(Long.valueOf(dateOfReceiptStr));
  1079. }
  1080. amsSaleOrderMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
  1081. amsSaleOrderMaterial.setSaleOrderId(saleOrderId);
  1082. amsSaleOrderMaterial.setTruckRemark(truckRemark);
  1083. amsSaleOrderMaterial.setSaleOrderMaterialTruckNo(truckNo);
  1084. if (consigneeName != null && !consigneeName.equals("null")) {
  1085. amsSaleOrderMaterial.setSaleOrderConsignee(consigneeName);
  1086. }
  1087. if (consigneeTel != null && !consigneeTel.equals("null")) {
  1088. amsSaleOrderMaterial.setSaleOrderConsigneeTel(consigneeTel);
  1089. }
  1090. amsSaleOrderMaterial.setSaleDateOfReceipt(dateOfReceipt);
  1091. amsSaleOrderMaterial.setInsertTime(new Date());
  1092. amsSaleOrderMaterial.setUpdateTime(new Date());
  1093. amsSaleOrderMaterial.setInsertUpdateRemark("物流新增");
  1094. result += amsSaleOrderMaterialMapper.insertSelective(amsSaleOrderMaterial);
  1095. }
  1096. else {
  1097. amsSaleOrderMaterial = amsSaleOrderMaterials.get(0);
  1098. }
  1099. /*
  1100. 销售订单物资表
  1101. */
  1102. // 物资
  1103. BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId"));
  1104. // 物资件数
  1105. BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber"));
  1106. // 钢材米数
  1107. BigDecimal steelMeters = DataChange.dataToBigDecimal(map.get("steelMeters"));
  1108. // 是否磅重销售(0:磅重;1:理重)
  1109. BigDecimal isPoundSale = DataChange.dataToBigDecimal(map.get("isPoundSale"));
  1110. // 销售订单物资表主键
  1111. BigDecimal saleMaterialId = amsSaleMaterialMapper.selectMaxId();
  1112. amsSaleMaterial.setSaleMaterialId(saleMaterialId);
  1113. amsSaleMaterial.setSaleOrderId(saleOrderId);
  1114. amsSaleMaterial.setMaterialId(materialId);
  1115. amsSaleMaterial.setMaterialNumber(materialNumber);
  1116. amsSaleMaterial.setInsertTime(new Date());
  1117. amsSaleMaterial.setUpdateTime(new Date());
  1118. if (steelMeters != null && !steelMeters.toString().equals("0")) {
  1119. amsSaleMaterial.setSteelMeter(steelMeters);
  1120. }
  1121. amsSaleMaterial.setIsPoundSale(isPoundSale);
  1122. amsSaleMaterial.setInsertUpdateRemark("物流新增");
  1123. result += amsSaleMaterialMapper.insertSelective(amsSaleMaterial);
  1124. /*
  1125. 车序号物资表
  1126. */
  1127. // 车序号物资表主键
  1128. BigDecimal truckNoMaterialId = amsSaleTrucknoMaterialMapper.selectMaxId();
  1129. amsSaleTrucknoMaterial.setTrucknoMaterialId(truckNoMaterialId);
  1130. amsSaleTrucknoMaterial.setSaleOrderMaterialId(amsSaleOrderMaterial.getSaleOrderMaterialId());
  1131. amsSaleTrucknoMaterial.setMaterialId(amsSaleMaterial.getSaleMaterialId());
  1132. amsSaleTrucknoMaterial.setSaleOrderMaterialNumber(materialNumber);
  1133. amsSaleTrucknoMaterial.setInsertTime(new Date());
  1134. amsSaleTrucknoMaterial.setUpdateTime(new Date());
  1135. amsSaleTrucknoMaterial.setInsertUpdateRemark("物流新增");
  1136. result += amsSaleTrucknoMaterialMapper.insertSelective(amsSaleTrucknoMaterial);
  1137. }
  1138. result += amsSaleOrderMapper.insertSelective(amsSaleOrder);
  1139. return result;
  1140. }
  1141. /**
  1142. * 自动匹配出最近的一个地址
  1143. * @param receiveId
  1144. * @return
  1145. */
  1146. @Override
  1147. public List<Map<String, Object>> matchingAddressRecently(BigDecimal receiveId) {
  1148. List<Map<String,Object>> mapList = amsSaleOrderMapper.matchingAddressRecently(receiveId);
  1149. List<Map<String,Object>> salerList = amsSaleOrderMapper.getSalerByReceiveId(receiveId);
  1150. if (mapList != null && mapList.size() != 0) {
  1151. if (salerList != null && salerList.size() !=0) {
  1152. Map<String, Object> salerMap = salerList.get(0);
  1153. for (Map<String, Object> map : mapList) {
  1154. map.putAll(salerMap);
  1155. }
  1156. }
  1157. }
  1158. return mapList;
  1159. }
  1160. /**
  1161. * 自动匹配上一条运单的司机电话
  1162. * @param capacityNumber
  1163. * @return
  1164. */
  1165. @Override
  1166. public String matchingDriverTelRecently(String capacityNumber) {
  1167. String driverTel = amsSaleOrderMapper.matchingDriverTelRecently(capacityNumber);
  1168. return driverTel;
  1169. }
  1170. /**
  1171. * 查询内转焦炭订单
  1172. * @param mapValue
  1173. * @return
  1174. */
  1175. @Override
  1176. public List<Map<String, Object>> getCokeInwardOrderList(Map<String, Object> mapValue) {
  1177. return amsSaleOrderMapper.getCokeInwardOrderList(mapValue);
  1178. }
  1179. /**
  1180. * 修改收货地址
  1181. * @param mapValue
  1182. * @return
  1183. */
  1184. @Override
  1185. public int updateCarAddress(Map<String, Object> mapValue) {
  1186. // 判断是否需要删除金蝶分录
  1187. Integer isCloseEas = (Integer) mapValue.get("isCloseEas");
  1188. // 判断是否需要修改派车
  1189. Object isNewCar = mapValue.get("isNewCar");
  1190. // 销售订单主键
  1191. BigDecimal saleOrderId = DataChange.dataToBigDecimal(mapValue.get("saleOrderId"));
  1192. // 车序号id
  1193. BigDecimal saleOrderMaterialId = DataChange.dataToBigDecimal(mapValue.get("saleOrderMaterialId"));
  1194. int result = 0;
  1195. // 运输订单id
  1196. BigDecimal orderId = DataChange.dataToBigDecimal(mapValue.get("orderId"));
  1197. // 是
  1198. if (isCloseEas == 0 && orderId != null && orderId.intValue() != 0) {
  1199. OmstruckOrder omstruckOrder = new OmstruckOrder();
  1200. omstruckOrder.setOrderId(orderId);
  1201. omstruckOrder.setOrderStatus(new BigDecimal(7));
  1202. omstruckOrderMapper.updateByPrimaryKeySelective(omstruckOrder);
  1203. // 得到销售订单物资表主键
  1204. List<Map<String,Object>> saleMaterialIdList = amsSaleOrderMapper.getSaleMaterialId();
  1205. for (Map<String, Object> map : saleMaterialIdList) {
  1206. // 删除销售订单物资子表
  1207. BigDecimal saleMaterialId = (BigDecimal) map.get("saleMaterialId");
  1208. amsSaleMaterialMapper.deleteByPrimaryKey(saleMaterialId);
  1209. }
  1210. // 调用金蝶接口,将销售订单推送到金蝶系统
  1211. Map<String, Object> input = joinFeign.getSaleOrder(saleOrderId);
  1212. Map<String, Object> head = (Map<String, Object>) input.get("head");
  1213. head.put("status","update");
  1214. // 获得金蝶接口配置
  1215. Map<String, Object> totalMap = easUtil.getTotalMap();
  1216. // 组装报文
  1217. totalMap.put("input",input);
  1218. System.out.println(totalMap);
  1219. String json = JSONUtils.toJSONString(totalMap);
  1220. System.out.println(json);
  1221. String s = joinFeign.pushSaleOrderToEas(totalMap);
  1222. System.out.println(s);
  1223. return 0;
  1224. }
  1225. // 省市县ID
  1226. BigDecimal shippingAddressId = DataChange.dataToBigDecimal(mapValue.get("shipperAddressId"));
  1227. // 具体地址
  1228. String place = (String) mapValue.get("place");
  1229. AmsSaleOrderMaterial amsSaleOrderMaterial = amsSaleOrderMaterialMapper.selectByPrimaryKey(saleOrderMaterialId);
  1230. if (place != null && !"null".equals(place)) {
  1231. List<Map<String, Object>> placeIdList = amsSaleOrderMaterialMapper.getPlaceId(place,shippingAddressId);
  1232. if (placeIdList == null || placeIdList.size() == 0) {
  1233. RmsReceivePlace rmsReceivePlace = new RmsReceivePlace();
  1234. rmsReceivePlace.setPlaceId(rmsReceivePlaceMapper.selectMaxId());
  1235. rmsReceivePlace.setAddressId(shippingAddressId);
  1236. rmsReceivePlace.setAddressDeliveryAddress(place);
  1237. amsSaleOrderMaterial.setSaleShippingAddressId(rmsReceivePlace.getPlaceId());
  1238. rmsReceivePlaceMapper.insertSelective(rmsReceivePlace);
  1239. } else {
  1240. amsSaleOrderMaterial.setSaleShippingAddressId((BigDecimal) placeIdList.get(0).get("placeId"));
  1241. }
  1242. }
  1243. result += amsSaleOrderMaterialMapper.updateByPrimaryKeySelective(amsSaleOrderMaterial);
  1244. // 需要换车
  1245. if ((Integer) isNewCar == 0) {
  1246. // 根据车序号得到定向派单表主键
  1247. BigDecimal dispatchId = amsSaleOrderMapper.getDispatchId(saleOrderMaterialId);
  1248. if (dispatchId != null) {
  1249. amsDispatchSaleOrderMapper.deleteByPrimaryKey(dispatchId);
  1250. }
  1251. if (amsSaleOrderMaterial.getSaleShippingAddressId() != null) {
  1252. // 自动匹配承运商
  1253. List<Map<String, Object>> carrierList = getCarrierByPlace(amsSaleOrderMaterial.getSaleShippingAddressId());
  1254. // 单一承运商才进行匹配
  1255. if (carrierList != null && carrierList.size() == 1) {
  1256. List<Map<String, Object>> list = new ArrayList<>();
  1257. Map<String, Object> map1 = carrierList.get(0);
  1258. // 传入车序号主键和承运商id
  1259. map1.put("saleOrderMaterialId", saleOrderMaterialId);
  1260. map1.put("carrierId", map1.get("value"));
  1261. list.add(map1);
  1262. dispatchToCarrier(list);
  1263. }
  1264. }
  1265. }
  1266. return result;
  1267. }
  1268. /**
  1269. * 展示未匹配承运商的车序号
  1270. * @param mapValue
  1271. * @return
  1272. */
  1273. @Override
  1274. public List<Map<String, Object>> getSteelTruckNoList(Map<String, Object> mapValue) {
  1275. List<Map<String, Object>> resultList = amsSaleOrderMapper.getSteelTruckNoList(mapValue);
  1276. return resultList;
  1277. }
  1278. /**
  1279. * 展示车序号的详情
  1280. * @param saleOrderMaterialId
  1281. * @return
  1282. */
  1283. @Override
  1284. public List<Map<String, Object>> getTruckNoMaterial(BigDecimal saleOrderMaterialId) {
  1285. List<Map<String,Object>> mapList = amsSaleOrderMapper.getTruckNoMaterialAndCarrier(saleOrderMaterialId);
  1286. for (Map<String,Object> map : mapList) {
  1287. BigDecimal placeId = (BigDecimal) map.get("placeId");
  1288. if (placeId != null) {
  1289. List<Map<String, Object>> carrierAndPriceList = getCarrierByPlace(placeId);
  1290. map.put("carrierAndPriceList", carrierAndPriceList);
  1291. }
  1292. }
  1293. return mapList;
  1294. }
  1295. /**
  1296. * 展示已分配承运商但未派车的车序号
  1297. * @param mapValue
  1298. * @return
  1299. */
  1300. @Override
  1301. public List<Map<String, Object>> getNoCarTruckNoList(Map<String, Object> mapValue) {
  1302. List<Map<String, Object>> resultList = amsSaleOrderMapper.getCarrierTruckNoList(mapValue);
  1303. return resultList;
  1304. }
  1305. /**
  1306. * 展示已派车的车序号
  1307. * @param mapValue
  1308. * @return
  1309. */
  1310. @Override
  1311. public List<Map<String, Object>> getHaveCarTruckNoList(Map<String, Object> mapValue) {
  1312. List<Map<String, Object>> resultList = amsSaleOrderMapper.getHaveCarTruckNoList(mapValue);
  1313. return resultList;
  1314. }
  1315. /**
  1316. * 修改销售订单中的物资
  1317. * @param mapValue
  1318. * @return
  1319. */
  1320. @Override
  1321. public int updateAllMaterialInSale(Map<String, Object> mapValue) {
  1322. int result = 0;
  1323. // 得到销售订单主键
  1324. BigDecimal saleOrderId = DataChange.dataToBigDecimal(mapValue.get("saleOrderId"));
  1325. BigDecimal saleOrderMaterialId = DataChange.dataToBigDecimal(mapValue.get("saleOrderMaterialId"));
  1326. BigDecimal orderId = DataChange.dataToBigDecimal(mapValue.get("orderId"));
  1327. // 得到运单中的物资
  1328. List<Map<String, Object>> oldList = omstruckOrderMaterialMapper.getMaterialList(orderId);
  1329. Map<String, Object> toTmsMap = new HashMap<>();
  1330. Map<String, Object> truckNoMap = new HashMap<>();
  1331. truckNoMap.put("saleOrderMaterialId",saleOrderMaterialId);
  1332. toTmsMap.put("orderId", orderId);
  1333. toTmsMap.put("oldList", oldList);
  1334. // 得到所有的物资
  1335. List<Map<String, Object>> mapList = (List<Map<String, Object>>) mapValue.get("mapList");
  1336. /*
  1337. 删除三个物资表数据
  1338. */
  1339. List<AmsSaleTrucknoMaterial> amsSaleTrucknoMaterials = amsSaleTrucknoMaterialMapper.selectByParameters(truckNoMap);
  1340. for (AmsSaleTrucknoMaterial amsSaleTrucknoMaterial : amsSaleTrucknoMaterials) {
  1341. // 销售订单物资子表
  1342. amsSaleMaterialMapper.deleteByPrimaryKey(amsSaleTrucknoMaterial.getMaterialId());
  1343. // 车序号子表
  1344. amsSaleTrucknoMaterialMapper.deleteByPrimaryKey(amsSaleTrucknoMaterial.getTrucknoMaterialId());
  1345. }
  1346. // 运输订单物资子表
  1347. // 新增拼数/修改拼数
  1348. for (Map<String, Object> map : mapList) {
  1349. BigDecimal saleMaterialId = DataChange.dataToBigDecimal(map.get("saleMaterialId"));
  1350. BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId"));
  1351. BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("orderPlanWeight"));
  1352. BigDecimal trucknoMaterialId = DataChange.dataToBigDecimal(map.get("trucknoMaterialId"));
  1353. BigDecimal isPoundSale = DataChange.dataToBigDecimal(map.get("isPound"));
  1354. Object steelMeter = map.get("meterNumber");
  1355. Object easId = map.get("easId");
  1356. Object warehouse = map.get("warehouse");
  1357. // 销售订单分录表
  1358. AmsSaleMaterial amsSaleMaterial = new AmsSaleMaterial();
  1359. // 车序号子表
  1360. AmsSaleTrucknoMaterial amsSaleTrucknoMaterial = new AmsSaleTrucknoMaterial();
  1361. // 运输订单子表
  1362. OmstruckOrderMaterial omstruckOrderMaterial = new OmstruckOrderMaterial();
  1363. // // 判断是否要新增运输订单子表
  1364. // Map<String, Object> orderMap = new HashMap<>();
  1365. // orderMap.put("orderId", orderId);
  1366. // orderMap.put("materialId", materialId);
  1367. // List<OmstruckOrderMaterial> omstruckOrderMaterials = omstruckOrderMaterialMapper.selectByParameters(orderMap);
  1368. // BigDecimal orderMaterialId;
  1369. // if (omstruckOrderMaterials == null || omstruckOrderMaterials.size() == 0) {
  1370. // orderMaterialId = omstruckOrderMaterialMapper.selectMaxId();
  1371. // omstruckOrderMaterial.setOrderMaterialId(orderMaterialId);
  1372. // omstruckOrderMaterial.setOrderId(orderId);
  1373. // omstruckOrderMaterial.setInsertTime(new Date());
  1374. // omstruckOrderMaterial.setInsertUsername("新增拼数");
  1375. // } else {
  1376. // omstruckOrderMaterial = omstruckOrderMaterials.get(0);
  1377. // }
  1378. // omstruckOrderMaterial.setMaterialId(materialId);
  1379. // omstruckOrderMaterial.setOrderMaterialNumber(materialNumber);
  1380. // omstruckOrderMaterial.setUpdateTime(new Date());
  1381. // if (omstruckOrderMaterials == null || omstruckOrderMaterials.size() == 0) {
  1382. // result += omstruckOrderMaterialMapper.insertSelective(omstruckOrderMaterial);
  1383. // } else {
  1384. // result += omstruckOrderMaterialMapper.updateByPrimaryKeySelective(omstruckOrderMaterial);
  1385. // }
  1386. // // 判断是否是新增的拼数
  1387. // if (saleMaterialId == null || saleMaterialId.intValue() == 0) {
  1388. // saleMaterialId = amsSaleMaterialMapper.selectMaxId();
  1389. // trucknoMaterialId = amsSaleTrucknoMaterialMapper.selectMaxId();
  1390. // amsSaleMaterial.setInsertTime(new Date());
  1391. // amsSaleMaterial.setInsertUsername("修改时加拼数");
  1392. // amsSaleTrucknoMaterial.setInsertTime(new Date());
  1393. // amsSaleTrucknoMaterial.setInsertUsername("修改时加拼数");
  1394. // }
  1395. // // 车序号子表
  1396. // amsSaleTrucknoMaterial.setTrucknoMaterialId(trucknoMaterialId);
  1397. // amsSaleTrucknoMaterial.setMaterialId(saleMaterialId);
  1398. // amsSaleTrucknoMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
  1399. // amsSaleTrucknoMaterial.setUpdateTime(new Date());
  1400. // // 销售订单物资表
  1401. // amsSaleMaterial.setSaleMaterialId(saleMaterialId);
  1402. // amsSaleMaterial.setMaterialNumber(materialNumber);
  1403. // amsSaleMaterial.setSaleOrderId(saleOrderId);
  1404. // amsSaleMaterial.setMaterialId(materialId);
  1405. // amsSaleMaterial.setIsPoundSale(isPoundSale);
  1406. // amsSaleMaterial.setUpdateTime(new Date());
  1407. // if (steelMeter != null) {
  1408. // amsSaleMaterial.setSteelMeter(new BigDecimal(steelMeter.toString()));
  1409. // }
  1410. // if (map.get("saleOrderId") == null) {
  1411. // result += amsSaleMaterialMapper.insertSelective(amsSaleMaterial);
  1412. // result += amsSaleTrucknoMaterialMapper.insertSelective(amsSaleTrucknoMaterial);
  1413. // } else {
  1414. // result += amsSaleMaterialMapper.updateByPrimaryKeySelective(amsSaleMaterial);
  1415. // result += amsSaleTrucknoMaterialMapper.updateByPrimaryKeySelective(amsSaleTrucknoMaterial);
  1416. // }
  1417. }
  1418. // 得到运单中的物资
  1419. List<Map<String, Object>> newList = omstruckOrderMaterialMapper.getMaterialList(orderId);
  1420. toTmsMap.put("newList", newList);
  1421. // 调用金蝶接口,将销售订单推送到金蝶系统
  1422. Map<String, Object> input = joinFeign.getSaleOrder(saleOrderId);
  1423. Map<String, Object> head = (Map<String, Object>) input.get("head");
  1424. head.put("status", "update");
  1425. // 获得金蝶接口配置
  1426. Map<String, Object> totalMap = easUtil.getTotalMap();
  1427. // 组装报文
  1428. totalMap.put("input", input);
  1429. System.out.println(totalMap);
  1430. String json = JSONUtils.toJSONString(totalMap);
  1431. System.out.println(json);
  1432. String s = joinFeign.pushSaleOrderToEas(totalMap);
  1433. System.out.println(s);
  1434. return result;
  1435. }
  1436. /**
  1437. * 遍历两次物资集合,找出哪些修改哪些新增哪些删除的物资
  1438. * @param newMaterialMapList
  1439. * @param oldMaterialMapList
  1440. * @return
  1441. */
  1442. public static Map<String, Object> checkMaterial(List<Map<String, Object>> oldMaterialMapList, List<Map<String, Object>> newMaterialMapList){
  1443. Map<String, Object> returnMap = new HashMap<>();
  1444. List<BigDecimal> delete = new ArrayList<>(); //存放删除的物资ID
  1445. List<Map<String, Object>> add = new ArrayList<>(); //存放添加的物资ID及件数
  1446. List<Map<String, Object>> update = new ArrayList<>(); // 存放修改的物资Id及件数
  1447. //先遍历old中的物资 查找有没有相同的物资 找到修改和删除的物资
  1448. for (Map<String, Object> map : oldMaterialMapList) {
  1449. String materialId = String.valueOf(map.get("materialId"));//拿到key
  1450. //通过这个key去新物资集合中获取是否包含这个key
  1451. Map<String, Object> newMap = getNewMap(materialId, newMaterialMapList);
  1452. if(newMap == null){
  1453. //如果在新物资中没有找到,则代表此物资已删除
  1454. delete.add(DataChange.dataToBigDecimal(map.get("materialId")));
  1455. }else{ //如果找到了,取出件数进行对比
  1456. BigDecimal newNumber = DataChange.dataToBigDecimal(newMap.get("materialNumber")); //拿到新物资中的件数
  1457. BigDecimal oldNumber = DataChange.dataToBigDecimal(map.get("materialNumber"));
  1458. int i = newNumber.compareTo(oldNumber);
  1459. if(i != 0){ //如果件数不相等,则需要进行修改,添加进修改list中
  1460. Map<String, Object> updateMap = new HashMap<>();
  1461. updateMap.put("materialId", materialId);
  1462. updateMap.put("materialNumber", newNumber);
  1463. update.add(updateMap);
  1464. }
  1465. }
  1466. }
  1467. //再次遍历new中的物资 查找 新增 的物资
  1468. for (Map<String, Object> map : newMaterialMapList) {
  1469. String materialId = String.valueOf(map.get("materialId"));
  1470. Map<String, Object> oldMaps = getNewMap(materialId, oldMaterialMapList);
  1471. if(oldMaps == null){
  1472. //如果在旧map中没有找到,则代表是新增的物资,将新增的物资存放到新增列表中
  1473. add.add(map);
  1474. }
  1475. }
  1476. if(add.size() != 0) returnMap.put("add", add);
  1477. if(delete.size() != 0) returnMap.put("delete", delete);
  1478. if(update.size() != 0) returnMap.put("update", update);
  1479. return returnMap;
  1480. }
  1481. /**
  1482. * 遍历list查看里面的map是否包含这个值
  1483. * @param key
  1484. * @param mapList
  1485. * @return
  1486. */
  1487. public static Map<String, Object> getNewMap(String key, List<Map<String, Object>> mapList){
  1488. for (Map<String, Object> map : mapList) {
  1489. if(map.containsValue(key)){
  1490. return map;
  1491. }
  1492. }
  1493. return null;
  1494. }
  1495. /**
  1496. * 副产品订单
  1497. * @param map
  1498. * @return
  1499. */
  1500. @Override
  1501. public List<Map<String, Object>> getFuSaleOrderList(Map<String, Object> map) {
  1502. List<Map<String, Object>> resultList = amsSaleOrderMapper.getFuSaleOrderList(map);
  1503. return resultList;
  1504. }
  1505. }