package org.jeecg.modules.system.service.impl;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import org.apache.commons.lang3.StringUtils;
|
import org.jeecg.common.constant.CommonConstant;
|
import org.jeecg.common.exception.JeecgBootException;
|
import org.jeecg.modules.system.entity.SysBusinessCodeRule;
|
import org.jeecg.modules.system.entity.SysBusinessCodeSeq;
|
import org.jeecg.modules.system.mapper.SysBusinessCodeRuleMapper;
|
import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
|
import org.jeecg.modules.system.service.ISysBusinessCodeSeqService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import java.time.LocalDate;
|
import java.time.format.DateTimeFormatter;
|
import java.util.List;
|
|
/**
|
* @Description: 业务编码规则
|
* @Author: jeecg-boot
|
* @Date: 2025-03-17
|
* @Version: V1.0
|
*/
|
@Service
|
public class SysBusinessCodeRuleServiceImpl extends ServiceImpl<SysBusinessCodeRuleMapper, SysBusinessCodeRule> implements ISysBusinessCodeRuleService {
|
|
@Resource
|
private SysBusinessCodeRuleMapper businessCodeRuleMapper;
|
|
@Autowired
|
private ISysBusinessCodeSeqService businessCodeSeqService;
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public synchronized String generateBusinessCodeSeq(String businessCode) {
|
//查询生成规则
|
LambdaQueryWrapper<SysBusinessCodeRule> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(SysBusinessCodeRule::getBusinessCode, businessCode);
|
queryWrapper.eq(SysBusinessCodeRule::getDelFlag, CommonConstant.DEL_FLAG_0);
|
List<SysBusinessCodeRule> list = businessCodeRuleMapper.selectList(queryWrapper);
|
if (CollectionUtil.isEmpty(list)) {
|
throw new JeecgBootException("未查询到配置的业务编码生成规则,请联系管理员检查!");
|
}
|
if (list.size() > 1) {
|
throw new JeecgBootException("查询到多个配置的业务编码生成规则,请联系管理员检查!");
|
}
|
SysBusinessCodeRule businessCodeRule = list.get(0);
|
String prefix = businessCodeRule.getPrefix();
|
String yearFormat = businessCodeRule.getYearFormat() == null ? "" : businessCodeRule.getYearFormat().trim();
|
String monthFormat = businessCodeRule.getMonthFormat() == null ? "" : businessCodeRule.getMonthFormat().trim();
|
String dayFormat = businessCodeRule.getDayFormat() == null ? "" : businessCodeRule.getDayFormat().trim();
|
Integer seqLength = businessCodeRule.getSeqLength();
|
String formatter = yearFormat + "-" + monthFormat + "-" + dayFormat;
|
//转换当前日期对应的生成序列
|
String[] currentDate = LocalDate.now().format(DateTimeFormatter.ofPattern(formatter)).split("-");
|
int i = 0;
|
if (StringUtils.isNotBlank(yearFormat)) {
|
yearFormat = currentDate[i];
|
i++;
|
}else {
|
yearFormat = null;
|
}
|
if (StringUtils.isNotBlank(monthFormat)) {
|
monthFormat = currentDate[i];
|
i++;
|
}else {
|
monthFormat = null;
|
}
|
if (StringUtils.isNotBlank(dayFormat)) {
|
dayFormat = currentDate[i];
|
}else {
|
dayFormat = null;
|
}
|
//查询生成序列
|
SysBusinessCodeSeq sysBusinessCodeSeq = businessCodeSeqService.queryByParams(businessCodeRule.getId(), prefix, yearFormat, monthFormat, dayFormat);
|
if(sysBusinessCodeSeq == null){
|
//新增生成序列
|
sysBusinessCodeSeq = new SysBusinessCodeSeq();
|
sysBusinessCodeSeq.setRuleId(businessCodeRule.getId());
|
sysBusinessCodeSeq.setPrefix(prefix);
|
sysBusinessCodeSeq.setCurrentYear(yearFormat);
|
sysBusinessCodeSeq.setCurrentMonth(monthFormat);
|
sysBusinessCodeSeq.setCurrentDay(dayFormat);
|
sysBusinessCodeSeq.setCurrentSeq(1);
|
businessCodeSeqService.save(sysBusinessCodeSeq);
|
}else {
|
//更新生成序列
|
sysBusinessCodeSeq.setCurrentSeq(sysBusinessCodeSeq.getCurrentSeq() + 1);
|
businessCodeSeqService.updateById(sysBusinessCodeSeq);
|
}
|
//返回生成的序列
|
return appendPrefix(prefix, yearFormat, monthFormat, dayFormat, seqLength, sysBusinessCodeSeq.getCurrentSeq());
|
}
|
|
/**
|
* 拼接业务流水号
|
* @param prefix 前缀
|
* @param yearFormat 年份
|
* @param monthFormat 月份
|
* @param dayFormat 天
|
* @param seqLength 序号长度
|
* @param currentSeq 当前序号
|
* @return
|
*/
|
private String appendPrefix(String prefix, String yearFormat, String monthFormat, String dayFormat, Integer seqLength, Integer currentSeq) {
|
StringBuilder sb = new StringBuilder();
|
if(StringUtils.isNotBlank(prefix)){
|
sb.append(prefix);
|
}
|
if(StringUtils.isNotBlank(yearFormat)){
|
sb.append(yearFormat);
|
}
|
if(StringUtils.isNotBlank(monthFormat)){
|
sb.append(monthFormat);
|
}
|
if(StringUtils.isNotBlank(dayFormat)){
|
sb.append(dayFormat);
|
}
|
sb.append(StringUtils.leftPad(currentSeq.toString(), seqLength, '0'));
|
return sb.toString();
|
}
|
}
|