添加单号生成规则

This commit is contained in:
2024-10-30 20:42:24 +08:00
parent 033c2a4f1a
commit 087c6a1fd3
4 changed files with 69 additions and 21 deletions

View File

@@ -4,6 +4,7 @@ import cn.lihongjie.coal.annotation.OrgScope;
import cn.lihongjie.coal.annotation.SysLog;
import cn.lihongjie.coal.base.dto.CommonQuery;
import cn.lihongjie.coal.base.dto.IdRequest;
import cn.lihongjie.coal.base.dto.R;
import cn.lihongjie.coal.orderNoRule.dto.CreateOrderNoRuleDto;
import cn.lihongjie.coal.orderNoRule.dto.OrderNoRuleDto;
import cn.lihongjie.coal.orderNoRule.dto.UpdateOrderNoRuleDto;
@@ -57,6 +58,9 @@ public class OrderNoRuleController {
this.service.initDefault();
return true;
}
@PostMapping("/genOrderNo")
public R<String> genOrderNo(@RequestBody IdRequest request) {
return R.success(this.service.genOrderNo(request.getId()));
}
}

View File

@@ -9,26 +9,66 @@ import jakarta.persistence.criteria.Root;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.Nullable;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.*;
@Service
@Slf4j
public class OrderNoGenService {
@Autowired RedissonClient redissonClient;
@Autowired
private OrderNoRuleService orderNoRuleService;
@Autowired private OrderNoRuleService orderNoRuleService;
public String genOrderNo(String ruleCode, String orgId) {
log.info("生成订单号, 规则编码: {}, 机构: {}", ruleCode, orgId);
OrderNoRuleEntity rule = getOrderNoRuleEntity(ruleCode, orgId);
if (rule == null) return null;
RuleTemplateUtils.ResolveContext context = new RuleTemplateUtils.ResolveContext();
context.setDateTime(LocalDateTime.now());
RuleTemplateUtils.genNo(
rule.getRuleTemplate(),
RuleTemplateUtils.CompositePlaceholderResolver.of(
RuleTemplateUtils.DatePlaceholderResolver.INSTANCE,
RuleTemplateUtils.RandomPlaceholderResolver.INSTANCE,
new RuleTemplateUtils.PlaceholderResolver() {
@Override
public Boolean support(String placeholder) {
return placeholder.startsWith("seq:");
}
@Override
public String resolve(
String placeholder, RuleTemplateUtils.ResolveContext context) {
String current = context.get("current").toString();
String key = orgId + ":" + ruleCode + ":" + current;
Long seq = redissonClient.getAtomicLong(key).incrementAndGet();
return String.format("%0" + placeholder.substring(4) + "d", seq);
}
}),
context);
return null;
}
private @Nullable OrderNoRuleEntity getOrderNoRuleEntity(String ruleCode, String orgId) {
List<OrderNoRuleEntity> all = orderNoRuleService.findAll(new Specification<OrderNoRuleEntity>() {
@Override
public Predicate toPredicate(Root<OrderNoRuleEntity> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
@@ -51,22 +91,8 @@ public class OrderNoGenService {
OrderNoRuleEntity rule = all.get(0);
// RuleTemplateUtils.genNo(rule.getRuleTemplate(),
// RuleTemplateUtils.CompositePlaceholderResolver.of(RuleTemplateUtils.DatePlaceholderResolver.INSTANCE,
// RuleTemplateUtils.RandomPlaceholderResolver.INSTANCE,
//
//
//
// )
// );
return null;
return rule;
}
}

View File

@@ -80,6 +80,22 @@ public class OrderNoRuleService extends BaseService<OrderNoRuleEntity, OrderNoRu
}
@Autowired
private OrderNoGenService orderNoGenService;
public String genOrderNo(String ruleCode) {
return genOrderNo(ruleCode, Ctx.currentUser().getOrganizationId());
}
public String genOrderNo(String ruleCode, String organizationId) {
return orderNoGenService.genOrderNo(ruleCode, organizationId);
}
public void initDefault() {
initDefault(Ctx.currentUser().getOrganizationId());
}

View File

@@ -40,6 +40,8 @@ public class RuleTemplateUtils {
if (resolver.support(placeholder.toString())) {
context.put("current", result.toString());
String resolved = resolver.resolve(placeholder.toString(), context);
result.append(resolved);