|
|
@@ -5,7 +5,9 @@ import com.bstek.ureport.console.designer.ReportUtils;
|
|
|
import com.jfirer.baseutil.encrypt.Md5Util;
|
|
|
import com.mixsmart.constant.IMixConstant;
|
|
|
import com.mixsmart.exception.NullArgumentException;
|
|
|
+import org.springblade.core.log.exception.ServiceException;
|
|
|
import org.springblade.core.tool.utils.StringPool;
|
|
|
+import org.springblade.core.tool.utils.StringUtil;
|
|
|
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
import java.lang.reflect.Field;
|
|
|
@@ -1428,5 +1430,114 @@ public class StringUtils {
|
|
|
return f;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 解析偏差值字符串,返回上下限范围
|
|
|
+ * 支持格式:±10、+10,-20、10,-20、+10、-20 等
|
|
|
+ */
|
|
|
+ public static Range parseDeviationRange(Object obj1, Object obj12) {
|
|
|
+ if(obj1 instanceof List){
|
|
|
+ obj1 = ((List)obj1).get(0);
|
|
|
+ }
|
|
|
+ String deviationStr = String.valueOf(obj1).trim();
|
|
|
+ String biasTwo = String.valueOf(obj12).trim();
|
|
|
+ int target = 0;
|
|
|
+
|
|
|
+ // 处理 ± 格式
|
|
|
+ if (deviationStr.startsWith("±")) {
|
|
|
+ int value = Integer.parseInt(deviationStr.substring(1).trim());
|
|
|
+ return new Range(target - value, target + value);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理逗号分隔的格式
|
|
|
+ if (deviationStr.contains(",")) {
|
|
|
+ String[] parts = deviationStr.split(",");
|
|
|
+ if (parts.length == 2) {
|
|
|
+ int upperDev = parseSingleDeviation(parts[0].trim());
|
|
|
+ int lowerDev = parseSingleDeviation(parts[1].trim());
|
|
|
+ if(upperDev > lowerDev){
|
|
|
+ return new Range(lowerDev, upperDev);
|
|
|
+ }else{
|
|
|
+ return new Range(upperDev, lowerDev);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理多个数据的格式
|
|
|
+ if (StringUtil.isNotBlank(deviationStr) && StringUtil.isNotBlank(biasTwo)) {
|
|
|
+ if(deviationStr.contains("+") || biasTwo.contains("+")){
|
|
|
+ deviationStr = deviationStr.replaceAll("\\+", "");
|
|
|
+ biasTwo = biasTwo.replaceAll("\\+","");
|
|
|
+ }
|
|
|
+ if(!StringUtils.isNumber(deviationStr) || !StringUtils.isNumber(biasTwo)){
|
|
|
+ throw new ServiceException(deviationStr + "或" + biasTwo + "----不是数字");
|
|
|
+ }
|
|
|
+ double v = Double.parseDouble(deviationStr);
|
|
|
+ double v1 = Double.parseDouble(biasTwo);
|
|
|
+ if(v > v1){
|
|
|
+ return new Range(v1, v);
|
|
|
+ }else{
|
|
|
+ return new Range(v, v1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理单个值格式
|
|
|
+ int singleDev = parseSingleDeviation(deviationStr);
|
|
|
+ return new Range(target - singleDev, target + singleDev);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 解析单个偏差值(支持 +10、-20、10 等格式)
|
|
|
+ */
|
|
|
+ private static int parseSingleDeviation(String devStr) {
|
|
|
+ if (devStr.startsWith("+") || devStr.startsWith("-")) {
|
|
|
+ return Integer.parseInt(devStr);
|
|
|
+ } else {
|
|
|
+ return Integer.parseInt(devStr);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 范围类,存储上下限
|
|
|
+ */
|
|
|
+ public static class Range {
|
|
|
+ public final double lower;
|
|
|
+ public final double upper;
|
|
|
+
|
|
|
+ public Range(double lower, double upper) {
|
|
|
+ this.lower = lower;
|
|
|
+ this.upper = upper;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String toString() {
|
|
|
+ return "[" + lower + ", " + upper + "]";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 去重并保留索引(保持原始顺序)
|
|
|
+ * 实测值满足条件
|
|
|
+ */
|
|
|
+ public static Map<String,List<Integer>> deduplicateWithIndices(Range range,List<Object> list,List<Object> list2) {
|
|
|
+ if (list == null || list.isEmpty()) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ // 使用LinkedHashMap保持插入顺序
|
|
|
+ Map<String, List<Integer>> indicesMap = new LinkedHashMap<>();
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ String element = (String) list.get(i);
|
|
|
+ //跳过空字符串和非数字字符串
|
|
|
+ if(StringUtils.isEmpty(element) || !StringUtils.isNumber(element)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ double v = Double.parseDouble((String) list2.get(i));
|
|
|
+ //如果这个偏差值小于下限或者大于上限,则跳过
|
|
|
+ if(v < range.lower || v > range.upper){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ indicesMap.computeIfAbsent(element, k -> new ArrayList<>()).add(i);
|
|
|
+ }
|
|
|
+
|
|
|
+ return indicesMap;
|
|
|
+ }
|
|
|
|
|
|
}
|