AskGoodsServiceImpl.java 86 KB

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