WebPrintServiceImpl.java 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package com.tld.service.impl;
  2. import com.tld.mapper.WebPrintMapper;
  3. import com.tld.model.TldPrint;
  4. import com.tld.service.WebPrintService;
  5. import com.tld.util.DateUtil;
  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.util.HashMap;
  13. import java.util.Map;
  14. @Service
  15. @RequiredArgsConstructor
  16. public class WebPrintServiceImpl implements WebPrintService {
  17. private final WebPrintMapper webPrintMapper;
  18. //redis锁
  19. @Autowired
  20. private RedissonClient redissonClient;
  21. @Override
  22. public Map<String, Object> getSerial(TldPrint tldPrint, HttpServletRequest request) {
  23. Map<String, Object> map = new HashMap<>();
  24. //redis并发锁
  25. RLock lock = redissonClient.getLock(request.getHeader("userId"));
  26. lock.lock();
  27. try{
  28. tldPrint.setUserId(request.getHeader("userId"));
  29. tldPrint.setProducDate(DateUtil.dateConversion(tldPrint.getProducDate()));
  30. int count = webPrintMapper.getSerialCount(tldPrint);
  31. String serial = generateSerial((count + 1) + "");
  32. String num = generateNum(tldPrint.getNum());
  33. String materialCode = generateMaterialCode(tldPrint.getMaterialCode());
  34. String supplierCode = generateSupplierCode(tldPrint.getSupplierId());
  35. tldPrint.setNum(num);
  36. tldPrint.setSerial(serial);
  37. webPrintMapper.addPrint(tldPrint);
  38. String barCode = materialCode + supplierCode + tldPrint.getProducDate() + num + serial;
  39. map.put("data", barCode);
  40. map.put("msg", "200");
  41. }catch (Exception e){
  42. map.put("msg", "500");
  43. map.put("errMsg", "失败");
  44. e.printStackTrace();
  45. } finally {
  46. //释放锁
  47. lock.unlock();
  48. }
  49. return map;
  50. }
  51. /**
  52. * 供应商编号生成
  53. * @param code 参数
  54. * @return 供应商编号
  55. */
  56. public String generateSupplierCode(String code){
  57. StringBuilder stringBuilder = new StringBuilder();
  58. for(int i = 0; i < 7 - code.length(); i++){
  59. stringBuilder.append("#");
  60. }
  61. stringBuilder.append(code);
  62. return stringBuilder.toString();
  63. }
  64. /**
  65. * 物料编号生成
  66. * @param code 参数
  67. * @return 物料编号
  68. */
  69. public String generateMaterialCode(String code){
  70. StringBuilder stringBuilder = new StringBuilder();
  71. for(int i = 0; i < 16 - code.length(); i++){
  72. stringBuilder.append("#");
  73. }
  74. stringBuilder.append(code);
  75. return stringBuilder.toString();
  76. }
  77. /**
  78. * 连番号生成
  79. * @param count 参数
  80. * @return 连番号
  81. */
  82. public String generateSerial(String count){
  83. StringBuilder stringBuilder = new StringBuilder("1");
  84. for(int i = 0; i < 5 - count.length(); i++){
  85. stringBuilder.append("0");
  86. }
  87. stringBuilder.append(count);
  88. return stringBuilder.toString();
  89. }
  90. /**
  91. * 数量生成
  92. * @param num 参数
  93. * @return 数量
  94. */
  95. public String generateNum(String num){
  96. StringBuilder stringBuilder = new StringBuilder();
  97. for(int i = 0; i < 6 - num.length(); i++){
  98. stringBuilder.append("#");
  99. }
  100. stringBuilder.append(num);
  101. return stringBuilder.toString();
  102. }
  103. }