|
|
|
@ -1,14 +1,11 @@ |
|
|
|
package com.thing.calculation.service.impl; |
|
|
|
|
|
|
|
import static com.thing.calculation.entity.table.CalcTargetConfigEntityTableDef.CALC_TARGET_CONFIG_ENTITY; |
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollectionUtil; |
|
|
|
import cn.hutool.core.util.ObjectUtil; |
|
|
|
|
|
|
|
import com.mybatisflex.core.query.QueryWrapper; |
|
|
|
import com.thing.calculation.dto.*; |
|
|
|
import com.thing.calculation.entity.CalcSourceConfigEntity; |
|
|
|
import com.thing.calculation.entity.CalcTargetConfigEntity; |
|
|
|
import com.thing.calculation.entity.table.CalcTargetConfigEntityTableDef; |
|
|
|
import com.thing.calculation.enumeration.CalcConfigType; |
|
|
|
import com.thing.calculation.excel.CalcConfigExcel; |
|
|
|
import com.thing.calculation.excel.CalculationTypeExcel; |
|
|
|
@ -31,11 +28,8 @@ import com.thing.common.orm.service.impl.BaseServiceImpl; |
|
|
|
import com.thing.common.orm.utils.IdGenerator; |
|
|
|
import com.thing.common.tskv.service.TsKvService; |
|
|
|
import com.thing.sys.security.context.UserContext; |
|
|
|
|
|
|
|
import jakarta.servlet.http.HttpServletResponse; |
|
|
|
|
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
|
|
|
|
import org.apache.commons.collections4.MapUtils; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.springframework.cache.annotation.CacheEvict; |
|
|
|
@ -50,6 +44,8 @@ import java.util.function.Consumer; |
|
|
|
import java.util.function.Function; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
import static com.thing.calculation.entity.table.CalcTargetConfigEntityTableDef.CALC_TARGET_CONFIG_ENTITY; |
|
|
|
|
|
|
|
/** |
|
|
|
* 物计算(目标物)配置 |
|
|
|
* |
|
|
|
@ -70,14 +66,14 @@ public class CalcTargetConfigServiceImpl |
|
|
|
private final CalcSourceConfigService calcSourceConfigService; |
|
|
|
|
|
|
|
/** 变量池:A ~ Z */ |
|
|
|
private static final List<String> variablePool = new ArrayList<>(); |
|
|
|
|
|
|
|
static { |
|
|
|
for (int asciiValue = 65; asciiValue <= 90; asciiValue++) { |
|
|
|
char c = (char) asciiValue; |
|
|
|
variablePool.add(String.valueOf(c)); |
|
|
|
} |
|
|
|
} |
|
|
|
// private static final List<String> variablePool = new ArrayList<>(); |
|
|
|
// |
|
|
|
// static { |
|
|
|
// for (int asciiValue = 65; asciiValue <= 90; asciiValue++) { |
|
|
|
// char c = (char) asciiValue; |
|
|
|
// variablePool.add(String.valueOf(c)); |
|
|
|
// } |
|
|
|
// } |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@ -160,6 +156,32 @@ public class CalcTargetConfigServiceImpl |
|
|
|
calcSourceConfigService.saveOrUpdateBatch(sourceConfigEntities); |
|
|
|
} |
|
|
|
|
|
|
|
// 递归生成字母组合 |
|
|
|
public static List<String> generateCombinations(int targetSize) { |
|
|
|
List<String> combinations = new ArrayList<>(); |
|
|
|
int letterCount = 26; // 英文字母数量 |
|
|
|
|
|
|
|
// 生成字母组合 |
|
|
|
int i = 0; |
|
|
|
while (combinations.size() < targetSize) { |
|
|
|
combinations.add(toExcelColumn(i++)); |
|
|
|
} |
|
|
|
|
|
|
|
return combinations; |
|
|
|
} |
|
|
|
// 将数字转换为类似Excel列的字母组合(从A到Z,AA,AB等) |
|
|
|
public static String toExcelColumn(int n) { |
|
|
|
StringBuilder sb = new StringBuilder(); |
|
|
|
|
|
|
|
// 转换为Excel列号 |
|
|
|
while (n >= 0) { |
|
|
|
sb.append((char) ('A' + n % 26)); |
|
|
|
n = n / 26 - 1; |
|
|
|
} |
|
|
|
|
|
|
|
return sb.reverse().toString(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 生成配置默认信息,手动生成id以建立目标物和计算物之间的关联 |
|
|
|
* |
|
|
|
@ -379,9 +401,12 @@ public class CalcTargetConfigServiceImpl |
|
|
|
private void autoGenerateFormula( |
|
|
|
CalcTargetConfigDTO targetConfig, List<CalcSourceConfigDTO> sourceConfigs) { |
|
|
|
StringBuilder formulaBuilder = new StringBuilder(); |
|
|
|
|
|
|
|
List<String> combinations = generateCombinations(CollectionUtil.size(sourceConfigs)); |
|
|
|
|
|
|
|
for (int i = 0; i < sourceConfigs.size(); i++) { |
|
|
|
CalcSourceConfigDTO sourceConfig = sourceConfigs.get(i); |
|
|
|
String alias = variablePool.get(i); |
|
|
|
String alias = combinations.get(i); |
|
|
|
sourceConfig.setSourceAttrAlias(alias); |
|
|
|
formulaBuilder.append(alias); |
|
|
|
if (i < sourceConfigs.size() - 1) { |
|
|
|
@ -394,9 +419,10 @@ public class CalcTargetConfigServiceImpl |
|
|
|
private void autoGenerateFormula( |
|
|
|
CalcTargetConfigEntity targetConfig, List<CalcSourceConfigEntity> sourceConfigs) { |
|
|
|
StringBuilder formulaBuilder = new StringBuilder(); |
|
|
|
List<String> combinations = generateCombinations(CollectionUtil.size(sourceConfigs)); |
|
|
|
for (int i = 0; i < sourceConfigs.size(); i++) { |
|
|
|
CalcSourceConfigEntity sourceConfig = sourceConfigs.get(i); |
|
|
|
String alias = variablePool.get(i); |
|
|
|
String alias = combinations.get(i); |
|
|
|
sourceConfig.setSourceAttrAlias(alias); |
|
|
|
formulaBuilder.append(alias); |
|
|
|
if (i < sourceConfigs.size() - 1) { |
|
|
|
|