InviteServiceImpl.java 18 KB

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