AskGoodsServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. package com.tld.service.impl;
  2. import com.github.pagehelper.PageHelper;
  3. import com.github.pagehelper.PageInfo;
  4. import com.tld.excel.ExcelUtils;
  5. import com.tld.mapper.AskGoodsMapper;
  6. import com.tld.model.AskGoods;
  7. import com.tld.model.Inventory;
  8. import com.tld.model.ReturRemoval;
  9. import com.tld.service.AskGoodsService;
  10. import org.redisson.api.RLock;
  11. import org.redisson.api.RedissonClient;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.stereotype.Service;
  14. import javax.servlet.http.HttpServletResponse;
  15. import java.text.SimpleDateFormat;
  16. import java.util.*;
  17. @Service
  18. public class AskGoodsServiceImpl implements AskGoodsService {
  19. @Autowired
  20. private AskGoodsMapper askGoodsMapper;
  21. //redis锁
  22. @Autowired
  23. private RedissonClient redissonClient;
  24. @Override
  25. public Map<String, Object> addAskGoods(AskGoods askGoods) {
  26. Map<String, Object> map = new HashMap<>();
  27. try{
  28. int count = askGoodsMapper.getAskGoods(askGoods);
  29. if(count != 0){
  30. askGoodsMapper.updateAskGoodsNum(askGoods);
  31. } else {
  32. if(askGoodsMapper.getAskGoodsf(askGoods) == 0){
  33. askGoodsMapper.addAskGoodsf(askGoods);
  34. }
  35. askGoodsMapper.addAskGoods(askGoods);
  36. }
  37. askGoodsMapper.addAskGoodsLog(askGoods);
  38. map.put("msg", "200");
  39. }catch (Exception e){
  40. e.printStackTrace();
  41. map.put("msg", "500");
  42. map.put("errMsg", "失败");
  43. }
  44. return map;
  45. }
  46. @Override
  47. public Map<String, Object> getAskGoodsfList(AskGoods askGoods) {
  48. Map<String, Object> map = new HashMap<>();
  49. try{
  50. List<AskGoods> list = askGoodsMapper.getAskGoodsfList(askGoods);
  51. map.put("data", list);
  52. map.put("msg", "200");
  53. }catch (Exception e){
  54. e.printStackTrace();
  55. map.put("msg", "500");
  56. map.put("errMsg", "失败");
  57. }
  58. return map;
  59. }
  60. @Override
  61. public Map<String, Object> getAskGoodsMaterial(AskGoods askGoods) {
  62. Map<String, Object> map = new HashMap<>();
  63. try{
  64. List<AskGoods> list = askGoodsMapper.getAskGoodsMaterial(askGoods);
  65. List<String> scanNum = new LinkedList<>();
  66. for(AskGoods askGoods1 : list){
  67. askGoods1.setUniqueCode(askGoods.getUniqueCode());
  68. askGoods1.setAskGoodsId(askGoods.getAskGoodsId());
  69. scanNum.add(askGoodsMapper.getScanNum(askGoods1));//扫描总数
  70. }
  71. map.put("scanNum", scanNum);
  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. public Map<String, Object> getMaterialCk(AskGoods askGoods) {
  83. Map<String, Object> map = new HashMap<>();
  84. try{
  85. List<Inventory> list = new LinkedList<>();
  86. for(Inventory inventory : askGoodsMapper.getMaterialCk(askGoods)){
  87. AskGoods askGoods1 = askGoodsMapper.getAsk(inventory);
  88. if(askGoods1 != null){
  89. if(Integer.parseInt(askGoods1.getNum()) != Integer.parseInt(inventory.getAmount())){
  90. list.add(inventory);
  91. }
  92. } else {
  93. list.add(inventory);
  94. }
  95. }
  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> addAskGoodsVitrual(AskGoods askGoods) {
  107. Map<String, Object> map = new HashMap<>();
  108. try{
  109. Map<String, Object> mapVal = askGoodsMapper.getScanIsNot(askGoods);
  110. if((Integer.parseInt(mapVal.get("inventoryNum").toString()) - Integer.parseInt(mapVal.get("virtualNum").toString())) == 0){
  111. map.put("msg", "500");
  112. map.put("errMsg", "已全部出库");
  113. return map;
  114. }
  115. Inventory inventory = askGoodsMapper.getInventory(askGoods); //库存数量
  116. AskGoods askGoods1 = askGoodsMapper.getAsknInfo(askGoods); //要货单数量
  117. int alreadyNum = askGoodsMapper.getAskInfoNumVitrual(askGoods);//已扫描总数
  118. int inventoryAlready = askGoodsMapper.getInventoryAlready(askGoods);//库存已扫描数量
  119. int inventorySurplus = Integer.parseInt(inventory.getAmount()) - inventoryAlready; //库存剩余数量
  120. int surplusNum = Integer.parseInt(askGoods1.getNum()) - alreadyNum; //剩余要扫描数量
  121. if(surplusNum >= inventorySurplus){
  122. askGoods.setNum(String.valueOf(inventorySurplus));
  123. } else {
  124. askGoods.setNum(String.valueOf(surplusNum));
  125. }
  126. askGoods.setStorageLocationCode(inventory.getStorageLocationCode());//库存编号
  127. askGoodsMapper.addAskGoodsVitrual(askGoods);
  128. map.put("msg", "200");
  129. }catch (Exception e){
  130. e.printStackTrace();
  131. map.put("msg", "500");
  132. map.put("errMsg", "失败");
  133. }
  134. return map;
  135. }
  136. @Override
  137. public Map<String, Object> OutOfLibrary(String uniqueCode, String type, String askGoodsId) {
  138. Map<String, Object> map = new HashMap<>();
  139. //redis并发锁
  140. RLock lock = redissonClient.getLock(uniqueCode);
  141. lock.lock();
  142. try{
  143. List<AskGoods> list = askGoodsMapper.getVirtualUniqueCode(uniqueCode, type, askGoodsId);
  144. for(AskGoods askGoods : list){
  145. Inventory inventory = askGoodsMapper.getInventory(askGoods);
  146. //如果出库库存等于虚拟表库存则删除此库存
  147. if(Integer.parseInt(askGoods.getNum()) == Integer.parseInt(inventory.getAmount())){
  148. askGoodsMapper.deleteInventory(inventory);
  149. } else {
  150. inventory.setAmount(askGoods.getNum());
  151. askGoodsMapper.updateInventory(inventory);
  152. }
  153. String materialId = askGoodsMapper.getMaterialId(askGoods.getWllbCode());//查询物料id
  154. AskGoods askGoods1 = askGoodsMapper.getAskDetailed(askGoodsId, materialId);//查询要料申请单内容
  155. ReturRemoval returRemoval = new ReturRemoval()
  156. .setMaterialId(materialId)
  157. .setAskGoodsId(askGoodsId)
  158. .setWbs(askGoods1.getWbs())
  159. .setNum(askGoods.getNum())
  160. .setEntryNumber(askGoods1.getEntryNumber())
  161. .setAskId(askGoods1.getId())
  162. .setStorageLocationCode(askGoods.getStorageLocationCode());
  163. askGoodsMapper.addRemoval(askGoods);//插入出库流水
  164. askGoodsMapper.deleteVirtual(askGoods.getId());//删除已出虚拟表库存
  165. askGoodsMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息
  166. askGoodsMapper.updateOutNum(askGoods.getNum(), askGoodsId, materialId);//修改出库数量
  167. }
  168. //查询要货单父级信息
  169. AskGoods askGoods3 = askGoodsMapper.getAskDetailedF(askGoodsId);
  170. String removalCode = codeGenerateCk();
  171. ReturRemoval returRemoval1 = new ReturRemoval()
  172. .setAskGoodsId(askGoods3.getAskGoodsId())
  173. .setRemovalCode(removalCode)
  174. .setSourceType(askGoods3.getSourceType())
  175. .setMoveType(askGoods3.getMoveType());
  176. askGoodsMapper.addReturnGsRemovalF(returRemoval1);//新增返回gs数据父表信息
  177. map.put("data", removalCode);
  178. map.put("msg", "200");
  179. }catch (Exception e){
  180. e.printStackTrace();
  181. map.put("msg", "500");
  182. map.put("errMsg", "失败");
  183. } finally {
  184. //释放锁
  185. lock.unlock();
  186. }
  187. return map;
  188. }
  189. @Override
  190. public void plugOutRemoval(String removalCode) {
  191. try{
  192. Map<String, Object> map = askGoodsMapper.plugOutRemoval(removalCode);
  193. Calendar cal = Calendar.getInstance();
  194. int year = cal.get(Calendar.YEAR);
  195. int month = cal.get(Calendar.MONTH) + 1;
  196. int day = cal.get(Calendar.DATE) ;
  197. map.put("child", askGoodsMapper.getRemovalz(map.get("askGoodsId").toString()));
  198. map.put("isNotRed", "0");
  199. map.put("year", year);
  200. map.put("month", month);
  201. map.put("time", year + "-" + month + "-" + day);
  202. }catch (Exception e){
  203. e.printStackTrace();
  204. }
  205. }
  206. @Override
  207. public Map<String, Object> getRemoval(AskGoods askGoods) {
  208. Map<String, Object> map = new HashMap<>();
  209. try{
  210. //查询数据
  211. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  212. PageInfo<AskGoods> list = new PageInfo<>(askGoodsMapper.getRemoval(askGoods));
  213. map.put("data", list);
  214. map.put("msg", "200");
  215. }catch (Exception e){
  216. e.printStackTrace();
  217. map.put("msg", "500");
  218. map.put("errMsg", "失败");
  219. }
  220. return map;
  221. }
  222. @Override
  223. public void export(AskGoods askGoods, HttpServletResponse response) {
  224. try{
  225. //导出数据汇总
  226. List<List<Object>> sheetDataList = new ArrayList<>();
  227. //表头数据
  228. List<Object> head = Arrays.asList("物料名称", "供应商名称", "连翻号", "类型", "出库用户", "领用部门", "库位名称", "出库日期", "出库数量");
  229. //查询数据
  230. PageHelper.startPage(askGoods.getPage(), askGoods.getLimit());
  231. PageInfo<Map<String, Object>> list = new PageInfo<>(askGoodsMapper.export(askGoods));
  232. sheetDataList.add(head);
  233. for(Map<String, Object> userMap : list.getList()){
  234. List<Object> listSheet = new ArrayList<>();
  235. for(String key: userMap.keySet()){
  236. listSheet.add(userMap.get(key));
  237. }
  238. sheetDataList.add(listSheet);
  239. }
  240. //当前时间
  241. Date time = new Date();
  242. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss");
  243. ExcelUtils.export(response, "出库流水数据导出" + sdf.format(time), sheetDataList);
  244. }catch (Exception e){
  245. e.printStackTrace();
  246. }
  247. }
  248. @Override
  249. public Map<String, Object> getAskGoodsVitrual(String uniqueCode, String type) {
  250. Map<String, Object> map = new HashMap<>();
  251. try{
  252. List<AskGoods> list = askGoodsMapper.getAskGoodsVitrual(uniqueCode, type);
  253. map.put("data", list);
  254. map.put("msg", "200");
  255. }catch (Exception e){
  256. e.printStackTrace();
  257. map.put("msg", "500");
  258. map.put("errMsg", "失败");
  259. }
  260. return map;
  261. }
  262. @Override
  263. public Map<String, Object> delAskGoodsVitrual(String id) {
  264. Map<String, Object> map = new HashMap<>();
  265. try{
  266. askGoodsMapper.delAskGoodsVitrual(id);
  267. map.put("msg", "200");
  268. }catch (Exception e){
  269. e.printStackTrace();
  270. map.put("msg", "500");
  271. map.put("errMsg", "失败");
  272. }
  273. return map;
  274. }
  275. /**
  276. * 出库单生成
  277. * @return
  278. */
  279. public String codeGenerateCk(){
  280. StringBuilder stringBuilder = new StringBuilder("CK");
  281. Date date = new Date();
  282. SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
  283. stringBuilder.append(sdf.format(date));
  284. int count = askGoodsMapper.getReturnRemovalCount();
  285. for(int i = 0; i < 4 - (count + "").length(); i++){
  286. stringBuilder.append("0");
  287. }
  288. return (stringBuilder.append(count + 1)).toString();
  289. }
  290. }