AmsSaleOrderServiceImpl.java 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. package com.steerinfo.dil.service.impl;
  2. import com.steerinfo.dil.mapper.*;
  3. import com.steerinfo.dil.model.*;
  4. import com.steerinfo.dil.service.IAmsSaleOrderService;
  5. import com.steerinfo.dil.util.DataChange;
  6. import com.steerinfo.dil.util.MyException;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Service;
  9. import org.springframework.transaction.annotation.Transactional;
  10. import java.math.BigDecimal;
  11. import java.text.ParseException;
  12. import java.text.SimpleDateFormat;
  13. import java.util.Date;
  14. import java.util.HashMap;
  15. import java.util.List;
  16. import java.util.Map;
  17. /**
  18. * AmsSaleOrder服务实现:
  19. * @author generator
  20. * @version 1.0-SNAPSHORT 2021-10-26 07:26
  21. * 类描述
  22. * 修订历史:
  23. * 日期:2021-10-26
  24. * 作者:generator
  25. * 参考:
  26. * 描述:AmsSaleOrder服务实现
  27. * @see null
  28. * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
  29. */
  30. @Service(value = "amsSaleOrderService")
  31. public class AmsSaleOrderServiceImpl implements IAmsSaleOrderService {
  32. @Autowired
  33. private AmsSaleOrderMapper amsSaleOrderMapper;
  34. @Autowired
  35. AmsSaleMaterialMapper amsSaleMaterialMapper;
  36. @Autowired
  37. RmsConsigneeMapper rmsConsigneeMapper;
  38. @Autowired
  39. AmsSaleTrucknoMaterialMapper amsSaleTrucknoMaterialMapper;
  40. @Autowired
  41. AmsSaleOrderCarrierMapper amsSaleOrderCarrierMapper;
  42. @Autowired
  43. OmstruckOrderMapper omstruckOrderMapper;
  44. /**
  45. * 查询销售订单
  46. * @param saleOrderId
  47. * @return
  48. */
  49. @Override
  50. @Transactional(rollbackFor = Exception.class)
  51. public Map<String, Object> getSaleOrder(BigDecimal saleOrderId) {
  52. List<Map<String,Object>> entries = amsSaleOrderMapper.getMaterialMessages(saleOrderId);
  53. Map<String,Object> head = amsSaleOrderMapper.getSaleOrderMessage(saleOrderId);
  54. // 单价
  55. BigDecimal taxPrice = (BigDecimal) head.get("unitPrice");
  56. // 税率
  57. String taxRate = (String) head.get("tax");
  58. // 收款客户
  59. String customer = (String) head.get("customer");
  60. for (Map<String, Object> entry : entries) {
  61. BigDecimal stEntryId = (BigDecimal) entry.get("stEntryId");
  62. BigDecimal isPoundSale = (BigDecimal) entry.get("isPoundSale");
  63. BigDecimal forChangdu = (BigDecimal) entry.get("forChangdu");
  64. BigDecimal assistQty = (BigDecimal) entry.get("materialNumber");
  65. entry.put("assistQty",assistQty.toString());
  66. entry.remove("materialNumber");
  67. entry.put("taxPrice",taxPrice.toString());
  68. entry.put("taxRate",taxRate);
  69. entry.put("customer",customer);
  70. entry.replace("stEntryId",stEntryId.toString());
  71. entry.put("isTheory",isPoundSale.toString());
  72. entry.replace("forChangdu", forChangdu == null ? "" : forChangdu.toString());
  73. }
  74. Map<String,Object> input = new HashMap<>();
  75. head.remove("unitPrice");
  76. head.remove("tax");
  77. head.remove("customer");
  78. head.put("isFillCarNum","1");
  79. head.put("isCp","0");
  80. input.put("head",head);
  81. input.put("entries",entries);
  82. return input;
  83. }
  84. /**
  85. * 修改销售订单
  86. * @param mapVal
  87. * @return
  88. */
  89. @Transactional
  90. @Override
  91. public int operationSaleOrder(Map<String, Object> mapVal) {
  92. int result = 0;
  93. // 审批状态
  94. String orderStatus = (String) mapVal.get("orderStatus");
  95. // 得到销售订单号
  96. String saleNumber = (String) mapVal.get("saleNumber");
  97. Map<String,Object> map = new HashMap<>();
  98. map.put("saleNumber",saleNumber);
  99. // 判断是删除还是非删除
  100. String closeStatus = (String) mapVal.get("closeStatus");
  101. List<AmsSaleOrder> amsSaleOrders = amsSaleOrderMapper.selectByParameters(map);
  102. // 关闭分录
  103. Object closeEntryId = mapVal.get("closeEntryId");
  104. // 关闭原因
  105. Object reason = mapVal.get("reason");
  106. // 是否整单
  107. Object wholeOrder = mapVal.get("wholeOrder");
  108. // 关闭副产品整个订单
  109. if (closeStatus.equals("-1") && "1".equals(wholeOrder)) {
  110. AmsSaleOrder amsSaleOrder = amsSaleOrders.get(0);
  111. amsSaleOrder.setDeleted(new BigDecimal(2));
  112. if (reason != null) {
  113. amsSaleOrder.setInsertUpdateRemark(reason.toString());
  114. }
  115. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  116. List<Map<String, Object>> warehouseList = amsSaleOrderMapper.getWareHouse(amsSaleOrder.getSaleOrderId());
  117. if (warehouseList != null && warehouseList.size() != 0) {
  118. Object warehouse = warehouseList.get(0).get("warehouse");
  119. if (warehouse != null && "副产品库".equals(warehouse)) {
  120. result += amsSaleOrderMapper.closeOrderNotIn(amsSaleOrder.getSaleOrderId());
  121. }
  122. }
  123. }
  124. // 关闭单个分录订单
  125. if (closeStatus.equals("-1") && wholeOrder.equals("0")) {
  126. if (closeEntryId != null) {
  127. Map<String, Object> easMap = new HashMap<>();
  128. easMap.put("easPrimaryId", closeEntryId);
  129. List<AmsSaleMaterial> amsSaleMaterials = amsSaleMaterialMapper.selectByParameters(easMap);
  130. if (amsSaleMaterials != null && amsSaleMaterials.size() != 0) {
  131. AmsSaleMaterial amsSaleMaterial = amsSaleMaterials.get(0);
  132. amsSaleMaterial.setDeleted(new BigDecimal(0));
  133. result += amsSaleMaterialMapper.updateByPrimaryKeySelective(amsSaleMaterial);
  134. }
  135. }
  136. }
  137. if (closeStatus.equals("0")) {
  138. AmsSaleOrder amsSaleOrder = amsSaleOrders.get(0);
  139. amsSaleOrder.setDeleted(new BigDecimal(1));
  140. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  141. }
  142. if (orderStatus.equals("4") && closeStatus.equals("1")){
  143. AmsSaleOrder amsSaleOrder = amsSaleOrders.get(0);
  144. amsSaleOrder.setSaleOrderStatus(new BigDecimal(4));
  145. amsSaleOrder.setDeleted(new BigDecimal(0));
  146. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  147. }
  148. if (orderStatus.equals("2") && closeStatus.equals("1")){
  149. // 得到账户余额
  150. String saleAccountBalance = (String) mapVal.get("saleAccountBalance");
  151. // 得到当前订单金额
  152. String saleCurrentOrderAmount = (String) mapVal.get("saleCurrentOrderAmount");
  153. // 得到历史订单金额
  154. String saleHistoricalOrderAmount = (String) mapVal.get("saleHistoricalOrderAmount");
  155. // 得到订单备注
  156. String saleRemark = (String) mapVal.get("saleRemark");
  157. // 得到是否自提
  158. String isSelfMention = (String) mapVal.get("isSelfMention");
  159. // 得到收货单位
  160. String receiveUnit = (String) mapVal.get("receiveUnit");
  161. // 得到收货单位名称
  162. String receiveUnitName = (String) mapVal.get("receiveUnitName");
  163. // 得到订单日期
  164. String saleOrderBizDateStr = (String) mapVal.get("saleOrderBizDate");
  165. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  166. BigDecimal receiveId = amsSaleOrderMapper.getReceiveId(receiveUnit);
  167. // 如果不存则自己增收获单位
  168. if (receiveId == null) {
  169. RmsConsignee rmsConsignee = new RmsConsignee();
  170. BigDecimal consigneeId = rmsConsigneeMapper.getConsigneeId();
  171. rmsConsignee.setConsigneeId(consigneeId);
  172. rmsConsignee.setConsigneeCode(receiveUnit);
  173. rmsConsignee.setConsigneeCompanyName(receiveUnitName);
  174. rmsConsignee.setDeleted(new BigDecimal(0));
  175. rmsConsignee.setInsertTime(new Date());
  176. rmsConsignee.setInsertUsername("销售订单");
  177. rmsConsignee.setInsertUpdateRemark("通过销售订单自增");
  178. rmsConsigneeMapper.insertSelective(rmsConsignee);
  179. }
  180. // 得到发货单位
  181. String shipperUnit = (String) mapVal.get("shipperUnit");
  182. BigDecimal shipperId = amsSaleOrderMapper.getShipperId(shipperUnit);
  183. // 得到收款客户
  184. String saleOrderReceiveCustomer = (String) mapVal.get("receiveCustomer");
  185. // 得到物资信息
  186. List<Map<String, Object>> mapList = (List<Map<String, Object>>) mapVal.get("mapList");
  187. // 如果不存在则自己新增(使用金蝶销售订单号)
  188. if (amsSaleOrders.size() == 0) {
  189. AmsSaleOrder amsSaleOrder = new AmsSaleOrder();
  190. BigDecimal saleOrderId = amsSaleOrderMapper.getSaleOrderId();
  191. amsSaleOrder.setSaleOrderId(saleOrderId);
  192. amsSaleOrder.setSaleNumber(saleNumber);
  193. amsSaleOrder.setDeleted(new BigDecimal(0));
  194. amsSaleOrder.setUpdateTime(new Date());
  195. amsSaleOrder.setInsertUsername("admin");
  196. amsSaleOrder.setInsertUpdateRemark("金蝶采集销售订单");
  197. amsSaleOrder.setUpdateUsername("admin");
  198. amsSaleOrder.setReceiveId(receiveId);
  199. amsSaleOrder.setShipperId(shipperId);
  200. // 订单日期
  201. try {
  202. Date saleOrderBizDate = sdf.parse(saleOrderBizDateStr);
  203. amsSaleOrder.setInsertTime(saleOrderBizDate);
  204. } catch (ParseException e) {
  205. e.printStackTrace();
  206. }
  207. if (shipperUnit.equals("四川达兴能源有限责任公司") && receiveUnitName.equals("四川省达州钢铁集团有限责任公司")) {
  208. amsSaleOrder.setCloseStatus(new BigDecimal(0));
  209. }
  210. if (isSelfMention != null) {
  211. if (isSelfMention.equals("CARRY")) {
  212. amsSaleOrder.setSaleOrderIsselfMention("是");
  213. } else {
  214. amsSaleOrder.setSaleOrderIsselfMention("否");
  215. }
  216. }
  217. amsSaleOrder.setSaleOrderTax("13%");
  218. amsSaleOrder.setSaleUnitPrice(new BigDecimal(4000));
  219. amsSaleOrder.setSaleRemark(saleRemark);
  220. amsSaleOrder.setSaleOrderReceiveCustomer(saleOrderReceiveCustomer);
  221. amsSaleOrder.setSaleAccountBalance(new BigDecimal(saleAccountBalance));
  222. amsSaleOrder.setSaleCurrentOrderAmount(new BigDecimal(saleCurrentOrderAmount));
  223. if (saleHistoricalOrderAmount != null && saleHistoricalOrderAmount.length() != 0) {
  224. amsSaleOrder.setSaleHistoricalOrderAmount(new BigDecimal(saleHistoricalOrderAmount));
  225. }
  226. amsSaleOrder.setSaleOrderStatus(new BigDecimal(2));
  227. // 遍历物资分录,新增销售订单与物资中间表
  228. for (Map<String, Object> materialMap : mapList) {
  229. AmsSaleMaterial amsSaleMaterial = new AmsSaleMaterial();
  230. BigDecimal saleMaterialId = amsSaleMaterialMapper.getSaleMaterialId();
  231. amsSaleMaterial.setSaleMaterialId(saleMaterialId);
  232. amsSaleMaterial.setSaleOrderId(saleOrderId);
  233. // 仓库编码
  234. Object warehouseNum = materialMap.get("warehouseNum");
  235. // 仓库名称
  236. Object warehouseName = materialMap.get("warehouseName");
  237. // 物资理重
  238. Object meterWeight = materialMap.get("meterWeight");
  239. // 得到物资编码
  240. String materialCode = (String) materialMap.get("materialCode");
  241. if (warehouseName != null) {
  242. amsSaleMaterial.setSaleWarehouse(warehouseName.toString());
  243. //得到物资名称
  244. String materialName = amsSaleOrderCarrierMapper.getMaterialName(materialCode);
  245. // 如果是副产品仓库,则给自提订单自动匹配承运商
  246. if (warehouseName.equals("副产品库") && "是".equals(amsSaleOrder.getSaleOrderIsselfMention()) || "钒渣".equals(materialName) && "是".equals(amsSaleOrder.getSaleOrderIsselfMention()) ) {
  247. AmsSaleOrderCarrier amsSaleOrderCarrier = amsSaleOrderCarrierMapper.getAmsSaleOrderCarrier(saleOrderId);
  248. BigDecimal carrierId = amsSaleOrderCarrierMapper.findCarrierByConsignee(receiveUnitName);
  249. if (amsSaleOrderCarrier == null) {
  250. amsSaleOrderCarrier = new AmsSaleOrderCarrier();
  251. amsSaleOrderCarrier.setSaleOrderCarrierId(amsSaleOrderCarrierMapper.selectMaxId());
  252. amsSaleOrderCarrier.setCarrierId(amsSaleOrderCarrierMapper.selectMaxId());
  253. amsSaleOrderCarrier.setSaleOrderId(saleOrderId);
  254. amsSaleOrderCarrier.setCarrierId(carrierId);
  255. amsSaleOrderCarrier.setDeleted(new BigDecimal(0));
  256. amsSaleOrderCarrier.setInsertTime(new Date());
  257. amsSaleOrderCarrier.setInsertUsername("自动匹配");
  258. amsSaleOrderCarrier.setInsertUpdateRemark("自提订单自动匹配");
  259. result += amsSaleOrderCarrierMapper.insertSelective(amsSaleOrderCarrier);
  260. }
  261. else {
  262. amsSaleOrderCarrier.setCarrierId(carrierId);
  263. result += amsSaleOrderCarrierMapper.updateByPrimaryKeySelective(amsSaleOrderCarrier);
  264. }
  265. }
  266. }
  267. BigDecimal materialId = amsSaleMaterialMapper.getMaterialId(materialCode);
  268. // 得到金蝶分录主键
  269. String easPrimaryId = (String) materialMap.get("easPrimaryId");
  270. // 得到物资重量
  271. String materialWeight = (String) materialMap.get("materialNumber");
  272. // 得到物资件数
  273. String materialNumber = (String) materialMap.get("assistQty");
  274. // 得到计量单位
  275. String materialUnit = (String) materialMap.get("materialUnit");
  276. amsSaleMaterial.setEasPrimaryId(easPrimaryId);
  277. amsSaleMaterial.setMaterialId(materialId);
  278. amsSaleMaterial.setInsertTime(new Date());
  279. amsSaleMaterial.setInsertUsername("金蝶");
  280. amsSaleMaterial.setMeterWeight(DataChange.dataToBigDecimal(meterWeight));
  281. amsSaleMaterial.setInsertUpdateRemark("采集金蝶销售订单");
  282. if (materialWeight != null && !"".equals(materialWeight)) {
  283. amsSaleMaterial.setMaterialWeight(new BigDecimal(materialWeight));
  284. }
  285. if (materialNumber != null && !"".equals(materialNumber)) {
  286. amsSaleMaterial.setMaterialNumber(new BigDecimal(materialNumber));
  287. }
  288. result += amsSaleMaterialMapper.insertSelective(amsSaleMaterial);
  289. }
  290. result += amsSaleOrderMapper.insertSelective(amsSaleOrder);
  291. } else {
  292. AmsSaleOrder amsSaleOrder = amsSaleOrders.get(0);
  293. amsSaleOrder.setSaleNumber(saleNumber);
  294. amsSaleOrder.setSaleAccountBalance(new BigDecimal(saleAccountBalance));
  295. amsSaleOrder.setSaleCurrentOrderAmount(new BigDecimal(saleCurrentOrderAmount));
  296. amsSaleOrder.setSaleRemark(saleRemark);
  297. amsSaleOrder.setDeleted(new BigDecimal(0));
  298. amsSaleOrder.setUpdateTime(new Date());
  299. amsSaleOrder.setShipperId(shipperId);
  300. amsSaleOrder.setReceiveId(receiveId);
  301. // 如果是财务审批后,将不可作业的运输订单改为已接收状态
  302. if (orderStatus.equals("4")) {
  303. result += amsSaleOrderMapper.updateTruckOrderStatus(amsSaleOrder.getSaleOrderId());
  304. }
  305. if (isSelfMention != null) {
  306. if (isSelfMention.equals("CARRY")) {
  307. amsSaleOrder.setSaleOrderIsselfMention("是");
  308. } else {
  309. amsSaleOrder.setSaleOrderIsselfMention("否");
  310. }
  311. }
  312. if (saleHistoricalOrderAmount != null && saleHistoricalOrderAmount.length() != 0) {
  313. amsSaleOrder.setSaleHistoricalOrderAmount(new BigDecimal(saleHistoricalOrderAmount));
  314. }
  315. amsSaleOrder.setSaleOrderStatus(new BigDecimal(orderStatus));
  316. for (Map<String, Object> materialMap : mapList) {
  317. // 得到中间表主键id
  318. String saleMaterialId = (String) materialMap.get("saleMaterialId");
  319. // 得到金蝶分录id
  320. String easPrimaryId = (String) materialMap.get("easPrimaryId");
  321. Map<String,Object> resultMap = new HashMap<>();
  322. resultMap.put("easPrimaryId",easPrimaryId);
  323. AmsSaleMaterial amsSaleMaterial;
  324. // 得到物资重量
  325. String materialWeight = (String) materialMap.get("materialNumber");
  326. // 得到物资件数
  327. String materialNumber = (String) materialMap.get("assistQty");
  328. // 如果有物流系统销售订单物资表主键:认定是走物流新增的销售订单(通过物流系统主键进行查询)
  329. if (saleMaterialId != null && (!saleMaterialId.equals("null")) && !saleMaterialId.equals("")) {
  330. amsSaleMaterial = amsSaleMaterialMapper.selectByPrimaryKey(new BigDecimal(saleMaterialId));
  331. Object meterWeight = materialMap.get("meterWeight");
  332. if (meterWeight != null && !"".equals(meterWeight.toString())) {
  333. amsSaleMaterial.setMeterWeight(DataChange.dataToBigDecimal(meterWeight));
  334. }
  335. else {
  336. Double weightDouble = new Double(materialNumber);
  337. BigDecimal liWeight = new BigDecimal( weightDouble/amsSaleMaterial.getMaterialNumber().doubleValue() * 1000);
  338. amsSaleMaterial.setMeterWeight(liWeight);
  339. }
  340. // 同步修改车序号物资表
  341. resultMap.put("materialId",saleMaterialId);
  342. List<AmsSaleTrucknoMaterial> amsSaleTrucknoMaterials = amsSaleTrucknoMaterialMapper.selectByParameters(resultMap);
  343. AmsSaleTrucknoMaterial amsSaleTrucknoMaterial = amsSaleTrucknoMaterials.get(0);
  344. amsSaleTrucknoMaterial.setSaleOrderMaterialNumber(new BigDecimal(materialNumber));
  345. amsSaleTrucknoMaterial.setInsertUpdateRemark("在金蝶做修改");
  346. amsSaleTrucknoMaterialMapper.updateByPrimaryKeySelective(amsSaleTrucknoMaterial);
  347. }
  348. // 否则认定是走金蝶新增的销售订单(通过金蝶分录id进行查询)
  349. else {
  350. List<AmsSaleMaterial> amsSaleMaterials = amsSaleMaterialMapper.selectByParameters(resultMap);
  351. amsSaleMaterial = amsSaleMaterials.get(0);
  352. amsSaleMaterial.setInsertUsername("金蝶");
  353. amsSaleMaterial.setInsertUpdateRemark("采集金蝶销售订单");
  354. }
  355. // 得到物资编码
  356. String materialCode = (String) materialMap.get("materialCode");
  357. // 得到计量单位
  358. String materialUnit = (String) materialMap.get("materialUnit");
  359. if (materialWeight != null && !"".equals(materialWeight)) {
  360. amsSaleMaterial.setMaterialWeight(new BigDecimal(materialWeight));
  361. }
  362. if (materialNumber != null && !
  363. "".equals(materialNumber)) {
  364. amsSaleMaterial.setMaterialNumber(new BigDecimal(materialNumber));
  365. }
  366. BigDecimal materialId = amsSaleMaterialMapper.getMaterialId(materialCode);
  367. amsSaleMaterial.setEasPrimaryId(easPrimaryId);
  368. amsSaleMaterial.setSaleOrderId(amsSaleOrder.getSaleOrderId());
  369. amsSaleMaterial.setMaterialId(materialId);
  370. amsSaleMaterial.setInsertTime(new Date());
  371. result += amsSaleMaterialMapper.updateByPrimaryKeySelective(amsSaleMaterial);
  372. }
  373. result += amsSaleOrderMapper.updateByPrimaryKeySelective(amsSaleOrder);
  374. }
  375. }
  376. return result;
  377. }
  378. /**
  379. * 通过运单id得到车牌号
  380. * @param saleOrderMaterialId
  381. * @return
  382. */
  383. @Override
  384. public Map<String,Object> findCarNumberByOrderId(BigDecimal saleOrderMaterialId) {
  385. Map<String, Object> head = omstruckOrderMapper.findCarNumberByOrderId(saleOrderMaterialId);
  386. List<Map<String,Object>> entries = omstruckOrderMapper.findEntriesByOrderId(saleOrderMaterialId);
  387. Map<String,Object> input = new HashMap<>();
  388. input.put("entries",entries);
  389. input.put("head",head);
  390. return input;
  391. }
  392. }