WarehouseTransferServiceImpl.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. package com.tld.service.impl;
  2. import com.tld.mapper.*;
  3. import com.tld.model.*;
  4. import com.tld.model.Dictionary;
  5. import com.tld.service.WarehouseTransferService;
  6. import lombok.RequiredArgsConstructor;
  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 javax.servlet.http.HttpServletRequest;
  12. import java.text.SimpleDateFormat;
  13. import java.util.*;
  14. @Service
  15. @RequiredArgsConstructor
  16. public class WarehouseTransferServiceImpl implements WarehouseTransferService {
  17. //移库
  18. private final WarehouseTransferMapper warehouseTransferMapper;
  19. //redis锁
  20. private final RedissonClient redissonClient;
  21. //出库
  22. private final AskGoodsMapper askGoodsMapper;
  23. //入库
  24. private final WarehousingMapper warehousingMapper;
  25. //字典
  26. private final DictionaryMapper dictionaryMapper;
  27. //用户
  28. private final UserMapper userMapper;
  29. @Override
  30. public Map<String, Object> getWarehouseTransfer(WarehouseTransfer warehouseTransfer) {
  31. Map<String, Object> map = new HashMap<>();
  32. try{
  33. List<WarehouseTransfer> list = warehouseTransferMapper.getWarehouseTransfer(warehouseTransfer);
  34. map.put("data", list);
  35. map.put("msg", "200");
  36. } catch (Exception e){
  37. e.printStackTrace();
  38. map.put("msg", "500");
  39. map.put("errMsg", "服务器请求异常,请稍后再试");
  40. }
  41. return map;
  42. }
  43. @Override
  44. public Map<String, Object> getRecommend(WarehouseTransfer warehouseTransfer) {
  45. Map<String, Object> map = new HashMap<>();
  46. try{
  47. Dictionary dictionary = dictionaryMapper.getWarehouseInfo(warehouseTransfer);
  48. if(dictionary.getName().equals("原材料库")){
  49. map.put("msg", "500");
  50. map.put("errMsg", "请扫描标签");
  51. return map;
  52. }
  53. List<Inventory> list = new LinkedList<>();
  54. for(Inventory inventory : warehouseTransferMapper.getMaterialCk(warehouseTransfer)){
  55. AskGoods askGoods1 = warehouseTransferMapper.getAsk(inventory);
  56. if(askGoods1 != null){
  57. if(Double.parseDouble(askGoods1.getNum()) != Double.parseDouble(inventory.getAmount())){
  58. list.add(inventory);
  59. }
  60. } else {
  61. list.add(inventory);
  62. }
  63. }
  64. map.put("data", list);
  65. map.put("msg", "200");
  66. }catch (Exception e){
  67. e.printStackTrace();
  68. map.put("msg", "500");
  69. map.put("errMsg", "失败");
  70. }
  71. return map;
  72. }
  73. @Override
  74. public Map<String, Object> OutOfLibrary(String uniqueCode, String type, String askGoodsId) {
  75. Map<String, Object> map = new HashMap<>();
  76. //redis并发锁
  77. RLock lock = redissonClient.getLock(uniqueCode);
  78. lock.lock();
  79. try{
  80. List<AskGoods> list = askGoodsMapper.getVirtualUniqueCode(uniqueCode, type, askGoodsId);
  81. //入库信息
  82. // List<WarehousingVirtual> warehousing = new LinkedList<>();
  83. String warehouseTransferCode = codeGenerateYK(); //移库单
  84. for(AskGoods askGoods : list){
  85. askGoods.setStorageCode(warehouseTransferCode);
  86. Inventory inventory = askGoodsMapper.getInventory(askGoods);
  87. if(inventory == null){
  88. throw new Exception("库存不存在");
  89. }
  90. //如果出库库存等于虚拟表库存则删除此库存
  91. if(Integer.parseInt(askGoods.getNum()) == Integer.parseInt(inventory.getAmount())){
  92. askGoodsMapper.deleteInventory(inventory);
  93. } else {
  94. inventory.setAmount(askGoods.getNum());
  95. askGoodsMapper.updateInventory(inventory);
  96. }
  97. String materialId = askGoodsMapper.getMaterialId(askGoods.getWllbCode());//查询物料id
  98. WarehouseTransfer warehouseTransfer = warehouseTransferMapper.getWarehouseTransferDetailed(askGoodsId, materialId);//查询移库申请内容
  99. // //入库流水信息
  100. // WarehousingVirtual WarehousingVirtual1 = new WarehousingVirtual()
  101. // .setWllbCode(askGoods.getWllbCode()) //物料code
  102. // .setSuppId(askGoods.getSupplierId())//供应商id
  103. // .setSerial(askGoods.getSerial())//连翻号
  104. // .setProducDate(askGoods.getProducDate())//批次
  105. // .setNum(askGoods.getNum())//入库数量
  106. // .setSeq("0")
  107. // .setType(askGoods.getType())//入库类型
  108. // .setUserId(askGoods.getUserId())//用户
  109. // .setDepartmentId(askGoods.getDepartmentId())//部门
  110. // .setStorageLocationCode(askGoods.getStorageLocationCode())//库位编号
  111. // .setStorageCode(warehouseTransferCode)//移库单号
  112. // .setWbs(warehouseTransfer.getWbs());//wbs
  113. // warehousing.add(WarehousingVirtual1);
  114. askGoodsMapper.addRemoval(askGoods);//插入出库流水
  115. askGoodsMapper.deleteVirtual(askGoods.getId());//删除已出虚拟表库存
  116. warehouseTransferMapper.updateOutNum(askGoods.getNum(), askGoodsId, materialId);//修改出库数量
  117. WarehouseTransfer warehouseTransfer1 = new WarehouseTransfer()
  118. .setWarehouseTransferId(warehouseTransfer.getWarehouseTransferId()) //移库单id
  119. .setEntryNumber(warehouseTransfer.getEntryNumber())//分录号
  120. .setSupplyWarehouseId(warehouseTransfer.getSupplyWarehouseId())//供货仓库id
  121. .setMaterialId(materialId)//物料id
  122. .setWbs(warehouseTransfer.getWbs())//wbs
  123. .setOutNum(askGoods.getNum()); //出库数量
  124. warehouseTransferMapper.addReturnGsWarehouseTransfer(warehouseTransfer1);//新增返回gs数据子表信息
  125. }
  126. WarehouseTransfer warehouseTransferF = warehouseTransferMapper.getWarehouseTransferDetailedF(askGoodsId);//查询父表移库单申请
  127. WarehouseTransfer warehouseTransfer1 = new WarehouseTransfer()
  128. .setWarehouseTransferId(warehouseTransferF.getWarehouseTransferId()) //移库单id
  129. .setWarehouseTransferCode(warehouseTransferCode)//移库单编号
  130. .setAskGoodsWarehouseId(warehouseTransferF.getAskGoodsWarehouseId()) //要货仓库id
  131. .setWarehouseTransferType(warehouseTransferF.getWarehouseTransferType()); //移库类型
  132. warehouseTransferMapper.addReturnGsWarehouseTransferF(warehouseTransfer1);//新增返回gs数据父表信息
  133. // warehousingMapper.addStorage(warehousing);//入库流水
  134. map.put("data", warehouseTransferCode);
  135. map.put("msg", "200");
  136. }catch (Exception e){
  137. e.printStackTrace();
  138. map.put("msg", "500");
  139. map.put("errMsg", "失败");
  140. } finally {
  141. //释放锁
  142. lock.unlock();
  143. }
  144. return map;
  145. }
  146. @Override
  147. public Map<String, Object> warehousing(String uniqueCode, String type) {
  148. Map<String, Object> map = new HashMap<>();
  149. try{
  150. //入库信息
  151. List<WarehousingVirtual> list = new LinkedList<>();
  152. List<WarehousingVirtual> warehousingVirtualList = warehousingMapper.getVirtual(uniqueCode, type);
  153. String warehouseTransferCode = codeGenerateYK(); //移库单
  154. //查询入库所需要的信息
  155. for(WarehousingVirtual warehousingVirtual : warehousingVirtualList) {
  156. //查询采购单信息
  157. String materialId = askGoodsMapper.getMaterialId(warehousingVirtual.getWllbCode());//查询物料id
  158. WarehouseTransfer warehouseTransfer = warehouseTransferMapper.getWarehouseTransferDetailed(warehousingVirtual.getWarehouseTransferId(), materialId);//查询移库申请内容
  159. if(warehouseTransfer != null) {
  160. //WBS
  161. warehousingVirtual.setWbs(warehouseTransfer.getWbs());
  162. warehousingVirtual.setWbs(warehouseTransfer.getWbs());
  163. }
  164. //查询部门编号
  165. List<User> listUser = userMapper.getAllUser(new User().setId(Integer.parseInt(warehousingVirtual.getUserId())));
  166. warehousingVirtual.setDepartmentId(listUser.get(0).getDepartmentId());
  167. //查询物料分类
  168. WarehousingVirtual warehousingVirtual1 = warehousingMapper.getWlClass(warehousingVirtual);
  169. warehousingVirtual.setWllbClass(warehousingVirtual1.getWllbClass());
  170. warehousingVirtual.setMaterialId(warehousingVirtual1.getMaterialId());
  171. warehousingVirtual.setStorageCode(warehouseTransferCode);
  172. list.add(warehousingVirtual);
  173. warehouseTransferMapper.updateOutNum(warehousingVirtual.getNum(), warehousingVirtual.getWarehouseTransferId(), materialId);//修改出库数量
  174. WarehouseTransfer warehouseTransfer1 = new WarehouseTransfer()
  175. .setWarehouseTransferId(warehouseTransfer.getWarehouseTransferId()) //移库单id
  176. .setEntryNumber(warehouseTransfer.getEntryNumber())//分录号
  177. .setSupplyWarehouseId(warehouseTransfer.getSupplyWarehouseId())//供货仓库id
  178. .setMaterialId(materialId)//物料id
  179. .setWbs(warehouseTransfer.getWbs())//wbs
  180. .setOutNum(warehousingVirtual.getNum()); //出库数量
  181. warehouseTransferMapper.addReturnGsWarehouseTransfer(warehouseTransfer1);//新增返回gs数据子表信息
  182. }
  183. //入库
  184. warehousingMapper.addStorage(list);//入库流水
  185. warehousingMapper.addInventory(list);//库存
  186. warehousingMapper.delVirtual(uniqueCode);//删除临时表数据
  187. WarehouseTransfer warehouseTransferF = warehouseTransferMapper.getWarehouseTransferDetailedF(warehousingVirtualList.get(0).getWarehouseTransferId());//查询父表移库单申请
  188. WarehouseTransfer warehouseTransfer1 = new WarehouseTransfer()
  189. .setWarehouseTransferId(warehouseTransferF.getWarehouseTransferId()) //移库单id
  190. .setWarehouseTransferCode(warehouseTransferCode)//移库单编号
  191. .setAskGoodsWarehouseId(warehouseTransferF.getAskGoodsWarehouseId()) //要货仓库id
  192. .setWarehouseTransferType(warehouseTransferF.getWarehouseTransferType()); //移库类型
  193. warehouseTransferMapper.addReturnGsWarehouseTransferF(warehouseTransfer1);//新增返回gs数据父表信息
  194. map.put("data", warehouseTransferCode);
  195. map.put("msg", "200");
  196. } catch (Exception e){
  197. e.printStackTrace();
  198. map.put("msg", "500");
  199. map.put("errMsg", "服务器请求异常,请稍后再试");
  200. }
  201. return map;
  202. }
  203. /**
  204. * 删除移库单
  205. * @return
  206. */
  207. @Override
  208. public Map<String, Object> delWarehouseTransfer(String id, HttpServletRequest request) {
  209. Map<String, Object> map = new HashMap<>();
  210. try {
  211. String userId = request.getHeader("userId");
  212. Map<String, Object> mapVal = warehouseTransferMapper.getWarehouseTransfers(id);
  213. if(Double.parseDouble(mapVal.get("out_num").toString()) > 0){
  214. map.put("msg", "500");
  215. map.put("errMsg", "此单据已出库!");
  216. return map;
  217. }
  218. LogData logData = new LogData()
  219. .setUserId(userId)
  220. .setData(mapVal.toString())
  221. .setType("0")
  222. .setDocumentType("移库单");
  223. dictionaryMapper.addLogdata(logData);
  224. warehouseTransferMapper.delWarehouseTransfer(id);
  225. map.put("msg", "200");
  226. } catch (Exception e) {
  227. e.printStackTrace();
  228. map.put("msg", "500");
  229. map.put("errMsg", "服务器请求异常,请稍后再试");
  230. }
  231. return map;
  232. }
  233. /**
  234. * 移库单生成
  235. * @return
  236. */
  237. public String codeGenerateYK(){
  238. StringBuilder stringBuilder = new StringBuilder("YK");
  239. Date date = new Date();
  240. SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
  241. stringBuilder.append(sdf.format(date));
  242. int count = warehouseTransferMapper.getReturnWarehouseTransferCount();
  243. for(int i = 0; i < 4 - (count + "").length(); i++){
  244. stringBuilder.append("0");
  245. }
  246. return (stringBuilder.append(count + 1)).toString();
  247. }
  248. }