AskGoodsServiceImpl.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451
  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.AskGoodsMapper;
  8. import com.tld.mapper.ErrorMapper;
  9. import com.tld.model.AskGoods;
  10. import com.tld.model.Error;
  11. import com.tld.model.Inventory;
  12. import com.tld.model.ReturRemoval;
  13. import com.tld.service.AskGoodsService;
  14. import com.tld.util.DateUtil;
  15. import com.tld.util.HttpClientUtil;
  16. import org.redisson.api.RLock;
  17. import org.redisson.api.RedissonClient;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.stereotype.Service;
  20. import org.springframework.transaction.annotation.Transactional;
  21. import javax.servlet.http.HttpServletResponse;
  22. import java.text.SimpleDateFormat;
  23. import java.util.*;
  24. @Service
  25. public class AskGoodsServiceImpl implements AskGoodsService {
  26. @Autowired
  27. private AskGoodsMapper askGoodsMapper;
  28. //redis锁
  29. @Autowired
  30. private RedissonClient redissonClient;
  31. @Autowired
  32. private ErrorMapper errorMapper;
  33. @Override
  34. @Transactional(rollbackFor = Exception.class)
  35. public Map<String, Object> addAskGoods(List<Map<String,Object>> mapList) {
  36. Map<String, Object> map = new HashMap<>();
  37. try{
  38. List<AskGoods> askGoodsList = new LinkedList<AskGoods>();
  39. for(Map<String,Object> jsonMap:mapList) {
  40. List<Map<String, Object>> list = (List) jsonMap.get("datalist");
  41. for (Map<String, Object> element : list) {
  42. AskGoods ag = new AskGoods();
  43. //父表
  44. ag.setAskGoodsId(jsonMap.get("requestOrderId").toString());
  45. ag.setUniqueCode(jsonMap.get("requestOrderNo").toString());
  46. ag.setCompanyNumber(jsonMap.get("companyNo").toString());
  47. ag.setSqrq(jsonMap.get("requestDate").toString());//申请日期
  48. ag.setDepartmentId(jsonMap.get("useDepartment").toString());
  49. ag.setSourceType(jsonMap.get("sourceType").toString());
  50. ag.setMoveType(jsonMap.get("moveType").toString());
  51. //子表
  52. ag.setEntryNumber(element.get("entryNumber").toString());
  53. ag.setProductionCode(element.get("prodOrderNo").toString());
  54. ag.setMaterialId(element.get("materialId").toString());
  55. ag.setWbs(element.get("WBS").toString());
  56. ag.setMeasurementId(element.get("measUnitId").toString());
  57. ag.setNum(element.get("orderCount").toString());
  58. askGoodsList.add(ag);
  59. }
  60. }
  61. for(AskGoods askGoods : askGoodsList) {
  62. int count = askGoodsMapper.getAskGoods(askGoods);
  63. if (count != 0) {
  64. askGoodsMapper.updateAskGoodsNum(askGoods);
  65. } else {
  66. if (askGoodsMapper.getAskGoodsf(askGoods) == 0) {
  67. askGoodsMapper.addAskGoodsf(askGoods);
  68. }
  69. askGoodsMapper.addAskGoods(askGoods);
  70. }
  71. askGoodsMapper.addAskGoodsLog(askGoods);
  72. }
  73. map.put("status", "0000");
  74. map.put("msg","成功");
  75. }catch (Exception e){
  76. e.printStackTrace();
  77. map.put("status", "0009");
  78. map.put("msg", "服务器请求异常,请稍后再试");
  79. }
  80. return map;
  81. }
  82. @Override
  83. public Map<String, Object> getAskGoodsfList(AskGoods askGoods) {
  84. Map<String, Object> map = new HashMap<>();
  85. try{
  86. List<AskGoods> list = askGoodsMapper.getAskGoodsfList(askGoods);
  87. map.put("data", list);
  88. map.put("msg", "200");
  89. }catch (Exception e){
  90. e.printStackTrace();
  91. map.put("msg", "500");
  92. map.put("errMsg", "失败");
  93. }
  94. return map;
  95. }
  96. @Override
  97. public Map<String, Object> getAskGoodsMaterial(AskGoods askGoods) {
  98. Map<String, Object> map = new HashMap<>();
  99. try{
  100. List<AskGoods> list = askGoodsMapper.getAskGoodsMaterial(askGoods);
  101. List<String> scanNum = new LinkedList<>();
  102. for(AskGoods askGoods1 : list){
  103. askGoods1.setUniqueCode(askGoods.getUniqueCode());
  104. askGoods1.setAskGoodsId(askGoods.getAskGoodsId());
  105. scanNum.add(askGoodsMapper.getScanNum(askGoods1));//扫描总数
  106. }
  107. map.put("scanNum", scanNum);
  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> getMaterialCk(AskGoods askGoods) {
  119. Map<String, Object> map = new HashMap<>();
  120. try{
  121. List<Inventory> list = new LinkedList<>();
  122. for(Inventory inventory : askGoodsMapper.getMaterialCk(askGoods)){
  123. AskGoods askGoods1 = askGoodsMapper.getAsk(inventory);
  124. if(askGoods1 != null){
  125. if(Integer.parseInt(askGoods1.getNum()) != Integer.parseInt(inventory.getAmount())){
  126. list.add(inventory);
  127. }
  128. } else {
  129. list.add(inventory);
  130. }
  131. }
  132. map.put("data", list);
  133. map.put("msg", "200");
  134. }catch (Exception e){
  135. e.printStackTrace();
  136. map.put("msg", "500");
  137. map.put("errMsg", "失败");
  138. }
  139. return map;
  140. }
  141. @Override
  142. public Map<String, Object> addAskGoodsVitrual(AskGoods askGoods) {
  143. Map<String, Object> map = new HashMap<>();
  144. try{
  145. Map<String, Object> mapVal = askGoodsMapper.getScanIsNot(askGoods);
  146. if((Double.parseDouble(mapVal.get("inventoryNum").toString()) - Double.parseDouble(mapVal.get("virtualNum").toString())) == 0){
  147. map.put("msg", "500");
  148. map.put("errMsg", "已全部出库");
  149. return map;
  150. }
  151. Inventory inventory = askGoodsMapper.getInventory(askGoods); //库存数量
  152. AskGoods askGoods1 = askGoodsMapper.getAsknInfo(askGoods); //要货单数量
  153. int alreadyNum = askGoodsMapper.getAskInfoNumVitrual(askGoods);//已扫描总数
  154. int inventoryAlready = askGoodsMapper.getInventoryAlready(askGoods);//库存已扫描数量
  155. int inventorySurplus = Integer.parseInt(inventory.getAmount()) - inventoryAlready; //库存剩余数量
  156. int surplusNum = Integer.parseInt(askGoods1.getNum()) - alreadyNum; //剩余要扫描数量
  157. if(surplusNum >= inventorySurplus){
  158. askGoods.setNum(String.valueOf(inventorySurplus));
  159. } else {
  160. askGoods.setNum(String.valueOf(surplusNum));
  161. }
  162. askGoods.setStorageLocationCode(inventory.getStorageLocationCode());//库存编号
  163. askGoodsMapper.addAskGoodsVitrual(askGoods);
  164. map.put("msg", "200");
  165. }catch (Exception e){
  166. e.printStackTrace();
  167. map.put("msg", "500");
  168. map.put("errMsg", "失败");
  169. }
  170. return map;
  171. }
  172. @Override
  173. public Map<String, Object> OutOfLibrary(String uniqueCode, String type, String askGoodsId) {
  174. Map<String, Object> map = new HashMap<>();
  175. //redis并发锁
  176. RLock lock = redissonClient.getLock(uniqueCode);
  177. lock.lock();
  178. try{
  179. List<AskGoods> list = askGoodsMapper.getVirtualUniqueCode(uniqueCode, type, askGoodsId);
  180. for(AskGoods askGoods : list){
  181. Inventory inventory = askGoodsMapper.getInventory(askGoods);
  182. //如果出库库存等于虚拟表库存则删除此库存
  183. if(Integer.parseInt(askGoods.getNum()) == Integer.parseInt(inventory.getAmount())){
  184. askGoodsMapper.deleteInventory(inventory);
  185. } else {
  186. inventory.setAmount(askGoods.getNum());
  187. askGoodsMapper.updateInventory(inventory);
  188. }
  189. String materialId = askGoodsMapper.getMaterialId(askGoods.getWllbCode());//查询物料id
  190. AskGoods askGoods1 = askGoodsMapper.getAskDetailed(askGoodsId, materialId);//查询要料申请单内容
  191. ReturRemoval returRemoval = new ReturRemoval()
  192. .setMaterialId(materialId)
  193. .setAskGoodsId(askGoodsId)
  194. .setWbs(askGoods1.getWbs())
  195. .setNum(askGoods.getNum())
  196. .setEntryNumber(askGoods1.getEntryNumber())
  197. .setAskId(askGoods1.getId())
  198. .setStorageLocationCode(askGoods.getStorageLocationCode());
  199. askGoodsMapper.addRemoval(askGoods);//插入出库流水
  200. askGoodsMapper.deleteVirtual(askGoods.getId());//删除已出虚拟表库存
  201. askGoodsMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息
  202. askGoodsMapper.updateOutNum(askGoods.getNum(), askGoodsId, materialId);//修改出库数量
  203. }
  204. //查询要货单父级信息
  205. AskGoods askGoods3 = askGoodsMapper.getAskDetailedF(askGoodsId);
  206. String removalCode = codeGenerateCk();
  207. ReturRemoval returRemoval1 = new ReturRemoval()
  208. .setAskGoodsId(askGoods3.getAskGoodsId())
  209. .setRemovalCode(removalCode)
  210. .setSourceType(askGoods3.getSourceType())
  211. .setMoveType(askGoods3.getMoveType());
  212. askGoodsMapper.addReturnGsRemovalF(returRemoval1);//新增返回gs数据父表信息
  213. map.put("data", removalCode);
  214. map.put("msg", "200");
  215. }catch (Exception e){
  216. e.printStackTrace();
  217. map.put("msg", "500");
  218. map.put("errMsg", "失败");
  219. } finally {
  220. //释放锁
  221. lock.unlock();
  222. }
  223. return map;
  224. }
  225. /**
  226. * 出库回传
  227. * @param removalCode
  228. */
  229. @Override
  230. @Transactional(rollbackFor = Exception.class)
  231. public void plugOutRemoval(String removalCode) {
  232. try{
  233. List<Map<String, Object>> mapList = askGoodsMapper.plugOutRemoval(removalCode);
  234. if(mapList.size() >0 ) {
  235. JSONObject returnData = new JSONObject();
  236. JSONObject strJson = new JSONObject();
  237. //父表
  238. strJson.put("askGoodsId", mapList.get(0).get("askGoodsId").toString());//要货单id
  239. strJson.put("removalCode", mapList.get(0).get("removalCode").toString());//出库单编号
  240. strJson.put("sourceType", mapList.get(0).get("sourceType").toString());//来源类型
  241. strJson.put("moveType", mapList.get(0).get("moveType").toString());//移动类型
  242. //子表
  243. List<JSONObject> list = new LinkedList<>();
  244. for(Map<String,Object> map:askGoodsMapper.getRemovalz(mapList.get(0).get("askGoodsId").toString())) {
  245. JSONObject BillItems = new JSONObject();
  246. BillItems.put("entryNumber", map.get("entryNumber"));//分录ID
  247. // BillItems.put("PurOrderID", returnWarehousing.getOrderNumber());//采购单id
  248. // BillItems.put("PurOrderItemID", returnWarehousing.getEntryNumber());//采购订单明细ID
  249. BillItems.put("Material", map.get("materialId"));//物料id
  250. BillItems.put("Quantity", map.get("num"));//数量
  251. BillItems.put("FlexField1", map.get("wbs"));//wbs
  252. BillItems.put("FlexField1Code", " ");//WBS编号
  253. BillItems.put("FlexField1Name", " ");//WBS名称
  254. list.add(BillItems);
  255. }
  256. strJson.put("BillItems", list);
  257. returnData.put("strJson", JSON.toJSONString(strJson));
  258. System.out.println(returnData);
  259. HttpClientUtil httpClientUtil1 = new HttpClientUtil();
  260. Map<String, Object> result = httpClientUtil1.doPost("http://localhost:3339/api/Values", returnData);
  261. if (Integer.parseInt(result.get("msg").toString()) != 200) {
  262. //如果失败存入报错信息跟数据
  263. Error error = new Error()
  264. .setErrorInfo(result.get("data").toString())
  265. .setUrl("http://localhost:44303/api/Values")
  266. .setDataVal(strJson.toJSONString());
  267. errorMapper.addError(error);
  268. }
  269. }
  270. // Calendar cal = Calendar.getInstance();
  271. // int year = cal.get(Calendar.YEAR);
  272. // int month = cal.get(Calendar.MONTH) + 1;
  273. // int day = cal.get(Calendar.DATE) ;
  274. // map.put("child", askGoodsMapper.getRemovalz(map.get("askGoodsId").toString()));
  275. // map.put("isNotRed", "0");
  276. // map.put("year", year);
  277. // map.put("month", month);
  278. // map.put("time", year + "-" + month + "-" + day);
  279. }catch (Exception e){
  280. e.printStackTrace();
  281. }
  282. }
  283. @Override
  284. public Map<String, Object> getRemoval(AskGoods askGoods) {
  285. Map<String, Object> map = new HashMap<>();
  286. try{
  287. //查询数据
  288. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  289. PageInfo<AskGoods> list = new PageInfo<>(askGoodsMapper.getRemoval(askGoods));
  290. map.put("data", list);
  291. map.put("msg", "200");
  292. }catch (Exception e){
  293. e.printStackTrace();
  294. map.put("msg", "500");
  295. map.put("errMsg", "失败");
  296. }
  297. return map;
  298. }
  299. @Override
  300. public void export(AskGoods askGoods, HttpServletResponse response) {
  301. try{
  302. //导出数据汇总
  303. List<List<Object>> sheetDataList = new ArrayList<>();
  304. //表头数据
  305. List<Object> head = Arrays.asList("物料名称", "供应商名称", "连翻号", "类型", "出库用户", "领用部门", "库位名称", "出库日期", "出库数量");
  306. //查询数据
  307. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  308. PageInfo<Map<String, Object>> list = new PageInfo<>(askGoodsMapper.export(askGoods));
  309. sheetDataList.add(head);
  310. for(Map<String, Object> userMap : list.getList()){
  311. List<Object> listSheet = new ArrayList<>();
  312. for(String key: userMap.keySet()){
  313. listSheet.add(userMap.get(key));
  314. }
  315. sheetDataList.add(listSheet);
  316. }
  317. //当前时间
  318. Date time = new Date();
  319. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss");
  320. ExcelUtils.export(response, "出库流水数据导出" + sdf.format(time), sheetDataList);
  321. }catch (Exception e){
  322. e.printStackTrace();
  323. }
  324. }
  325. @Override
  326. public Map<String, Object> getAskGoodsVitrual(String uniqueCode, String type) {
  327. Map<String, Object> map = new HashMap<>();
  328. try{
  329. List<AskGoods> list = askGoodsMapper.getAskGoodsVitrual(uniqueCode, type);
  330. map.put("data", list);
  331. map.put("msg", "200");
  332. }catch (Exception e){
  333. e.printStackTrace();
  334. map.put("msg", "500");
  335. map.put("errMsg", "失败");
  336. }
  337. return map;
  338. }
  339. @Override
  340. public Map<String, Object> delAskGoodsVitrual(String id, String type) {
  341. Map<String, Object> map = new HashMap<>();
  342. try{
  343. askGoodsMapper.delAskGoodsVitrual(id, type);
  344. map.put("msg", "200");
  345. }catch (Exception e){
  346. e.printStackTrace();
  347. map.put("msg", "500");
  348. map.put("errMsg", "失败");
  349. }
  350. return map;
  351. }
  352. @Override
  353. public Map<String, Object> getGoodsHalf(AskGoods askGoods) {
  354. Map<String, Object> map = new HashMap<>();
  355. try{
  356. //查询数据
  357. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  358. PageInfo<AskGoods> list = new PageInfo<>(askGoodsMapper.getGoodsHalf(askGoods));
  359. map.put("data", list);
  360. map.put("msg", "200");
  361. }catch (Exception e){
  362. e.printStackTrace();
  363. map.put("msg", "500");
  364. map.put("errMsg", "失败");
  365. }
  366. return map;
  367. }
  368. @Override
  369. public Map<String, Object> getRemovalHalfProduct(AskGoods askGoods) {
  370. Map<String, Object> map = new HashMap<>();
  371. try{
  372. //查询数据
  373. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  374. PageInfo<AskGoods> list = new PageInfo<>(askGoodsMapper.getRemovalHalfProduct(askGoods));
  375. map.put("data", list);
  376. map.put("msg", "200");
  377. }catch (Exception e){
  378. e.printStackTrace();
  379. map.put("msg", "500");
  380. map.put("errMsg", "失败");
  381. }
  382. return map;
  383. }
  384. @Override
  385. public void getRemovalHalfProductExcel(AskGoods askGoods, HttpServletResponse response) {
  386. try{
  387. //导出数据汇总
  388. List<List<Object>> sheetDataList = new ArrayList<>();
  389. //表头数据
  390. List<Object> head = Arrays.asList("物料名称", "出库数量", "用户名称", "出库时间", "要货单ID", "领用部门");
  391. //查询数据
  392. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  393. PageInfo<Map<String, Object>> list = new PageInfo<>(askGoodsMapper.getRemovalHalfProductExcel(askGoods));
  394. sheetDataList.add(head);
  395. for(Map<String, Object> userMap : list.getList()){
  396. List<Object> listSheet = new ArrayList<>();
  397. for(String key: userMap.keySet()){
  398. listSheet.add(userMap.get(key));
  399. }
  400. sheetDataList.add(listSheet);
  401. }
  402. //当前时间
  403. Date time = new Date();
  404. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss");
  405. ExcelUtils.export(response, "出库流水数据导出" + sdf.format(time), sheetDataList);
  406. }catch (Exception e){
  407. e.printStackTrace();
  408. }
  409. }
  410. /**
  411. * 出库单生成
  412. * @return
  413. */
  414. public String codeGenerateCk(){
  415. StringBuilder stringBuilder = new StringBuilder("CK");
  416. Date date = new Date();
  417. SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
  418. stringBuilder.append(sdf.format(date));
  419. int count = askGoodsMapper.getReturnRemovalCount();
  420. for(int i = 0; i < 4 - (count + "").length(); i++){
  421. stringBuilder.append("0");
  422. }
  423. return (stringBuilder.append(count + 1)).toString();
  424. }
  425. }