AskGoodsServiceImpl.java 52 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044
  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. @Override
  39. @Transactional(rollbackFor = Exception.class)
  40. public Map<String, Object> addAskGoods(List<Map<String,Object>> mapList) {
  41. Map<String, Object> map = new HashMap<>();
  42. try{
  43. List<AskGoods> askGoodsList = new LinkedList<AskGoods>();
  44. for(Map<String,Object> jsonMap:mapList) {
  45. List<Map<String, Object>> list = (List) jsonMap.get("datalist");
  46. for (Map<String, Object> element : list) {
  47. AskGoods ag = new AskGoods();
  48. //父表
  49. ag.setAskGoodsId(jsonMap.get("requestOrderId").toString());
  50. ag.setAskGoodsCode(jsonMap.get("requestOrderNo").toString());
  51. ag.setCompanyNumber(jsonMap.get("companyNo").toString());
  52. ag.setSqrq(jsonMap.get("requestDate").toString());//申请日期
  53. ag.setDepartmentId(jsonMap.get("useDepartment").toString());
  54. ag.setSourceType(jsonMap.get("sourceType").toString());
  55. ag.setMoveType(jsonMap.get("moveType").toString());
  56. //子表
  57. ag.setType("0");
  58. ag.setEntryNumber(element.get("entryNumber").toString());
  59. ag.setProductionCode(element.get("prodOrderNo").toString());
  60. ag.setMaterialId(element.get("materialId").toString());
  61. ag.setWbs(element.get("WBS").toString());
  62. ag.setMeasurementId(element.get("measUnitId").toString());
  63. ag.setNum(element.get("orderCount").toString());
  64. askGoodsList.add(ag);
  65. }
  66. }
  67. for(AskGoods askGoods : askGoodsList) {
  68. int count = askGoodsMapper.getAskGoods(askGoods);
  69. if (count != 0) {
  70. askGoodsMapper.updateAskGoodsNum(askGoods);
  71. } else {
  72. if (askGoodsMapper.getAskGoodsf(askGoods) == 0) {
  73. askGoodsMapper.addAskGoodsf(askGoods);
  74. }
  75. askGoodsMapper.addAskGoods(askGoods);
  76. }
  77. askGoodsMapper.addAskGoodsLog(askGoods);
  78. }
  79. //新增日志
  80. Access access = new Access().setType("生产领料信息").setData(JSON.toJSONString(mapList)).setAccessType("0");
  81. dictionaryMapper.addAccess(access);
  82. map.put("status", "0000");
  83. map.put("msg","成功");
  84. }catch (Exception e){
  85. e.printStackTrace();
  86. map.put("status", "0009");
  87. map.put("msg", "服务器请求异常,请稍后再试");
  88. }
  89. return map;
  90. }
  91. @Override
  92. public Map<String, Object> getAskGoodsfList(AskGoods askGoods) {
  93. Map<String, Object> map = new HashMap<>();
  94. try{
  95. List<AskGoods> list = askGoodsMapper.getAskGoodsfList(askGoods);
  96. map.put("data", list);
  97. map.put("msg", "200");
  98. }catch (Exception e){
  99. e.printStackTrace();
  100. map.put("msg", "500");
  101. map.put("errMsg", "失败");
  102. }
  103. return map;
  104. }
  105. @Override
  106. public Map<String, Object> getAskGoodsMaterial(AskGoods askGoods) {
  107. Map<String, Object> map = new HashMap<>();
  108. try{
  109. List<AskGoods> list = askGoodsMapper.getAskGoodsMaterial(askGoods);
  110. List<String> scanNum = new LinkedList<>();
  111. for(AskGoods askGoods1 : list){
  112. askGoods1.setUniqueCode(askGoods.getUniqueCode());
  113. askGoods1.setWllbCode(askGoods1.getMaterialCode());
  114. scanNum.add(askGoodsMapper.getScanNum(askGoods1));//扫描总数
  115. }
  116. map.put("scanNum", scanNum);
  117. map.put("data", list);
  118. map.put("msg", "200");
  119. }catch (Exception e){
  120. e.printStackTrace();
  121. map.put("msg", "500");
  122. map.put("errMsg", "失败");
  123. }
  124. return map;
  125. }
  126. @Override
  127. public Map<String, Object> getMaterialCk(AskGoods askGoods) {
  128. Map<String, Object> map = new HashMap<>();
  129. try{
  130. List<Inventory> list = new LinkedList<>();
  131. for(Inventory inventory : askGoodsMapper.getMaterialCk(askGoods)){
  132. AskGoods askGoods1 = askGoodsMapper.getAsk(inventory);
  133. if(askGoods1 != null){
  134. if( Double.doubleToLongBits(Double.parseDouble(askGoods1.getNum())) != Double.doubleToLongBits(Double.parseDouble(inventory.getAmount())) ){
  135. list.add(inventory);
  136. }
  137. } else {
  138. list.add(inventory);
  139. }
  140. }
  141. map.put("data", list);
  142. map.put("msg", "200");
  143. }catch (Exception e){
  144. e.printStackTrace();
  145. map.put("msg", "500");
  146. map.put("errMsg", "失败");
  147. }
  148. return map;
  149. }
  150. @Override
  151. @Transactional(rollbackFor = Exception.class)
  152. public Map<String, Object> addAskGoodsVitrual(AskGoods askGoods) {
  153. Map<String, Object> map = new HashMap<>();
  154. //redis并发锁
  155. RLock lock = redissonClient.getLock(askGoods.getUniqueCode());
  156. lock.lock();
  157. try{
  158. Map<String, Object> mapVal = askGoodsMapper.getScanIsNot(askGoods);
  159. if(Double.doubleToLongBits(Double.parseDouble(mapVal.get("inventoryNum").toString()) - Double.parseDouble(mapVal.get("virtualNum").toString())) == 0){
  160. map.put("msg", "500");
  161. map.put("errMsg", "已全部出库");
  162. return map;
  163. }
  164. Inventory inventory = askGoodsMapper.getInventory(askGoods); //库存数量
  165. AskGoods askGoods1 = askGoodsMapper.getAsknInfo(askGoods); //要货单数量
  166. int alreadyNum = askGoodsMapper.getAskInfoNumVitrual(askGoods);//已扫描总数
  167. int inventoryAlready = askGoodsMapper.getInventoryAlready(askGoods);//库存已扫描数量
  168. int inventorySurplus = (Integer.parseInt(inventory.getAmount()) - Integer.parseInt(inventory.getAmountLock())) - inventoryAlready; //库存剩余数量
  169. Double surplusNum = Double.parseDouble(askGoods1.getNum()) - Double.parseDouble(askGoods1.getOutNum()) - alreadyNum; //剩余要扫描数量
  170. if(surplusNum >= inventorySurplus){
  171. askGoods.setNum(String.valueOf(inventorySurplus));
  172. } else {
  173. askGoods.setNum(String.valueOf(surplusNum));
  174. }
  175. askGoods.setStorageLocationCode(inventory.getStorageLocationCode());//库存编号
  176. askGoodsMapper.addAskGoodsVitrual(askGoods);
  177. map.put("msg", "200");
  178. }catch (Exception e){
  179. e.printStackTrace();
  180. map.put("msg", "500");
  181. map.put("errMsg", "失败");
  182. } finally {
  183. //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
  184. if (lock.isLocked() && lock.isHeldByCurrentThread()) {
  185. //释放锁
  186. lock.unlock();
  187. }
  188. }
  189. return map;
  190. }
  191. @Override
  192. @Transactional(rollbackFor = Exception.class)
  193. public Map<String, Object> OutOfLibrary(String uniqueCode, String type, String askGoodsId) {
  194. Map<String, Object> map = new HashMap<>();
  195. //redis并发锁
  196. RLock lock = redissonClient.getLock(uniqueCode);
  197. lock.lock();
  198. try{
  199. //出库流水
  200. String removalCode = codeGenerateCk();
  201. List<AskGoods> list = askGoodsMapper.getVirtualUniqueCode(uniqueCode, type, askGoodsId);
  202. for(AskGoods askGoods : list){
  203. askGoods.setStorageCode(removalCode);
  204. askGoods.setCompanyNumber(askGoods.getAccountSleeve());
  205. Inventory inventory = askGoodsMapper.getInventory(askGoods);
  206. if(inventory == null){
  207. throw new Exception("库存不存在");
  208. }
  209. //如果出库库存等于虚拟表库存则删除此库存
  210. if(Double.parseDouble(askGoods.getNum()) == Double.parseDouble(inventory.getAmount())){
  211. askGoodsMapper.deleteInventory(inventory);
  212. } else {
  213. inventory.setAmount(askGoods.getNum());
  214. askGoodsMapper.updateInventory(inventory);
  215. }
  216. String materialId = askGoodsMapper.getMaterialId(askGoods.getWllbCode());//查询物料id
  217. AskGoods askGoods1 = askGoodsMapper.getAskDetailed(askGoodsId, materialId);//查询要料申请单内容
  218. ReturRemoval returRemoval = new ReturRemoval()
  219. .setMaterialId(materialId)
  220. .setDocumentId(askGoodsId)
  221. .setWbs(askGoods1.getWbs())
  222. .setNum(askGoods.getNum())
  223. .setEntryNumber(askGoods1.getEntryNumber())
  224. .setDocumentPointsId(askGoods1.getId())
  225. .setStorageLocationCode(askGoods.getStorageLocationCode());
  226. askGoodsMapper.addRemoval(askGoods);//插入出库流水
  227. askGoodsMapper.deleteVirtual(askGoods.getId());//删除已出虚拟表库存
  228. askGoodsMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息
  229. askGoodsMapper.updateOutNum(askGoods.getNum(), askGoodsId, materialId);//修改出库数量
  230. }
  231. //查询要货单父级信息
  232. AskGoods askGoods3 = askGoodsMapper.getAskDetailedF(askGoodsId);
  233. ReturRemoval returRemoval1 = new ReturRemoval()
  234. .setDocumentId(askGoods3.getAskGoodsId())
  235. .setRemovalCode(removalCode)
  236. .setSourceType(askGoods3.getSourceType())
  237. .setMoveType(askGoods3.getMoveType());
  238. askGoodsMapper.addReturnGsRemovalF(returRemoval1);//新增返回gs数据父表信息
  239. map.put("data", askGoods3.getAskGoodsId());
  240. map.put("msg", "200");
  241. }catch (Exception e){
  242. e.printStackTrace();
  243. map.put("msg", "500");
  244. map.put("errMsg", "失败");
  245. } finally {
  246. //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
  247. if (lock.isLocked() && lock.isHeldByCurrentThread()) {
  248. //释放锁
  249. lock.unlock();
  250. }
  251. }
  252. return map;
  253. }
  254. /**
  255. * 出库回传
  256. * @param removalCode 单据id
  257. */
  258. @Override
  259. @Transactional(rollbackFor = Exception.class)
  260. public void plugOutRemoval(String removalCode) {
  261. try{
  262. JSONObject returnData = new JSONObject();
  263. List<JSONObject> retunList = new LinkedList<>();
  264. for(String warehouseWhere : askGoodsMapper.getWarehouseWhere(removalCode)){
  265. List<Map<String, Object>> mapList = askGoodsMapper.plugOutRemoval(removalCode);
  266. if(mapList.size() >0 ) {
  267. JSONObject strJson = new JSONObject();
  268. //父表
  269. strJson.put("GIReqBillID", mapList.get(0).get("askGoodsId").toString());//要货单id
  270. strJson.put("WMSID", mapList.get(0).get("id").toString());//出库单id
  271. strJson.put("WMSCode", mapList.get(0).get("removalCode").toString());//出库单编号
  272. strJson.put("WareHouse", warehouseWhere);//仓库ID
  273. strJson.put("SourceBillDate",DateUtil.dateConversion(mapList.get(0).get("scrq").toString()));//业务日期
  274. strJson.put("SourceType", mapList.get(0).get("sourceType").toString());//来源类型
  275. strJson.put("MoveType", mapList.get(0).get("moveType").toString());//移动类型
  276. strJson.put("IsRed", 0);//是否红单1
  277. strJson.put("Creator", "测试");//制单人姓名1
  278. //子表
  279. List<JSONObject> list = new LinkedList<>();
  280. for (Map<String, Object> map : askGoodsMapper.getRemovalz(mapList.get(0).get("askGoodsId").toString(), warehouseWhere)) {
  281. JSONObject BillItems = new JSONObject();
  282. BillItems.put("WMSItemID", map.get("id"));//分录ID
  283. BillItems.put("GIReqBillID", map.get("askGoodsId"));//要货申请单ID
  284. BillItems.put("GIReqBillItemID", map.get("entryNumber"));//要货申请明细ID
  285. BillItems.put("Material", map.get("materialId"));//物料id
  286. BillItems.put("Quantity", map.get("num"));//数量
  287. BillItems.put("FlexField1", map.get("wbsId"));//wbs
  288. BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号
  289. BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称
  290. list.add(BillItems);
  291. }
  292. strJson.put("BillItems", list);
  293. retunList.add(strJson);
  294. }
  295. }
  296. JSONObject ReqOutStocks = new JSONObject();
  297. ReqOutStocks.put("ReqOutStocks",retunList);
  298. returnData.put("strJson", JSON.toJSONString(ReqOutStocks));
  299. System.out.println(returnData);
  300. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  301. Map<String, Object> result = httpClientUtil1.doPost("http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateProductiveOutStock", returnData);
  302. System.out.println("result:"+result);
  303. Error error = new Error();
  304. int type = 0;
  305. if(Integer.parseInt(result.get("msg").toString()) != 200){
  306. //如果失败存入报错信息跟数据
  307. error.setErrorInfo(result.get("data").toString());
  308. error.setUrl("http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateProductiveOutStock");
  309. error.setDataVal(returnData.toJSONString());
  310. errorMapper.addError(error);
  311. type = 1;
  312. }else {
  313. JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString());
  314. JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString());
  315. if ( jsonObject1.get("State").toString().equals("0") ){
  316. //如果失败存入报错信息跟数据
  317. error.setErrorInfo(jsonObject1.get("Msg").toString());
  318. error.setUrl("http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateProductiveOutStock");
  319. error.setDataVal(returnData.toJSONString());
  320. errorMapper.addError(error);
  321. type = 1;
  322. }else {
  323. List<JSONObject> data1 = (List<JSONObject>) JSONObject.parse(jsonObject1.get("data").toString());
  324. for (JSONObject map : data1) {
  325. if (map.get("State").toString().equals("0")){
  326. for(JSONObject jsonObject2 : retunList){
  327. if(jsonObject2.get("WMSCode").toString().equals(map.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map.get("WareHouse"))){
  328. //如果失败存入报错信息跟数据
  329. error.setErrorInfo(map.get("FailReason").toString());
  330. error.setUrl("http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateProductiveOutStock");
  331. error.setDataVal(jsonObject2.toString());
  332. errorMapper.addError(error);
  333. }
  334. }
  335. }
  336. }
  337. }
  338. }
  339. //删除父子表信息
  340. askGoodsMapper.delPlugOutRemoval(removalCode);
  341. askGoodsMapper.delRemovalz(removalCode);
  342. //添加记录到tld_access
  343. String names = "出库回传" ;
  344. String accessType = "1" ;
  345. String returnGsRemoval = returnData.toString() ;
  346. askGoodsMapper.addAccess(names,returnGsRemoval,accessType);
  347. }catch (Exception e){
  348. e.printStackTrace();
  349. }
  350. }
  351. @Override
  352. public Map<String, Object> getRemoval(AskGoods askGoods) {
  353. Map<String, Object> map = new HashMap<>();
  354. try{
  355. //查询数据
  356. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  357. PageInfo<AskGoods> list = new PageInfo<>(askGoodsMapper.getRemoval(askGoods));
  358. map.put("data", list);
  359. map.put("msg", "200");
  360. }catch (Exception e){
  361. e.printStackTrace();
  362. map.put("msg", "500");
  363. map.put("errMsg", "失败");
  364. }
  365. return map;
  366. }
  367. @Override
  368. public void export(AskGoods askGoods, HttpServletResponse response) {
  369. try{
  370. //导出数据汇总
  371. List<List<Object>> sheetDataList = new ArrayList<>();
  372. //表头数据
  373. List<Object> head = Arrays.asList("物料名称", "供应商名称", "连番号", "类型", "出库用户", "领用部门", "库位名称", "出库日期", "出库数量","要货单ID","真实姓名","公司名称");
  374. //查询数据
  375. List<Map<String, Object>> list = askGoodsMapper.export(askGoods);
  376. sheetDataList.add(head);
  377. for(Map<String, Object> userMap : list){
  378. List<Object> listSheet = new ArrayList<>();
  379. for(String key: userMap.keySet()){
  380. listSheet.add(userMap.get(key));
  381. }
  382. sheetDataList.add(listSheet);
  383. }
  384. //当前时间
  385. Date time = new Date();
  386. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss");
  387. ExcelUtils.export(response, "出库流水数据导出" + sdf.format(time), sheetDataList);
  388. }catch (Exception e){
  389. e.printStackTrace();
  390. }
  391. }
  392. @Override
  393. public Map<String, Object> getAskGoodsVitrual(String uniqueCode, String type) {
  394. Map<String, Object> map = new HashMap<>();
  395. try{
  396. List<AskGoods> list = askGoodsMapper.getAskGoodsVitrual(uniqueCode, type);
  397. map.put("data", list);
  398. map.put("msg", "200");
  399. }catch (Exception e){
  400. e.printStackTrace();
  401. map.put("msg", "500");
  402. map.put("errMsg", "失败");
  403. }
  404. return map;
  405. }
  406. @Override
  407. @Transactional(rollbackFor = Exception.class)
  408. public Map<String, Object> delAskGoodsVitrual(String id, String type) {
  409. Map<String, Object> map = new HashMap<>();
  410. try{
  411. askGoodsMapper.delAskGoodsVitrual(id, type);
  412. map.put("msg", "200");
  413. }catch (Exception e){
  414. e.printStackTrace();
  415. map.put("msg", "500");
  416. map.put("errMsg", "失败");
  417. }
  418. return map;
  419. }
  420. @Override
  421. public Map<String, Object> getGoodsHalf(AskGoods askGoods) {
  422. Map<String, Object> map = new HashMap<>();
  423. try{
  424. //查询数据
  425. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  426. PageInfo<AskGoods> list = new PageInfo<>(askGoodsMapper.getGoodsHalf(askGoods));
  427. map.put("data", list);
  428. map.put("msg", "200");
  429. }catch (Exception e){
  430. e.printStackTrace();
  431. map.put("msg", "500");
  432. map.put("errMsg", "失败");
  433. }
  434. return map;
  435. }
  436. @Override
  437. public Map<String, Object> getRemovalHalfProduct(AskGoods askGoods) {
  438. Map<String, Object> map = new HashMap<>();
  439. try{
  440. //查询数据
  441. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  442. PageInfo<AskGoods> list = new PageInfo<>(askGoodsMapper.getRemovalHalfProduct(askGoods));
  443. map.put("data", list);
  444. map.put("msg", "200");
  445. }catch (Exception e){
  446. e.printStackTrace();
  447. map.put("msg", "500");
  448. map.put("errMsg", "失败");
  449. }
  450. return map;
  451. }
  452. @Override
  453. public void getRemovalHalfProductExcel(AskGoods askGoods, HttpServletResponse response) {
  454. try{
  455. //导出数据汇总
  456. List<List<Object>> sheetDataList = new ArrayList<>();
  457. //表头数据
  458. List<Object> head = Arrays.asList("要货单", "出库编号","物料编号","物料名称", "出库数量", "出库人", "领用部门", "WBS编号", "出库时间","真实姓名");
  459. //查询数据
  460. List<Map<String, Object>> list = askGoodsMapper.getRemovalHalfProductExcel(askGoods);
  461. sheetDataList.add(head);
  462. for(Map<String, Object> userMap : list){
  463. List<Object> listSheet = new ArrayList<>();
  464. for(String key: userMap.keySet()){
  465. listSheet.add(userMap.get(key));
  466. }
  467. sheetDataList.add(listSheet);
  468. }
  469. //当前时间
  470. Date time = new Date();
  471. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss");
  472. ExcelUtils.export(response, "半成品出库流水数据导出" + sdf.format(time), sheetDataList);
  473. }catch (Exception e){
  474. e.printStackTrace();
  475. }
  476. }
  477. @Override
  478. public Map<String, Object> getRemovalHalf(AskGoods askGoods) {
  479. Map<String, Object> map = new HashMap<>();
  480. try{
  481. //查询数据
  482. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  483. PageInfo<AskGoods> list = new PageInfo<>(askGoodsMapper.getRemovalHalf(askGoods));
  484. map.put("data", list);
  485. map.put("msg", "200");
  486. }catch (Exception e){
  487. e.printStackTrace();
  488. map.put("msg", "500");
  489. map.put("errMsg", "失败");
  490. }
  491. return map;
  492. }
  493. @Override
  494. public void getRemovalHalfExcel(AskGoods askGoods, HttpServletResponse response) {
  495. try{
  496. //导出数据汇总
  497. List<List<Object>> sheetDataList = new ArrayList<>();
  498. //表头数据
  499. List<Object> head = Arrays.asList("物料名称", "出库数量", "用户名称", "出库时间", "公司名称", "客户名称", "出库单编号", "WBS","真实姓名");
  500. //查询数据
  501. List<Map<String, Object>> list = askGoodsMapper.getRemovalHalfExcel(askGoods);
  502. sheetDataList.add(head);
  503. for(Map<String, Object> userMap : list){
  504. List<Object> listSheet = new ArrayList<>();
  505. for(String key: userMap.keySet()){
  506. listSheet.add(userMap.get(key));
  507. }
  508. sheetDataList.add(listSheet);
  509. }
  510. //当前时间
  511. Date time = new Date();
  512. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss");
  513. ExcelUtils.export(response, "产成品出库流水数据导出" + sdf.format(time), sheetDataList);
  514. }catch (Exception e){
  515. e.printStackTrace();
  516. }
  517. }
  518. @Override
  519. public Map<String, Object> otherAskGoods(AskGoods askGoods) {
  520. Map<String, Object> map = new HashMap<>();
  521. //redis并发锁
  522. RLock lock = redissonClient.getLock(askGoods.getWllbCode() + askGoods.getStorageLocationCode());
  523. lock.lock();
  524. try{
  525. //查询物料信息
  526. MaterialClass material = warehousingMapper.getMaterial(new Notice().setMaterialCode(askGoods.getWllbCode()));
  527. if(material.getPartType().equals("原材料")){
  528. if(askGoods.getSerial() == null) {
  529. map.put("msg", "500");
  530. map.put("errMsg", "此物料是" + material.getPartType() + "连番号参数不能为空!");
  531. return map;
  532. }
  533. } else if(material.getPartType().equals("产成品")) {
  534. if(askGoods.getAttribute() == null) {
  535. map.put("msg", "500");
  536. map.put("errMsg", "此物料是" + material.getPartType() + "属性参数不能为空!");
  537. return map;
  538. }
  539. } else if(material.getPartType().equals("半成品")) {
  540. askGoods.setProducDate(null);
  541. if(askGoods.getStorageLocationCode() == null) {
  542. map.put("msg", "500");
  543. map.put("errMsg", "此物料是" + material.getPartType() + "库位参数不能为空!");
  544. return map;
  545. }
  546. }
  547. askGoods.setMaterialId(material.getTldId());
  548. //查询库存
  549. List<Inventory> inventory = askGoodsMapper.getInventoryInfo(askGoods);
  550. if(inventory.size() == 0){
  551. map.put("msg", "500");
  552. map.put("errMsg", "未查询到该库位的库存");
  553. return map;
  554. }
  555. if(Integer.parseInt(inventory.get(0).getAmount()) < Integer.parseInt(askGoods.getNum())){
  556. map.put("msg", "500");
  557. map.put("errMsg", "库存数量不足");
  558. return map;
  559. }
  560. //如果出库库存等于虚拟表库存则删除此库存
  561. if(Integer.parseInt(askGoods.getNum()) == Integer.parseInt(inventory.get(0).getAmount())){
  562. askGoodsMapper.deleteInventory(inventory.get(0));
  563. } else {
  564. inventory.get(0).setAmount(askGoods.getNum());
  565. askGoodsMapper.updateInventory(inventory.get(0));
  566. }
  567. String removalCode = codeGenerateCk();
  568. if(material.getPartType().equals("半成品")){
  569. //新增半成品出库流水
  570. AskGoods askGoods1 = new AskGoods()
  571. .setWllbCode(material.getWllbCode())
  572. .setNum(askGoods.getNum())
  573. .setUserId(askGoods.getUserId())
  574. .setAskGoodsId("")
  575. .setDepartment(askGoods.getDepartment())
  576. .setWbs(askGoods.getWbs())
  577. .setStorageCode(removalCode)
  578. .setStorageLocationCode(askGoods.getStorageLocationCode());//新增出库流水
  579. warehousingMapper.addRemovalHalfProduct(askGoods1);
  580. } else if(material.getPartType().equals("产成品")){
  581. //产成品销售流水
  582. Delivery delivery1 = new Delivery()
  583. .setMaterialCode(material.getWllbCode()) //物料code
  584. .setOutNum(askGoods.getNum()) //出库数量
  585. .setUserId(askGoods.getUserId()) //用户id
  586. .setDeliveryId("") //销售单id
  587. .setCompanyNumber("") //公司编号
  588. .setCustomerCode("")//客户编号
  589. .setWbs(askGoods.getWbs())
  590. .setStorageCode(removalCode);
  591. deliveryMapper.addRemovalHalf(delivery1); //流水录入
  592. } else {
  593. askGoods.setSupplierId(inventory.get(0).getSupplierId());
  594. askGoods.setType("其他出库");
  595. askGoods.setProducDate(inventory.get(0).getProducDate());
  596. askGoods.setSerial(inventory.get(0).getSerial());
  597. askGoods.setStorageCode(removalCode);
  598. askGoods.setWbs(askGoods.getWbs());
  599. askGoodsMapper.addRemoval(askGoods);//插入出库流水
  600. }
  601. //新增返回gs信息
  602. ReturRemoval returRemoval = new ReturRemoval()
  603. .setMaterialId(material.getTldId())
  604. .setWbs(askGoods.getWbs())
  605. .setNum(askGoods.getNum())
  606. .setStorageLocationCode(inventory.get(0).getStorageLocationCode())
  607. .setRemovalCode(removalCode)
  608. .setSourceType("0")
  609. .setMoveType("209")
  610. .setDocumentId(removalCode)
  611. .setDocumentPointsId(removalCode);
  612. askGoodsMapper.addReturnGsRemovalF(returRemoval);//新增返回gs数据父表信息
  613. askGoodsMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息
  614. map.put("data", removalCode);
  615. map.put("msg", "200");
  616. }catch (Exception e){
  617. map.put("msg", "500");
  618. map.put("errMsg", "失败");
  619. e.printStackTrace();
  620. } finally {
  621. //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
  622. if (lock.isLocked() && lock.isHeldByCurrentThread()) {
  623. //释放锁
  624. lock.unlock();
  625. }
  626. }
  627. return map;
  628. }
  629. @Override
  630. @Transactional(rollbackFor = Exception.class)
  631. public Map<String, Object> delAskGoods(String id, HttpServletRequest request) {
  632. Map<String, Object> map = new HashMap<>();
  633. try{
  634. String userId = request.getHeader("userId");
  635. Map<String, Object> mapVal = askGoodsMapper.getDelAskGoods(id);
  636. if(Double.parseDouble(mapVal.get("out_num").toString()) > 0){
  637. map.put("msg", "500");
  638. map.put("errMsg", "此单据已出库!");
  639. return map;
  640. }
  641. LogData logData = new LogData()
  642. .setUserId(userId)
  643. .setData(mapVal.toString())
  644. .setType("0")
  645. .setDocumentType("生产领料");
  646. dictionaryMapper.addLogdata(logData);
  647. askGoodsMapper.delAskGoods(id);
  648. map.put("msg","200");
  649. } catch (Exception e) {
  650. e.printStackTrace();
  651. map.put("msg", "500");
  652. map.put("errMsg", "服务器请求异常,请稍后再试");
  653. }
  654. return map;
  655. }
  656. /**
  657. * 销售发货单接口
  658. * @return
  659. */
  660. @Override
  661. public void CreateBOLOutStock(String removalCode) {
  662. try{
  663. JSONObject returnData = new JSONObject();
  664. List<JSONObject> retunList = new LinkedList<>();
  665. for(String warehouseWhere : askGoodsMapper.getWarehouseWhere(removalCode)){
  666. List<Map<String, Object>> mapList = askGoodsMapper.getGsRemoval(removalCode);
  667. if(mapList.size() >0 ) {
  668. JSONObject strJson = new JSONObject();
  669. //父表
  670. strJson.put("BOLID", mapList.get(0).get("askGoodsId").toString());//要货单id
  671. strJson.put("WMSID", mapList.get(0).get("id").toString());//出库单id
  672. strJson.put("WMSCode", mapList.get(0).get("removalCode").toString());//出库单编号
  673. strJson.put("WareHouse", warehouseWhere);//仓库ID
  674. strJson.put("SourceBillDate",DateUtil.dateConversion(mapList.get(0).get("scrq").toString()));//业务日期
  675. strJson.put("SourceType", mapList.get(0).get("sourceType").toString());//来源类型
  676. strJson.put("MoveType", mapList.get(0).get("moveType").toString());//移动类型
  677. strJson.put("IsRed", 0);//是否红单1
  678. strJson.put("Creator", "测试");//制单人姓名1
  679. //子表
  680. List<JSONObject> list = new LinkedList<>();
  681. for (Map<String, Object> map : askGoodsMapper.getRemovalz(mapList.get(0).get("askGoodsId").toString(), warehouseWhere)) {
  682. JSONObject BillItems = new JSONObject();
  683. BillItems.put("WMSItemID", map.get("id"));//分录ID
  684. BillItems.put("BOLID", map.get("askGoodsId"));//要货申请单ID
  685. BillItems.put("BOLItemID", map.get("entryNumber"));//要货申请明细ID
  686. BillItems.put("Material", map.get("materialId"));//物料id
  687. BillItems.put("Quantity", map.get("num"));//数量
  688. BillItems.put("FlexField1", map.get("wbsId"));//wbs
  689. BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号
  690. BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称
  691. list.add(BillItems);
  692. }
  693. strJson.put("BillItems", list);
  694. retunList.add(strJson);
  695. }
  696. }
  697. JSONObject ReqOutStocks = new JSONObject();
  698. ReqOutStocks.put("BILLs",retunList);
  699. returnData.put("strJson", JSON.toJSONString(ReqOutStocks));
  700. System.out.println(returnData);
  701. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  702. Map<String, Object> result = httpClientUtil1.doPost("http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateBOLOutStock", returnData);
  703. System.out.println("result:"+result);
  704. Error error = new Error();
  705. if(Integer.parseInt(result.get("msg").toString()) != 200){
  706. //如果失败存入报错信息跟数据
  707. error.setErrorInfo(result.get("data").toString());
  708. error.setUrl("http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateBOLOutStock");
  709. error.setDataVal(returnData.toJSONString());
  710. errorMapper.addError(error);
  711. }else {
  712. JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString());
  713. JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString());
  714. if ( jsonObject1.get("State").toString().equals("0") ){
  715. //如果失败存入报错信息跟数据
  716. error.setErrorInfo(jsonObject1.get("Msg").toString());
  717. error.setUrl("http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateBOLOutStock");
  718. error.setDataVal(returnData.toJSONString());
  719. errorMapper.addError(error);
  720. }else {
  721. List<JSONObject> data1 = (List<JSONObject>) JSONObject.parse(jsonObject1.get("data").toString());
  722. for (JSONObject map : data1) {
  723. if (map.get("State").toString().equals("0")){
  724. for(JSONObject jsonObject2 : retunList){
  725. if(jsonObject2.get("WMSCode").toString().equals(map.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map.get("WareHouse"))){
  726. //如果失败存入报错信息跟数据
  727. error.setErrorInfo(map.get("FailReason").toString());
  728. error.setUrl("http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateProductiveOutStock");
  729. error.setDataVal(jsonObject2.toString());
  730. errorMapper.addError(error);
  731. }
  732. }
  733. }
  734. }
  735. }
  736. }
  737. //删除父子表信息
  738. askGoodsMapper.delPlugOutRemoval(removalCode);
  739. askGoodsMapper.delRemovalz(removalCode);
  740. //添加记录到tld_access
  741. String names = "销售发货单" ;
  742. String accessType = "1" ;
  743. String returnGsRemoval = returnData.toString() ;
  744. askGoodsMapper.addAccess(names,returnGsRemoval,accessType);
  745. }catch (Exception e){
  746. e.printStackTrace();
  747. }
  748. }
  749. @Override
  750. public Map<String, Object> addWarehouseTransferVitrual(AskGoods askGoods) {
  751. Map<String, Object> map = new HashMap<>();
  752. //redis并发锁
  753. RLock lock = redissonClient.getLock(askGoods.getUniqueCode());
  754. lock.lock();
  755. try{
  756. Map<String, Object> mapVal = askGoodsMapper.getScanIsNot(askGoods);
  757. if((Double.parseDouble(mapVal.get("inventoryNum").toString()) - Double.parseDouble(mapVal.get("virtualNum").toString())) == 0){
  758. map.put("msg", "500");
  759. map.put("errMsg", "已全部出库");
  760. return map;
  761. }
  762. Inventory inventory = askGoodsMapper.getInventory(askGoods); //库存数量
  763. if(inventory == null){
  764. map.put("msg", "500");
  765. map.put("errMsg", "暂无库存");
  766. return map;
  767. }
  768. AskGoods askGoods1 = askGoodsMapper.getWareInfo(askGoods); //要货单数量
  769. int alreadyNum = askGoodsMapper.getAskInfoNumVitrual(askGoods);//已扫描总数
  770. int inventoryAlready = askGoodsMapper.getInventoryAlready(askGoods);//库存已扫描数量
  771. int inventorySurplus = (Integer.parseInt(inventory.getAmount()) - Integer.parseInt(inventory.getAmountLock())) - inventoryAlready; //库存剩余数量
  772. Double surplusNum = Double.parseDouble(askGoods1.getNum()) - Double.parseDouble(askGoods1.getOutNum()) - alreadyNum; //剩余要扫描数量
  773. if(surplusNum >= inventorySurplus){
  774. askGoods.setNum(String.valueOf(inventorySurplus));
  775. } else {
  776. askGoods.setNum(String.valueOf(surplusNum));
  777. }
  778. askGoods.setStorageLocationCode(inventory.getStorageLocationCode());//库存编号
  779. askGoodsMapper.addAskGoodsVitrual(askGoods);
  780. map.put("msg", "200");
  781. }catch (Exception e){
  782. e.printStackTrace();
  783. map.put("msg", "500");
  784. map.put("errMsg", "失败");
  785. }finally {
  786. //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
  787. if (lock.isLocked() && lock.isHeldByCurrentThread()) {
  788. //释放锁
  789. lock.unlock();
  790. }
  791. }
  792. return map;
  793. }
  794. /**
  795. *移库单接口文档
  796. */
  797. @Override
  798. public void CreateGMReqOutStock(String removalCode) {
  799. try {
  800. JSONObject returnData = new JSONObject();
  801. List<JSONObject> retunList = new LinkedList<>();
  802. //通过code查询id
  803. String warehouseTransferTd = askGoodsMapper.getSupplyWarehouseWheres(removalCode);
  804. //根据id查询子表的供货仓库
  805. for (String warehouseWhere : askGoodsMapper.getSupplyWarehouseWhere(warehouseTransferTd)) {
  806. //查询父表信息
  807. List<Map<String, Object>> mapList = askGoodsMapper.getReturnWarehouseTransfer(removalCode);
  808. if (mapList.size() > 0) {
  809. JSONObject strJson = new JSONObject();
  810. //父表
  811. strJson.put("GMReqBillID", mapList.get(0).get("warehouseTransferId").toString());//移库通知ID
  812. strJson.put("WMSID", mapList.get(0).get("id").toString());//利道WMS出库单id
  813. strJson.put("WMSCode", mapList.get(0).get("warehouseTransferCode").toString());//利道WMS出库单编号
  814. strJson.put("TOWareHouse", mapList.get(0).get("askGoodsWarehouseId").toString());//要货仓库ID
  815. strJson.put("FromWareHouse", warehouseWhere);//供货仓库ID
  816. strJson.put("SourceBillDate", DateUtil.dateConversion(mapList.get(0).get("scrq").toString()));//业务日期
  817. strJson.put("MoveType", mapList.get(0).get("warehouseTransferType").toString());//移动类型
  818. strJson.put("IsRed", 0);//是否红单1
  819. strJson.put("Creator", "测试");//制单人姓名1
  820. //子表
  821. List<JSONObject> list = new LinkedList<>();
  822. for (Map<String, Object> map : askGoodsMapper.getReturnWarehouseTransferZ(mapList.get(0).get("warehouseTransferId").toString(), warehouseWhere)) {
  823. JSONObject BillItems = new JSONObject();
  824. BillItems.put("WMSItemID", map.get("id"));//分录ID
  825. BillItems.put("GMReqBillID", map.get("warehouseTransferId"));//移库通知单ID
  826. BillItems.put("GMReqBillItemID", map.get("entryNumber"));//移库通知明细ID
  827. BillItems.put("Material", map.get("materialId"));//物料id
  828. BillItems.put("Quantity", map.get("outNum"));//数量
  829. BillItems.put("FlexField1", map.get("wbsId"));//wbs
  830. BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号
  831. BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称
  832. list.add(BillItems);
  833. }
  834. strJson.put("BillItems", list);
  835. retunList.add(strJson);
  836. }
  837. }
  838. JSONObject ReqOutStocks = new JSONObject();
  839. ReqOutStocks.put("BILLs", retunList);
  840. List<JSONObject> retunList1 = new LinkedList<>();
  841. returnData.put("strJson", JSON.toJSONString(ReqOutStocks));
  842. System.out.println(returnData);
  843. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  844. Map<String, Object> result = httpClientUtil1.doPost("http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateGMReqOutStock", returnData);
  845. System.out.println("result:" + result);
  846. Error error = new Error();
  847. if (Integer.parseInt(result.get("msg").toString()) != 200) {
  848. //如果失败存入报错信息跟数据
  849. error.setErrorInfo(result.get("data").toString());
  850. error.setUrl("http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateGMReqOutStock");
  851. error.setDataVal(returnData.toJSONString());
  852. errorMapper.addError(error);
  853. } else {
  854. JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString());
  855. JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString());
  856. if (jsonObject1.get("State").toString().equals("0")) {
  857. //如果失败存入报错信息跟数据
  858. error.setErrorInfo(jsonObject1.get("Msg").toString());
  859. error.setUrl("http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateGMReqOutStock");
  860. error.setDataVal(returnData.toJSONString());
  861. errorMapper.addError(error);
  862. } else {
  863. List<JSONObject> data1 = (List<JSONObject>) JSONObject.parse(jsonObject1.get("data").toString());
  864. for (JSONObject map : data1) {
  865. if (map.get("State").toString().equals("0")) {
  866. for (JSONObject jsonObject2 : retunList) {
  867. if (jsonObject2.get("WMSCode").toString().equals(map.get("WMSCode")) && jsonObject2.get("FromWareHouse").toString().equals(map.get("FromWareHouse"))) {
  868. //如果失败存入报错信息跟数据
  869. error.setErrorInfo(map.get("FailReason").toString());
  870. error.setUrl("http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateGMReqOutStock");
  871. error.setDataVal(jsonObject2.toString());
  872. errorMapper.addError(error);
  873. }
  874. }
  875. }
  876. }
  877. }
  878. }
  879. //删除父子表信息
  880. //根据code
  881. // askGoodsMapper.delReturnWarehouseTransfer(removalCode);
  882. // //根据id
  883. // askGoodsMapper.delReturnWarehouseTransferZ(warehouseTransferTd);
  884. //添加记录到tld_access
  885. String names = "移库单";
  886. String accessType = "1";
  887. String returnGsRemoval = returnData.toString();
  888. askGoodsMapper.addAccess(names, returnGsRemoval, accessType);
  889. } catch (Exception e) {
  890. e.printStackTrace();
  891. }
  892. }
  893. /**
  894. * @Description: 生产收货接口文档
  895. * @Param: removalCode 入库单编号
  896. * @return: void
  897. * @Author: XiaoChen
  898. * @Date: 2023/4/7
  899. */
  900. @Override
  901. public void CreateGRReqInStock(String removalCode) {
  902. try {
  903. JSONObject returnData = new JSONObject();
  904. List<JSONObject> retunList = new LinkedList<>();
  905. //通过入库单编号查询入库单信息
  906. ReturnWarehousing returnWarehousing = askGoodsMapper.getReturnGsWarehousing(removalCode);
  907. //根据id查询子表的供货仓库
  908. for (String warehouseWhere : askGoodsMapper.getStorageLocationWarehouseWhere(returnWarehousing)) {
  909. //查询父表信息
  910. List<Map<String, Object>> mapList = askGoodsMapper.getNoticeParent(returnWarehousing.getOrderNumber());
  911. if (mapList.size() > 0) {
  912. JSONObject strJson = new JSONObject();
  913. //父表
  914. strJson.put("GRReqBillID", mapList.get(0).get("noticeId").toString());//入库通知单ID
  915. strJson.put("WMSID", mapList.get(0).get("id").toString());//利道WMS出库单id
  916. strJson.put("WMSCode", mapList.get(0).get("noticeCode").toString());//利道WMS出库单编号
  917. strJson.put("WareHouse", warehouseWhere);//仓库ID
  918. strJson.put("SourceBillDate", DateUtil.dateConversion(mapList.get(0).get("noticeTime").toString()));//业务日期
  919. strJson.put("SourceType", mapList.get(0).get("sourceType").toString());//来源类型
  920. strJson.put("MoveType", mapList.get(0).get("moveType").toString());//移动类型
  921. strJson.put("IsRed", 0);//是否红单1
  922. strJson.put("Creator", "测试");//制单人姓名1
  923. //子表
  924. List<JSONObject> list = new LinkedList<>();
  925. for (Map<String, Object> map : askGoodsMapper.getNoticeSubtabulation(mapList.get(0).get("noticeId").toString())) {
  926. JSONObject BillItems = new JSONObject();
  927. BillItems.put("WMSItemID", map.get("id"));//分录ID
  928. BillItems.put("GRReqBillID", map.get("noticeId"));//入库通知单ID
  929. BillItems.put("GRReqBillItemID", map.get("entryNumber"));//入库通知单明细ID
  930. BillItems.put("Material", map.get("materialId"));//物料id
  931. BillItems.put("Quantity", map.get("num"));//数量
  932. BillItems.put("FlexField1", map.get("wbsId"));//wbs
  933. BillItems.put("FlexField1Code", map.get("wbsCode"));//WBS编号
  934. BillItems.put("FlexField1Name", map.get("wbsName"));//WBS名称
  935. list.add(BillItems);
  936. }
  937. strJson.put("BillItems", list);
  938. retunList.add(strJson);
  939. }
  940. }
  941. JSONObject ReqOutStocks = new JSONObject();
  942. ReqOutStocks.put("BILLs", retunList);
  943. List<JSONObject> retunList1 = new LinkedList<>();
  944. returnData.put("strJson", JSON.toJSONString(ReqOutStocks));
  945. System.out.println(returnData);
  946. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  947. Map<String, Object> result = httpClientUtil1.doPost("http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateGRReqInStock", returnData);
  948. System.out.println("result:" + result);
  949. Error error = new Error();
  950. if (Integer.parseInt(result.get("msg").toString()) != 200) {
  951. //如果失败存入报错信息跟数据
  952. error.setErrorInfo(result.get("data").toString());
  953. error.setUrl("http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateGRReqInStock");
  954. error.setDataVal(returnData.toJSONString());
  955. errorMapper.addError(error);
  956. } else {
  957. JSONObject jsonObject = (JSONObject) JSONObject.parse(result.get("data").toString());
  958. JSONObject jsonObject1 = (JSONObject) JSONObject.parse(jsonObject.get("result").toString());
  959. if (jsonObject1.get("State").toString().equals("0")) {
  960. //如果失败存入报错信息跟数据
  961. error.setErrorInfo(jsonObject1.get("Msg").toString());
  962. error.setUrl("http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateGRReqInStock");
  963. error.setDataVal(returnData.toJSONString());
  964. errorMapper.addError(error);
  965. } else {
  966. List<JSONObject> data1 = (List<JSONObject>) JSONObject.parse(jsonObject1.get("data").toString());
  967. for (JSONObject map : data1) {
  968. if (map.get("State").toString().equals("0")) {
  969. for (JSONObject jsonObject2 : retunList) {
  970. if (jsonObject2.get("WMSCode").toString().equals(map.get("WMSCode")) && jsonObject2.get("WareHouse").toString().equals(map.get("WareHouse"))) {
  971. //如果失败存入报错信息跟数据
  972. error.setErrorInfo(map.get("FailReason").toString());
  973. error.setUrl("http://42.159.85.29:52480/cwbase/sg/V1/ERP/TELD/DEVTEST/API_WMS_PurInStock/CreateGRReqInStock");
  974. error.setDataVal(jsonObject2.toString());
  975. errorMapper.addError(error);
  976. }
  977. }
  978. }
  979. }
  980. }
  981. }
  982. //删除父子表信息
  983. //根据code
  984. // askGoodsMapper.delNoticeParent(returnWarehousing.getOrderNumber());
  985. // //根据id
  986. // askGoodsMapper.delNoticeSubtabulation(returnWarehousing.getOrderNumber());
  987. //添加记录到tld_access
  988. String names = "报工单";
  989. String accessType = "1";
  990. String returnGsRemoval = returnData.toString();
  991. askGoodsMapper.addAccess(names, returnGsRemoval, accessType);
  992. } catch (Exception e) {
  993. e.printStackTrace();
  994. }
  995. }
  996. /**
  997. * 出库单生成
  998. * @return
  999. */
  1000. public String codeGenerateCk(){
  1001. StringBuilder stringBuilder = new StringBuilder("CK");
  1002. Date date = new Date();
  1003. SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
  1004. stringBuilder.append(sdf.format(date));
  1005. int count = askGoodsMapper.getReturnRemovalCount();
  1006. for(int i = 0; i < 4 - (count + "").length(); i++){
  1007. stringBuilder.append("0");
  1008. }
  1009. return (stringBuilder.append(count + 1)).toString();
  1010. }
  1011. }