WarehousingServiceImpl.java 62 KB

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