DeliveryServiceImpl.java 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package com.tld.service.impl;
  2. import com.tld.mapper.AskGoodsMapper;
  3. import com.tld.mapper.DeliveryMapper;
  4. import com.tld.model.AskGoods;
  5. import com.tld.model.Delivery;
  6. import com.tld.model.Inventory;
  7. import com.tld.model.ReturRemoval;
  8. import com.tld.service.DeliveryService;
  9. import org.redisson.api.RLock;
  10. import org.redisson.api.RedissonClient;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Service;
  13. import java.text.SimpleDateFormat;
  14. import java.util.*;
  15. @Service
  16. public class DeliveryServiceImpl implements DeliveryService {
  17. @Autowired
  18. private DeliveryMapper deliveryMapper;
  19. @Autowired
  20. private AskGoodsMapper askGoodsMapper;
  21. //redis锁
  22. @Autowired
  23. private RedissonClient redissonClient;
  24. @Override
  25. public Map<String, Object> getDelivery(Delivery delivery) {
  26. Map<String, Object> map = new HashMap<>();
  27. try{
  28. List<Delivery> list = deliveryMapper.getDelivery(delivery);
  29. map.put("data", list);
  30. map.put("msg", "200");
  31. }catch (Exception e){
  32. map.put("msg", "500");
  33. map.put("errMsg", "服务器请求异常,请稍后再试");
  34. e.printStackTrace();
  35. }
  36. return map;
  37. }
  38. @Override
  39. public Map<String, Object> getRecommend(Delivery delivery) {
  40. Map<String, Object> map = new HashMap<>();
  41. try{
  42. //查询所有产成品库位
  43. String storageLocationCode = deliveryMapper.getStorageLocationCodeList();
  44. List<Inventory> list = new LinkedList<>();
  45. Map<String, Object> occupyMap = new HashMap<>();
  46. for(Inventory inventory : deliveryMapper.getInventory(storageLocationCode, delivery)){
  47. int occupy = deliveryMapper.getVitrual(inventory);
  48. if(Integer.parseInt(inventory.getAmount()) == occupy){
  49. list.add(inventory);
  50. int num = Integer.parseInt(inventory.getAmount()) - occupy;
  51. occupyMap.put(inventory.getStorageLocationCode(), num);
  52. }
  53. }
  54. map.put("data", list);
  55. map.put("occupyMap", occupyMap);
  56. map.put("msg", "200");
  57. }catch (Exception e){
  58. map.put("msg", "500");
  59. map.put("errMsg", "服务器请求异常,请稍后再试");
  60. e.printStackTrace();
  61. }
  62. return map;
  63. }
  64. @Override
  65. public Map<String, Object> OutOfLibrary(String uniqueCode, String type, String deliveryId) {
  66. Map<String, Object> map = new HashMap<>();
  67. //redis并发锁
  68. RLock lock = redissonClient.getLock(uniqueCode);
  69. lock.lock();
  70. try{
  71. String removalCode = codeGenerateCk();
  72. for(AskGoods askGoods : askGoodsMapper.getAskGoodsVitrual(uniqueCode, type)){
  73. Inventory inventory = deliveryMapper.getInventoryHalf(askGoods);
  74. //如果出库库存等于虚拟表库存则删除此库存
  75. if(Integer.parseInt(askGoods.getNum()) == Integer.parseInt(inventory.getAmount())){
  76. askGoodsMapper.deleteInventory(inventory);
  77. } else {
  78. inventory.setAmount(askGoods.getNum());
  79. askGoodsMapper.updateInventory(inventory);
  80. }
  81. String materialId = askGoodsMapper.getMaterialId(askGoods.getWllbCode(), askGoods.getAccountSleeve());//查询物料id
  82. deliveryMapper.updateDelivery(materialId, askGoods.getNum(), deliveryId); //修改销售单出库数量
  83. //查询销售单部分信息
  84. Delivery delivery = new Delivery().setDeliveryId(deliveryId).setMaterialId(materialId);
  85. List<Delivery> list = deliveryMapper.getDelivery(delivery);
  86. //产成品销售流水
  87. Delivery delivery1 = new Delivery()
  88. .setMaterialCode(askGoods.getWllbCode()) //物料code
  89. .setOutNum(askGoods.getNum()) //出库数量
  90. .setUserId(askGoods.getUserId()) //用户id
  91. .setDeliveryId(deliveryId) //销售单id
  92. .setCompanyNumber(list.get(0).getCompanyNumber()) //公司编号
  93. .setCustomerCode(list.get(0).getCustomerCode())//客户编号
  94. .setStorageCode(removalCode) //出库流水
  95. .setWbs(list.get(0).getWbs());// wbs
  96. deliveryMapper.addRemovalHalf(delivery1); //流水录入
  97. askGoodsMapper.deleteVirtual(askGoods.getId());//删除已出虚拟表库存
  98. ReturRemoval returRemoval = new ReturRemoval()
  99. .setMaterialId(materialId)
  100. .setDocumentId(deliveryId)
  101. .setWbs(list.get(0).getWbs())
  102. .setNum(askGoods.getNum())
  103. .setEntryNumber(list.get(0).getEntryNumber())
  104. .setDocumentPointsId(list.get(0).getId())
  105. .setStorageLocationCode(askGoods.getStorageLocationCode());
  106. askGoodsMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息
  107. }
  108. //新增销售单出库父表信息
  109. Delivery delivery = deliveryMapper.getDeliveryF(deliveryId);
  110. ReturRemoval returRemoval1 = new ReturRemoval()
  111. .setDocumentId(delivery.getDeliveryId())
  112. .setRemovalCode(removalCode)
  113. .setSourceType(delivery.getSourceType())
  114. .setMoveType(delivery.getMoveType())
  115. .setDeliveryType(delivery.getDeliveryType());
  116. askGoodsMapper.addReturnGsRemovalF(returRemoval1);//新增返回gs数据父表信息
  117. map.put("data", removalCode);
  118. map.put("msg", "200");
  119. }catch (Exception e){
  120. map.put("msg", "500");
  121. map.put("errMsg", "服务器请求异常,请稍后再试");
  122. e.printStackTrace();
  123. } finally {
  124. //释放锁
  125. lock.unlock();
  126. }
  127. return map;
  128. }
  129. @Override
  130. public Map<String, Object> getAttribute(Delivery delivery) {
  131. Map<String, Object> map = new HashMap<>();
  132. try{
  133. //查询所有产成品库位
  134. String storageLocationCode = deliveryMapper.getStorageLocationCodeList();
  135. List<Inventory> list = deliveryMapper.getAttribute(storageLocationCode, delivery);
  136. map.put("data", list);
  137. map.put("msg", "200");
  138. }catch (Exception e){
  139. map.put("msg", "500");
  140. map.put("errMsg", "服务器请求异常,请稍后再试");
  141. e.printStackTrace();
  142. }
  143. return map;
  144. }
  145. /**
  146. * 出库单生成
  147. * @return
  148. */
  149. public String codeGenerateCk(){
  150. StringBuilder stringBuilder = new StringBuilder("CK");
  151. Date date = new Date();
  152. SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
  153. stringBuilder.append(sdf.format(date));
  154. int count = askGoodsMapper.getReturnRemovalCount();
  155. for(int i = 0; i < 4 - (count + "").length(); i++){
  156. stringBuilder.append("0");
  157. }
  158. return (stringBuilder.append(count + 1)).toString();
  159. }
  160. }