OyeResultServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. package com.steerinfo.dil.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.steerinfo.dil.feign.BmsTruckFeign;
  4. import com.steerinfo.dil.mapper.OyeInboundResultMapper;
  5. import com.steerinfo.dil.mapper.OyeOutboundResultMapper;
  6. import com.steerinfo.dil.mapper.OyeRealtimeInventoryMapper;
  7. import com.steerinfo.dil.mapper.TmstruckWeightBatchMapper;
  8. import com.steerinfo.dil.model.OyeInboundResult;
  9. import com.steerinfo.dil.model.OyeOutboundResult;
  10. import com.steerinfo.dil.model.OyeRealtimeInventory;
  11. import com.steerinfo.dil.model.TmstruckWeightBatch;
  12. import com.steerinfo.dil.service.IOyeResultService;
  13. import com.steerinfo.dil.util.DataChange;
  14. import com.sun.org.apache.bcel.internal.generic.RETURN;
  15. import org.springframework.stereotype.Service;
  16. import org.springframework.transaction.annotation.Transactional;
  17. import javax.annotation.Resource;
  18. import javax.xml.crypto.Data;
  19. import java.math.BigDecimal;
  20. import java.util.*;
  21. @Service
  22. public class OyeResultServiceImpl implements IOyeResultService {
  23. @Resource
  24. OyeInboundResultMapper oyeInboundResultMapper;
  25. @Resource
  26. OyeOutboundResultMapper oyeOutboundResultMapper;
  27. @Resource
  28. OyeRealtimeInventoryMapper oyeRealtimeInventoryMapper;
  29. @Resource
  30. TmstruckWeightBatchMapper tmstruckWeightBatchMapper;
  31. @Resource
  32. BmsTruckFeign bmsTruckFeign;
  33. public List<Map<String, Object>> getOyeInboundResult(Map<String, Object> mapValue) {
  34. return oyeInboundResultMapper.getOyeInboundResult(mapValue);
  35. }
  36. public List<Map<String, Object>> getOyeOutboundResult(Map<String, Object> mapValue) {
  37. return oyeOutboundResultMapper.oyeOutboundResultMapper(mapValue);
  38. }
  39. public List<Map<String, Object>> getOyeRealTimeResult(Map<String, Object> mapValue) {
  40. return oyeRealtimeInventoryMapper.getOyeRealTimeResult(mapValue);
  41. }
  42. /**
  43. * 入库作业
  44. * @param mapValue
  45. * @return
  46. */
  47. @Transactional(rollbackFor = Exception.class)
  48. public synchronized String insertInboundResult(Map<String, Object> mapValue) throws Exception {
  49. List<Map<String,Object>> mapList = (List<Map<String,Object>>) mapValue.get("mapList");
  50. List<OyeInboundResult> OyeInboundResults = new ArrayList<>();
  51. List<OyeRealtimeInventory> oyeRealtimeInventoriesInsert = new ArrayList<>();
  52. List<OyeRealtimeInventory> oyeRealtimeInventoriesUpdate = new ArrayList<>();
  53. System.out.println("===========" + new Date());
  54. JSONObject jsonObject = new JSONObject(mapValue);
  55. System.out.println(jsonObject);
  56. System.out.println("===========" + new Date());
  57. for (Map<String,Object> map : mapList) {
  58. OyeInboundResult oyeInboundResult = new OyeInboundResult();
  59. BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId"));
  60. BigDecimal theoryWeight = DataChange.dataToBigDecimal(map.get("theoryWeight"));
  61. BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber"));
  62. BigDecimal singleWeight = theoryWeight.divide(materialNumber);
  63. BigDecimal meter = DataChange.dataToBigDecimal(map.get("meter"));
  64. oyeInboundResult.setResultId(oyeInboundResultMapper.getResultId());
  65. oyeInboundResult.setSaleArea(map.get("saleArea").toString());
  66. oyeInboundResult.setConsigneeId(DataChange.dataToBigDecimal(map.get("consigneeId")));
  67. oyeInboundResult.setCapacityId(DataChange.dataToBigDecimal(map.get("capacityId")));
  68. oyeInboundResult.setOrderId(DataChange.dataToBigDecimal(map.get("orderId")));
  69. oyeInboundResult.setSaleMaterialId(DataChange.dataToBigDecimal(map.get("saleMaterialId")));
  70. //判断该拼是否入库
  71. if (oyeInboundResultMapper.selectSaleMaterialID(DataChange.dataToBigDecimal(map.get("saleMaterialId"))) != null) {
  72. throw new Exception("该分录已入库,无法继续入库");
  73. }
  74. oyeInboundResult.setCapacityNumbher(map.get("capacityNumber") + "");
  75. oyeInboundResult.setInboundArea(map.get("inboundArea").toString());
  76. oyeInboundResult.setInboundWarehouse(map.get("inboundWarehouse").toString());
  77. oyeInboundResult.setSaleNo(map.get("saleNo") + "");
  78. oyeInboundResult.setMeter(meter);
  79. oyeInboundResult.setMaterialId(materialId);
  80. oyeInboundResult.setTheoryWeight(theoryWeight);
  81. oyeInboundResult.setSingleWeight(singleWeight);
  82. oyeInboundResult.setNetWeight(DataChange.dataToBigDecimal(map.get("netWeight")));
  83. oyeInboundResult.setMaterialNumber(materialNumber);
  84. oyeInboundResult.setInsertUsername(map.get("userName") + "");
  85. oyeInboundResult.setInsertTime(new Date());
  86. map.put("singleWeight",singleWeight);
  87. //根据区域,客户,物资,单重,米数,仓库,库区查询实时库存在不在
  88. BigDecimal inventoryId = oyeRealtimeInventoryMapper.getInventoryId(map);
  89. if (inventoryId == null) {
  90. //新增实时库存
  91. map.put("flag",1);
  92. OyeRealtimeInventory oyeRealtimeInventory = insertRealTimeInventory(map);
  93. oyeRealtimeInventoriesInsert.add(oyeRealtimeInventory);
  94. oyeInboundResult.setInventoryId(oyeRealtimeInventory.getInventoryId());
  95. }else{
  96. map.put("inventoryId",inventoryId);
  97. map.put("flag",1);
  98. OyeRealtimeInventory oyeRealtimeInventory = updateRealTimeInventory(map);
  99. oyeRealtimeInventoriesUpdate.add(oyeRealtimeInventory);
  100. }
  101. // 修改运单状态
  102. oyeInboundResultMapper.updateOrderStatus(DataChange.dataToBigDecimal(map.get("orderId")));
  103. OyeInboundResults.add(oyeInboundResult);
  104. }
  105. oyeInboundResultMapper.batchInsert(OyeInboundResults);
  106. if (oyeRealtimeInventoriesInsert.size() > 0) {
  107. oyeRealtimeInventoryMapper.batchInsert(oyeRealtimeInventoriesInsert);
  108. }
  109. if (oyeRealtimeInventoriesUpdate.size() > 0) {
  110. oyeRealtimeInventoryMapper.batchUpdate(oyeRealtimeInventoriesUpdate);
  111. }
  112. return "入库成功";
  113. }
  114. @Transactional(rollbackFor = Exception.class)
  115. public synchronized String insertOutboundResult(Map<String,Object> mapValue) throws Exception {
  116. List<OyeOutboundResult> oyeOutboundResults = new ArrayList<>();
  117. List<TmstruckWeightBatch> tmstruckWeightBatches = new ArrayList<>();
  118. List<OyeRealtimeInventory> oyeRealtimeInventories = new ArrayList<>();
  119. List<Map<String,Object>> mapList = (List<Map<String,Object>>) mapValue.get("mapList");
  120. System.out.println("===========" + new Date());
  121. JSONObject jsonObject = new JSONObject(mapValue);
  122. System.out.println(jsonObject);
  123. System.out.println("===========" + new Date());
  124. for (Map<String,Object> map : mapList) {
  125. OyeOutboundResult oyeOutboundResult = new OyeOutboundResult();
  126. BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId"));
  127. BigDecimal theoryWeight = DataChange.dataToBigDecimal(map.get("theoryWeight"));
  128. BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber"));
  129. if(materialNumber == null || materialNumber.intValue() == 0) {
  130. throw new Exception("物资件数错误");
  131. }
  132. BigDecimal singleWeight = theoryWeight.divide(materialNumber);
  133. BigDecimal meter = DataChange.dataToBigDecimal(map.get("meter"));
  134. oyeOutboundResult.setResultId(oyeOutboundResultMapper.getResultId());
  135. oyeOutboundResult.setSaleArea(map.get("saleArea").toString());
  136. oyeOutboundResult.setConsigneeId(DataChange.dataToBigDecimal(map.get("consigneeId")));
  137. oyeOutboundResult.setCapacityNumbher(map.get("capacityNumber") + "");
  138. oyeOutboundResult.setCapacityId(DataChange.dataToBigDecimal(map.get("capacityId")));
  139. oyeOutboundResult.setOrderId(DataChange.dataToBigDecimal(map.get("orderId")));
  140. oyeOutboundResult.setCapacityNumbher(map.get("capacityNumber") + "");
  141. oyeOutboundResult.setInboundArea(map.get("inboundArea").toString());
  142. oyeOutboundResult.setInboundWarehouse(map.get("inboundWarehouse").toString());
  143. oyeOutboundResult.setSaleMaterialId(DataChange.dataToBigDecimal(map.get("saleMaterialId")));
  144. //判断该拼是否出库
  145. if (oyeOutboundResultMapper.selectSaleMaterialID(DataChange.dataToBigDecimal(map.get("saleMaterialId"))) != null) {
  146. throw new Exception("该分录已出库,无法继续出库");
  147. }
  148. //更新制单日期
  149. oyeOutboundResult.setMeter(meter);
  150. oyeOutboundResult.setMaterialId(materialId);
  151. oyeOutboundResult.setTheoryWeight(theoryWeight);
  152. oyeOutboundResult.setSingleWeight(singleWeight);
  153. oyeOutboundResult.setNetWeight(DataChange.dataToBigDecimal(map.get("netWeight")));
  154. oyeOutboundResult.setMaterialNumber(materialNumber);
  155. oyeOutboundResult.setInsertUsername(map.get("userName") + "");
  156. oyeOutboundResult.setInsertTime(new Date());
  157. map.put("singleWeight",singleWeight);
  158. //根据区域,客户,物资,单重,米数,仓库,库区查询实时库存在不在
  159. BigDecimal inventoryId = oyeRealtimeInventoryMapper.getInventoryId(map);
  160. oyeOutboundResult.setInventoryId(inventoryId);
  161. map.put("inventoryId",inventoryId);
  162. map.put("flag",2);
  163. OyeRealtimeInventory oyeRealtimeInventory = updateRealTimeInventory(map);
  164. oyeRealtimeInventories.add(oyeRealtimeInventory);
  165. TmstruckWeightBatch tmstruckWeightBatch = generateWeightBatch(map);
  166. tmstruckWeightBatches.add(tmstruckWeightBatch);
  167. Map<String, Object> updateMap = new HashMap<>();
  168. updateMap.put("weightBatchId",tmstruckWeightBatch.getWeightBatchId());
  169. updateMap.put("materialNumber",materialNumber);
  170. updateMap.put("saleMaterialId",DataChange.dataToBigDecimal(map.get("saleMaterialId")));
  171. updateMap.put("materialWeight",theoryWeight);
  172. oyeOutboundResultMapper.updateSaleMakeDate(updateMap);
  173. oyeOutboundResultMapper.updateOrderStatus(DataChange.dataToBigDecimal(map.get("orderId")));
  174. oyeOutboundResults.add(oyeOutboundResult);
  175. }
  176. oyeOutboundResultMapper.batchInsert(oyeOutboundResults);
  177. oyeRealtimeInventoryMapper.batchUpdate(oyeRealtimeInventories);
  178. tmstruckWeightBatchMapper.batchInsert(tmstruckWeightBatches);
  179. return "出库成功";
  180. }
  181. /**
  182. * 新增实时库存
  183. */
  184. @Transactional(rollbackFor = Exception.class)
  185. public synchronized OyeRealtimeInventory insertRealTimeInventory(Map<String,Object> map) {
  186. BigDecimal inventoryId = oyeRealtimeInventoryMapper.getResultId();
  187. OyeRealtimeInventory oyeRealtimeInventory = new OyeRealtimeInventory();
  188. oyeRealtimeInventory.setInventoryId(inventoryId);
  189. oyeRealtimeInventory.setSaleArea(map.get("saleArea").toString());
  190. oyeRealtimeInventory.setConsigneeId(DataChange.dataToBigDecimal(map.get("consigneeId")));
  191. oyeRealtimeInventory.setInboundWarehouse(map.get("inboundWarehouse").toString());
  192. oyeRealtimeInventory.setInboundArea(map.get("inboundArea").toString());
  193. oyeRealtimeInventory.setMaterialId(DataChange.dataToBigDecimal(map.get("materialId")));
  194. oyeRealtimeInventory.setMeter(DataChange.dataToBigDecimal(map.get("meter")));
  195. oyeRealtimeInventory.setSingleWeight(DataChange.dataToBigDecimal(map.get("singleWeight")));
  196. oyeRealtimeInventory.setTheoryWeight(DataChange.dataToBigDecimal(map.get("theoryWeight")));
  197. oyeRealtimeInventory.setMaterialNumber(DataChange.dataToBigDecimal(map.get("materialNumber")));
  198. oyeRealtimeInventory.setNetWeight(DataChange.dataToBigDecimal(map.get("netWeight")));
  199. oyeRealtimeInventory.setInsertTime(new Date());
  200. return oyeRealtimeInventory;
  201. }
  202. /**
  203. * 更新实时库存
  204. */
  205. @Transactional(rollbackFor = Exception.class)
  206. public synchronized OyeRealtimeInventory updateRealTimeInventory(Map<String,Object> map) throws Exception {
  207. //更新实时库存
  208. BigDecimal inventoryId = DataChange.dataToBigDecimal(map.get("inventoryId"));
  209. // flag为1,则为入库,为2则为出库
  210. BigDecimal flag = DataChange.dataToBigDecimal(map.get("flag"));
  211. BigDecimal theoryWeight = DataChange.dataToBigDecimal(map.get("theoryWeight"));
  212. BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber"));
  213. BigDecimal netWeight = DataChange.dataToBigDecimal(map.get("netWeight"));
  214. OyeRealtimeInventory oyeRealtimeInventory = oyeRealtimeInventoryMapper.selectByPrimaryKey(inventoryId);
  215. if (flag.compareTo(new BigDecimal(1)) == 0) {
  216. oyeRealtimeInventory.setNetWeight(oyeRealtimeInventory.getNetWeight().add(netWeight));
  217. oyeRealtimeInventory.setTheoryWeight(oyeRealtimeInventory.getTheoryWeight().add(theoryWeight));
  218. oyeRealtimeInventory.setMaterialNumber(oyeRealtimeInventory.getMaterialNumber().add(materialNumber));
  219. } else {
  220. BigDecimal realTimeTheoryWeight = oyeRealtimeInventory.getTheoryWeight();
  221. BigDecimal realTimeMaterialNumber = oyeRealtimeInventory.getMaterialNumber();
  222. BigDecimal realTimeNetWeight = oyeRealtimeInventory.getNetWeight();
  223. if (realTimeTheoryWeight.compareTo(theoryWeight) >= 0) {
  224. oyeRealtimeInventory.setTheoryWeight(realTimeTheoryWeight.subtract(theoryWeight));
  225. }
  226. if (realTimeMaterialNumber.compareTo(materialNumber) >= 0 ) {
  227. oyeRealtimeInventory.setMaterialNumber(realTimeMaterialNumber.subtract(materialNumber));
  228. }else{
  229. throw new Exception("出库件数大于库存件数,无法出库");
  230. }
  231. oyeRealtimeInventory.setNetWeight(realTimeNetWeight.subtract(netWeight));
  232. }
  233. return oyeRealtimeInventory;
  234. }
  235. @Transactional(rollbackFor = Exception.class)
  236. public TmstruckWeightBatch generateWeightBatch(Map<String,Object> map) {
  237. TmstruckWeightBatch tmstruckWeightBatch = new TmstruckWeightBatch();
  238. BigDecimal weightBatchId = tmstruckWeightBatchMapper.weightBatchID();
  239. tmstruckWeightBatch.setId(weightBatchId);
  240. tmstruckWeightBatch.setBatchNetWeight(DataChange.dataToBigDecimal(map.get("netWeight")));
  241. tmstruckWeightBatch.setBatchGrossWeightTime(new Date());
  242. tmstruckWeightBatch.setBatchRemark("出库生成批次");
  243. return tmstruckWeightBatch;
  244. }
  245. }