WarehousingServiceImpl.java 59 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199
  1. package com.tld.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.github.pagehelper.PageHelper;
  5. import com.github.pagehelper.PageInfo;
  6. import com.mysql.cj.xdevapi.JsonString;
  7. import com.tld.excel.ExcelUtils;
  8. import com.tld.mapper.*;
  9. import com.tld.model.*;
  10. import com.tld.model.Dictionary;
  11. import com.tld.model.Error;
  12. import com.tld.service.WarehousingService;
  13. import com.tld.util.DateUtil;
  14. import com.tld.util.HttpClientUtil;
  15. import org.apache.http.ParseException;
  16. import org.redisson.api.RLock;
  17. import org.redisson.api.RedissonClient;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.stereotype.Service;
  20. import org.springframework.transaction.annotation.Transactional;
  21. import javax.annotation.Resource;
  22. import javax.servlet.http.HttpServletRequest;
  23. import javax.servlet.http.HttpServletResponse;
  24. import java.text.SimpleDateFormat;
  25. import java.util.*;
  26. @Service
  27. public class WarehousingServiceImpl implements WarehousingService {
  28. //入库
  29. @Autowired
  30. private WarehousingMapper warehousingMapper;
  31. //用户`
  32. @Autowired
  33. private UserMapper userMapper;
  34. //错误日志表
  35. @Autowired
  36. private ErrorMapper errorMapper;
  37. //redis锁
  38. @Autowired
  39. private RedissonClient redissonClient;
  40. //出库
  41. @Autowired
  42. private AskGoodsMapper askGoodsMapper;
  43. //库存
  44. @Autowired
  45. private StorageLocationMapper storageLocationMapper;
  46. //库存
  47. @Autowired
  48. private DictionaryMapper dictionaryMapper;
  49. //质检单
  50. @Autowired
  51. private ReceiveGoodsMapper receiveGoodsMapper;
  52. @Autowired
  53. private DeliveryMapper deliveryMapper;
  54. @Override
  55. public Map<String, Object> getRecommend(String wllbCode, String suppId, String num, String unique, String producDate, String warehouseWhere, String wbs, String accountSleeve) {
  56. Map<String, Object> map = new HashMap<>();
  57. try {
  58. //判断物料是否录入
  59. MaterialClass materialClass = warehousingMapper.getMateriaIsExist(wllbCode);
  60. if (materialClass == null) {
  61. map.put("msg", "500");
  62. map.put("errMsg", "物料信息未录入,请联系管理员");
  63. return map;
  64. }
  65. if(materialClass.getPartType().equals("半成品")){
  66. map.put("msg", "500");
  67. map.put("errMsg", "此物料是" + materialClass.getPartType());
  68. return map;
  69. }
  70. if (materialClass.getPartType().equals("产成品")) {
  71. map.put("data", new ArrayList<>());
  72. map.put("listString", new HashMap<>());//返回库位剩余数量
  73. return map;
  74. }
  75. Map<String, Object> mapVal = warehousingMapper.getScanIsNot(wllbCode, suppId, unique, producDate, warehouseWhere);
  76. if (Integer.parseInt(mapVal.get("inventoryCount").toString()) != 0 || Integer.parseInt(mapVal.get("virtualCount").toString()) != 0) {
  77. map.put("msg", "500");
  78. map.put("errMsg", "已被扫描");
  79. return map;
  80. }
  81. //判断如果是混合则走单独逻辑
  82. String isNotSisable = warehousingMapper.getIsNotSisable(wllbCode);
  83. if (isNotSisable.equals("1")) {
  84. List<StorageLocation> list1 = warehousingMapper.getIsNotSisableLocation("1");
  85. map.put("data", list1);
  86. map.put("msg", "200");
  87. return map;
  88. }
  89. List<MaterialClass> listMaterialClass = warehousingMapper.getMaterialClass(wllbCode);
  90. if (listMaterialClass.size() == 0) {
  91. listMaterialClass = warehousingMapper.getMaterialClassType(wllbCode);
  92. }
  93. if (listMaterialClass.size() == 0) {
  94. map.put("msg", "500");
  95. map.put("errMsg", "该物料未绑定库位");
  96. return map;
  97. }
  98. StringBuffer stringBuffer = new StringBuffer();
  99. Map<String, Object> listMap = new HashMap<>();
  100. for (int i = 0; i < listMaterialClass.size(); i++) {
  101. Map<String, Object> map1 = warehousingMapper.getScanNum(listMaterialClass.get(i).getStorageLocationCode(), num);
  102. if ( Double.doubleToLongBits(Double.parseDouble(String.valueOf(map1.get("scanNum")))) <= Double.doubleToLongBits(Double.parseDouble(String.valueOf(materialClass.getSize()))) ) {
  103. //查询库存是否同物料同批次存在
  104. List<Map<String, Object>> countProduc = warehousingMapper.getInventoryProduc(listMaterialClass.get(i).getWllbCode(), producDate, listMaterialClass.get(i).getStorageLocationCode(), wbs, accountSleeve);
  105. if (countProduc.size() == 0) {
  106. stringBuffer.append(listMaterialClass.get(i).getStorageLocationCode() + ",");
  107. int surplusNum = (int) (Double.parseDouble(String.valueOf(materialClass.getSize())) - Double.parseDouble(String.valueOf(map1.get("scanNum"))) + Double.parseDouble(num));
  108. listMap.put(listMaterialClass.get(i).getStorageLocationCode(), surplusNum);
  109. } else {
  110. Date date = new Date();
  111. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
  112. if (String.valueOf(countProduc.get(0).get("producDate")).equals(sdf.format(date)) &&
  113. String.valueOf(countProduc.get(0).get("wbs")).equals(wbs) &&
  114. String.valueOf(countProduc.get(0).get("accountSleeve")).equals(accountSleeve) &&
  115. String.valueOf(countProduc.get(0).get("wllbCode")).equals(wllbCode)) {
  116. stringBuffer.append(listMaterialClass.get(i).getStorageLocationCode() + ",");
  117. int surplusNum = (int) (Double.parseDouble(String.valueOf(materialClass.getSize())) - Double.parseDouble(String.valueOf(map1.get("scanNum"))) + Double.parseDouble(num));
  118. listMap.put(listMaterialClass.get(i).getStorageLocationCode(), surplusNum);
  119. }
  120. }
  121. }
  122. }
  123. List<StorageLocation> list = warehousingMapper.recommend(stringBuffer.toString());
  124. map.put("data", list);
  125. map.put("listString", listMap);//返回库位剩余数量
  126. map.put("msg", "200");
  127. } catch (Exception e) {
  128. e.printStackTrace();
  129. map.put("msg", "500");
  130. map.put("errMsg", "服务器请求异常,请稍后再试");
  131. }
  132. return map;
  133. }
  134. @Override
  135. @Transactional(rollbackFor = Exception.class)
  136. public Map<String, Object> addWarehousingVirtual(WarehousingVirtual warehousingVirtual) {
  137. Map<String, Object> map = new HashMap<>();
  138. try {
  139. warehousingMapper.addWarehousingVirtual(warehousingVirtual);
  140. map.put("msg", "200");
  141. } catch (Exception e) {
  142. e.printStackTrace();
  143. map.put("msg", "500");
  144. map.put("errMsg", "服务器请求异常,请稍后再试");
  145. }
  146. return map;
  147. }
  148. @Override
  149. @Transactional(rollbackFor = Exception.class)
  150. public Map<String, Object> delWarehousingVirtual(WarehousingVirtual warehousingVirtual) {
  151. Map<String, Object> map = new HashMap<>();
  152. try {
  153. warehousingMapper.delWarehousingVirtual(warehousingVirtual);
  154. map.put("msg", "200");
  155. } catch (Exception e) {
  156. e.printStackTrace();
  157. map.put("msg", "500");
  158. map.put("errMsg", "服务器请求异常,请稍后再试");
  159. }
  160. return map;
  161. }
  162. @Override
  163. @Transactional(rollbackFor = Exception.class)
  164. public Map<String, Object> warehousing(String uniqueCode, String type, String warehouseTransferId) {
  165. Map<String, Object> map = new HashMap<>();
  166. try {
  167. //入库信息
  168. List<WarehousingVirtual> list = new LinkedList<>();
  169. //返回采购单id
  170. StringBuilder stringBuilder = new StringBuilder();
  171. //查询入库所需要的信息
  172. for(WarehousingVirtual warehousingVirtual : warehousingMapper.getVirtual(uniqueCode, type, warehouseTransferId)){
  173. //查询采购单信息
  174. ReceiveGoods receiveGoods1 = receiveGoodsMapper.getReceiveGoodsCode(warehousingVirtual.getReceiveGoodsId());
  175. //存入给gs的返回数据
  176. String code = codeGenerateRk();
  177. warehousingVirtual.setStorageCode(code);
  178. //查询部门编号
  179. List<User> listUser = userMapper.getAllUser(new User().setId(warehousingVirtual.getUserId()));
  180. warehousingVirtual.setDepartmentId(listUser.get(0).getDepartmentId());
  181. //查询物料分类
  182. WarehousingVirtual warehousingVirtual1 = warehousingMapper.getWlClass(warehousingVirtual);
  183. warehousingVirtual.setWllbClass(warehousingVirtual1.getWllbClass());
  184. warehousingVirtual.setMaterialId(warehousingVirtual1.getMaterialId());
  185. warehousingVirtual.setPurchaseNum(receiveGoods1.getPurchaseNum());
  186. list.add(warehousingVirtual);
  187. if(Double.parseDouble(warehousingVirtual.getNum()) <= 0){
  188. break;
  189. }
  190. receiveGoods1.setWarehousingNum(warehousingVirtual.getNum());
  191. warehousingMapper.updateReceiveGood(receiveGoods1);
  192. ReturnWarehousing returnWarehousing = new ReturnWarehousing()
  193. .setWarehousingNum(receiveGoods1.getWarehousingNum())
  194. .setGsCk(warehousingVirtual.getGsCk())
  195. .setSourceType(receiveGoods1.getSourceType())
  196. .setMoveType(receiveGoods1.getMoveType())
  197. .setEntryNumber(receiveGoods1.getEntryNumber())
  198. .setWbs(receiveGoods1.getWbs())
  199. .setId(receiveGoods1.getId())
  200. .setMaterialId(receiveGoods1.getMaterialId())
  201. .setStorageCode(warehousingVirtual.getStorageCode())
  202. .setOrderNumber(receiveGoods1.getOrderNumber())
  203. .setUserName(warehousingVirtual.getUserName())
  204. .setStorageLocationCode(warehousingVirtual.getStorageLocationCode());
  205. warehousingMapper.addReturnWarehousing(returnWarehousing);
  206. warehousingMapper.updateStorage(warehousingVirtual1);//增加入库编号
  207. //判断是否有已存在的采购单号
  208. if(!stringBuilder.toString().contains(receiveGoods1.getOrderNumber() + ",")){
  209. stringBuilder.append(receiveGoods1.getOrderNumber() + ",");
  210. }
  211. }
  212. //入库
  213. warehousingMapper.addStorage(list);//入库流水
  214. warehousingMapper.addInventory(list);//库存
  215. warehousingMapper.delVirtual(uniqueCode);//删除临时表数据
  216. map.put("data", stringBuilder.toString());
  217. map.put("msg", "200");
  218. } catch (Exception e) {
  219. e.printStackTrace();
  220. map.put("msg", "500");
  221. map.put("errMsg", "服务器请求异常,请稍后再试");
  222. }
  223. return map;
  224. }
  225. @Override
  226. public void plugOutWarehousing(String orderNumber, String realName) {
  227. try {
  228. for (ReturnWarehousing returnWarehousing : warehousingMapper.getPlugOutWarehousing(orderNumber)) {
  229. JSONObject returnData = new JSONObject();
  230. JSONObject BillItems = new JSONObject();
  231. JSONObject strJson = new JSONObject();
  232. strJson.put("PurOrderID", returnWarehousing.getOrderNumber());//采购单id
  233. strJson.put("WMSID", returnWarehousing.getId());//入库单id
  234. strJson.put("WMSCode", returnWarehousing.getStorageCode());//入库单编号
  235. strJson.put("WareHouse", dictionaryMapper.getWarehouse(returnWarehousing.getStorageLocationCode()));//仓库id
  236. strJson.put("SourceBillDate", DateUtil.dateConversion(returnWarehousing.getScrq()));//业务日期
  237. strJson.put("SourceType", returnWarehousing.getSourceType());//来源类型
  238. strJson.put("MoveType", returnWarehousing.getMoveType());//移动类型
  239. strJson.put("IsRed", "0");//是否红单1
  240. // strJson.put("Creator", returnWarehousing.getUserName());//制单人姓名
  241. strJson.put("Creator", realName);//制单人姓名
  242. BillItems.put("WMSItemID", returnWarehousing.getReceiveGoodsId());//利道WMS入库单分录ID
  243. BillItems.put("PurOrderID", returnWarehousing.getOrderNumber());//采购单id
  244. BillItems.put("PurOrderItemID", returnWarehousing.getEntryNumber());//采购订单明细ID
  245. BillItems.put("Material", returnWarehousing.getMaterialId());//物料id
  246. BillItems.put("Quantity", returnWarehousing.getWarehousingNum());//入库数量
  247. BillItems.put("FlexField1", returnWarehousing.getWbs());//wbs
  248. BillItems.put("FlexField1Code", returnWarehousing.getWbsCode());//WBS编号
  249. BillItems.put("FlexField1Name", returnWarehousing.getWbsName());//WBS名称
  250. List<JSONObject> list = new LinkedList<>();
  251. list.add(BillItems);
  252. strJson.put("BillItems", list);
  253. returnData.put("strJson", JSON.toJSONString(strJson));
  254. //回传地址
  255. // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreatePurInStock";
  256. String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreatePurInStock";
  257. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  258. Map<String, Object> result = httpClientUtil1.doPost(url, returnData);
  259. System.out.println("返回信息为:"+result.toString());
  260. Error error = new Error();
  261. int type = 0;
  262. if (Integer.parseInt(result.get("msg").toString()) != 200) {
  263. //如果失败存入报错信息跟数据
  264. error.setErrorInfo(result.get("data").toString());
  265. error.setUrl(url);
  266. error.setDataVal(returnData.toJSONString()).setType("入库回传");
  267. errorMapper.addError(error);
  268. type = 1;
  269. } else {
  270. JSONObject jsonObject = JSONObject.parseObject(JSON.parseObject((String) result.get("data")).get("result").toString());
  271. if (jsonObject.get("State").toString().equals("0")) {
  272. //如果失败存入报错信息跟数据
  273. error.setErrorInfo(jsonObject.get("FailReason").toString());
  274. error.setUrl(url);
  275. error.setDataVal(returnData.toJSONString()).setType("入库回传");
  276. errorMapper.addError(error);
  277. type = 1;
  278. }
  279. }
  280. //添加记录到tld_access
  281. String names = "入库回传";
  282. String accessType = "1";
  283. String returnGsRemoval = returnData.toString();
  284. askGoodsMapper.addAccess(names, returnGsRemoval, accessType);
  285. //增加流水传输状态
  286. warehousingMapper.updateWarehousingType(returnWarehousing.getStorageCode(), type);
  287. }
  288. //删除父子表信息
  289. askGoodsMapper.delPlugOutWarehousing(orderNumber);
  290. } catch (Exception e) {
  291. e.printStackTrace();
  292. }
  293. }
  294. @Override
  295. public Map<String, Object> warehousingFlowing(Storage storage) {
  296. Map<String, Object> map = new HashMap<>();
  297. try {
  298. PageHelper.startPage(storage.getPage(), storage.getLimit());
  299. PageInfo<Storage> list = new PageInfo<>(warehousingMapper.warehousingFlowing(storage));
  300. map.put("data", list);
  301. map.put("msg", "200");
  302. } catch (Exception e) {
  303. e.printStackTrace();
  304. map.put("msg", "500");
  305. map.put("errMsg", "服务器请求异常,请稍后再试");
  306. }
  307. return map;
  308. }
  309. @Override
  310. public Map<String, Object> getWarehousingVirtual(String uniqueCode, String type, String warehouseTransferId) {
  311. Map<String, Object> map = new HashMap<>();
  312. try {
  313. List<WarehousingVirtual> list = warehousingMapper.getWarehousingVirtual(uniqueCode, type, warehouseTransferId);
  314. map.put("data", list);
  315. map.put("msg", "200");
  316. } catch (Exception e) {
  317. e.printStackTrace();
  318. map.put("msg", "500");
  319. map.put("errMsg", "服务器请求异常,请稍后再试");
  320. }
  321. return map;
  322. }
  323. @Override
  324. public void export(Storage storage, HttpServletResponse response) {
  325. try {
  326. //导出数据汇总
  327. List<List<Object>> sheetDataList = new ArrayList<>();
  328. //表头数据
  329. List<Object> head = Arrays.asList("物料名称", "物料编号", "供应商", "连番号", "生产批次", "入库数量", "类型", "工号", "库位名称", "入库日期", "入库单编号", "WBS编号","姓名","采购订单号", "所属公司", "公司编号" ,"采购数量");
  330. //查询数据
  331. List<Map<String, Object>> list = new ArrayList<>(warehousingMapper.export(storage));
  332. sheetDataList.add(head);
  333. for (Map<String, Object> userMap : list) {
  334. List<Object> listSheet = new ArrayList<>();
  335. for (String key : userMap.keySet()) {
  336. listSheet.add(userMap.get(key));
  337. }
  338. sheetDataList.add(listSheet);
  339. }
  340. //当前时间
  341. Date time = new Date();
  342. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss");
  343. ExcelUtils.export(response, "入库流水数据导出" + sdf.format(time), sheetDataList);
  344. } catch (Exception e) {
  345. e.printStackTrace();
  346. }
  347. }
  348. /**
  349. * 查询报工单
  350. */
  351. @Override
  352. public Map<String, Object> getNotice(Notice notice) {
  353. Map<String, Object> map = new HashMap<>();
  354. try {
  355. Map<String, Object> sumScanNum = new HashMap<>();
  356. PageHelper.startPage(notice.getPage(), notice.getLimit());
  357. PageInfo<Notice> list = new PageInfo<>(warehousingMapper.getNotice(notice));
  358. for (Notice notice1 : list.getList()) {
  359. int sumScanNumVal = warehousingMapper.getSumScanNumVal(notice1);
  360. sumScanNum.put(notice1.getNoticeId() + "-" + notice1.getMaterialId(), sumScanNumVal);
  361. }
  362. map.put("data", list);
  363. map.put("msg", "200");
  364. map.put("sumScanNum", sumScanNum);
  365. } catch (Exception e) {
  366. e.printStackTrace();
  367. map.put("msg", "500");
  368. map.put("errMsg", "服务器请求异常,请稍后再试");
  369. }
  370. return map;
  371. }
  372. @Override
  373. @Transactional(rollbackFor = Exception.class)
  374. public Map<String, Object> addInventoryNotice(Notice notice) {
  375. Map<String, Object> map = new HashMap<>();
  376. try {
  377. Notice notice1 = warehousingMapper.getNoticeId(notice);
  378. if (notice1.getType().equals("1")) {
  379. map.put("msg", "500");
  380. map.put("errMsg", "此通知单已入库!");
  381. return map;
  382. }
  383. // if(Double.parseDouble(notice1.getNum()) < Double.parseDouble(notice.getNum())){
  384. // map.put("msg", "500");
  385. // map.put("errMsg", "入库数量大于通知单数量!");
  386. // return map;
  387. // }
  388. if (warehousingMapper.getInventoryNotice(notice) != 0) {
  389. warehousingMapper.updateInventoryNotice(notice);
  390. } else {
  391. warehousingMapper.addInventoryNotice(notice);
  392. }
  393. notice.setType("1");
  394. warehousingMapper.updateNotice(notice);//修改报工单数量
  395. //存入给gs的返回数据
  396. String storageCode = codeGenerateRk();
  397. //入库流水
  398. WarehousingVirtual warehousingVirtual = new WarehousingVirtual()
  399. .setWllbCode(notice1.getMaterialCode())
  400. .setUserId(notice.getUserId())
  401. .setStorageLocationCode(notice.getStorageLocationCode())
  402. .setProducDate(notice1.getNoticeTime())
  403. .setNum(notice.getWarehousingNum())
  404. .setStorageCode(storageCode)
  405. .setWbs(notice.getWbs())
  406. .setProductionCode(notice1.getProductionCode())
  407. .setAccountSleeve(notice.getCompanyNumber());
  408. warehousingMapper.addProduct(warehousingVirtual);//入库流水 半成品
  409. ReturnWarehousing returnWarehousing = new ReturnWarehousing()
  410. .setStorageCode(storageCode)//入库编号
  411. .setSourceType(notice1.getSourceType())//来源类型
  412. .setMoveType(notice1.getMoveType())//移动类型
  413. .setOrderNumber(notice1.getNoticeId())//通知单id
  414. .setWbs(notice1.getWbs())//wbs
  415. .setEntryNumber(notice1.getEntryNumber())//gs分录号
  416. .setMaterialId(notice1.getMaterialId())//物料id
  417. .setId(notice1.getId())//分录单id
  418. .setWarehousingNum(notice.getWarehousingNum())//入库数量
  419. .setStorageLocationCode(notice.getStorageLocationCode())//库位编号
  420. .setUserName(notice.getUserName());//用户名称
  421. warehousingMapper.addReturnWarehousing(returnWarehousing);
  422. map.put("data", storageCode);
  423. map.put("msg", "200");
  424. } catch (Exception e) {
  425. e.printStackTrace();
  426. map.put("msg", "500");
  427. map.put("errMsg", "服务器请求异常,请稍后再试");
  428. }
  429. return map;
  430. }
  431. @Override
  432. @Transactional(rollbackFor = Exception.class)
  433. public Map<String, Object> updateInventoryNotice(Notice notice) {
  434. Map<String, Object> map = new HashMap<>();
  435. //redis并发锁
  436. RLock lock = redissonClient.getLock(notice.getMaterialId());
  437. lock.lock();
  438. try {
  439. Inventory inventory = warehousingMapper.getHalfInventory(notice);//库存信息
  440. AskGoods askGoods = warehousingMapper.getAskGoodsHalf(notice);//要货单信息
  441. if (askGoods.getType().equals("1")) {
  442. map.put("msg", "500");
  443. map.put("errMsg", "订单已出库");
  444. return map;
  445. }
  446. if (Double.doubleToLongBits(Double.parseDouble(askGoods.getNum())) < Double.doubleToLongBits(Double.parseDouble(notice.getWarehousingNum()) + Double.parseDouble(askGoods.getOutNum()))) {
  447. map.put("msg", "500");
  448. map.put("errMsg", "出库数量大于剩余要货单数量");
  449. return map;
  450. }
  451. if (inventory == null) {
  452. map.put("msg", "500");
  453. map.put("errMsg", "没有查询到此半成品物料的库存");
  454. return map;
  455. }
  456. if (Double.doubleToLongBits(Double.parseDouble(notice.getWarehousingNum())) > Double.doubleToLongBits(Double.parseDouble(inventory.getAmount()))) {
  457. map.put("msg", "500");
  458. map.put("errMsg", "库存不足");
  459. return map;
  460. }
  461. if (Double.doubleToLongBits(Double.parseDouble(notice.getWarehousingNum())) == Double.doubleToLongBits(Double.parseDouble(inventory.getAmount()))) {
  462. warehousingMapper.delInventoryNotice(notice);
  463. } else {
  464. warehousingMapper.updateInventoryNoticeNum(notice);
  465. }
  466. //出库数量 + 已经出库的数量 如果相等 则改变单据状态
  467. Double num = Double.parseDouble(notice.getWarehousingNum()) + Double.parseDouble(askGoods.getOutNum());
  468. String type = null;
  469. if(Double.doubleToLongBits(Double.parseDouble(askGoods.getNum())) == Double.doubleToLongBits(num)){
  470. type = "1";
  471. }
  472. warehousingMapper.updateAskGoodsHalf(askGoods.getId(), notice.getWarehousingNum(), type);//修改要货单出库数量
  473. //新增返回gs信息
  474. String removalCode = codeGenerateCk();
  475. //新增半成品出库流水
  476. AskGoods askGoods1 = new AskGoods()
  477. .setWllbCode(notice.getWllbCode())
  478. .setNum(notice.getWarehousingNum())
  479. .setUserId(notice.getUserId())
  480. .setAskGoodsId(askGoods.getAskGoodsId())
  481. .setDepartment(askGoods.getDepartment())
  482. .setStorageCode(removalCode)
  483. .setWbs(notice.getWbs())
  484. .setCompanyNumber(notice.getCompanyNumber());//新增出库流水
  485. warehousingMapper.addRemovalHalfProduct(askGoods1);
  486. ReturRemoval returRemoval = new ReturRemoval()
  487. .setMaterialId(notice.getMaterialId())
  488. .setDocumentId(notice.getAskGoodsId())
  489. .setWbs(askGoods.getWbs())
  490. .setNum(notice.getWarehousingNum())
  491. .setEntryNumber(askGoods.getEntryNumber())
  492. .setDocumentPointsId(askGoods.getId())
  493. .setStorageLocationCode(inventory.getStorageLocationCode())
  494. .setRemovalCode(removalCode)
  495. .setSourceType(askGoods.getSourceType())
  496. .setMoveType(askGoods.getMoveType());
  497. askGoodsMapper.addReturnGsRemovalF(returRemoval);//新增返回gs数据父表信息
  498. askGoodsMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息
  499. map.put("data", notice.getAskGoodsId());
  500. map.put("msg", "200");
  501. } catch (Exception e) {
  502. e.printStackTrace();
  503. map.put("msg", "500");
  504. map.put("errMsg", "服务器请求异常,请稍后再试");
  505. } finally {
  506. //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
  507. if (lock.isLocked() && lock.isHeldByCurrentThread()) {
  508. //释放锁
  509. lock.unlock();
  510. }
  511. }
  512. return map;
  513. }
  514. @Override
  515. public Map<String, Object> getProduct(Notice notice) {
  516. Map<String, Object> map = new HashMap<>();
  517. try {
  518. PageHelper.startPage(notice.getPage(), notice.getLimit());
  519. PageInfo<Notice> list = new PageInfo<>(warehousingMapper.getProduct(notice));
  520. map.put("data", list);
  521. map.put("msg", "200");
  522. } catch (Exception e) {
  523. e.printStackTrace();
  524. map.put("msg", "500");
  525. map.put("errMsg", "服务器请求异常,请稍后再试");
  526. }
  527. return map;
  528. }
  529. @Override
  530. public void productExcel(Notice notice, HttpServletResponse response) {
  531. try {
  532. //导出数据汇总
  533. List<List<Object>> sheetDataList = new ArrayList<>();
  534. //表头数据
  535. List<Object> head = Arrays.asList("物料名称", "物料编号", "生产批次", "入库数量", "工号", "入库时间", "入库编号", "WBS编号","姓名","生产订单号","所属公司","公司编号");
  536. //查询数据
  537. List<Map<String, Object>> list = warehousingMapper.productExcel(notice);
  538. sheetDataList.add(head);
  539. for (Map<String, Object> userMap : list) {
  540. List<Object> listSheet = new ArrayList<>();
  541. for (String key : userMap.keySet()) {
  542. listSheet.add(userMap.get(key));
  543. }
  544. sheetDataList.add(listSheet);
  545. }
  546. //当前时间
  547. Date time = new Date();
  548. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss");
  549. ExcelUtils.export(response, "入库流水数据导出" + sdf.format(time), sheetDataList);
  550. } catch (Exception e) {
  551. e.printStackTrace();
  552. }
  553. }
  554. @Override
  555. public Map<String, Object> getProductWarehousing(Notice notice) {
  556. Map<String, Object> map = new HashMap<>();
  557. try {
  558. MaterialClass material = warehousingMapper.getMaterial(notice);
  559. if (material == null) {
  560. map.put("msg", "500");
  561. map.put("errMsg", "物料信息未录入,请联系管理员");
  562. return map;
  563. }
  564. Map<String, Object> mapVal = warehousingMapper.getScanIsNotProduct(notice);
  565. if (Integer.parseInt(mapVal.get("inventoryCount").toString()) != 0 || Integer.parseInt(mapVal.get("virtualCount").toString()) != 0) {
  566. map.put("msg", "500");
  567. map.put("errMsg", "已被扫描");
  568. return map;
  569. }
  570. int num = 0;
  571. if (notice.getType().equals("0")) {
  572. num = warehousingMapper.getNumUtil("产成品库位托盘定义");
  573. } else {
  574. num = Integer.parseInt(material.getSize());
  575. }
  576. int scanNum = Integer.parseInt(mapVal.get("inventoryCount").toString()) + Integer.parseInt(mapVal.get("virtualCount").toString());
  577. if(scanNum == num){
  578. map.put("msg", "500");
  579. map.put("errMsg", "库位已满");
  580. return map;
  581. }
  582. Notice notice1 = warehousingMapper.getNoticeId(new Notice().setNoticeId(notice.getNoticeId()).setMaterialId(notice.getMaterialId()));
  583. if(notice1 != null) {
  584. Double contrast = Double.parseDouble(notice1.getWarehousingNum()) + Double.parseDouble(notice.getWarehousingNum());
  585. if(Double.doubleToLongBits(contrast) > Double.doubleToLongBits(Double.parseDouble(notice1.getNum()))) {
  586. map.put("msg", "500");
  587. map.put("errMsg", "扫描数量超出报工单数量");
  588. return map;
  589. }
  590. }
  591. notice.setWllbClass(material.getWllbClass());
  592. StringBuffer stringBuffer = new StringBuffer();//库位编号
  593. if (material.getPartType().equals("产成品")) {
  594. if (material.getIsRecommend().equals("1")) {
  595. StorageLocation storageLocation = new StorageLocation().setIsProduct("1");
  596. String[] symbol = {"<", "="};
  597. for(int i = 0; i < symbol.length; i++){
  598. String producBatch = null;
  599. if(symbol[i].equals("=")){
  600. producBatch = notice.getProducBatch();
  601. }
  602. String storageLocationCode = warehousingMapper.getStorageLocationCode(notice.getAttribute(), symbol[i], producBatch, material.getTldId(), notice.getCompanyNumber()); //查询昨天没满的库位
  603. if(!storageLocationCode.equals("0")) {
  604. int countStorage = warehousingMapper.getCountStorage(notice.getAttribute(), storageLocationCode, symbol[i], producBatch, material.getTldId());
  605. if (countStorage < num) {
  606. stringBuffer.append(storageLocationCode + ",");
  607. List<StorageLocation> list = warehousingMapper.recommend(stringBuffer.toString());
  608. map.put("data", list);
  609. map.put("msg", "210");
  610. return map;
  611. }
  612. }
  613. }
  614. //查询产成品库位
  615. List<StorageLocation> storageLocations = storageLocationMapper.getStorage(storageLocation);
  616. for(StorageLocation storageLocation1 : storageLocations) {
  617. Inventory inventory = warehousingMapper.getInventoryInfo(storageLocation1);//查询库存信息
  618. if(inventory == null) {
  619. stringBuffer.append(storageLocation1.getStorageLocationCode() + ",");
  620. break;
  621. }
  622. }
  623. List<StorageLocation> list = warehousingMapper.recommend(stringBuffer.toString());
  624. map.put("data", list);
  625. map.put("msg", "210");
  626. } else {
  627. map.put("msg", "220");
  628. // if(warehousingMapper.getInventoryNotice(notice) != 0){
  629. // warehousingMapper.updateInventoryNotice(notice);
  630. // } else {
  631. // warehousingMapper.addInventoryNotice(notice);
  632. // }
  633. // warehousingMapper.updateNotice(notice);//修改报工单数量
  634. // String storageCode = codeGenerateRk();
  635. // //入库流水
  636. // Notice notice1 = warehousingMapper.getNoticeId(notice);
  637. // WarehousingVirtual warehousingVirtual = new WarehousingVirtual()
  638. // .setWllbCode(material.getWllbCode())
  639. // .setUserId(notice.getUserId())
  640. // .setStorageLocationCode(notice.getStorageLocationCode())
  641. // .setProducDate(notice.getProducBatch())
  642. // .setNum(notice.getWarehousingNum())
  643. // .setSerial(notice.getSerial())
  644. // .setSeq(notice.getSeq())
  645. // .setAttribute(notice.getAttribute())
  646. // .setStorageCode(storageCode)
  647. // .setWbs(notice.getWbs())
  648. // .setProductionCode(notice1.getProductionCode());
  649. // warehousingMapper.addHalf(warehousingVirtual);//入库流水 产成品
  650. // //存入给gs的返回数据
  651. // ReturnWarehousing returnWarehousing = new ReturnWarehousing()
  652. // .setStorageCode(storageCode)//入库编号
  653. // .setSourceType(notice1.getSourceType())//来源类型
  654. // .setMoveType(notice1.getMoveType())//移动类型
  655. // .setOrderNumber(notice1.getNoticeId())//通知单id
  656. // .setWbs(notice1.getWbs())//wbs
  657. // .setEntryNumber(notice1.getEntryNumber())//gs分录号
  658. // .setMaterialId(notice1.getMaterialId())//物料id
  659. // .setId(notice1.getId())//分录单id
  660. // .setWarehousingNum(notice.getWarehousingNum());//入库数量
  661. // warehousingMapper.addReturnWarehousing(returnWarehousing);
  662. // map.put("msg", "200");
  663. // map.put("data", notice1.getNoticeId() + ",");
  664. }
  665. }
  666. } catch (Exception e) {
  667. e.printStackTrace();
  668. map.put("msg", "500");
  669. map.put("errMsg", "服务器请求异常,请稍后再试");
  670. }
  671. return map;
  672. }
  673. @Override
  674. public Map<String, Object> getProductWarehousingRecommend(String uniqueCode, String type, String noticeId) {
  675. Map<String, Object> map = new HashMap<>();
  676. try {
  677. //入库流水
  678. String storageCode = codeGenerateRk();
  679. //查询入库所需要的信息
  680. for (WarehousingVirtual warehousingVirtual : warehousingMapper.getVirtualNotice(uniqueCode, type, noticeId)) {
  681. //查询物料信息
  682. Notice notice = new Notice().setMaterialCode(warehousingVirtual.getWllbCode());
  683. MaterialClass material = warehousingMapper.getMaterial(notice);
  684. Notice notice1 = warehousingMapper.getNoticeId(new Notice().setNoticeId(noticeId).setMaterialId(material.getTldId()));
  685. Notice notice2 = new Notice()
  686. .setMaterialId(material.getTldId())
  687. .setStorageLocationCode(warehousingVirtual.getStorageLocationCode())
  688. .setNoticeId(noticeId)
  689. .setWarehousingNum(warehousingVirtual.getNum())
  690. .setAttribute(warehousingVirtual.getAttribute())
  691. .setProducBatch(warehousingVirtual.getProducDate())
  692. .setWllbClass(material.getWllbClass())
  693. .setWbs(notice1.getWbs())
  694. .setCompanyNumber(notice1.getCompanyNumber())
  695. .setSupplierId(warehousingVirtual.getSuppId())
  696. .setSerial(warehousingVirtual.getSerial())
  697. .setWllbCode(material.getWllbCode())
  698. .setCompanyNumber(notice1.getCompanyNumber());
  699. Double num = Double.parseDouble(notice1.getWarehousingNum()) + Double.parseDouble(warehousingVirtual.getNum());
  700. if(Double.doubleToLongBits(num) == Double.doubleToLongBits(Double.parseDouble(notice1.getNum()))){
  701. notice2.setType("1");
  702. }
  703. warehousingMapper.addInventoryNotice(notice2);//入库存
  704. warehousingMapper.updateNotice(notice2);//修改报工单数量
  705. WarehousingVirtual warehousingVirtual1 = new WarehousingVirtual()
  706. .setWllbCode(material.getWllbCode())
  707. .setUserId(warehousingVirtual.getUserId())
  708. .setStorageLocationCode(warehousingVirtual.getStorageLocationCode())
  709. .setProducDate(warehousingVirtual.getProducDate())
  710. .setNum(warehousingVirtual.getNum())
  711. .setSerial(warehousingVirtual.getSerial())
  712. .setSeq(warehousingVirtual.getSeq())
  713. .setAttribute(warehousingVirtual.getAttribute())
  714. .setStorageCode(storageCode)
  715. .setWbs(notice1.getWbs())
  716. .setProductionCode(notice1.getProductionCode())
  717. .setAccountSleeve(warehousingVirtual.getAccountSleeve());
  718. warehousingMapper.addHalf(warehousingVirtual1);//入库流水 产成品
  719. //存入给gs的返回数据
  720. ReturnWarehousing returnWarehousing = new ReturnWarehousing()
  721. .setStorageCode(storageCode)//入库编号
  722. .setSourceType(notice1.getSourceType())//来源类型
  723. .setMoveType(notice1.getMoveType())//移动类型
  724. .setOrderNumber(notice1.getNoticeId())//通知单id
  725. .setWbs(notice1.getWbs())//wbs
  726. .setEntryNumber(notice1.getEntryNumber())//gs分录号
  727. .setMaterialId(notice1.getMaterialId())//物料id
  728. .setId(notice1.getId())//分录单id
  729. .setWarehousingNum(warehousingVirtual.getNum())//入库数量
  730. .setStorageLocationCode(warehousingVirtual.getStorageLocationCode());//入库库位
  731. warehousingMapper.addReturnWarehousing(returnWarehousing);
  732. warehousingMapper.delVirtual(uniqueCode);//删除临时表数据
  733. }
  734. map.put("msg", "200");
  735. map.put("data", storageCode);
  736. } catch (Exception e) {
  737. e.printStackTrace();
  738. map.put("msg", "500");
  739. map.put("errMsg", "服务器请求异常,请稍后再试");
  740. }
  741. return map;
  742. }
  743. @Override
  744. public Map<String, Object> getHalf(Notice notice) {
  745. Map<String, Object> map = new HashMap<>();
  746. try {
  747. PageHelper.startPage(notice.getPage(), notice.getLimit());
  748. PageInfo<Notice> list = new PageInfo<>(warehousingMapper.getHalf(notice));
  749. map.put("data", list);
  750. map.put("msg", "200");
  751. } catch (Exception e) {
  752. e.printStackTrace();
  753. map.put("msg", "500");
  754. map.put("errMsg", "服务器请求异常,请稍后再试");
  755. }
  756. return map;
  757. }
  758. @Override
  759. public void getHalfExcel(Notice notice, HttpServletResponse response) {
  760. try {
  761. //导出数据汇总
  762. List<List<Object>> sheetDataList = new ArrayList<>();
  763. //表头数据
  764. List<Object> head = Arrays.asList("物料名称", "物料编号", "生产批次", "数量", "工号", "库位名称", "入库时间", "连番号", "属性", "入库单编号", "WBS编号","姓名","生产订单号","所属公司","公司编号");
  765. //查询数据
  766. List<Map<String, Object>> list = warehousingMapper.getHalfExcel(notice);
  767. sheetDataList.add(head);
  768. for (Map<String, Object> userMap : list) {
  769. List<Object> listSheet = new ArrayList<>();
  770. for (String key : userMap.keySet()) {
  771. listSheet.add(userMap.get(key));
  772. }
  773. sheetDataList.add(listSheet);
  774. }
  775. //当前时间
  776. Date time = new Date();
  777. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss");
  778. ExcelUtils.export(response, "入库流水数据导出" + sdf.format(time), sheetDataList);
  779. } catch (Exception e) {
  780. e.printStackTrace();
  781. }
  782. }
  783. /**
  784. * 删除半成品
  785. *
  786. * @return
  787. */
  788. @Override
  789. @Transactional(rollbackFor = Exception.class)
  790. public Map<String, Object> delInventoryNotice(String id, HttpServletRequest request) {
  791. Map<String, Object> map = new HashMap<>();
  792. try {
  793. String userId = request.getHeader("userId");
  794. Map<String, Object> mapVal = askGoodsMapper.getInventoryNotice(id);
  795. if (mapVal.get("type").toString().equals("1")) {
  796. map.put("msg", "500");
  797. map.put("errMsg", "报工单已报工");
  798. return map;
  799. }
  800. LogData logData = new LogData()
  801. .setUserId(userId)
  802. .setData(mapVal.toString())
  803. .setType("0")
  804. .setDocumentType("报工单");
  805. dictionaryMapper.addLogdata(logData);
  806. askGoodsMapper.delInventoryNotice(id);
  807. map.put("msg", "200");
  808. } catch (Exception e) {
  809. e.printStackTrace();
  810. map.put("msg", "500");
  811. map.put("errMsg", "服务器请求异常,请稍后再试");
  812. }
  813. return map;
  814. }
  815. @Override
  816. public Map<String, Object> otherWarehousing(AskGoods askGoods) {
  817. Map<String, Object> map = new HashMap<>();
  818. try {
  819. //判断物料是否录入
  820. MaterialClass materialClass = warehousingMapper.getMateriaIsExist(askGoods.getWllbCode());
  821. askGoods.setMaterialId(materialClass.getTldId());
  822. //查询库存
  823. List<Inventory> inventory = askGoodsMapper.getInventoryInfoOther(askGoods);
  824. map.put("list", inventory);
  825. map.put("data", materialClass);
  826. map.put("msg", "200");
  827. } catch (Exception e) {
  828. e.printStackTrace();
  829. map.put("msg", "500");
  830. map.put("errMsg", "服务器请求异常,请稍后再试");
  831. }
  832. return map;
  833. }
  834. @Override
  835. public Map<String, Object> otherWarehou(Inventory inventory, HttpServletRequest request) {
  836. Map<String, Object> map = new HashMap<>();
  837. try {
  838. //判断物料是否录入
  839. MaterialClass materialClass = warehousingMapper.getMateriaIsExist(inventory.getWllbCode());
  840. String userId = request.getHeader("userId");
  841. inventory.setWllbClass(materialClass.getWllbClass()).setMaterialId(materialClass.getTldId()).setUserId(userId);
  842. if(inventory.getId() != null){
  843. warehousingMapper.updateInventoryOther(inventory);
  844. } else {
  845. warehousingMapper.addInventoryOther(inventory);
  846. }
  847. List<WarehousingVirtual> list = new LinkedList<>();
  848. String storageCode = codeGenerateRk();//入库单
  849. Notice notice = warehousingMapper.getNotices(inventory); //查询其他入库返回GS信息
  850. warehousingMapper.updateNoticesWarehousingNum(inventory); //增加数量
  851. notice.setStorageCode(storageCode)//入库单编号
  852. .setCompanyNumber(inventory.getAccountSleeve())//所属公司
  853. .setStorageLocationCode(inventory.getStorageLocationCode())//库位编号
  854. .setNum(inventory.getAmount()) //数量
  855. .setWarehouseWhere(dictionaryMapper.getWarehouse(inventory.getStorageLocationCode()))//仓库ID
  856. .setMaterialId(materialClass.getTldId());//物料ID
  857. //流水
  858. WarehousingVirtual warehousingVirtual = new WarehousingVirtual()
  859. .setNoticeId(inventory.getNoticeId())//通知单id
  860. .setStorageCode(storageCode)
  861. .setWllbCode(materialClass.getCode())
  862. .setSuppId(inventory.getSupplierId())
  863. .setSerial(inventory.getSerial())
  864. .setProducDate(inventory.getProducDate())
  865. .setCapacity(inventory.getNum())
  866. .setType("其他入库")
  867. .setUserId(userId)
  868. .setDepartmentId(inventory.getDepartmentId())
  869. .setStorageLocationCode(inventory.getStorageLocationCode())
  870. .setWbs(inventory.getWbs())
  871. .setAccountSleeve(inventory.getAccountSleeve())
  872. .setMaterialId(materialClass.getTldId())
  873. .setNum(inventory.getAmount())
  874. .setAttribute(inventory.getAttribute());
  875. list.add(warehousingVirtual);
  876. if(materialClass.getPartType().equals("原材料")){
  877. warehousingMapper.addStorage(list);//入库流水
  878. } else if(materialClass.getPartType().equals("半成品")){
  879. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  880. warehousingVirtual.setProducDate(simpleDateFormat.format(new Date()).toString());
  881. warehousingMapper.addProduct(warehousingVirtual);//入库流水 半成品
  882. } else {
  883. warehousingMapper.addHalf(warehousingVirtual);//入库流水 产成品
  884. }
  885. warehousingMapper.addReturnWarehousingOther(notice);//其他入库返回信息
  886. map.put("data", storageCode);
  887. map.put("msg", "200");
  888. } catch (Exception e) {
  889. e.printStackTrace();
  890. map.put("msg", "500");
  891. map.put("errMsg", "服务器请求异常,请稍后再试");
  892. }
  893. return map;
  894. }
  895. @Override
  896. public Map<String, Object> getMing(String code) {
  897. Map<String, Object> map = new HashMap<>();
  898. try {
  899. //查询库存
  900. String wllbCode = askGoodsMapper.getMing(code);
  901. //判断物料是否录入
  902. MaterialClass materialClass = warehousingMapper.getMateriaIsExist(wllbCode);
  903. if(materialClass != null){
  904. if(materialClass.getWllbClass().equals("圆柱终端")){
  905. map.put("msg", "500");
  906. map.put("errMsg", "请扫描托码");
  907. return map;
  908. }
  909. }
  910. map.put("data", materialClass);
  911. map.put("msg", "200");
  912. } catch (Exception e) {
  913. e.printStackTrace();
  914. map.put("msg", "500");
  915. map.put("errMsg", "服务器请求异常,请稍后再试");
  916. }
  917. return map;
  918. }
  919. @Override
  920. public Map<String, Object> addWarehousingVirtualTwo(WarehousingVirtual warehousingVirtual) {
  921. Map<String, Object> map = new HashMap<>();
  922. try{
  923. Map<String, Object> mapVal = warehousingMapper.getSumWarehousingVirtual(warehousingVirtual);
  924. Double num = Double.parseDouble(warehousingVirtual.getNum()) + Double.parseDouble(mapVal.get("scanNum").toString());
  925. if(Double.doubleToLongBits(Double.parseDouble(mapVal.get("num").toString())) < Double.doubleToLongBits(num)){
  926. String surplus = String.valueOf(Double.parseDouble(mapVal.get("num").toString()) - Double.parseDouble(mapVal.get("scanNum").toString()));
  927. map.put("msg", "500");
  928. map.put("errMsg", "扫描数量超过单据数量,剩余要扫数量" + surplus);
  929. return map;
  930. }
  931. warehousingMapper.addWarehousingVirtual(warehousingVirtual);
  932. map.put("msg", "200");
  933. } catch (Exception e){
  934. e.printStackTrace();
  935. map.put("msg", "500");
  936. map.put("errMsg", "服务器请求异常,请稍后再试");
  937. }
  938. return map;
  939. }
  940. @Override
  941. public Map<String, Object> addWarehouseTransferVirtual(WarehousingVirtual warehousingVirtual) {
  942. Map<String, Object> map = new HashMap<>();
  943. try{
  944. Map<String, Object> mapVal = warehousingMapper.getWarehouseTransferVirtual(warehousingVirtual);
  945. Double num = Double.parseDouble(warehousingVirtual.getNum()) + Double.parseDouble(mapVal.get("scanNum").toString());
  946. if(Double.doubleToLongBits(Double.parseDouble(mapVal.get("num").toString())) < Double.doubleToLongBits(num)){
  947. String surplus = String.valueOf(Double.parseDouble(mapVal.get("num").toString()) - Double.parseDouble(mapVal.get("scanNum").toString()));
  948. map.put("msg", "500");
  949. map.put("errMsg", "扫描数量超过单据数量,剩余要扫数量" + surplus);
  950. return map;
  951. }
  952. warehousingMapper.addWarehousingVirtual(warehousingVirtual);
  953. map.put("msg", "200");
  954. } catch (Exception e){
  955. e.printStackTrace();
  956. map.put("msg", "500");
  957. map.put("errMsg", "服务器请求异常,请稍后再试");
  958. }
  959. return map;
  960. }
  961. /**
  962. * @Description: 删除其它入库
  963. * @Param: id userId 用户id
  964. * @return: Map<String, Object> map
  965. * @Author: XiaoChen
  966. * @Date: 2023/4/14
  967. */
  968. @Override
  969. public Map<String, Object> delOtherReceivingGoods(String id, HttpServletRequest request) {
  970. Map<String, Object> map = new HashMap<>();
  971. try {
  972. String userId = request.getHeader("userId");
  973. Map<String, Object> mapVal = warehousingMapper.getOtherReceivingGoods(id);
  974. if(Double.parseDouble(mapVal.get("warehousing_num").toString()) > 0){
  975. map.put("msg", "500");
  976. map.put("errMsg", "此单据已入库!");
  977. return map;
  978. }
  979. LogData logData = new LogData()
  980. .setUserId(userId)
  981. .setData(mapVal.toString())
  982. .setType("0")
  983. .setDocumentType("其它入库");
  984. dictionaryMapper.addLogdata(logData);
  985. warehousingMapper.delOtherReceivingGoods(id);
  986. map.put("msg", "200");
  987. } catch (Exception e) {
  988. e.printStackTrace();
  989. map.put("msg", "500");
  990. map.put("errMsg", "服务器请求异常,请稍后再试");
  991. }
  992. return map;
  993. }
  994. /**
  995. * @Description: 删除其它出库
  996. * @Param: id userId
  997. * @return: Map<String, Object> map
  998. * @Author: XiaoChen
  999. * @Date: 2023/4/14
  1000. */
  1001. @Override
  1002. public Map<String, Object> delOtherShipments(String id, HttpServletRequest request) {
  1003. Map<String, Object> map = new HashMap<>();
  1004. try {
  1005. String userId = request.getHeader("userId");
  1006. Map<String, Object> mapVal = warehousingMapper.getOtherShipments(id);
  1007. if(Double.parseDouble(mapVal.get("out_num").toString()) > 0){
  1008. map.put("msg", "500");
  1009. map.put("errMsg", "此单据已出库!");
  1010. return map;
  1011. }
  1012. LogData logData = new LogData()
  1013. .setUserId(userId)
  1014. .setData(mapVal.toString())
  1015. .setType("0")
  1016. .setDocumentType("其它出库");
  1017. dictionaryMapper.addLogdata(logData);
  1018. warehousingMapper.delOtherShipments(id);
  1019. map.put("msg", "200");
  1020. } catch (Exception e) {
  1021. e.printStackTrace();
  1022. map.put("msg", "500");
  1023. map.put("errMsg", "服务器请求异常,请稍后再试");
  1024. }
  1025. return map;
  1026. }
  1027. /**
  1028. * @Description: 产成品报工单处理
  1029. * @Param: Notice
  1030. * @return: Map<String, Object>
  1031. * @Author: XiaoChen
  1032. * @Date: 2023/4/28
  1033. */
  1034. @Override
  1035. @Transactional(rollbackFor = Exception.class)
  1036. public Map<String, Object> addDisposeNotice(Notice notice) {
  1037. Map<String, Object> map = new HashMap<>();
  1038. try {
  1039. //新增返回gs信息
  1040. String removalCode = codeGenerateRk();
  1041. //新增产成品入库流水
  1042. //入库流水
  1043. Notice notice1 = warehousingMapper.getNoticeId(notice);
  1044. WarehousingVirtual warehousingVirtual = new WarehousingVirtual()
  1045. .setWllbCode(notice1.getMaterialCode())
  1046. .setUserId(notice.getUserId())
  1047. .setStorageLocationCode(notice.getStorageLocationCode())
  1048. .setProducDate(notice.getProducBatch())
  1049. .setNum(notice.getWarehousingNum())
  1050. .setSerial(notice.getSerial())
  1051. .setSeq(notice.getSeq())
  1052. .setAttribute(notice.getAttribute())
  1053. .setStorageCode(removalCode)
  1054. .setWbs(notice.getWbs())
  1055. .setAccountSleeve(notice1.getCompanyNumber())
  1056. .setProductionCode(notice1.getProductionCode());
  1057. warehousingMapper.addHalf(warehousingVirtual);//入库流水 产成品
  1058. //新增gs返回信息 入库
  1059. ReturnWarehousing returnWarehousing = new ReturnWarehousing()
  1060. .setStorageCode(removalCode)//入库编号
  1061. .setSourceType(notice1.getSourceType())//来源类型
  1062. .setMoveType(notice1.getMoveType())//移动类型
  1063. .setOrderNumber(notice1.getNoticeId())//通知单id
  1064. .setWbs(notice1.getWbs())//wbs
  1065. .setEntryNumber(notice1.getEntryNumber())//gs分录号
  1066. .setMaterialId(notice1.getMaterialId())//物料id
  1067. .setId(notice1.getId())//分录单id
  1068. .setWarehousingNum(warehousingVirtual.getNum())//入库数量
  1069. .setUserName(notice.getUserName())//用户名称
  1070. .setStorageLocationCode(warehousingVirtual.getStorageLocationCode());//入库库位
  1071. warehousingMapper.addReturnWarehousing(returnWarehousing);
  1072. // 出库
  1073. String removalCodes = codeGenerateCk();
  1074. for (AskGoods askGoodsGs : askGoodsMapper.getAskGoodsVitrual(notice.getUniqueCode(), notice.getType())) {
  1075. askGoodsGs.setStorageCode(removalCodes);
  1076. askGoodsGs.setCompanyNumber(askGoodsGs.getAccountSleeve());
  1077. //判断物料是否录入
  1078. MaterialClass materialClass = warehousingMapper.getMateriaIsExist(askGoodsGs.getWllbCode());
  1079. //查询销售单部分信息
  1080. Delivery delivery = new Delivery().setDeliveryId(notice.getDeliveryId()).setMaterialId(materialClass.getTldId());
  1081. List<Delivery> list = deliveryMapper.getDelivery(delivery);
  1082. if (materialClass.getPartType().equals("产成品")) {
  1083. //产成品销售流水
  1084. Delivery delivery1 = new Delivery()
  1085. .setMaterialCode(askGoodsGs.getWllbCode()) //物料code
  1086. .setOutNum(askGoodsGs.getNum()) //出库数量
  1087. .setUserId(askGoodsGs.getUserId()) //用户id
  1088. .setDeliveryId(notice.getDeliveryId()) //销售单id
  1089. .setCompanyNumber(list.get(0).getCompanyNumber()) //公司编号
  1090. .setCustomerCode(list.get(0).getCustomerCode())//客户编号
  1091. .setStorageCode(removalCodes) //出库流水
  1092. .setSerial(askGoodsGs.getSerial())//连翻号
  1093. .setWbs(list.get(0).getWbs());// wbs
  1094. deliveryMapper.addRemovalHalf(delivery1); //流水录入
  1095. }
  1096. ReturRemoval returRemoval = new ReturRemoval()
  1097. .setMaterialId(materialClass.getTldId())
  1098. .setDocumentId(notice.getDeliveryId())
  1099. .setWbs(list.get(0).getWbs())
  1100. .setNum(askGoodsGs.getNum())
  1101. .setEntryNumber(list.get(0).getEntryNumber())
  1102. .setDocumentPointsId(list.get(0).getId())
  1103. .setStorageLocationCode(askGoodsGs.getStorageLocationCode());
  1104. askGoodsMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息
  1105. }
  1106. //新增销售单出库父表信息
  1107. Delivery delivery = deliveryMapper.getDeliveryF(notice.getDeliveryId());
  1108. ReturRemoval returRemoval1 = new ReturRemoval()
  1109. .setDocumentId(delivery.getDeliveryId())
  1110. .setRemovalCode(removalCodes)
  1111. .setSourceType(delivery.getSourceType())
  1112. .setMoveType(delivery.getMoveType())
  1113. .setDeliveryType(delivery.getDeliveryType());
  1114. askGoodsMapper.addReturnGsRemovalF(returRemoval1);//新增返回gs数据父表信息
  1115. map.put("dataAgo", removalCode);//入库
  1116. map.put("dataBack", removalCodes);//出库
  1117. map.put("msg", "200");
  1118. } catch (Exception e) {
  1119. e.printStackTrace();
  1120. map.put("msg", "500");
  1121. map.put("errMsg", "服务器请求异常,请稍后再试");
  1122. }
  1123. return map;
  1124. }
  1125. /**
  1126. * 入库单生成
  1127. *
  1128. * @return
  1129. */
  1130. public String codeGenerateRk() {
  1131. StringBuilder stringBuilder = new StringBuilder("CLRK");
  1132. Date date = new Date();
  1133. SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
  1134. stringBuilder.append(sdf.format(date));
  1135. int count = warehousingMapper.getWarehousingCount();
  1136. for (int i = 0; i < 4 - (count + "").length(); i++) {
  1137. stringBuilder.append("0");
  1138. }
  1139. return (stringBuilder.append(count + 1)).toString();
  1140. }
  1141. /**
  1142. * 出库单id
  1143. *
  1144. * @return
  1145. */
  1146. public String codeGenerateCk() {
  1147. StringBuilder stringBuilder = new StringBuilder("CPCK");
  1148. Date date = new Date();
  1149. SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
  1150. stringBuilder.append(sdf.format(date));
  1151. int count = askGoodsMapper.getReturnRemovalCount();
  1152. for (int i = 0; i < 4 - (count + "").length(); i++) {
  1153. stringBuilder.append("0");
  1154. }
  1155. return (stringBuilder.append(count + 1)).toString();
  1156. }
  1157. }