210 lines
7.3 KiB
Plaintext
210 lines
7.3 KiB
Plaintext
package com.cmeim.basic.service;
|
|
|
|
|
|
import com.cmeim.basic.api.enums.BaNumberRuleCode;
|
|
import com.cmeim.basic.po.BaMaterial;
|
|
import com.cmeim.basic.po.BaNumberRule;
|
|
import com.cmeim.basic.repository.BaMaterialRepository;
|
|
import com.cmeim.basic.repository.BaNumberRuleRepository;
|
|
import com.cmeim.common.core.exception.ServiceException;
|
|
import com.cmeim.common.core.utils.DateUtil;
|
|
import com.cmeim.common.core.utils.SpringUtils;
|
|
import com.cmeim.common.core.web.domain.RespondEnum;
|
|
import com.cmeim.common.core.web.domain.TUserInfo;
|
|
import com.cmeim.common.core.web.service.GenericService;
|
|
import com.google.common.collect.Lists;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.data.domain.Example;
|
|
import org.springframework.data.jpa.domain.Specification;
|
|
import org.springframework.data.jpa.repository.JpaRepository;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import java.text.DateFormat;
|
|
import java.text.SimpleDateFormat;
|
|
//import String;
|
|
|
|
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.Optional;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
|
|
@Slf4j
|
|
@Service
|
|
public class NumberRuleService extends GenericService {
|
|
|
|
@Autowired
|
|
private BaNumberRuleRepository repository;
|
|
@Autowired
|
|
private BaMaterialRepository materialRepository;
|
|
|
|
@Override
|
|
public JpaRepository getRepository() {
|
|
return repository;
|
|
}
|
|
|
|
public void add(BaNumberRule rule, TUserInfo currentUser) {
|
|
//校验
|
|
if(repository.existsByRuleCode(rule.getRuleCode())) {
|
|
throw new ServiceException(RespondEnum.FAILURE, String.format("编码【%s】已存在", rule.getRuleCode()));
|
|
}
|
|
|
|
//赋值
|
|
rule.setCreatedBy(currentUser.getUserName());
|
|
rule.setCreatedDt(DateUtil.getCurrentDate());
|
|
|
|
//持久
|
|
repository.save(rule);
|
|
}
|
|
|
|
public void update(BaNumberRule rule, TUserInfo currentUser) {
|
|
//校验
|
|
if(repository.existsByRuleCodeAndIdNot(rule.getRuleCode(), rule.getId())) {
|
|
throw new ServiceException(RespondEnum.FAILURE, String.format("编码【%s】已存在", rule.getRuleCode()));
|
|
}
|
|
//查询
|
|
BaNumberRule orule = this.findById(rule.getId());
|
|
|
|
//赋值
|
|
orule.setRuleCode(rule.getRuleCode());
|
|
orule.setRuleName(rule.getRuleName());
|
|
orule.setPrefix(rule.getPrefix());
|
|
orule.setSuffix(rule.getSuffix());
|
|
orule.setInitValue(rule.getInitValue());
|
|
orule.setStepValue(rule.getStepValue());
|
|
orule.setLengthValue(rule.getLengthValue());
|
|
orule.setCurrentValue(rule.getCurrentValue());
|
|
orule.setDictPeriod(rule.getDictPeriod());
|
|
orule.setUpdatedBy(currentUser.getUserName());
|
|
orule.setUpdatedDt(DateUtil.getCurrentDate());
|
|
|
|
//持久
|
|
repository.save(orule);
|
|
}
|
|
|
|
public void delete(Long id) {
|
|
//查询
|
|
/*BaMaterial query = new BaMaterial();
|
|
query.setNumberRuleId(id);
|
|
long cnt = materialRepository.count((Specification) Example.of(query));
|
|
if(cnt > 0) {
|
|
throw new ServiceException(RespondEnum.FAILURE, "该规则已被物料使用");
|
|
}*/
|
|
|
|
//持久
|
|
repository.deleteById(id);
|
|
}
|
|
|
|
public String getNumber(BaNumberRule rule) {
|
|
String number = getPrefix(rule).concat(getSequence(rule)).concat(getSuffix(rule));
|
|
return number;
|
|
}
|
|
|
|
private String getSequence(BaNumberRule rule) {
|
|
String number = "";
|
|
Integer curValue = rule.getCurrentValue();
|
|
Integer length = rule.getLengthValue();
|
|
if(curValue != null && length != null) {
|
|
number = StringUtils.leftPad(String.valueOf(curValue), length, "0");
|
|
}
|
|
return number;
|
|
}
|
|
|
|
public String getNumber(Long id) {
|
|
return getNumbers(id, 1).get(0);
|
|
}
|
|
public String getNumber(BaNumberRuleCode id) {
|
|
return getNumbers(id, 1).get(0);
|
|
}
|
|
|
|
|
|
public List<String> getNumbers(BaNumberRuleCode rc, Integer size) {
|
|
BaNumberRuleRepository repository = SpringUtils.getBean(BaNumberRuleRepository.class);
|
|
BaNumberRule query = new BaNumberRule();
|
|
query.setRuleCode(rc.getCode());
|
|
List<BaNumberRule> rules = repository.findAll(Example.of(query));
|
|
if(rules.size() <= 0) {
|
|
throw new ServiceException(RespondEnum.FAILURE, String.format("编码规则[%s]不存在", rc.getCode()));
|
|
}
|
|
BaNumberRule rule = rules.get(0);
|
|
return getNumbers(rule, size);
|
|
}
|
|
|
|
|
|
|
|
public String getNumber(String code) {
|
|
return getNumbers(code, 1).get(0);
|
|
}
|
|
|
|
public List<String> getNumbers(Long id, Integer size) {
|
|
Optional<BaNumberRule> optional = repository.findById(id);
|
|
if(!optional.isPresent()) {
|
|
throw new ServiceException(RespondEnum.FAILURE, "编码规则不存在");
|
|
}
|
|
BaNumberRule rule = optional.get();
|
|
return getNumbers(rule, size);
|
|
}
|
|
|
|
public List<String> getNumbers(String code, Integer size) {
|
|
BaNumberRule query = new BaNumberRule();
|
|
query.setRuleCode(code);
|
|
List<BaNumberRule> rules = repository.findAll(Example.of(query));
|
|
if(rules.size() <= 0) {
|
|
throw new ServiceException(RespondEnum.FAILURE, String.format("编码规则【%s】不存在", code));
|
|
}
|
|
BaNumberRule rule = rules.get(0);
|
|
return getNumbers(rule, size);
|
|
}
|
|
|
|
private synchronized List<String> getNumbers(BaNumberRule rule, Integer size) {
|
|
logger.debug("根据编码规则生成编码, 规则:{}, 数量:{}", rule.getRuleCode(), size);
|
|
List<String> numbers = Lists.newArrayList();
|
|
Integer curValue = rule.getCurrentValue();
|
|
Integer length = rule.getLengthValue();
|
|
for(int i=0;i<size;i++) {
|
|
String number = "";
|
|
if(curValue != null && length != null) {
|
|
number = StringUtils.leftPad(String.valueOf(curValue), length, "0");
|
|
curValue = curValue + rule.getStepValue();
|
|
}
|
|
String code = getPrefix(rule).concat(number).concat(getSuffix(rule));
|
|
logger.debug("根据编码规则生成编码, 规则:{}, 编码:{}, 序号:{}", rule.getRuleCode(), code, i);
|
|
numbers.add(code);
|
|
}
|
|
if(curValue != null && length != null) {
|
|
rule.setCurrentValue(curValue);
|
|
repository.save(rule);
|
|
}
|
|
return numbers;
|
|
}
|
|
|
|
private String getPrefix(BaNumberRule rule) {
|
|
String prefix = rule.getPrefix()==null?"":rule.getPrefix();
|
|
prefix = getDateTime(prefix);
|
|
return prefix;
|
|
}
|
|
|
|
private String getSuffix(BaNumberRule rule) {
|
|
String suffix = rule.getSuffix()==null?"":rule.getSuffix();
|
|
suffix = getDateTime(suffix);
|
|
return suffix;
|
|
}
|
|
|
|
private String getDateTime(String text) {
|
|
Pattern pattern = Pattern.compile("\\DateTime\\[(\\w+)\\]");
|
|
Matcher matcher = pattern.matcher(text);
|
|
while(matcher.find()) {
|
|
String dateFormatPattern = matcher.group(1);
|
|
DateFormat df = new SimpleDateFormat(dateFormatPattern);
|
|
String date = df.format(new Date());
|
|
text = matcher.replaceFirst(date);
|
|
matcher.reset(text);
|
|
}
|
|
return text;
|
|
}
|
|
|
|
}
|