AmsSaleOrderServiceImpl.java 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848
  1. package com.steerinfo.dil.service.impl;
  2. import com.alibaba.druid.support.json.JSONUtils;
  3. import com.alibaba.fastjson.JSON;
  4. import com.google.gson.JsonObject;
  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.MyException;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Service;
  12. import org.springframework.transaction.annotation.Transactional;
  13. import springfox.documentation.spring.web.json.Json;
  14. import javax.xml.crypto.Data;
  15. import java.math.BigDecimal;
  16. import java.text.ParseException;
  17. import java.text.SimpleDateFormat;
  18. import java.util.*;
  19. /**
  20. * AmsSaleOrder服务实现:
  21. * @author generator
  22. * @version 1.0-SNAPSHORT 2021-10-26 07:26
  23. * 类描述
  24. * 修订历史:
  25. * 日期:2021-10-26
  26. * 作者:generator
  27. * 参考:
  28. * 描述:AmsSaleOrder服务实现
  29. * @see null
  30. * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
  31. */
  32. @Service(value = "amsSaleOrderService")
  33. public class AmsSaleOrderServiceImpl implements IAmsSaleOrderService {
  34. @Autowired
  35. private AmsSaleOrderMapper amsSaleOrderMapper;
  36. @Autowired
  37. AmsSaleMaterialMapper amsSaleMaterialMapper;
  38. @Autowired
  39. RmsConsigneeMapper rmsConsigneeMapper;
  40. @Autowired
  41. AmsSaleTrucknoMaterialMapper amsSaleTrucknoMaterialMapper;
  42. @Autowired
  43. AmsSaleOrderCarrierMapper amsSaleOrderCarrierMapper;
  44. @Autowired
  45. OmstruckOrderMapper omstruckOrderMapper;
  46. @Autowired
  47. RmsMaterialMapper rmsMaterialMapper;
  48. @Autowired
  49. private TmstrainPleaseApproveResultMapper tmstrainPleaseApproveResultMapper;
  50. @Autowired
  51. RmstrainArrivalSendMapper rmstrainArrivalSendMapper;
  52. @Autowired
  53. OmstrainOrderMapper omstrainOrderMapper;
  54. /**
  55. * 查询销售订单
  56. * @param saleOrderId
  57. * @return
  58. */
  59. @Override
  60. @Transactional(rollbackFor = Exception.class)
  61. public Map<String, Object> getSaleOrder(BigDecimal saleOrderId) {
  62. List<Map<String,Object>> entries = amsSaleOrderMapper.getMaterialMessages(saleOrderId);
  63. Map<String,Object> head = amsSaleOrderMapper.getSaleOrderMessage(saleOrderId);
  64. // 单价
  65. BigDecimal taxPrice = (BigDecimal) head.get("unitPrice");
  66. // 税率
  67. String taxRate = (String) head.get("tax");
  68. // 收款客户
  69. String customer = (String) head.get("customer");
  70. for (Map<String, Object> entry : entries) {
  71. // 物流销售订单分录主键
  72. BigDecimal stEntryId = (BigDecimal) entry.get("stEntryId");
  73. // 是否磅重(0:磅重,1:理重)
  74. BigDecimal isPoundSale = (BigDecimal) entry.get("isPoundSale");
  75. // 长度
  76. BigDecimal forChangdu = (BigDecimal) entry.get("forChangdu");
  77. // 物资数量
  78. BigDecimal assistQty = (BigDecimal) entry.get("materialNumber");
  79. entry.put("assistQty",assistQty.toString());
  80. entry.remove("materialNumber");
  81. entry.put("taxPrice",taxPrice.toString());
  82. entry.put("taxRate",taxRate);
  83. entry.put("customer",customer);
  84. entry.replace("stEntryId",stEntryId.toString());
  85. entry.put("isTheory",isPoundSale.toString());
  86. entry.replace("forChangdu", forChangdu == null ? "" : forChangdu.toString());
  87. }
  88. Map<String,Object> input = new HashMap<>();
  89. head.remove("unitPrice");
  90. head.remove("tax");
  91. head.remove("customer");
  92. head.put("isFillCarNum","1");
  93. head.put("isCp","0");
  94. input.put("head",head);
  95. input.put("entries",entries);
  96. return input;
  97. }
  98. /**
  99. * 修改销售订单
  100. * @param mapVal
  101. * @return
  102. */
  103. @Transactional
  104. @Override
  105. public int operationSaleOrder(Map<String, Object> mapVal) {
  106. int result = 0;
  107. // 审批状态
  108. String orderStatus = (String) mapVal.get("orderStatus");
  109. // 得到销售订单号
  110. String saleNumber = (String) mapVal.get("saleNumber");
  111. Map<String,Object> map = new HashMap<>();
  112. map.put("saleNumber",saleNumber);
  113. // 判断是删除还是非删除
  114. String closeStatus = (String) mapVal.get("closeStatus");
  115. List<AmsSaleOrder> amsSaleOrders = amsSaleOrderMapper.selectByParameters(map);
  116. // 关闭分录
  117. Object closeEntryId = mapVal.get("closeEntryId");
  118. // 反关闭分录
  119. Object unCloseEntryId = mapVal.get("unCloseEntryId");
  120. // 关闭原因
  121. Object reason = mapVal.get("reason");
  122. // 是否整单
  123. Object wholeOrder = mapVal.get("wholeOrder");
  124. // 关闭副产品整个订单
  125. if (closeStatus.equals("-1") && "1".equals(wholeOrder)) {
  126. AmsSaleOrder amsSaleOrder = amsSaleOrders.get(0);
  127. amsSaleOrder.setDeleted(new BigDecimal(2));
  128. if (reason != null) {
  129. amsSaleOrder.setInsertUpdateRemark(reason.toString());
  130. }
  131. result += amsSaleMaterialMapper.closeAllSaleMaterial(amsSaleOrder.getSaleOrderId());
  132. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  133. List<Map<String, Object>> warehouseList = amsSaleOrderMapper.getWareHouse(amsSaleOrder.getSaleOrderId());
  134. if (warehouseList != null && warehouseList.size() != 0) {
  135. Object warehouse = warehouseList.get(0).get("warehouse");
  136. if (warehouse != null && "副产品库".equals(warehouse)) {
  137. result += amsSaleOrderMapper.closeOrderNotIn(amsSaleOrder.getSaleOrderId());
  138. }
  139. }
  140. }
  141. // 关闭单个分录订单
  142. if (closeStatus.equals("-1") && wholeOrder.equals("0")) {
  143. if (closeEntryId != null) {
  144. Map<String, Object> easMap = new HashMap<>();
  145. easMap.put("easPrimaryId", closeEntryId);
  146. List<AmsSaleMaterial> amsSaleMaterials = amsSaleMaterialMapper.selectByParameters(easMap);
  147. if (amsSaleMaterials != null && amsSaleMaterials.size() != 0) {
  148. AmsSaleMaterial amsSaleMaterial = amsSaleMaterials.get(0);
  149. amsSaleMaterial.setDeleted(new BigDecimal(0));
  150. result += amsSaleMaterialMapper.updateByPrimaryKeySelective(amsSaleMaterial);
  151. }
  152. }
  153. }
  154. // 反关闭整单
  155. if (closeStatus.equals("-2") && "1".equals(wholeOrder)) {
  156. AmsSaleOrder amsSaleOrder = amsSaleOrders.get(0);
  157. amsSaleOrder.setDeleted(new BigDecimal(0));
  158. BigDecimal saleOrderId = amsSaleOrder.getSaleOrderId();
  159. if (reason != null) {
  160. amsSaleOrder.setInsertUpdateRemark(reason.toString());
  161. }
  162. // 反关闭销售订单下的所有分录
  163. result += amsSaleMaterialMapper.openAllSaleMaterial(saleOrderId);
  164. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  165. }
  166. // 反关闭单个分录订单
  167. if (closeStatus.equals("-2") && wholeOrder.equals("0")) {
  168. if (unCloseEntryId != null) {
  169. Map<String, Object> easMap = new HashMap<>();
  170. easMap.put("easPrimaryId", unCloseEntryId);
  171. List<AmsSaleMaterial> amsSaleMaterials = amsSaleMaterialMapper.selectByParameters(easMap);
  172. if (amsSaleMaterials != null && amsSaleMaterials.size() != 0) {
  173. AmsSaleMaterial amsSaleMaterial = amsSaleMaterials.get(0);
  174. result += amsSaleMaterialMapper.unCloseSaleMaterial(amsSaleMaterial.getSaleMaterialId());
  175. }
  176. }
  177. }
  178. if (closeStatus.equals("0")) {
  179. AmsSaleOrder amsSaleOrder = amsSaleOrders.get(0);
  180. amsSaleOrder.setDeleted(new BigDecimal(1));
  181. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  182. }
  183. if (orderStatus.equals("4") && closeStatus.equals("1")){
  184. AmsSaleOrder amsSaleOrder = amsSaleOrders.get(0);
  185. amsSaleOrder.setSaleOrderStatus(new BigDecimal(4));
  186. amsSaleOrder.setDeleted(new BigDecimal(0));
  187. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  188. }
  189. if (orderStatus.equals("2") && closeStatus.equals("1")){
  190. // 得到账户余额
  191. String saleAccountBalance = (String) mapVal.get("saleAccountBalance");
  192. // 得到当前订单金额
  193. String saleCurrentOrderAmount = (String) mapVal.get("saleCurrentOrderAmount");
  194. // 得到历史订单金额
  195. String saleHistoricalOrderAmount = (String) mapVal.get("saleHistoricalOrderAmount");
  196. // 得到订单备注
  197. String saleRemark = (String) mapVal.get("saleRemark");
  198. // 得到是否自提
  199. String isSelfMention = (String) mapVal.get("isSelfMention");
  200. // 得到收货单位
  201. String receiveUnit = (String) mapVal.get("receiveUnit");
  202. // 得到收货单位名称
  203. String receiveUnitName = (String) mapVal.get("receiveUnitName");
  204. // 得到订单日期
  205. String saleOrderBizDateStr = (String) mapVal.get("saleOrderBizDate");
  206. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  207. BigDecimal receiveId = amsSaleOrderMapper.getReceiveId(receiveUnit);
  208. // 如果不存则自己增收获单位
  209. if (receiveId == null) {
  210. RmsConsignee rmsConsignee = new RmsConsignee();
  211. BigDecimal consigneeId = rmsConsigneeMapper.getConsigneeId();
  212. rmsConsignee.setConsigneeId(consigneeId);
  213. rmsConsignee.setConsigneeCode(receiveUnit);
  214. rmsConsignee.setConsigneeCompanyName(receiveUnitName);
  215. rmsConsignee.setDeleted(new BigDecimal(0));
  216. rmsConsignee.setInsertTime(new Date());
  217. rmsConsignee.setInsertUsername("销售订单");
  218. rmsConsignee.setInsertUpdateRemark("通过销售订单自增");
  219. rmsConsigneeMapper.insertSelective(rmsConsignee);
  220. }
  221. // 得到发货单位
  222. String shipperUnit = (String) mapVal.get("shipperUnit");
  223. BigDecimal shipperId = amsSaleOrderMapper.getShipperId(shipperUnit);
  224. // 得到收款客户
  225. String saleOrderReceiveCustomer = (String) mapVal.get("receiveCustomer");
  226. // 得到物资信息
  227. List<Map<String, Object>> mapList = (List<Map<String, Object>>) mapVal.get("mapList");
  228. // 如果不存在则自己新增(使用金蝶销售订单号)
  229. if (amsSaleOrders.size() == 0) {
  230. AmsSaleOrder amsSaleOrder = new AmsSaleOrder();
  231. BigDecimal saleOrderId = amsSaleOrderMapper.getSaleOrderId();
  232. amsSaleOrder.setSaleOrderId(saleOrderId);
  233. amsSaleOrder.setSaleNumber(saleNumber);
  234. amsSaleOrder.setDeleted(new BigDecimal(0));
  235. amsSaleOrder.setUpdateTime(new Date());
  236. amsSaleOrder.setInsertUsername("admin");
  237. amsSaleOrder.setInsertUpdateRemark("金蝶采集销售订单");
  238. amsSaleOrder.setUpdateUsername("admin");
  239. amsSaleOrder.setReceiveId(receiveId);
  240. amsSaleOrder.setShipperId(shipperId);
  241. // 订单日期
  242. try {
  243. Date saleOrderBizDate = sdf.parse(saleOrderBizDateStr);
  244. amsSaleOrder.setInsertTime(saleOrderBizDate);
  245. } catch (ParseException e) {
  246. e.printStackTrace();
  247. }
  248. if (shipperUnit.equals("四川达兴能源有限责任公司") && receiveUnitName.equals("四川省达州钢铁集团有限责任公司")) {
  249. amsSaleOrder.setCloseStatus(new BigDecimal(0));
  250. }
  251. if (isSelfMention != null) {
  252. if (isSelfMention.equals("CARRY")) {
  253. amsSaleOrder.setSaleOrderIsselfMention("是");
  254. } else {
  255. amsSaleOrder.setSaleOrderIsselfMention("否");
  256. }
  257. }
  258. amsSaleOrder.setSaleOrderTax("13%");
  259. amsSaleOrder.setSaleUnitPrice(new BigDecimal(4000));
  260. amsSaleOrder.setSaleRemark(saleRemark);
  261. amsSaleOrder.setSaleOrderReceiveCustomer(saleOrderReceiveCustomer);
  262. amsSaleOrder.setSaleAccountBalance(new BigDecimal(saleAccountBalance));
  263. amsSaleOrder.setSaleCurrentOrderAmount(new BigDecimal(saleCurrentOrderAmount));
  264. if (saleHistoricalOrderAmount != null && saleHistoricalOrderAmount.length() != 0) {
  265. amsSaleOrder.setSaleHistoricalOrderAmount(new BigDecimal(saleHistoricalOrderAmount));
  266. }
  267. amsSaleOrder.setSaleOrderStatus(new BigDecimal(2));
  268. // 遍历物资分录,新增销售订单与物资中间表
  269. for (Map<String, Object> materialMap : mapList) {
  270. AmsSaleMaterial amsSaleMaterial = new AmsSaleMaterial();
  271. BigDecimal saleMaterialId = amsSaleMaterialMapper.getSaleMaterialId();
  272. amsSaleMaterial.setSaleMaterialId(saleMaterialId);
  273. amsSaleMaterial.setSaleOrderId(saleOrderId);
  274. // 仓库编码
  275. Object warehouseNum = materialMap.get("warehouseNum");
  276. // 仓库名称
  277. Object warehouseName = materialMap.get("warehouseName");
  278. // 物资理重
  279. Object meterWeight = materialMap.get("meterWeight");
  280. // 得到物资编码
  281. String materialCode = (String) materialMap.get("materialCode");
  282. if (warehouseName != null) {
  283. amsSaleMaterial.setSaleWarehouse(warehouseName.toString());
  284. //得到物资名称
  285. String materialName = amsSaleOrderCarrierMapper.getMaterialName(materialCode);
  286. // 如果是副产品仓库,则给自提订单自动匹配承运商
  287. if (warehouseName.equals("副产品库") && "是".equals(amsSaleOrder.getSaleOrderIsselfMention()) || "钒渣".equals(materialName) && "是".equals(amsSaleOrder.getSaleOrderIsselfMention()) ) {
  288. AmsSaleOrderCarrier amsSaleOrderCarrier = amsSaleOrderCarrierMapper.getAmsSaleOrderCarrier(saleOrderId);
  289. BigDecimal carrierId = amsSaleOrderCarrierMapper.findCarrierByConsignee(receiveUnitName);
  290. if (amsSaleOrderCarrier == null) {
  291. amsSaleOrderCarrier = new AmsSaleOrderCarrier();
  292. amsSaleOrderCarrier.setSaleOrderCarrierId(amsSaleOrderCarrierMapper.selectMaxId());
  293. amsSaleOrderCarrier.setCarrierId(amsSaleOrderCarrierMapper.selectMaxId());
  294. amsSaleOrderCarrier.setSaleOrderId(saleOrderId);
  295. amsSaleOrderCarrier.setCarrierId(carrierId);
  296. amsSaleOrderCarrier.setDeleted(new BigDecimal(0));
  297. amsSaleOrderCarrier.setInsertTime(new Date());
  298. amsSaleOrderCarrier.setInsertUsername("自动匹配");
  299. amsSaleOrderCarrier.setInsertUpdateRemark("自提订单自动匹配");
  300. result += amsSaleOrderCarrierMapper.insertSelective(amsSaleOrderCarrier);
  301. }
  302. else {
  303. amsSaleOrderCarrier.setCarrierId(carrierId);
  304. result += amsSaleOrderCarrierMapper.updateByPrimaryKeySelective(amsSaleOrderCarrier);
  305. }
  306. }
  307. }
  308. BigDecimal materialId = amsSaleMaterialMapper.getMaterialId(materialCode);
  309. Integer materialCount = amsSaleMaterialMapper.getMaterialCount(materialId);
  310. RmsMaterial rmsMaterial = new RmsMaterial();
  311. rmsMaterial.setMaterialId(materialId);
  312. if (materialCount == null) {
  313. materialCount = new Integer(0);
  314. }
  315. rmsMaterial.setMaterialCount(new BigDecimal(materialCount + 1));
  316. rmsMaterialMapper.updateByPrimaryKeySelective(rmsMaterial);
  317. // 得到金蝶分录主键
  318. String easPrimaryId = (String) materialMap.get("easPrimaryId");
  319. // 得到物资磅重
  320. String materialWeight = (String) materialMap.get("materialNumber");
  321. // 得到物资件数
  322. String materialNumber = (String) materialMap.get("assistQty");
  323. // 得到计量单位
  324. String materialUnit = (String) materialMap.get("materialUnit");
  325. amsSaleMaterial.setEasPrimaryId(easPrimaryId);
  326. amsSaleMaterial.setMaterialId(materialId);
  327. amsSaleMaterial.setInsertTime(new Date());
  328. amsSaleMaterial.setInsertUsername("金蝶");
  329. amsSaleMaterial.setInsertUpdateRemark("采集金蝶销售订单");
  330. if (meterWeight != null && !"".equals(meterWeight)) {
  331. amsSaleMaterial.setMaterialWeight(DataChange.dataToBigDecimal(meterWeight));
  332. }
  333. if (materialNumber != null && !"".equals(materialNumber)) {
  334. amsSaleMaterial.setMaterialNumber(new BigDecimal(materialNumber));
  335. }
  336. result += amsSaleMaterialMapper.insertSelective(amsSaleMaterial);
  337. }
  338. result += amsSaleOrderMapper.insertSelective(amsSaleOrder);
  339. } else {
  340. AmsSaleOrder amsSaleOrder = amsSaleOrders.get(0);
  341. amsSaleOrder.setSaleNumber(saleNumber);
  342. amsSaleOrder.setSaleAccountBalance(new BigDecimal(saleAccountBalance));
  343. amsSaleOrder.setSaleCurrentOrderAmount(new BigDecimal(saleCurrentOrderAmount));
  344. amsSaleOrder.setSaleRemark(saleRemark);
  345. amsSaleOrder.setDeleted(new BigDecimal(0));
  346. amsSaleOrder.setUpdateTime(new Date());
  347. amsSaleOrder.setShipperId(shipperId);
  348. amsSaleOrder.setReceiveId(receiveId);
  349. // 如果是财务审批后,将不可作业的运输订单改为已接收状态
  350. if (orderStatus.equals("4")) {
  351. result += amsSaleOrderMapper.updateTruckOrderStatus(amsSaleOrder.getSaleOrderId());
  352. }
  353. if (isSelfMention != null) {
  354. if (isSelfMention.equals("CARRY")) {
  355. amsSaleOrder.setSaleOrderIsselfMention("是");
  356. } else {
  357. amsSaleOrder.setSaleOrderIsselfMention("否");
  358. }
  359. }
  360. if (saleHistoricalOrderAmount != null && saleHistoricalOrderAmount.length() != 0) {
  361. amsSaleOrder.setSaleHistoricalOrderAmount(new BigDecimal(saleHistoricalOrderAmount));
  362. }
  363. amsSaleOrder.setSaleOrderStatus(new BigDecimal(orderStatus));
  364. for (Map<String, Object> materialMap : mapList) {
  365. // 得到中间表主键id
  366. String saleMaterialId = (String) materialMap.get("saleMaterialId");
  367. // 得到金蝶分录id
  368. String easPrimaryId = (String) materialMap.get("easPrimaryId");
  369. Map<String,Object> resultMap = new HashMap<>();
  370. resultMap.put("easPrimaryId",easPrimaryId);
  371. AmsSaleMaterial amsSaleMaterial;
  372. // 得到物资重量
  373. String materialWeight = (String) materialMap.get("materialNumber");
  374. // 得到物资件数
  375. String materialNumber = (String) materialMap.get("assistQty");
  376. // 如果有物流系统销售订单物资表主键:认定是走物流新增的销售订单(通过物流系统主键进行查询)
  377. if (saleMaterialId != null && (!saleMaterialId.equals("null")) && !saleMaterialId.equals("")) {
  378. amsSaleMaterial = amsSaleMaterialMapper.selectByPrimaryKey(new BigDecimal(saleMaterialId));
  379. Object meterWeight = materialMap.get("meterWeight");
  380. if (meterWeight != null && !"".equals(meterWeight.toString())) {
  381. amsSaleMaterial.setMeterWeight(DataChange.dataToBigDecimal(meterWeight));
  382. }
  383. else {
  384. Double weightDouble = new Double(materialNumber);
  385. BigDecimal liWeight = new BigDecimal( weightDouble/amsSaleMaterial.getMaterialNumber().doubleValue() * 1000);
  386. amsSaleMaterial.setMeterWeight(liWeight);
  387. }
  388. // 同步修改车序号物资表
  389. resultMap.put("materialId",saleMaterialId);
  390. List<AmsSaleTrucknoMaterial> amsSaleTrucknoMaterials = amsSaleTrucknoMaterialMapper.selectByParameters(resultMap);
  391. AmsSaleTrucknoMaterial amsSaleTrucknoMaterial = amsSaleTrucknoMaterials.get(0);
  392. amsSaleTrucknoMaterial.setSaleOrderMaterialNumber(new BigDecimal(materialNumber));
  393. amsSaleTrucknoMaterial.setInsertUpdateRemark("在金蝶做修改");
  394. amsSaleTrucknoMaterialMapper.updateByPrimaryKeySelective(amsSaleTrucknoMaterial);
  395. }
  396. // 否则认定是走金蝶新增的销售订单(通过金蝶分录id进行查询)
  397. else {
  398. List<AmsSaleMaterial> amsSaleMaterials = amsSaleMaterialMapper.selectByParameters(resultMap);
  399. amsSaleMaterial = amsSaleMaterials.get(0);
  400. amsSaleMaterial.setInsertUsername("金蝶");
  401. amsSaleMaterial.setInsertUpdateRemark("采集金蝶销售订单");
  402. }
  403. // 得到物资编码
  404. String materialCode = (String) materialMap.get("materialCode");
  405. // 得到计量单位
  406. String materialUnit = (String) materialMap.get("materialUnit");
  407. if (materialWeight != null && !"".equals(materialWeight)) {
  408. amsSaleMaterial.setMaterialWeight(new BigDecimal(materialWeight));
  409. }
  410. if (materialNumber != null && !
  411. "".equals(materialNumber)) {
  412. amsSaleMaterial.setMaterialNumber(new BigDecimal(materialNumber));
  413. }
  414. BigDecimal materialId = amsSaleMaterialMapper.getMaterialId(materialCode);
  415. amsSaleMaterial.setEasPrimaryId(easPrimaryId);
  416. amsSaleMaterial.setSaleOrderId(amsSaleOrder.getSaleOrderId());
  417. amsSaleMaterial.setMaterialId(materialId);
  418. amsSaleMaterial.setInsertTime(new Date());
  419. result += amsSaleMaterialMapper.updateByPrimaryKeySelective(amsSaleMaterial);
  420. }
  421. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  422. }
  423. }
  424. return result;
  425. }
  426. /**
  427. * 通过运单id得到车牌号
  428. * @param saleOrderMaterialId
  429. * @return
  430. */
  431. @Override
  432. public Map<String,Object> findCarNumberByOrderId(BigDecimal saleOrderMaterialId) {
  433. Map<String, Object> head = omstruckOrderMapper.findCarNumberByOrderId(saleOrderMaterialId);
  434. //根据车序号表查询销售订单表是否自提
  435. String isWithdrawal = amsSaleOrderMapper.getWithdrawal(saleOrderMaterialId);
  436. if("是".equals(isWithdrawal)){
  437. head.replace("forwarder","自提");
  438. }
  439. List<Map<String,Object>> entries = omstruckOrderMapper.findEntriesByOrderId(saleOrderMaterialId);
  440. //遍历数组 en
  441. Map<String,Object> input = new HashMap<>();
  442. input.put("entries",entries);
  443. input.put("head",head);
  444. return input;
  445. }
  446. @Override
  447. public Map<String, Object> findCarNumberByOrderList(List<Map<String, Object>> mapList) {
  448. List<Map<String,Object>> entries = new ArrayList<>();
  449. //遍历车序号数组,获取车序号ID
  450. for(Map<String,Object> map : mapList){
  451. BigDecimal saleOrderMaterialId = new BigDecimal((Integer) map.get("saleOrderMaterialId")) ;
  452. //根据车序号ID去查询车牌号、承运商以及分录ID
  453. List<Map<String,Object>> head = omstruckOrderMapper.finCarAndCarrierAndEntries(saleOrderMaterialId);
  454. entries.addAll(head);
  455. }
  456. Map<String,Object> input = new HashMap<>();
  457. input.put("entries",entries);
  458. return input;
  459. }
  460. //添加内转钢材到异地库
  461. //审核以后回传
  462. @Override
  463. @Transactional(rollbackFor = {Exception.class})
  464. public int addInwardSteelOrder(Map<String,Object> map) throws Exception {
  465. int result=0;
  466. //输出json数据。
  467. String json= JSON.toJSONString(map);
  468. System.out.println(json);
  469. //获取订单状态
  470. String orderStatus = (String) map.get("orderStatus");
  471. String materialNumber =(String) map.get("materialNumber");
  472. String easPrimaryId=null;
  473. //设置是否反审核状态
  474. String closeStatus =(String) map.get("closeStatus");
  475. //是否整单
  476. Object wholeOrder = map.get("wholeOrder");
  477. // 得到单据编号
  478. String saleNumber = (String) map.get("saleNumber");
  479. //获取调出组织部门
  480. String transferOutInventoryOrg =(String) map.get("TransferOutInventorOrg");
  481. //获取调入组织部门
  482. String transferInInventoryOrg =(String) map.get("TransferInInventorOrg");
  483. //获取调出部门
  484. String transferOutDep =(String) map.get("TransferOutDep");
  485. //获取调入部门
  486. String transferInDep =(String) map.get("TransferInDep");
  487. // 得到订单日期
  488. String saleOrderBizDateStr = (String) map.get("saleOrderBizDate");
  489. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  490. //获取销售摘要
  491. String saleRemark = (String) map.get("saleRemark");
  492. SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  493. //设置是否为车皮
  494. String whetherTheCar =(String) map.get("whetherTheCar");
  495. //业务日期
  496. String businessDate =(String) map.get("businessDate");
  497. //获取业务类型
  498. String businessType =(String) map.get("businessType");
  499. //判断销售订单是否存在
  500. BigDecimal saleOrderNumber = amsSaleOrderMapper.selectAmsSaleOrderNum(saleNumber);
  501. //如果销售订单不存在
  502. if (saleOrderNumber==null){
  503. AmsSaleOrder amsSaleOrder = new AmsSaleOrder();
  504. BigDecimal saleOrderId = amsSaleOrderMapper.getSaleOrderId();
  505. //新增销售订单主键
  506. amsSaleOrder.setSaleOrderId(saleOrderId);
  507. //新增单据编码
  508. amsSaleOrder.setSaleNumber(saleNumber);
  509. //根据发货单位查找id
  510. String shipperName="四川省达州钢铁集团有限责任公司";
  511. BigDecimal shipperId = amsSaleOrderMapper.getShipperId(shipperName);
  512. amsSaleOrder.setShipperId(DataChange.dataToBigDecimal(shipperId));
  513. // 订单日期
  514. try {
  515. Date saleOrderBizDate = sdf.parse(saleOrderBizDateStr);
  516. amsSaleOrder.setInsertTime(saleOrderBizDate);
  517. } catch (ParseException e) {
  518. e.printStackTrace();
  519. }
  520. //业务日期
  521. try {
  522. Date BusinessDate = sdf.parse(businessDate);
  523. amsSaleOrder.setBusinessDate(BusinessDate);
  524. } catch (ParseException e) {
  525. e.printStackTrace();
  526. }
  527. amsSaleOrder.setWhetherTheCar(whetherTheCar);
  528. amsSaleOrder.setSaleRemark(saleRemark);
  529. amsSaleOrder.setSaleOrderStatus(new BigDecimal(4));
  530. //销售订单类型:内转钢材到异地库
  531. amsSaleOrder.setSaleType(new BigDecimal(4));
  532. amsSaleOrder.setTransferInDep(transferInDep);
  533. amsSaleOrder.setTransferOutDep(transferOutDep);
  534. amsSaleOrder.setDeleted(new BigDecimal(0));
  535. amsSaleOrder.setCloseStatus(new BigDecimal(0));
  536. amsSaleOrder.setTransferInInventoryOrg(transferInInventoryOrg);
  537. amsSaleOrder.setTransferOutInventoryOrg(transferOutInventoryOrg);
  538. amsSaleOrder.setBusinessType(businessType);
  539. amsSaleOrder.setInsertUsername("金蝶");
  540. amsSaleOrder.setInsertUpdateRemark("采集金蝶库存调拨单");
  541. result += amsSaleOrderMapper.insertSelective(amsSaleOrder);
  542. //得到物资信息
  543. List<Map<String, Object>> mapList = (List<Map<String, Object>>) map.get("mapList");
  544. for (Map<String,Object> materialMap:mapList){
  545. AmsSaleMaterial amsSaleMaterial = new AmsSaleMaterial();
  546. BigDecimal saleMaterialId = amsSaleMaterialMapper.getSaleMaterialId();
  547. amsSaleMaterial.setSaleMaterialId(saleMaterialId);
  548. amsSaleMaterial.setSaleOrderId(saleOrderId);
  549. // 辅助数量
  550. Object auxiliaryQuantity = materialMap.get("AuxiliaryQuantity");
  551. // 物资重量
  552. Object meterWeight = materialMap.get("meterWeight");
  553. Object steelMeter = materialMap.get("steelMeter");
  554. if (steelMeter!=null) {
  555. amsSaleMaterial.setSteelMeter(DataChange.dataToBigDecimal(steelMeter));
  556. }
  557. //设置调出仓库
  558. Object transferOutOfWarehouse = materialMap.get("TransferOutOfWarehouse");
  559. amsSaleMaterial.setTransferOutOfWarehouse((String) transferOutOfWarehouse);
  560. //设置调入仓库
  561. Object transferInOfWarehouse = materialMap.get("TransferInOfWarehouse");
  562. amsSaleMaterial.setTransferInOfWarehouse((String) transferInOfWarehouse);
  563. //设置调入计划日期
  564. String transferInPlanDate =(String) materialMap.get("TransferInPlanDate");
  565. try {
  566. Date transferInPlanDate1 = sdf.parse(transferInPlanDate);
  567. amsSaleMaterial.setTransferInPlanDate(transferInPlanDate1);
  568. } catch (ParseException e) {
  569. e.printStackTrace();
  570. }
  571. // 得到金蝶分录主键
  572. easPrimaryId = (String) materialMap.get("easPrimaryId");
  573. //设置调出计划日期
  574. String transferOutPlanDate =(String) materialMap.get("TransferOutPlanDate");
  575. try {
  576. Date transferOutPlanDate2 = sdf.parse(transferOutPlanDate);
  577. amsSaleMaterial.setTransferOutPlanDate(transferOutPlanDate2);
  578. } catch (ParseException e) {
  579. e.printStackTrace();
  580. }
  581. //是否磅重交货
  582. Object isPoundSale = materialMap.get("isPoundSale");
  583. if (isPoundSale!=null){
  584. amsSaleMaterial.setIsPoundSale(DataChange.dataToBigDecimal(isPoundSale));
  585. }
  586. //设置是否控制数量
  587. Object controlQuailty = materialMap.get("ControlQuantity");
  588. amsSaleMaterial.setControlQuantity((String) controlQuailty);
  589. //设置库存类型
  590. Object inventoryType = materialMap.get("InventoryType");
  591. amsSaleMaterial.setInventoryType((String) inventoryType);
  592. //设置库存状态
  593. Object inventoryStatus = materialMap.get("InventoryStatus");
  594. amsSaleMaterial.setInventoryStatus((String) inventoryStatus);
  595. // 得到物资编码
  596. String materialCode = (String) materialMap.get("materialCode");
  597. BigDecimal materialId = amsSaleMaterialMapper.getMaterialId(materialCode);
  598. Integer materialCount = amsSaleMaterialMapper.getMaterialCount(materialId);
  599. RmsMaterial rmsMaterial = new RmsMaterial();
  600. rmsMaterial.setMaterialId(materialId);
  601. if (materialCount == null) {
  602. materialCount = new Integer(0);
  603. }
  604. rmsMaterial.setMaterialCount(new BigDecimal(materialCount + 1));
  605. rmsMaterialMapper.updateByPrimaryKeySelective(rmsMaterial);
  606. // 得到物资重量
  607. String materialWeight = (String) materialMap.get("materialNumber");
  608. // 得到计量单位
  609. amsSaleMaterial.setEasPrimaryId(easPrimaryId);
  610. amsSaleMaterial.setMaterialId(materialId);
  611. //设置辅助数量
  612. amsSaleMaterial.setMaterialNumber(DataChange.dataToBigDecimal(auxiliaryQuantity));
  613. amsSaleMaterial.setInsertTime(new Date());
  614. amsSaleMaterial.setInsertUsername("金蝶");
  615. amsSaleMaterial.setMeterWeight(DataChange.dataToBigDecimal(meterWeight));
  616. amsSaleMaterial.setInsertUpdateRemark("采集金蝶库存调拨单");
  617. if (materialWeight != null && !"".equals(materialWeight)) {
  618. amsSaleMaterial.setMaterialWeight(new BigDecimal(materialWeight));
  619. }
  620. result += amsSaleMaterialMapper.insertSelective(amsSaleMaterial);
  621. //设置发站
  622. Object toTheStation = map.get("toTheStation");
  623. TmstrainPleaseApproveResult tmstrainPleaseApproveResult=new TmstrainPleaseApproveResult();
  624. BigDecimal maxId = tmstrainPleaseApproveResultMapper.getMaxId();
  625. tmstrainPleaseApproveResult.setResultId(maxId);
  626. tmstrainPleaseApproveResult.setResultPleasePlanNo(DataChange.generateEightDigitsNumber("WLQCH",maxId.intValue()));
  627. tmstrainPleaseApproveResult.setRailPlanId(saleMaterialId);
  628. //查找到站是否存在到站表
  629. BigDecimal sendStation = rmstrainArrivalSendMapper.getSendStation((String) toTheStation);
  630. //到站不存在
  631. if (sendStation==null){
  632. //新增到站
  633. BigDecimal toStationMaxId = rmstrainArrivalSendMapper.getMaxId();
  634. RmstrainArrivalSend rmstrainArrivalSend=new RmstrainArrivalSend();
  635. rmstrainArrivalSend.setArrivalId(toStationMaxId);
  636. rmstrainArrivalSend.setArrivalName((String) toTheStation);
  637. rmstrainArrivalSend.setInsertTime(new Date());
  638. rmstrainArrivalSend.setInsertUsername("金蝶");
  639. rmstrainArrivalSend.setInsertUpdateRemark("金蝶回传数据");
  640. result += rmstrainArrivalSendMapper.insertSelective(rmstrainArrivalSend);
  641. tmstrainPleaseApproveResult.setToTheStationId(toStationMaxId);
  642. }else {
  643. //到站存在
  644. tmstrainPleaseApproveResult.setToTheStationId(sendStation);
  645. }
  646. tmstrainPleaseApproveResult.setResultType(new BigDecimal(4));
  647. tmstrainPleaseApproveResult.setInsertTime(new Date());
  648. tmstrainPleaseApproveResult.setInsertUpdateRemark("金蝶回传");
  649. result += tmstrainPleaseApproveResultMapper.insertSelective(tmstrainPleaseApproveResult);
  650. }
  651. }else {
  652. // throw new Exception("暂不支持修改库存调拨单");
  653. //此处判断主要是针对销售订单已经存在
  654. AmsSaleOrder amsSaleOrder=new AmsSaleOrder();
  655. if (orderStatus.equals("2")){
  656. amsSaleOrder.setSaleOrderId(saleOrderNumber);
  657. amsSaleOrder.setCloseStatus(new BigDecimal(1));
  658. amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  659. }
  660. //此处判断订单状态为反审核
  661. if (closeStatus.equals("5")) {
  662. amsSaleOrder.setSaleOrderId(saleOrderNumber);
  663. amsSaleOrder.setDeleted(new BigDecimal(1));
  664. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  665. }
  666. // 关闭单个分录订单
  667. if (closeStatus.equals("-1") && wholeOrder.equals("0")) {
  668. Object closeEntryId = map.get("closeEntryId");
  669. if (closeEntryId != null) {
  670. Map<String, Object> easMap = new HashMap<>();
  671. easMap.put("easPrimaryId", closeEntryId);
  672. List<AmsSaleMaterial> amsSaleMaterials = amsSaleMaterialMapper.selectByParameters(easMap);
  673. if (amsSaleMaterials != null && amsSaleMaterials.size() != 0) {
  674. AmsSaleMaterial amsSaleMaterial = amsSaleMaterials.get(0);
  675. amsSaleMaterial.setDeleted(new BigDecimal(0));
  676. result += amsSaleMaterialMapper.updateByPrimaryKeySelective(amsSaleMaterial);
  677. }
  678. }
  679. }
  680. // 反关闭整单
  681. if (closeStatus.equals("-2") && "1".equals(wholeOrder)) {
  682. amsSaleOrder.setDeleted(new BigDecimal(0));
  683. Object reason = map.get("reason");
  684. BigDecimal saleOrderId = amsSaleOrder.getSaleOrderId();
  685. if (reason != null) {
  686. amsSaleOrder.setInsertUpdateRemark(reason.toString());
  687. }
  688. // 反关闭销售订单下的所有分录
  689. result += amsSaleMaterialMapper.openAllSaleMaterial(saleOrderId);
  690. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  691. }
  692. // 反关闭单个分录订单
  693. if (closeStatus.equals("-2") && wholeOrder.equals("0")) {
  694. Object unCloseEntryId = map.get("unCloseEntryId");
  695. if (unCloseEntryId != null) {
  696. Map<String, Object> easMap = new HashMap<>();
  697. easMap.put("easPrimaryId", unCloseEntryId);
  698. List<AmsSaleMaterial> amsSaleMaterials = amsSaleMaterialMapper.selectByParameters(easMap);
  699. if (amsSaleMaterials != null && amsSaleMaterials.size() != 0) {
  700. AmsSaleMaterial amsSaleMaterial = amsSaleMaterials.get(0);
  701. result += amsSaleMaterialMapper.unCloseSaleMaterial(amsSaleMaterial.getSaleMaterialId());
  702. }
  703. }
  704. }
  705. //编辑销售订单主键
  706. amsSaleOrder.setSaleOrderId(saleOrderNumber);
  707. //新增单据编码
  708. amsSaleOrder.setSaleNumber(saleNumber);
  709. // 订单日期
  710. try {
  711. Date saleOrderBizDate = sdf.parse(saleOrderBizDateStr);
  712. amsSaleOrder.setInsertTime(saleOrderBizDate);
  713. } catch (ParseException e) {
  714. e.printStackTrace();
  715. }
  716. //业务日期
  717. try {
  718. Date BusinessDate = sdf2.parse(businessDate);
  719. amsSaleOrder.setBusinessDate(BusinessDate);
  720. } catch (ParseException e) {
  721. e.printStackTrace();
  722. }
  723. amsSaleOrder.setWhetherTheCar(whetherTheCar);
  724. amsSaleOrder.setSaleRemark(saleRemark);
  725. amsSaleOrder.setSaleOrderStatus(new BigDecimal(2));
  726. //销售订单类型:内转钢材到异地库
  727. amsSaleOrder.setSaleType(new BigDecimal(4));
  728. amsSaleOrder.setTransferInDep(transferInDep);
  729. amsSaleOrder.setTransferOutDep(transferOutDep);
  730. amsSaleOrder.setDeleted(new BigDecimal(0));
  731. amsSaleOrder.setTransferInInventoryOrg(transferInInventoryOrg);
  732. amsSaleOrder.setTransferOutInventoryOrg(transferOutInventoryOrg);
  733. amsSaleOrder.setBusinessType(businessType);
  734. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  735. Object toTheStation = map.get("toTheStation");
  736. //根据销售订单id查找是否存在该请车实绩
  737. BigDecimal resultId = tmstrainPleaseApproveResultMapper.selectResultId(saleOrderNumber);
  738. TmstrainPleaseApproveResult tmstrainPleaseApproveResult=new TmstrainPleaseApproveResult();
  739. tmstrainPleaseApproveResult.setResultId(resultId);
  740. tmstrainPleaseApproveResult.setRailPlanId(saleOrderNumber);
  741. //查找到站是否存在到站表
  742. BigDecimal sendStation = rmstrainArrivalSendMapper.getSendStation((String) toTheStation);
  743. //到站不存在
  744. if (sendStation==null){
  745. //新增到站
  746. BigDecimal toStationMaxId = rmstrainArrivalSendMapper.getMaxId();
  747. RmstrainArrivalSend rmstrainArrivalSend=new RmstrainArrivalSend();
  748. rmstrainArrivalSend.setArrivalId(toStationMaxId);
  749. rmstrainArrivalSend.setArrivalName((String) toTheStation);
  750. rmstrainArrivalSend.setInsertTime(new Date());
  751. rmstrainArrivalSend.setInsertUsername("金蝶");
  752. rmstrainArrivalSend.setInsertUpdateRemark("金蝶回传数据");
  753. result += rmstrainArrivalSendMapper.insertSelective(rmstrainArrivalSend);
  754. }else {
  755. //到站存在
  756. tmstrainPleaseApproveResult.setToTheStationId(sendStation);
  757. }
  758. tmstrainPleaseApproveResult.setResultType(new BigDecimal(4));
  759. tmstrainPleaseApproveResult.setInsertTime(new Date());
  760. tmstrainPleaseApproveResult.setInsertUpdateRemark("金蝶回传");
  761. result += tmstrainPleaseApproveResultMapper.updateByPrimaryKeySelective(tmstrainPleaseApproveResult);
  762. //修改销售订单子表
  763. }
  764. return result;
  765. }
  766. //根据运输订单号和车牌号
  767. @Override
  768. public List<Map<String, Object>> selectSaleSteelOrder(Map<String,Object> map) {
  769. List<Map<String, Object>> mapList = amsSaleOrderMapper.selectSaleSteelOrder(map);
  770. if (mapList.size()==0){
  771. return null;
  772. }
  773. for (Map<String,Object> map1:mapList){
  774. String materialName =(String) map1.get("materialName");
  775. if (materialName.contains("盘螺")){
  776. map1.put("materialType","盘螺");
  777. }else if (materialName.contains("盘圆")){
  778. map1.put("materialType","盘圆");
  779. }else if (materialName.contains("螺纹")){
  780. map1.put("materialType","螺纹钢");
  781. }
  782. //根据物资id查找炉批号
  783. BigDecimal materialId =DataChange.dataToBigDecimal(map1.get("materialId"));
  784. BigDecimal resultId =DataChange.dataToBigDecimal(map1.get("resultId"));
  785. String materialFurnaceNumber = amsSaleOrderMapper.selectMaterialFurnaceNumber(materialId,resultId);
  786. map1.put("materialFurnaceNumber",materialFurnaceNumber);
  787. //接口发送日期
  788. map1.put("sendTime",new Date());
  789. }
  790. return mapList;
  791. }
  792. @Override
  793. @Transactional(rollbackFor = {Exception.class})
  794. public int receiveOrderResult(Map<String, Object> map) throws Exception {
  795. int result=0;
  796. OmstrainOrder omstrainOrder = new OmstrainOrder();
  797. //获取运输订单号
  798. Object orderNumber = map.get("orderNumber");
  799. //获取备注-如果是异常情况,填写备注。
  800. Object remark = map.get("remark");
  801. if (remark!=null){
  802. omstrainOrder.setAcceptRemark((String) remark);
  803. }
  804. //接收车皮号
  805. Object wagonNo = map.get("wagonNo");
  806. BigDecimal orderId = omstrainOrderMapper.selectOrderIdBywagonNoAndOrderNumber((String) orderNumber, (String) wagonNo);
  807. if (orderId==null){
  808. throw new Exception("提示回传车皮号与运输订单号不匹配");
  809. }
  810. //根据运输订单号查找id
  811. omstrainOrder.setOrderId(orderId);
  812. //接收是否收货(0为未收货,1为已收货)
  813. Object receviceOrNot = map.get("receviceOrNot");
  814. omstrainOrder.setIsAccept(DataChange.dataToBigDecimal(receviceOrNot));
  815. //接收时间
  816. String receviceTime2 =(String) map.get("receviceTime");
  817. SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  818. try {
  819. Date receviceTime = sdf2.parse(receviceTime2);
  820. omstrainOrder.setIsAcceptTime(receviceTime);
  821. } catch (ParseException e) {
  822. e.printStackTrace();
  823. }
  824. result = omstrainOrderMapper.updateByPrimaryKeySelective(omstrainOrder);
  825. return result;
  826. }
  827. }