CodeNumServiceImpl.java 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package jnpf.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import jnpf.base.service.SuperServiceImpl;
  4. import jnpf.entity.CodeNumEntity;
  5. import jnpf.mapper.CodeNumMapper;
  6. import jnpf.service.CodeNumService;
  7. import jnpf.util.DateUtil;
  8. import jnpf.util.RandomUtil;
  9. import lombok.Synchronized;
  10. import org.springframework.stereotype.Service;
  11. import java.util.ArrayList;
  12. import java.util.List;
  13. import java.util.Objects;
  14. import java.util.function.Predicate;
  15. import java.util.function.Supplier;
  16. import java.util.stream.Stream;
  17. /**
  18. * 编码获取服务
  19. *
  20. * @author JNPF开发平台组
  21. * @version v6.0.0
  22. * @copyright 引迈信息技术有限公司
  23. * @date 2025/2/28 11:16:06
  24. */
  25. @Service
  26. public class CodeNumServiceImpl extends SuperServiceImpl<CodeNumMapper, CodeNumEntity> implements CodeNumService {
  27. @Synchronized
  28. @Override
  29. public Integer getNumByType(String type, Integer times) {
  30. CodeNumEntity codeNumEntity;
  31. Integer num = 1;
  32. Integer dateValue = Integer.parseInt(DateUtil.nowDateTime().substring(0, 8));
  33. QueryWrapper<CodeNumEntity> wrapper = new QueryWrapper();
  34. wrapper.lambda().eq(CodeNumEntity::getType, type);
  35. List<CodeNumEntity> list = this.list(wrapper);
  36. if (list.size() > 0) {
  37. codeNumEntity = list.get(0);
  38. if (Objects.equals(dateValue, codeNumEntity.getDateValue())) {
  39. num = codeNumEntity.getNum();
  40. }
  41. } else {
  42. codeNumEntity = new CodeNumEntity();
  43. codeNumEntity.setId(RandomUtil.uuId());
  44. }
  45. codeNumEntity.setType(type);
  46. codeNumEntity.setDateValue(dateValue);
  47. codeNumEntity.setNum(num + times);
  48. this.saveOrUpdate(codeNumEntity);
  49. return num;
  50. }
  51. @Override
  52. public List<String> getCode(String type, Integer num) {
  53. Integer value = this.getNumByType(type, num);
  54. List<String> list = new ArrayList<>();
  55. for (int n = 0; n < num; n++) {
  56. String numStr = String.format("%06d", value + n);
  57. StringBuilder sb = new StringBuilder();
  58. sb.append(type);
  59. sb.append(DateUtil.nowDateTime().substring(0, 8));
  60. sb.append(numStr);
  61. list.add(sb.toString());
  62. }
  63. return list;
  64. }
  65. @Override
  66. public String getCodeOnce(String type) {
  67. return this.getCode(type, 1).get(0);
  68. }
  69. @Override
  70. @Synchronized
  71. public String getCodeFunction(Supplier<String> getCode, Predicate<String> existCode) {
  72. return Stream.generate(getCode)
  73. .filter(code -> !existCode.test(code))
  74. .findFirst()
  75. .orElseThrow(() -> new RuntimeException("无法获取唯一编码"));
  76. }
  77. }