WmsInboundScanResultController.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. package com.steerinfo.dil.controller;
  2. import com.github.pagehelper.PageHelper;
  3. import com.steerinfo.dil.feign.BmsTruckFeign;
  4. import com.steerinfo.dil.feign.ColumnDataFeign;
  5. import com.steerinfo.dil.feign.OmsFeign;
  6. import com.steerinfo.dil.feign.TmstruckFeign;
  7. import com.steerinfo.dil.mapper.WmspInboundResultMapper;
  8. import com.steerinfo.dil.model.*;
  9. import com.steerinfo.dil.service.impl.RmsMaterialServiceImpl;
  10. import com.steerinfo.dil.service.impl.RmsMaterialSteelServiceImpl;
  11. import com.steerinfo.dil.service.impl.WmsInboundResultServiceImpl;
  12. import com.steerinfo.dil.service.impl.WmsInboundScanResultServiceImpl;
  13. import com.steerinfo.dil.util.BaseRESTfulController;
  14. import com.steerinfo.dil.util.ColumnDataUtil;
  15. import com.steerinfo.dil.util.DataChange;
  16. import com.steerinfo.dil.util.PageListAdd;
  17. import com.steerinfo.framework.controller.RESTfulResult;
  18. import io.swagger.annotations.ApiImplicitParam;
  19. import io.swagger.annotations.ApiImplicitParams;
  20. import io.swagger.annotations.ApiOperation;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.core.annotation.Order;
  23. import org.springframework.transaction.annotation.Transactional;
  24. import org.springframework.web.bind.annotation.PostMapping;
  25. import org.springframework.web.bind.annotation.RequestBody;
  26. import org.springframework.web.bind.annotation.RequestMapping;
  27. import org.springframework.web.bind.annotation.RestController;
  28. import java.math.BigDecimal;
  29. import java.text.ParseException;
  30. import java.util.*;
  31. /**
  32. * @author luobang
  33. * @create 2021-09-07 15:15
  34. */
  35. @RestController
  36. @RequestMapping("${api.version}/inboundScanResult")
  37. public class WmsInboundScanResultController extends BaseRESTfulController {
  38. @Autowired
  39. WmsInboundResultServiceImpl wmsInboundResultService;
  40. @Autowired
  41. WmsInboundScanResultServiceImpl wmsInboundScanResultService;
  42. @Autowired
  43. RmsMaterialServiceImpl rmsMaterialService;
  44. @Autowired
  45. RmsMaterialSteelServiceImpl rmsMaterialSteelService;
  46. @Autowired
  47. WmspInboundResultMapper wmspInboundResultMapper;
  48. @Autowired
  49. ColumnDataUtil columnDataUtil;
  50. @Autowired
  51. ColumnDataFeign columnDataFeign;
  52. @Autowired
  53. OmsFeign omsFeign;
  54. @Autowired
  55. BmsTruckFeign bmsTruckFeign;
  56. @Autowired
  57. TmstruckFeign tmstruckFeign;
  58. /**
  59. * 1.新增扫描吊牌实绩!!!此时入库实绩未生成
  60. * @param
  61. * @return
  62. */
  63. @ApiOperation(value = "新增扫描吊牌实绩")
  64. @PostMapping("/insertResult")
  65. @Transactional
  66. public synchronized RESTfulResult insertResult(@RequestBody(required = false)Map<String,Object>map) throws Exception {
  67. //这里需要的参数包括 扫码人账号 userId、二维码信息 resultMaterial
  68. //首先判断二维码是否已经被扫过了
  69. //判断条件是查询扫描实绩判断是否已经存在改唯一标识码并且扫码人是否是自己
  70. System.out.println(map.get("resultMaterial"));
  71. //订单类型为倒库,直接扫码所有并返回数据
  72. Map<String,Object> order=wmsInboundScanResultService.getOrderTypeByNum((String)map.get("resultMaterial"));
  73. Integer orderType=DataChange.dataToBigDecimal(order.get("orderType")).intValue();
  74. BigDecimal orderId=DataChange.dataToBigDecimal(order.get("orderId"));
  75. if(orderType!=null && orderType == 25){
  76. //校验是否有装货实绩,若没有则不允许入库
  77. Integer count=wmsInboundScanResultService.isExistLoad((String)map.get("resultMaterial"));
  78. if(count==null|| count<=0){
  79. return failed(null);
  80. }
  81. //根据运输订单号查询出库扫码实绩
  82. List<Map<String,Object>> inboundOld= wmsInboundScanResultService.findInboundScanResult((String)map.get("resultMaterial"));
  83. //批量新增扫码实绩
  84. if(inboundOld!=null || inboundOld.size()>0 || inboundOld.get(0)!=null){
  85. wmsInboundScanResultService.createInboundScanResultByFind(inboundOld,map);
  86. }
  87. else{
  88. System.out.println("物资暂未出库,请先出库再入库!");
  89. return failed(null);
  90. }
  91. //返回新建的扫码实绩数据
  92. List<Map<String,Object>> mapList= wmsInboundScanResultService.noIssueScanResultList(map.get("userName").toString());
  93. //新增卸货实绩
  94. tmstruckFeign.updateUnloadResult(order);
  95. //关闭运输订单
  96. omsFeign.closeSteelOrderType4(DataChange.dataToBigDecimal(orderId));
  97. //生成计费详单
  98. bmsTruckFeign.addInwardDetailsOrder(order);
  99. return success(mapList);
  100. }
  101. int isExist= wmsInboundScanResultService.isExist(map.get("userName").toString(),map.get("resultMaterial").toString().substring(0,map.get("resultMaterial").toString().length()-1));
  102. //通过用户ID查询、当前扫描没有下发的物质、最终展示的集合
  103. List<Map<String,Object>>mapList= wmsInboundScanResultService.noIssueScanResultList(map.get("userName").toString());
  104. if (isExist>0){
  105. //如果已经被扫过了返回扫码实绩集合
  106. //返回结果显示
  107. return failed(mapList);
  108. }else {
  109. //如果没有被扫
  110. //创建一个扫码实绩
  111. Map<String, Object> wmspInboundScanResult =wmsInboundScanResultService.createInboundScanResultByResultMaterial(mapList.size(),map.get("userName").toString(),map.get("resultMaterial").toString());
  112. //判断是否创建成功、成功在添加
  113. // if (wmspInboundScanResult!=null){
  114. // mapList.add(wmspInboundScanResult);
  115. // }
  116. mapList= wmsInboundScanResultService.noIssueScanResultList(map.get("userName").toString());
  117. }
  118. System.out.println(mapList);
  119. return success(mapList);
  120. }
  121. /**
  122. * 1.新增扫描吊牌实绩!!!此时入库实绩未生成
  123. * @param
  124. * @return
  125. */
  126. @ApiOperation(value = "新增扫描吊牌实绩")
  127. @PostMapping("/insertScanResultGroup")
  128. @Transactional
  129. public synchronized RESTfulResult insertScanResultGroup(@RequestBody(required = false)Map<String,Object>map) throws ParseException {
  130. //这里需要的参数包括 扫码人账号 userId、二维码信息 resultMaterial
  131. //首先判断二维码是否已经被扫过了
  132. int isExist= wmsInboundScanResultService.isExistInboundScanResult(map.get("resultMaterial").toString().substring(0,map.get("resultMaterial").toString().length()-1));
  133. //通过用户ID查询、当前扫描没有下发的物质、最终展示的集合
  134. List<Map<String,Object>>mapList= wmsInboundScanResultService.noIssueScanResultList(map.get("userName").toString());
  135. if (isExist>0){
  136. //如果已经被少扫过了返回扫码实绩集合
  137. //返回结果显示
  138. return failed(mapList);
  139. }else {
  140. //如果没有被扫
  141. //创建一个扫码实绩
  142. Map<String, Object> wmspInboundScanResult =wmsInboundScanResultService.createInboundScanResultByResultMaterial(mapList.size(),map.get("userName").toString(),map.get("resultMaterial").toString());
  143. //判断是否创建成功、成功在添加
  144. // if (wmspInboundScanResult!=null){
  145. // mapList.add(wmspInboundScanResult);
  146. // }
  147. mapList= wmsInboundScanResultService.noIssueScanResultList(map.get("userName").toString());
  148. }
  149. return success(mapList);
  150. }
  151. /**
  152. * 1.新增扫描吊牌实绩!!!此时入库实绩未生成
  153. * @param
  154. * @return
  155. */
  156. @ApiOperation(value = "新增扫描吊牌实绩")
  157. @PostMapping("/insertResult2")
  158. @Transactional
  159. public synchronized RESTfulResult insertResult2(@RequestBody(required = false)Map<String,Object>map) throws ParseException {
  160. int i=0;
  161. WmspInboundScanResult wmspInboundScanResult = new WmspInboundScanResult();
  162. //获取工号查找id
  163. BigDecimal loadId = wmsInboundScanResultService.getLoadId(map);
  164. map.put("loadId",loadId);
  165. BigDecimal inboundResultId = new BigDecimal((Integer)map.get("inboundId"));
  166. //判断是否重复扫码
  167. //调用判断是否重复扫码的方法
  168. if(inboundResultId.intValue() == -1){
  169. if(wmsInboundScanResultService.checkScanTag(map,loadId) == 0){
  170. List<Map<String,Object>>mapList =wmsInboundScanResultService.getScanResult(loadId);
  171. return failed(mapList);
  172. }
  173. }
  174. wmspInboundScanResult.setResultId(new BigDecimal(String.valueOf(wmsInboundScanResultService.count())));
  175. //设置入库物资件数,默认一件
  176. wmspInboundScanResult.setInboundMaterialNumber(new BigDecimal(1));
  177. //设置吊钢工已扫物资件数
  178. wmspInboundScanResult.setResultNumber(new BigDecimal(wmsInboundScanResultService.scanNumber(map)+1));
  179. map.put("resultNumber",wmspInboundScanResult.getResultNumber());
  180. //设置常规字段 插入人为吊钢工的名字
  181. wmspInboundScanResult.setInsertTime(new Date());
  182. //设置吊钢工扫描吊牌时间
  183. wmspInboundScanResult.setResultLoadTime(new Date());
  184. //设置状态为未下发
  185. wmspInboundScanResult.setResultStatus(new BigDecimal(0));
  186. //设置吊钢工Id
  187. wmspInboundScanResult.setLoadId(loadId);
  188. //设置扫描吊牌实绩
  189. String str = (String) map.get("resultMaterial");
  190. wmspInboundScanResult.setResultMaterial(str);
  191. //设置入库实绩ID
  192. if (inboundResultId.intValue() != -1){
  193. BigDecimal hh=wmspInboundScanResult.getInboundResultId() ;
  194. wmspInboundScanResult.setInboundResultId(inboundResultId);
  195. wmspInboundScanResult.setResultStatus(new BigDecimal(1));
  196. }
  197. //设置逻辑删除字段
  198. wmspInboundScanResult.setResultDeleted(new BigDecimal(1));
  199. //新增钢材物资ID
  200. Integer k = rmsMaterialSteelService.insertRmsMaterialSteel(str);
  201. wmspInboundScanResult.setMaterialId(new BigDecimal(k));
  202. //根据班次班组查找同一车间的另一位小伙伴
  203. //判断物资是否为线材
  204. BigDecimal count = wmsInboundScanResultService.selectMaterialTypeByMaterialId(new BigDecimal(k));
  205. wmspInboundScanResult.setInboundAbnormalis(new BigDecimal(0));
  206. if(count != null){
  207. BigDecimal otherLoadId = wmsInboundScanResultService.getOtherLoadId(map);
  208. map.put("otherLoadId",otherLoadId);
  209. //查找另一位兄弟的相同次数的扫描实绩里面的物资ID
  210. Integer otherMaterialId = wmsInboundScanResultService.getOtherMaterialSteelId(map);
  211. if (otherMaterialId==k) {
  212. wmspInboundScanResult.setInboundAbnormalis(new BigDecimal(1));
  213. }
  214. else{
  215. wmspInboundScanResult.setInboundAbnormalis(new BigDecimal(0));
  216. }
  217. }
  218. //插入扫描吊牌实绩
  219. Integer integer = wmsInboundScanResultService.insertWmsInboundScanResult(wmspInboundScanResult);
  220. System.out.println("-----------"+integer);
  221. if (integer!=1){
  222. return failed();
  223. }
  224. //判断物资是否为线材
  225. if(count != null){
  226. //如果不为线材
  227. //更新异常值
  228. wmsInboundScanResultService.updateInboundAbnormal(map);
  229. }
  230. List<Map<String,Object>>mapList =wmsInboundScanResultService.getScanResult(loadId);
  231. return success(mapList);
  232. }
  233. /**
  234. * 展示未下发扫描实绩
  235. * @return
  236. */
  237. @ApiOperation(value="展示未下发扫描实绩")
  238. @PostMapping("/getScanResult")
  239. public RESTfulResult getScanResult(@RequestBody(required = false) Map<String,Object>map){
  240. BigDecimal loadId = wmsInboundScanResultService.getLoadId(map);
  241. map.put("loadId",loadId);
  242. List<Map<String,Object>>mapList =wmsInboundScanResultService.getScanResult(loadId);
  243. return success(mapList);
  244. }
  245. /**
  246. *
  247. * @return
  248. */
  249. @ApiOperation(value="展示垛位")
  250. @PostMapping("/selectStackingInfoByWarehouseId")
  251. public RESTfulResult selectStackingInfoByWarehouseId(@RequestBody(required = false) Map<String,Object>map){
  252. List<Map<String,Object>>mapList =wmsInboundScanResultService.selectStacking(map);
  253. return success(mapList);
  254. }
  255. /**
  256. *
  257. * @return
  258. */
  259. @ApiOperation(value="更新状态")
  260. @PostMapping("/updateStatus")
  261. public RESTfulResult updateStatus(@RequestBody(required = false) Map<String,Object>map){
  262. Integer integer =wmsInboundScanResultService.updateStatus(map);
  263. return success(integer);
  264. }
  265. /**
  266. * 展示异常入库吊钢工扫描吊牌实绩
  267. * @return
  268. */
  269. @ApiOperation(value="展示异常入库吊钢工扫描吊牌实绩")
  270. @PostMapping("/getIssuedTagNoResult")
  271. public RESTfulResult getIssuedTagNoResult(){
  272. HashMap<String, Object> map = new HashMap<>();
  273. List<Map<String, Object>> scanIssuedTagResult = wmsInboundScanResultService.getIssuedScanTagNoResult(map);
  274. return success(scanIssuedTagResult);
  275. }
  276. //根据入库实绩id查找扫描实绩
  277. @PostMapping("/selectScanResultByIboundResultId")
  278. @ApiOperation(value = "根据入库实绩id获得扫描实绩数据")
  279. @ApiImplicitParams({
  280. @ApiImplicitParam(name = "apiId", value = "", required = false, dataType = "BigDecimal"),
  281. })
  282. public RESTfulResult selectScanResultByIboundResultId(@RequestBody(required = false) Map<String, Object> mapValue,
  283. Integer apiId,
  284. Integer pageNum,
  285. Integer pageSize,
  286. Integer inboundId) {
  287. if (inboundId!=null){
  288. mapValue.put("inboundId",inboundId);
  289. }
  290. List<Map<String, Object>> reboundResultTotal = wmsInboundResultService.selectScanResultByIboundResultId(mapValue);
  291. List<Map<String, Object>> columnDataList = columnDataFeign.getColumnData(apiId);
  292. /*分页*/
  293. PageHelper.startPage(pageNum, pageSize);
  294. /*返回中英文对照结果,计算表头*/
  295. List<Map<String, Object>> reboundResult = wmsInboundResultService.selectScanResultByIboundResultId(mapValue);
  296. for (Map<String, Object> columnData : columnDataList) {
  297. columnData.put("filters", setListMap(reboundResultTotal, columnData.get("prop").toString()));
  298. }
  299. PageListAdd pageList = new PageListAdd(reboundResult);
  300. pageList.setColumnData(columnDataList);
  301. return success(pageList);
  302. }
  303. Set<Map<String, Object>> setListMap(List<Map<String, Object>> list, String name) {
  304. Set<Map<String, Object>> setString = new HashSet<>();
  305. for (Map<String, Object> map : list) {
  306. Map<String, Object> map1 = new HashMap<>();
  307. map1.put("text", map.get(name));
  308. if (map.get(name) != null) {
  309. //判断是否是运力类型
  310. if ("capacity_type".equals(name)) {
  311. switch (map.get(name).toString().trim()) {
  312. case "自有电车":
  313. map1.put("value", 0);
  314. break;
  315. case "自有汽车":
  316. map1.put("value", 1);
  317. break;
  318. case "社会车辆":
  319. map1.put("value", 2);
  320. break;
  321. }
  322. } else {
  323. map1.put("value", map.get(name));
  324. }
  325. setString.add(map1);
  326. }
  327. }
  328. return setString;
  329. }
  330. // 根据index找到对应的成品并改变其入库状态
  331. @ApiOperation(value="展示垛位")
  332. @PostMapping("/changeInboundIscomplete")
  333. public RESTfulResult changeInboundIscomplete(@RequestBody(required = false) Map<String,Object>map){
  334. Integer stackResultId1= (Integer) map.get("stackResultId");
  335. BigDecimal stackResultId=new BigDecimal(stackResultId1);
  336. int result =wmsInboundScanResultService.changeInboundIscomplete(stackResultId);
  337. return success(result);
  338. }
  339. /**
  340. * 1.新增退货扫描吊牌实绩!!!此时入库实绩未生成
  341. * @param
  342. * @return
  343. */
  344. @ApiOperation(value = "新增扫描吊牌实绩")
  345. @PostMapping("/insertReboundScanResult")
  346. @Transactional
  347. public synchronized RESTfulResult insertReboundScanResult(@RequestBody(required = false)Map<String,Object>map) throws ParseException {
  348. //判断自己是否已经扫过了、并且没有出库过
  349. int isExist= wmsInboundScanResultService.isExist2(map.get("userName").toString(),map.get("resultMaterial").toString().substring(0,map.get("resultMaterial").toString().length()-1));
  350. //通过用户ID查询、当前扫描没有下发的物质、最终展示的集合
  351. List<Map<String,Object>>mapList= wmsInboundScanResultService.noIssueScanResultList2(map.get("userName").toString());
  352. if (isExist>0){
  353. //如果已经被少扫过了返回扫码实绩集合
  354. //返回结果显示
  355. return failed(mapList);
  356. }else {
  357. //如果没有被扫
  358. //创建一个扫码实绩
  359. Map<String, Object> wmspInboundScanResult =wmsInboundScanResultService.createInboundScanResultByResultMaterial2(mapList.size(),map.get("userName").toString(),map.get("resultMaterial").toString());
  360. //判断是否创建成功、成功在添加
  361. if (wmspInboundScanResult!=null){
  362. mapList.add(wmspInboundScanResult);
  363. }
  364. }
  365. return success(mapList);
  366. }
  367. }