OyeResultServiceImpl.java 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588
  1. package com.steerinfo.dil.service.impl;
  2. import com.alibaba.excel.EasyExcel;
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.steerinfo.dil.feign.BmsTruckFeign;
  6. import com.steerinfo.dil.mapper.OyeInboundResultMapper;
  7. import com.steerinfo.dil.mapper.OyeOutboundResultMapper;
  8. import com.steerinfo.dil.mapper.OyeRealtimeInventoryMapper;
  9. import com.steerinfo.dil.mapper.TmstruckWeightBatchMapper;
  10. import com.steerinfo.dil.model.*;
  11. import com.steerinfo.dil.service.IOyeResultService;
  12. import com.steerinfo.dil.util.DataChange;
  13. import org.springframework.scheduling.annotation.Scheduled;
  14. import org.springframework.stereotype.Service;
  15. import org.springframework.transaction.annotation.Transactional;
  16. import javax.annotation.Resource;
  17. import java.math.BigDecimal;
  18. import java.text.SimpleDateFormat;
  19. import java.util.*;
  20. @Service
  21. public class OyeResultServiceImpl implements IOyeResultService {
  22. @Resource
  23. OyeInboundResultMapper oyeInboundResultMapper;
  24. @Resource
  25. OyeOutboundResultMapper oyeOutboundResultMapper;
  26. @Resource
  27. OyeRealtimeInventoryMapper oyeRealtimeInventoryMapper;
  28. @Resource
  29. TmstruckWeightBatchMapper tmstruckWeightBatchMapper;
  30. @Resource
  31. BmsTruckFeign bmsTruckFeign;
  32. public List<Map<String, Object>> getOyeInboundResult(Map<String, Object> mapValue) {
  33. List<Map<String,Object>> mapList = oyeInboundResultMapper.getOyeInboundResult(mapValue);
  34. int i = 0;
  35. for (Map<String,Object> map : mapList) {
  36. if(i == 0) {
  37. i++;
  38. continue;
  39. }
  40. Map<String,Object> stringObjectMap = mapList.get(i-1);
  41. if (DataChange.dataToBigDecimal(stringObjectMap.get("weightBatchId")).compareTo(DataChange.dataToBigDecimal(map.get("weightBatchId"))) == 0) {
  42. map.put("netWeight",0);
  43. map.put("orderNetWeight",0);
  44. }
  45. i++;
  46. }
  47. return mapList;
  48. }
  49. public List<Map<String, Object>> getOyeOutboundResult(Map<String, Object> mapValue) {
  50. return oyeOutboundResultMapper.oyeOutboundResultMapper(mapValue);
  51. }
  52. public List<Map<String, Object>> getOyeRealTimeResult(Map<String, Object> mapValue) {
  53. return oyeRealtimeInventoryMapper.getOyeRealTimeResult(mapValue);
  54. }
  55. /**
  56. * 入库作业
  57. * @param mapValue
  58. * @return
  59. */
  60. public synchronized String insertInboundResult(Map<String, Object> mapValue) throws Exception {
  61. List<Map<String,Object>> mapList = (List<Map<String,Object>>) mapValue.get("mapList");
  62. System.out.println("===========" + new Date());
  63. JSONObject jsonObject = new JSONObject(mapValue);
  64. System.out.println(jsonObject);
  65. System.out.println("===========" + new Date());
  66. for (Map<String,Object> map : mapList) {
  67. //判断该拼是否入库
  68. if (oyeInboundResultMapper.selectSaleMaterialID(DataChange.dataToBigDecimal(map.get("saleMaterialId"))) != null) {
  69. throw new Exception("该分录已入库,无法继续入库");
  70. }
  71. //判断该分录是否有净重
  72. if (DataChange.dataToBigDecimal(map.get("netWeight")) == null || DataChange.dataToBigDecimal(map.get("netWeight")).intValue() == 0) {
  73. throw new Exception("该分录无净重,不允许入库");
  74. }
  75. }
  76. for (Map<String,Object> map : mapList) {
  77. insertInboundResultReal(map);
  78. }
  79. return "入库成功";
  80. }
  81. @Transactional(rollbackFor = Exception.class)
  82. public synchronized int insertInboundResultReal(Map<String,Object> map) throws Exception {
  83. int i = 0;
  84. //根据分录ID查询理重
  85. BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber"));
  86. BigDecimal theoryWeightSaleMaterial = oyeRealtimeInventoryMapper.getTheoryWeight(DataChange.dataToBigDecimal(map.get("saleMaterialId")));
  87. BigDecimal singleWeight = theoryWeightSaleMaterial.divide(materialNumber,4,BigDecimal.ROUND_HALF_UP);
  88. //根据分录理重
  89. OyeInboundResult oyeInboundResult = new OyeInboundResult();
  90. BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId"));
  91. BigDecimal theoryWeight = DataChange.dataToBigDecimal(map.get("theoryWeight"));
  92. BigDecimal meter = DataChange.dataToBigDecimal(map.get("meter"));
  93. oyeInboundResult.setResultId(oyeInboundResultMapper.getResultId());
  94. oyeInboundResult.setSaleArea(map.get("saleArea").toString());
  95. oyeInboundResult.setConsigneeId(DataChange.dataToBigDecimal(map.get("consigneeId")));
  96. oyeInboundResult.setCapacityId(DataChange.dataToBigDecimal(map.get("capacityId")));
  97. oyeInboundResult.setOrderId(DataChange.dataToBigDecimal(map.get("orderId")));
  98. oyeInboundResult.setSaleMaterialId(DataChange.dataToBigDecimal(map.get("saleMaterialId")));
  99. oyeInboundResult.setCapacityNumbher(map.get("capacityNumber") + "");
  100. oyeInboundResult.setInboundArea(map.get("inboundArea").toString());
  101. oyeInboundResult.setInboundWarehouse(map.get("inboundWarehouse").toString());
  102. oyeInboundResult.setSaleNo(map.get("saleNo") + "");
  103. if (meter != null && meter.intValue() != 0) {
  104. oyeInboundResult.setMeter(meter);
  105. }
  106. oyeInboundResult.setMaterialId(materialId);
  107. oyeInboundResult.setTheoryWeight(theoryWeight);
  108. oyeInboundResult.setSingleWeight(singleWeight);
  109. oyeInboundResult.setNetWeight(DataChange.dataToBigDecimal(map.get("netWeight")));
  110. oyeInboundResult.setMaterialNumber(materialNumber);
  111. oyeInboundResult.setInsertUsername(map.get("userName") + "");
  112. oyeInboundResult.setInsertTime(new Date());
  113. map.put("singleWeight",singleWeight);
  114. //根据区域,客户,物资,单重,米数,仓库,库区查询实时库存在不在
  115. BigDecimal inventoryId = oyeRealtimeInventoryMapper.getInventoryId(map);
  116. if (inventoryId == null) {
  117. //新增实时库存
  118. map.put("flag",1);
  119. OyeRealtimeInventory oyeRealtimeInventory = insertRealTimeInventory(map);
  120. oyeInboundResult.setInventoryId(oyeRealtimeInventory.getInventoryId());
  121. map.put("inventoryId",oyeRealtimeInventory.getInventoryId());
  122. oyeRealtimeInventoryMapper.insertSelective(oyeRealtimeInventory);
  123. }else{
  124. map.put("inventoryId",inventoryId);
  125. map.put("flag",1);
  126. OyeRealtimeInventory oyeRealtimeInventory = updateRealTimeInventory(map);
  127. oyeInboundResult.setInventoryId(oyeRealtimeInventory.getInventoryId());
  128. oyeRealtimeInventoryMapper.updateByPrimaryKeySelective(oyeRealtimeInventory);
  129. }
  130. if (!map.get("place").equals(map.get("inboundWarehouse"))) {
  131. //如果收货地址与place,则需要修改收货地址
  132. BigDecimal newPlaceId = oyeInboundResultMapper.getPlaceId(map.get("inboundWarehouse").toString());
  133. //修改收货地址
  134. Map<String, Object> addressMap = new HashMap<>();
  135. addressMap.put("newPlaceId",newPlaceId);
  136. addressMap.put("placeId",DataChange.dataToBigDecimal(map.get("placeId")));
  137. addressMap.put("saleMaterialId",DataChange.dataToBigDecimal(map.get("saleMaterialId")));
  138. oyeInboundResultMapper.updateAddressPlace(addressMap);
  139. }
  140. //判断该运单有没有签收实绩
  141. String receiptAddress = oyeInboundResultMapper.selectReceiptResultId(DataChange.dataToBigDecimal(map.get("orderId")));
  142. if(receiptAddress != null) {
  143. oyeInboundResultMapper.updateOOOrderStatus(DataChange.dataToBigDecimal(map.get("orderId")));
  144. }
  145. // 修改运单状态
  146. oyeInboundResultMapper.updateOrderStatus(DataChange.dataToBigDecimal(map.get("orderId")));
  147. //新增入库实绩
  148. oyeInboundResultMapper.insertSelective(oyeInboundResult);
  149. return i;
  150. }
  151. @Transactional(rollbackFor = Exception.class)
  152. public synchronized String insertOutboundResult(Map<String,Object> mapValue) throws Exception {
  153. if (DataChange.dataToBigDecimal(mapValue.get("reUpdateOutBound")).intValue() == 1) {
  154. reUpdateOutBound(mapValue);
  155. return "操作成功";
  156. }
  157. List<OyeOutboundResult> oyeOutboundResults = new ArrayList<>();
  158. List<TmstruckWeightBatch> tmstruckWeightBatches = new ArrayList<>();
  159. List<OyeRealtimeInventory> oyeRealtimeInventories = new ArrayList<>();
  160. List<Map<String,Object>> mapList = (List<Map<String,Object>>) mapValue.get("mapList");
  161. System.out.println("===========" + new Date());
  162. JSONObject jsonObject = new JSONObject(mapValue);
  163. System.out.println(jsonObject);
  164. System.out.println("===========" + new Date());
  165. for (Map<String,Object> map : mapList) {
  166. //判断该拼是否出库
  167. if (oyeOutboundResultMapper.selectSaleMaterialID(DataChange.dataToBigDecimal(map.get("saleMaterialId"))) != null) {
  168. throw new Exception("该分录已出库,无法继续出库");
  169. }
  170. //根据实时库存ID获取单重
  171. BigDecimal inventoryId = DataChange.dataToBigDecimal(map.get("inventoryId"));
  172. BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber"));
  173. BigDecimal singleWeight = oyeRealtimeInventoryMapper.getSingleWeight(inventoryId);
  174. BigDecimal theoryWeightSaleMaterial = singleWeight.multiply(materialNumber);
  175. OyeOutboundResult oyeOutboundResult = new OyeOutboundResult();
  176. BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId"));
  177. BigDecimal theoryWeight = DataChange.dataToBigDecimal(map.get("theoryWeight"));
  178. BigDecimal netWeight = DataChange.dataToBigDecimal(map.get("netWeight"));
  179. if(materialNumber == null || materialNumber.intValue() == 0) {
  180. throw new Exception("物资件数错误");
  181. }
  182. if(netWeight == null || netWeight.intValue() == 0) {
  183. continue;
  184. }
  185. //查询比例
  186. BigDecimal compareValue = DataChange.dataToBigDecimal(oyeRealtimeInventoryMapper.selectCompareValue());
  187. BigDecimal theoryAdd = theoryWeightSaleMaterial.multiply(compareValue.add(new BigDecimal(1)));
  188. BigDecimal theorySub = theoryWeightSaleMaterial.multiply(new BigDecimal(1).subtract(compareValue));
  189. if (netWeight.compareTo(theoryAdd) > 0 || netWeight.compareTo(theorySub) < 0) {
  190. throw new Exception("净重不在理重的" + compareValue + "范围内");
  191. }
  192. //BigDecimal singleWeight = theoryWeight.divide(materialNumber);
  193. BigDecimal meter = DataChange.dataToBigDecimal(map.get("meter"));
  194. oyeOutboundResult.setResultId(oyeOutboundResultMapper.getResultId());
  195. oyeOutboundResult.setSaleArea(map.get("saleArea").toString());
  196. oyeOutboundResult.setConsigneeId(DataChange.dataToBigDecimal(map.get("consigneeId")));
  197. oyeOutboundResult.setCapacityNumbher(map.get("capacityNumber") + "");
  198. oyeOutboundResult.setCapacityId(DataChange.dataToBigDecimal(map.get("capacityId")));
  199. oyeOutboundResult.setOrderId(DataChange.dataToBigDecimal(map.get("orderId")));
  200. oyeOutboundResult.setCapacityNumbher(map.get("capacityNumber") + "");
  201. oyeOutboundResult.setInboundArea(map.get("inboundArea").toString());
  202. oyeOutboundResult.setInboundWarehouse(map.get("inboundWarehouse").toString());
  203. oyeOutboundResult.setSaleMaterialId(DataChange.dataToBigDecimal(map.get("saleMaterialId")));
  204. //更新制单日期
  205. oyeOutboundResult.setMeter(meter);
  206. oyeOutboundResult.setMaterialId(materialId);
  207. oyeOutboundResult.setTheoryWeight(theoryWeight);
  208. oyeOutboundResult.setSingleWeight(singleWeight);
  209. oyeOutboundResult.setNetWeight(netWeight);
  210. oyeOutboundResult.setMaterialNumber(materialNumber);
  211. oyeOutboundResult.setInsertUsername(map.get("userName") + "");
  212. oyeOutboundResult.setInsertTime(new Date());
  213. map.put("singleWeight",singleWeight);
  214. //根据区域,客户,物资,单重,米数,仓库,库区查询实时库存在不在
  215. oyeOutboundResult.setInventoryId(inventoryId);
  216. map.put("inventoryId",inventoryId);
  217. map.put("flag",2);
  218. OyeRealtimeInventory oyeRealtimeInventory = updateRealTimeInventory(map);
  219. oyeRealtimeInventories.add(oyeRealtimeInventory);
  220. TmstruckWeightBatch tmstruckWeightBatch = generateWeightBatch(map);
  221. tmstruckWeightBatches.add(tmstruckWeightBatch);
  222. Map<String, Object> updateMap = new HashMap<>();
  223. updateMap.put("weightBatchId",tmstruckWeightBatch.getWeightBatchId());
  224. updateMap.put("materialNumber",materialNumber);
  225. updateMap.put("saleMaterialId",DataChange.dataToBigDecimal(map.get("saleMaterialId")));
  226. updateMap.put("materialWeight",theoryWeight);
  227. oyeOutboundResultMapper.updateSaleMakeDate(updateMap);
  228. oyeOutboundResultMapper.updateOrderStatus(DataChange.dataToBigDecimal(map.get("orderId")));
  229. oyeOutboundResults.add(oyeOutboundResult);
  230. }
  231. oyeOutboundResultMapper.batchInsert(oyeOutboundResults);
  232. oyeRealtimeInventoryMapper.batchUpdate(oyeRealtimeInventories);
  233. tmstruckWeightBatchMapper.batchInsert(tmstruckWeightBatches);
  234. return "出库成功";
  235. }
  236. /**
  237. * 新增实时库存
  238. */
  239. @Transactional(rollbackFor = Exception.class)
  240. public synchronized OyeRealtimeInventory insertRealTimeInventory(Map<String,Object> map) {
  241. BigDecimal inventoryId = oyeRealtimeInventoryMapper.getResultId();
  242. OyeRealtimeInventory oyeRealtimeInventory = new OyeRealtimeInventory();
  243. oyeRealtimeInventory.setInventoryId(inventoryId);
  244. oyeRealtimeInventory.setSaleArea(map.get("saleArea").toString());
  245. oyeRealtimeInventory.setConsigneeId(DataChange.dataToBigDecimal(map.get("consigneeId")));
  246. oyeRealtimeInventory.setInboundWarehouse(map.get("inboundWarehouse").toString());
  247. oyeRealtimeInventory.setInboundArea(map.get("inboundArea").toString());
  248. oyeRealtimeInventory.setMaterialId(DataChange.dataToBigDecimal(map.get("materialId")));
  249. BigDecimal meter = DataChange.dataToBigDecimal(map.get("meter"));
  250. if (meter != null && meter.intValue() != 0) {
  251. oyeRealtimeInventory.setMeter(meter);
  252. }
  253. oyeRealtimeInventory.setSingleWeight(DataChange.dataToBigDecimal(map.get("singleWeight")));
  254. oyeRealtimeInventory.setTheoryWeight(DataChange.dataToBigDecimal(map.get("theoryWeight")));
  255. oyeRealtimeInventory.setMaterialNumber(DataChange.dataToBigDecimal(map.get("materialNumber")));
  256. oyeRealtimeInventory.setNetWeight(DataChange.dataToBigDecimal(map.get("netWeight")));
  257. oyeRealtimeInventory.setInsertTime(new Date());
  258. return oyeRealtimeInventory;
  259. }
  260. /**
  261. * 更新实时库存
  262. */
  263. @Transactional(rollbackFor = Exception.class)
  264. public synchronized OyeRealtimeInventory updateRealTimeInventory(Map<String,Object> map) throws Exception {
  265. //更新实时库存
  266. BigDecimal inventoryId = DataChange.dataToBigDecimal(map.get("inventoryId"));
  267. // flag为1,则为入库,为2则为出库
  268. BigDecimal flag = DataChange.dataToBigDecimal(map.get("flag"));
  269. BigDecimal theoryWeight = DataChange.dataToBigDecimal(map.get("theoryWeight"));
  270. BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber"));
  271. BigDecimal netWeight = DataChange.dataToBigDecimal(map.get("netWeight"));
  272. OyeRealtimeInventory oyeRealtimeInventory = oyeRealtimeInventoryMapper.selectByPrimaryKey(inventoryId);
  273. if (flag.compareTo(new BigDecimal(1)) == 0) {
  274. oyeRealtimeInventory.setNetWeight(oyeRealtimeInventory.getNetWeight().add(netWeight));
  275. oyeRealtimeInventory.setTheoryWeight(oyeRealtimeInventory.getTheoryWeight().add(theoryWeight));
  276. oyeRealtimeInventory.setMaterialNumber(oyeRealtimeInventory.getMaterialNumber().add(materialNumber));
  277. } else {
  278. BigDecimal realTimeTheoryWeight = oyeRealtimeInventory.getTheoryWeight();
  279. BigDecimal realTimeMaterialNumber = oyeRealtimeInventory.getMaterialNumber();
  280. BigDecimal realTimeNetWeight = oyeRealtimeInventory.getNetWeight();
  281. if (realTimeTheoryWeight.compareTo(theoryWeight) >= 0) {
  282. oyeRealtimeInventory.setTheoryWeight(realTimeTheoryWeight.subtract(theoryWeight));
  283. }
  284. if (realTimeMaterialNumber.compareTo(materialNumber) >= 0 ) {
  285. oyeRealtimeInventory.setMaterialNumber(realTimeMaterialNumber.subtract(materialNumber));
  286. }else{
  287. throw new Exception("出库件数大于库存件数,无法出库");
  288. }
  289. oyeRealtimeInventory.setNetWeight(realTimeNetWeight.subtract(netWeight));
  290. }
  291. return oyeRealtimeInventory;
  292. }
  293. @Transactional(rollbackFor = Exception.class)
  294. public TmstruckWeightBatch generateWeightBatch(Map<String,Object> map) {
  295. TmstruckWeightBatch tmstruckWeightBatch = new TmstruckWeightBatch();
  296. BigDecimal weightBatchId = tmstruckWeightBatchMapper.weightBatchID();
  297. tmstruckWeightBatch.setId(weightBatchId);
  298. tmstruckWeightBatch.setBatchNetWeight(DataChange.dataToBigDecimal(map.get("netWeight")));
  299. tmstruckWeightBatch.setBatchGrossWeightTime(new Date());
  300. tmstruckWeightBatch.setBatchRemark("出库生成批次");
  301. return tmstruckWeightBatch;
  302. }
  303. @Transactional(rollbackFor = Exception.class)
  304. public synchronized String updateInsertRealTime(Map<String, Object> map) throws Exception{
  305. System.out.println("===========" + new Date());
  306. JSONObject jsonObject = new JSONObject(map);
  307. System.out.println(jsonObject);
  308. System.out.println("===========" + new Date());
  309. // 划分实时库存数据
  310. // 针对原先的库存,需要进行出库;针对划分后的库存需要进行入库;先出后入;
  311. // 创建出库需要的数据;
  312. Map<String, Object> jiChuMap = new HashMap<>();
  313. jiChuMap.put("inventoryId",map.get("inventoryId"));
  314. BigDecimal newInventoryId = DataChange.dataToBigDecimal(map.get("newInventoryId"));
  315. OyeOutboundResult oyeOutboundResult = new OyeOutboundResult();
  316. oyeOutboundResult.setId(oyeOutboundResultMapper.getResultId());
  317. BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId"));
  318. BigDecimal theoryWeight = DataChange.dataToBigDecimal(map.get("theoryWeight"));
  319. BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber"));
  320. if(materialNumber == null || materialNumber.intValue() == 0) {
  321. throw new Exception("物资件数错误");
  322. }
  323. BigDecimal singleWeight = DataChange.dataToBigDecimal(map.get("singleWeight"));
  324. BigDecimal meter = DataChange.dataToBigDecimal(map.get("meter"));
  325. oyeOutboundResult.setSaleArea(map.get("oldSaleArea").toString());
  326. oyeOutboundResult.setConsigneeId(DataChange.dataToBigDecimal(map.get("consigneeId")));
  327. oyeOutboundResult.setInboundArea(map.get("inboundArea").toString());
  328. oyeOutboundResult.setInboundWarehouse(map.get("inboundWarehouse").toString());
  329. //更新制单日期
  330. oyeOutboundResult.setMeter(meter);
  331. oyeOutboundResult.setMaterialId(materialId);
  332. oyeOutboundResult.setTheoryWeight(theoryWeight);
  333. oyeOutboundResult.setSingleWeight(singleWeight);
  334. oyeOutboundResult.setNetWeight(DataChange.dataToBigDecimal(map.get("netWeight")));
  335. oyeOutboundResult.setMaterialNumber(materialNumber);
  336. oyeOutboundResult.setInsertUsername(map.get("userName") + "");
  337. oyeOutboundResult.setInsertTime(new Date());
  338. oyeOutboundResult.setInventoryId(DataChange.dataToBigDecimal(map.get("inventoryId")));
  339. oyeOutboundResult.setMaterialNumber(DataChange.dataToBigDecimal(map.get("materialNumber")));
  340. oyeOutboundResult.setTheoryWeight(DataChange.dataToBigDecimal(map.get("theoryWeight")));
  341. oyeOutboundResult.setNetWeight(DataChange.dataToBigDecimal(map.get("netWeight")));
  342. Map<String, Object> outBoundMap = new HashMap<>();
  343. outBoundMap.put("inventoryId",map.get("inventoryId"));
  344. outBoundMap.put("materialNumber",oyeOutboundResult.getMaterialNumber());
  345. outBoundMap.put("netWeight",oyeOutboundResult.getNetWeight());
  346. outBoundMap.put("theoryWeight",oyeOutboundResult.getTheoryWeight());
  347. outBoundMap.put("flag",2);
  348. OyeRealtimeInventory oyeRealtimeInventoryOut = updateRealTimeInventory(outBoundMap);
  349. // 创建入库需要的数据
  350. OyeInboundResult oyeInboundResult = new OyeInboundResult();
  351. oyeInboundResult.setResultId(oyeInboundResultMapper.getResultId());
  352. oyeInboundResult.setSaleArea(map.get("saleArea").toString());
  353. oyeInboundResult.setConsigneeId(DataChange.dataToBigDecimal(map.get("consigneeId")));
  354. oyeInboundResult.setInboundArea(map.get("inboundArea").toString());
  355. oyeInboundResult.setInboundWarehouse(map.get("inboundWarehouse").toString());
  356. oyeInboundResult.setMeter(meter);
  357. oyeInboundResult.setMaterialId(materialId);
  358. oyeInboundResult.setTheoryWeight(theoryWeight);
  359. oyeInboundResult.setSingleWeight(singleWeight);
  360. oyeInboundResult.setNetWeight(DataChange.dataToBigDecimal(map.get("netWeight")));
  361. oyeInboundResult.setMaterialNumber(materialNumber);
  362. oyeInboundResult.setInsertUsername(map.get("userName") + "");
  363. oyeInboundResult.setInsertTime(new Date());
  364. map.put("singleWeight",singleWeight);
  365. OyeRealtimeInventory oyeRealtimeInventoryInsert = null;
  366. OyeRealtimeInventory oyeRealtimeInventoryUpdate = null;
  367. //根据区域,客户,物资,单重,米数,仓库,库区查询实时库存在不在
  368. BigDecimal inventoryId = null ;
  369. if(newInventoryId == null || newInventoryId.intValue() == 0) {
  370. inventoryId = oyeRealtimeInventoryMapper.getInventoryId(map);
  371. }else{
  372. inventoryId = newInventoryId;
  373. }
  374. if (inventoryId != null && inventoryId.compareTo(DataChange.dataToBigDecimal(map.get("inventoryId"))) == 0) {
  375. throw new Exception("库存ID一致无法划分");
  376. }
  377. if (inventoryId == null) {
  378. //新增实时库存
  379. map.put("flag",1);
  380. oyeRealtimeInventoryInsert = insertRealTimeInventory(map);
  381. oyeInboundResult.setInventoryId(oyeRealtimeInventoryInsert.getInventoryId());
  382. }else{
  383. map.put("inventoryId",inventoryId);
  384. map.put("flag",1);
  385. oyeRealtimeInventoryUpdate = updateRealTimeInventory(map);
  386. oyeInboundResult.setInventoryId(oyeRealtimeInventoryUpdate.getInventoryId());
  387. }
  388. if (oyeRealtimeInventoryInsert != null) {
  389. oyeRealtimeInventoryMapper.insertSelective(oyeRealtimeInventoryInsert);
  390. }
  391. if (oyeRealtimeInventoryUpdate != null) {
  392. oyeRealtimeInventoryMapper.updateByPrimaryKeySelective(oyeRealtimeInventoryUpdate);
  393. }
  394. oyeInboundResultMapper.insertSelective(oyeInboundResult);
  395. oyeRealtimeInventoryMapper.updateByPrimaryKeySelective(oyeRealtimeInventoryOut);
  396. oyeOutboundResultMapper.insertSelective(oyeOutboundResult);
  397. return "操作成功";
  398. }
  399. @Transactional(rollbackFor = Exception.class)
  400. public List<Map<String, Object>> receiveSendReport(Map<String, Object> map) {
  401. return oyeRealtimeInventoryMapper.receiveSendReport(map);
  402. }
  403. public int updateSingleWeight() {
  404. //
  405. //查找实时库存里面盘螺的
  406. List<BigDecimal> inventoryIds = oyeRealtimeInventoryMapper.getInventoryIds();
  407. //获取实时库存的理重
  408. for(BigDecimal inventoryId : inventoryIds) {
  409. //
  410. BigDecimal singleWeight = oyeRealtimeInventoryMapper.getSingleWeightByOIR(inventoryId);
  411. //
  412. OyeRealtimeInventory oyeRealtimeInventory = oyeRealtimeInventoryMapper.selectByPrimaryKey(inventoryId);
  413. oyeRealtimeInventory.setSingleWeight(singleWeight);
  414. oyeRealtimeInventoryMapper.updateByPrimaryKeySelective(oyeRealtimeInventory);
  415. }
  416. return 1;
  417. }
  418. public int batchUpdateRealTime(Map<String,Object> mapValue) {
  419. //获取
  420. List<Map<String,Object>> mapList = oyeRealtimeInventoryMapper.getRealTimeGroupBy(mapValue);
  421. for(Map<String,Object> map : mapList) {
  422. if (DataChange.dataToBigDecimal(map.get("num")).intValue() > 1) {
  423. List<Map<String,Object>> mapList1 = oyeRealtimeInventoryMapper.getInventoryInfo(map);
  424. //第一个为移入,下一个为移出;
  425. for(int i=0;i < mapList1.size();i++ ){
  426. if(i == 0) {
  427. continue;
  428. }
  429. Map<String, Object> stringObjectMap = new HashMap<>();
  430. stringObjectMap.putAll(mapList1.get(0));
  431. Map<String,Object> realMap = mapList1.get(i);
  432. realMap.put("newInventoryId",stringObjectMap.get("inventoryId"));
  433. realMap.put("oldSaleArea",stringObjectMap.get("saleArea"));
  434. try {
  435. updateInsertRealTime(realMap);
  436. } catch (Exception e) {
  437. e.printStackTrace();
  438. }
  439. }
  440. }
  441. }
  442. return 1;
  443. }
  444. @Transactional(rollbackFor = Exception.class)
  445. public int reUpdateOutBound(Map<String, Object> mapValue) throws Exception {
  446. List<OyeOutboundResult> oyeOutboundResults = new ArrayList<>();
  447. List<TmstruckWeightBatch> tmstruckWeightBatches = new ArrayList<>();
  448. List<OyeRealtimeInventory> oyeRealtimeInventories = new ArrayList<>();
  449. List<Map<String,Object>> mapList = (List<Map<String,Object>>) mapValue.get("mapList");
  450. System.out.println("===========" + new Date());
  451. JSONObject jsonObject = new JSONObject(mapValue);
  452. System.out.println(jsonObject);
  453. System.out.println("===========" + new Date());
  454. for (Map<String,Object> map : mapList) {
  455. BigDecimal resultId = DataChange.dataToBigDecimal(map.get("resultId"));
  456. BigDecimal weightBatchId = DataChange.dataToBigDecimal(map.get("weightBatchId"));
  457. //判断有没有实绩ID
  458. if(resultId == null || resultId.intValue() == 0) {
  459. continue;
  460. }
  461. //获取前端传输过来的件数、理重、净重
  462. BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber"));
  463. BigDecimal theoryWeight = DataChange.dataToBigDecimal(map.get("theoryWeight"));
  464. BigDecimal netWeight = DataChange.dataToBigDecimal(map.get("netWeight"));
  465. if(materialNumber == null || materialNumber.intValue() == 0) {
  466. throw new Exception("物资件数错误");
  467. }
  468. if(theoryWeight == null || theoryWeight.intValue() == 0) {
  469. throw new Exception("理重信息错误");
  470. }
  471. if(netWeight == null || netWeight.intValue() == 0) {
  472. throw new Exception("净重信息错误");
  473. }
  474. //根据实绩id获取件数、理重、净重
  475. Map<String,Object> oldMes = oyeOutboundResultMapper.getOldMes(resultId);
  476. BigDecimal netWeightSub = netWeight.subtract(DataChange.dataToBigDecimal(oldMes.get("netWeight")));
  477. BigDecimal theoryWeightSub = theoryWeight.subtract(DataChange.dataToBigDecimal(oldMes.get("theoryWeight")));
  478. if (netWeightSub.compareTo(new BigDecimal(0)) == 0 && theoryWeightSub.compareTo(new BigDecimal(0)) == 0) {
  479. continue;
  480. }
  481. OyeOutboundResult oyeOutboundResult = oyeOutboundResultMapper.selectByPrimaryKey(resultId);
  482. oyeOutboundResult.setTheoryWeight(theoryWeight);
  483. oyeOutboundResult.setNetWeight(netWeight);
  484. oyeOutboundResult.setMaterialNumber(materialNumber);
  485. oyeOutboundResult.setUpdateTime(new Date());
  486. map.put("flag",2);
  487. Map<String, Object> updateRealMap = new HashMap<>();
  488. updateRealMap.put("inventoryId",oldMes.get("inventoryId"));
  489. updateRealMap.put("materialNumber",materialNumber.subtract(DataChange.dataToBigDecimal(oldMes.get("materialNumber"))));
  490. updateRealMap.put("netWeight",netWeightSub);
  491. updateRealMap.put("theoryWeight",theoryWeightSub);
  492. OyeRealtimeInventory oyeRealtimeInventory = updateRealTimeInventory(updateRealMap);
  493. oyeRealtimeInventories.add(oyeRealtimeInventory);
  494. TmstruckWeightBatch tmstruckWeightBatch = tmstruckWeightBatchMapper.selectByPrimaryKey(weightBatchId);
  495. tmstruckWeightBatch.setBatchNetWeight(netWeight);
  496. tmstruckWeightBatches.add(tmstruckWeightBatch);
  497. Map<String, Object> updateMap = new HashMap<>();
  498. updateMap.put("weightBatchId",tmstruckWeightBatch.getWeightBatchId());
  499. updateMap.put("materialNumber",materialNumber);
  500. updateMap.put("saleMaterialId",DataChange.dataToBigDecimal(map.get("saleMaterialId")));
  501. updateMap.put("materialWeight",theoryWeight);
  502. oyeOutboundResultMapper.updateSaleMakeDate1(updateMap);
  503. oyeOutboundResultMapper.updateOrderStatus(DataChange.dataToBigDecimal(map.get("orderId")));
  504. oyeOutboundResults.add(oyeOutboundResult);
  505. }
  506. oyeOutboundResultMapper.batchUpdate(oyeOutboundResults);
  507. oyeRealtimeInventoryMapper.batchUpdate(oyeRealtimeInventories);
  508. tmstruckWeightBatchMapper.batchUpdate(tmstruckWeightBatches);
  509. return 1;
  510. }
  511. public void reportToExcel() {
  512. try {
  513. Calendar calendar = Calendar.getInstance();
  514. int year = calendar.get(Calendar.YEAR);
  515. int month = calendar.get(Calendar.MONTH) + 1;
  516. int day = calendar.get(Calendar.DAY_OF_MONTH);
  517. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  518. String dateStr = simpleDateFormat.format(calendar.getTime());
  519. //实现写操作
  520. //1.设置写入文件夹地址和excel文件名称
  521. String filename = "/shared/" + dateStr + ".xlsx";
  522. //2.调用easyexcel里的方法实现写操作
  523. //String filename = "D:\\write.xlsx";
  524. //write方法的两个参数:第一个参数是:文件路径,第二个参数是:实体类的class
  525. List<ReceiveSendReport> list = new ArrayList<>();
  526. Map<String, Object> map = new HashMap<>();
  527. SimpleDateFormat sdfDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  528. DataChange.queryDataByDateTime(null,null,map,sdfDateTime);
  529. List<Map<String,Object>> mapList = oyeRealtimeInventoryMapper.receiveSendReport(map);
  530. for(Map<String,Object> mapVal : mapList) {
  531. JSONObject jsonObject = new JSONObject(mapVal);
  532. String mapValToString = jsonObject.toString();
  533. ReceiveSendReport receiveSendReport = JSON.parseObject(mapValToString,ReceiveSendReport.class);
  534. list.add(receiveSendReport);
  535. }
  536. EasyExcel.write(filename, ReceiveSendReport.class).sheet("出入库台账报表").doWrite(list);
  537. } catch (Exception e) {
  538. e.printStackTrace();
  539. }
  540. }
  541. @Scheduled(cron = "0 40 10 * * ?")
  542. public synchronized void dsExportExcel() {
  543. reportToExcel();
  544. }
  545. }