WmspOutboundResultServiceImpl.java 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634
  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. //添加订单类型
  249. if(orderType.intValue()==25){
  250. resultOutboundType= "倒库";
  251. }
  252. /**把出库单主键id添加到出库单实体中*/
  253. wmspOutboundResult.setResultId(new BigDecimal(seq_wmspoutboundresult));
  254. /**把出库单编号添加到出库单实体中*/
  255. wmspOutboundResult.setResultNumber(resultNumber);
  256. /**把运输订单主键添加到出库单实体中*/
  257. wmspOutboundResult.setBillLadingId(orderId);
  258. /**把出库类型添加到出库单实体中*/
  259. wmspOutboundResult.setResultOutboundType(resultOutboundType);
  260. /**第一次添加为待出库*/
  261. wmspOutboundResult.setResultStatus(new BigDecimal(0));
  262. //常规字段
  263. wmspOutboundResult.setInsertUsername("admin");
  264. wmspOutboundResult.setInsertTime(new Date());
  265. wmspOutboundResult.setUpdateUsername("admin");
  266. wmspOutboundResult.setUpdateTime(new Date());
  267. wmspOutboundResult.setInsertUpdateRemark("无");
  268. wmspOutboundResult.setDeleted(new BigDecimal(0));
  269. //还没装货的物资id的第一条添加到出库单实体中
  270. //wmspOutboundResult.setMaterialId(materialId);
  271. Integer res =insertSelective(wmspOutboundResult);
  272. if (res>0){
  273. return wmspOutboundResult;
  274. }
  275. return null;
  276. }
  277. /**
  278. * 通过出库实绩id查询出 出库物资的详情信息
  279. * @param resultId
  280. * @return
  281. */
  282. @Override
  283. public OutBoundDetailed getInitOutboundScanResultMaterialInfo(BigDecimal resultId) {
  284. //查询待出库物资类型详情
  285. List<OutBoundTypeDetailedInfo> outBoundTypeDetailedInfos= wmspOutboundResultMaterialService.getOutBoundTypeDetailedInfo(resultId,null);
  286. //查询扫码实绩的扫码结构
  287. List<String> onlycodes= wmspOutboundScanResultService.getOutBoundScanResultOnlyCodes(resultId);
  288. //出库信息展示
  289. OutBoundDetailed outBoundDetailed=new OutBoundDetailed();
  290. if (onlycodes.size()>0){
  291. //查询出已经扫码的物资信息
  292. List<OutBoundMaterialDetailedInfo> outBoundMaterialDetailedInfos= wmspOutboundScanResultService.getOutBoundMaterialDetailedInfos(onlycodes,null);
  293. //统计出已经扫码的物资数量
  294. for (OutBoundTypeDetailedInfo typeDetailedInfo :outBoundTypeDetailedInfos){
  295. int count=0;
  296. for (OutBoundMaterialDetailedInfo outBoundMaterialDetailedInfo: outBoundMaterialDetailedInfos){
  297. if (typeDetailedInfo.getMaterialId().equals(outBoundMaterialDetailedInfo.getMaterialId())){
  298. count++;
  299. }
  300. }
  301. //统计完数量赋值
  302. typeDetailedInfo.setScanCodeNumber(count);
  303. }
  304. outBoundDetailed.setOutBoundMaterialDetailedInfos(outBoundMaterialDetailedInfos);
  305. }
  306. outBoundDetailed.setOutBoundTypeDetailedInfos(outBoundTypeDetailedInfos);
  307. return outBoundDetailed;
  308. }
  309. @Transactional
  310. @Override
  311. public int createOutboundScanResult(String resultMaterial, BigDecimal personnelId, BigDecimal resultId,BigDecimal inboundResultId,BigDecimal resultMaterialId) {
  312. //截取扫描结果,得到物资唯一编码
  313. String[] split = resultMaterial.split("-");
  314. //唯一编码
  315. String MaterialOnlyCode = split[7];
  316. //通过物资物资唯一编码查询钢材物资表的物资Id
  317. BigDecimal SteelMaterialId = getSteelMaterialIdByMaterialOnlyCode(MaterialOnlyCode);
  318. //通过出库实绩Id查询物资Id
  319. BigDecimal OutboundMaterialId = getOutboundMaterialByResultId(resultId);
  320. //初始化出库扫描实绩
  321. WmspOutboundScanResult wmspOutboundScanResult = new WmspOutboundScanResult();
  322. //使用序列号增加生成主键id
  323. int seq_wmspOutboundScanResult = commonSeq.getSeqNumber("seq__WMSP_OUTBOUND_SCAN_RESULT");
  324. //插入主键id
  325. wmspOutboundScanResult.setResultId(new BigDecimal(seq_wmspOutboundScanResult));
  326. //入库实绩
  327. wmspOutboundScanResult.setInboundResultId(inboundResultId==null?new BigDecimal(1):inboundResultId);
  328. //插入出库实绩ID
  329. wmspOutboundScanResult.setOutboundResultId(resultId);
  330. //插入装卸工Id
  331. wmspOutboundScanResult.setLoadId(personnelId);
  332. //插入装卸工扫描吊牌结果
  333. wmspOutboundScanResult.setResultMaterial(resultMaterial);
  334. //插入装卸工扫描吊牌时间
  335. wmspOutboundScanResult.setResultLoadTime(new Date());
  336. //插入出库物资数量
  337. wmspOutboundScanResult.setOutboundMaterialNumber(new BigDecimal(1));
  338. //出库类型ID
  339. wmspOutboundScanResult.setResultMaterialId(resultMaterialId);
  340. //常规字段
  341. wmspOutboundScanResult.setInsertUsername("admin");
  342. wmspOutboundScanResult.setInsertTime(new Date());
  343. wmspOutboundScanResult.setUpdateUsername("admin");
  344. wmspOutboundScanResult.setUpdateTime(new Date());
  345. wmspOutboundScanResult.setInsertUpdateRemark("无");
  346. //稽核成功,设定扫描实绩稽核结果为成功
  347. wmspOutboundScanResult.setResultCheck(new BigDecimal(0));
  348. //插入扫描实绩
  349. return scanResultInsert(wmspOutboundScanResult);
  350. }
  351. public int deleteGridMaterial(String materialOnlyCode) {
  352. int i=0;
  353. String[] tag1 = materialOnlyCode.split("\\-");
  354. Map<String,Object> map = wmspOutboundScanResultMapper.getMaterialSteelId(tag1[7]);
  355. if(map == null){
  356. return -2;
  357. }
  358. BigDecimal materialSteelId = DataChange.dataToBigDecimal(map.get("materialId"));
  359. Date date = (Date) map.get("updateTime");
  360. //如果修改时间为空,就表示该钢材还未出库
  361. if(date==null){
  362. //将这些物资钢材id进行逻辑删除
  363. i += wmspGridMaterialMapper.updateByMaterialId(materialSteelId,new Date());
  364. //判断物资是否是预留物资
  365. int isReserve= wmsInboundResultService.getTypeMaterilaId(materialSteelId);
  366. //如果是预留物资
  367. if (isReserve>0){
  368. //将最新的一条真实库数据,状态改为预留状态状态,代替预留库存
  369. int status2= wmsInboundResultService.updateStatusByMaterialId(materialSteelId);
  370. //将预留库出库的钢材,状态改为完全入库状态
  371. int status= wmsInboundResultService.updateStatusByMaterilaId(materialSteelId);
  372. }
  373. }
  374. //表示该钢材已出库,请勿重复扫码
  375. else{
  376. return -1;
  377. }
  378. return i;
  379. }
  380. public int replaceSave(String materialOnlyCode) {
  381. int i=0;
  382. Map<String,Object> map = wmspOutboundScanResultMapper.getMaterialSteelId(materialOnlyCode);
  383. if(map == null){
  384. return -2;
  385. }
  386. BigDecimal materialSteelId = DataChange.dataToBigDecimal(map.get("materialId"));
  387. Date date = (Date) map.get("updateTime");
  388. //如果修改时间为空,就表示该钢材还未出库
  389. if(date==null){
  390. //判断物资是否是预留物资
  391. int isReserve= wmsInboundResultService.getTypeMaterilaId(materialSteelId);
  392. //如果是预留物资
  393. if (isReserve>0){
  394. //将最新的一条真实库数据,状态改为预留状态状态,代替预留库存
  395. i+= wmsInboundResultService.updateStatusByMaterialId(materialSteelId);
  396. //将预留库出库的钢材,状态改为完全入库状态
  397. i+= wmsInboundResultService.updateStatusByMaterilaId(materialSteelId);
  398. }
  399. }
  400. //表示该钢材已出库,请勿重复扫码
  401. else{
  402. return -1;
  403. }
  404. return i;
  405. }
  406. @Override
  407. @Transactional(rollbackFor = Exception.class)
  408. public synchronized int sureOutbount(BigDecimal resultId) throws Exception {
  409. //查询提货单,没有确定出库物资类型集合
  410. List<OutBoundTypeDetailedInfo> outBoundTypeDetailedInfos= wmspOutboundResultMaterialService.getOutBoundTypeDetailedInfo(resultId,1);
  411. //查询出库扫描实绩,并且在实时库存没有删除的出库扫描实绩
  412. //查询扫码实绩的扫码结构
  413. List<String> onlycodes= wmspOutboundScanResultService.getOutBoundScanResultOnlyCodes(resultId);
  414. //出库信息展示
  415. OutBoundDetailed outBoundDetailed=new OutBoundDetailed();
  416. int cunt2=0;
  417. if (onlycodes.size()>0){
  418. //查询出已经扫码的物资信息
  419. List<OutBoundMaterialDetailedInfo> outBoundMaterialDetailedInfos= wmspOutboundScanResultService.getOutBoundMaterialDetailedInfos(onlycodes,null);
  420. //暂时保存
  421. //统计出已经扫码的物资数量
  422. for ( int i =0;i<outBoundTypeDetailedInfos.size();i++){
  423. //初始化一个
  424. OutBoundTypeDetailedInfo typeDetailedInfo=outBoundTypeDetailedInfos.get(i);
  425. //这一个类型的物资
  426. List<OutBoundMaterialDetailedInfo> thisMaterialDetailedInfos=new ArrayList<>();
  427. //获得当前类型的已扫描数量
  428. int count=0;
  429. for (OutBoundMaterialDetailedInfo outBoundMaterialDetailedInfo: outBoundMaterialDetailedInfos){
  430. if (typeDetailedInfo.getMaterialId().equals(outBoundMaterialDetailedInfo.getMaterialId())){
  431. thisMaterialDetailedInfos.add(outBoundMaterialDetailedInfo);
  432. count++;
  433. }
  434. }
  435. //统计完数量赋值
  436. typeDetailedInfo.setScanCodeNumber(count);
  437. //统计,并且判断是否有某种物资已经扫满了
  438. if (typeDetailedInfo.getNumber().equals(typeDetailedInfo.getScanCodeNumber())){
  439. //如果有某一种物资扫满了,需要将这一类物资,在实时库存删除,并且修改出库物资类型状态,发送计量委托
  440. int cunt= wmspGridMaterialService.deleteGridMaterial(thisMaterialDetailedInfos);
  441. cunt2=wmspOutboundResultMaterialService.updateStatus(typeDetailedInfo.getResultMaterialId());
  442. //如果所以物资都已经结束,需要改变提货单状态
  443. if (outBoundTypeDetailedInfos==null||outBoundTypeDetailedInfos.size()-cunt2==0){
  444. int cunt3=wmspOutboundResultMapper.updateStatus(resultId);
  445. //表示全部完成
  446. finishLoadResult(outBoundMaterialDetailedInfos.get(0), resultId);
  447. return 2;
  448. }
  449. //表示一项完成
  450. finishLoadResult(outBoundMaterialDetailedInfos.get(0), resultId);
  451. return cunt2;
  452. }
  453. }
  454. outBoundDetailed.setOutBoundMaterialDetailedInfos(outBoundMaterialDetailedInfos);
  455. }
  456. //返回结果
  457. return 0;
  458. }
  459. /**
  460. * Notes:完成出库调用装车实绩
  461. * @Author: TXF
  462. * @DateTime: 2022/3/24 21:10
  463. */
  464. public void finishLoadResult(OutBoundMaterialDetailedInfo outBoundMaterialDetailedInfo, BigDecimal resultId) throws Exception {
  465. BigDecimal materialId = new BigDecimal(outBoundMaterialDetailedInfo.getMaterialId());
  466. //通过物资ID和出库实绩ID查询相关数据 :运输订单ID 物资ID 装车开始时间 备注
  467. Map<String, Object> mesMap = wmspOutboundResultMapper.getOutboundMesByMateAndResultId(resultId, materialId);
  468. //通过钢材物资ID查询仓库ID
  469. Integer warehouseId = wmspOutboundResultMapper.getWarehouseIdBySteelMaterialId(new BigDecimal(outBoundMaterialDetailedInfo.getMaterialSteelId()));
  470. List<Map<String, Object>> luHaoNumberList = wmspOutboundResultMapper.getLuHaoAndNumber(DataChange.dataToBigDecimal(mesMap.get("resultMaterialId")), materialId);
  471. StringBuilder sb = new StringBuilder();
  472. for (Map<String, Object> luHaoMap : luHaoNumberList) {
  473. sb.append(luHaoMap.get("materialFurnaceNumber"));
  474. sb.append("-");
  475. sb.append(luHaoMap.get("materialNum"));
  476. sb.append("/");
  477. }
  478. sb.deleteCharAt(sb.length() - 1);
  479. mesMap.put("numberOfFurnaces", sb.toString());
  480. mesMap.put("materialId", materialId);
  481. mesMap.put("warehouseId", warehouseId);
  482. //查询出运输订单类型
  483. BigDecimal orderId= (BigDecimal) mesMap.get("orderId");
  484. BigDecimal orderType = wmspOutboundResultMapper.getSteelOrderType(orderId);
  485. //加一个对运输订单类型的判断如果为25则是倒库的判断
  486. if (orderType.compareTo(BigDecimal.valueOf(25))==0){
  487. //查出总实绩ID
  488. BigDecimal resultid = wmspOutboundResultMapper.queryID(orderId);
  489. mesMap.put("resultid",resultid);
  490. //计算理重总和
  491. BigDecimal calculateTW = wmspOutboundResultMapper.calculateTW(DataChange.dataToBigDecimal(mesMap.get("resultMaterialId")), materialId);
  492. mesMap.put("calculateTW",calculateTW.divide(new BigDecimal(1000),3,BigDecimal.ROUND_HALF_UP));
  493. tmstruckFeign.addLoad(mesMap);
  494. }else {
  495. Map<String, Object> returnMap = tmstruckFeign.addSaleLoadResult(mesMap);
  496. String code = (String) returnMap.get("code");
  497. if("200".equals(code)){
  498. System.out.println("新增装车成功:" + mesMap.get("orderId"));
  499. }else {
  500. throw new Exception("新增装车失败");
  501. }
  502. }
  503. }
  504. @Override
  505. public List<Map<String, Object>> getWmsOutboundResultStatistics(Map<String, Object> mapValue) {
  506. return wmspOutboundResultMapper.getWmsOutboundResultStatistics(mapValue);
  507. }
  508. @Override
  509. //@Transactional(rollbackFor = Exception.class)
  510. public synchronized int disorderlyOutbound(Map<String, Object> mapVal) throws Exception {
  511. //需要获取几个因子,1.物资名称
  512. String masterialName = (String) mapVal.get("materialName");
  513. if(!masterialName.contains("乱尺")){
  514. return -1;
  515. }
  516. //获取运输订单ID
  517. BigDecimal orderId = DataChange.dataToBigDecimal(mapVal.get("orderId"));
  518. //根据运输订单ID查询订单类型
  519. BigDecimal orderType = wmspOutboundResultMapper.getSteelOrderType(orderId);
  520. //根据运输订单ID即提货单ID查询是否生成出库单ID
  521. /**根据运输订单ID和物资id查询出库单(没有逻辑删除)
  522. *若orderNum大于0,则不是第一次扫描,已经新增出库单,返回详情信息
  523. *若orderNum等于0,则是第一次扫描,需要增加出库单,再返回详情信息
  524. * */
  525. int orderNum = ExistWmspOutboundResult(mapVal);
  526. if(orderNum == 0){
  527. //创建出货单
  528. WmspOutboundResult wmspOutboundResult=createOutboundResult(orderId,orderType);
  529. if (wmspOutboundResult!=null){
  530. /**根据运输订单号,查询出该订单还没有装货的物资*/
  531. List<Map<String,Object>> orderList = getMaterial(orderId.intValue());
  532. wmspOutboundResultMaterialService.insertOutboundMaterial(wmspOutboundResult.getResultId(),orderList);
  533. }
  534. }
  535. //根据运输地点ID和物资ID查询是否出库
  536. Map<String,Object> outMap = wmspOutboundResultMapper.getIsOutBound(mapVal);
  537. if(outMap == null){
  538. return -2;
  539. }
  540. if(DataChange.dataToBigDecimal(outMap.get("billStatus")).intValue() == 1){
  541. return -3;
  542. }
  543. if(DataChange.dataToBigDecimal(outMap.get("billMaterialStatus")).intValue() == 2){
  544. return -4;
  545. }
  546. //通过ssoid去人员管理里面找loadId
  547. BigDecimal loadId = wmspOutboundResultMapper.getLoadId(mapVal);
  548. mapVal.put("loadStartTime",new Date());
  549. mapVal.put("insertUpdateRemark","无");
  550. mapVal.put("loadId",loadId);
  551. mapVal.putAll(outMap);
  552. Map<String, Object> returnMap = tmstruckFeign.addSaleLoadResult(mapVal);
  553. String code = (String) returnMap.get("code");
  554. if("200".equals(code)){
  555. System.out.println("新增装车成功:" + mapVal.get("orderId"));
  556. //判断该车是否已全部出库 -- 查询该车待出库物资数量
  557. int outBoundingNum = wmspOutboundResultMapper.getOutBoundingNum(orderId);
  558. if(outBoundingNum -1 == 0){
  559. //代表全部出库,修改出库表和出库物资表的状态
  560. wmspOutboundResultMapper.updateStatus(DataChange.dataToBigDecimal(outMap.get("resultId")));
  561. wmspOutboundResultMapper.updateMaterialStatus(DataChange.dataToBigDecimal(outMap.get("resultMaterialId")));
  562. }else{
  563. wmspOutboundResultMapper.updateMaterialStatus(DataChange.dataToBigDecimal(outMap.get("resultMaterialId")));
  564. }
  565. }else {
  566. throw new Exception("新增装车失败");
  567. }
  568. //获取装车所需字段
  569. return 1;
  570. }
  571. }