AskGoodsServiceImpl.java 109 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134
  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.tld.excel.ExcelUtils;
  7. import com.tld.mapper.*;
  8. import com.tld.model.*;
  9. import com.tld.model.Error;
  10. import com.tld.service.AskGoodsService;
  11. import com.tld.service.QueryListService;
  12. import com.tld.service.WarehousingService;
  13. import com.tld.util.DateUtil;
  14. import com.tld.util.HttpClientUtil;
  15. import org.redisson.api.RLock;
  16. import org.redisson.api.RedissonClient;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Service;
  19. import org.springframework.transaction.annotation.Transactional;
  20. import javax.servlet.http.HttpServletRequest;
  21. import javax.servlet.http.HttpServletResponse;
  22. import java.text.SimpleDateFormat;
  23. import java.util.*;
  24. @Service
  25. public class AskGoodsServiceImpl implements AskGoodsService {
  26. @Autowired
  27. private AskGoodsMapper askGoodsMapper;
  28. //redis锁
  29. @Autowired
  30. private RedissonClient redissonClient;
  31. //入库
  32. @Autowired
  33. private WarehousingMapper warehousingMapper;
  34. //入库
  35. @Autowired
  36. private WarehousingService warehousingService;
  37. @Autowired
  38. private ErrorMapper errorMapper;
  39. @Autowired
  40. private DeliveryMapper deliveryMapper;
  41. @Autowired
  42. private DictionaryMapper dictionaryMapper;
  43. @Autowired
  44. private QueryListMapper queryListMapper;
  45. @Autowired
  46. private QueryListService queryListService;
  47. /**
  48. * @Description: 要货申请单(生产领用申请)
  49. * @Param: mapList
  50. * @return: Map<String, Object> 成功失败状态
  51. * @Author: XiaoChen
  52. * @Date: 2023/4/10
  53. */
  54. @Override
  55. @Transactional(rollbackFor = Exception.class)
  56. public Map<String, Object> addAskGoods(List<Map<String,Object>> mapList) {
  57. Map<String, Object> map = new HashMap<>();
  58. try{
  59. List<AskGoods> askGoodsList = new LinkedList<AskGoods>();
  60. for(Map<String,Object> jsonMap:mapList) {
  61. List<Map<String, Object>> list = (List) jsonMap.get("datalist");
  62. for (Map<String, Object> element : list) {
  63. AskGoods ag = new AskGoods();
  64. //父表
  65. ag.setAskGoodsId(jsonMap.get("requestOrderId").toString());
  66. ag.setAskGoodsCode(jsonMap.get("requestOrderNo").toString());
  67. ag.setCompanyNumber(jsonMap.get("companyNo").toString());
  68. ag.setSqrq(jsonMap.get("requestDate").toString());//申请日期
  69. ag.setDepartmentId(jsonMap.get("useDepartment").toString());
  70. ag.setSourceType(jsonMap.get("sourceType").toString());
  71. ag.setMoveType(jsonMap.get("moveType").toString());
  72. ag.setRequestTypeNumber(jsonMap.get("requestTypeNumber").toString());
  73. ag.setRequestTypeName(jsonMap.get("requestTypeName").toString());
  74. ag.setIfCommodity(jsonMap.get("ifCommodity").toString());
  75. //子表
  76. ag.setType("0");
  77. ag.setEntryNumber(element.get("entryNumber").toString());
  78. ag.setProductionCode(element.get("prodOrderNo").toString());
  79. ag.setMaterialId(element.get("materialId").toString());
  80. ag.setWbs(element.get("WBS").toString());
  81. ag.setMeasurementId(element.get("measUnitId").toString());
  82. ag.setNum(element.get("orderCount").toString());
  83. askGoodsList.add(ag);
  84. }
  85. }
  86. for(AskGoods askGoods : askGoodsList) {
  87. // int count = askGoodsMapper.getAskGoods(askGoods);
  88. // if (count != 0) {
  89. // askGoodsMapper.updateAskGoodsNum(askGoods);
  90. // } else {
  91. if (askGoodsMapper.getAskGoodsf(askGoods) == 0) {
  92. askGoodsMapper.addAskGoodsf(askGoods);
  93. }
  94. askGoodsMapper.addAskGoods(askGoods);
  95. // }
  96. askGoodsMapper.addAskGoodsLog(askGoods);
  97. }
  98. //新增日志
  99. Access access = new Access().setType("生产领料信息").setData(JSON.toJSONString(mapList)).setAccessType("0");
  100. dictionaryMapper.addAccess(access);
  101. map.put("status", "0000");
  102. map.put("msg","成功");
  103. }catch (Exception e){
  104. e.printStackTrace();
  105. map.put("status", "0002");
  106. map.put("msg", "服务器请求异常,请稍后再试");
  107. }
  108. return map;
  109. }
  110. @Override
  111. public Map<String, Object> getAskGoodsfList(AskGoods askGoods) {
  112. Map<String, Object> map = new HashMap<>();
  113. try{
  114. List<AskGoods> list = askGoodsMapper.getAskGoodsfList(askGoods);
  115. map.put("data", list);
  116. map.put("msg", "200");
  117. }catch (Exception e){
  118. e.printStackTrace();
  119. map.put("msg", "500");
  120. map.put("errMsg", "失败");
  121. }
  122. return map;
  123. }
  124. @Override
  125. public Map<String, Object> getAskGoodsMaterial(AskGoods askGoods) {
  126. Map<String, Object> map = new HashMap<>();
  127. try{
  128. List<AskGoods> list = askGoodsMapper.getAskGoodsMaterial(askGoods);
  129. List<String> scanNum = new LinkedList<>();
  130. List<String> mapVal = new LinkedList<>();
  131. for(AskGoods askGoods1 : list){
  132. askGoods1.setUniqueCode(askGoods.getUniqueCode());
  133. askGoods1.setWllbCode(askGoods1.getMaterialCode());
  134. scanNum.add(askGoodsMapper.getScanNum(askGoods1));//扫描总数
  135. Inventory inventory = new Inventory()
  136. .setMaterialId(askGoods1.getMaterialId())
  137. .setWbs(askGoods1.getWbs())
  138. .setCompanyCode(askGoods1.getCompanyNumber())
  139. .setGroupBy(askGoods.getGroupBy());
  140. List<Map<String, Object>> inventorVal = queryListMapper.storageLocation(inventory);
  141. if(inventorVal.size() != 0) {
  142. mapVal.add(inventorVal.get(0).get("sum").toString());
  143. } else {
  144. mapVal.add("0");
  145. }
  146. }
  147. map.put("scanNum", scanNum);
  148. map.put("sum", mapVal);
  149. map.put("data", list);
  150. map.put("msg", "200");
  151. }catch (Exception e){
  152. e.printStackTrace();
  153. map.put("msg", "500");
  154. map.put("errMsg", "失败");
  155. }
  156. return map;
  157. }
  158. @Override
  159. public Map<String, Object> getMaterialCk(AskGoods askGoods) {
  160. Map<String, Object> map = new HashMap<>();
  161. try{
  162. List<Inventory> list = new LinkedList<>();
  163. for(Inventory inventory : askGoodsMapper.getMaterialCk(askGoods)){
  164. AskGoods askGoods1 = askGoodsMapper.getAsk(inventory);
  165. if(askGoods1 != null){
  166. if(Double.doubleToLongBits(Double.parseDouble(askGoods1.getNum())) != Double.doubleToLongBits(Double.parseDouble(inventory.getAmount())) ){
  167. list.add(inventory);
  168. }
  169. } else {
  170. list.add(inventory);
  171. }
  172. }
  173. map.put("data", list);
  174. map.put("msg", "200");
  175. }catch (Exception e){
  176. e.printStackTrace();
  177. map.put("msg", "500");
  178. map.put("errMsg", "失败");
  179. }
  180. return map;
  181. }
  182. @Override
  183. @Transactional(rollbackFor = Exception.class)
  184. public Map<String, Object> addAskGoodsVitrual(AskGoods askGoods) {
  185. Map<String, Object> map = new HashMap<>();
  186. //redis并发锁
  187. RLock lock = redissonClient.getLock(askGoods.getUniqueCode());
  188. lock.lock();
  189. try{
  190. Map<String, Object> mapVal = askGoodsMapper.getScanIsNot(askGoods);
  191. if(Double.doubleToLongBits(Double.parseDouble(mapVal.get("inventoryNum").toString()) - Double.parseDouble(mapVal.get("virtualNum").toString())) == 0){
  192. map.put("msg", "500");
  193. map.put("errMsg", "已全部出库");
  194. return map;
  195. }
  196. askGoods.setAccountSleeve(askGoods.getCompanyNumber());
  197. Inventory inventory = askGoodsMapper.getInventory(askGoods); //库存数量
  198. AskGoods askGoods1 = askGoodsMapper.getAsknInfo(askGoods); //要货单数量
  199. int alreadyNum = askGoodsMapper.getAskInfoNumVitrual(askGoods);//已扫描总数
  200. int inventoryAlready = askGoodsMapper.getInventoryAlready(askGoods);//库存已扫描数量
  201. Double inventorySurplus = DateUtil.formatDouble1((Double.parseDouble(inventory.getAmount()) - Double.parseDouble(inventory.getAmountLock())) - inventoryAlready); //库存剩余数量
  202. Double surplusNum = DateUtil.formatDouble1(Double.parseDouble(askGoods1.getNum()) - Double.parseDouble(askGoods1.getOutNum()) - alreadyNum); //剩余要扫描数量
  203. if(Double.doubleToLongBits(surplusNum) >= Double.doubleToLongBits(inventorySurplus)){
  204. askGoods.setNum(String.valueOf(inventorySurplus));
  205. } else {
  206. askGoods.setNum(String.valueOf(surplusNum));
  207. }
  208. askGoods.setStorageLocationCode(inventory.getStorageLocationCode());//库存编号
  209. askGoodsMapper.addAskGoodsVitrual(askGoods);
  210. map.put("msg", "200");
  211. }catch (Exception e){
  212. e.printStackTrace();
  213. map.put("msg", "500");
  214. map.put("errMsg", "失败");
  215. } finally {
  216. //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
  217. if (lock.isLocked() && lock.isHeldByCurrentThread()) {
  218. //释放锁
  219. lock.unlock();
  220. }
  221. }
  222. return map;
  223. }
  224. @Override
  225. public Map<String, Object> addAskGoodsVitrualMinus(AskGoods askGoods) {
  226. Map<String, Object> map = new HashMap<>();
  227. try{
  228. askGoodsMapper.addAskGoodsVitrual(askGoods);
  229. map.put("msg", "200");
  230. }catch (Exception e){
  231. e.printStackTrace();
  232. map.put("msg", "500");
  233. map.put("errMsg", "失败");
  234. }
  235. return map;
  236. }
  237. @Override
  238. @Transactional(rollbackFor = Exception.class)
  239. public Map<String, Object> OutOfLibrary(String uniqueCode, String type, String askGoodsId, String name) {
  240. Map<String, Object> map = new HashMap<>();
  241. //redis并发锁
  242. RLock lock = redissonClient.getLock(uniqueCode);
  243. lock.lock();
  244. try{
  245. //出库流水
  246. String removalCode = codeGenerateCk();
  247. List<AskGoods> list = askGoodsMapper.getVirtualUniqueCode(uniqueCode, type, askGoodsId);
  248. for(AskGoods askGoods : list){
  249. askGoods.setStorageCode(removalCode);
  250. askGoods.setCompanyNumber(askGoods.getAccountSleeve());
  251. String materialId = askGoodsMapper.getMaterialId(askGoods.getWllbCode());//查询物料id
  252. Inventory inventory = askGoodsMapper.getInventory(askGoods);//查询库存数量
  253. if(inventory == null) {
  254. // throw new Exception("库存不存在");
  255. // System.out.println("库存不存在");
  256. //查询物料信息
  257. MaterialClass material = warehousingMapper.getMaterial(new Notice().setMaterialCode(askGoods.getWllbCode()));
  258. inventory = new Inventory()
  259. .setStorageLocationCode(askGoods.getStorageLocationCode())
  260. .setAmount("0")
  261. .setWllbClass(material.getWllbClass())
  262. .setMaterialId(material.getTldId())
  263. .setWllbCode(material.getWllbCode())
  264. .setAccountSleeve(askGoods.getAccountSleeve())
  265. .setWbs(askGoods.getWbs())
  266. .setProducDate(askGoods.getProducDate())
  267. .setProducBatch("19700101")
  268. .setSupplierId(askGoods.getSupplierId())
  269. .setSerial(askGoods.getSerial());
  270. if(material.getPartType().equals("半成品") || material.getPartType().equals("产成品")) {
  271. inventory.setSupplierId("EC13437");
  272. if(askGoods.getAccountSleeve().equals("8130")){
  273. inventory.setSerial("000000");
  274. } else if(askGoods.getAccountSleeve().equals("8400")){
  275. inventory.setSerial("100000");
  276. }
  277. }
  278. askGoodsMapper.addInventory(inventory);
  279. inventory.setId(inventory.getId());
  280. }
  281. //如果出库库存等于虚拟表库存则删除此库存
  282. if(Double.doubleToLongBits(Double.parseDouble(askGoods.getNum())) == Double.doubleToLongBits(Double.parseDouble(inventory.getAmount()))){
  283. askGoodsMapper.deleteInventory(inventory);
  284. } else {
  285. inventory.setAmount(askGoods.getNum());
  286. askGoodsMapper.updateInventory(inventory);
  287. }
  288. AskGoods askGoods1 = askGoodsMapper.getAskDetailed(askGoodsId, materialId, askGoods.getEntryNumber());//查询要料申请单内容
  289. ReturRemoval returRemoval = new ReturRemoval()
  290. .setMaterialId(materialId)
  291. .setDocumentId(askGoodsId)
  292. .setWbs(askGoods1.getWbs())
  293. .setNum(askGoods.getNum())
  294. .setEntryNumber(askGoods1.getEntryNumber())
  295. .setDocumentPointsId(askGoods1.getId())
  296. .setStorageLocationCode(askGoods.getStorageLocationCode());
  297. askGoodsMapper.addRemoval(askGoods);//插入出库流水
  298. askGoodsMapper.deleteVirtual(askGoods.getId());//删除已出虚拟表库存
  299. askGoodsMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息
  300. askGoodsMapper.updateOutNum(askGoods.getNum(), askGoodsId, materialId, askGoods.getEntryNumber());//修改出库数量
  301. }
  302. //查询要货单父级信息
  303. AskGoods askGoods3 = askGoodsMapper.getAskDetailedF(askGoodsId);
  304. // if(askGoods3 != null){
  305. ReturRemoval returRemoval1 = new ReturRemoval()
  306. .setDocumentId(askGoods3.getAskGoodsId())
  307. .setRemovalCode(removalCode)
  308. .setSourceType(askGoods3.getSourceType())
  309. .setMoveType(askGoods3.getMoveType())
  310. .setName(name)
  311. .setRequestTypeName(askGoods3.getRequestTypeName());
  312. askGoodsMapper.addReturnGsRemovalF(returRemoval1);//新增返回gs数据父表信息
  313. map.put("data", askGoods3.getAskGoodsId());
  314. // } else {
  315. // map.put("data", "0");
  316. // }
  317. map.put("msg", "200");
  318. }catch (Exception e){
  319. e.printStackTrace();
  320. map.put("msg", "500");
  321. map.put("errMsg", "失败");
  322. } finally {
  323. //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
  324. if (lock.isLocked() && lock.isHeldByCurrentThread()) {
  325. //释放锁
  326. lock.unlock();
  327. }
  328. }
  329. return map;
  330. }
  331. /**
  332. * 出库回传
  333. * @param removalCode 单据id
  334. */
  335. @Override
  336. @Transactional(rollbackFor = Exception.class)
  337. public void plugOutRemoval(String removalCode, String realName) {
  338. try{
  339. for(String warehouseWhere : askGoodsMapper.getWarehouseWhere(removalCode)){
  340. List<Map<String, Object>> mapList = askGoodsMapper.plugOutRemoval(removalCode);
  341. if(mapList.size() >0 ) {
  342. JSONObject strJson = new JSONObject();
  343. int isRed = 0;
  344. if(mapList.get(0).get("requestTypeName").toString().equals("跨月退料")){
  345. isRed = 2;
  346. } else {
  347. isRed = 0;
  348. }
  349. //父表
  350. strJson.put("GIReqBillID", mapList.get(0).get("askGoodsId").toString());//要货单id
  351. strJson.put("WMSID", mapList.get(0).get("id").toString());//出库单id
  352. strJson.put("WMSCode", mapList.get(0).get("removalCode").toString());//出库单编号
  353. strJson.put("WareHouse", warehouseWhere);//仓库ID
  354. strJson.put("SourceBillDate",DateUtil.dateConversion(mapList.get(0).get("scrq").toString()));//业务日期
  355. strJson.put("SourceType", mapList.get(0).get("sourceType").toString());//来源类型 8
  356. strJson.put("MoveType", mapList.get(0).get("moveType").toString());//移动类型
  357. strJson.put("IsRed", isRed);//是否红单1 2
  358. if (realName == null || realName == ""){
  359. realName = "李兆峰" ;
  360. }
  361. strJson.put("Creator", realName);//制单人姓名1
  362. //子表
  363. for (Map<String, Object> map : askGoodsMapper.getRemovalz(mapList.get(0).get("askGoodsId").toString(), warehouseWhere)) {
  364. List<JSONObject> list = new LinkedList<>();//5
  365. JSONObject BillItems = new JSONObject();//6
  366. List<JSONObject> retunList = new LinkedList<>();//3
  367. JSONObject ReqOutStocks = new JSONObject();//2
  368. JSONObject returnData = new JSONObject();//1
  369. BillItems.put("WMSItemID", map.get("id"));//分录ID
  370. BillItems.put("GIReqBillID", map.get("askGoodsId"));//要货申请单ID
  371. BillItems.put("GIReqBillItemID", map.get("entryNumber"));//要货申请明细ID
  372. BillItems.put("Material", map.get("materialId"));//物料id
  373. BillItems.put("Quantity", map.get("num"));//数量
  374. BillItems.put("FlexField1", map.get("wbsId"));//wbs
  375. BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号
  376. BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称
  377. list.add(BillItems);//*1 子表信息放在集合中
  378. strJson.put("BillItems", list);//*2 将子表集合放在父表中
  379. retunList.add(strJson);//*3 将父子表信息放在集合中
  380. ReqOutStocks.put("ReqOutStocks",retunList);//*4 将放集合的数据封装到ReqOutStocks
  381. returnData.put("strJson", JSON.toJSONString(ReqOutStocks));//*5 将封装好的ReqOutStocks放进strJson
  382. //添加记录到tld_access
  383. String names = "出库回传" ;
  384. String accessType = "1" ;
  385. String returnGsRemoval = returnData.toString() ;
  386. askGoodsMapper.addAccess(names,returnGsRemoval,accessType);
  387. System.out.println("封装好的:"+returnData);
  388. //回传地址
  389. String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateProductiveOutStock";
  390. // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateProductiveOutStock";
  391. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  392. Map<String, Object> result = httpClientUtil1.doPost(url, returnData);
  393. System.out.println("返回信息" + result);
  394. //如果失败存入错误信息
  395. Error error = new Error();
  396. if(Integer.parseInt(result.get("msg").toString()) != 200){
  397. //如果失败存入报错信息跟数据
  398. error.setErrorInfo(result.get("data").toString());
  399. error.setUrl(url);
  400. error.setDataVal(returnData.toJSONString()).setType("出库回传");
  401. //修改流水传输状态
  402. for(Map<String, Object> maps : askGoodsMapper.plugOutRemoval(removalCode)){
  403. askGoodsMapper.updateRemoval(maps.get("removalCode").toString(), null);
  404. }
  405. errorMapper.addError(error);
  406. }else {
  407. JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString());
  408. JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString());
  409. if ( jsonObject1.get("State").toString().equals("0") ){
  410. //如果失败存入报错信息跟数据
  411. error.setErrorInfo(jsonObject1.get("Msg").toString());
  412. error.setUrl(url);
  413. error.setDataVal(returnData.toJSONString()).setType("出库回传");
  414. errorMapper.addError(error);
  415. //修改流水传输状态
  416. for(Map<String, Object> maps : askGoodsMapper.plugOutRemoval(removalCode)){
  417. askGoodsMapper.updateRemoval(maps.get("removalCode").toString(), null);
  418. }
  419. }else {
  420. List<JSONObject> data1 = (List<JSONObject>) JSONObject.parse(jsonObject1.get("data").toString());
  421. for (JSONObject map1 : data1) {
  422. if (map1.get("State").toString().equals("0")){
  423. for(JSONObject jsonObject2 : retunList){
  424. if(jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map1.get("WareHouse"))){
  425. //如果失败存入报错信息跟数据
  426. List<JSONObject> retunList2 = new LinkedList<>();
  427. retunList2.add(jsonObject2);
  428. JSONObject ReqOutStocks1 = new JSONObject();
  429. ReqOutStocks1.put("ReqOutStocks", retunList2);
  430. JSONObject ReqOutStocks2 = new JSONObject();
  431. ReqOutStocks2.put("strJson",ReqOutStocks1.toJSONString());
  432. //如果失败存入报错信息跟数据
  433. error.setErrorInfo(map1.get("FailReason").toString());
  434. error.setUrl(url);
  435. error.setDataVal(ReqOutStocks2.toJSONString()).setType("出库回传");
  436. errorMapper.addError(error);
  437. List<JSONObject> list1 = (List<JSONObject>) jsonObject2.get("BillItems");
  438. for(JSONObject jsonObject3 : list1){
  439. MaterialClass material = warehousingMapper.getMaterial(new Notice().setMaterialId(jsonObject3.get("Material").toString()));
  440. askGoodsMapper.updateRemoval(jsonObject2.get("WMSCode").toString(), material.getWllbCode());
  441. }
  442. }
  443. }
  444. }
  445. }
  446. }
  447. }
  448. }
  449. }
  450. }
  451. //删除父子表信息
  452. askGoodsMapper.delPlugOutRemoval(removalCode);
  453. askGoodsMapper.delRemovalz(removalCode);
  454. }catch (Exception e){
  455. e.printStackTrace();
  456. }
  457. }
  458. @Override
  459. public Map<String, Object> getRemoval(AskGoods askGoods) {
  460. Map<String, Object> map = new HashMap<>();
  461. try{
  462. //查询数据
  463. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  464. PageInfo<AskGoods> list = new PageInfo<>(askGoodsMapper.getRemoval(askGoods));
  465. map.put("data", list);
  466. map.put("msg", "200");
  467. }catch (Exception e){
  468. e.printStackTrace();
  469. map.put("msg", "500");
  470. map.put("errMsg", "失败");
  471. }
  472. return map;
  473. }
  474. @Override
  475. public void export(AskGoods askGoods, HttpServletResponse response) {
  476. try{
  477. //导出数据汇总
  478. List<List<Object>> sheetDataList = new ArrayList<>();
  479. //表头数据
  480. List<Object> head = Arrays.asList("物料名称", "供应商名称", "连番号", "类型", "出库用户", "领用部门", "库位名称", "出库日期", "出库数量","要货单编号","真实姓名","公司名称","WBS","WBS名称");
  481. //查询数据
  482. List<Map<String, Object>> list = askGoodsMapper.export(askGoods);
  483. sheetDataList.add(head);
  484. for(Map<String, Object> userMap : list){
  485. List<Object> listSheet = new ArrayList<>();
  486. for(String key: userMap.keySet()){
  487. listSheet.add(userMap.get(key));
  488. }
  489. sheetDataList.add(listSheet);
  490. }
  491. //当前时间
  492. Date time = new Date();
  493. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss");
  494. ExcelUtils.export(response, "出库流水数据导出" + sdf.format(time), sheetDataList);
  495. }catch (Exception e){
  496. e.printStackTrace();
  497. }
  498. }
  499. @Override
  500. public Map<String, Object> getAskGoodsVitrual(String uniqueCode, String type) {
  501. Map<String, Object> map = new HashMap<>();
  502. try{
  503. List<AskGoods> list = askGoodsMapper.getAskGoodsVitrual(uniqueCode, type);
  504. map.put("data", list);
  505. map.put("msg", "200");
  506. }catch (Exception e){
  507. e.printStackTrace();
  508. map.put("msg", "500");
  509. map.put("errMsg", "失败");
  510. }
  511. return map;
  512. }
  513. @Override
  514. @Transactional(rollbackFor = Exception.class)
  515. public Map<String, Object> delAskGoodsVitrual(String id, String type) {
  516. Map<String, Object> map = new HashMap<>();
  517. try{
  518. askGoodsMapper.delAskGoodsVitrual(id, type);
  519. map.put("msg", "200");
  520. }catch (Exception e){
  521. e.printStackTrace();
  522. map.put("msg", "500");
  523. map.put("errMsg", "失败");
  524. }
  525. return map;
  526. }
  527. @Override
  528. public Map<String, Object> getGoodsHalf(AskGoods askGoods, HttpServletRequest request) {
  529. Map<String, Object> map = new HashMap<>();
  530. try{
  531. //查询数据
  532. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  533. askGoods.setIsWeb(request.getHeader("isWeb"));
  534. PageInfo<AskGoods> list = new PageInfo<>(askGoodsMapper.getGoodsHalf(askGoods));
  535. for (AskGoods goods : list.getList()) {
  536. String amount = askGoodsMapper.getAmount(goods);
  537. goods.setAmount(amount);
  538. }
  539. map.put("data", list);
  540. map.put("msg", "200");
  541. }catch (Exception e){
  542. e.printStackTrace();
  543. map.put("msg", "500");
  544. map.put("errMsg", "失败");
  545. }
  546. return map;
  547. }
  548. @Override
  549. public Map<String, Object> getRemovalHalfProduct(AskGoods askGoods) {
  550. Map<String, Object> map = new HashMap<>();
  551. try{
  552. //查询数据
  553. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  554. PageInfo<AskGoods> list = new PageInfo<>(askGoodsMapper.getRemovalHalfProduct(askGoods));
  555. map.put("data", list);
  556. map.put("msg", "200");
  557. }catch (Exception e){
  558. e.printStackTrace();
  559. map.put("msg", "500");
  560. map.put("errMsg", "失败");
  561. }
  562. return map;
  563. }
  564. @Override
  565. public void getRemovalHalfProductExcel(AskGoods askGoods, HttpServletResponse response) {
  566. try{
  567. //导出数据汇总
  568. List<List<Object>> sheetDataList = new ArrayList<>();
  569. //表头数据
  570. List<Object> head = Arrays.asList("要货单", "出库编号","物料编号","物料名称", "出库数量", "出库人", "领用部门", "WBS编号","WBS名称", "出库时间","真实姓名","所属公司");
  571. //查询数据
  572. List<Map<String, Object>> list = askGoodsMapper.getRemovalHalfProductExcel(askGoods);
  573. sheetDataList.add(head);
  574. for(Map<String, Object> userMap : list){
  575. List<Object> listSheet = new ArrayList<>();
  576. for(String key: userMap.keySet()){
  577. listSheet.add(userMap.get(key));
  578. }
  579. sheetDataList.add(listSheet);
  580. }
  581. //当前时间
  582. Date time = new Date();
  583. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss");
  584. ExcelUtils.export(response, "半成品出库流水数据导出" + sdf.format(time), sheetDataList);
  585. }catch (Exception e){
  586. e.printStackTrace();
  587. }
  588. }
  589. @Override
  590. public Map<String, Object> getRemovalHalf(AskGoods askGoods) {
  591. Map<String, Object> map = new HashMap<>();
  592. try{
  593. //查询数据
  594. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  595. PageInfo<AskGoods> list = new PageInfo<>(askGoodsMapper.getRemovalHalf(askGoods));
  596. map.put("data", list);
  597. map.put("msg", "200");
  598. }catch (Exception e){
  599. e.printStackTrace();
  600. map.put("msg", "500");
  601. map.put("errMsg", "失败");
  602. }
  603. return map;
  604. }
  605. @Override
  606. public void getRemovalHalfExcel(AskGoods askGoods, HttpServletResponse response) {
  607. try{
  608. //导出数据汇总
  609. List<List<Object>> sheetDataList = new ArrayList<>();
  610. //表头数据
  611. List<Object> head = Arrays.asList("交货单编号","物料名称", "出库数量", "用户名称", "出库时间", "公司名称", "客户名称", "出库单编号", "WBS","WBS名称","真实姓名");
  612. //查询数据
  613. List<Map<String, Object>> list = askGoodsMapper.getRemovalHalfExcel(askGoods);
  614. sheetDataList.add(head);
  615. for(Map<String, Object> userMap : list){
  616. List<Object> listSheet = new ArrayList<>();
  617. for(String key: userMap.keySet()){
  618. listSheet.add(userMap.get(key));
  619. }
  620. sheetDataList.add(listSheet);
  621. }
  622. //当前时间
  623. Date time = new Date();
  624. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss");
  625. ExcelUtils.export(response, "产成品出库流水数据导出" + sdf.format(time), sheetDataList);
  626. }catch (Exception e){
  627. e.printStackTrace();
  628. }
  629. }
  630. /**
  631. * @Description: 其他出库
  632. * @Param: AskGoods askGoods
  633. * @return: Map<String, Object> map
  634. * @Author: XiaoChen
  635. * @Date: 2023/4/15
  636. */
  637. @Override
  638. public Map<String, Object> otherAskGoods(AskGoods askGoods) {
  639. Map<String, Object> map = new HashMap<>();
  640. //redis并发锁
  641. RLock lock = redissonClient.getLock(askGoods.getWllbCode() + askGoods.getStorageLocationCode());
  642. lock.lock();
  643. try{
  644. //查询物料信息
  645. MaterialClass material = warehousingMapper.getMaterial(new Notice().setMaterialCode(askGoods.getWllbCode()));
  646. if(material.getPartType().equals("原材料")){
  647. if(askGoods.getSerial() == null) {
  648. map.put("msg", "500");
  649. map.put("errMsg", "此物料是" + material.getPartType() + "连番号参数不能为空!");
  650. return map;
  651. }
  652. } else if(material.getPartType().equals("产成品")) {
  653. if(askGoods.getAttribute() == null) {
  654. map.put("msg", "500");
  655. map.put("errMsg", "此物料是" + material.getPartType() + "属性参数不能为空!");
  656. return map;
  657. }
  658. } else if(material.getPartType().equals("半成品")) {
  659. askGoods.setProducDate(null);
  660. if(askGoods.getStorageLocationCode() == null) {
  661. map.put("msg", "500");
  662. map.put("errMsg", "此物料是" + material.getPartType() + "库位参数不能为空!");
  663. return map;
  664. }
  665. }
  666. askGoods.setMaterialId(material.getTldId());
  667. //查询库存
  668. List<Inventory> inventory = askGoodsMapper.getInventoryInfo(askGoods);
  669. if(inventory.size() == 0){
  670. map.put("msg", "500");
  671. map.put("errMsg", "未查询到该库位的库存");
  672. return map;
  673. }
  674. if(Double.parseDouble(inventory.get(0).getAmount()) < Double.parseDouble(askGoods.getNum())){
  675. map.put("msg", "500");
  676. map.put("errMsg", "库存数量不足");
  677. return map;
  678. }
  679. //如果出库库存等于虚拟表库存则删除此库存
  680. if(Double.doubleToLongBits(Double.parseDouble(askGoods.getNum())) == Double.doubleToLongBits(Double.parseDouble(inventory.get(0).getAmount()))){
  681. askGoodsMapper.deleteInventory(inventory.get(0));
  682. } else {
  683. inventory.get(0).setAmount(askGoods.getNum());
  684. askGoodsMapper.updateInventory(inventory.get(0));
  685. }
  686. String removalCode = codeGenerateCk();
  687. if(material.getPartType().equals("半成品")){
  688. //新增半成品出库流水
  689. AskGoods askGoods1 = new AskGoods()
  690. .setWllbCode(material.getWllbCode())
  691. .setNum(askGoods.getNum())
  692. .setUserId(askGoods.getUserId())
  693. .setAskGoodsId("")
  694. .setDepartment(askGoods.getDepartment())
  695. .setWbs(askGoods.getWbs())
  696. .setStorageCode(removalCode)
  697. .setStorageLocationCode(askGoods.getStorageLocationCode())
  698. .setCompanyNumber(askGoods.getAccountSleeve());//新增出库流水
  699. warehousingMapper.addRemovalHalfProduct(askGoods1);
  700. } else if(material.getPartType().equals("产成品")){
  701. //产成品销售流水
  702. Delivery delivery1 = new Delivery()
  703. .setMaterialCode(material.getWllbCode()) //物料code
  704. .setOutNum(askGoods.getNum()) //出库数量
  705. .setUserId(askGoods.getUserId()) //用户id
  706. .setDeliveryId("") //销售单id
  707. .setCompanyNumber(askGoods.getAccountSleeve()) //公司编号
  708. .setCustomerCode("")//客户编号
  709. .setWbs(askGoods.getWbs())
  710. .setStorageCode(removalCode);
  711. deliveryMapper.addRemovalHalf(delivery1); //流水录入
  712. } else {
  713. askGoods.setSupplierId(inventory.get(0).getSupplierId());
  714. askGoods.setType("其他出库");
  715. askGoods.setProducDate(inventory.get(0).getProducDate());
  716. askGoods.setSerial(inventory.get(0).getSerial());
  717. askGoods.setStorageCode(removalCode);
  718. askGoods.setWbs(askGoods.getWbs());
  719. askGoodsMapper.addRemoval(askGoods);//插入出库流水
  720. }
  721. //新增返回gs信息
  722. ReturRemoval returRemoval = new ReturRemoval()
  723. .setMaterialId(material.getTldId())
  724. .setWbs(askGoods.getWbs())
  725. .setNum(askGoods.getNum())
  726. .setStorageLocationCode(inventory.get(0).getStorageLocationCode())
  727. .setRemovalCode(removalCode)
  728. .setSourceType(askGoods.getSourceType())
  729. .setMoveType(askGoods.getMoveType())
  730. .setDocumentId(askGoods.getAskGoodsId())
  731. .setEntryNumber(askGoods.getEntryNumber())
  732. .setDocumentPointsId(askGoods.getId());
  733. askGoodsMapper.updateEnquiryOutNum(askGoods); //增加数量
  734. askGoodsMapper.addReturnGsRemovalF(returRemoval);//新增返回gs数据父表信息
  735. askGoodsMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息
  736. map.put("data", removalCode);
  737. map.put("msg", "200");
  738. }catch (Exception e){
  739. map.put("msg", "500");
  740. map.put("errMsg", "失败");
  741. e.printStackTrace();
  742. } finally {
  743. //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
  744. if (lock.isLocked() && lock.isHeldByCurrentThread()) {
  745. //释放锁
  746. lock.unlock();
  747. }
  748. }
  749. return map;
  750. }
  751. @Override
  752. @Transactional(rollbackFor = Exception.class)
  753. public Map<String, Object> delAskGoods(String id, HttpServletRequest request) {
  754. Map<String, Object> map = new HashMap<>();
  755. try{
  756. String userId = request.getHeader("userId");
  757. Map<String, Object> mapVal = askGoodsMapper.getDelAskGoods(id);
  758. if(Double.parseDouble(mapVal.get("out_num").toString()) > 0){
  759. map.put("msg", "500");
  760. map.put("errMsg", "此单据已出库!");
  761. return map;
  762. }
  763. LogData logData = new LogData()
  764. .setUserId(userId)
  765. .setData(mapVal.toString())
  766. .setType("0")
  767. .setDocumentType("生产领料");
  768. dictionaryMapper.addLogdata(logData);
  769. askGoodsMapper.delAskGoods(id);
  770. map.put("msg","200");
  771. } catch (Exception e) {
  772. e.printStackTrace();
  773. map.put("msg", "500");
  774. map.put("errMsg", "服务器请求异常,请稍后再试");
  775. }
  776. return map;
  777. }
  778. /**
  779. * 销售发货单接口
  780. * @return
  781. */
  782. @Override
  783. public void CreateBOLOutStock(String removalCode, String realName) {
  784. try{
  785. String documentId = null ;
  786. for(String warehouseWhere : askGoodsMapper.getWarehouseWheres(removalCode)){
  787. List<Map<String, Object>> mapList = askGoodsMapper.getGsRemoval(removalCode);
  788. if(mapList.size() >0 ) {
  789. JSONObject strJson = new JSONObject();
  790. //父表
  791. documentId = mapList.get(0).get("askGoodsId").toString();
  792. strJson.put("BOLID", mapList.get(0).get("askGoodsId").toString());//要货单id
  793. strJson.put("WMSID", mapList.get(0).get("id").toString());//出库单id
  794. strJson.put("WMSCode", mapList.get(0).get("removalCode").toString());//出库单编号
  795. strJson.put("WareHouse", warehouseWhere);//仓库ID
  796. strJson.put("SourceBillDate",DateUtil.dateConversion(mapList.get(0).get("scrq").toString()));//业务日期
  797. strJson.put("SourceType", mapList.get(0).get("sourceType").toString());//来源类型
  798. strJson.put("MoveType", mapList.get(0).get("moveType").toString());//移动类型
  799. strJson.put("IsRed", 0);//是否红单1
  800. if (realName == null || realName == ""){
  801. realName = "李兆峰" ;
  802. }
  803. strJson.put("Creator", realName);//制单人姓名1
  804. //子表
  805. JSONObject returnData = new JSONObject();
  806. List<JSONObject> retunList = new LinkedList<>();
  807. JSONObject ReqOutStocks = new JSONObject();
  808. List<JSONObject> list2 = new LinkedList<>();
  809. for (Map<String, Object> map : askGoodsMapper.getRemovalz(mapList.get(0).get("askGoodsId").toString(), warehouseWhere)) {
  810. JSONObject BillItems = new JSONObject();
  811. BillItems.put("WMSItemID", map.get("id"));//分录ID
  812. BillItems.put("BOLID", map.get("askGoodsId"));//要货申请单ID
  813. BillItems.put("BOLItemID", map.get("entryNumber"));//要货申请明细ID
  814. BillItems.put("Material", map.get("materialId"));//物料id
  815. BillItems.put("Quantity", map.get("num"));//数量
  816. BillItems.put("FlexField1", map.get("wbsId"));//wbs
  817. BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号
  818. BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称
  819. list2.add(BillItems);
  820. }
  821. strJson.put("BillItems", list2);
  822. retunList.add(strJson);
  823. ReqOutStocks.put("BILLs",retunList);
  824. returnData.put("strJson", JSON.toJSONString(ReqOutStocks));
  825. //添加记录到tld_access
  826. String names = "销售发货单" ;
  827. String accessType = "1" ;
  828. String returnGsRemoval = returnData.toString() ;
  829. askGoodsMapper.addAccess(names,returnGsRemoval,accessType);
  830. System.out.println("封装好的:"+returnData.toString());
  831. //回传地址
  832. // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateBOLOutStock";
  833. String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateBOLOutStock";
  834. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  835. Map<String, Object> result = httpClientUtil1.doPost(url, returnData);
  836. System.out.println("返回信息为:"+result.toString());
  837. //
  838. Error error = new Error();
  839. if(Integer.parseInt(result.get("msg").toString()) != 200){
  840. //如果失败存入报错信息跟数据
  841. error.setErrorInfo(result.get("data").toString());
  842. error.setUrl(url);
  843. error.setDataVal(returnData.toJSONString()).setType("销售出库");
  844. errorMapper.addError(error);
  845. queryListMapper.updateType(removalCode, 1, null);
  846. }else {
  847. JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString());
  848. JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString());
  849. if ( jsonObject1.get("State").toString().equals("0") ){
  850. //如果失败存入报错信息跟数据
  851. error.setErrorInfo(jsonObject1.get("Msg").toString());
  852. error.setUrl(url);
  853. error.setDataVal(returnData.toJSONString()).setType("销售出库");
  854. errorMapper.addError(error);
  855. queryListMapper.updateType(removalCode, 1, null);
  856. }else {
  857. List<JSONObject> data1 = (List<JSONObject>) JSONObject.parse(jsonObject1.get("data").toString());
  858. for (JSONObject map1 : data1) {
  859. if (map1.get("State").toString().equals("0")){
  860. for(JSONObject jsonObject2 : retunList){
  861. if(jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map1.get("WareHouse"))){
  862. //如果失败存入报错信息跟数据
  863. List<JSONObject> retunList2 = new LinkedList<>();
  864. retunList2.add(jsonObject2);
  865. JSONObject ReqOutStocks1 = new JSONObject();
  866. ReqOutStocks1.put("BILLs", retunList2);
  867. JSONObject ReqOutStocks2 = new JSONObject();
  868. ReqOutStocks2.put("strJson",ReqOutStocks1.toJSONString());
  869. //如果失败存入报错信息跟数据
  870. error.setErrorInfo(map1.get("FailReason").toString());
  871. error.setUrl(url);
  872. error.setDataVal(ReqOutStocks2.toJSONString()).setType("销售出库");
  873. errorMapper.addError(error);
  874. List<JSONObject> list1 = (List<JSONObject>) jsonObject2.get("BillItems");
  875. for(JSONObject jsonObject3 : list1){
  876. MaterialClass material = warehousingMapper.getMaterial(new Notice().setMaterialId(jsonObject3.get("Material").toString()));
  877. queryListMapper.updateType(jsonObject2.get("WMSCode").toString(), 1, material.getWllbCode());
  878. }
  879. }
  880. }
  881. }
  882. }
  883. }
  884. }
  885. }
  886. }
  887. //删除父子表信息
  888. askGoodsMapper.delPlugOutRemoval(documentId);
  889. askGoodsMapper.delRemovalz(documentId);
  890. }catch (Exception e){
  891. e.printStackTrace();
  892. }
  893. }
  894. @Override
  895. public Map<String, Object> addWarehouseTransferVitrual(AskGoods askGoods) {
  896. Map<String, Object> map = new HashMap<>();
  897. //redis并发锁
  898. RLock lock = redissonClient.getLock(askGoods.getUniqueCode());
  899. lock.lock();
  900. try{
  901. Map<String, Object> mapVal = askGoodsMapper.getScanIsNot(askGoods);
  902. if((Double.parseDouble(mapVal.get("inventoryNum").toString()) - Double.parseDouble(mapVal.get("virtualNum").toString())) == 0){
  903. map.put("msg", "500");
  904. map.put("errMsg", "已全部出库");
  905. return map;
  906. }
  907. Inventory inventory = askGoodsMapper.getInventory(askGoods); //库存数量
  908. if(inventory == null){
  909. map.put("msg", "500");
  910. map.put("errMsg", "暂无库存");
  911. return map;
  912. }
  913. AskGoods askGoods1 = askGoodsMapper.getWareInfo(askGoods); //要货单数量
  914. int alreadyNum = askGoodsMapper.getAskInfoNumVitrual(askGoods);//已扫描总数
  915. int inventoryAlready = askGoodsMapper.getInventoryAlready(askGoods);//库存已扫描数量
  916. Double inventorySurplus = DateUtil.formatDouble1((Double.parseDouble(inventory.getAmount()) - Double.parseDouble(inventory.getAmountLock())) - inventoryAlready); //库存剩余数量
  917. Double surplusNum = DateUtil.formatDouble1(Double.parseDouble(askGoods1.getNum()) - Double.parseDouble(askGoods1.getOutNum()) - alreadyNum); //剩余要扫描数量
  918. if(Double.doubleToLongBits(surplusNum) >= Double.doubleToLongBits(inventorySurplus)){
  919. askGoods.setNum(String.valueOf(inventorySurplus));
  920. } else {
  921. askGoods.setNum(String.valueOf(surplusNum));
  922. }
  923. askGoods.setStorageLocationCode(inventory.getStorageLocationCode());//库存编号
  924. askGoodsMapper.addAskGoodsVitrual(askGoods);
  925. map.put("msg", "200");
  926. }catch (Exception e){
  927. e.printStackTrace();
  928. map.put("msg", "500");
  929. map.put("errMsg", "失败");
  930. }finally {
  931. //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
  932. if (lock.isLocked() && lock.isHeldByCurrentThread()) {
  933. //释放锁
  934. lock.unlock();
  935. }
  936. }
  937. return map;
  938. }
  939. /**
  940. * 移库单接口文档
  941. */
  942. @Override
  943. public void CreateGMReqOutStock(String removalCode, String realName) {
  944. try {
  945. //通过code查询id
  946. String warehouseTransferTd = askGoodsMapper.getSupplyWarehouseWheres(removalCode);
  947. //根据id查询子表的供货仓库
  948. for (String warehouseWhere : askGoodsMapper.getSupplyWarehouseWhere(warehouseTransferTd)) {
  949. //查询父表信息
  950. List<Map<String, Object>> mapList = askGoodsMapper.getReturnWarehouseTransfer(removalCode);
  951. if (mapList.size() > 0) {
  952. JSONObject strJson = new JSONObject();
  953. //父表
  954. strJson.put("GMReqBillID", mapList.get(0).get("warehouseTransferId").toString());//移库通知ID
  955. strJson.put("WMSID", mapList.get(0).get("id").toString());//利道WMS出库单id
  956. strJson.put("WMSCode", mapList.get(0).get("warehouseTransferCode").toString());//利道WMS出库单编号
  957. strJson.put("TOWareHouse", mapList.get(0).get("askGoodsWarehouseId").toString());//要货仓库ID
  958. strJson.put("FromWareHouse", warehouseWhere);//供货仓库ID
  959. strJson.put("SourceBillDate", DateUtil.dateConversion(mapList.get(0).get("scrq").toString()));//业务日期
  960. strJson.put("MoveType", mapList.get(0).get("warehouseTransferType").toString());//移动类型345
  961. strJson.put("IsRed", 0);//是否红单1
  962. if (realName == null || realName == ""){
  963. realName = "李兆峰" ;
  964. }
  965. strJson.put("Creator", realName);//制单人姓名1
  966. //子表
  967. for (Map<String, Object> map : askGoodsMapper.getReturnWarehouseTransferZ(mapList.get(0).get("warehouseTransferId").toString(), warehouseWhere)) {
  968. List<JSONObject> list = new LinkedList<>();
  969. JSONObject BillItems = new JSONObject();
  970. List<JSONObject> retunList = new LinkedList<>();
  971. JSONObject ReqOutStocks = new JSONObject();
  972. JSONObject returnData = new JSONObject();
  973. BillItems.put("WMSItemID", map.get("id"));//分录ID
  974. BillItems.put("GMReqBillID", map.get("warehouseTransferId"));//移库通知单ID
  975. BillItems.put("GMReqBillItemID", map.get("entryNumber"));//移库通知明细ID
  976. BillItems.put("Material", map.get("materialId"));//物料id
  977. BillItems.put("Quantity", map.get("outNum"));//数量
  978. BillItems.put("FlexField1", map.get("wbsId"));//wbs
  979. BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号
  980. BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称
  981. list.add(BillItems);
  982. strJson.put("BillItems", list);
  983. retunList.add(strJson);
  984. ReqOutStocks.put("BILLs", retunList);
  985. returnData.put("strJson", JSON.toJSONString(ReqOutStocks));
  986. //添加记录到tld_access
  987. String names = "移库单";
  988. String accessType = "1";
  989. String returnGsRemoval = returnData.toString();
  990. askGoodsMapper.addAccess(names, returnGsRemoval, accessType);
  991. System.out.println("封装好的:"+returnData);
  992. //
  993. // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateGMReqOutStock";
  994. String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateGMReqOutStock";
  995. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  996. Map<String, Object> result = httpClientUtil1.doPost(url, returnData);
  997. System.out.println("返回信息为:"+result.toString());
  998. Error error = new Error();
  999. if (Integer.parseInt(result.get("msg").toString()) != 200) {
  1000. //如果失败存入报错信息跟数据
  1001. error.setErrorInfo(result.get("data").toString());
  1002. error.setUrl(url);
  1003. error.setDataVal(returnData.toJSONString()).setType("移库");
  1004. errorMapper.addError(error);
  1005. } else {
  1006. JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString());
  1007. JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString());
  1008. if (jsonObject1.get("State").toString().equals("0")) {
  1009. //如果失败存入报错信息跟数据
  1010. error.setErrorInfo(jsonObject1.get("Msg").toString());
  1011. error.setUrl(url);
  1012. error.setDataVal(returnData.toJSONString()).setType("移库");
  1013. errorMapper.addError(error);
  1014. } else {
  1015. List<JSONObject> data1 = (List<JSONObject>) JSONObject.parse(jsonObject1.get("data").toString());
  1016. for (JSONObject map1 : data1) {
  1017. if (map1.get("State").toString().equals("0")) {
  1018. for (JSONObject jsonObject2 : retunList) {
  1019. if (jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("FromWareHouse").toString().equals(map1.get("FromWareHouse"))) {
  1020. //如果失败存入报错信息跟数据
  1021. List<JSONObject> retunList2 = new LinkedList<>();
  1022. retunList2.add(jsonObject2);
  1023. JSONObject ReqOutStocks1 = new JSONObject();
  1024. ReqOutStocks1.put("BILLs", retunList2);
  1025. JSONObject ReqOutStocks2 = new JSONObject();
  1026. ReqOutStocks2.put("strJson",ReqOutStocks1.toJSONString());
  1027. //如果失败存入报错信息跟数据
  1028. error.setErrorInfo(map1.get("FailReason").toString());
  1029. error.setUrl(url);
  1030. error.setDataVal(ReqOutStocks2.toJSONString()).setType("移库");
  1031. errorMapper.addError(error);
  1032. }
  1033. }
  1034. }
  1035. }
  1036. }
  1037. }
  1038. }
  1039. }
  1040. }
  1041. //删除父子表信息
  1042. //根据code
  1043. askGoodsMapper.delReturnWarehouseTransfer(removalCode);
  1044. //根据id
  1045. askGoodsMapper.delReturnWarehouseTransferZ(warehouseTransferTd);
  1046. } catch (Exception e) {
  1047. e.printStackTrace();
  1048. }
  1049. }
  1050. /**
  1051. * @Description: 生产收货接口文档
  1052. * @Param: removalCode 入库单编号
  1053. * @return: void
  1054. * @Author: XiaoChen
  1055. * @Date: 2023/4/7
  1056. */
  1057. @Override
  1058. public void CreateGRReqInStock(String removalCode, String realName) {
  1059. try {
  1060. String orderNumber = null ;
  1061. //通过入库单编号查询入库单信息
  1062. // ReturnWarehousing returnWarehousing = askGoodsMapper.getReturnGsWarehousing(removalCode);
  1063. //根据id查询子表的供货仓库
  1064. for (Map<String,Object> returnWarehousing1 : askGoodsMapper.getStorageLocationWarehouseWhere(removalCode)) {
  1065. orderNumber = returnWarehousing1.get("orderNumber").toString() ;
  1066. //查询父表信息
  1067. List<Map<String, Object>> mapList = askGoodsMapper.getNoticeParent(returnWarehousing1.get("orderNumber").toString());
  1068. if (mapList.size() > 0) {
  1069. JSONObject strJson = new JSONObject();
  1070. //父表
  1071. strJson.put("GRReqBillID", mapList.get(0).get("noticeId").toString());//入库通知单ID
  1072. strJson.put("WMSID", mapList.get(0).get("id").toString());//利道WMS出库单id
  1073. strJson.put("WMSCode", mapList.get(0).get("noticeCode").toString());//利道WMS出库单编号
  1074. strJson.put("WareHouse", returnWarehousing1.get("warehouseWhere"));//仓库ID
  1075. strJson.put("SourceBillDate", DateUtil.dateConversion(mapList.get(0).get("noticeTime").toString()));//业务日期
  1076. strJson.put("SourceType", mapList.get(0).get("sourceType").toString());//来源类型
  1077. strJson.put("MoveType", mapList.get(0).get("moveType").toString());//移动类型
  1078. strJson.put("IsRed", 0);//是否红单1
  1079. if (realName == null || realName == ""){
  1080. realName = "李兆峰" ;
  1081. }
  1082. strJson.put("Creator", realName);//制单人姓名1
  1083. //子表
  1084. for (Map<String, Object> map : askGoodsMapper.getNoticeSubtabulation(mapList.get(0).get("noticeId").toString())) {
  1085. List<JSONObject> list = new LinkedList<>();
  1086. JSONObject BillItems = new JSONObject();
  1087. List<JSONObject> retunList = new LinkedList<>();
  1088. JSONObject ReqOutStocks = new JSONObject();
  1089. JSONObject returnData = new JSONObject();
  1090. BillItems.put("WMSItemID", map.get("id"));//分录ID
  1091. BillItems.put("GRReqBillID", map.get("noticeId"));//入库通知单ID
  1092. BillItems.put("GRReqBillItemID", map.get("entryNumber"));//入库通知单明细ID
  1093. BillItems.put("Material", map.get("materialId"));//物料id
  1094. BillItems.put("Quantity", map.get("num"));//数量
  1095. BillItems.put("FlexField1", map.get("wbsId"));//wbs
  1096. BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号
  1097. BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称
  1098. list.add(BillItems);
  1099. strJson.put("BillItems", list);
  1100. retunList.add(strJson);
  1101. ReqOutStocks.put("BILLs", retunList);
  1102. returnData.put("strJson", JSON.toJSONString(ReqOutStocks));
  1103. //添加记录到tld_access
  1104. String names = "生产收货";
  1105. String accessType = "1";
  1106. String returnGsRemoval = returnData.toString();
  1107. askGoodsMapper.addAccess(names, returnGsRemoval, accessType);
  1108. System.out.println("封装好的:"+returnData.toString());
  1109. //回传地址
  1110. // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateGRReqInStock";
  1111. String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateGRReqInStock";
  1112. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  1113. Map<String, Object> result = httpClientUtil1.doPost(url, returnData);
  1114. System.out.println("返回信息为:"+result.toString());
  1115. Error error = new Error();
  1116. if (Integer.parseInt(result.get("msg").toString()) != 200) {
  1117. //如果失败存入报错信息跟数据
  1118. error.setErrorInfo(result.get("data").toString());
  1119. error.setUrl(url);
  1120. error.setDataVal(returnData.toJSONString()).setType("生产收货");
  1121. errorMapper.addError(error);
  1122. //修改流水传输状态
  1123. for(Map<String, Object> map1 : askGoodsMapper.plugOutRemoval(removalCode)){
  1124. askGoodsMapper.updateRemoval(map1.get("removalCode").toString(), null);
  1125. }
  1126. } else {
  1127. JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString());
  1128. JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString());
  1129. if (jsonObject1.get("State").toString().equals("0")) {
  1130. //如果失败存入报错信息跟数据
  1131. error.setErrorInfo(jsonObject1.get("Msg").toString());
  1132. error.setUrl(url);
  1133. error.setDataVal(returnData.toJSONString()).setType("生产收货");
  1134. errorMapper.addError(error);
  1135. } else {
  1136. List<JSONObject> data1 = (List<JSONObject>) JSONObject.parse(jsonObject1.get("data").toString());
  1137. for (JSONObject map1 : data1) {
  1138. if (map1.get("State").toString().equals("0")) {
  1139. for (JSONObject jsonObject2 : retunList) {
  1140. if (jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map1.get("WareHouse"))) {
  1141. //如果失败存入报错信息跟数据
  1142. List<JSONObject> retunList2 = new LinkedList<>();
  1143. retunList2.add(jsonObject2);
  1144. JSONObject ReqOutStocks1 = new JSONObject();
  1145. ReqOutStocks1.put("BILLs", retunList2);
  1146. JSONObject ReqOutStocks2 = new JSONObject();
  1147. ReqOutStocks2.put("strJson",ReqOutStocks1.toJSONString());
  1148. error.setErrorInfo(map1.get("FailReason").toString());
  1149. error.setUrl(url);
  1150. error.setDataVal(ReqOutStocks2.toJSONString()).setType("生产收货");
  1151. errorMapper.addError(error);
  1152. }
  1153. }
  1154. }
  1155. }
  1156. }
  1157. }
  1158. }
  1159. }
  1160. }
  1161. //删除虚拟表
  1162. askGoodsMapper.delReturnGsWarehousing(orderNumber);
  1163. } catch (Exception e) {
  1164. e.printStackTrace();
  1165. }
  1166. }
  1167. /**
  1168. * @Description: 其他收货接口文档/其它入库
  1169. * @Param: removalCode
  1170. * @return: void
  1171. * @Author: XiaoChen
  1172. * @Date: 2023/4/12
  1173. */
  1174. @Override
  1175. public void CreateOtherInStock(String removalCode, String realName) {
  1176. try {
  1177. LinkedList<String> noticeIds = new LinkedList<>();
  1178. //通过入库单编号查询通知单ID
  1179. // List<ReturnWarehousing> returnWarehousing = askGoodsMapper.getReturnGsOtherWarehousing(removalCode);
  1180. //根据id查询子表的供货仓库
  1181. for (Map<String,Object> returnWarehousing1 : askGoodsMapper.getCreateOtherInStockWarehouseWhere(removalCode)) {
  1182. JSONObject strJson = new JSONObject();
  1183. //父表
  1184. strJson.put("GRReqBillID", returnWarehousing1.get("noticeId").toString());//入库通知单ID
  1185. strJson.put("WMSID", returnWarehousing1.get("wmsId").toString());//利道WMS出库单id
  1186. strJson.put("WMSCode", returnWarehousing1.get("noticeCode").toString());//利道WMS出库单编号
  1187. strJson.put("WareHouse", returnWarehousing1.get("warehouseWhere"));//仓库ID
  1188. strJson.put("SourceBillDate", DateUtil.dateConversion(returnWarehousing1.get("noticeTime").toString()));//业务日期
  1189. strJson.put("SourceType", returnWarehousing1.get("sourceType").toString());//来源类型
  1190. strJson.put("MoveType", returnWarehousing1.get("moveType").toString());//移动类型
  1191. strJson.put("IsRed", 0);//是否红单1
  1192. if (realName == null || realName == ""){
  1193. realName = "李兆峰" ;
  1194. }
  1195. strJson.put("Creator", realName);//制单人姓名1
  1196. //查询信息
  1197. List<Map<String, Object>> mapList = askGoodsMapper.getNoticesParent(removalCode,returnWarehousing1.get("storageLocationCode").toString());
  1198. if (mapList.size() > 0) {
  1199. for (Map<String, Object> map : mapList) {
  1200. //子表
  1201. List<JSONObject> list = new LinkedList<>();
  1202. JSONObject BillItems = new JSONObject();
  1203. List<JSONObject> retunList = new LinkedList<>();
  1204. JSONObject ReqOutStocks = new JSONObject();
  1205. JSONObject returnData = new JSONObject();
  1206. BillItems.put("WMSItemID", map.get("wmsItemId"));//分录ID
  1207. BillItems.put("GRReqBillID", map.get("noticeId"));//入库通知单ID
  1208. BillItems.put("GRReqBillItemID", map.get("entryNumber"));//入库通知单明细ID
  1209. BillItems.put("Material", map.get("materialId"));//物料id
  1210. BillItems.put("Quantity", map.get("amount"));//数量
  1211. BillItems.put("FlexField1", map.get("wbsId"));//wbs
  1212. BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号
  1213. BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称
  1214. list.add(BillItems);
  1215. strJson.put("BillItems", list);
  1216. retunList.add(strJson);
  1217. ReqOutStocks.put("BILLs", retunList);
  1218. returnData.put("strJson", JSON.toJSONString(ReqOutStocks));
  1219. //添加记录到tld_access
  1220. String names = "其它入库";
  1221. String accessType = "1";
  1222. String returnGsRemoval = returnData.toString();
  1223. askGoodsMapper.addAccess(names, returnGsRemoval, accessType);
  1224. System.out.println("封装好的:"+returnData.toString());
  1225. // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateOtherInStock";
  1226. String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateOtherInStock";
  1227. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  1228. Map<String, Object> result = httpClientUtil1.doPost(url, returnData);
  1229. System.out.println("result:" + result);
  1230. System.out.println("返回信息为:"+result.toString());
  1231. Error error = new Error();
  1232. if (Integer.parseInt(result.get("msg").toString()) != 200) {
  1233. //如果失败存入报错信息跟数据
  1234. error.setErrorInfo(result.get("data").toString());
  1235. error.setUrl(url);
  1236. error.setDataVal(returnData.toJSONString()).setType("其它入库");
  1237. errorMapper.addError(error);
  1238. } else {
  1239. JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString());
  1240. JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString());
  1241. if (jsonObject1.get("State").toString().equals("0")) {
  1242. //如果失败存入报错信息跟数据
  1243. error.setErrorInfo(jsonObject1.get("Msg").toString());
  1244. error.setUrl(url);
  1245. error.setDataVal(returnData.toJSONString()).setType("其它入库");
  1246. errorMapper.addError(error);
  1247. } else {
  1248. List<JSONObject> data1 = (List<JSONObject>) JSONObject.parse(jsonObject1.get("data").toString());
  1249. for (JSONObject map1 : data1) {
  1250. if (map1.get("State").toString().equals("0")) {
  1251. for (JSONObject jsonObject2 : retunList) {
  1252. if (jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map1.get("WareHouse"))) {
  1253. //如果失败存入报错信息跟数据
  1254. List<JSONObject> retunList2 = new LinkedList<>();
  1255. retunList2.add(jsonObject2);
  1256. JSONObject ReqOutStocks1 = new JSONObject();
  1257. ReqOutStocks1.put("BILLs", retunList2);
  1258. JSONObject ReqOutStocks2 = new JSONObject();
  1259. ReqOutStocks2.put("strJson",ReqOutStocks1.toJSONString());
  1260. //如果失败存入报错信息跟数据
  1261. error.setErrorInfo(map1.get("FailReason").toString());
  1262. error.setUrl(url);
  1263. error.setDataVal(ReqOutStocks2.toJSONString()).setType("其它入库");
  1264. errorMapper.addError(error);
  1265. }
  1266. }
  1267. }
  1268. }
  1269. }
  1270. }
  1271. }
  1272. }
  1273. noticeIds.add(returnWarehousing1.get("noticeId").toString());
  1274. }
  1275. askGoodsMapper.delNoticesParent(removalCode);
  1276. } catch (Exception e) {
  1277. e.printStackTrace();
  1278. }
  1279. }
  1280. /**
  1281. * @Description: 其他发货补领料/其他出货接口文档/其它出库
  1282. * @Param: removalCode 单据id
  1283. * @return: void
  1284. * @Author: XiaoChen
  1285. * @Date: 2023/4/13
  1286. */
  1287. @Override
  1288. public void CreateOtherDeliveryMaterials(String removalCode, String realName) {
  1289. try {
  1290. String documentId = null ;
  1291. //通过出库单编号查询单据ID
  1292. List<Map<String,Object>> lists = askGoodsMapper.getCreateOtherDeliveryMaterialsWarehouseWhere(removalCode);
  1293. //根据id查询子表的供货仓库
  1294. //根据仓库
  1295. for (Map<String, Object> maps : lists) {
  1296. List<Map<String, Object>> mapList = askGoodsMapper.getGsRemovals(removalCode);
  1297. if(mapList.size() >0 ) {
  1298. JSONObject strJson = new JSONObject();
  1299. //父表
  1300. documentId = mapList.get(0).get("askGoodsId").toString();
  1301. strJson.put("GIReqBillID", mapList.get(0).get("askGoodsId").toString());//要货单id
  1302. strJson.put("WMSID", mapList.get(0).get("id").toString());//出库单id
  1303. strJson.put("WMSCode", mapList.get(0).get("removalCode").toString());//出库单编号
  1304. strJson.put("WareHouse", maps.get("warehouseWhere"));//仓库ID
  1305. strJson.put("SourceBillDate",DateUtil.dateConversion(mapList.get(0).get("scrq").toString()));//业务日期
  1306. strJson.put("SourceType", mapList.get(0).get("sourceType").toString());//来源类型
  1307. strJson.put("MoveType", mapList.get(0).get("moveType").toString());//移动类型
  1308. strJson.put("IsRed", 0);//是否红单1
  1309. if (realName == null || realName == ""){
  1310. realName = "李兆峰" ;
  1311. }
  1312. strJson.put("Creator", realName);//制单人姓名1
  1313. //子表
  1314. for (Map<String, Object> map : askGoodsMapper.getRemovalz(mapList.get(0).get("askGoodsId").toString(),maps.get("warehouseWhere").toString())) {
  1315. List<JSONObject> list = new LinkedList<>();
  1316. JSONObject BillItems = new JSONObject();
  1317. List<JSONObject> retunList = new LinkedList<>();
  1318. JSONObject ReqOutStocks = new JSONObject();
  1319. JSONObject returnData = new JSONObject();
  1320. BillItems.put("WMSItemID", map.get("askId"));//分录ID
  1321. BillItems.put("GIReqBillID", map.get("askGoodsId"));//要货申请单ID
  1322. BillItems.put("GIReqBillItemID", map.get("entryNumber"));//要货申请明细ID
  1323. BillItems.put("Material", map.get("materialId"));//物料id
  1324. BillItems.put("Quantity", map.get("num"));//数量
  1325. BillItems.put("FlexField1", map.get("wbsId"));//wbs
  1326. BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号
  1327. BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称
  1328. list.add(BillItems);
  1329. strJson.put("BillItems", list);
  1330. retunList.add(strJson);
  1331. ReqOutStocks.put("ReqOutStocks", retunList);
  1332. returnData.put("strJson", JSON.toJSONString(ReqOutStocks));
  1333. //添加记录到tld_access
  1334. String names = "其它出库";
  1335. String accessType = "1";
  1336. String returnGsRemoval = returnData.toString();
  1337. askGoodsMapper.addAccess(names, returnGsRemoval, accessType);
  1338. System.out.println("封装好的:"+returnData.toString());
  1339. // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateMakeUpOtherOutStock";
  1340. String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateMakeUpOtherOutStock";
  1341. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  1342. Map<String, Object> result = httpClientUtil1.doPost(url, returnData);
  1343. System.out.println("result:" + result);
  1344. System.out.println("返回信息为:"+result.toString());
  1345. Error error = new Error();
  1346. if (Integer.parseInt(result.get("msg").toString()) != 200) {
  1347. //如果失败存入报错信息跟数据
  1348. error.setErrorInfo(result.get("data").toString());
  1349. error.setUrl(url);
  1350. error.setDataVal(returnData.toJSONString()).setType("其它出库");
  1351. errorMapper.addError(error);
  1352. } else {
  1353. JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString());
  1354. JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString());
  1355. if (jsonObject1.get("State").toString().equals("0")) {
  1356. //如果失败存入报错信息跟数据
  1357. error.setErrorInfo(jsonObject1.get("Msg").toString());
  1358. error.setUrl(url);
  1359. error.setDataVal(returnData.toJSONString()).setType("其它出库");
  1360. errorMapper.addError(error);
  1361. } else {
  1362. List<JSONObject> data1 = (List<JSONObject>) JSONObject.parse(jsonObject1.get("data").toString());
  1363. for (JSONObject map1 : data1) {
  1364. if (map1.get("State").toString().equals("0")) {
  1365. for (JSONObject jsonObject2 : retunList) {
  1366. if (jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map1.get("WareHouse"))) {
  1367. //如果失败存入报错信息跟数据
  1368. List<JSONObject> retunList2 = new LinkedList<>();
  1369. retunList2.add(jsonObject2);
  1370. JSONObject ReqOutStocks1 = new JSONObject();
  1371. ReqOutStocks1.put("ReqOutStocks", retunList2);
  1372. JSONObject ReqOutStocks2 = new JSONObject();
  1373. ReqOutStocks2.put("strJson",ReqOutStocks1.toJSONString());
  1374. //如果失败存入报错信息跟数据
  1375. error.setErrorInfo(map1.get("FailReason").toString());
  1376. error.setUrl(url);
  1377. error.setDataVal(ReqOutStocks2.toJSONString()).setType("其它出库");
  1378. errorMapper.addError(error);
  1379. }
  1380. }
  1381. }
  1382. }
  1383. }
  1384. }
  1385. }
  1386. }
  1387. }
  1388. //删除父子表信息
  1389. askGoodsMapper.delPlugOutRemoval(documentId);
  1390. askGoodsMapper.delRemovalz(documentId);
  1391. } catch (Exception e) {
  1392. e.printStackTrace();
  1393. }
  1394. }
  1395. /**
  1396. * @Description: 其他发货(参照要货申请制单(其他发货通知_青岛工厂))接口文档
  1397. * @Param: removalCode
  1398. * @return: void
  1399. * @Author: XiaoChen
  1400. * @Date: 2023/4/14
  1401. */
  1402. @Override
  1403. public void CreateOtherDeliveryMaterial(String removalCode, String realName) {
  1404. try {
  1405. String documentId = null ;
  1406. //通过出库单编号查询单据ID
  1407. List<Map<String,Object>> lists = askGoodsMapper.getCreateOtherDeliveryMaterialsWarehouseWhere(removalCode);
  1408. //根据id查询子表的供货仓库
  1409. //根据仓库循环
  1410. for (Map<String, Object> maps : lists) {
  1411. List<Map<String, Object>> mapList = askGoodsMapper.getGsRemovals(removalCode);
  1412. if(mapList.size() >0 ) {
  1413. JSONObject strJson = new JSONObject();
  1414. //父表
  1415. documentId = mapList.get(0).get("askGoodsId").toString();
  1416. strJson.put("GIReqBillID", mapList.get(0).get("askGoodsId").toString());//要货单id
  1417. strJson.put("WMSID", mapList.get(0).get("id").toString());//出库单id
  1418. strJson.put("WMSCode", mapList.get(0).get("removalCode").toString());//出库单编号
  1419. strJson.put("WareHouse", maps.get("warehouseWhere"));//仓库ID
  1420. strJson.put("SourceBillDate",DateUtil.dateConversion(mapList.get(0).get("scrq").toString()));//业务日期
  1421. strJson.put("SourceType", mapList.get(0).get("sourceType").toString());//来源类型
  1422. strJson.put("MoveType", mapList.get(0).get("moveType").toString());//移动类型
  1423. strJson.put("IsRed", 0);//是否红单1
  1424. if (realName == null || realName == ""){
  1425. realName = "李兆峰" ;
  1426. }
  1427. strJson.put("Creator", realName);//制单人姓名1
  1428. //子表
  1429. for (Map<String, Object> map : askGoodsMapper.getRemovalz(mapList.get(0).get("askGoodsId").toString(),maps.get("warehouseWhere").toString())) {
  1430. List<JSONObject> list = new LinkedList<>();
  1431. JSONObject BillItems = new JSONObject();
  1432. List<JSONObject> retunList = new LinkedList<>();
  1433. JSONObject ReqOutStocks = new JSONObject();
  1434. JSONObject returnData = new JSONObject();
  1435. BillItems.put("WMSItemID", map.get("askId"));//分录ID
  1436. BillItems.put("GIReqBillID", map.get("askGoodsId"));//要货申请单ID
  1437. BillItems.put("GIReqBillItemID", map.get("entryNumber"));//要货申请明细ID
  1438. BillItems.put("Material", map.get("materialId"));//物料id
  1439. BillItems.put("Quantity", map.get("num"));//数量
  1440. BillItems.put("FlexField1", map.get("wbsId"));//wbs
  1441. BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号
  1442. BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称
  1443. list.add(BillItems);
  1444. strJson.put("BillItems", list);
  1445. retunList.add(strJson);
  1446. ReqOutStocks.put("ReqOutStocks", retunList);
  1447. returnData.put("strJson", JSON.toJSONString(ReqOutStocks));
  1448. //添加记录到tld_access
  1449. String names = "其它出库";
  1450. String accessType = "1";
  1451. String returnGsRemoval = returnData.toString();
  1452. askGoodsMapper.addAccess(names, returnGsRemoval, accessType);
  1453. System.out.println("封装好的:"+returnData);
  1454. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  1455. // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateOtherOutStock";
  1456. String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateOtherOutStock";
  1457. Map<String, Object> result = httpClientUtil1.doPost(url, returnData);
  1458. System.out.println("result:" + result);
  1459. System.out.println("返回信息为:"+result.toString());
  1460. Error error = new Error();
  1461. if (Integer.parseInt(result.get("msg").toString()) != 200) {
  1462. //如果失败存入报错信息跟数据
  1463. error.setErrorInfo(result.get("data").toString());
  1464. error.setUrl(url);
  1465. error.setDataVal(returnData.toJSONString()).setType("其它出库");
  1466. errorMapper.addError(error);
  1467. } else {
  1468. JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString());
  1469. JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString());
  1470. if (jsonObject1.get("State").toString().equals("0")) {
  1471. //如果失败存入报错信息跟数据
  1472. error.setErrorInfo(jsonObject1.get("Msg").toString());
  1473. error.setUrl(url);
  1474. error.setDataVal(returnData.toJSONString()).setType("其它出库");
  1475. errorMapper.addError(error);
  1476. } else {
  1477. List<JSONObject> data1 = (List<JSONObject>) JSONObject.parse(jsonObject1.get("data").toString());
  1478. for (JSONObject map1 : data1) {
  1479. if (map1.get("State").toString().equals("0")) {
  1480. for (JSONObject jsonObject2 : retunList) {
  1481. if (jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map1.get("WareHouse"))) {
  1482. //如果失败存入报错信息跟数据
  1483. List<JSONObject> retunList2 = new LinkedList<>();
  1484. retunList2.add(jsonObject2);
  1485. JSONObject ReqOutStocks1 = new JSONObject();
  1486. ReqOutStocks1.put("ReqOutStocks", retunList2);
  1487. JSONObject ReqOutStocks2 = new JSONObject();
  1488. ReqOutStocks2.put("strJson",ReqOutStocks1.toJSONString());
  1489. //如果失败存入报错信息跟数据
  1490. error.setErrorInfo(map1.get("FailReason").toString());
  1491. error.setUrl(url);
  1492. error.setDataVal(ReqOutStocks2.toJSONString()).setType("其它出库");
  1493. errorMapper.addError(error);
  1494. }
  1495. }
  1496. }
  1497. }
  1498. }
  1499. }
  1500. }
  1501. }
  1502. }
  1503. //删除父子表信息
  1504. askGoodsMapper.delPlugOutRemoval(documentId);
  1505. askGoodsMapper.delRemovalz(documentId);
  1506. } catch (Exception e) {
  1507. e.printStackTrace();
  1508. }
  1509. }
  1510. /**
  1511. * 产成品出库流水修改连翻号
  1512. * @param askGoods 参数
  1513. * @return 返回结果
  1514. */
  1515. @Override
  1516. public Map<String, Object> getRemovalHalfUpdSerial(AskGoods askGoods) {
  1517. Map<String, Object> map = new HashMap<>();
  1518. try{
  1519. askGoodsMapper.UpdSerial(askGoods);
  1520. map.put("msg", "200");
  1521. }catch (Exception e){
  1522. e.printStackTrace();
  1523. map.put("msg", "500");
  1524. map.put("errMsg", "失败");
  1525. }
  1526. return map;
  1527. }
  1528. /**
  1529. * 入库回传
  1530. * */
  1531. @Override
  1532. public void test03() {
  1533. List<Map<String,Object>> mapList = askGoodsMapper.test03();
  1534. System.out.println("mapList:"+mapList);
  1535. //入库回传 5
  1536. for (Map<String, Object> map : mapList) {
  1537. warehousingService.plugOutWarehousing(map.get("orderNumber").toString()+",","李兆峰");//入库回传
  1538. }
  1539. }
  1540. /**
  1541. * 存入GS返回数据
  1542. * */
  1543. @Override
  1544. public void merge() {
  1545. //查询库存
  1546. List<OutgoingReturn> list = askGoodsMapper.getOutgoingReturnList();
  1547. //根据 库位编号 物料id wbs 所属公司 判断是否相同
  1548. for (OutgoingReturn outgoingReturn : list) {
  1549. System.out.println("数量为:"+Double.parseDouble(outgoingReturn.getAmount()));
  1550. System.out.println("已发数量为:"+Double.parseDouble(outgoingReturn.getAmountNum()));
  1551. System.out.println("取消数量为:"+Double.parseDouble(outgoingReturn.getAmountNumber()));
  1552. System.out.println("转化为整数为:"+Double.valueOf(outgoingReturn.getAmount()).intValue());
  1553. if (Double.valueOf(outgoingReturn.getAmountNum()).intValue() == 0){
  1554. ReturRemoval returRemoval = new ReturRemoval()
  1555. .setDocumentId(outgoingReturn.getAskId())//单据id1
  1556. .setRemovalCode(outgoingReturn.getAskId().substring(outgoingReturn.getAskId().length()-6)+outgoingReturn.getEntryNumber())//出库单编号1
  1557. .setSourceType("8")//来源类型1
  1558. .setMoveType(outgoingReturn.getMoveType())//移动类型1
  1559. .setMaterialId(outgoingReturn.getMaterialId())//物料id
  1560. .setWbs(outgoingReturn.getWbs())//wbs
  1561. .setEntryNumber(outgoingReturn.getEntryNumber())//分录号
  1562. .setDocumentPointsId(" ")//分录单id
  1563. .setStorageLocationCode(askGoodsMapper.getLocationCode(outgoingReturn.getWarehouse()));//库存编号
  1564. if (Double.valueOf(outgoingReturn.getAmount()).intValue() < 0 ){
  1565. returRemoval.setNum( String.valueOf( Double.parseDouble(outgoingReturn.getAmount())));
  1566. }else {
  1567. returRemoval.setNum( String.valueOf(Double.parseDouble(outgoingReturn.getAmount()) - Double.parseDouble(outgoingReturn.getAmountNum()) - Double.parseDouble(outgoingReturn.getAmountNumber())) );//数量-已发数量-取消数量 = 未发数量
  1568. }
  1569. if (Double.valueOf(returRemoval.getNum()).intValue() == 0){
  1570. System.out.println("不能添加:"+Double.valueOf(returRemoval.getNum()).intValue());
  1571. }else {
  1572. //添加父表信息
  1573. askGoodsMapper.addReturnGsRemovalF(returRemoval);
  1574. //添加子表信息
  1575. askGoodsMapper.addReturnGsRemoval(returRemoval);
  1576. }
  1577. }
  1578. //删除
  1579. askGoodsMapper.DelOutgoingReturnList(outgoingReturn);
  1580. }
  1581. }
  1582. /**
  1583. * 生产收货接口文档/报工单 w
  1584. * */
  1585. @Override
  1586. public void test04() {
  1587. List<Map<String,Object>> mapList = askGoodsMapper.test04();
  1588. System.out.println("mapList:"+mapList);
  1589. //生产收货接口文档/报工单 w
  1590. for (Map<String, Object> map : mapList) {
  1591. CreateGRReqInStock(map.get("storageCode").toString(),"李兆峰");//生产收货接口文档
  1592. }
  1593. }
  1594. /**
  1595. * 出库回传数据导入
  1596. */
  1597. @Override
  1598. @Transactional(rollbackFor = Exception.class)
  1599. public void importExcel(List<OutgoingReturn> list) {
  1600. askGoodsMapper.importExcel(list);
  1601. }
  1602. /**
  1603. * 出库回传跑数据
  1604. * */
  1605. @Override
  1606. public void outgoingReturn() {
  1607. //查询单据id
  1608. List<ReturRemoval> list = askGoodsMapper.getOutgoingReturn();
  1609. for (ReturRemoval returRemoval : list) {
  1610. plugOutRemoval(returRemoval.getDocumentId(),"李兆峰");
  1611. }
  1612. }
  1613. /**
  1614. * 存入GS返回数据/入库回传
  1615. * */
  1616. @Override
  1617. public void returnInStorage() {
  1618. List<ReceiveGoods> list = askGoodsMapper.getReturnInStorageF();//查询父表信息
  1619. for (ReceiveGoods receiveGoods : list) {
  1620. List<ReceiveGoods> list1 = askGoodsMapper.getReturnInStorageZ(receiveGoods.getOrderCode());//查询子表信息
  1621. for (ReceiveGoods goods : list1) {
  1622. //存入GS返回数据
  1623. String LocationCode = null ;
  1624. String PartType = askGoodsMapper.getMaterialPartType(goods.getMaterialId());//查询物料类型
  1625. if (PartType.equals("半成品")){
  1626. LocationCode = "XNKW001" ;
  1627. }else if (PartType.equals("原材料")){
  1628. LocationCode = "D2-3-2" ;
  1629. }else {
  1630. LocationCode = "D2-3-2" ;
  1631. }
  1632. ReturnWarehousing returnWarehousing = new ReturnWarehousing()
  1633. .setStorageCode("TK"+receiveGoods.getSupplierId())
  1634. .setSourceType(receiveGoods.getSourceType())
  1635. .setMoveType(receiveGoods.getMoveType())
  1636. .setEntryNumber(goods.getEntryNumber())
  1637. .setWbs(goods.getWbs())
  1638. .setMaterialId(goods.getMaterialId())
  1639. .setWarehousingNum(goods.getQualifiedNum())
  1640. .setReceiveGoodsId(goods.getEntryNumber())
  1641. .setScrq(goods.getArrivalTime())
  1642. .setOrderNumber(receiveGoods.getOrderNumber())
  1643. .setStorageLocationCode(LocationCode);
  1644. System.out.println("封装的数据:"+returnWarehousing.toString());
  1645. System.out.println("入库数量:"+goods.getWarehousingNum());
  1646. // if (goods.getWarehousingNum().equals("0")){
  1647. askGoodsMapper.addReturnWarehousing(returnWarehousing);//添加GS返回数据
  1648. // }
  1649. }
  1650. }
  1651. }
  1652. /**
  1653. * 出库错误信息回调
  1654. * */
  1655. @Override
  1656. public void outgoingReturnError() {
  1657. List<Error> list = askGoodsMapper.getOutgoingReturnError();
  1658. for (Error error : list) {
  1659. queryListService.anew(error);
  1660. }
  1661. }
  1662. /**
  1663. * 销售出库导入数据
  1664. */
  1665. @Override
  1666. public void marketImport(List<MarketReturn> list) {
  1667. askGoodsMapper.marketImport(list);
  1668. // askGoodsMapper.marketImports(list);
  1669. }
  1670. /**
  1671. * 存入GS返回数据/销售出库
  1672. * */
  1673. @Override
  1674. public void market() {
  1675. //查询销售出库导入数据
  1676. List<MarketReturn> list = askGoodsMapper.getMarketList();
  1677. //根据 库位编号 物料id wbs 所属公司 判断是否相同
  1678. for (MarketReturn marketReturn : list) {
  1679. //查询物料id
  1680. String materialId = askGoodsMapper.getMaterialId(marketReturn.getMaterialCode());
  1681. //查询销售单父子表信息
  1682. Delivery delivery1 = askGoodsMapper.getDeliveryF(marketReturn.getDeliveryOrder());
  1683. if (delivery1!= null){
  1684. List<Delivery> delivery2 = askGoodsMapper.getDeliveryZ(delivery1.getDeliveryId(),materialId);
  1685. if (delivery2 != null){
  1686. for (Delivery delivery : delivery2) {
  1687. ReturRemoval returRemoval = new ReturRemoval()
  1688. .setDocumentId(delivery1.getDeliveryId())//单据id1
  1689. .setRemovalCode( codeGenerateCk())//出库单编号1
  1690. .setSourceType(delivery1.getSourceType())//来源类型1
  1691. .setMoveType(delivery1.getMoveType())//移动类型1
  1692. .setMaterialId(materialId)//物料id
  1693. .setWbs(delivery.getWbs())//wbs
  1694. .setNum( marketReturn.getNum() )//数量-已发数量-取消数量 = 未发数量
  1695. .setEntryNumber(delivery.getEntryNumber())//分录号
  1696. .setDocumentPointsId(" ")//分录单id
  1697. .setStorageLocationCode("D2-3-2");//库存编号
  1698. //添加父表信息
  1699. askGoodsMapper.addReturnGsRemovalF(returRemoval);
  1700. //添加子表信息
  1701. askGoodsMapper.addReturnGsRemoval(returRemoval);
  1702. }
  1703. }
  1704. }
  1705. }
  1706. }
  1707. /**
  1708. * 销售发货跑数据
  1709. * */
  1710. @Override
  1711. public void marketReturn() {
  1712. //查询单据id
  1713. List<ReturRemoval> list = askGoodsMapper.getOutgoingReturn();
  1714. for (ReturRemoval returRemoval : list) {
  1715. CreateBOLOutStock(returRemoval.getRemovalCode(),"李兆峰");
  1716. }
  1717. }
  1718. /**
  1719. * 入库导出
  1720. * @param askGoods 参数
  1721. * @param response 参数
  1722. * @return 返回结果
  1723. */
  1724. @Override
  1725. public void getStorage(AskGoods askGoods, HttpServletResponse response) {
  1726. try{
  1727. //导出数据汇总
  1728. List<List<Object>> sheetDataList = new ArrayList<>();
  1729. //表头数据
  1730. List<Object> head = Arrays.asList("物料编号", "供应商id", "连翻号", "生产日期", "生产批次", "容量", "工序", "序列号", "类型","用户编号","部门编号","库位编号","生成日期","入库单编号","WBS","采购订单号","所属公司","采购数量","传输状态0成功1失败");
  1731. //查询条件
  1732. List<MarketReturn> list1 = askGoodsMapper.getMarketList();
  1733. //查询数据
  1734. List<Map<String, Object>> list = askGoodsMapper.getStorage(list1);
  1735. sheetDataList.add(head);
  1736. for(Map<String, Object> userMap : list){
  1737. List<Object> listSheet = new ArrayList<>();
  1738. for(String key: userMap.keySet()){
  1739. listSheet.add(userMap.get(key));
  1740. }
  1741. sheetDataList.add(listSheet);
  1742. }
  1743. //当前时间
  1744. Date time = new Date();
  1745. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss");
  1746. ExcelUtils.export(response, "出库流水数据导出" + sdf.format(time), sheetDataList);
  1747. }catch (Exception e){
  1748. e.printStackTrace();
  1749. }
  1750. }
  1751. /**
  1752. * 入库错误信息回调
  1753. * */
  1754. @Override
  1755. public void storageReturnError() {
  1756. List<Error> list = askGoodsMapper.getStorageReturnError();
  1757. for (Error error : list) {
  1758. queryListService.anew(error);
  1759. }
  1760. }
  1761. /**
  1762. * 移库错误信息回调
  1763. * */
  1764. @Override
  1765. public void parkingReturnError() {
  1766. List<Error> list = askGoodsMapper.parkingReturnError();
  1767. for (Error error : list) {
  1768. queryListService.anew(error);
  1769. }
  1770. }
  1771. /**
  1772. * 移库跑数据
  1773. * */
  1774. @Override
  1775. public void shiftingParkingReturn() {
  1776. //查询单据id
  1777. List<WarehouseTransfer> list = askGoodsMapper.shiftingParkingReturn();
  1778. for (WarehouseTransfer returRemoval : list) {
  1779. CreateGMReqOutStock(returRemoval.getWarehouseTransferCode(),"李兆峰");
  1780. }
  1781. }
  1782. /**
  1783. * 其它入库错误信息回调
  1784. * */
  1785. @Override
  1786. public void otherWarehousingReturnError() {
  1787. List<Error> list = askGoodsMapper.otherWarehousingReturnError();
  1788. for (Error error : list) {
  1789. queryListService.anew(error);
  1790. }
  1791. }
  1792. /**
  1793. * 转JSON
  1794. * */
  1795. @Override
  1796. public void jsonError() {
  1797. List<Error> errorList = askGoodsMapper.getJsonError();
  1798. for (Error error : errorList) {
  1799. System.out.println("字符串为:");
  1800. System.out.println(error.getDataVal());
  1801. JSONObject jsonObject = JSONObject.parseObject(error.getDataVal());
  1802. JSONObject jsonObject1 = JSONObject.parseObject(jsonObject.get("strJson").toString());
  1803. JSONObject jsonObject2 = new JSONObject();
  1804. jsonObject2.put("strJson",jsonObject1.toJSONString());
  1805. System.out.println("toJsonString字符串为:");
  1806. System.out.println(jsonObject2.toJSONString());
  1807. error.setDataVal(jsonObject2.toJSONString());
  1808. //修改
  1809. askGoodsMapper.updJSONError(error);
  1810. }
  1811. }
  1812. @Override
  1813. public void ProductionReturnError() {
  1814. }
  1815. /**
  1816. * 从父子表存入GS返回数据/出库回传
  1817. * */
  1818. @Override
  1819. public void mergeGs() {
  1820. //查询父表信息
  1821. List<ReturRemoval> list = askGoodsMapper.getMergeGsF();
  1822. for (ReturRemoval returRemoval : list) {
  1823. //存入父表信息
  1824. ReturRemoval returRemoval1 = new ReturRemoval()
  1825. .setDocumentId(returRemoval.getAskGoodsId())//单据id1
  1826. .setRemovalCode(codeGenerateCk())//出库单编号1
  1827. .setSourceType(returRemoval.getSourceType())//来源类型1
  1828. .setMoveType(returRemoval.getMoveType())//移动类型1
  1829. .setDeliveryType(returRemoval.getDeliveryType());//交货类型(DE交货,RD退货)1
  1830. //查询子表信息
  1831. List<ReturRemoval> list1 = askGoodsMapper.getMergeGsZ(returRemoval);
  1832. for (ReturRemoval removal : list1) {
  1833. //存入子表信息
  1834. ReturRemoval returRemoval2 = new ReturRemoval()
  1835. .setDocumentId(returRemoval.getAskGoodsId())//要货申请单id
  1836. .setMaterialId(removal.getMaterialId())//物料id
  1837. .setWbs(removal.getWbs())//wbs
  1838. .setNum(removal.getNum())//出库数量
  1839. .setEntryNumber(removal.getEntryNumber())//分录号
  1840. .setDocumentPointsId(" ")//分录单id
  1841. .setStorageLocationCode("D2-3-2");//库存编号
  1842. //添加子表信息
  1843. askGoodsMapper.addReturnGsRemoval(returRemoval2);
  1844. }
  1845. //添加父表信息
  1846. askGoodsMapper.addReturnGsRemovalF(returRemoval1);
  1847. }
  1848. }
  1849. /**
  1850. * 移库获取单据物料code分录号数量
  1851. * */
  1852. @Override
  1853. public void jsonErrorParking() {
  1854. //获取数据
  1855. List<Error> errorList = askGoodsMapper.getjsonErrorParking();
  1856. for (Error error : errorList) {
  1857. System.out.println("字符串为:");
  1858. System.out.println(error.getDataVal());
  1859. JSONObject jsonObject = JSONObject.parseObject(error.getDataVal());
  1860. JSONObject jsonObject1 = JSONObject.parseObject(jsonObject.get("strJson").toString());
  1861. List<JSONObject> bilLs = (List<JSONObject>) jsonObject1.get("BILLs");
  1862. for (JSONObject bilL : bilLs) {
  1863. List<JSONObject> billItems = (List<JSONObject>) bilL.get("BillItems");
  1864. for (JSONObject billItem : billItems) {
  1865. String WMSCode = bilL.get("WMSCode").toString();
  1866. String Quantity = billItem.get("Quantity").toString();
  1867. String Material = billItem.get("Material").toString();
  1868. String GMReqBillItemID = billItem.get("GMReqBillItemID").toString();
  1869. //查询物料code
  1870. String code = askGoodsMapper.getMaterialCode(Material);
  1871. error.setOrderNumber(WMSCode);//单号
  1872. error.setMaterialCode(code);//物料code
  1873. error.setNum(Quantity);//数量
  1874. error.setClassify(GMReqBillItemID);//分录号
  1875. askGoodsMapper.updErrorParking(error);//修改error
  1876. }
  1877. }
  1878. }
  1879. }
  1880. /**
  1881. * 批量回调 生产收货接口文档/报工单 w
  1882. */
  1883. @Override
  1884. public void getCallWorkOrder() {
  1885. //查询入库返回GS表信息
  1886. List<Map<String, Object>> list = askGoodsMapper.getCallWorkOrder();
  1887. if(list.size() != 0) {
  1888. //入库回传 5
  1889. for (Map<String, Object> map : list) {
  1890. //查询用户信息
  1891. String userName = askGoodsMapper.getUserName(map.get("UserName").toString());
  1892. CreateGRReqInStock(map.get("storageCode").toString(),userName);
  1893. }
  1894. }
  1895. }
  1896. @Override
  1897. public void getCallback() {
  1898. List<ReturRemoval> list = askGoodsMapper.getCallback();
  1899. if(list.size() != 0) {
  1900. for(ReturRemoval returRemoval : list){
  1901. plugOutRemoval(returRemoval.getDocumentId(), returRemoval.getName());
  1902. }
  1903. }
  1904. }
  1905. /**
  1906. * error错误信息全部跑调用错误回传
  1907. * */
  1908. @Override
  1909. public void errorParkingReturn() {
  1910. List<Error> list = askGoodsMapper.getErrorParkingReturn();
  1911. for (Error error : list) {
  1912. queryListService.anew(error);
  1913. }
  1914. }
  1915. /**
  1916. * 批量回调 入库回传
  1917. */
  1918. @Override
  1919. public void getCallPlugOutWarehousing() {
  1920. //查询入库返回GS表信息
  1921. List<Map<String, Object>> list = askGoodsMapper.getCallPlugOutWarehousing();
  1922. if(list.size() != 0) {
  1923. //入库回传 5
  1924. for (Map<String, Object> map : list) {
  1925. //查询用户信息
  1926. String userName = askGoodsMapper.getUserName(map.get("UserName").toString());
  1927. warehousingService.plugOutWarehousing(map.get("orderNumber").toString() + ",", userName);//入库回传
  1928. }
  1929. }
  1930. }
  1931. @Override
  1932. public void test() {
  1933. AskGoods askGoods = new AskGoods();
  1934. List<AskGoods> list = askGoodsMapper.getAskGoodsMaterialTest(askGoods);
  1935. for(AskGoods askGoods1 : list) {
  1936. Inventory inventory = new Inventory()
  1937. .setMaterialId(askGoods1.getMaterialId())
  1938. .setCompanyCode(askGoods1.getCompanyNumber())
  1939. .setAmount(askGoods1.getNum())
  1940. .setWbs(askGoods1.getWbs());
  1941. List<Map<String, Object>> list1 = queryListMapper.storageLocationNum(inventory);
  1942. if(list1.size() == 0){
  1943. continue;
  1944. }
  1945. String aaa = "8130";
  1946. String bbb = "000000";
  1947. if(askGoods1.getCompanyNumber().equals("8400")){
  1948. aaa = "8400";
  1949. bbb = "100000";
  1950. }
  1951. if(list1.get(0).get("storageLocationCode").equals("1")){
  1952. continue;
  1953. }
  1954. AskGoods askGoods2 = new AskGoods().setUniqueCode("1111")
  1955. .setSupplierId("EC13437")
  1956. .setSerial(bbb)
  1957. .setWllbCode(list1.get(0).get("code").toString())
  1958. .setProducDate("20230514")
  1959. .setAskGoodsId(askGoods1.getAskGoodsId())
  1960. .setType("非生产领料")
  1961. .setStorageLocationCode(list1.get(0).get("storageLocationCode").toString())
  1962. .setNum(askGoods1.getNum())
  1963. .setUserId("27")
  1964. .setDepartment("000300020001")
  1965. .setCompanyNumber(askGoods1.getCompanyNumber())
  1966. .setWbs(askGoods1.getWbs())
  1967. .setEntryNumber(askGoods1.getEntryNumber());
  1968. askGoodsMapper.addAskGoodsVitrual(askGoods2);
  1969. }
  1970. }
  1971. @Override
  1972. public void testTwo() {
  1973. List<Map<String, Object>> list1 = queryListMapper.getTestTwo();
  1974. for(Map<String, Object> map : list1){
  1975. Map<String, Object> map1 = OutOfLibrary("1111", "非生产领料", map.get("ask_goods_id").toString(), "李兆峰");
  1976. // System.out.println(map1.get("data"));
  1977. if(map1.get("data") != null){
  1978. // System.out.println("-------------------------------------");
  1979. // System.out.println("测试");
  1980. // System.out.println("-------------------------------------");
  1981. // plugOutRemoval(map1.get("data").toString(), "王孝苗");
  1982. }
  1983. }
  1984. }
  1985. /**
  1986. * 出库单生成
  1987. * @return
  1988. */
  1989. public String codeGenerateCk(){
  1990. StringBuilder stringBuilder = new StringBuilder("YHCK");
  1991. Date date = new Date();
  1992. SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
  1993. stringBuilder.append(sdf.format(date));
  1994. int count = askGoodsMapper.getReturnRemovalCount();
  1995. for(int i = 0; i < 4 - (count + "").length(); i++){
  1996. stringBuilder.append("0");
  1997. }
  1998. return (stringBuilder.append(count + 1)).toString();
  1999. }
  2000. }