mirror of
https://codeup.aliyun.com/64f7d6b8ce01efaafef1e678/coal/coal.git
synced 2026-01-25 15:55:18 +08:00
添加单号生成规则
This commit is contained in:
@@ -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()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user