InviteServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. package com.tld.service.impl;
  2. import com.tld.mapper.InviteMapper;
  3. import com.tld.model.AskGoods;
  4. import com.tld.model.Inventory;
  5. import com.tld.model.Notice;
  6. import com.tld.model.ReturRemoval;
  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 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. @Override
  23. public Map<String, Object> getAskGoodsfList(AskGoods askGoods) {
  24. Map<String, Object> map = new HashMap<>();
  25. try{
  26. List<AskGoods> list = inviteMapper.getAskGoodsfList(askGoods);
  27. map.put("data", list);
  28. map.put("msg", "200");
  29. }catch (Exception e){
  30. e.printStackTrace();
  31. map.put("msg", "500");
  32. map.put("errMsg", "失败");
  33. }
  34. return map;
  35. }
  36. @Override
  37. public Map<String, Object> getAskGoodsMaterial(AskGoods askGoods) {
  38. Map<String, Object> map = new HashMap<>();
  39. try{
  40. List<AskGoods> list = inviteMapper.getAskGoodsMaterial(askGoods);
  41. List<String> scanNum = new LinkedList<>();
  42. for(AskGoods askGoods1 : list){
  43. askGoods1.setUniqueCode(askGoods.getUniqueCode());
  44. askGoods1.setAskGoodsId(askGoods.getAskGoodsId());
  45. scanNum.add(inviteMapper.getScanNum(askGoods1));//扫描总数
  46. }
  47. map.put("scanNum", scanNum);
  48. map.put("data", list);
  49. map.put("msg", "200");
  50. }catch (Exception e){
  51. e.printStackTrace();
  52. map.put("msg", "500");
  53. map.put("errMsg", "失败");
  54. }
  55. return map;
  56. }
  57. @Override
  58. public Map<String, Object> getMaterialCk(AskGoods askGoods) {
  59. Map<String, Object> map = new HashMap<>();
  60. try{
  61. List<Inventory> list = new LinkedList<>();
  62. for(Inventory inventory : inviteMapper.getMaterialCk(askGoods)){
  63. AskGoods askGoods1 = inviteMapper.getAsk(inventory);
  64. if(askGoods1 != null){
  65. if(Double.parseDouble(askGoods1.getNum()) != Double.parseDouble(inventory.getAmount())){
  66. list.add(inventory);
  67. }
  68. } else {
  69. list.add(inventory);
  70. }
  71. }
  72. map.put("data", list);
  73. map.put("msg", "200");
  74. }catch (Exception e){
  75. e.printStackTrace();
  76. map.put("msg", "500");
  77. map.put("errMsg", "失败");
  78. }
  79. return map;
  80. }
  81. @Override
  82. @Transactional(rollbackFor = Exception.class)
  83. public Map<String, Object> addAskGoodsVitrual(AskGoods askGoods) {
  84. Map<String, Object> map = new HashMap<>();
  85. try{
  86. Map<String, Object> mapVal = inviteMapper.getScanIsNot(askGoods);
  87. if((Double.parseDouble(mapVal.get("inventoryNum").toString()) - Double.parseDouble(mapVal.get("virtualNum").toString())) == 0){
  88. map.put("msg", "500");
  89. map.put("errMsg", "已全部出库");
  90. return map;
  91. }
  92. Inventory inventory = inviteMapper.getInventory(askGoods); //库存数量
  93. AskGoods askGoods1 = inviteMapper.getAsknInfo(askGoods); //要货单数量
  94. int alreadyNum = inviteMapper.getAskInfoNumVitrual(askGoods);//已扫描总数
  95. int inventoryAlready = inviteMapper.getInventoryAlready(askGoods);//库存已扫描数量
  96. int inventorySurplus = (Integer.parseInt(inventory.getAmount()) - Integer.parseInt(inventory.getAmountLock())) - inventoryAlready; //库存剩余数量
  97. int surplusNum = Integer.parseInt(askGoods1.getNum()) - alreadyNum; //剩余要扫描数量
  98. if(surplusNum >= inventorySurplus){
  99. askGoods.setNum(String.valueOf(inventorySurplus));
  100. } else {
  101. askGoods.setNum(String.valueOf(surplusNum));
  102. }
  103. askGoods.setStorageLocationCode(inventory.getStorageLocationCode());//库存编号
  104. inviteMapper.addAskGoodsVitrual(askGoods);
  105. map.put("msg", "200");
  106. }catch (Exception e){
  107. e.printStackTrace();
  108. map.put("msg", "500");
  109. map.put("errMsg", "失败");
  110. }
  111. return map;
  112. }
  113. @Override
  114. @Transactional(rollbackFor = Exception.class)
  115. public Map<String, Object> OutOfLibrary(String uniqueCode, String type, String askGoodsId) {
  116. Map<String, Object> map = new HashMap<>();
  117. //redis并发锁
  118. RLock lock = redissonClient.getLock(uniqueCode);
  119. lock.lock();
  120. try{
  121. List<AskGoods> list = inviteMapper.getVirtualUniqueCode(uniqueCode, type, askGoodsId);
  122. String removalCode = codeGenerateCk();
  123. for(AskGoods askGoods : list){
  124. askGoods.setStorageCode(removalCode);
  125. Inventory inventory = inviteMapper.getInventory(askGoods);
  126. if(inventory == null){
  127. throw new Exception("库存不存在");
  128. }
  129. //如果出库库存等于虚拟表库存则删除此库存
  130. if(Integer.parseInt(askGoods.getNum()) == Integer.parseInt(inventory.getAmount())){
  131. inviteMapper.deleteInventory(inventory);
  132. } else {
  133. inventory.setAmount(askGoods.getNum());
  134. inviteMapper.updateInventory(inventory);
  135. }
  136. String materialId = inviteMapper.getMaterialId(askGoods.getWllbCode(), askGoods.getAccountSleeve());//查询物料id
  137. AskGoods askGoods1 = inviteMapper.getAskDetailed(askGoodsId, materialId);//查询要料申请单内容
  138. ReturRemoval returRemoval = new ReturRemoval()
  139. .setMaterialId(materialId)
  140. .setDocumentId(askGoodsId)
  141. .setWbs(askGoods1.getWbs())
  142. .setNum(askGoods.getNum())
  143. .setEntryNumber(askGoods1.getEntryNumber())
  144. .setDocumentPointsId(askGoods1.getId())
  145. .setStorageLocationCode(askGoods.getStorageLocationCode());
  146. inviteMapper.addRemoval(askGoods);//插入出库流水
  147. inviteMapper.deleteVirtual(askGoods.getId());//删除已出虚拟表库存
  148. inviteMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息
  149. inviteMapper.updateOutNum(askGoods.getNum(), askGoodsId, materialId);//修改出库数量
  150. }
  151. //查询要货单父级信息
  152. AskGoods askGoods3 = inviteMapper.getAskDetailedF(askGoodsId);
  153. ReturRemoval returRemoval1 = new ReturRemoval()
  154. .setDocumentId(askGoods3.getAskGoodsId())
  155. .setRemovalCode(removalCode)
  156. .setSourceType(askGoods3.getSourceType())
  157. .setMoveType(askGoods3.getMoveType());
  158. inviteMapper.addReturnGsRemovalF(returRemoval1);//新增返回gs数据父表信息
  159. map.put("data", askGoods3.getAskGoodsId());
  160. map.put("msg", "200");
  161. }catch (Exception e){
  162. e.printStackTrace();
  163. map.put("msg", "500");
  164. map.put("errMsg", "失败");
  165. } finally {
  166. //释放锁
  167. lock.unlock();
  168. }
  169. return map;
  170. }
  171. /**
  172. * 半成品/产成品入库通知
  173. * @return
  174. */
  175. @Override
  176. public Map<String, Object> prodStockInNotice(List<Map<String, Object>> mapList) {
  177. Map<String, Object> map = new HashMap<>();
  178. try {
  179. inviteMapper.addNotice(mapList);
  180. map.put("status", "0000");
  181. map.put("msg","成功");
  182. }catch (Exception e){
  183. e.printStackTrace();
  184. map.put("status", "0009");
  185. map.put("msg", "服务器请求异常,请稍后再试");
  186. }
  187. return map;
  188. }
  189. /**
  190. * 交货单接口
  191. * @return
  192. */
  193. @Override
  194. public Map<String, Object> deliveryOrder(List<Map<String, Object>> mapList) {
  195. Map<String, Object> map = new HashMap<>();
  196. try {
  197. inviteMapper.addDelivery(mapList);
  198. map.put("status", "0000");
  199. map.put("msg","成功");
  200. }catch (Exception e){
  201. e.printStackTrace();
  202. map.put("status", "0009");
  203. map.put("msg", "服务器请求异常,请稍后再试");
  204. }
  205. return map;
  206. }
  207. /**
  208. * 移库通知单
  209. * @return
  210. */
  211. @Override
  212. public Map<String, Object> transferNotice(List<Map<String, Object>> mapList) {
  213. Map<String, Object> map = new HashMap<>();
  214. try {
  215. inviteMapper.addWarehouseTransfer(mapList);
  216. map.put("status", "0000");
  217. map.put("msg","成功");
  218. }catch (Exception e){
  219. e.printStackTrace();
  220. map.put("status", "0009");
  221. map.put("msg", "服务器请求异常,请稍后再试");
  222. }
  223. return map;
  224. }
  225. /**
  226. * 出库单生成
  227. * @return
  228. */
  229. public String codeGenerateCk(){
  230. StringBuilder stringBuilder = new StringBuilder("CK");
  231. Date date = new Date();
  232. SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
  233. stringBuilder.append(sdf.format(date));
  234. int count = inviteMapper.getReturnRemovalCount();
  235. for(int i = 0; i < 4 - (count + "").length(); i++){
  236. stringBuilder.append("0");
  237. }
  238. return (stringBuilder.append(count + 1)).toString();
  239. }
  240. @Override
  241. @Transactional(rollbackFor = Exception.class)
  242. public Map<String, Object> addAskGoodsNoProd(List<Map<String,Object>> mapList) {
  243. Map<String, Object> map = new HashMap<>();
  244. try{
  245. List<AskGoods> askGoodsList = new LinkedList<AskGoods>();
  246. for(Map<String,Object> jsonMap:mapList) {
  247. List<Map<String, Object>> list = (List) jsonMap.get("datalist");
  248. for (Map<String, Object> element : list) {
  249. AskGoods ag = new AskGoods();
  250. //父表
  251. ag.setAskGoodsId(jsonMap.get("requestOrderId").toString());
  252. ag.setAskGoodsCode(jsonMap.get("requestOrderNo").toString());
  253. ag.setCompanyNumber(jsonMap.get("companyNo").toString());
  254. ag.setSqrq(jsonMap.get("applicationDate").toString());//申请日期
  255. ag.setDepartment(jsonMap.get("useDepartment").toString());
  256. ag.setSourceType(jsonMap.get("sourceType").toString());
  257. ag.setMoveType(jsonMap.get("moveType").toString());
  258. ag.setAskGoodsApplyType(jsonMap.get("requestOrderType").toString());
  259. //子表
  260. ag.setEntryNumber(element.get("entryNumber").toString());
  261. ag.setProductionCode(element.get("prodOrderNo").toString());//
  262. ag.setMaterialId(element.get("materialId").toString());
  263. ag.setWbs(element.get("WBS").toString());//
  264. ag.setMeasurementId(element.get("measUnitId").toString());
  265. ag.setNum(element.get("orderCount").toString());
  266. ag.setOutNum("0");
  267. ag.setAskGoodsType("0");
  268. askGoodsList.add(ag);
  269. }
  270. }
  271. for(AskGoods askGoods : askGoodsList) {
  272. int count = inviteMapper.getAskGoods(askGoods);
  273. if (count != 0) {
  274. inviteMapper.updateAskGoodsNum(askGoods);
  275. } else {
  276. if (inviteMapper.getAskGoodsf(askGoods) == 0) {
  277. inviteMapper.addAskGoodsf(askGoods);
  278. }
  279. inviteMapper.addAskGoods(askGoods);
  280. }
  281. inviteMapper.addAskGoodsLog(askGoods);
  282. }
  283. map.put("status", "0000");
  284. map.put("msg","成功");
  285. }catch (Exception e){
  286. e.printStackTrace();
  287. map.put("status", "0009");
  288. map.put("msg", "服务器请求异常,请稍后再试");
  289. }
  290. return map;
  291. }
  292. }