AmsSaleOrderServiceImpl.java 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849
  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.setMeterWeight(DataChange.dataToBigDecimal(meterWeight));
  330. amsSaleMaterial.setInsertUpdateRemark("采集金蝶销售订单");
  331. if (materialWeight != null && !"".equals(materialWeight)) {
  332. amsSaleMaterial.setMaterialWeight(new BigDecimal(materialWeight));
  333. }
  334. if (materialNumber != null && !"".equals(materialNumber)) {
  335. amsSaleMaterial.setMaterialNumber(new BigDecimal(materialNumber));
  336. }
  337. result += amsSaleMaterialMapper.insertSelective(amsSaleMaterial);
  338. }
  339. result += amsSaleOrderMapper.insertSelective(amsSaleOrder);
  340. } else {
  341. AmsSaleOrder amsSaleOrder = amsSaleOrders.get(0);
  342. amsSaleOrder.setSaleNumber(saleNumber);
  343. amsSaleOrder.setSaleAccountBalance(new BigDecimal(saleAccountBalance));
  344. amsSaleOrder.setSaleCurrentOrderAmount(new BigDecimal(saleCurrentOrderAmount));
  345. amsSaleOrder.setSaleRemark(saleRemark);
  346. amsSaleOrder.setDeleted(new BigDecimal(0));
  347. amsSaleOrder.setUpdateTime(new Date());
  348. amsSaleOrder.setShipperId(shipperId);
  349. amsSaleOrder.setReceiveId(receiveId);
  350. // 如果是财务审批后,将不可作业的运输订单改为已接收状态
  351. if (orderStatus.equals("4")) {
  352. result += amsSaleOrderMapper.updateTruckOrderStatus(amsSaleOrder.getSaleOrderId());
  353. }
  354. if (isSelfMention != null) {
  355. if (isSelfMention.equals("CARRY")) {
  356. amsSaleOrder.setSaleOrderIsselfMention("是");
  357. } else {
  358. amsSaleOrder.setSaleOrderIsselfMention("否");
  359. }
  360. }
  361. if (saleHistoricalOrderAmount != null && saleHistoricalOrderAmount.length() != 0) {
  362. amsSaleOrder.setSaleHistoricalOrderAmount(new BigDecimal(saleHistoricalOrderAmount));
  363. }
  364. amsSaleOrder.setSaleOrderStatus(new BigDecimal(orderStatus));
  365. for (Map<String, Object> materialMap : mapList) {
  366. // 得到中间表主键id
  367. String saleMaterialId = (String) materialMap.get("saleMaterialId");
  368. // 得到金蝶分录id
  369. String easPrimaryId = (String) materialMap.get("easPrimaryId");
  370. Map<String,Object> resultMap = new HashMap<>();
  371. resultMap.put("easPrimaryId",easPrimaryId);
  372. AmsSaleMaterial amsSaleMaterial;
  373. // 得到物资重量
  374. String materialWeight = (String) materialMap.get("materialNumber");
  375. // 得到物资件数
  376. String materialNumber = (String) materialMap.get("assistQty");
  377. // 如果有物流系统销售订单物资表主键:认定是走物流新增的销售订单(通过物流系统主键进行查询)
  378. if (saleMaterialId != null && (!saleMaterialId.equals("null")) && !saleMaterialId.equals("")) {
  379. amsSaleMaterial = amsSaleMaterialMapper.selectByPrimaryKey(new BigDecimal(saleMaterialId));
  380. Object meterWeight = materialMap.get("meterWeight");
  381. if (meterWeight != null && !"".equals(meterWeight.toString())) {
  382. amsSaleMaterial.setMeterWeight(DataChange.dataToBigDecimal(meterWeight));
  383. }
  384. else {
  385. Double weightDouble = new Double(materialNumber);
  386. BigDecimal liWeight = new BigDecimal( weightDouble/amsSaleMaterial.getMaterialNumber().doubleValue() * 1000);
  387. amsSaleMaterial.setMeterWeight(liWeight);
  388. }
  389. // 同步修改车序号物资表
  390. resultMap.put("materialId",saleMaterialId);
  391. List<AmsSaleTrucknoMaterial> amsSaleTrucknoMaterials = amsSaleTrucknoMaterialMapper.selectByParameters(resultMap);
  392. AmsSaleTrucknoMaterial amsSaleTrucknoMaterial = amsSaleTrucknoMaterials.get(0);
  393. amsSaleTrucknoMaterial.setSaleOrderMaterialNumber(new BigDecimal(materialNumber));
  394. amsSaleTrucknoMaterial.setInsertUpdateRemark("在金蝶做修改");
  395. amsSaleTrucknoMaterialMapper.updateByPrimaryKeySelective(amsSaleTrucknoMaterial);
  396. }
  397. // 否则认定是走金蝶新增的销售订单(通过金蝶分录id进行查询)
  398. else {
  399. List<AmsSaleMaterial> amsSaleMaterials = amsSaleMaterialMapper.selectByParameters(resultMap);
  400. amsSaleMaterial = amsSaleMaterials.get(0);
  401. amsSaleMaterial.setInsertUsername("金蝶");
  402. amsSaleMaterial.setInsertUpdateRemark("采集金蝶销售订单");
  403. }
  404. // 得到物资编码
  405. String materialCode = (String) materialMap.get("materialCode");
  406. // 得到计量单位
  407. String materialUnit = (String) materialMap.get("materialUnit");
  408. if (materialWeight != null && !"".equals(materialWeight)) {
  409. amsSaleMaterial.setMaterialWeight(new BigDecimal(materialWeight));
  410. }
  411. if (materialNumber != null && !
  412. "".equals(materialNumber)) {
  413. amsSaleMaterial.setMaterialNumber(new BigDecimal(materialNumber));
  414. }
  415. BigDecimal materialId = amsSaleMaterialMapper.getMaterialId(materialCode);
  416. amsSaleMaterial.setEasPrimaryId(easPrimaryId);
  417. amsSaleMaterial.setSaleOrderId(amsSaleOrder.getSaleOrderId());
  418. amsSaleMaterial.setMaterialId(materialId);
  419. amsSaleMaterial.setInsertTime(new Date());
  420. result += amsSaleMaterialMapper.updateByPrimaryKeySelective(amsSaleMaterial);
  421. }
  422. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  423. }
  424. }
  425. return result;
  426. }
  427. /**
  428. * 通过运单id得到车牌号
  429. * @param saleOrderMaterialId
  430. * @return
  431. */
  432. @Override
  433. public Map<String,Object> findCarNumberByOrderId(BigDecimal saleOrderMaterialId) {
  434. Map<String, Object> head = omstruckOrderMapper.findCarNumberByOrderId(saleOrderMaterialId);
  435. //根据车序号表查询销售订单表是否自提
  436. String isWithdrawal = amsSaleOrderMapper.getWithdrawal(saleOrderMaterialId);
  437. if("是".equals(isWithdrawal)){
  438. head.replace("forwarder","自提");
  439. }
  440. List<Map<String,Object>> entries = omstruckOrderMapper.findEntriesByOrderId(saleOrderMaterialId);
  441. //遍历数组 en
  442. Map<String,Object> input = new HashMap<>();
  443. input.put("entries",entries);
  444. input.put("head",head);
  445. return input;
  446. }
  447. @Override
  448. public Map<String, Object> findCarNumberByOrderList(List<Map<String, Object>> mapList) {
  449. List<Map<String,Object>> entries = new ArrayList<>();
  450. //遍历车序号数组,获取车序号ID
  451. for(Map<String,Object> map : mapList){
  452. BigDecimal saleOrderMaterialId = new BigDecimal((Integer) map.get("saleOrderMaterialId")) ;
  453. //根据车序号ID去查询车牌号、承运商以及分录ID
  454. List<Map<String,Object>> head = omstruckOrderMapper.finCarAndCarrierAndEntries(saleOrderMaterialId);
  455. entries.addAll(head);
  456. }
  457. Map<String,Object> input = new HashMap<>();
  458. input.put("entries",entries);
  459. return input;
  460. }
  461. //添加内转钢材到异地库
  462. //审核以后回传
  463. @Override
  464. @Transactional(rollbackFor = {Exception.class})
  465. public int addInwardSteelOrder(Map<String,Object> map) throws Exception {
  466. int result=0;
  467. //输出json数据。
  468. String json= JSON.toJSONString(map);
  469. System.out.println(json);
  470. //获取订单状态
  471. String orderStatus = (String) map.get("orderStatus");
  472. String materialNumber =(String) map.get("materialNumber");
  473. String easPrimaryId=null;
  474. //设置是否反审核状态
  475. String closeStatus =(String) map.get("closeStatus");
  476. //是否整单
  477. Object wholeOrder = map.get("wholeOrder");
  478. // 得到单据编号
  479. String saleNumber = (String) map.get("saleNumber");
  480. //获取调出组织部门
  481. String transferOutInventoryOrg =(String) map.get("TransferOutInventorOrg");
  482. //获取调入组织部门
  483. String transferInInventoryOrg =(String) map.get("TransferInInventorOrg");
  484. //获取调出部门
  485. String transferOutDep =(String) map.get("TransferOutDep");
  486. //获取调入部门
  487. String transferInDep =(String) map.get("TransferInDep");
  488. // 得到订单日期
  489. String saleOrderBizDateStr = (String) map.get("saleOrderBizDate");
  490. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  491. //获取销售摘要
  492. String saleRemark = (String) map.get("saleRemark");
  493. SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  494. //设置是否为车皮
  495. String whetherTheCar =(String) map.get("whetherTheCar");
  496. //业务日期
  497. String businessDate =(String) map.get("businessDate");
  498. //获取业务类型
  499. String businessType =(String) map.get("businessType");
  500. //判断销售订单是否存在
  501. BigDecimal saleOrderNumber = amsSaleOrderMapper.selectAmsSaleOrderNum(saleNumber);
  502. //如果销售订单不存在
  503. if (saleOrderNumber==null){
  504. AmsSaleOrder amsSaleOrder = new AmsSaleOrder();
  505. BigDecimal saleOrderId = amsSaleOrderMapper.getSaleOrderId();
  506. //新增销售订单主键
  507. amsSaleOrder.setSaleOrderId(saleOrderId);
  508. //新增单据编码
  509. amsSaleOrder.setSaleNumber(saleNumber);
  510. //根据发货单位查找id
  511. String shipperName="四川省达州钢铁集团有限责任公司";
  512. BigDecimal shipperId = amsSaleOrderMapper.getShipperId(shipperName);
  513. amsSaleOrder.setShipperId(DataChange.dataToBigDecimal(shipperId));
  514. // 订单日期
  515. try {
  516. Date saleOrderBizDate = sdf.parse(saleOrderBizDateStr);
  517. amsSaleOrder.setInsertTime(saleOrderBizDate);
  518. } catch (ParseException e) {
  519. e.printStackTrace();
  520. }
  521. //业务日期
  522. try {
  523. Date BusinessDate = sdf.parse(businessDate);
  524. amsSaleOrder.setBusinessDate(BusinessDate);
  525. } catch (ParseException e) {
  526. e.printStackTrace();
  527. }
  528. amsSaleOrder.setWhetherTheCar(whetherTheCar);
  529. amsSaleOrder.setSaleRemark(saleRemark);
  530. amsSaleOrder.setSaleOrderStatus(new BigDecimal(4));
  531. //销售订单类型:内转钢材到异地库
  532. amsSaleOrder.setSaleType(new BigDecimal(4));
  533. amsSaleOrder.setTransferInDep(transferInDep);
  534. amsSaleOrder.setTransferOutDep(transferOutDep);
  535. amsSaleOrder.setDeleted(new BigDecimal(0));
  536. amsSaleOrder.setCloseStatus(new BigDecimal(0));
  537. amsSaleOrder.setTransferInInventoryOrg(transferInInventoryOrg);
  538. amsSaleOrder.setTransferOutInventoryOrg(transferOutInventoryOrg);
  539. amsSaleOrder.setBusinessType(businessType);
  540. amsSaleOrder.setInsertUsername("金蝶");
  541. amsSaleOrder.setInsertUpdateRemark("采集金蝶库存调拨单");
  542. result += amsSaleOrderMapper.insertSelective(amsSaleOrder);
  543. //得到物资信息
  544. List<Map<String, Object>> mapList = (List<Map<String, Object>>) map.get("mapList");
  545. for (Map<String,Object> materialMap:mapList){
  546. AmsSaleMaterial amsSaleMaterial = new AmsSaleMaterial();
  547. BigDecimal saleMaterialId = amsSaleMaterialMapper.getSaleMaterialId();
  548. amsSaleMaterial.setSaleMaterialId(saleMaterialId);
  549. amsSaleMaterial.setSaleOrderId(saleOrderId);
  550. // 辅助数量
  551. Object auxiliaryQuantity = materialMap.get("AuxiliaryQuantity");
  552. // 物资重量
  553. Object meterWeight = materialMap.get("meterWeight");
  554. Object steelMeter = materialMap.get("steelMeter");
  555. if (steelMeter!=null) {
  556. amsSaleMaterial.setSteelMeter(DataChange.dataToBigDecimal(steelMeter));
  557. }
  558. //设置调出仓库
  559. Object transferOutOfWarehouse = materialMap.get("TransferOutOfWarehouse");
  560. amsSaleMaterial.setTransferOutOfWarehouse((String) transferOutOfWarehouse);
  561. //设置调入仓库
  562. Object transferInOfWarehouse = materialMap.get("TransferInOfWarehouse");
  563. amsSaleMaterial.setTransferInOfWarehouse((String) transferInOfWarehouse);
  564. //设置调入计划日期
  565. String transferInPlanDate =(String) materialMap.get("TransferInPlanDate");
  566. try {
  567. Date transferInPlanDate1 = sdf.parse(transferInPlanDate);
  568. amsSaleMaterial.setTransferInPlanDate(transferInPlanDate1);
  569. } catch (ParseException e) {
  570. e.printStackTrace();
  571. }
  572. // 得到金蝶分录主键
  573. easPrimaryId = (String) materialMap.get("easPrimaryId");
  574. //设置调出计划日期
  575. String transferOutPlanDate =(String) materialMap.get("TransferOutPlanDate");
  576. try {
  577. Date transferOutPlanDate2 = sdf.parse(transferOutPlanDate);
  578. amsSaleMaterial.setTransferOutPlanDate(transferOutPlanDate2);
  579. } catch (ParseException e) {
  580. e.printStackTrace();
  581. }
  582. //是否磅重交货
  583. Object isPoundSale = materialMap.get("isPoundSale");
  584. if (isPoundSale!=null){
  585. amsSaleMaterial.setIsPoundSale(DataChange.dataToBigDecimal(isPoundSale));
  586. }
  587. //设置是否控制数量
  588. Object controlQuailty = materialMap.get("ControlQuantity");
  589. amsSaleMaterial.setControlQuantity((String) controlQuailty);
  590. //设置库存类型
  591. Object inventoryType = materialMap.get("InventoryType");
  592. amsSaleMaterial.setInventoryType((String) inventoryType);
  593. //设置库存状态
  594. Object inventoryStatus = materialMap.get("InventoryStatus");
  595. amsSaleMaterial.setInventoryStatus((String) inventoryStatus);
  596. // 得到物资编码
  597. String materialCode = (String) materialMap.get("materialCode");
  598. BigDecimal materialId = amsSaleMaterialMapper.getMaterialId(materialCode);
  599. Integer materialCount = amsSaleMaterialMapper.getMaterialCount(materialId);
  600. RmsMaterial rmsMaterial = new RmsMaterial();
  601. rmsMaterial.setMaterialId(materialId);
  602. if (materialCount == null) {
  603. materialCount = new Integer(0);
  604. }
  605. rmsMaterial.setMaterialCount(new BigDecimal(materialCount + 1));
  606. rmsMaterialMapper.updateByPrimaryKeySelective(rmsMaterial);
  607. // 得到物资重量
  608. String materialWeight = (String) materialMap.get("materialNumber");
  609. // 得到计量单位
  610. amsSaleMaterial.setEasPrimaryId(easPrimaryId);
  611. amsSaleMaterial.setMaterialId(materialId);
  612. //设置辅助数量
  613. amsSaleMaterial.setMaterialNumber(DataChange.dataToBigDecimal(auxiliaryQuantity));
  614. amsSaleMaterial.setInsertTime(new Date());
  615. amsSaleMaterial.setInsertUsername("金蝶");
  616. amsSaleMaterial.setMeterWeight(DataChange.dataToBigDecimal(meterWeight));
  617. amsSaleMaterial.setInsertUpdateRemark("采集金蝶库存调拨单");
  618. if (materialWeight != null && !"".equals(materialWeight)) {
  619. amsSaleMaterial.setMaterialWeight(new BigDecimal(materialWeight));
  620. }
  621. result += amsSaleMaterialMapper.insertSelective(amsSaleMaterial);
  622. //设置发站
  623. Object toTheStation = map.get("toTheStation");
  624. TmstrainPleaseApproveResult tmstrainPleaseApproveResult=new TmstrainPleaseApproveResult();
  625. BigDecimal maxId = tmstrainPleaseApproveResultMapper.getMaxId();
  626. tmstrainPleaseApproveResult.setResultId(maxId);
  627. tmstrainPleaseApproveResult.setResultPleasePlanNo(DataChange.generateEightDigitsNumber("WLQCH",maxId.intValue()));
  628. tmstrainPleaseApproveResult.setRailPlanId(saleMaterialId);
  629. //查找到站是否存在到站表
  630. BigDecimal sendStation = rmstrainArrivalSendMapper.getSendStation((String) toTheStation);
  631. //到站不存在
  632. if (sendStation==null){
  633. //新增到站
  634. BigDecimal toStationMaxId = rmstrainArrivalSendMapper.getMaxId();
  635. RmstrainArrivalSend rmstrainArrivalSend=new RmstrainArrivalSend();
  636. rmstrainArrivalSend.setArrivalId(toStationMaxId);
  637. rmstrainArrivalSend.setArrivalName((String) toTheStation);
  638. rmstrainArrivalSend.setInsertTime(new Date());
  639. rmstrainArrivalSend.setInsertUsername("金蝶");
  640. rmstrainArrivalSend.setInsertUpdateRemark("金蝶回传数据");
  641. result += rmstrainArrivalSendMapper.insertSelective(rmstrainArrivalSend);
  642. tmstrainPleaseApproveResult.setToTheStationId(toStationMaxId);
  643. }else {
  644. //到站存在
  645. tmstrainPleaseApproveResult.setToTheStationId(sendStation);
  646. }
  647. tmstrainPleaseApproveResult.setResultType(new BigDecimal(4));
  648. tmstrainPleaseApproveResult.setInsertTime(new Date());
  649. tmstrainPleaseApproveResult.setInsertUpdateRemark("金蝶回传");
  650. result += tmstrainPleaseApproveResultMapper.insertSelective(tmstrainPleaseApproveResult);
  651. }
  652. }else {
  653. // throw new Exception("暂不支持修改库存调拨单");
  654. //此处判断主要是针对销售订单已经存在
  655. AmsSaleOrder amsSaleOrder=new AmsSaleOrder();
  656. if (orderStatus.equals("2")){
  657. amsSaleOrder.setSaleOrderId(saleOrderNumber);
  658. amsSaleOrder.setCloseStatus(new BigDecimal(1));
  659. amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  660. }
  661. //此处判断订单状态为反审核
  662. if (closeStatus.equals("5")) {
  663. amsSaleOrder.setSaleOrderId(saleOrderNumber);
  664. amsSaleOrder.setDeleted(new BigDecimal(1));
  665. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  666. }
  667. // 关闭单个分录订单
  668. if (closeStatus.equals("-1") && wholeOrder.equals("0")) {
  669. Object closeEntryId = map.get("closeEntryId");
  670. if (closeEntryId != null) {
  671. Map<String, Object> easMap = new HashMap<>();
  672. easMap.put("easPrimaryId", closeEntryId);
  673. List<AmsSaleMaterial> amsSaleMaterials = amsSaleMaterialMapper.selectByParameters(easMap);
  674. if (amsSaleMaterials != null && amsSaleMaterials.size() != 0) {
  675. AmsSaleMaterial amsSaleMaterial = amsSaleMaterials.get(0);
  676. amsSaleMaterial.setDeleted(new BigDecimal(0));
  677. result += amsSaleMaterialMapper.updateByPrimaryKeySelective(amsSaleMaterial);
  678. }
  679. }
  680. }
  681. // 反关闭整单
  682. if (closeStatus.equals("-2") && "1".equals(wholeOrder)) {
  683. amsSaleOrder.setDeleted(new BigDecimal(0));
  684. Object reason = map.get("reason");
  685. BigDecimal saleOrderId = amsSaleOrder.getSaleOrderId();
  686. if (reason != null) {
  687. amsSaleOrder.setInsertUpdateRemark(reason.toString());
  688. }
  689. // 反关闭销售订单下的所有分录
  690. result += amsSaleMaterialMapper.openAllSaleMaterial(saleOrderId);
  691. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  692. }
  693. // 反关闭单个分录订单
  694. if (closeStatus.equals("-2") && wholeOrder.equals("0")) {
  695. Object unCloseEntryId = map.get("unCloseEntryId");
  696. if (unCloseEntryId != null) {
  697. Map<String, Object> easMap = new HashMap<>();
  698. easMap.put("easPrimaryId", unCloseEntryId);
  699. List<AmsSaleMaterial> amsSaleMaterials = amsSaleMaterialMapper.selectByParameters(easMap);
  700. if (amsSaleMaterials != null && amsSaleMaterials.size() != 0) {
  701. AmsSaleMaterial amsSaleMaterial = amsSaleMaterials.get(0);
  702. result += amsSaleMaterialMapper.unCloseSaleMaterial(amsSaleMaterial.getSaleMaterialId());
  703. }
  704. }
  705. }
  706. //编辑销售订单主键
  707. amsSaleOrder.setSaleOrderId(saleOrderNumber);
  708. //新增单据编码
  709. amsSaleOrder.setSaleNumber(saleNumber);
  710. // 订单日期
  711. try {
  712. Date saleOrderBizDate = sdf.parse(saleOrderBizDateStr);
  713. amsSaleOrder.setInsertTime(saleOrderBizDate);
  714. } catch (ParseException e) {
  715. e.printStackTrace();
  716. }
  717. //业务日期
  718. try {
  719. Date BusinessDate = sdf2.parse(businessDate);
  720. amsSaleOrder.setBusinessDate(BusinessDate);
  721. } catch (ParseException e) {
  722. e.printStackTrace();
  723. }
  724. amsSaleOrder.setWhetherTheCar(whetherTheCar);
  725. amsSaleOrder.setSaleRemark(saleRemark);
  726. amsSaleOrder.setSaleOrderStatus(new BigDecimal(2));
  727. //销售订单类型:内转钢材到异地库
  728. amsSaleOrder.setSaleType(new BigDecimal(4));
  729. amsSaleOrder.setTransferInDep(transferInDep);
  730. amsSaleOrder.setTransferOutDep(transferOutDep);
  731. amsSaleOrder.setDeleted(new BigDecimal(0));
  732. amsSaleOrder.setTransferInInventoryOrg(transferInInventoryOrg);
  733. amsSaleOrder.setTransferOutInventoryOrg(transferOutInventoryOrg);
  734. amsSaleOrder.setBusinessType(businessType);
  735. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  736. Object toTheStation = map.get("toTheStation");
  737. //根据销售订单id查找是否存在该请车实绩
  738. BigDecimal resultId = tmstrainPleaseApproveResultMapper.selectResultId(saleOrderNumber);
  739. TmstrainPleaseApproveResult tmstrainPleaseApproveResult=new TmstrainPleaseApproveResult();
  740. tmstrainPleaseApproveResult.setResultId(resultId);
  741. tmstrainPleaseApproveResult.setRailPlanId(saleOrderNumber);
  742. //查找到站是否存在到站表
  743. BigDecimal sendStation = rmstrainArrivalSendMapper.getSendStation((String) toTheStation);
  744. //到站不存在
  745. if (sendStation==null){
  746. //新增到站
  747. BigDecimal toStationMaxId = rmstrainArrivalSendMapper.getMaxId();
  748. RmstrainArrivalSend rmstrainArrivalSend=new RmstrainArrivalSend();
  749. rmstrainArrivalSend.setArrivalId(toStationMaxId);
  750. rmstrainArrivalSend.setArrivalName((String) toTheStation);
  751. rmstrainArrivalSend.setInsertTime(new Date());
  752. rmstrainArrivalSend.setInsertUsername("金蝶");
  753. rmstrainArrivalSend.setInsertUpdateRemark("金蝶回传数据");
  754. result += rmstrainArrivalSendMapper.insertSelective(rmstrainArrivalSend);
  755. }else {
  756. //到站存在
  757. tmstrainPleaseApproveResult.setToTheStationId(sendStation);
  758. }
  759. tmstrainPleaseApproveResult.setResultType(new BigDecimal(4));
  760. tmstrainPleaseApproveResult.setInsertTime(new Date());
  761. tmstrainPleaseApproveResult.setInsertUpdateRemark("金蝶回传");
  762. result += tmstrainPleaseApproveResultMapper.updateByPrimaryKeySelective(tmstrainPleaseApproveResult);
  763. //修改销售订单子表
  764. }
  765. return result;
  766. }
  767. //根据运输订单号和车牌号
  768. @Override
  769. public List<Map<String, Object>> selectSaleSteelOrder(Map<String,Object> map) {
  770. List<Map<String, Object>> mapList = amsSaleOrderMapper.selectSaleSteelOrder(map);
  771. if (mapList.size()==0){
  772. return null;
  773. }
  774. for (Map<String,Object> map1:mapList){
  775. String materialName =(String) map1.get("materialName");
  776. if (materialName.contains("盘螺")){
  777. map1.put("materialType","盘螺");
  778. }else if (materialName.contains("盘圆")||materialName.contains("盘元")){
  779. map1.put("materialType","盘圆");
  780. }else if (materialName.contains("螺纹")){
  781. map1.put("materialType","螺纹钢");
  782. }
  783. //根据物资id查找炉批号
  784. BigDecimal materialId =DataChange.dataToBigDecimal(map1.get("materialId"));
  785. BigDecimal resultId =DataChange.dataToBigDecimal(map1.get("resultId"));
  786. String materialFurnaceNumber = amsSaleOrderMapper.selectMaterialFurnaceNumber(materialId,resultId);
  787. map1.put("materialFurnaceNumber",materialFurnaceNumber);
  788. //接口发送日期
  789. map1.put("sendTime",new Date());
  790. }
  791. return mapList;
  792. }
  793. @Override
  794. @Transactional(rollbackFor = {Exception.class})
  795. public int receiveOrderResult(Map<String, Object> map) throws Exception {
  796. int result=0;
  797. OmstrainOrder omstrainOrder = new OmstrainOrder();
  798. //获取运输订单号
  799. Object orderNumber = map.get("orderNumber");
  800. //获取备注-如果是异常情况,填写备注。
  801. Object remark = map.get("remark");
  802. if (remark!=null){
  803. omstrainOrder.setAcceptRemark((String) remark);
  804. }
  805. //接收车皮号
  806. Object wagonNo = map.get("wagonNo");
  807. BigDecimal orderId = omstrainOrderMapper.selectOrderIdBywagonNoAndOrderNumber((String) orderNumber, (String) wagonNo);
  808. if (orderId==null){
  809. throw new Exception("提示回传车皮号与运输订单号不匹配");
  810. }
  811. //根据运输订单号查找id
  812. omstrainOrder.setOrderId(orderId);
  813. //接收是否收货(0为未收货,1为已收货)
  814. Object receviceOrNot = map.get("receviceOrNot");
  815. omstrainOrder.setIsAccept(DataChange.dataToBigDecimal(receviceOrNot));
  816. //接收时间
  817. String receviceTime2 =(String) map.get("receviceTime");
  818. SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  819. try {
  820. Date receviceTime = sdf2.parse(receviceTime2);
  821. omstrainOrder.setIsAcceptTime(receviceTime);
  822. } catch (ParseException e) {
  823. e.printStackTrace();
  824. }
  825. result = omstrainOrderMapper.updateByPrimaryKeySelective(omstrainOrder);
  826. return result;
  827. }
  828. }