|
|
@@ -18,105 +18,110 @@ import org.springframework.stereotype.Component;
|
|
|
import java.util.*;
|
|
|
import java.util.regex.Matcher;
|
|
|
import java.util.regex.Pattern;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
@Component
|
|
|
@Data
|
|
|
public class FormulaZhiZuo implements FormulaStrategy {
|
|
|
|
|
|
+
|
|
|
@Override
|
|
|
public void execute(FormData cur, TableElementConverter tec) {
|
|
|
String key = cur.getFormula().getRely().substring(cur.getFormula().getRely().indexOf(':') + 1);
|
|
|
HashMap<Long, String> randomNumber = RandomNumberHolder.getRandomNumber();
|
|
|
- Map.Entry<Long, String> firstMap = randomNumber.entrySet().iterator().next();
|
|
|
- Optional<TableInfo> firstTableInfo = tec.getTableInfoList().stream().filter(tableInfo->tableInfo.getPkeyId().equals(firstMap.getKey().toString())).findFirst();
|
|
|
- String s = firstTableInfo.get().getDataMap().get(key);
|
|
|
- String[] strings = s.split("☆");
|
|
|
- Map<Integer, Double> list = new HashMap<>();
|
|
|
- for (int i = 0; i < strings.length; i++) {
|
|
|
- String pattern = "_\\^_(.*?)_";
|
|
|
- java.util.regex.Pattern r = java.util.regex.Pattern.compile(pattern);
|
|
|
- java.util.regex.Matcher m = r.matcher(strings[i]);
|
|
|
- if (m.find()) {
|
|
|
- // 获取匹配的值
|
|
|
- Integer mapkey = Integer.parseInt(m.group(1));
|
|
|
- Double v = Double.valueOf(strings[i].substring(0, strings[i].indexOf("_^_")));
|
|
|
- list.put(mapkey, v);
|
|
|
- }
|
|
|
- }
|
|
|
- List<ElementData> values = cur.getValues();
|
|
|
- values.forEach(e->e.setValue(null));
|
|
|
- TreeMap<Integer, Double> map = new TreeMap<>(list);
|
|
|
- Map.Entry<Integer, Double> firstEntry = map.firstEntry();
|
|
|
- Double first = firstEntry.getValue();
|
|
|
- Double second;
|
|
|
- Double threed;
|
|
|
- for (int i = 0; i < map.size(); i++) {
|
|
|
- if(i>=4){
|
|
|
- break;
|
|
|
- }
|
|
|
- Double v = map.get(firstEntry.getKey() + i + 1);
|
|
|
- if (ObjectUtil.isNotEmpty(v)) {
|
|
|
- Double value = first - v;
|
|
|
- if(value<0){
|
|
|
- value=Math.abs(value);
|
|
|
- }
|
|
|
- for (int j = i; j < values.size(); j++) {
|
|
|
- if(values.get(j).getY()==firstEntry.getKey() + i + 1){
|
|
|
- values.get(j).setValue(value);
|
|
|
- break;
|
|
|
+ if (!randomNumber.isEmpty()) {
|
|
|
+ List<TableInfo> collect = tec.getTableInfoList().stream().filter(tableInfo -> randomNumber.containsKey(Long.parseLong(tableInfo.getPkeyId()))).collect(Collectors.toList());
|
|
|
+ int index=0;
|
|
|
+ List<ElementData> values = cur.getValues();
|
|
|
+ values.forEach(e -> e.setValue(null));
|
|
|
+ for (TableInfo tableInfo : collect) {
|
|
|
+ String s = tableInfo.getDataMap().get(key);
|
|
|
+ String[] strings = s.split("☆");
|
|
|
+ Map<Integer, Double> list = new HashMap<>();
|
|
|
+ for (int i = 0; i < strings.length; i++) {
|
|
|
+ String pattern = "_\\^_(.*?)_";
|
|
|
+ java.util.regex.Pattern r = java.util.regex.Pattern.compile(pattern);
|
|
|
+ java.util.regex.Matcher m = r.matcher(strings[i]);
|
|
|
+ if (m.find()) {
|
|
|
+ // 获取匹配的值
|
|
|
+ Integer mapkey = Integer.parseInt(m.group(1));
|
|
|
+ Double v = Double.valueOf(strings[i].substring(0, strings[i].indexOf("_^_")));
|
|
|
+ list.put(mapkey, v);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
- if (map.size() >= 5) {
|
|
|
- Integer key1 = firstEntry.getKey() + 5;
|
|
|
- second = map.get(key1);
|
|
|
- if (ObjectUtil.isNotEmpty(second)) {
|
|
|
- for (int i = 5; i < map.size(); i++) {
|
|
|
- if(i>=9){
|
|
|
+ TreeMap<Integer, Double> map = new TreeMap<>(list);
|
|
|
+ Map.Entry<Integer, Double> firstEntry = map.firstEntry();
|
|
|
+ Double first = firstEntry.getValue();
|
|
|
+ Double second;
|
|
|
+ Double threed;
|
|
|
+ for (int i = 0; i < map.size(); i++) {
|
|
|
+ if (i >= 4) {
|
|
|
break;
|
|
|
}
|
|
|
- Double v = map.get(key1 + i -4);
|
|
|
+ Double v = map.get(firstEntry.getKey() + i + 1);
|
|
|
if (ObjectUtil.isNotEmpty(v)) {
|
|
|
- Double value = second - v;
|
|
|
- if(value<0){
|
|
|
- value=Math.abs(value);
|
|
|
+ Double value = first - v;
|
|
|
+ if (value < 0) {
|
|
|
+ value = Math.abs(value);
|
|
|
}
|
|
|
for (int j = i; j < values.size(); j++) {
|
|
|
- if(values.get(j).getY()==key1 + i -4){
|
|
|
- values.get(j).setValue(value);
|
|
|
+ if (values.get(j).getY() == firstEntry.getKey() + i + 1) {
|
|
|
+ values.get(j+index).setValue(value);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- if (map.size() >= 10) {
|
|
|
- Integer key2 = firstEntry.getKey() + 10;
|
|
|
- threed = map.get(key2);
|
|
|
- if (ObjectUtil.isNotEmpty(threed)) {
|
|
|
- for (int i = 10; i < map.size(); i++) {
|
|
|
- Double v = map.get(key2 + i -9);
|
|
|
- if (ObjectUtil.isNotEmpty(v)) {
|
|
|
- Double value = threed - v;
|
|
|
- if(value<0){
|
|
|
- value=Math.abs(value);
|
|
|
- }
|
|
|
- for (int j = i; j < values.size(); j++) {
|
|
|
- if(values.get(j).getY()==key2 + i -9){
|
|
|
- values.get(j).setValue(value);
|
|
|
+ if (map.size() >= 5) {
|
|
|
+ Integer key1 = firstEntry.getKey() + 5;
|
|
|
+ second = map.get(key1);
|
|
|
+ if (ObjectUtil.isNotEmpty(second)) {
|
|
|
+ for (int i = 5; i < map.size(); i++) {
|
|
|
+ if (i >= 9) {
|
|
|
break;
|
|
|
}
|
|
|
+ Double v = map.get(key1 + i - 4);
|
|
|
+ if (ObjectUtil.isNotEmpty(v)) {
|
|
|
+ Double value = second - v;
|
|
|
+ if (value < 0) {
|
|
|
+ value = Math.abs(value);
|
|
|
+ }
|
|
|
+ for (int j = i; j < values.size(); j++) {
|
|
|
+ if (values.get(j).getY() == key1 + i - 4) {
|
|
|
+ values.get(j+index).setValue(value);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (map.size() >= 10) {
|
|
|
+ Integer key2 = firstEntry.getKey() + 10;
|
|
|
+ threed = map.get(key2);
|
|
|
+ if (ObjectUtil.isNotEmpty(threed)) {
|
|
|
+ for (int i = 10; i < map.size(); i++) {
|
|
|
+ Double v = map.get(key2 + i - 9);
|
|
|
+ if (ObjectUtil.isNotEmpty(v)) {
|
|
|
+ Double value = threed - v;
|
|
|
+ if (value < 0) {
|
|
|
+ value = Math.abs(value);
|
|
|
+ }
|
|
|
+ for (int j = i; j < values.size(); j++) {
|
|
|
+ if (values.get(j).getY() == key2 + i - 9) {
|
|
|
+ values.get(j+index).setValue(value);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ index=index+15;
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
- System.out.println(values);
|
|
|
}
|
|
|
//优化之后的代码 放开注释可直接使用
|
|
|
// @Override
|