| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- package jnpf.base.util;
- import cn.hutool.core.bean.BeanUtil;
- import cn.hutool.core.util.IdUtil;
- import cn.hutool.core.util.ObjectUtil;
- import jnpf.base.entity.BillNumEntity;
- import jnpf.base.service.BillNumService;
- import jnpf.constant.MsgCode;
- import jnpf.exception.DataException;
- import jnpf.model.visualJson.FieLdsModel;
- import jnpf.model.visualJson.config.ConfigModel;
- import jnpf.model.visualJson.config.PrefixSuffixModel;
- import jnpf.model.visualJson.config.RuleConfig;
- import jnpf.util.*;
- import jnpf.util.visiual.JnpfKeyConsts;
- import lombok.Synchronized;
- import org.apache.commons.collections4.CollectionUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import java.util.List;
- import java.util.Map;
- import java.util.Objects;
- @Component
- public class VisualBillUtil {
- @Autowired
- private BillNumService billNumService;
- @Synchronized
- public Object getBillNumber(String visualId, FieLdsModel fieLdsModel, Map<String, Object> data, Object thisValue) {
- String jnpfKey = fieLdsModel.getConfig().getJnpfKey();
- if (JnpfKeyConsts.BILLRULE.equals(jnpfKey) && fieLdsModel.getConfig().getRuleType() != null
- && Objects.equals(fieLdsModel.getConfig().getRuleType(), 2) && ObjectUtil.isEmpty(thisValue)) {
- ConfigModel config = fieLdsModel.getConfig();
- RuleConfig ruleConfig = config.getRuleConfig();
- Integer type = ruleConfig.getType();
- String flowId = null;
- if (data.get(FlowFormConstant.FLOWID) != null && StringUtil.isNotEmpty(data.get(FlowFormConstant.FLOWID).toString())) {
- flowId = data.get(FlowFormConstant.FLOWID).toString();
- }
- StringBuilder strNumber = new StringBuilder();
- //前缀
- String preFixStr = setPreSuffFix(data, ruleConfig.getPrefixList());
- if (StringUtil.isNotEmpty(preFixStr) && preFixStr.length() > 100) {
- throw new DataException(MsgCode.VS027.get(config.getLabel()));
- }
- strNumber.append(preFixStr);
- String ruleId = config.getFormId();
- BillNumEntity billNum = billNumService.getBillNum(ruleId, visualId, flowId);
- switch (type) {
- case 2:
- // 随机数编号
- if (ObjectUtil.equal(ruleConfig.getRandomType(), 1)) {
- strNumber.append(cn.hutool.core.util.RandomUtil.randomNumbers(ruleConfig.getRandomDigit()));
- } else {
- strNumber.append(cn.hutool.core.util.RandomUtil.randomStringUpper(ruleConfig.getRandomDigit()));
- }
- if (billNum != null) {
- billNumService.removeByRuleId(ruleId, visualId, flowId);
- }
- break;
- case 3:
- // UUID
- strNumber.append(IdUtil.randomUUID().toUpperCase());
- if (billNum != null) {
- billNumService.removeByRuleId(ruleId, visualId, flowId);
- }
- break;
- default:
- // 时间格式
- RuleConfig rule = BeanUtil.copyProperties(ruleConfig, RuleConfig.class);
- rule.setRandomDigit(null);
- rule.setRandomType(null);
- String ruleJosn = JsonUtil.getObjectToString(rule);
- String dateFormat = getTimeFormat(ruleConfig.getDateFormat());
- String dateValue = "no".equals(dateFormat) ? "" : DateUtil.dateNow(dateFormat);
- //获取位数最大值
- Integer digit = ruleConfig.getDigit();
- StringBuilder maxStr = new StringBuilder();
- for (int i = 0; i < digit; i++) {
- maxStr.append("9");
- }
- Integer maxValue = Integer.parseInt(maxStr.toString());
- //起始值
- Integer startNumber = Integer.parseInt(ruleConfig.getStartNumber());
- Integer thisNum = 0;
- //处理流水号归0
- if (billNum != null) {
- if (ruleJosn.equals(billNum.getRuleConfig())) {
- String dateValueOld = billNum.getDateValue();
- //判断时间值是否一致,一致流水号递增,不一致则重置流水号
- if (StringUtil.isEmpty(dateValueOld) || dateValueOld.equals(dateValue)) {
- thisNum = billNum.getNum() + 1;
- if (startNumber + thisNum > maxValue) {
- thisNum = 0;
- }
- }
- }
- } else {
- billNum = new BillNumEntity();
- }
- billNum.setRuleId(ruleId);
- billNum.setVisualId(visualId);
- billNum.setFlowId(flowId);
- billNum.setDateValue(dateValue);
- billNum.setNum(thisNum);
- billNum.setRuleConfig(ruleJosn);
- billNumService.saveBillNum(billNum);
- if (!"no".equals(dateValue)) {
- strNumber.append(dateValue);
- }
- strNumber.append(PadUtil.padRight(String.valueOf(startNumber + thisNum), ruleConfig.getDigit(), '0'));
- break;
- }
- //后缀
- String suffFixStr = setPreSuffFix(data, ruleConfig.getSuffixList());
- if (StringUtil.isNotEmpty(suffFixStr) && suffFixStr.length() > 100) {
- throw new DataException(MsgCode.VS027.get(config.getLabel()));
- }
- strNumber.append(suffFixStr);
- return strNumber.toString();
- } else {
- return thisValue;
- }
- }
- /**
- * 获取时间格式
- *
- * @param dateFor
- * @return
- */
- private static String getTimeFormat(String dateFor) {
- String dateForValue = "no";
- if (StringUtil.isEmpty(dateFor)) {
- return dateForValue;
- }
- switch (dateFor) {
- case "YYYY":
- dateForValue = "yyyy";
- break;
- case "YYYYMM":
- dateForValue = "yyyyMM";
- break;
- case "YYYYMMDD":
- dateForValue = "yyyyMMdd";
- break;
- case "YYYYMMDDHH":
- dateForValue = "yyyyMMddHH";
- break;
- case "YYYYMMDDHHmm":
- dateForValue = "yyyyMMddHHmm";
- break;
- case "YYYYMMDDHHmmss":
- dateForValue = "yyyyMMddHHmmss";
- break;
- case "YYYYMMDDHHmmssSSS":
- dateForValue = "yyyyMMddHHmmssSSS";
- break;
- }
- return dateForValue;
- }
- /**
- * 设置前后缀的值
- *
- * @param data
- * @param list
- */
- private static String setPreSuffFix(Map<String, Object> data, List<PrefixSuffixModel> list) {
- StringBuilder sb = new StringBuilder();
- if (CollectionUtils.isNotEmpty(list)) {
- for (PrefixSuffixModel prefix : list) {
- //sourtype = 2自定义,1表单字段
- if (Objects.equals(prefix.getSourceType(), 2)) {
- sb.append(prefix.getRelationField());
- } else {
- if (StringUtil.isNotEmpty(prefix.getRelationField()) && data.get(prefix.getRelationField()) != null) {
- sb.append(data.get(prefix.getRelationField()));
- }
- }
- }
- }
- return sb.toString();
- }
- }
|