InviteServiceImpl.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470
  1. package com.tld.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.tld.mapper.DictionaryMapper;
  4. import com.tld.mapper.InviteMapper;
  5. import com.tld.mapper.QueryListMapper;
  6. import com.tld.model.*;
  7. import com.tld.service.InviteService;
  8. import org.redisson.api.RLock;
  9. import org.redisson.api.RedissonClient;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Service;
  12. import org.springframework.transaction.annotation.Transactional;
  13. import javax.servlet.http.HttpServletRequest;
  14. import java.text.SimpleDateFormat;
  15. import java.util.*;
  16. @Service
  17. public class InviteServiceImpl implements InviteService {
  18. @Autowired
  19. private InviteMapper inviteMapper;
  20. //redis锁
  21. @Autowired
  22. private RedissonClient redissonClient;
  23. @Autowired
  24. private DictionaryMapper dictionaryMapper;
  25. @Autowired
  26. private QueryListMapper queryListMapper;
  27. @Override
  28. public Map<String, Object> getAskGoodsfList(AskGoods askGoods) {
  29. Map<String, Object> map = new HashMap<>();
  30. try{
  31. List<AskGoods> list = inviteMapper.getAskGoodsfList(askGoods);
  32. map.put("data", list);
  33. map.put("msg", "200");
  34. }catch (Exception e){
  35. e.printStackTrace();
  36. map.put("msg", "500");
  37. map.put("errMsg", "失败");
  38. }
  39. return map;
  40. }
  41. @Override
  42. public Map<String, Object> getAskGoodsMaterial(AskGoods askGoods) {
  43. Map<String, Object> map = new HashMap<>();
  44. try{
  45. List<AskGoods> list = inviteMapper.getAskGoodsMaterial(askGoods);
  46. List<String> scanNum = new LinkedList<>();
  47. List<String> mapVal = new LinkedList<>();
  48. for(AskGoods askGoods1 : list){
  49. askGoods1.setUniqueCode(askGoods.getUniqueCode());
  50. askGoods1.setUniqueCode(askGoods.getUniqueCode());
  51. scanNum.add(inviteMapper.getScanNum(askGoods1));//扫描总数
  52. Inventory inventory = new Inventory()
  53. .setMaterialId(askGoods1.getMaterialId())
  54. .setWbs(askGoods1.getWbs())
  55. .setCompanyCode(askGoods1.getCompanyNumber())
  56. .setGroupBy(askGoods.getGroupBy());
  57. List<Map<String, Object>> inventorVal = queryListMapper.storageLocation(inventory);
  58. if(inventorVal.size() != 0) {
  59. mapVal.add(inventorVal.get(0).get("sum").toString());
  60. } else {
  61. mapVal.add("0");
  62. }
  63. }
  64. map.put("scanNum", scanNum);
  65. map.put("sum", mapVal);
  66. map.put("data", list);
  67. map.put("msg", "200");
  68. }catch (Exception e) {
  69. e.printStackTrace();
  70. map.put("msg", "500");
  71. map.put("errMsg", "失败");
  72. }
  73. return map;
  74. }
  75. @Override
  76. public Map<String, Object> getMaterialCk(AskGoods askGoods) {
  77. Map<String, Object> map = new HashMap<>();
  78. try{
  79. List<Inventory> list = new LinkedList<>();
  80. for(Inventory inventory : inviteMapper.getMaterialCk(askGoods)){
  81. AskGoods askGoods1 = inviteMapper.getAsk(inventory);
  82. if(askGoods1 != null){
  83. if( Double.doubleToLongBits(Double.parseDouble(askGoods1.getNum())) != Double.doubleToLongBits(Double.parseDouble(inventory.getAmount())) ){
  84. list.add(inventory);
  85. }
  86. } else {
  87. list.add(inventory);
  88. }
  89. }
  90. map.put("data", list);
  91. map.put("msg", "200");
  92. }catch (Exception e){
  93. e.printStackTrace();
  94. map.put("msg", "500");
  95. map.put("errMsg", "失败");
  96. }
  97. return map;
  98. }
  99. @Override
  100. @Transactional(rollbackFor = Exception.class)
  101. public Map<String, Object> addAskGoodsVitrual(AskGoods askGoods) {
  102. Map<String, Object> map = new HashMap<>();
  103. try{
  104. Map<String, Object> mapVal = inviteMapper.getScanIsNot(askGoods);
  105. if((Double.parseDouble(mapVal.get("inventoryNum").toString()) - Double.parseDouble(mapVal.get("virtualNum").toString())) <= 0){
  106. map.put("msg", "500");
  107. map.put("errMsg", "已全部出库");
  108. return map;
  109. }
  110. Inventory inventory = inviteMapper.getInventory(askGoods); //库存数量
  111. AskGoods askGoods1 = inviteMapper.getAsknInfo(askGoods); //要货单数量
  112. int alreadyNum = inviteMapper.getAskInfoNumVitrual(askGoods);//已扫描总数
  113. int inventoryAlready = inviteMapper.getInventoryAlready(askGoods);//库存已扫描数量
  114. Double inventorySurplus = (Double.parseDouble(inventory.getAmount()) - Double.parseDouble(inventory.getAmountLock())) - inventoryAlready; //库存剩余数量
  115. Double surplusNum = Double.parseDouble(askGoods1.getNum()) - Double.parseDouble(askGoods1.getOutNum()) - alreadyNum; //剩余要扫描数量
  116. if(Double.doubleToLongBits(surplusNum) >= Double.doubleToLongBits(inventorySurplus)){
  117. askGoods.setNum(String.valueOf(inventorySurplus));
  118. } else {
  119. askGoods.setNum(String.valueOf(surplusNum));
  120. }
  121. askGoods.setStorageLocationCode(inventory.getStorageLocationCode());//库存编号
  122. inviteMapper.addAskGoodsVitrual(askGoods);
  123. map.put("msg", "200");
  124. }catch (Exception e){
  125. e.printStackTrace();
  126. map.put("msg", "500");
  127. map.put("errMsg", "失败");
  128. }
  129. return map;
  130. }
  131. @Override
  132. @Transactional(rollbackFor = Exception.class)
  133. public Map<String, Object> OutOfLibrary(String uniqueCode, String type, String askGoodsId) {
  134. Map<String, Object> map = new HashMap<>();
  135. //redis并发锁
  136. RLock lock = redissonClient.getLock(uniqueCode);
  137. lock.lock();
  138. try{
  139. String removalCode = codeGenerateCk();
  140. List<AskGoods> list = inviteMapper.getVirtualUniqueCode(uniqueCode, type, askGoodsId);
  141. for(AskGoods askGoods : list){
  142. askGoods.setStorageCode(removalCode);
  143. askGoods.setCompanyNumber(askGoods.getAccountSleeve());
  144. Inventory inventory = inviteMapper.getInventory(askGoods);
  145. if(inventory == null){
  146. throw new Exception("库存不存在");
  147. }
  148. //如果出库库存等于虚拟表库存则删除此库存
  149. if( Double.doubleToLongBits(Double.parseDouble(askGoods.getNum())) == Double.doubleToLongBits(Double.parseDouble(inventory.getAmount())) ){
  150. inviteMapper.deleteInventory(inventory);
  151. } else {
  152. inventory.setAmount(askGoods.getNum());
  153. inviteMapper.updateInventory(inventory);
  154. }
  155. String materialId = inviteMapper.getMaterialId(askGoods.getWllbCode());//查询物料id
  156. AskGoods askGoods1 = inviteMapper.getAskDetailed(askGoodsId, materialId);//查询要料申请单内容
  157. ReturRemoval returRemoval = new ReturRemoval()
  158. .setMaterialId(materialId)
  159. .setDocumentId(askGoodsId)
  160. .setWbs(askGoods1.getWbs())
  161. .setNum(askGoods.getNum())
  162. .setEntryNumber(askGoods1.getEntryNumber())
  163. .setDocumentPointsId(askGoods1.getId())
  164. .setStorageLocationCode(askGoods.getStorageLocationCode());
  165. inviteMapper.addRemoval(askGoods);//插入出库流水
  166. inviteMapper.deleteVirtual(askGoods.getId());//删除已出虚拟表库存
  167. inviteMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息
  168. inviteMapper.updateOutNum(askGoods.getNum(), askGoodsId, materialId);//修改出库数量
  169. }
  170. //查询要货单父级信息
  171. AskGoods askGoods3 = inviteMapper.getAskDetailedF(askGoodsId);
  172. ReturRemoval returRemoval1 = new ReturRemoval()
  173. .setDocumentId(askGoods3.getAskGoodsId())
  174. .setRemovalCode(removalCode)
  175. .setSourceType(askGoods3.getSourceType())
  176. .setMoveType(askGoods3.getMoveType());
  177. inviteMapper.addReturnGsRemovalF(returRemoval1);//新增返回gs数据父表信息
  178. map.put("data", askGoods3.getAskGoodsId());
  179. map.put("msg", "200");
  180. }catch (Exception e){
  181. e.printStackTrace();
  182. map.put("msg", "500");
  183. map.put("errMsg", "失败");
  184. } finally {
  185. //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
  186. if (lock.isLocked() && lock.isHeldByCurrentThread()) {
  187. //释放锁
  188. lock.unlock();
  189. }
  190. }
  191. return map;
  192. }
  193. /**
  194. * 半成品/产成品入库通知
  195. * @return
  196. */
  197. @Override
  198. public Map<String, Object> prodStockInNotice(List<Map<String, Object>> mapList) {
  199. Map<String, Object> map = new HashMap<>();
  200. try {
  201. inviteMapper.addNotice(mapList);
  202. //新增日志
  203. Access access = new Access().setType("报工单").setData(JSON.toJSONString(mapList)).setAccessType("0");
  204. dictionaryMapper.addAccess(access);
  205. map.put("status", "0000");
  206. map.put("msg","成功");
  207. }catch (Exception e){
  208. e.printStackTrace();
  209. map.put("status", "0009");
  210. map.put("msg", "服务器请求异常,请稍后再试");
  211. }
  212. return map;
  213. }
  214. /**
  215. * 交货单接口
  216. * @return
  217. */
  218. @Override
  219. public Map<String, Object> deliveryOrder(List<Map<String, Object>> mapList) {
  220. Map<String, Object> map = new HashMap<>();
  221. try {
  222. for (Map<String, Object> list : mapList) {
  223. if (list.get("operationType").toString().equals("2")){
  224. //查询子表数据根据交货单id
  225. int count = inviteMapper.getCountDelivery(list.get("deliveryOrderId").toString());
  226. //是否存在
  227. if (count == 0){
  228. //修改父子表信息
  229. inviteMapper.updDelivery(list.get("deliveryOrderId").toString());
  230. //添加
  231. inviteMapper.addDeliverys(list);
  232. }
  233. }else {
  234. //添加
  235. inviteMapper.addDeliverys(list);
  236. }
  237. }
  238. // inviteMapper.addDelivery(mapList);
  239. //新增日志
  240. Access access = new Access().setType("交货单").setData(JSON.toJSONString(mapList)).setAccessType("0");
  241. dictionaryMapper.addAccess(access);
  242. map.put("status", "0000");
  243. map.put("msg","成功");
  244. }catch (Exception e){
  245. e.printStackTrace();
  246. map.put("status", "0009");
  247. map.put("msg", "服务器请求异常,请稍后再试");
  248. }
  249. return map;
  250. }
  251. /**
  252. * 移库通知单
  253. * @return 是否成功
  254. */
  255. @Override
  256. public Map<String, Object> transferNotice(List<Map<String, Object>> mapList) {
  257. Map<String, Object> map = new HashMap<>();
  258. try {
  259. inviteMapper.addWarehouseTransfer(mapList);
  260. //新增日志
  261. Access access = new Access().setType("移库单").setData(JSON.toJSONString(mapList)).setAccessType("0");
  262. dictionaryMapper.addAccess(access);
  263. map.put("status", "0000");
  264. map.put("msg","成功");
  265. }catch (Exception e){
  266. e.printStackTrace();
  267. map.put("status", "0009");
  268. map.put("msg", "服务器请求异常,请稍后再试");
  269. }
  270. return map;
  271. }
  272. @Override
  273. @Transactional(rollbackFor = Exception.class)
  274. public Map<String, Object> delAskGoods(String id, HttpServletRequest request) {
  275. Map<String, Object> map = new HashMap<>();
  276. try{
  277. String userId = request.getHeader("userId");
  278. Map<String, Object> mapVal = inviteMapper.getDelAskGoods(id);
  279. if(Double.doubleToLongBits(Double.parseDouble(mapVal.get("out_num").toString())) > 0){
  280. map.put("msg", "500");
  281. map.put("errMsg", "此单据已出库!");
  282. return map;
  283. }
  284. LogData logData = new LogData()
  285. .setUserId(userId)
  286. .setData(mapVal.toString())
  287. .setType("0")
  288. .setDocumentType("非生产领料");
  289. dictionaryMapper.addLogdata(logData);
  290. inviteMapper.delAskGoods(id);
  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. /**
  300. * @Description: 其他收货/其它入库
  301. * @Param: List<Map<String, Object>> mapList
  302. * @return: Map<String, Object> map
  303. * @Author: XiaoChen
  304. * @Date: 2023/4/11
  305. */
  306. @Override
  307. public Map<String, Object> otherReceivingGoods(List<Map<String, Object>> mapList) {
  308. Map<String, Object> map = new HashMap<>();
  309. try {
  310. inviteMapper.otherReceivingGoods(mapList);
  311. //新增日志
  312. Access access = new Access().setType("其他入库").setData(JSON.toJSONString(mapList)).setAccessType("0");
  313. dictionaryMapper.addAccess(access);
  314. map.put("status", "0000");
  315. map.put("msg","成功");
  316. }catch (Exception e){
  317. e.printStackTrace();
  318. map.put("status", "0009");
  319. map.put("msg", "服务器请求异常,请稍后再试");
  320. }
  321. return map;
  322. }
  323. /**
  324. * @Description: 其它出库
  325. * @Param: List<Map<String, Object>> mapList
  326. * @return: Map<String, Object> map
  327. * @Author: XiaoChen
  328. * @Date: 2023/4/11
  329. */
  330. @Override
  331. public Map<String, Object> otherShipments(List<Map<String, Object>> mapList) {
  332. Map<String, Object> map = new HashMap<>();
  333. try {
  334. inviteMapper.otherShipments(mapList);
  335. //新增日志
  336. Access access = new Access().setType("其他出库").setData(JSON.toJSONString(mapList)).setAccessType("0");
  337. dictionaryMapper.addAccess(access);
  338. map.put("status", "0000");
  339. map.put("msg","成功");
  340. }catch (Exception e){
  341. e.printStackTrace();
  342. map.put("status", "0009");
  343. map.put("msg", "服务器请求异常,请稍后再试");
  344. }
  345. return map;
  346. }
  347. /**
  348. * @Description: 补领料申请
  349. * @Param: List<Map<String, Object>> mapList
  350. * @return: Map<String, Object> map
  351. * @Author: XiaoChen
  352. * @Date: 2023/4/11
  353. */
  354. @Override
  355. public Map<String, Object> sStoresRequisition(List<Map<String, Object>> mapList) {
  356. Map<String, Object> map = new HashMap<>();
  357. try {
  358. inviteMapper.sStoresRequisition(mapList);
  359. //新增日志
  360. Access access = new Access().setType("领料申请").setData(JSON.toJSONString(mapList)).setAccessType("0");
  361. dictionaryMapper.addAccess(access);
  362. map.put("status", "0000");
  363. map.put("msg","成功");
  364. }catch (Exception e){
  365. e.printStackTrace();
  366. map.put("status", "0009");
  367. map.put("msg", "服务器请求异常,请稍后再试");
  368. }
  369. return map;
  370. }
  371. /**
  372. * 出库单生成
  373. * @return
  374. */
  375. public String codeGenerateCk(){
  376. StringBuilder stringBuilder = new StringBuilder("CK");
  377. Date date = new Date();
  378. SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
  379. stringBuilder.append(sdf.format(date));
  380. int count = inviteMapper.getReturnRemovalCount();
  381. for(int i = 0; i < 4 - (count + "").length(); i++){
  382. stringBuilder.append("0");
  383. }
  384. return (stringBuilder.append(count + 1)).toString();
  385. }
  386. /**
  387. * @Description: 非生产领用
  388. * @Param: List<Map<String,Object>> mapList
  389. * @return: Map<String, Object> map
  390. * @Author: XiaoChen
  391. * @Date: 2023/4/10
  392. */
  393. @Override
  394. @Transactional(rollbackFor = Exception.class)
  395. public Map<String, Object> addAskGoodsNoProd(List<Map<String,Object>> mapList) {
  396. Map<String, Object> map = new HashMap<>();
  397. try{
  398. List<AskGoods> askGoodsList = new LinkedList<AskGoods>();
  399. for(Map<String,Object> jsonMap:mapList) {
  400. List<Map<String, Object>> list = (List) jsonMap.get("datalist");
  401. for (Map<String, Object> element : list) {
  402. AskGoods ag = new AskGoods();
  403. //父表
  404. ag.setAskGoodsId(jsonMap.get("requestOrderId").toString());
  405. ag.setAskGoodsCode(jsonMap.get("requestOrderNo").toString());
  406. ag.setCompanyNumber(jsonMap.get("companyNo").toString());
  407. ag.setSqrq(jsonMap.get("applicationDate").toString());//申请日期
  408. ag.setDepartment(jsonMap.get("useDepartment").toString());
  409. ag.setSourceType(jsonMap.get("sourceType").toString());
  410. ag.setMoveType(jsonMap.get("moveType").toString());
  411. ag.setRequestTypeNumber(jsonMap.get("requestTypeNumber").toString());
  412. ag.setRequestTypeName(jsonMap.get("requestTypeName").toString());
  413. ag.setIfCommodity(jsonMap.get("ifCommodity").toString());
  414. //子表
  415. ag.setEntryNumber(element.get("entryNumber").toString());
  416. ag.setProductionCode(element.get("prodOrderNo").toString());//
  417. ag.setMaterialId(element.get("materialId").toString());
  418. ag.setWbs(element.get("WBS").toString());//
  419. ag.setMeasurementId(element.get("measUnitId").toString());
  420. ag.setNum(element.get("orderCount").toString());
  421. ag.setOutNum("0");
  422. ag.setAskGoodsType("0");
  423. askGoodsList.add(ag);
  424. }
  425. }
  426. for(AskGoods askGoods : askGoodsList) {
  427. int count = inviteMapper.getAskGoods(askGoods);
  428. if (count != 0) {
  429. inviteMapper.updateAskGoodsNum(askGoods);
  430. } else {
  431. if (inviteMapper.getAskGoodsf(askGoods) == 0) {
  432. inviteMapper.addAskGoodsf(askGoods);
  433. }
  434. inviteMapper.addAskGoods(askGoods);
  435. }
  436. inviteMapper.addAskGoodsLog(askGoods);
  437. }
  438. //新增日志
  439. Access access = new Access().setType("非生产领料信息").setData(JSON.toJSONString(mapList)).setAccessType("0");
  440. dictionaryMapper.addAccess(access);
  441. map.put("status", "0000");
  442. map.put("msg","成功");
  443. }catch (Exception e){
  444. e.printStackTrace();
  445. map.put("status", "0009");
  446. map.put("msg", "服务器请求异常,请稍后再试");
  447. }
  448. return map;
  449. }
  450. }