AskGoodsServiceImpl.java 84 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534
  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.util.DateUtil;
  12. import com.tld.util.HttpClientUtil;
  13. import org.redisson.api.RLock;
  14. import org.redisson.api.RedissonClient;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import javax.servlet.http.HttpServletRequest;
  19. import javax.servlet.http.HttpServletResponse;
  20. import java.text.SimpleDateFormat;
  21. import java.util.*;
  22. @Service
  23. public class AskGoodsServiceImpl implements AskGoodsService {
  24. @Autowired
  25. private AskGoodsMapper askGoodsMapper;
  26. //redis锁
  27. @Autowired
  28. private RedissonClient redissonClient;
  29. //入库
  30. @Autowired
  31. private WarehousingMapper warehousingMapper;
  32. @Autowired
  33. private ErrorMapper errorMapper;
  34. @Autowired
  35. private DeliveryMapper deliveryMapper;
  36. @Autowired
  37. private DictionaryMapper dictionaryMapper;
  38. @Autowired
  39. private QueryListMapper queryListMapper;
  40. /**
  41. * @Description: 要货申请单(生产领用申请)
  42. * @Param: mapList
  43. * @return: Map<String, Object> 成功失败状态
  44. * @Author: XiaoChen
  45. * @Date: 2023/4/10
  46. */
  47. @Override
  48. @Transactional(rollbackFor = Exception.class)
  49. public Map<String, Object> addAskGoods(List<Map<String,Object>> mapList) {
  50. Map<String, Object> map = new HashMap<>();
  51. try{
  52. List<AskGoods> askGoodsList = new LinkedList<AskGoods>();
  53. for(Map<String,Object> jsonMap:mapList) {
  54. List<Map<String, Object>> list = (List) jsonMap.get("datalist");
  55. for (Map<String, Object> element : list) {
  56. AskGoods ag = new AskGoods();
  57. //父表
  58. ag.setAskGoodsId(jsonMap.get("requestOrderId").toString());
  59. ag.setAskGoodsCode(jsonMap.get("requestOrderNo").toString());
  60. ag.setCompanyNumber(jsonMap.get("companyNo").toString());
  61. ag.setSqrq(jsonMap.get("requestDate").toString());//申请日期
  62. ag.setDepartmentId(jsonMap.get("useDepartment").toString());
  63. ag.setSourceType(jsonMap.get("sourceType").toString());
  64. ag.setMoveType(jsonMap.get("moveType").toString());
  65. ag.setRequestTypeNumber(jsonMap.get("requestTypeNumber").toString());
  66. ag.setRequestTypeName(jsonMap.get("requestTypeName").toString());
  67. ag.setIfCommodity(jsonMap.get("ifCommodity").toString());
  68. //子表
  69. ag.setType("0");
  70. ag.setEntryNumber(element.get("entryNumber").toString());
  71. ag.setProductionCode(element.get("prodOrderNo").toString());
  72. ag.setMaterialId(element.get("materialId").toString());
  73. ag.setWbs(element.get("WBS").toString());
  74. ag.setMeasurementId(element.get("measUnitId").toString());
  75. ag.setNum(element.get("orderCount").toString());
  76. askGoodsList.add(ag);
  77. }
  78. }
  79. for(AskGoods askGoods : askGoodsList) {
  80. // int count = askGoodsMapper.getAskGoods(askGoods);
  81. // if (count != 0) {
  82. // askGoodsMapper.updateAskGoodsNum(askGoods);
  83. // } else {
  84. if (askGoodsMapper.getAskGoodsf(askGoods) == 0) {
  85. askGoodsMapper.addAskGoodsf(askGoods);
  86. }
  87. askGoodsMapper.addAskGoods(askGoods);
  88. // }
  89. askGoodsMapper.addAskGoodsLog(askGoods);
  90. }
  91. //新增日志
  92. Access access = new Access().setType("生产领料信息").setData(JSON.toJSONString(mapList)).setAccessType("0");
  93. dictionaryMapper.addAccess(access);
  94. map.put("status", "0000");
  95. map.put("msg","成功");
  96. }catch (Exception e){
  97. e.printStackTrace();
  98. map.put("status", "0009");
  99. map.put("msg", "服务器请求异常,请稍后再试");
  100. }
  101. return map;
  102. }
  103. @Override
  104. public Map<String, Object> getAskGoodsfList(AskGoods askGoods) {
  105. Map<String, Object> map = new HashMap<>();
  106. try{
  107. List<AskGoods> list = askGoodsMapper.getAskGoodsfList(askGoods);
  108. map.put("data", list);
  109. map.put("msg", "200");
  110. }catch (Exception e){
  111. e.printStackTrace();
  112. map.put("msg", "500");
  113. map.put("errMsg", "失败");
  114. }
  115. return map;
  116. }
  117. @Override
  118. public Map<String, Object> getAskGoodsMaterial(AskGoods askGoods) {
  119. Map<String, Object> map = new HashMap<>();
  120. try{
  121. List<AskGoods> list = askGoodsMapper.getAskGoodsMaterial(askGoods);
  122. List<String> scanNum = new LinkedList<>();
  123. List<String> mapVal = new LinkedList<>();
  124. for(AskGoods askGoods1 : list){
  125. askGoods1.setUniqueCode(askGoods.getUniqueCode());
  126. askGoods1.setWllbCode(askGoods1.getMaterialCode());
  127. scanNum.add(askGoodsMapper.getScanNum(askGoods1));//扫描总数
  128. Inventory inventory = new Inventory()
  129. .setMaterialId(askGoods1.getMaterialId())
  130. .setWbs(askGoods1.getWbs())
  131. .setCompanyCode(askGoods1.getCompanyNumber())
  132. .setGroupBy(askGoods.getGroupBy());
  133. List<Map<String, Object>> inventorVal = queryListMapper.storageLocation(inventory);
  134. if(inventorVal.size() != 0){
  135. mapVal.add(inventorVal.get(0).get("sum").toString());
  136. } else {
  137. mapVal.add("0");
  138. }
  139. }
  140. map.put("scanNum", scanNum);
  141. map.put("sum", mapVal);
  142. map.put("data", list);
  143. map.put("msg", "200");
  144. }catch (Exception e){
  145. e.printStackTrace();
  146. map.put("msg", "500");
  147. map.put("errMsg", "失败");
  148. }
  149. return map;
  150. }
  151. @Override
  152. public Map<String, Object> getMaterialCk(AskGoods askGoods) {
  153. Map<String, Object> map = new HashMap<>();
  154. try{
  155. List<Inventory> list = new LinkedList<>();
  156. for(Inventory inventory : askGoodsMapper.getMaterialCk(askGoods)){
  157. AskGoods askGoods1 = askGoodsMapper.getAsk(inventory);
  158. if(askGoods1 != null){
  159. if(Double.doubleToLongBits(Double.parseDouble(askGoods1.getNum())) != Double.doubleToLongBits(Double.parseDouble(inventory.getAmount())) ){
  160. list.add(inventory);
  161. }
  162. } else {
  163. list.add(inventory);
  164. }
  165. }
  166. map.put("data", list);
  167. map.put("msg", "200");
  168. }catch (Exception e){
  169. e.printStackTrace();
  170. map.put("msg", "500");
  171. map.put("errMsg", "失败");
  172. }
  173. return map;
  174. }
  175. @Override
  176. @Transactional(rollbackFor = Exception.class)
  177. public Map<String, Object> addAskGoodsVitrual(AskGoods askGoods) {
  178. Map<String, Object> map = new HashMap<>();
  179. //redis并发锁
  180. RLock lock = redissonClient.getLock(askGoods.getUniqueCode());
  181. lock.lock();
  182. try{
  183. Map<String, Object> mapVal = askGoodsMapper.getScanIsNot(askGoods);
  184. if(Double.doubleToLongBits(Double.parseDouble(mapVal.get("inventoryNum").toString()) - Double.parseDouble(mapVal.get("virtualNum").toString())) == 0){
  185. map.put("msg", "500");
  186. map.put("errMsg", "已全部出库");
  187. return map;
  188. }
  189. Inventory inventory = askGoodsMapper.getInventory(askGoods); //库存数量
  190. AskGoods askGoods1 = askGoodsMapper.getAsknInfo(askGoods); //要货单数量
  191. int alreadyNum = askGoodsMapper.getAskInfoNumVitrual(askGoods);//已扫描总数
  192. int inventoryAlready = askGoodsMapper.getInventoryAlready(askGoods);//库存已扫描数量
  193. Double inventorySurplus = (Double.parseDouble(inventory.getAmount()) - Double.parseDouble(inventory.getAmountLock())) - inventoryAlready; //库存剩余数量
  194. Double surplusNum = Double.parseDouble(askGoods1.getNum()) - Double.parseDouble(askGoods1.getOutNum()) - alreadyNum; //剩余要扫描数量
  195. if(Double.doubleToLongBits(surplusNum) >= Double.doubleToLongBits(inventorySurplus)){
  196. askGoods.setNum(String.valueOf(inventorySurplus));
  197. } else {
  198. askGoods.setNum(String.valueOf(surplusNum));
  199. }
  200. askGoods.setStorageLocationCode(inventory.getStorageLocationCode());//库存编号
  201. askGoodsMapper.addAskGoodsVitrual(askGoods);
  202. map.put("msg", "200");
  203. }catch (Exception e){
  204. e.printStackTrace();
  205. map.put("msg", "500");
  206. map.put("errMsg", "失败");
  207. } finally {
  208. //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
  209. if (lock.isLocked() && lock.isHeldByCurrentThread()) {
  210. //释放锁
  211. lock.unlock();
  212. }
  213. }
  214. return map;
  215. }
  216. @Override
  217. @Transactional(rollbackFor = Exception.class)
  218. public Map<String, Object> OutOfLibrary(String uniqueCode, String type, String askGoodsId) {
  219. Map<String, Object> map = new HashMap<>();
  220. //redis并发锁
  221. RLock lock = redissonClient.getLock(uniqueCode);
  222. lock.lock();
  223. try{
  224. //出库流水
  225. String removalCode = codeGenerateCk();
  226. List<AskGoods> list = askGoodsMapper.getVirtualUniqueCode(uniqueCode, type, askGoodsId);
  227. for(AskGoods askGoods : list){
  228. askGoods.setStorageCode(removalCode);
  229. askGoods.setCompanyNumber(askGoods.getAccountSleeve());
  230. Inventory inventory = askGoodsMapper.getInventory(askGoods);
  231. if(inventory == null){
  232. throw new Exception("库存不存在");
  233. }
  234. //如果出库库存等于虚拟表库存则删除此库存
  235. if(Double.parseDouble(askGoods.getNum()) == Double.parseDouble(inventory.getAmount())){
  236. askGoodsMapper.deleteInventory(inventory);
  237. } else {
  238. inventory.setAmount(askGoods.getNum());
  239. askGoodsMapper.updateInventory(inventory);
  240. }
  241. String materialId = askGoodsMapper.getMaterialId(askGoods.getWllbCode());//查询物料id
  242. AskGoods askGoods1 = askGoodsMapper.getAskDetailed(askGoodsId, materialId, askGoods.getEntryNumber());//查询要料申请单内容
  243. ReturRemoval returRemoval = new ReturRemoval()
  244. .setMaterialId(materialId)
  245. .setDocumentId(askGoodsId)
  246. .setWbs(askGoods1.getWbs())
  247. .setNum(askGoods.getNum())
  248. .setEntryNumber(askGoods1.getEntryNumber())
  249. .setDocumentPointsId(askGoods1.getId())
  250. .setStorageLocationCode(askGoods.getStorageLocationCode());
  251. askGoodsMapper.addRemoval(askGoods);//插入出库流水
  252. askGoodsMapper.deleteVirtual(askGoods.getId());//删除已出虚拟表库存
  253. askGoodsMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息
  254. askGoodsMapper.updateOutNum(askGoods.getNum(), askGoodsId, materialId);//修改出库数量
  255. }
  256. //查询要货单父级信息
  257. AskGoods askGoods3 = askGoodsMapper.getAskDetailedF(askGoodsId);
  258. ReturRemoval returRemoval1 = new ReturRemoval()
  259. .setDocumentId(askGoods3.getAskGoodsId())
  260. .setRemovalCode(removalCode)
  261. .setSourceType(askGoods3.getSourceType())
  262. .setMoveType(askGoods3.getMoveType());
  263. askGoodsMapper.addReturnGsRemovalF(returRemoval1);//新增返回gs数据父表信息
  264. map.put("data", askGoods3.getAskGoodsId());
  265. map.put("msg", "200");
  266. }catch (Exception e){
  267. e.printStackTrace();
  268. map.put("msg", "500");
  269. map.put("errMsg", "失败");
  270. } finally {
  271. //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
  272. if (lock.isLocked() && lock.isHeldByCurrentThread()) {
  273. //释放锁
  274. lock.unlock();
  275. }
  276. }
  277. return map;
  278. }
  279. /**
  280. * 出库回传
  281. * @param removalCode 单据id
  282. */
  283. @Override
  284. @Transactional(rollbackFor = Exception.class)
  285. public void plugOutRemoval(String removalCode, String realName) {
  286. try{
  287. for(String warehouseWhere : askGoodsMapper.getWarehouseWhere(removalCode)){
  288. List<Map<String, Object>> mapList = askGoodsMapper.plugOutRemoval(removalCode);
  289. if(mapList.size() >0 ) {
  290. JSONObject strJson = new JSONObject();//4
  291. //父表
  292. strJson.put("GIReqBillID", mapList.get(0).get("askGoodsId").toString());//要货单id
  293. strJson.put("WMSID", mapList.get(0).get("id").toString());//出库单id
  294. strJson.put("WMSCode", mapList.get(0).get("removalCode").toString());//出库单编号
  295. strJson.put("WareHouse", warehouseWhere);//仓库ID
  296. strJson.put("SourceBillDate",DateUtil.dateConversion(mapList.get(0).get("scrq").toString()));//业务日期
  297. strJson.put("SourceType", mapList.get(0).get("sourceType").toString());//来源类型
  298. strJson.put("MoveType", mapList.get(0).get("moveType").toString());//移动类型
  299. strJson.put("IsRed", 0);//是否红单1
  300. strJson.put("Creator", realName);//制单人姓名1
  301. //子表
  302. for (Map<String, Object> map : askGoodsMapper.getRemovalz(mapList.get(0).get("askGoodsId").toString(), warehouseWhere)) {
  303. List<JSONObject> list = new LinkedList<>();//5
  304. JSONObject BillItems = new JSONObject();//6
  305. List<JSONObject> retunList = new LinkedList<>();//3
  306. JSONObject ReqOutStocks = new JSONObject();//2
  307. JSONObject returnData = new JSONObject();//1
  308. BillItems.put("WMSItemID", map.get("id"));//分录ID
  309. BillItems.put("GIReqBillID", map.get("askGoodsId"));//要货申请单ID
  310. BillItems.put("GIReqBillItemID", map.get("entryNumber"));//要货申请明细ID
  311. BillItems.put("Material", map.get("materialId"));//物料id
  312. BillItems.put("Quantity", map.get("num"));//数量
  313. BillItems.put("FlexField1", map.get("wbsId"));//wbs
  314. BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号
  315. BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称
  316. list.add(BillItems);//*1 子表信息放在集合中
  317. strJson.put("BillItems", list);//*2 将子表集合放在父表中
  318. retunList.add(strJson);//*3 将父子表信息放在集合中
  319. ReqOutStocks.put("ReqOutStocks",retunList);//*4 将放集合的数据封装到ReqOutStocks
  320. returnData.put("strJson", JSON.toJSONString(ReqOutStocks));//*5 将封装好的ReqOutStocks放进strJson
  321. System.out.println("封装好的:"+returnData);
  322. //回传地址
  323. String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateProductiveOutStock";
  324. // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateProductiveOutStock";
  325. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  326. Map<String, Object> result = httpClientUtil1.doPost(url, returnData);
  327. //如果失败存入错误信息
  328. Error error = new Error();
  329. if(Integer.parseInt(result.get("msg").toString()) != 200){
  330. //如果失败存入报错信息跟数据
  331. error.setErrorInfo(result.get("data").toString());
  332. error.setUrl(url);
  333. error.setDataVal(returnData.toJSONString()).setType("出库回传");
  334. //修改流水传输状态
  335. for(Map<String, Object> maps : askGoodsMapper.plugOutRemoval(removalCode)){
  336. askGoodsMapper.updateRemoval(maps.get("removalCode").toString(), null);
  337. }
  338. errorMapper.addError(error);
  339. }else {
  340. JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString());
  341. JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString());
  342. if ( jsonObject1.get("State").toString().equals("0") ){
  343. //如果失败存入报错信息跟数据
  344. error.setErrorInfo(jsonObject1.get("Msg").toString());
  345. error.setUrl(url);
  346. error.setDataVal(returnData.toJSONString()).setType("出库回传");
  347. errorMapper.addError(error);
  348. //修改流水传输状态
  349. for(Map<String, Object> maps : askGoodsMapper.plugOutRemoval(removalCode)){
  350. askGoodsMapper.updateRemoval(maps.get("removalCode").toString(), null);
  351. }
  352. }else {
  353. List<JSONObject> data1 = (List<JSONObject>) JSONObject.parse(jsonObject1.get("data").toString());
  354. for (JSONObject map1 : data1) {
  355. if (map1.get("State").toString().equals("0")){
  356. for(JSONObject jsonObject2 : retunList){
  357. if(jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map1.get("WareHouse"))){
  358. //如果失败存入报错信息跟数据
  359. List<JSONObject> retunList2 = new LinkedList<>();
  360. retunList2.add(jsonObject2);
  361. JSONObject ReqOutStocks1 = new JSONObject();
  362. ReqOutStocks1.put("ReqOutStocks", retunList2);
  363. JSONObject ReqOutStocks2 = new JSONObject();
  364. ReqOutStocks2.put("strJson",ReqOutStocks1);
  365. //如果失败存入报错信息跟数据
  366. error.setErrorInfo(map1.get("FailReason").toString());
  367. error.setUrl(url);
  368. error.setDataVal(ReqOutStocks2.toString()).setType("出库回传");
  369. errorMapper.addError(error);
  370. List<JSONObject> list1 = (List<JSONObject>) jsonObject2.get("BillItems");
  371. for(JSONObject jsonObject3 : list1){
  372. MaterialClass material = warehousingMapper.getMaterial(new Notice().setMaterialId(jsonObject3.get("Material").toString()));
  373. askGoodsMapper.updateRemoval(jsonObject2.get("WMSCode").toString(), material.getWllbCode());
  374. }
  375. }
  376. }
  377. }
  378. }
  379. }
  380. }
  381. //添加记录到tld_access
  382. String names = "出库回传" ;
  383. String accessType = "1" ;
  384. String returnGsRemoval = returnData.toString() ;
  385. askGoodsMapper.addAccess(names,returnGsRemoval,accessType);
  386. }
  387. }
  388. }
  389. //删除父子表信息
  390. askGoodsMapper.delPlugOutRemoval(removalCode);
  391. askGoodsMapper.delRemovalz(removalCode);
  392. }catch (Exception e){
  393. e.printStackTrace();
  394. }
  395. }
  396. @Override
  397. public Map<String, Object> getRemoval(AskGoods askGoods) {
  398. Map<String, Object> map = new HashMap<>();
  399. try{
  400. //查询数据
  401. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  402. PageInfo<AskGoods> list = new PageInfo<>(askGoodsMapper.getRemoval(askGoods));
  403. map.put("data", list);
  404. map.put("msg", "200");
  405. }catch (Exception e){
  406. e.printStackTrace();
  407. map.put("msg", "500");
  408. map.put("errMsg", "失败");
  409. }
  410. return map;
  411. }
  412. @Override
  413. public void export(AskGoods askGoods, HttpServletResponse response) {
  414. try{
  415. //导出数据汇总
  416. List<List<Object>> sheetDataList = new ArrayList<>();
  417. //表头数据
  418. List<Object> head = Arrays.asList("物料名称", "供应商名称", "连番号", "类型", "出库用户", "领用部门", "库位名称", "出库日期", "出库数量","要货单编号","真实姓名","公司名称");
  419. //查询数据
  420. List<Map<String, Object>> list = askGoodsMapper.export(askGoods);
  421. sheetDataList.add(head);
  422. for(Map<String, Object> userMap : list){
  423. List<Object> listSheet = new ArrayList<>();
  424. for(String key: userMap.keySet()){
  425. listSheet.add(userMap.get(key));
  426. }
  427. sheetDataList.add(listSheet);
  428. }
  429. //当前时间
  430. Date time = new Date();
  431. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss");
  432. ExcelUtils.export(response, "出库流水数据导出" + sdf.format(time), sheetDataList);
  433. }catch (Exception e){
  434. e.printStackTrace();
  435. }
  436. }
  437. @Override
  438. public Map<String, Object> getAskGoodsVitrual(String uniqueCode, String type) {
  439. Map<String, Object> map = new HashMap<>();
  440. try{
  441. List<AskGoods> list = askGoodsMapper.getAskGoodsVitrual(uniqueCode, type);
  442. map.put("data", list);
  443. map.put("msg", "200");
  444. }catch (Exception e){
  445. e.printStackTrace();
  446. map.put("msg", "500");
  447. map.put("errMsg", "失败");
  448. }
  449. return map;
  450. }
  451. @Override
  452. @Transactional(rollbackFor = Exception.class)
  453. public Map<String, Object> delAskGoodsVitrual(String id, String type) {
  454. Map<String, Object> map = new HashMap<>();
  455. try{
  456. askGoodsMapper.delAskGoodsVitrual(id, type);
  457. map.put("msg", "200");
  458. }catch (Exception e){
  459. e.printStackTrace();
  460. map.put("msg", "500");
  461. map.put("errMsg", "失败");
  462. }
  463. return map;
  464. }
  465. @Override
  466. public Map<String, Object> getGoodsHalf(AskGoods askGoods) {
  467. Map<String, Object> map = new HashMap<>();
  468. try{
  469. //查询数据
  470. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  471. PageInfo<AskGoods> list = new PageInfo<>(askGoodsMapper.getGoodsHalf(askGoods));
  472. for (AskGoods goods : list.getList()) {
  473. String amount = askGoodsMapper.getAmount(goods);
  474. goods.setAmount(amount);
  475. }
  476. map.put("data", list);
  477. map.put("msg", "200");
  478. }catch (Exception e){
  479. e.printStackTrace();
  480. map.put("msg", "500");
  481. map.put("errMsg", "失败");
  482. }
  483. return map;
  484. }
  485. @Override
  486. public Map<String, Object> getRemovalHalfProduct(AskGoods askGoods) {
  487. Map<String, Object> map = new HashMap<>();
  488. try{
  489. //查询数据
  490. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  491. PageInfo<AskGoods> list = new PageInfo<>(askGoodsMapper.getRemovalHalfProduct(askGoods));
  492. map.put("data", list);
  493. map.put("msg", "200");
  494. }catch (Exception e){
  495. e.printStackTrace();
  496. map.put("msg", "500");
  497. map.put("errMsg", "失败");
  498. }
  499. return map;
  500. }
  501. @Override
  502. public void getRemovalHalfProductExcel(AskGoods askGoods, HttpServletResponse response) {
  503. try{
  504. //导出数据汇总
  505. List<List<Object>> sheetDataList = new ArrayList<>();
  506. //表头数据
  507. List<Object> head = Arrays.asList("要货单", "出库编号","物料编号","物料名称", "出库数量", "出库人", "领用部门", "WBS编号", "出库时间","真实姓名","所属公司");
  508. //查询数据
  509. List<Map<String, Object>> list = askGoodsMapper.getRemovalHalfProductExcel(askGoods);
  510. sheetDataList.add(head);
  511. for(Map<String, Object> userMap : list){
  512. List<Object> listSheet = new ArrayList<>();
  513. for(String key: userMap.keySet()){
  514. listSheet.add(userMap.get(key));
  515. }
  516. sheetDataList.add(listSheet);
  517. }
  518. //当前时间
  519. Date time = new Date();
  520. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss");
  521. ExcelUtils.export(response, "半成品出库流水数据导出" + sdf.format(time), sheetDataList);
  522. }catch (Exception e){
  523. e.printStackTrace();
  524. }
  525. }
  526. @Override
  527. public Map<String, Object> getRemovalHalf(AskGoods askGoods) {
  528. Map<String, Object> map = new HashMap<>();
  529. try{
  530. //查询数据
  531. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  532. PageInfo<AskGoods> list = new PageInfo<>(askGoodsMapper.getRemovalHalf(askGoods));
  533. map.put("data", list);
  534. map.put("msg", "200");
  535. }catch (Exception e){
  536. e.printStackTrace();
  537. map.put("msg", "500");
  538. map.put("errMsg", "失败");
  539. }
  540. return map;
  541. }
  542. @Override
  543. public void getRemovalHalfExcel(AskGoods askGoods, HttpServletResponse response) {
  544. try{
  545. //导出数据汇总
  546. List<List<Object>> sheetDataList = new ArrayList<>();
  547. //表头数据
  548. List<Object> head = Arrays.asList("交货单编号","物料名称", "出库数量", "用户名称", "出库时间", "公司名称", "客户名称", "出库单编号", "WBS","真实姓名");
  549. //查询数据
  550. List<Map<String, Object>> list = askGoodsMapper.getRemovalHalfExcel(askGoods);
  551. sheetDataList.add(head);
  552. for(Map<String, Object> userMap : list){
  553. List<Object> listSheet = new ArrayList<>();
  554. for(String key: userMap.keySet()){
  555. listSheet.add(userMap.get(key));
  556. }
  557. sheetDataList.add(listSheet);
  558. }
  559. //当前时间
  560. Date time = new Date();
  561. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss");
  562. ExcelUtils.export(response, "产成品出库流水数据导出" + sdf.format(time), sheetDataList);
  563. }catch (Exception e){
  564. e.printStackTrace();
  565. }
  566. }
  567. /**
  568. * @Description: 其他出库
  569. * @Param: AskGoods askGoods
  570. * @return: Map<String, Object> map
  571. * @Author: XiaoChen
  572. * @Date: 2023/4/15
  573. */
  574. @Override
  575. public Map<String, Object> otherAskGoods(AskGoods askGoods) {
  576. Map<String, Object> map = new HashMap<>();
  577. //redis并发锁
  578. RLock lock = redissonClient.getLock(askGoods.getWllbCode() + askGoods.getStorageLocationCode());
  579. lock.lock();
  580. try{
  581. //查询物料信息
  582. MaterialClass material = warehousingMapper.getMaterial(new Notice().setMaterialCode(askGoods.getWllbCode()));
  583. if(material.getPartType().equals("原材料")){
  584. if(askGoods.getSerial() == null) {
  585. map.put("msg", "500");
  586. map.put("errMsg", "此物料是" + material.getPartType() + "连番号参数不能为空!");
  587. return map;
  588. }
  589. } else if(material.getPartType().equals("产成品")) {
  590. if(askGoods.getAttribute() == null) {
  591. map.put("msg", "500");
  592. map.put("errMsg", "此物料是" + material.getPartType() + "属性参数不能为空!");
  593. return map;
  594. }
  595. } else if(material.getPartType().equals("半成品")) {
  596. askGoods.setProducDate(null);
  597. if(askGoods.getStorageLocationCode() == null) {
  598. map.put("msg", "500");
  599. map.put("errMsg", "此物料是" + material.getPartType() + "库位参数不能为空!");
  600. return map;
  601. }
  602. }
  603. askGoods.setMaterialId(material.getTldId());
  604. //查询库存
  605. List<Inventory> inventory = askGoodsMapper.getInventoryInfo(askGoods);
  606. if(inventory.size() == 0){
  607. map.put("msg", "500");
  608. map.put("errMsg", "未查询到该库位的库存");
  609. return map;
  610. }
  611. if(Double.parseDouble(inventory.get(0).getAmount()) < Double.parseDouble(askGoods.getNum())){
  612. map.put("msg", "500");
  613. map.put("errMsg", "库存数量不足");
  614. return map;
  615. }
  616. //如果出库库存等于虚拟表库存则删除此库存
  617. if(Double.parseDouble(askGoods.getNum()) == Double.parseDouble(inventory.get(0).getAmount())){
  618. askGoodsMapper.deleteInventory(inventory.get(0));
  619. } else {
  620. inventory.get(0).setAmount(askGoods.getNum());
  621. askGoodsMapper.updateInventory(inventory.get(0));
  622. }
  623. String removalCode = codeGenerateCk();
  624. if(material.getPartType().equals("半成品")){
  625. //新增半成品出库流水
  626. AskGoods askGoods1 = new AskGoods()
  627. .setWllbCode(material.getWllbCode())
  628. .setNum(askGoods.getNum())
  629. .setUserId(askGoods.getUserId())
  630. .setAskGoodsId("")
  631. .setDepartment(askGoods.getDepartment())
  632. .setWbs(askGoods.getWbs())
  633. .setStorageCode(removalCode)
  634. .setStorageLocationCode(askGoods.getStorageLocationCode())
  635. .setCompanyNumber(askGoods.getAccountSleeve());//新增出库流水
  636. warehousingMapper.addRemovalHalfProduct(askGoods1);
  637. } else if(material.getPartType().equals("产成品")){
  638. //产成品销售流水
  639. Delivery delivery1 = new Delivery()
  640. .setMaterialCode(material.getWllbCode()) //物料code
  641. .setOutNum(askGoods.getNum()) //出库数量
  642. .setUserId(askGoods.getUserId()) //用户id
  643. .setDeliveryId("") //销售单id
  644. .setCompanyNumber(askGoods.getAccountSleeve()) //公司编号
  645. .setCustomerCode("")//客户编号
  646. .setWbs(askGoods.getWbs())
  647. .setStorageCode(removalCode);
  648. deliveryMapper.addRemovalHalf(delivery1); //流水录入
  649. } else {
  650. askGoods.setSupplierId(inventory.get(0).getSupplierId());
  651. askGoods.setType("其他出库");
  652. askGoods.setProducDate(inventory.get(0).getProducDate());
  653. askGoods.setSerial(inventory.get(0).getSerial());
  654. askGoods.setStorageCode(removalCode);
  655. askGoods.setWbs(askGoods.getWbs());
  656. askGoodsMapper.addRemoval(askGoods);//插入出库流水
  657. }
  658. //新增返回gs信息
  659. ReturRemoval returRemoval = new ReturRemoval()
  660. .setMaterialId(material.getTldId())
  661. .setWbs(askGoods.getWbs())
  662. .setNum(askGoods.getNum())
  663. .setStorageLocationCode(inventory.get(0).getStorageLocationCode())
  664. .setRemovalCode(removalCode)
  665. .setSourceType(askGoods.getSourceType())
  666. .setMoveType(askGoods.getMoveType())
  667. .setDocumentId(askGoods.getAskGoodsId())
  668. .setEntryNumber(askGoods.getEntryNumber())
  669. .setDocumentPointsId(askGoods.getId());
  670. askGoodsMapper.updateEnquiryOutNum(askGoods); //增加数量
  671. askGoodsMapper.addReturnGsRemovalF(returRemoval);//新增返回gs数据父表信息
  672. askGoodsMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息
  673. map.put("data", removalCode);
  674. map.put("msg", "200");
  675. }catch (Exception e){
  676. map.put("msg", "500");
  677. map.put("errMsg", "失败");
  678. e.printStackTrace();
  679. } finally {
  680. //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
  681. if (lock.isLocked() && lock.isHeldByCurrentThread()) {
  682. //释放锁
  683. lock.unlock();
  684. }
  685. }
  686. return map;
  687. }
  688. @Override
  689. @Transactional(rollbackFor = Exception.class)
  690. public Map<String, Object> delAskGoods(String id, HttpServletRequest request) {
  691. Map<String, Object> map = new HashMap<>();
  692. try{
  693. String userId = request.getHeader("userId");
  694. Map<String, Object> mapVal = askGoodsMapper.getDelAskGoods(id);
  695. if(Double.parseDouble(mapVal.get("out_num").toString()) > 0){
  696. map.put("msg", "500");
  697. map.put("errMsg", "此单据已出库!");
  698. return map;
  699. }
  700. LogData logData = new LogData()
  701. .setUserId(userId)
  702. .setData(mapVal.toString())
  703. .setType("0")
  704. .setDocumentType("生产领料");
  705. dictionaryMapper.addLogdata(logData);
  706. askGoodsMapper.delAskGoods(id);
  707. map.put("msg","200");
  708. } catch (Exception e) {
  709. e.printStackTrace();
  710. map.put("msg", "500");
  711. map.put("errMsg", "服务器请求异常,请稍后再试");
  712. }
  713. return map;
  714. }
  715. /**
  716. * 销售发货单接口
  717. * @return
  718. */
  719. @Override
  720. public void CreateBOLOutStock(String removalCode, String realName) {
  721. try{
  722. String documentId = null ;
  723. for(String warehouseWhere : askGoodsMapper.getWarehouseWheres(removalCode)){
  724. List<Map<String, Object>> mapList = askGoodsMapper.getGsRemoval(removalCode);
  725. if(mapList.size() >0 ) {
  726. JSONObject strJson = new JSONObject();
  727. //父表
  728. documentId = mapList.get(0).get("askGoodsId").toString();
  729. strJson.put("BOLID", mapList.get(0).get("askGoodsId").toString());//要货单id
  730. strJson.put("WMSID", mapList.get(0).get("id").toString());//出库单id
  731. strJson.put("WMSCode", mapList.get(0).get("removalCode").toString());//出库单编号
  732. strJson.put("WareHouse", warehouseWhere);//仓库ID
  733. strJson.put("SourceBillDate",DateUtil.dateConversion(mapList.get(0).get("scrq").toString()));//业务日期
  734. strJson.put("SourceType", mapList.get(0).get("sourceType").toString());//来源类型
  735. strJson.put("MoveType", mapList.get(0).get("moveType").toString());//移动类型
  736. strJson.put("IsRed", 0);//是否红单1
  737. strJson.put("Creator", realName);//制单人姓名1
  738. //子表
  739. for (Map<String, Object> map : askGoodsMapper.getRemovalz(mapList.get(0).get("askGoodsId").toString(), warehouseWhere)) {
  740. List<JSONObject> list = new LinkedList<>();
  741. JSONObject BillItems = new JSONObject();
  742. List<JSONObject> retunList = new LinkedList<>();
  743. JSONObject ReqOutStocks = new JSONObject();
  744. JSONObject returnData = new JSONObject();
  745. BillItems.put("WMSItemID", map.get("id"));//分录ID
  746. BillItems.put("BOLID", map.get("askGoodsId"));//要货申请单ID
  747. BillItems.put("BOLItemID", map.get("entryNumber"));//要货申请明细ID
  748. BillItems.put("Material", map.get("materialId"));//物料id
  749. BillItems.put("Quantity", map.get("num"));//数量
  750. BillItems.put("FlexField1", map.get("wbsId"));//wbs
  751. BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号
  752. BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称
  753. list.add(BillItems);
  754. strJson.put("BillItems", list);
  755. retunList.add(strJson);
  756. ReqOutStocks.put("BILLs",retunList);
  757. returnData.put("strJson", JSON.toJSONString(ReqOutStocks));
  758. System.out.println("封装好的:"+returnData);
  759. //回传地址
  760. // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateBOLOutStock";
  761. String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateBOLOutStock";
  762. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  763. Map<String, Object> result = httpClientUtil1.doPost(url, returnData);
  764. //
  765. Error error = new Error();
  766. if(Integer.parseInt(result.get("msg").toString()) != 200){
  767. //如果失败存入报错信息跟数据
  768. error.setErrorInfo(result.get("data").toString());
  769. error.setUrl(url);
  770. error.setDataVal(returnData.toJSONString()).setType("销售出库");
  771. errorMapper.addError(error);
  772. queryListMapper.updateType(removalCode, 1, null);
  773. }else {
  774. JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString());
  775. JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString());
  776. if ( jsonObject1.get("State").toString().equals("0") ){
  777. //如果失败存入报错信息跟数据
  778. error.setErrorInfo(jsonObject1.get("Msg").toString());
  779. error.setUrl(url);
  780. error.setDataVal(returnData.toJSONString()).setType("销售出库");
  781. errorMapper.addError(error);
  782. queryListMapper.updateType(removalCode, 1, null);
  783. }else {
  784. List<JSONObject> data1 = (List<JSONObject>) JSONObject.parse(jsonObject1.get("data").toString());
  785. for (JSONObject map1 : data1) {
  786. if (map1.get("State").toString().equals("0")){
  787. for(JSONObject jsonObject2 : retunList){
  788. if(jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map1.get("WareHouse"))){
  789. //如果失败存入报错信息跟数据
  790. List<JSONObject> retunList2 = new LinkedList<>();
  791. retunList2.add(jsonObject2);
  792. JSONObject ReqOutStocks1 = new JSONObject();
  793. ReqOutStocks1.put("BILLs", retunList2);
  794. JSONObject ReqOutStocks2 = new JSONObject();
  795. ReqOutStocks2.put("strJson",ReqOutStocks1);
  796. //如果失败存入报错信息跟数据
  797. error.setErrorInfo(map1.get("FailReason").toString());
  798. error.setUrl(url);
  799. error.setDataVal(ReqOutStocks2.toString()).setType("销售出库");
  800. errorMapper.addError(error);
  801. List<JSONObject> list1 = (List<JSONObject>) jsonObject2.get("BillItems");
  802. for(JSONObject jsonObject3 : list1){
  803. MaterialClass material = warehousingMapper.getMaterial(new Notice().setMaterialId(jsonObject3.get("Material").toString()));
  804. queryListMapper.updateType(jsonObject2.get("WMSCode").toString(), 1, material.getWllbCode());
  805. }
  806. }
  807. }
  808. }
  809. }
  810. }
  811. }
  812. //添加记录到tld_access
  813. String names = "销售发货单" ;
  814. String accessType = "1" ;
  815. String returnGsRemoval = returnData.toString() ;
  816. askGoodsMapper.addAccess(names,returnGsRemoval,accessType);
  817. }
  818. }
  819. }
  820. //删除父子表信息
  821. askGoodsMapper.delPlugOutRemoval(documentId);
  822. askGoodsMapper.delRemovalz(documentId);
  823. }catch (Exception e){
  824. e.printStackTrace();
  825. }
  826. }
  827. @Override
  828. public Map<String, Object> addWarehouseTransferVitrual(AskGoods askGoods) {
  829. Map<String, Object> map = new HashMap<>();
  830. //redis并发锁
  831. RLock lock = redissonClient.getLock(askGoods.getUniqueCode());
  832. lock.lock();
  833. try{
  834. Map<String, Object> mapVal = askGoodsMapper.getScanIsNot(askGoods);
  835. if((Double.parseDouble(mapVal.get("inventoryNum").toString()) - Double.parseDouble(mapVal.get("virtualNum").toString())) == 0){
  836. map.put("msg", "500");
  837. map.put("errMsg", "已全部出库");
  838. return map;
  839. }
  840. Inventory inventory = askGoodsMapper.getInventory(askGoods); //库存数量
  841. if(inventory == null){
  842. map.put("msg", "500");
  843. map.put("errMsg", "暂无库存");
  844. return map;
  845. }
  846. AskGoods askGoods1 = askGoodsMapper.getWareInfo(askGoods); //要货单数量
  847. int alreadyNum = askGoodsMapper.getAskInfoNumVitrual(askGoods);//已扫描总数
  848. int inventoryAlready = askGoodsMapper.getInventoryAlready(askGoods);//库存已扫描数量
  849. Double inventorySurplus = (Double.parseDouble(inventory.getAmount()) - Double.parseDouble(inventory.getAmountLock())) - inventoryAlready; //库存剩余数量
  850. Double surplusNum = Double.parseDouble(askGoods1.getNum()) - Double.parseDouble(askGoods1.getOutNum()) - alreadyNum; //剩余要扫描数量
  851. if(Double.doubleToLongBits(surplusNum) >= Double.doubleToLongBits(inventorySurplus)){
  852. askGoods.setNum(String.valueOf(inventorySurplus));
  853. } else {
  854. askGoods.setNum(String.valueOf(surplusNum));
  855. }
  856. askGoods.setStorageLocationCode(inventory.getStorageLocationCode());//库存编号
  857. askGoodsMapper.addAskGoodsVitrual(askGoods);
  858. map.put("msg", "200");
  859. }catch (Exception e){
  860. e.printStackTrace();
  861. map.put("msg", "500");
  862. map.put("errMsg", "失败");
  863. }finally {
  864. //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
  865. if (lock.isLocked() && lock.isHeldByCurrentThread()) {
  866. //释放锁
  867. lock.unlock();
  868. }
  869. }
  870. return map;
  871. }
  872. /**
  873. * 移库单接口文档
  874. */
  875. @Override
  876. public void CreateGMReqOutStock(String removalCode, String realName) {
  877. try {
  878. //通过code查询id
  879. String warehouseTransferTd = askGoodsMapper.getSupplyWarehouseWheres(removalCode);
  880. //根据id查询子表的供货仓库
  881. for (String warehouseWhere : askGoodsMapper.getSupplyWarehouseWhere(warehouseTransferTd)) {
  882. //查询父表信息
  883. List<Map<String, Object>> mapList = askGoodsMapper.getReturnWarehouseTransfer(removalCode);
  884. if (mapList.size() > 0) {
  885. JSONObject strJson = new JSONObject();
  886. //父表
  887. strJson.put("GMReqBillID", mapList.get(0).get("warehouseTransferId").toString());//移库通知ID
  888. strJson.put("WMSID", mapList.get(0).get("id").toString());//利道WMS出库单id
  889. strJson.put("WMSCode", mapList.get(0).get("warehouseTransferCode").toString());//利道WMS出库单编号
  890. strJson.put("TOWareHouse", mapList.get(0).get("askGoodsWarehouseId").toString());//要货仓库ID
  891. strJson.put("FromWareHouse", warehouseWhere);//供货仓库ID
  892. strJson.put("SourceBillDate", DateUtil.dateConversion(mapList.get(0).get("scrq").toString()));//业务日期
  893. strJson.put("MoveType", mapList.get(0).get("warehouseTransferType").toString());//移动类型
  894. strJson.put("IsRed", 0);//是否红单1
  895. strJson.put("Creator", realName);//制单人姓名1
  896. //子表
  897. for (Map<String, Object> map : askGoodsMapper.getReturnWarehouseTransferZ(mapList.get(0).get("warehouseTransferId").toString(), warehouseWhere)) {
  898. List<JSONObject> list = new LinkedList<>();
  899. JSONObject BillItems = new JSONObject();
  900. List<JSONObject> retunList = new LinkedList<>();
  901. JSONObject ReqOutStocks = new JSONObject();
  902. JSONObject returnData = new JSONObject();
  903. BillItems.put("WMSItemID", map.get("id"));//分录ID
  904. BillItems.put("GMReqBillID", map.get("warehouseTransferId"));//移库通知单ID
  905. BillItems.put("GMReqBillItemID", map.get("entryNumber"));//移库通知明细ID
  906. BillItems.put("Material", map.get("materialId"));//物料id
  907. BillItems.put("Quantity", map.get("outNum"));//数量
  908. BillItems.put("FlexField1", map.get("wbsId"));//wbs
  909. BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号
  910. BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称
  911. list.add(BillItems);
  912. strJson.put("BillItems", list);
  913. retunList.add(strJson);
  914. ReqOutStocks.put("BILLs", retunList);
  915. returnData.put("strJson", JSON.toJSONString(ReqOutStocks));
  916. System.out.println("封装好的:"+returnData);
  917. //
  918. // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateGMReqOutStock";
  919. String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateGMReqOutStock";
  920. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  921. Map<String, Object> result = httpClientUtil1.doPost(url, returnData);
  922. Error error = new Error();
  923. if (Integer.parseInt(result.get("msg").toString()) != 200) {
  924. //如果失败存入报错信息跟数据
  925. error.setErrorInfo(result.get("data").toString());
  926. error.setUrl(url);
  927. error.setDataVal(returnData.toJSONString()).setType("移库");
  928. errorMapper.addError(error);
  929. } else {
  930. JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString());
  931. JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString());
  932. if (jsonObject1.get("State").toString().equals("0")) {
  933. //如果失败存入报错信息跟数据
  934. error.setErrorInfo(jsonObject1.get("Msg").toString());
  935. error.setUrl(url);
  936. error.setDataVal(returnData.toJSONString()).setType("移库");
  937. errorMapper.addError(error);
  938. } else {
  939. List<JSONObject> data1 = (List<JSONObject>) JSONObject.parse(jsonObject1.get("data").toString());
  940. for (JSONObject map1 : data1) {
  941. if (map1.get("State").toString().equals("0")) {
  942. for (JSONObject jsonObject2 : retunList) {
  943. if (jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("FromWareHouse").toString().equals(map1.get("FromWareHouse"))) {
  944. //如果失败存入报错信息跟数据
  945. List<JSONObject> retunList2 = new LinkedList<>();
  946. retunList2.add(jsonObject2);
  947. JSONObject ReqOutStocks1 = new JSONObject();
  948. ReqOutStocks1.put("BILLs", retunList2);
  949. JSONObject ReqOutStocks2 = new JSONObject();
  950. ReqOutStocks2.put("strJson",ReqOutStocks1);
  951. //如果失败存入报错信息跟数据
  952. error.setErrorInfo(map1.get("FailReason").toString());
  953. error.setUrl(url);
  954. error.setDataVal(ReqOutStocks2.toString()).setType("移库");
  955. errorMapper.addError(error);
  956. }
  957. }
  958. }
  959. }
  960. }
  961. }
  962. //添加记录到tld_access
  963. String names = "移库单";
  964. String accessType = "1";
  965. String returnGsRemoval = returnData.toString();
  966. askGoodsMapper.addAccess(names, returnGsRemoval, accessType);
  967. }
  968. }
  969. }
  970. //删除父子表信息
  971. //根据code
  972. askGoodsMapper.delReturnWarehouseTransfer(removalCode);
  973. //根据id
  974. askGoodsMapper.delReturnWarehouseTransferZ(warehouseTransferTd);
  975. } catch (Exception e) {
  976. e.printStackTrace();
  977. }
  978. }
  979. /**
  980. * @Description: 生产收货接口文档
  981. * @Param: removalCode 入库单编号
  982. * @return: void
  983. * @Author: XiaoChen
  984. * @Date: 2023/4/7
  985. */
  986. @Override
  987. public void CreateGRReqInStock(String removalCode, String realName) {
  988. try {
  989. String orderNumber = null ;
  990. //通过入库单编号查询入库单信息
  991. // ReturnWarehousing returnWarehousing = askGoodsMapper.getReturnGsWarehousing(removalCode);
  992. //根据id查询子表的供货仓库
  993. for (Map<String,Object> returnWarehousing1 : askGoodsMapper.getStorageLocationWarehouseWhere(removalCode)) {
  994. orderNumber = returnWarehousing1.get("orderNumber").toString() ;
  995. //查询父表信息
  996. List<Map<String, Object>> mapList = askGoodsMapper.getNoticeParent(returnWarehousing1.get("orderNumber").toString());
  997. if (mapList.size() > 0) {
  998. JSONObject strJson = new JSONObject();
  999. //父表
  1000. strJson.put("GRReqBillID", mapList.get(0).get("noticeId").toString());//入库通知单ID
  1001. strJson.put("WMSID", mapList.get(0).get("id").toString());//利道WMS出库单id
  1002. strJson.put("WMSCode", mapList.get(0).get("noticeCode").toString());//利道WMS出库单编号
  1003. strJson.put("WareHouse", returnWarehousing1.get("warehouseWhere"));//仓库ID
  1004. strJson.put("SourceBillDate", DateUtil.dateConversion(mapList.get(0).get("noticeTime").toString()));//业务日期
  1005. strJson.put("SourceType", mapList.get(0).get("sourceType").toString());//来源类型
  1006. strJson.put("MoveType", mapList.get(0).get("moveType").toString());//移动类型
  1007. strJson.put("IsRed", 0);//是否红单1
  1008. strJson.put("Creator", realName);//制单人姓名1
  1009. //子表
  1010. for (Map<String, Object> map : askGoodsMapper.getNoticeSubtabulation(mapList.get(0).get("noticeId").toString())) {
  1011. List<JSONObject> list = new LinkedList<>();
  1012. JSONObject BillItems = new JSONObject();
  1013. List<JSONObject> retunList = new LinkedList<>();
  1014. JSONObject ReqOutStocks = new JSONObject();
  1015. JSONObject returnData = new JSONObject();
  1016. BillItems.put("WMSItemID", map.get("id"));//分录ID
  1017. BillItems.put("GRReqBillID", map.get("noticeId"));//入库通知单ID
  1018. BillItems.put("GRReqBillItemID", map.get("entryNumber"));//入库通知单明细ID
  1019. BillItems.put("Material", map.get("materialId"));//物料id
  1020. BillItems.put("Quantity", map.get("num"));//数量
  1021. BillItems.put("FlexField1", map.get("wbsId"));//wbs
  1022. BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号
  1023. BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称
  1024. list.add(BillItems);
  1025. strJson.put("BillItems", list);
  1026. retunList.add(strJson);
  1027. ReqOutStocks.put("BILLs", retunList);
  1028. returnData.put("strJson", JSON.toJSONString(ReqOutStocks));
  1029. System.out.println("封装好的:"+returnData);
  1030. //回传地址
  1031. // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateGRReqInStock";
  1032. String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateGRReqInStock";
  1033. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  1034. Map<String, Object> result = httpClientUtil1.doPost(url, returnData);
  1035. Error error = new Error();
  1036. if (Integer.parseInt(result.get("msg").toString()) != 200) {
  1037. //如果失败存入报错信息跟数据
  1038. error.setErrorInfo(result.get("data").toString());
  1039. error.setUrl(url);
  1040. error.setDataVal(returnData.toJSONString()).setType("生产收货");
  1041. errorMapper.addError(error);
  1042. //修改流水传输状态
  1043. for(Map<String, Object> map1 : askGoodsMapper.plugOutRemoval(removalCode)){
  1044. askGoodsMapper.updateRemoval(map1.get("removalCode").toString(), null);
  1045. }
  1046. } else {
  1047. JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString());
  1048. JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString());
  1049. if (jsonObject1.get("State").toString().equals("0")) {
  1050. //如果失败存入报错信息跟数据
  1051. error.setErrorInfo(jsonObject1.get("Msg").toString());
  1052. error.setUrl(url);
  1053. error.setDataVal(returnData.toJSONString()).setType("生产收货");
  1054. errorMapper.addError(error);
  1055. } else {
  1056. List<JSONObject> data1 = (List<JSONObject>) JSONObject.parse(jsonObject1.get("data").toString());
  1057. for (JSONObject map1 : data1) {
  1058. if (map1.get("State").toString().equals("0")) {
  1059. for (JSONObject jsonObject2 : retunList) {
  1060. if (jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map1.get("WareHouse"))) {
  1061. //如果失败存入报错信息跟数据
  1062. List<JSONObject> retunList2 = new LinkedList<>();
  1063. retunList2.add(jsonObject2);
  1064. JSONObject ReqOutStocks1 = new JSONObject();
  1065. ReqOutStocks1.put("BILLs", retunList2);
  1066. JSONObject ReqOutStocks2 = new JSONObject();
  1067. ReqOutStocks2.put("strJson",ReqOutStocks1);
  1068. error.setErrorInfo(map1.get("FailReason").toString());
  1069. error.setUrl(url);
  1070. error.setDataVal(ReqOutStocks2.toJSONString()).setType("生产收货");
  1071. errorMapper.addError(error);
  1072. }
  1073. }
  1074. }
  1075. }
  1076. }
  1077. }
  1078. //添加记录到tld_access
  1079. String names = "生产收货";
  1080. String accessType = "1";
  1081. String returnGsRemoval = returnData.toString();
  1082. askGoodsMapper.addAccess(names, returnGsRemoval, accessType);
  1083. }
  1084. }
  1085. }
  1086. //删除虚拟表
  1087. askGoodsMapper.delReturnGsWarehousing(orderNumber);
  1088. } catch (Exception e) {
  1089. e.printStackTrace();
  1090. }
  1091. }
  1092. /**
  1093. * @Description: 其他收货接口文档/其它入库
  1094. * @Param: removalCode
  1095. * @return: void
  1096. * @Author: XiaoChen
  1097. * @Date: 2023/4/12
  1098. */
  1099. @Override
  1100. public void CreateOtherInStock(String removalCode, String realName) {
  1101. try {
  1102. LinkedList<String> noticeIds = new LinkedList<>();
  1103. //通过入库单编号查询通知单ID
  1104. // List<ReturnWarehousing> returnWarehousing = askGoodsMapper.getReturnGsOtherWarehousing(removalCode);
  1105. //根据id查询子表的供货仓库
  1106. for (Map<String,Object> returnWarehousing1 : askGoodsMapper.getCreateOtherInStockWarehouseWhere(removalCode)) {
  1107. JSONObject strJson = new JSONObject();
  1108. //父表
  1109. strJson.put("GRReqBillID", returnWarehousing1.get("noticeId").toString());//入库通知单ID
  1110. strJson.put("WMSID", returnWarehousing1.get("wmsId").toString());//利道WMS出库单id
  1111. strJson.put("WMSCode", returnWarehousing1.get("noticeCode").toString());//利道WMS出库单编号
  1112. strJson.put("WareHouse", returnWarehousing1.get("warehouseWhere"));//仓库ID
  1113. strJson.put("SourceBillDate", DateUtil.dateConversion(returnWarehousing1.get("noticeTime").toString()));//业务日期
  1114. strJson.put("SourceType", returnWarehousing1.get("sourceType").toString());//来源类型
  1115. strJson.put("MoveType", returnWarehousing1.get("moveType").toString());//移动类型
  1116. strJson.put("IsRed", 0);//是否红单1
  1117. strJson.put("Creator", realName);//制单人姓名1
  1118. //查询信息
  1119. List<Map<String, Object>> mapList = askGoodsMapper.getNoticesParent(removalCode,returnWarehousing1.get("storageLocationCode").toString());
  1120. if (mapList.size() > 0) {
  1121. for (Map<String, Object> map : mapList) {
  1122. //子表
  1123. List<JSONObject> list = new LinkedList<>();
  1124. JSONObject BillItems = new JSONObject();
  1125. List<JSONObject> retunList = new LinkedList<>();
  1126. JSONObject ReqOutStocks = new JSONObject();
  1127. JSONObject returnData = new JSONObject();
  1128. BillItems.put("WMSItemID", map.get("wmsItemId"));//分录ID
  1129. BillItems.put("GRReqBillID", map.get("noticeId"));//入库通知单ID
  1130. BillItems.put("GRReqBillItemID", map.get("entryNumber"));//入库通知单明细ID
  1131. BillItems.put("Material", map.get("materialId"));//物料id
  1132. BillItems.put("Quantity", map.get("amount"));//数量
  1133. BillItems.put("FlexField1", map.get("wbsId"));//wbs
  1134. BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号
  1135. BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称
  1136. list.add(BillItems);
  1137. strJson.put("BillItems", list);
  1138. retunList.add(strJson);
  1139. ReqOutStocks.put("BILLs", retunList);
  1140. returnData.put("strJson", JSON.toJSONString(ReqOutStocks));
  1141. System.out.println("封装好的:"+returnData);
  1142. // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateOtherInStock";
  1143. String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateOtherInStock";
  1144. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  1145. Map<String, Object> result = httpClientUtil1.doPost(url, returnData);
  1146. System.out.println("result:" + result);
  1147. Error error = new Error();
  1148. if (Integer.parseInt(result.get("msg").toString()) != 200) {
  1149. //如果失败存入报错信息跟数据
  1150. error.setErrorInfo(result.get("data").toString());
  1151. error.setUrl(url);
  1152. error.setDataVal(returnData.toJSONString()).setType("其它入库");
  1153. errorMapper.addError(error);
  1154. } else {
  1155. JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString());
  1156. JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString());
  1157. if (jsonObject1.get("State").toString().equals("0")) {
  1158. //如果失败存入报错信息跟数据
  1159. error.setErrorInfo(jsonObject1.get("Msg").toString());
  1160. error.setUrl(url);
  1161. error.setDataVal(returnData.toJSONString()).setType("其它入库");
  1162. errorMapper.addError(error);
  1163. } else {
  1164. List<JSONObject> data1 = (List<JSONObject>) JSONObject.parse(jsonObject1.get("data").toString());
  1165. for (JSONObject map1 : data1) {
  1166. if (map1.get("State").toString().equals("0")) {
  1167. for (JSONObject jsonObject2 : retunList) {
  1168. if (jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map1.get("WareHouse"))) {
  1169. //如果失败存入报错信息跟数据
  1170. List<JSONObject> retunList2 = new LinkedList<>();
  1171. retunList2.add(jsonObject2);
  1172. JSONObject ReqOutStocks1 = new JSONObject();
  1173. ReqOutStocks1.put("BILLs", retunList2);
  1174. JSONObject ReqOutStocks2 = new JSONObject();
  1175. ReqOutStocks2.put("strJson",ReqOutStocks1);
  1176. //如果失败存入报错信息跟数据
  1177. error.setErrorInfo(map1.get("FailReason").toString());
  1178. error.setUrl(url);
  1179. error.setDataVal(ReqOutStocks2.toString()).setType("其它入库");
  1180. errorMapper.addError(error);
  1181. }
  1182. }
  1183. }
  1184. }
  1185. }
  1186. }
  1187. //添加记录到tld_access
  1188. String names = "其它入库";
  1189. String accessType = "1";
  1190. String returnGsRemoval = returnData.toString();
  1191. askGoodsMapper.addAccess(names, returnGsRemoval, accessType);
  1192. }
  1193. }
  1194. noticeIds.add(returnWarehousing1.get("noticeId").toString());
  1195. }
  1196. askGoodsMapper.delNoticesParent(removalCode);
  1197. } catch (Exception e) {
  1198. e.printStackTrace();
  1199. }
  1200. }
  1201. /**
  1202. * @Description: 其他发货补领料/其他出货接口文档/其它出库
  1203. * @Param: removalCode 单据id
  1204. * @return: void
  1205. * @Author: XiaoChen
  1206. * @Date: 2023/4/13
  1207. */
  1208. @Override
  1209. public void CreateOtherDeliveryMaterials(String removalCode, String realName) {
  1210. try {
  1211. String documentId = null ;
  1212. //通过出库单编号查询单据ID
  1213. List<Map<String,Object>> lists = askGoodsMapper.getCreateOtherDeliveryMaterialsWarehouseWhere(removalCode);
  1214. //根据id查询子表的供货仓库
  1215. //根据仓库
  1216. for (Map<String, Object> maps : lists) {
  1217. List<Map<String, Object>> mapList = askGoodsMapper.getGsRemovals(removalCode);
  1218. if(mapList.size() >0 ) {
  1219. JSONObject strJson = new JSONObject();
  1220. //父表
  1221. documentId = mapList.get(0).get("askGoodsId").toString();
  1222. strJson.put("GIReqBillID", mapList.get(0).get("askGoodsId").toString());//要货单id
  1223. strJson.put("WMSID", mapList.get(0).get("id").toString());//出库单id
  1224. strJson.put("WMSCode", mapList.get(0).get("removalCode").toString());//出库单编号
  1225. strJson.put("WareHouse", maps.get("warehouseWhere"));//仓库ID
  1226. strJson.put("SourceBillDate",DateUtil.dateConversion(mapList.get(0).get("scrq").toString()));//业务日期
  1227. strJson.put("SourceType", mapList.get(0).get("sourceType").toString());//来源类型
  1228. strJson.put("MoveType", mapList.get(0).get("moveType").toString());//移动类型
  1229. strJson.put("IsRed", 0);//是否红单1
  1230. strJson.put("Creator", realName);//制单人姓名1
  1231. //子表
  1232. for (Map<String, Object> map : askGoodsMapper.getRemovalz(mapList.get(0).get("askGoodsId").toString(),maps.get("warehouseWhere").toString())) {
  1233. List<JSONObject> list = new LinkedList<>();
  1234. JSONObject BillItems = new JSONObject();
  1235. List<JSONObject> retunList = new LinkedList<>();
  1236. JSONObject ReqOutStocks = new JSONObject();
  1237. JSONObject returnData = new JSONObject();
  1238. BillItems.put("WMSItemID", map.get("askId"));//分录ID
  1239. BillItems.put("GIReqBillID", map.get("askGoodsId"));//要货申请单ID
  1240. BillItems.put("GIReqBillItemID", map.get("entryNumber"));//要货申请明细ID
  1241. BillItems.put("Material", map.get("materialId"));//物料id
  1242. BillItems.put("Quantity", map.get("num"));//数量
  1243. BillItems.put("FlexField1", map.get("wbsId"));//wbs
  1244. BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号
  1245. BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称
  1246. list.add(BillItems);
  1247. strJson.put("BillItems", list);
  1248. retunList.add(strJson);
  1249. ReqOutStocks.put("ReqOutStocks", retunList);
  1250. returnData.put("strJson", JSON.toJSONString(ReqOutStocks));
  1251. System.out.println("封装好的:"+returnData);
  1252. // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateMakeUpOtherOutStock";
  1253. String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateMakeUpOtherOutStock";
  1254. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  1255. Map<String, Object> result = httpClientUtil1.doPost(url, returnData);
  1256. System.out.println("result:" + result);
  1257. Error error = new Error();
  1258. if (Integer.parseInt(result.get("msg").toString()) != 200) {
  1259. //如果失败存入报错信息跟数据
  1260. error.setErrorInfo(result.get("data").toString());
  1261. error.setUrl(url);
  1262. error.setDataVal(returnData.toJSONString()).setType("其它出库");
  1263. errorMapper.addError(error);
  1264. } else {
  1265. JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString());
  1266. JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString());
  1267. if (jsonObject1.get("State").toString().equals("0")) {
  1268. //如果失败存入报错信息跟数据
  1269. error.setErrorInfo(jsonObject1.get("Msg").toString());
  1270. error.setUrl(url);
  1271. error.setDataVal(returnData.toJSONString()).setType("其它出库");
  1272. errorMapper.addError(error);
  1273. } else {
  1274. List<JSONObject> data1 = (List<JSONObject>) JSONObject.parse(jsonObject1.get("data").toString());
  1275. for (JSONObject map1 : data1) {
  1276. if (map1.get("State").toString().equals("0")) {
  1277. for (JSONObject jsonObject2 : retunList) {
  1278. if (jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map1.get("WareHouse"))) {
  1279. //如果失败存入报错信息跟数据
  1280. List<JSONObject> retunList2 = new LinkedList<>();
  1281. retunList2.add(jsonObject2);
  1282. JSONObject ReqOutStocks1 = new JSONObject();
  1283. ReqOutStocks1.put("ReqOutStocks", retunList2);
  1284. JSONObject ReqOutStocks2 = new JSONObject();
  1285. ReqOutStocks2.put("strJson",ReqOutStocks1);
  1286. //如果失败存入报错信息跟数据
  1287. error.setErrorInfo(map1.get("FailReason").toString());
  1288. error.setUrl(url);
  1289. error.setDataVal(ReqOutStocks2.toString()).setType("其它出库");
  1290. errorMapper.addError(error);
  1291. }
  1292. }
  1293. }
  1294. }
  1295. }
  1296. }
  1297. //添加记录到tld_access
  1298. String names = "其它出库";
  1299. String accessType = "1";
  1300. String returnGsRemoval = returnData.toString();
  1301. askGoodsMapper.addAccess(names, returnGsRemoval, accessType);
  1302. }
  1303. }
  1304. }
  1305. //删除父子表信息
  1306. askGoodsMapper.delPlugOutRemoval(documentId);
  1307. askGoodsMapper.delRemovalz(documentId);
  1308. } catch (Exception e) {
  1309. e.printStackTrace();
  1310. }
  1311. }
  1312. /**
  1313. * @Description: 其他发货(参照要货申请制单(其他发货通知_青岛工厂))接口文档
  1314. * @Param: removalCode
  1315. * @return: void
  1316. * @Author: XiaoChen
  1317. * @Date: 2023/4/14
  1318. */
  1319. @Override
  1320. public void CreateOtherDeliveryMaterial(String removalCode, String realName) {
  1321. try {
  1322. String documentId = null ;
  1323. //通过出库单编号查询单据ID
  1324. List<Map<String,Object>> lists = askGoodsMapper.getCreateOtherDeliveryMaterialsWarehouseWhere(removalCode);
  1325. //根据id查询子表的供货仓库
  1326. //根据仓库循环
  1327. for (Map<String, Object> maps : lists) {
  1328. List<Map<String, Object>> mapList = askGoodsMapper.getGsRemovals(removalCode);
  1329. if(mapList.size() >0 ) {
  1330. JSONObject strJson = new JSONObject();
  1331. //父表
  1332. documentId = mapList.get(0).get("askGoodsId").toString();
  1333. strJson.put("GIReqBillID", mapList.get(0).get("askGoodsId").toString());//要货单id
  1334. strJson.put("WMSID", mapList.get(0).get("id").toString());//出库单id
  1335. strJson.put("WMSCode", mapList.get(0).get("removalCode").toString());//出库单编号
  1336. strJson.put("WareHouse", maps.get("warehouseWhere"));//仓库ID
  1337. strJson.put("SourceBillDate",DateUtil.dateConversion(mapList.get(0).get("scrq").toString()));//业务日期
  1338. strJson.put("SourceType", mapList.get(0).get("sourceType").toString());//来源类型
  1339. strJson.put("MoveType", mapList.get(0).get("moveType").toString());//移动类型
  1340. strJson.put("IsRed", 0);//是否红单1
  1341. strJson.put("Creator", realName);//制单人姓名1
  1342. //子表
  1343. for (Map<String, Object> map : askGoodsMapper.getRemovalz(mapList.get(0).get("askGoodsId").toString(),maps.get("warehouseWhere").toString())) {
  1344. List<JSONObject> list = new LinkedList<>();
  1345. JSONObject BillItems = new JSONObject();
  1346. List<JSONObject> retunList = new LinkedList<>();
  1347. JSONObject ReqOutStocks = new JSONObject();
  1348. JSONObject returnData = new JSONObject();
  1349. BillItems.put("WMSItemID", map.get("askId"));//分录ID
  1350. BillItems.put("GIReqBillID", map.get("askGoodsId"));//要货申请单ID
  1351. BillItems.put("GIReqBillItemID", map.get("entryNumber"));//要货申请明细ID
  1352. BillItems.put("Material", map.get("materialId"));//物料id
  1353. BillItems.put("Quantity", map.get("num"));//数量
  1354. BillItems.put("FlexField1", map.get("wbsId"));//wbs
  1355. BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号
  1356. BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称
  1357. list.add(BillItems);
  1358. strJson.put("BillItems", list);
  1359. retunList.add(strJson);
  1360. ReqOutStocks.put("ReqOutStocks", retunList);
  1361. returnData.put("strJson", JSON.toJSONString(ReqOutStocks));
  1362. System.out.println("封装好的:"+returnData);
  1363. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  1364. // String url = "http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateOtherOutStock";
  1365. String url = "https://erp4.teld.cn:8443/cwbase/sg/V1/ERP/TELD/TELD_WMS/TELD_API_WMS_StockManage/CreateOtherOutStock";
  1366. Map<String, Object> result = httpClientUtil1.doPost(url, returnData);
  1367. System.out.println("result:" + result);
  1368. Error error = new Error();
  1369. if (Integer.parseInt(result.get("msg").toString()) != 200) {
  1370. //如果失败存入报错信息跟数据
  1371. error.setErrorInfo(result.get("data").toString());
  1372. error.setUrl(url);
  1373. error.setDataVal(returnData.toJSONString()).setType("其它出库");
  1374. errorMapper.addError(error);
  1375. } else {
  1376. JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString());
  1377. JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString());
  1378. if (jsonObject1.get("State").toString().equals("0")) {
  1379. //如果失败存入报错信息跟数据
  1380. error.setErrorInfo(jsonObject1.get("Msg").toString());
  1381. error.setUrl(url);
  1382. error.setDataVal(returnData.toJSONString()).setType("其它出库");
  1383. errorMapper.addError(error);
  1384. } else {
  1385. List<JSONObject> data1 = (List<JSONObject>) JSONObject.parse(jsonObject1.get("data").toString());
  1386. for (JSONObject map1 : data1) {
  1387. if (map1.get("State").toString().equals("0")) {
  1388. for (JSONObject jsonObject2 : retunList) {
  1389. if (jsonObject2.get("WMSCode").toString().equals(map1.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map1.get("WareHouse"))) {
  1390. //如果失败存入报错信息跟数据
  1391. List<JSONObject> retunList2 = new LinkedList<>();
  1392. retunList2.add(jsonObject2);
  1393. JSONObject ReqOutStocks1 = new JSONObject();
  1394. ReqOutStocks1.put("ReqOutStocks", retunList2);
  1395. JSONObject ReqOutStocks2 = new JSONObject();
  1396. ReqOutStocks2.put("strJson",ReqOutStocks1);
  1397. //如果失败存入报错信息跟数据
  1398. error.setErrorInfo(map1.get("FailReason").toString());
  1399. error.setUrl(url);
  1400. error.setDataVal(ReqOutStocks2.toString()).setType("其它出库");
  1401. errorMapper.addError(error);
  1402. }
  1403. }
  1404. }
  1405. }
  1406. }
  1407. }
  1408. //添加记录到tld_access
  1409. String names = "其它出库";
  1410. String accessType = "1";
  1411. String returnGsRemoval = returnData.toString();
  1412. askGoodsMapper.addAccess(names, returnGsRemoval, accessType);
  1413. }
  1414. }
  1415. }
  1416. //删除父子表信息
  1417. askGoodsMapper.delPlugOutRemoval(documentId);
  1418. askGoodsMapper.delRemovalz(documentId);
  1419. } catch (Exception e) {
  1420. e.printStackTrace();
  1421. }
  1422. }
  1423. /**
  1424. * 出库单生成
  1425. * @return
  1426. */
  1427. public String codeGenerateCk(){
  1428. StringBuilder stringBuilder = new StringBuilder("YHCK");
  1429. Date date = new Date();
  1430. SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
  1431. stringBuilder.append(sdf.format(date));
  1432. int count = askGoodsMapper.getReturnRemovalCount();
  1433. for(int i = 0; i < 4 - (count + "").length(); i++){
  1434. stringBuilder.append("0");
  1435. }
  1436. return (stringBuilder.append(count + 1)).toString();
  1437. }
  1438. }