WmspGridMaterialServiceImpl.java 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607
  1. package com.steerinfo.dil.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.google.common.primitives.Bytes;
  4. import com.google.gson.JsonObject;
  5. import com.steerinfo.dil.feign.JoinFeign;
  6. import com.steerinfo.dil.mapper.*;
  7. import com.steerinfo.dil.model.*;
  8. import com.steerinfo.dil.service.IWmspGridMaterialService;
  9. import com.steerinfo.dil.util.DataChange;
  10. import com.steerinfo.dil.util.EASUtil;
  11. import com.steerinfo.dil.vo.OutBoundMaterialDetailedInfo;
  12. import io.swagger.models.auth.In;
  13. import org.apache.shiro.crypto.hash.Hash;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import org.springframework.web.bind.annotation.RequestParam;
  17. import java.math.BigDecimal;
  18. import java.text.SimpleDateFormat;
  19. import java.util.*;
  20. /**
  21. * WmspGridMaterial服务实现:
  22. * @author generator
  23. * @version 1.0-SNAPSHORT 2021-09-08 06:02
  24. * 类描述
  25. * 修订历史:
  26. * 日期:2021-09-08
  27. * 作者:generator
  28. * 参考:
  29. * 描述:WmspGridMaterial服务实现
  30. * @see null
  31. * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
  32. */
  33. @Service
  34. public class WmspGridMaterialServiceImpl implements IWmspGridMaterialService {
  35. @Autowired
  36. private WmspGridMaterialMapper wmspGridMaterialMapper;
  37. @Autowired
  38. private RmsStackingMapper rmsStackingMapper;
  39. @Autowired
  40. private RmsPwarehouseGridMapper rmsPwarehouseGridMapper;
  41. @Autowired
  42. private WmspRestackScanResultMapper wmspRestackScanResultMapper;
  43. @Autowired
  44. private WmspRestackMakeResultMapper wmspRestackMakeResultMapper;
  45. @Autowired
  46. private WmspCheckWarehouseMapper wmspCheckWarehouseMapper;
  47. @Autowired
  48. private WmspInboundResultMapper wmspInboundResultMapper;
  49. @Autowired
  50. private WmspInboundEasMapper wmspInboundEasMapper;
  51. @Autowired
  52. private EASUtil easUtil;
  53. @Autowired
  54. private JoinFeign joinFeign;
  55. //新增
  56. @Override
  57. public int insertSelective(WmspGridMaterial wmspGridMaterial) {
  58. // long id;
  59. // BigDecimal MAXid=wmspGridMaterial.getGmId();
  60. // if (MAXid==null){
  61. // id=1;
  62. // }else {
  63. // id=MAXid.longValue()+1;
  64. // }
  65. // wmspGridMaterial.setGmId(new BigDecimal(id));
  66. return wmspGridMaterialMapper.insertSelective(wmspGridMaterial);
  67. }
  68. //更新
  69. @Override
  70. public int updateByPrimaryKeySelective(WmspGridMaterial wmspGridMaterial) {
  71. return wmspGridMaterialMapper.updateByPrimaryKeySelective(wmspGridMaterial);
  72. }
  73. //查询实时库存数据
  74. @Override
  75. public List<Map<String, Object>> selectGridMaterial(Map<String, Object> mapval,String warehouseId,String time) {
  76. // 通过当前时间获得前一个月的时间
  77. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  78. Calendar cal= Calendar.getInstance();
  79. // 根据前端床过来的time的数值进行时间区间的判断
  80. if (time.equals("1")){
  81. cal.add(Calendar.MONTH, -1);
  82. }else if (time.equals("2")){
  83. cal.add(Calendar.DATE, -15);
  84. }
  85. long date2 = cal.getTimeInMillis();
  86. String newDate=simpleDateFormat.format(new Date(date2));
  87. mapval.put("warehouseId",warehouseId);
  88. List<Map<String ,Object>> list1 = wmspGridMaterialMapper.selectGridMaterial(mapval);
  89. mapval.put("newDate",newDate);
  90. List<Map<String ,Object>> list2 = wmspGridMaterialMapper.getGridMaterialAgeList(mapval);
  91. mapval.clear();
  92. for (Map<String,Object> map1:list1){
  93. Integer status = 0;
  94. for (Map<String,Object> map2:list2){
  95. String onlyCode1 = (String) map1.get("materialOnlyCode");
  96. String onlyCode2 = (String) map2.get("onlyCode");
  97. // 当两个onlyeCode相等时,设置状态
  98. if (onlyCode1.equals(onlyCode2)){
  99. // 设置状态为入库预警超过界限
  100. status = 1;
  101. }
  102. }
  103. map1.put("status",status);
  104. }
  105. return list1;
  106. }
  107. //根据仓储网格统计数据
  108. @Override
  109. public Long countByGmId() {
  110. return wmspGridMaterialMapper.countByGmId();
  111. }
  112. @Override
  113. public List<Map<String, Object>> selectInboundTimeAndThreshold(BigDecimal gridId) {
  114. return wmspGridMaterialMapper.selectInboundTimeAndThreshold(gridId);
  115. }
  116. @Override
  117. public Integer insertWmspGridMaterial(WmspGridMaterial wmspGridMaterial) {
  118. return wmspGridMaterialMapper.insertSelective(wmspGridMaterial);
  119. }
  120. @Override
  121. public List<Map<String, Object>> selectGridMaterialListByGridId(Map<String, Object> mapval) {
  122. return wmspGridMaterialMapper.selectGridMaterialListByGridId(mapval);
  123. }
  124. @Override
  125. public int updateRmsMaterialSteelDemotion(Map<String, Object> map) {
  126. String gridId = map.get("gridId").toString();
  127. BigDecimal materialSteelId = wmspGridMaterialMapper.selectMaterialSteelIdByGridId(new BigDecimal(gridId));
  128. map.put("materialSteelId",materialSteelId);
  129. //逻辑删除物资钢材表的这个钢材数据并修改其质量是否合格状态
  130. wmspGridMaterialMapper.updateRmsMaterialSteelDemotion(map);
  131. //逻辑删除物资为当前钢材的钢材仓库网格物资存放关系表数据(用对象)
  132. WmspGridMaterial wmspGridMaterial = new WmspGridMaterial();
  133. wmspGridMaterial.setGridId(new BigDecimal(gridId));
  134. wmspGridMaterial.setDeleted(new BigDecimal(0));
  135. wmspGridMaterialMapper.updateByPrimaryKeySelective(wmspGridMaterial);
  136. //逻辑删除入库作业实绩以及相关联的所有表数据
  137. //通过钢材Id获取入库作业实绩Id
  138. BigDecimal inboundId = wmspGridMaterialMapper.selectInboundIdByMaterialSteelId(materialSteelId);
  139. //通过入库实绩ID逻辑删除库管员纠正吊牌实绩数据
  140. wmspGridMaterialMapper.updateInboundCorrectByInboundId(inboundId);
  141. //通过入库实绩ID逻辑删除行车工吊装入库实绩数据
  142. wmspGridMaterialMapper.updateInboundDrivingByInboundId(inboundId);
  143. //通过入库实绩ID逻辑删除吊钢工扫描吊牌实绩数据
  144. wmspGridMaterialMapper.updateInboundScanByInboundId(inboundId);
  145. //通过入库实绩ID逻辑删除系统/库管员选择垛位实绩数据
  146. return wmspGridMaterialMapper.updateInboundStackByInboundId(inboundId);
  147. }
  148. /**
  149. * 创建实时库存
  150. * @param item
  151. * @param houseGrid
  152. */
  153. @Override
  154. public void initInsertWmspGridMaterial(Map<String, Object> item, BigDecimal houseGrid) {
  155. /*
  156. 插入一条网格物资中间表
  157. */
  158. WmspGridMaterial wmspGridMaterial = new WmspGridMaterial();
  159. //设置主键ID
  160. wmspGridMaterial.setGmId(wmspGridMaterialMapper.getCount());
  161. wmspGridMaterial.setGridId(houseGrid);
  162. wmspGridMaterial.setGmNumber(new BigDecimal(1));
  163. wmspGridMaterial.setStandardDataId(new BigDecimal(1));
  164. //设置网格物资表里面的物资ID
  165. BigDecimal materialId= DataChange.dataToBigDecimal(item.get("materialId"));
  166. wmspGridMaterial.setMaterialId(materialId);
  167. //设置逻辑删除字段
  168. wmspGridMaterial.setDeleted(new BigDecimal(0));
  169. //设置常规字段
  170. wmspGridMaterial.setInsertUsername("admin");
  171. wmspGridMaterial.setInsertTime(new Date());
  172. wmspGridMaterial.setUpdateUsername("admin");
  173. wmspGridMaterial.setInsertUpdateRemark("无");
  174. wmspGridMaterial.setStatus(new BigDecimal(2));
  175. insertWmspGridMaterial(wmspGridMaterial);
  176. }
  177. @Override
  178. public Map<String, Object> getReboundScanResultByResultMaterial(String material,String materialOnlyCode) {
  179. return wmspGridMaterialMapper.getReboundScanResultByResultMaterial(material,materialOnlyCode);
  180. }
  181. //修改实时库存(倒垛)
  182. /**
  183. * 所需要参数:原来的仓储网格id,修改后的垛位
  184. * @param map
  185. * @return
  186. */
  187. @Override
  188. public int updateWmspGridMaterial(List<Map<String, Object>> map,String restackMake) {
  189. int CC=0;
  190. int MN=0;
  191. int CX=0;
  192. int i =0;
  193. //获取物资唯一编码
  194. // List<Map<String,Object>> contents=(List<Map<String, Object>>) map.get("contents");
  195. for (Map<String,Object> map1:map) {
  196. String content =(String) map1.get("contents");
  197. //截取
  198. String[] split = content.split("-");
  199. String materialOnlyCode = split[7];
  200. //获取原来的垛位,修改垛位剩余物资数量
  201. //根据物资唯一编码查找原来垛位的仓储网格id
  202. BigDecimal GirdId = wmspGridMaterialMapper.slelectGridIdByMaterialOnlyCode(materialOnlyCode);
  203. //根据物资唯一编码和物资编码去查找物资现存仓存网格
  204. List<Map<String,Object>> list = wmspGridMaterialMapper.selectGmIdByMaterialOnlyCode(GirdId);
  205. Map<String,Object> stringObjectMap = list.get(0);
  206. BigDecimal gmId = DataChange.dataToBigDecimal(stringObjectMap.get("gmId"));
  207. WmspGridMaterial wmspGridMaterial=new WmspGridMaterial();
  208. wmspGridMaterial.setGmId(gmId);
  209. //设置为删除且锁定的状态
  210. wmspGridMaterial.setDeleted(new BigDecimal(1));
  211. wmspGridMaterial.setStatus(new BigDecimal(1));
  212. wmspGridMaterialMapper.updateByPrimaryKeySelective(wmspGridMaterial);
  213. //获取垛位id
  214. BigDecimal stackingId = DataChange.dataToBigDecimal(map1.get("stackingId"));
  215. //根据最新的垛位
  216. //计算仓储网格id
  217. //获取物资数
  218. MN=rmsStackingMapper.selectMaterialNumber(map1);
  219. //计算层次号
  220. CC=(MN)/24+1;
  221. //计算层序号
  222. CX=(MN)%24+1;
  223. //根据原来的仓储网格id查询仓库id
  224. BigDecimal warehouseId = DataChange.dataToBigDecimal(stringObjectMap.get("warehouseId"));
  225. Map<String,Object> map2=new HashMap<>();
  226. map2.put("gradationNumber",CC);
  227. map2.put("sequenceNumber",CX);
  228. map2.put("stackingID",stackingId);
  229. map2.put("warehouseId",warehouseId);
  230. BigDecimal GridId = rmsPwarehouseGridMapper.selectGridId(map2);
  231. BigDecimal gmNumber =(BigDecimal) stringObjectMap.get("gmNumber");
  232. BigDecimal weight = (BigDecimal) stringObjectMap.get("weight");
  233. BigDecimal materialId =(BigDecimal) stringObjectMap.get("materialId");
  234. //新增实时库存
  235. wmspGridMaterial.setGmId(wmspGridMaterialMapper.getCount());
  236. wmspGridMaterial.setGridId(GridId);
  237. wmspGridMaterial.setMaterialId(materialId);
  238. wmspGridMaterial.setGmNumber(gmNumber);
  239. wmspGridMaterial.setGmWeight(weight);
  240. wmspGridMaterial.setInsertTime(new Date());
  241. wmspGridMaterial.setInsertUsername("admin");
  242. wmspGridMaterial.setDeleted(new BigDecimal(0));
  243. wmspGridMaterial.setStatus(new BigDecimal(2));
  244. wmspGridMaterial.setStandardDataId(new BigDecimal(1));
  245. wmspGridMaterialMapper.insertSelective(wmspGridMaterial);
  246. // 逻辑删除之间的物资的实时库存
  247. // 4、改变当前订单中已经稽核的吊牌的状态,改为已倒垛
  248. // 根据吊牌扫描结果查找对应的吊牌扫描实绩Id
  249. List<Map<String,Object>> list1=wmspRestackScanResultMapper.getResultId(new BigDecimal(content));
  250. BigDecimal resultId =(BigDecimal) list1.get(0).get("resultId");
  251. WmspRestackScanResult wmspRestackScanResult = new WmspRestackScanResult();
  252. wmspRestackScanResult.setResultId(resultId);
  253. wmspRestackScanResult.setStatus(new BigDecimal(1));
  254. i += wmspRestackScanResultMapper.updateByPrimaryKeySelective(wmspRestackScanResult);
  255. // 3、将当前订单的总数量减去上面当前订单中已经稽核的吊牌
  256. WmspRestackMakeResult wmspRestackMakeResult = new WmspRestackMakeResult();
  257. wmspRestackMakeResult.setResultId(new BigDecimal(restackMake));
  258. BigDecimal quantity=wmspRestackMakeResultMapper.getQuantity(restackMake);
  259. // 将当前订单的总数量减一
  260. wmspRestackMakeResult.setQuantity(quantity.subtract(new BigDecimal(1)));
  261. i += wmspRestackMakeResultMapper.updateByPrimaryKeySelective(wmspRestackMakeResult);
  262. // 判断当前订单的总数量是否小于或等于0
  263. if (quantity.compareTo(new BigDecimal(1))==-1){
  264. // 当存在时直接结束当前循环
  265. // 当这个订单完成之后,将这个订单下扫描的所有的物资的倒垛状态改变
  266. List<Map<String, Object>> maps = wmspRestackMakeResultMapper.getScanResultList(restackMake);
  267. int j=0;
  268. // 遍历所有的吊牌,并改变其状态
  269. for (Map<String,Object> map3:maps){
  270. BigDecimal resultIds = (BigDecimal)map3.get("resultId");
  271. // 创建扫描实体类
  272. WmspRestackScanResult wmspRestackScanResult1 =new WmspRestackScanResult();
  273. wmspRestackScanResult1.setResultId(resultIds);
  274. wmspRestackScanResult1.setStatus(new BigDecimal(2));
  275. j +=wmspRestackScanResultMapper.updateByPrimaryKeySelective(wmspRestackScanResult1);
  276. }
  277. }
  278. }
  279. return i;
  280. }
  281. public List<Map<String, Object>> getMaterialTypeList(String warehouseid, BigDecimal stackingId, BigDecimal gradtionNumber) {
  282. return wmspGridMaterialMapper.getMaterialTypeList(warehouseid,stackingId,gradtionNumber);
  283. }
  284. // 新增库存盘点实绩
  285. @Override
  286. public int insertStockTaking(String warehouseId, String materialCode, Integer quantity) {
  287. // 根据仓库id和物资类型编码,查询当前的今日库存以及今天入库和出库数量
  288. List<Map<String,Object>> list= wmspGridMaterialMapper.getStockTakingList(warehouseId,materialCode);
  289. // 遍历list,得到list的个数
  290. int count =list.size();
  291. // 调用插入库存盘点实绩接口
  292. // 创建库存盘点实绩类
  293. WmspCheckWarehouse wmspCheckWarehouse = new WmspCheckWarehouse();
  294. // 添加仓库id
  295. wmspCheckWarehouse.setWarehouseId(new BigDecimal(warehouseId));
  296. // 添加物资ID
  297. BigDecimal materialId = wmspGridMaterialMapper.getMaterialIds(materialCode);
  298. wmspCheckWarehouse.setMaterialId(materialId);
  299. // 添加实际数量
  300. wmspCheckWarehouse.setElectronicsMaterialAmount(new BigDecimal(count));
  301. // 添加盘点数量
  302. wmspCheckWarehouse.setRealMaterialAmount(new BigDecimal(quantity));
  303. // 添加盈亏数
  304. Integer checkProfitloss = count - quantity;
  305. wmspCheckWarehouse.setCheckProfitloss(new BigDecimal(checkProfitloss));
  306. wmspCheckWarehouse.setInsertTime(new Date());
  307. wmspCheckWarehouse.setInsertUsername("admin");
  308. // 查找当前盘点库存实绩表的最大Id
  309. BigDecimal checkId = wmspCheckWarehouseMapper.getMaxId();
  310. if (checkId==null){
  311. checkId = new BigDecimal(1);
  312. }
  313. wmspCheckWarehouse.setCheckId(checkId);
  314. int result = wmspCheckWarehouseMapper.insertSelective(wmspCheckWarehouse);
  315. return result;
  316. }
  317. @Override
  318. public List<Map<String, Object>> getStockTakingList() {
  319. return wmspCheckWarehouseMapper.getStockTakingList();
  320. }
  321. @Override
  322. public List<Map<String, Object>> getSteelMaterialList(Map<String,Object> map) {
  323. return wmspCheckWarehouseMapper.getSteelMaterialList(map);
  324. }
  325. @Override
  326. public List<Map<String, Object>> getSteelWarehouseList(Map<String, Object> mapVal) {
  327. return wmspCheckWarehouseMapper.getSteelWarehouseList(mapVal);
  328. }
  329. @Override
  330. public List<Map<String, Object>> getSteelMaterialModelList(Map<String,Object> map) {
  331. return wmspCheckWarehouseMapper.getSteelMaterialModelList(map);
  332. }
  333. @Override
  334. public int deleteGridMaterial(List<OutBoundMaterialDetailedInfo> thisMaterialDetailedInfos) {
  335. return wmspGridMaterialMapper.deleteGridMaterial(thisMaterialDetailedInfos,new Date());
  336. }
  337. @Override
  338. public int insertReserved(String warehouseId,
  339. String materialCode,
  340. String materialSpecification,
  341. String materialModel,
  342. Integer quantity,
  343. String actuallyWeight,
  344. String materialTheWeight,
  345. String remark) {
  346. // 设置状态为预留转入库
  347. Integer status = 1;
  348. // 根据前端传过来的物资型号,物资规格查询当前实时库存中的物资id
  349. List<Map<String,Object>> materialIdList=wmspGridMaterialMapper.getMaterialIdes(warehouseId,materialCode,materialSpecification,materialModel,status);
  350. for (Map<String,Object> map:materialIdList){}
  351. // 当数量小于零的时候
  352. if (quantity<=0){
  353. return 0;
  354. }else if (quantity>materialIdList.size()){
  355. // 当数量大于查询到的数量
  356. return -1;
  357. }else{
  358. int count = 0;
  359. //遍历materialList
  360. //创建金蝶报文
  361. BigDecimal inboundEasId = wmspInboundEasMapper.inboundEasId();
  362. Map<String, Object> head = new HashMap<>();
  363. head.put("number",inboundEasId);
  364. head.put("status","ADD");
  365. //事务类型--完工合格入库024
  366. head.put("transactionTypeNumber","024");
  367. //获取当前日期
  368. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  369. //业务日期-当天
  370. head.put("bizDate",simpleDateFormat.format(new Date()));
  371. //产品类别--钢材产成品001
  372. head.put("productTypeNumber","001");
  373. //库存组织--物资仓储站
  374. head.put("StorageOrgUnitNumber","DG001.20.06.02");
  375. if(DataChange.dataToBigDecimal(warehouseId).intValue() == 3){
  376. head.put("costCenterOrgUnitNumber","DG001.19.07");
  377. }else if(DataChange.dataToBigDecimal(warehouseId).intValue() == 2){
  378. head.put("costCenterOrgUnitNumber","DG001.19.06");
  379. }else if(DataChange.dataToBigDecimal(warehouseId).intValue() == 1){
  380. head.put("costCenterOrgUnitNumber","DG001.19.05");
  381. }
  382. head.put("adminOrgUnitNumber","DG001.19.00");
  383. List<Map<String,Object>> entries = new ArrayList<>();
  384. Map<String, Object> entry = new HashMap<>();
  385. entry.put("InvUpdateTypeNumber","001");
  386. entry.put("materialNum",materialCode);
  387. entry.put("asstQty",quantity);
  388. entry.put("wareHouseNumber","WZCCZ-CP-002");
  389. entry.put("poundwei",actuallyWeight);
  390. entry.put("remark",remark);
  391. entry.put("qty",materialTheWeight);
  392. entries.add(entry);
  393. Map<String,Object> input = new HashMap<>();
  394. input.put("head",head);
  395. input.put("entries",entries);
  396. //获取其他信息
  397. Map<String,Object> totalMap = easUtil.getTotalMap();
  398. totalMap.put("input",input);
  399. System.out.println(totalMap);
  400. JSONObject json = new JSONObject(totalMap);
  401. String resultMap = joinFeign.toInboundResultEas(totalMap);
  402. //JSONObject responseJson = new JSONObject(resultMap);
  403. System.out.println(resultMap);
  404. //根据当前时间获取早班、夜班、中班
  405. //新入库上传金蝶实体类
  406. WmspInboundEas wmspInboundEas = new WmspInboundEas();
  407. wmspInboundEas.setId(inboundEasId);
  408. wmspInboundEas.setInboundEasNo("TOEAS" + inboundEasId);
  409. wmspInboundEas.setInsertTime(new Date());
  410. wmspInboundEas.setMaterialActuallyWeight(new BigDecimal(actuallyWeight));
  411. wmspInboundEas.setMaterialNum(new BigDecimal(quantity));
  412. wmspInboundEas.setMaterialTheroticalWeight(new BigDecimal(materialTheWeight));
  413. wmspInboundEas.setInsertUsername(remark);
  414. wmspInboundEas.setInsertUpdateRemark(json.toString());
  415. wmspInboundEas.setUpdateUsername(resultMap);
  416. wmspInboundEas.setWarehouseId(new BigDecimal(warehouseId));
  417. wmspInboundEas.setDeleted(new BigDecimal(0));
  418. wmspInboundEasMapper.insertSelective(wmspInboundEas);
  419. for (int i =0;i<quantity;i++){
  420. Map<String,Object> map =materialIdList.get(i);
  421. BigDecimal inboundId=(BigDecimal) map.get("inboundId");
  422. // 创建入库实体类
  423. WmspInboundResult wmspInboundResult = new WmspInboundResult();
  424. wmspInboundResult.setInboundId(inboundId);
  425. wmspInboundResult.setInboundIscomplete(new BigDecimal(2));
  426. wmspInboundResult.setInboundOnlyValue(inboundEasId);
  427. wmspInboundResult.setIsupload(new BigDecimal(1));
  428. // 修改入库实绩
  429. count += wmspInboundResultMapper.updateByPrimaryKeySelective(wmspInboundResult);
  430. }
  431. return count;
  432. }
  433. }
  434. @Override
  435. public BigDecimal getTheoreticalByInfo(String warehouseId,
  436. String materialCode,
  437. String materialSpecification,
  438. String materialModel,
  439. Integer status,
  440. Integer num) {
  441. //根据物资信息查询理重(规格、型号)
  442. List<Map<String,Object>> materialIdList =wmspGridMaterialMapper.getMaterialIdes(warehouseId,materialCode,materialSpecification,materialModel,status);
  443. BigDecimal sumTheoreticalWeight = new BigDecimal(0);
  444. //遍历数组,获取理重
  445. if(num > materialIdList.size()){
  446. return new BigDecimal(-1);
  447. }
  448. for(int i=0; i<num;i++){
  449. Map<String,Object> map =materialIdList.get(i);
  450. BigDecimal theoreticalWeight = DataChange.dataToBigDecimal(map.get("theoreticalWeight"));
  451. sumTheoreticalWeight = sumTheoreticalWeight.add(theoreticalWeight);
  452. }
  453. return sumTheoreticalWeight.divide(new BigDecimal(1000),3,4);
  454. }
  455. @Override
  456. public int insertInbounds(String warehouseId, String materialCode, String materialSpecification, String materialModel, Integer quantity) {
  457. // 设置状态为入库转预留
  458. Integer status = 2;
  459. // 根据前端传过来的物资型号,物资规格查询当前实时库存中的物资id
  460. List<Map<String,Object>> materialIdList=wmspGridMaterialMapper.getMaterialIdesNoTime(warehouseId,materialCode,materialSpecification,materialModel,status);
  461. //List<Map<String,Object>> materialIdList=wmspGridMaterialMapper.getMaterialIdes(warehouseId,materialCode,materialSpecification,materialModel,status);
  462. // 当数量小于零的时候
  463. if (quantity<=0){
  464. return 0;
  465. }else if (quantity>materialIdList.size()){
  466. // 当数量大于查询到的数量
  467. return -1;
  468. }else{
  469. int count = 0;
  470. // 遍历materialList
  471. for (int i =0;i<quantity;i++){
  472. Map<String,Object> map =materialIdList.get(i);
  473. BigDecimal inboundId=(BigDecimal) map.get("inboundId");
  474. // 创建入库实体类
  475. WmspInboundResult wmspInboundResult = new WmspInboundResult();
  476. wmspInboundResult.setInboundId(inboundId);
  477. wmspInboundResult.setInboundIscomplete(new BigDecimal(1));
  478. wmspInboundResult.setIsupload(new BigDecimal(0));
  479. wmspInboundResult.setInsertTime(new Date());
  480. // 修改入库实绩
  481. count += wmspInboundResultMapper.updateByPrimaryKeySelective(wmspInboundResult);
  482. }
  483. return count;
  484. }
  485. }
  486. // 修改实时库存
  487. @Override
  488. public int updateWmspGridMaterials(List<Map<String, Object>> list, String restackMake) {
  489. // map表示查询当前订单下的所有已经稽核但是未倒垛的物资包括物资唯一id、物资实时库存主键以及目标垛位
  490. // restackMake是当前订单编号
  491. int CC=0;
  492. int MN=0;
  493. int CX=0;
  494. int i =0;
  495. // 遍历物资
  496. for(int j= 0; j<list.size();){
  497. Map<String ,Object> map = list.get(j);
  498. // 2.计算物资在新垛位的目标层序
  499. BigDecimal stackingId = (BigDecimal) map.get("stackingId");
  500. //根据最新的垛位
  501. //计算仓储网格id
  502. HashMap map1 = new HashMap();
  503. map1.put("stackingId",stackingId);
  504. //获取物资数
  505. MN=rmsStackingMapper.selectMaterialNumber(map1);
  506. //计算层次号
  507. CC=(MN)/24+1;
  508. //计算层序号
  509. CX=(MN)%24+1;
  510. // 3.修改物资的实时库存
  511. // 创建仓储网格实体类
  512. RmsPwarehouseGrid rmsPwarehouseGrid = new RmsPwarehouseGrid();
  513. rmsPwarehouseGrid.setGridId((BigDecimal) map.get("gridId"));
  514. rmsPwarehouseGrid.setStackingId(stackingId);
  515. rmsPwarehouseGrid.setGridGradationNumber(new BigDecimal(CC));
  516. rmsPwarehouseGrid.setGridSequenceNumber(new BigDecimal(CX));
  517. rmsPwarehouseGridMapper.updateByPrimaryKeySelective(rmsPwarehouseGrid);
  518. // 3.修改倒垛单的数量
  519. // 创建倒垛实绩表
  520. WmspRestackMakeResult wmspRestackMakeResult = new WmspRestackMakeResult();
  521. BigDecimal quantitys = (BigDecimal) map.get("quantity");
  522. BigDecimal quantity = quantitys.subtract(new BigDecimal(1));
  523. wmspRestackMakeResult.setQuantity(quantity);
  524. wmspRestackMakeResult.setResultId((BigDecimal) map.get("restackId"));
  525. wmspRestackMakeResultMapper.updateByPrimaryKeySelective(wmspRestackMakeResult);
  526. // 4.判断当前倒垛单剩余数量是否小于等于0(小于则修改所有的符合条件的倒垛单状态),并且逻辑删除当前倒垛单
  527. if (quantity.compareTo(new BigDecimal(0))==0){
  528. // 当数量小于零的时候,将所有的入库扫描的实绩状态都变成已倒垛
  529. // 查询该订单下的所有未倒垛的的物资
  530. List<Map<String,Object>> list1 = wmspRestackScanResultMapper.getResultId((BigDecimal) map.get("restackId"));
  531. // 创建入库扫描实体类
  532. for (Map<String,Object> map2:list1){
  533. BigDecimal resultId = (BigDecimal) map2.get("resultId");
  534. WmspRestackScanResult wmspRestackScanResult = new WmspRestackScanResult();
  535. wmspRestackScanResult.setResultId(resultId);
  536. wmspRestackMakeResult.setResultStatus(new BigDecimal(1));
  537. wmspRestackScanResultMapper.updateByPrimaryKeySelective(wmspRestackScanResult);
  538. }
  539. // 将该订单的状态变为已完成
  540. WmspRestackMakeResult wmspRestackMakeResult1 = new WmspRestackMakeResult();
  541. wmspRestackMakeResult1.setResultId((BigDecimal) map.get("restackId"));
  542. wmspRestackMakeResult1.setResultStatus(new BigDecimal(1));
  543. wmspRestackMakeResultMapper.updateByPrimaryKeySelective(wmspRestackMakeResult1);
  544. }
  545. i++;
  546. j++;
  547. }
  548. return i;
  549. }
  550. @Override
  551. public List<Map<String, Object>> getGridMaterialAgeList(Map<String,Object> mapVal,Integer warehouseId) {
  552. // 通过当前时间获得前一个月的时间
  553. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  554. Calendar cal= Calendar.getInstance();
  555. cal.add(Calendar.MONTH, -1);
  556. long date2 = cal.getTimeInMillis();
  557. String newDate=simpleDateFormat.format(new Date(date2));
  558. mapVal.put("warehouseId",warehouseId);
  559. mapVal.put("newDate",newDate);
  560. List<Map<String, Object>> list =wmspGridMaterialMapper.getGridMaterialAgeList(mapVal);
  561. return list;
  562. }
  563. }