DeliveryServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. package com.tld.service.impl;
  2. import com.tld.mapper.AskGoodsMapper;
  3. import com.tld.mapper.DeliveryMapper;
  4. import com.tld.mapper.DictionaryMapper;
  5. import com.tld.model.*;
  6. import com.tld.service.DeliveryService;
  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. public class DeliveryServiceImpl implements DeliveryService {
  16. @Autowired
  17. private DeliveryMapper deliveryMapper;
  18. @Autowired
  19. private AskGoodsMapper askGoodsMapper;
  20. //redis锁
  21. @Autowired
  22. private RedissonClient redissonClient;
  23. //删除日志表
  24. @Autowired
  25. private DictionaryMapper dictionaryMapper;
  26. @Override
  27. public Map<String, Object> getDelivery(Delivery delivery) {
  28. Map<String, Object> map = new HashMap<>();
  29. try{
  30. List<Delivery> list = deliveryMapper.getDelivery(delivery);
  31. map.put("data", list);
  32. map.put("msg", "200");
  33. }catch (Exception e) {
  34. map.put("msg", "500");
  35. map.put("errMsg", "服务器请求异常,请稍后再试");
  36. e.printStackTrace();
  37. }
  38. return map;
  39. }
  40. @Override
  41. public Map<String, Object> getRecommend(Delivery delivery) {
  42. Map<String, Object> map = new HashMap<>();
  43. try{
  44. MaterialClass materialClass = deliveryMapper.getMaterialClass(delivery.getMaterialId());
  45. if(materialClass == null){
  46. map.put("msg", "500");
  47. map.put("errMsg", "物料信息未录入,请联系管理员");
  48. return map;
  49. }
  50. if(materialClass.getPartType().equals("产成品")){
  51. //查询所有产成品库位
  52. String storageLocationCode = deliveryMapper.getStorageLocationCodeList();
  53. List<Inventory> list = new LinkedList<>();
  54. for(Inventory inventory : deliveryMapper.getInventory(storageLocationCode, delivery)){
  55. int occupy = deliveryMapper.getVitrual(inventory);
  56. if(occupy == 0){
  57. if(Integer.parseInt(inventory.getAmount()) == Integer.getInteger(delivery.getOutNum())){
  58. list.add(inventory);
  59. map.put("data", list);
  60. map.put("msg", "200");
  61. return map;
  62. }
  63. }
  64. }
  65. map.put("data", list);
  66. } else if(materialClass.getPartType().equals("半成品")){
  67. List<Inventory> list = new LinkedList<>();
  68. for(Inventory inventory : deliveryMapper.getInventory(delivery.getStorageCode(), delivery)){
  69. int productNum = deliveryMapper.getProductNumVitrual(inventory);
  70. if(Integer.parseInt(inventory.getAmount()) < 0){
  71. map.put("msg", "500");
  72. map.put("errMsg", "库存不足");
  73. return map;
  74. } else {
  75. list.add(inventory);
  76. map.put("data", list);
  77. map.put("msg", "200");
  78. return map;
  79. }
  80. }
  81. } else {
  82. List<Inventory> list = new LinkedList<>();
  83. AskGoods askGoods = new AskGoods()
  84. .setCompanyNumber(delivery.getCompanyNumber())
  85. .setMaterialId(delivery.getMaterialId());
  86. for(Inventory inventory : askGoodsMapper.getMaterialCk(askGoods)){
  87. AskGoods askGoods1 = askGoodsMapper.getAsk(inventory);
  88. if(askGoods1 != null){
  89. if(Double.parseDouble(askGoods1.getNum()) != Double.parseDouble(inventory.getAmount())){
  90. list.add(inventory);
  91. map.put("data", list);
  92. map.put("msg", "200");
  93. return map;
  94. }
  95. } else {
  96. list.add(inventory);
  97. map.put("data", list);
  98. map.put("msg", "200");
  99. return map;
  100. }
  101. }
  102. }
  103. map.put("msg", "200");
  104. }catch (Exception e){
  105. map.put("msg", "500");
  106. map.put("errMsg", "服务器请求异常,请稍后再试");
  107. e.printStackTrace();
  108. }
  109. return map;
  110. }
  111. @Override
  112. public Map<String, Object> OutOfLibrary(String uniqueCode, String type, String deliveryId) {
  113. Map<String, Object> map = new HashMap<>();
  114. //redis并发锁
  115. RLock lock = redissonClient.getLock(uniqueCode);
  116. lock.lock();
  117. try{
  118. String removalCode = codeGenerateCk();
  119. for(AskGoods askGoods : askGoodsMapper.getAskGoodsVitrual(uniqueCode, type)){
  120. Inventory inventory = deliveryMapper.getInventoryHalf(askGoods);
  121. //如果出库库存等于虚拟表库存则删除此库存
  122. if(Integer.parseInt(askGoods.getNum()) == Integer.parseInt(inventory.getAmount())){
  123. askGoodsMapper.deleteInventory(inventory);
  124. } else {
  125. inventory.setAmount(askGoods.getNum());
  126. askGoodsMapper.updateInventory(inventory);
  127. }
  128. String materialId = askGoodsMapper.getMaterialId(askGoods.getWllbCode());//查询物料id
  129. deliveryMapper.updateDelivery(materialId, askGoods.getNum(), deliveryId); //修改销售单出库数量
  130. //查询销售单部分信息
  131. Delivery delivery = new Delivery().setDeliveryId(deliveryId).setMaterialId(materialId);
  132. List<Delivery> list = deliveryMapper.getDelivery(delivery);
  133. //产成品销售流水
  134. Delivery delivery1 = new Delivery()
  135. .setMaterialCode(askGoods.getWllbCode()) //物料code
  136. .setOutNum(askGoods.getNum()) //出库数量
  137. .setUserId(askGoods.getUserId()) //用户id
  138. .setDeliveryId(deliveryId) //销售单id
  139. .setCompanyNumber(list.get(0).getCompanyNumber()) //公司编号
  140. .setCustomerCode(list.get(0).getCustomerCode())//客户编号
  141. .setStorageCode(removalCode) //出库流水
  142. .setWbs(list.get(0).getWbs());// wbs
  143. deliveryMapper.addRemovalHalf(delivery1); //流水录入
  144. askGoodsMapper.deleteVirtual(askGoods.getId());//删除已出虚拟表库存
  145. ReturRemoval returRemoval = new ReturRemoval()
  146. .setMaterialId(materialId)
  147. .setDocumentId(deliveryId)
  148. .setWbs(list.get(0).getWbs())
  149. .setNum(askGoods.getNum())
  150. .setEntryNumber(list.get(0).getEntryNumber())
  151. .setDocumentPointsId(list.get(0).getId())
  152. .setStorageLocationCode(askGoods.getStorageLocationCode());
  153. askGoodsMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息
  154. }
  155. //新增销售单出库父表信息
  156. Delivery delivery = deliveryMapper.getDeliveryF(deliveryId);
  157. ReturRemoval returRemoval1 = new ReturRemoval()
  158. .setDocumentId(delivery.getDeliveryId())
  159. .setRemovalCode(removalCode)
  160. .setSourceType(delivery.getSourceType())
  161. .setMoveType(delivery.getMoveType())
  162. .setDeliveryType(delivery.getDeliveryType());
  163. askGoodsMapper.addReturnGsRemovalF(returRemoval1);//新增返回gs数据父表信息
  164. map.put("data", removalCode);
  165. map.put("msg", "200");
  166. }catch (Exception e){
  167. map.put("msg", "500");
  168. map.put("errMsg", "服务器请求异常,请稍后再试");
  169. e.printStackTrace();
  170. } finally {
  171. //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
  172. if (lock.isLocked() && lock.isHeldByCurrentThread()) {
  173. //释放锁
  174. lock.unlock();
  175. }
  176. }
  177. return map;
  178. }
  179. @Override
  180. public Map<String, Object> getAttribute(Delivery delivery) {
  181. Map<String, Object> map = new HashMap<>();
  182. try{
  183. //查询所有产成品库位
  184. String storageLocationCode = deliveryMapper.getStorageLocationCodeList();
  185. List<Inventory> list = deliveryMapper.getAttribute(storageLocationCode, delivery);
  186. map.put("data", list);
  187. map.put("msg", "200");
  188. }catch (Exception e){
  189. map.put("msg", "500");
  190. map.put("errMsg", "服务器请求异常,请稍后再试");
  191. e.printStackTrace();
  192. }
  193. return map;
  194. }
  195. @Override
  196. public Map<String, Object> addVitrual(AskGoods askGoods) {
  197. Map<String, Object> map = new HashMap<>();
  198. try{
  199. Map<String, Object> mapVal = deliveryMapper.getScanIsNot(askGoods);
  200. if(Double.parseDouble(mapVal.get("amount").toString()) - Double.parseDouble(mapVal.get("vitrualNum").toString()) == 0){
  201. map.put("msg", "500");
  202. map.put("errMsg", "已全部出库");
  203. return map;
  204. }
  205. askGoodsMapper.addAskGoodsVitrual(askGoods);
  206. map.put("msg", "200");
  207. }catch (Exception e){
  208. map.put("msg", "500");
  209. map.put("errMsg", "服务器请求异常,请稍后再试");
  210. e.printStackTrace();
  211. }
  212. return map;
  213. }
  214. @Override
  215. public Map<String, Object> delDelivery(String id, HttpServletRequest request) {
  216. Map<String, Object> map = new HashMap<>();
  217. try {
  218. String userId = request.getHeader("userId");
  219. Map<String, Object> mapVal = deliveryMapper.getDeliverys(id);
  220. if(Double.parseDouble(mapVal.get("out_num").toString()) > 0){
  221. map.put("msg", "500");
  222. map.put("errMsg", "此单据已出库!");
  223. return map;
  224. }
  225. LogData logData = new LogData()
  226. .setUserId(userId)
  227. .setData(mapVal.toString())
  228. .setType("0")
  229. .setDocumentType("交货单");
  230. dictionaryMapper.addLogdata(logData);
  231. deliveryMapper.delDelivery(id);
  232. map.put("msg", "200");
  233. } catch (Exception e) {
  234. e.printStackTrace();
  235. map.put("msg", "500");
  236. map.put("errMsg", "服务器请求异常,请稍后再试");
  237. }
  238. return map;
  239. }
  240. /**
  241. * 出库单生成
  242. * @return
  243. */
  244. public String codeGenerateCk(){
  245. StringBuilder stringBuilder = new StringBuilder("CK");
  246. Date date = new Date();
  247. SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
  248. stringBuilder.append(sdf.format(date));
  249. int count = askGoodsMapper.getReturnRemovalCount();
  250. for(int i = 0; i < 4 - (count + "").length(); i++){
  251. stringBuilder.append("0");
  252. }
  253. return (stringBuilder.append(count + 1)).toString();
  254. }
  255. }