DeliveryServiceImpl.java 8.4 KB

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