WmspOutboundResultServiceImpl.java 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615
  1. package com.steerinfo.dil.service.impl;
  2. import com.steerinfo.dil.feign.TmstruckFeign;
  3. import com.steerinfo.dil.mapper.*;
  4. import com.steerinfo.dil.model.WmspOutboundResult;
  5. import com.steerinfo.dil.model.WmspOutboundScanResult;
  6. import com.steerinfo.dil.service.IWmspOutboundResultService;
  7. import com.steerinfo.dil.util.DataChange;
  8. import com.steerinfo.dil.vo.OutBoundDetailed;
  9. import com.steerinfo.dil.vo.OutBoundMaterialDetailedInfo;
  10. import com.steerinfo.dil.vo.OutBoundTypeDetailedInfo;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Service;
  13. import org.springframework.transaction.annotation.Transactional;
  14. import java.math.BigDecimal;
  15. import java.text.SimpleDateFormat;
  16. import java.util.ArrayList;
  17. import java.util.Date;
  18. import java.util.List;
  19. import java.util.Map;
  20. /**
  21. * WmspOutboundResult服务实现:
  22. * @author generator
  23. * @version 1.0-SNAPSHORT 2021-09-08 10:35
  24. * 类描述
  25. * 修订历史:
  26. * 日期:2021-09-08
  27. * 作者:generator
  28. * 参考:
  29. * 描述:WmspOutboundResult服务实现
  30. * @see null
  31. * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
  32. */
  33. @Service
  34. public class WmspOutboundResultServiceImpl implements IWmspOutboundResultService {
  35. @Autowired
  36. private WmspOutboundResultMapper wmspOutboundResultMapper;
  37. @Autowired
  38. private WmspOutboundScanResultMapper wmspOutboundScanResultMapper;
  39. @Autowired
  40. private WmsInboundResultServiceImpl wmsInboundResultService;
  41. @Autowired
  42. private WmspOutboundResultMaterialServiceImpl wmspOutboundResultMaterialService;
  43. @Autowired
  44. private WmspOutboundScanResultServiceImpl wmspOutboundScanResultService;
  45. @Autowired
  46. private WmspInboundScanResultMapper wmspInboundScanResultMapper;
  47. @Autowired
  48. private WmspGridMaterialServiceImpl wmspGridMaterialService;
  49. @Autowired
  50. CommonSeq commonSeq;
  51. @Autowired
  52. private TmstruckFeign tmstruckFeign;
  53. @Autowired
  54. private WmspGridMaterialMapper wmspGridMaterialMapper;
  55. @Autowired
  56. WmspSendReceiveServiceImpl wmspSendReceiveService;
  57. @Override
  58. public List<Map<String, Object>> selectResultNumber(Map<String, Object> mapval) {
  59. // return wmspOutboundResultMapper.selectResultNumber(mapval);
  60. return wmspOutboundResultMapper.selectOutResult(mapval);
  61. }
  62. @Override
  63. public int insertSelective(WmspOutboundResult wmspOutboundResult) {
  64. return wmspOutboundResultMapper.insertSelective(wmspOutboundResult);
  65. }
  66. @Override
  67. public Map<String, Object> getOrder(String orderNumber) {
  68. return wmspOutboundResultMapper.getOrder(orderNumber);
  69. }
  70. @Override
  71. public List<Map<String, Object>> getwmspOutboundResultdetails(Integer orderId) {
  72. return wmspOutboundResultMapper.getwmspOutboundResultdetails(orderId);
  73. }
  74. @Override
  75. public int getcountOrderNumber(Integer orderId) {
  76. return wmspOutboundResultMapper.getcountOrderNumber(orderId);
  77. }
  78. @Override
  79. public String getmaterialCode(Integer resultId) {
  80. return wmspOutboundResultMapper.getmaterialCode(resultId);
  81. }
  82. @Override
  83. public int updateByPrimaryKeySelective(WmspOutboundResult wmspOutboundResult) {
  84. return wmspOutboundResultMapper.updateByPrimaryKeySelective(wmspOutboundResult);
  85. }
  86. @Override
  87. public List<Map<String, Object>> selectOutbountResultByOrderNumber(String orderNumber) {
  88. return wmspOutboundResultMapper.selectOutbountResultByOrderNumber(orderNumber);
  89. }
  90. @Override
  91. public String getPersonnelNameByJobnumber(String personnelJobNumber) {
  92. return wmspOutboundResultMapper.getPersonnelNameByJobnumber(personnelJobNumber);
  93. }
  94. @Override
  95. public List<Map<String, Object>> getMaterial(Integer orderId) {
  96. return wmspOutboundResultMapper.getMaterial(orderId);
  97. }
  98. @Override
  99. public int ExistWmspOutboundResult(Map<String, Object> map) {
  100. return wmspOutboundResultMapper.ExistWmspOutboundResult(map);
  101. }
  102. @Override
  103. public Map<String, Object> getOutBoundDetailedInfo(BigDecimal orderId) {
  104. return wmspOutboundResultMapper.getOutBoundDetailedInfo(orderId);
  105. }
  106. @Override
  107. public int deleteWmspOutboundResult(BigDecimal resultId) {
  108. WmspOutboundResult wmspOutboundResult = wmspOutboundResultMapper.selectByPrimaryKey(resultId);
  109. wmspOutboundResult.setDeleted(new BigDecimal(1));
  110. return wmspOutboundResultMapper.updateByPrimaryKey(wmspOutboundResult);
  111. }
  112. @Override
  113. public BigDecimal getOutBoundId(String resultNumber) {
  114. return wmspOutboundResultMapper.getOutBoundId(resultNumber);
  115. }
  116. @Override
  117. public BigDecimal getPersonnelIdByJobnumber(String personnelJobNumber) {
  118. return wmspOutboundResultMapper.getPersonnelIdByJobnumber(personnelJobNumber);
  119. }
  120. @Override
  121. public int ExistScanResult(String resultMaterial) {
  122. return wmspOutboundResultMapper.ExistScanResult(resultMaterial);
  123. }
  124. @Override
  125. public BigDecimal getSteelMaterialIdByMaterialOnlyCode(String MaterialOnlyCode) {
  126. return wmspOutboundResultMapper.getSteelMaterialIdByMaterialOnlyCode(MaterialOnlyCode);
  127. }
  128. @Override
  129. public BigDecimal getOutboundMaterialByResultId(BigDecimal resultId) {
  130. return wmspOutboundResultMapper.getOutboundMaterialByResultId(resultId);
  131. }
  132. @Override
  133. public int scanResultInsert(WmspOutboundScanResult wmspOutboundScanResult) {
  134. return wmspOutboundScanResultMapper.insertSelective(wmspOutboundScanResult);
  135. }
  136. @Override
  137. public BigDecimal getPlatformIdByResultId(BigDecimal resultId) {
  138. return wmspOutboundResultMapper.getPlatformIdByResultId(resultId);
  139. }
  140. @Override
  141. public String getWarehouseNameByPlatformId(BigDecimal platformId) {
  142. return wmspOutboundResultMapper.getWarehouseNameByPlatformId(platformId);
  143. }
  144. @Override
  145. public Map<String, Object> theSameOutboundInfo(BigDecimal resultId) {
  146. return wmspOutboundResultMapper.theSameOutboundInfo(resultId);
  147. }
  148. @Override
  149. public List<Map<String, Object>> scanAuditSuccessInfo(BigDecimal resultId) {
  150. return wmspOutboundResultMapper.scanAuditSuccessInfo(resultId);
  151. }
  152. @Override
  153. public Map<String, Object> getOtherInfoByMaterialOnlyCode(String MaterialOnlyCode1) {
  154. return wmspOutboundResultMapper.getOtherInfoByMaterialOnlyCode(MaterialOnlyCode1);
  155. }
  156. /**
  157. * 出库(0:失败,非0:成功)
  158. * @param resultId
  159. * @return
  160. */
  161. @Override
  162. public int outbountResultToSuccess(Integer resultId) {
  163. int result = 0;
  164. //获得扫码出库实绩
  165. List<Map<String,Object>> materialNumberList = wmspOutboundResultMapper.getScanMaterialNumber(new BigDecimal(resultId));
  166. //获得运输订单的物资数量
  167. List<Map<String,Object>> orderMaterialNumberList = wmspOutboundResultMapper.getOunboundOrderNumber(new BigDecimal(resultId));
  168. BigDecimal orderMaterialNumber = (BigDecimal) orderMaterialNumberList.get(0).get("orderMaterialNumber");
  169. int outboundMaterialNumber = materialNumberList.size();
  170. if (orderMaterialNumber.intValue() == outboundMaterialNumber) {
  171. // 设置出库实绩为成功、将出库实绩改完已经出库
  172. WmspOutboundResult wmspOutboundResult = wmspOutboundResultMapper.selectByPrimaryKey(new BigDecimal(resultId));
  173. wmspOutboundResult.setResultStatus(new BigDecimal(1));
  174. // 调用装货
  175. BigDecimal orderId = wmspOutboundResult.getBillLadingId();
  176. //result += tmstruckFeign.addSaleLoadResult(orderId.intValue());
  177. // 修改实时库存(逻辑删除) grid
  178. BigDecimal materialId = wmspOutboundResult.getMaterialId();
  179. // 创建一个方法用来修改入库实绩id的状态和仓储网格的状态,当且仅当返回值为2的时候是成功的
  180. if (wmsInboundResultService.updateInboundGridStatus(resultId)%2 == 0){
  181. result += wmspOutboundResultMapper.updateByPrimaryKeySelective(wmspOutboundResult);
  182. result += wmspOutboundResultMapper.updateGrid(materialId);
  183. }
  184. }
  185. return result;
  186. }
  187. /**
  188. * 判断物资是否已经都已经被扫描
  189. * @param resultId
  190. * @return
  191. */
  192. @Override
  193. public int EqualMaterialsNumber(BigDecimal resultId) {
  194. int EqualMaterialsNumber = 0;
  195. //获得被扫描物资
  196. List<Map<String,Object>> materialNumberList = wmspOutboundResultMapper.getScanMaterialNumber(resultId);
  197. //获得运单中间表的物资件数
  198. List<Map<String,Object>> orderMaterialNumberList = wmspOutboundResultMapper.getOunboundOrderNumber(resultId);
  199. BigDecimal orderMaterialNumber = (BigDecimal) orderMaterialNumberList.get(0).get("orderMaterialNumber");
  200. int outboundMaterialNumber = materialNumberList.size();
  201. if (orderMaterialNumber.intValue() == outboundMaterialNumber) {
  202. EqualMaterialsNumber = 1;
  203. }else {
  204. EqualMaterialsNumber = 0;
  205. }
  206. //返回结果
  207. return EqualMaterialsNumber;
  208. }
  209. @Override
  210. public int getOutboundStatus(BigDecimal orderId) {
  211. return wmspOutboundResultMapper.getOutboundStatus(orderId);
  212. }
  213. @Override
  214. public WmspOutboundResult createOutboundResult(BigDecimal orderId, BigDecimal orderType) {
  215. /**创建出库单实体*/
  216. WmspOutboundResult wmspOutboundResult = new WmspOutboundResult();
  217. /**使用序列号增加生成主键id*/
  218. int seq_wmspoutboundresult = commonSeq.getSeqNumber("seq__WMSP_OUTBOUND_RESULT");
  219. /**获取到当前时间*/
  220. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
  221. /**生成出库单编号*/
  222. String resultNumber = "XSCK" + sdf.format(new Date());
  223. if(seq_wmspoutboundresult < 10){
  224. resultNumber += "0000000" + seq_wmspoutboundresult;
  225. }else if(seq_wmspoutboundresult < 100){
  226. resultNumber += "000000" + seq_wmspoutboundresult;
  227. }else if(seq_wmspoutboundresult < 1000){
  228. resultNumber += "00000" + seq_wmspoutboundresult;
  229. }else if(seq_wmspoutboundresult < 10000){
  230. resultNumber += "0000" + seq_wmspoutboundresult;
  231. }else if(seq_wmspoutboundresult < 100000){
  232. resultNumber += "000" + seq_wmspoutboundresult;
  233. }else if(seq_wmspoutboundresult < 1000000){
  234. resultNumber += "00" + seq_wmspoutboundresult;
  235. }else if(seq_wmspoutboundresult < 10000000){
  236. resultNumber += "0" + seq_wmspoutboundresult;
  237. }else{
  238. resultNumber += seq_wmspoutboundresult;
  239. }
  240. /**运输订单类型判断
  241. * orderType : 1 为普通出库
  242. * orderType : 4 为调拨出库
  243. * */
  244. String resultOutboundType = "普通出库";
  245. if(orderType.intValue() == 4){
  246. resultOutboundType = "调拨出库";
  247. }
  248. /**把出库单主键id添加到出库单实体中*/
  249. wmspOutboundResult.setResultId(new BigDecimal(seq_wmspoutboundresult));
  250. /**把出库单编号添加到出库单实体中*/
  251. wmspOutboundResult.setResultNumber(resultNumber);
  252. /**把运输订单主键添加到出库单实体中*/
  253. wmspOutboundResult.setBillLadingId(orderId);
  254. /**把出库类型添加到出库单实体中*/
  255. wmspOutboundResult.setResultOutboundType(resultOutboundType);
  256. /**第一次添加为待出库*/
  257. wmspOutboundResult.setResultStatus(new BigDecimal(0));
  258. //常规字段
  259. wmspOutboundResult.setInsertUsername("admin");
  260. wmspOutboundResult.setInsertTime(new Date());
  261. wmspOutboundResult.setUpdateUsername("admin");
  262. wmspOutboundResult.setUpdateTime(new Date());
  263. wmspOutboundResult.setInsertUpdateRemark("无");
  264. wmspOutboundResult.setDeleted(new BigDecimal(0));
  265. //还没装货的物资id的第一条添加到出库单实体中
  266. //wmspOutboundResult.setMaterialId(materialId);
  267. Integer res =insertSelective(wmspOutboundResult);
  268. if (res>0){
  269. return wmspOutboundResult;
  270. }
  271. return null;
  272. }
  273. /**
  274. * 通过出库实绩id查询出 出库物资的详情信息
  275. * @param resultId
  276. * @return
  277. */
  278. @Override
  279. public OutBoundDetailed getInitOutboundScanResultMaterialInfo(BigDecimal resultId) {
  280. //查询待出库物资类型详情
  281. List<OutBoundTypeDetailedInfo> outBoundTypeDetailedInfos= wmspOutboundResultMaterialService.getOutBoundTypeDetailedInfo(resultId,null);
  282. //查询扫码实绩的扫码结构
  283. List<String> onlycodes= wmspOutboundScanResultService.getOutBoundScanResultOnlyCodes(resultId);
  284. //出库信息展示
  285. OutBoundDetailed outBoundDetailed=new OutBoundDetailed();
  286. if (onlycodes.size()>0){
  287. //查询出已经扫码的物资信息
  288. List<OutBoundMaterialDetailedInfo> outBoundMaterialDetailedInfos= wmspOutboundScanResultService.getOutBoundMaterialDetailedInfos(onlycodes,null);
  289. //统计出已经扫码的物资数量
  290. for (OutBoundTypeDetailedInfo typeDetailedInfo :outBoundTypeDetailedInfos){
  291. int count=0;
  292. for (OutBoundMaterialDetailedInfo outBoundMaterialDetailedInfo: outBoundMaterialDetailedInfos){
  293. if (typeDetailedInfo.getMaterialId().equals(outBoundMaterialDetailedInfo.getMaterialId())){
  294. count++;
  295. }
  296. }
  297. //统计完数量赋值
  298. typeDetailedInfo.setScanCodeNumber(count);
  299. }
  300. outBoundDetailed.setOutBoundMaterialDetailedInfos(outBoundMaterialDetailedInfos);
  301. }
  302. outBoundDetailed.setOutBoundTypeDetailedInfos(outBoundTypeDetailedInfos);
  303. return outBoundDetailed;
  304. }
  305. @Transactional
  306. @Override
  307. public int createOutboundScanResult(String resultMaterial, BigDecimal personnelId, BigDecimal resultId,BigDecimal inboundResultId,BigDecimal resultMaterialId) {
  308. //截取扫描结果,得到物资唯一编码
  309. String[] split = resultMaterial.split("-");
  310. //唯一编码
  311. String MaterialOnlyCode = split[7];
  312. //通过物资物资唯一编码查询钢材物资表的物资Id
  313. BigDecimal SteelMaterialId = getSteelMaterialIdByMaterialOnlyCode(MaterialOnlyCode);
  314. //通过出库实绩Id查询物资Id
  315. BigDecimal OutboundMaterialId = getOutboundMaterialByResultId(resultId);
  316. //初始化出库扫描实绩
  317. WmspOutboundScanResult wmspOutboundScanResult = new WmspOutboundScanResult();
  318. //使用序列号增加生成主键id
  319. int seq_wmspOutboundScanResult = commonSeq.getSeqNumber("seq__WMSP_OUTBOUND_SCAN_RESULT");
  320. //插入主键id
  321. wmspOutboundScanResult.setResultId(new BigDecimal(seq_wmspOutboundScanResult));
  322. //入库实绩
  323. wmspOutboundScanResult.setInboundResultId(inboundResultId==null?new BigDecimal(1):inboundResultId);
  324. //插入出库实绩ID
  325. wmspOutboundScanResult.setOutboundResultId(resultId);
  326. //插入装卸工Id
  327. wmspOutboundScanResult.setLoadId(personnelId);
  328. //插入装卸工扫描吊牌结果
  329. wmspOutboundScanResult.setResultMaterial(resultMaterial);
  330. //插入装卸工扫描吊牌时间
  331. wmspOutboundScanResult.setResultLoadTime(new Date());
  332. //插入出库物资数量
  333. wmspOutboundScanResult.setOutboundMaterialNumber(new BigDecimal(1));
  334. //出库类型ID
  335. wmspOutboundScanResult.setResultMaterialId(resultMaterialId);
  336. //常规字段
  337. wmspOutboundScanResult.setInsertUsername("admin");
  338. wmspOutboundScanResult.setInsertTime(new Date());
  339. wmspOutboundScanResult.setUpdateUsername("admin");
  340. wmspOutboundScanResult.setUpdateTime(new Date());
  341. wmspOutboundScanResult.setInsertUpdateRemark("无");
  342. //稽核成功,设定扫描实绩稽核结果为成功
  343. wmspOutboundScanResult.setResultCheck(new BigDecimal(0));
  344. //插入扫描实绩
  345. return scanResultInsert(wmspOutboundScanResult);
  346. }
  347. public int deleteGridMaterial(String materialOnlyCode) {
  348. int i=0;
  349. String[] tag1 = materialOnlyCode.split("\\-");
  350. Map<String,Object> map = wmspOutboundScanResultMapper.getMaterialSteelId(tag1[7]);
  351. if(map == null){
  352. return -2;
  353. }
  354. BigDecimal materialSteelId = DataChange.dataToBigDecimal(map.get("materialId"));
  355. Date date = (Date) map.get("updateTime");
  356. //如果修改时间为空,就表示该钢材还未出库
  357. if(date==null){
  358. //将这些物资钢材id进行逻辑删除
  359. i += wmspGridMaterialMapper.updateByMaterialId(materialSteelId,new Date());
  360. //判断物资是否是预留物资
  361. int isReserve= wmsInboundResultService.getTypeMaterilaId(materialSteelId);
  362. //如果是预留物资
  363. if (isReserve>0){
  364. //将最新的一条真实库数据,状态改为预留状态状态,代替预留库存
  365. int status2= wmsInboundResultService.updateStatusByMaterialId(materialSteelId);
  366. //将预留库出库的钢材,状态改为完全入库状态
  367. int status= wmsInboundResultService.updateStatusByMaterilaId(materialSteelId);
  368. }
  369. }
  370. //表示该钢材已出库,请勿重复扫码
  371. else{
  372. return -1;
  373. }
  374. return i;
  375. }
  376. public int replaceSave(String materialOnlyCode) {
  377. int i=0;
  378. Map<String,Object> map = wmspOutboundScanResultMapper.getMaterialSteelId(materialOnlyCode);
  379. if(map == null){
  380. return -2;
  381. }
  382. BigDecimal materialSteelId = DataChange.dataToBigDecimal(map.get("materialId"));
  383. Date date = (Date) map.get("updateTime");
  384. //如果修改时间为空,就表示该钢材还未出库
  385. if(date==null){
  386. //判断物资是否是预留物资
  387. int isReserve= wmsInboundResultService.getTypeMaterilaId(materialSteelId);
  388. //如果是预留物资
  389. if (isReserve>0){
  390. //将最新的一条真实库数据,状态改为预留状态状态,代替预留库存
  391. i+= wmsInboundResultService.updateStatusByMaterialId(materialSteelId);
  392. //将预留库出库的钢材,状态改为完全入库状态
  393. i+= wmsInboundResultService.updateStatusByMaterilaId(materialSteelId);
  394. }
  395. }
  396. //表示该钢材已出库,请勿重复扫码
  397. else{
  398. return -1;
  399. }
  400. return i;
  401. }
  402. @Override
  403. @Transactional(rollbackFor = Exception.class)
  404. public synchronized int sureOutbount(BigDecimal resultId) throws Exception {
  405. //查询提货单,没有确定出库物资类型集合
  406. List<OutBoundTypeDetailedInfo> outBoundTypeDetailedInfos= wmspOutboundResultMaterialService.getOutBoundTypeDetailedInfo(resultId,1);
  407. //查询出库扫描实绩,并且在实时库存没有删除的出库扫描实绩
  408. //查询扫码实绩的扫码结构
  409. List<String> onlycodes= wmspOutboundScanResultService.getOutBoundScanResultOnlyCodes(resultId);
  410. //出库信息展示
  411. OutBoundDetailed outBoundDetailed=new OutBoundDetailed();
  412. int cunt2=0;
  413. if (onlycodes.size()>0){
  414. //查询出已经扫码的物资信息
  415. List<OutBoundMaterialDetailedInfo> outBoundMaterialDetailedInfos= wmspOutboundScanResultService.getOutBoundMaterialDetailedInfos(onlycodes,null);
  416. //暂时保存
  417. //统计出已经扫码的物资数量
  418. for ( int i =0;i<outBoundTypeDetailedInfos.size();i++){
  419. //初始化一个
  420. OutBoundTypeDetailedInfo typeDetailedInfo=outBoundTypeDetailedInfos.get(i);
  421. //这一个类型的物资
  422. List<OutBoundMaterialDetailedInfo> thisMaterialDetailedInfos=new ArrayList<>();
  423. //获得当前类型的已扫描数量
  424. int count=0;
  425. for (OutBoundMaterialDetailedInfo outBoundMaterialDetailedInfo: outBoundMaterialDetailedInfos){
  426. if (typeDetailedInfo.getMaterialId().equals(outBoundMaterialDetailedInfo.getMaterialId())){
  427. thisMaterialDetailedInfos.add(outBoundMaterialDetailedInfo);
  428. count++;
  429. }
  430. }
  431. //统计完数量赋值
  432. typeDetailedInfo.setScanCodeNumber(count);
  433. //统计,并且判断是否有某种物资已经扫满了
  434. if (typeDetailedInfo.getNumber().equals(typeDetailedInfo.getScanCodeNumber())){
  435. //如果有某一种物资扫满了,需要将这一类物资,在实时库存删除,并且修改出库物资类型状态,发送计量委托
  436. int cunt= wmspGridMaterialService.deleteGridMaterial(thisMaterialDetailedInfos);
  437. cunt2=wmspOutboundResultMaterialService.updateStatus(typeDetailedInfo.getResultMaterialId());
  438. //如果所以物资都已经结束,需要改变提货单状态
  439. if (outBoundTypeDetailedInfos==null||outBoundTypeDetailedInfos.size()-cunt2==0){
  440. int cunt3=wmspOutboundResultMapper.updateStatus(resultId);
  441. //表示全部完成
  442. finishLoadResult(outBoundMaterialDetailedInfos.get(0), resultId);
  443. return 2;
  444. }
  445. //表示一项完成
  446. finishLoadResult(outBoundMaterialDetailedInfos.get(0), resultId);
  447. return cunt2;
  448. }
  449. }
  450. outBoundDetailed.setOutBoundMaterialDetailedInfos(outBoundMaterialDetailedInfos);
  451. }
  452. //返回结果
  453. return 0;
  454. }
  455. /**
  456. * Notes:完成出库调用装车实绩
  457. * @Author: TXF
  458. * @DateTime: 2022/3/24 21:10
  459. */
  460. public void finishLoadResult(OutBoundMaterialDetailedInfo outBoundMaterialDetailedInfo, BigDecimal resultId) throws Exception {
  461. BigDecimal materialId = new BigDecimal(outBoundMaterialDetailedInfo.getMaterialId());
  462. //通过物资ID和出库实绩ID查询相关数据 :运输订单ID 物资ID 装车开始时间 备注
  463. Map<String, Object> mesMap = wmspOutboundResultMapper.getOutboundMesByMateAndResultId(resultId, materialId);
  464. //通过钢材物资ID查询仓库ID
  465. Integer warehouseId = wmspOutboundResultMapper.getWarehouseIdBySteelMaterialId(new BigDecimal(outBoundMaterialDetailedInfo.getMaterialSteelId()));
  466. List<Map<String, Object>> luHaoNumberList = wmspOutboundResultMapper.getLuHaoAndNumber(DataChange.dataToBigDecimal(mesMap.get("resultMaterialId")), materialId);
  467. StringBuilder sb = new StringBuilder();
  468. for (Map<String, Object> luHaoMap : luHaoNumberList) {
  469. sb.append(luHaoMap.get("materialFurnaceNumber"));
  470. sb.append("-");
  471. sb.append(luHaoMap.get("materialNum"));
  472. sb.append("/");
  473. }
  474. sb.deleteCharAt(sb.length() - 1);
  475. mesMap.put("numberOfFurnaces", sb.toString());
  476. mesMap.put("materialId", materialId);
  477. mesMap.put("warehouseId", warehouseId);
  478. Map<String, Object> returnMap = tmstruckFeign.addSaleLoadResult(mesMap);
  479. String code = (String) returnMap.get("code");
  480. if("200".equals(code)){
  481. System.out.println("新增装车成功:" + mesMap.get("orderId"));
  482. }else {
  483. throw new Exception("新增装车失败");
  484. }
  485. }
  486. @Override
  487. public List<Map<String, Object>> getWmsOutboundResultStatistics(Map<String, Object> mapValue) {
  488. return wmspOutboundResultMapper.getWmsOutboundResultStatistics(mapValue);
  489. }
  490. @Override
  491. //@Transactional(rollbackFor = Exception.class)
  492. public synchronized int disorderlyOutbound(Map<String, Object> mapVal) throws Exception {
  493. //需要获取几个因子,1.物资名称
  494. String masterialName = (String) mapVal.get("materialName");
  495. if(!masterialName.contains("乱尺")){
  496. return -1;
  497. }
  498. //获取运输订单ID
  499. BigDecimal orderId = DataChange.dataToBigDecimal(mapVal.get("orderId"));
  500. //根据运输订单ID查询订单类型
  501. BigDecimal orderType = wmspOutboundResultMapper.getSteelOrderType(orderId);
  502. //根据运输订单ID即提货单ID查询是否生成出库单ID
  503. /**根据运输订单ID和物资id查询出库单(没有逻辑删除)
  504. *若orderNum大于0,则不是第一次扫描,已经新增出库单,返回详情信息
  505. *若orderNum等于0,则是第一次扫描,需要增加出库单,再返回详情信息
  506. * */
  507. int orderNum = ExistWmspOutboundResult(mapVal);
  508. if(orderNum == 0){
  509. //创建出货单
  510. WmspOutboundResult wmspOutboundResult=createOutboundResult(orderId,orderType);
  511. if (wmspOutboundResult!=null){
  512. /**根据运输订单号,查询出该订单还没有装货的物资*/
  513. List<Map<String,Object>> orderList = getMaterial(orderId.intValue());
  514. wmspOutboundResultMaterialService.insertOutboundMaterial(wmspOutboundResult.getResultId(),orderList);
  515. }
  516. }
  517. //根据运输地点ID和物资ID查询是否出库
  518. Map<String,Object> outMap = wmspOutboundResultMapper.getIsOutBound(mapVal);
  519. if(outMap == null){
  520. return -2;
  521. }
  522. if(DataChange.dataToBigDecimal(outMap.get("billStatus")).intValue() == 1){
  523. return -3;
  524. }
  525. if(DataChange.dataToBigDecimal(outMap.get("billMaterialStatus")).intValue() == 2){
  526. return -4;
  527. }
  528. //通过ssoid去人员管理里面找loadId
  529. BigDecimal loadId = wmspOutboundResultMapper.getLoadId(mapVal);
  530. mapVal.put("loadStartTime",new Date());
  531. mapVal.put("insertUpdateRemark","无");
  532. mapVal.put("loadId",loadId);
  533. mapVal.putAll(outMap);
  534. Map<String, Object> returnMap = tmstruckFeign.addSaleLoadResult(mapVal);
  535. String code = (String) returnMap.get("code");
  536. if("200".equals(code)){
  537. System.out.println("新增装车成功:" + mapVal.get("orderId"));
  538. //判断该车是否已全部出库 -- 查询该车待出库物资数量
  539. int outBoundingNum = wmspOutboundResultMapper.getOutBoundingNum(orderId);
  540. if(outBoundingNum -1 == 0){
  541. //代表全部出库,修改出库表和出库物资表的状态
  542. wmspOutboundResultMapper.updateStatus(DataChange.dataToBigDecimal(outMap.get("resultId")));
  543. wmspOutboundResultMapper.updateMaterialStatus(DataChange.dataToBigDecimal(outMap.get("resultMaterialId")));
  544. }else{
  545. wmspOutboundResultMapper.updateMaterialStatus(DataChange.dataToBigDecimal(outMap.get("resultMaterialId")));
  546. }
  547. }else {
  548. throw new Exception("新增装车失败");
  549. }
  550. //获取装车所需字段
  551. return 1;
  552. }
  553. }