|
@@ -1,7 +1,9 @@
|
|
package org.springblade.manager.formula.impl;
|
|
package org.springblade.manager.formula.impl;
|
|
|
|
|
|
|
|
+import cn.hutool.core.util.ReUtil;
|
|
import com.mixsmart.utils.StringUtils;
|
|
import com.mixsmart.utils.StringUtils;
|
|
import lombok.Data;
|
|
import lombok.Data;
|
|
|
|
+import org.springblade.common.utils.CommonUtil;
|
|
import org.springblade.core.tool.utils.Func;
|
|
import org.springblade.core.tool.utils.Func;
|
|
import org.springblade.manager.dto.ElementData;
|
|
import org.springblade.manager.dto.ElementData;
|
|
import org.springblade.manager.dto.FormData;
|
|
import org.springblade.manager.dto.FormData;
|
|
@@ -11,67 +13,66 @@ import org.springblade.manager.formula.LevelInfo;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
+import java.util.regex.Pattern;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
* @author yangyj
|
|
* @author yangyj
|
|
* @Date 2022/8/10 16:16
|
|
* @Date 2022/8/10 16:16
|
|
- * @description TODO
|
|
|
|
|
|
+ * @description 生成转点是需要动态插入数据的,一组数据可能跨越几张表,必须要完整获取整组测量数据才能进行计算,先按照单张表的情况做,预留拓展
|
|
*/
|
|
*/
|
|
@Component
|
|
@Component
|
|
@Data
|
|
@Data
|
|
public class FormulaTurnPoint implements FormulaStrategy {
|
|
public class FormulaTurnPoint implements FormulaStrategy {
|
|
|
|
+ public static final String TURN_REG = "(?<=T\\(com.mixsmart.utils.CustomFunction\\).TURNPOINT\\()([^)]+)(?=,)";
|
|
private FormData cur;
|
|
private FormData cur;
|
|
static final List<String> KEYS;
|
|
static final List<String> KEYS;
|
|
private List<String> args;
|
|
private List<String> args;
|
|
static {
|
|
static {
|
|
KEYS=new ArrayList<>(Arrays.asList("测点","后视","前视","仪器高","实测高程","设计高程","偏差值","备注"));
|
|
KEYS=new ArrayList<>(Arrays.asList("测点","后视","前视","仪器高","实测高程","设计高程","偏差值","备注"));
|
|
}
|
|
}
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
- public void execute(List<FormData> fds, Map<String, Object> constantMap) {
|
|
|
|
|
|
+ public void execute(TableElementConverter tec) {
|
|
LinkedHashMap<String,FormData> dataSourceMap = new LinkedHashMap<>();
|
|
LinkedHashMap<String,FormData> dataSourceMap = new LinkedHashMap<>();
|
|
- TurnPointCalculator tpc = new TurnPointCalculator();
|
|
|
|
- List<String> args=cur.getFormula().getRelyList();
|
|
|
|
- this.args=args;
|
|
|
|
|
|
+ String funArgs =ReUtil.getGroup1(TURN_REG,cur.getFormula().getFormula());
|
|
|
|
+ if(StringUtils.isNotEmpty(funArgs)){
|
|
|
|
+ this.args=new ArrayList<>(Arrays.asList(funArgs.split(",")));
|
|
|
|
+ }
|
|
if(Func.isNotEmpty(args)) {
|
|
if(Func.isNotEmpty(args)) {
|
|
- args.forEach(k -> {
|
|
|
|
- Optional<FormData> ov =fds.stream().filter(e -> k.equals(e.getCode())).findFirst();
|
|
|
|
- ov.ifPresent(formData -> dataSourceMap.put(k, formData));
|
|
|
|
- });
|
|
|
|
- /*包含所有基本元素,不满足就终止*/
|
|
|
|
- if(dataSourceMap.size()<KEYS.size()){
|
|
|
|
- return;
|
|
|
|
|
|
+ for(int i=0;i<args.size();i++){
|
|
|
|
+ String k =args.get(i);
|
|
|
|
+ Optional<FormData> ov =tec.getFormDataMap().values().stream().filter(e -> k.equals(e.getCode())).findFirst();
|
|
|
|
+ if(ov.isPresent()){
|
|
|
|
+ dataSourceMap.put(k, ov.get());
|
|
|
|
+ }else if(i<7){
|
|
|
|
+ tec.log.append("水准测量表不满足计算所需的元素");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
CompositeDataAccess cda = new CompositeDataAccess(dataSourceMap);
|
|
CompositeDataAccess cda = new CompositeDataAccess(dataSourceMap);
|
|
- cda.cursorReset();
|
|
|
|
List<Map<String,Object>> tableData = new ArrayList<>();
|
|
List<Map<String,Object>> tableData = new ArrayList<>();
|
|
- Map<String,String> configMap = new HashMap<>();
|
|
|
|
- configMap.put("测点","cd");
|
|
|
|
- configMap.put("后视","hs");
|
|
|
|
- configMap.put("前视","qs");
|
|
|
|
- configMap.put("仪器高","yg");
|
|
|
|
- configMap.put("实测高程","sc");
|
|
|
|
- configMap.put("设计高程","sj");
|
|
|
|
- configMap.put("偏差值","pc");
|
|
|
|
- configMap.put("备注","bz");
|
|
|
|
|
|
+ /*用来映射元素*/
|
|
|
|
+ Map<String,String> configMap = new HashMap<>(KEYS.size()*2);
|
|
|
|
+ for(int i=0;i<KEYS.size();i++){
|
|
|
|
+ configMap.put(KEYS.get(i),this.args.get(i));
|
|
|
|
+ }
|
|
while (cda.hasNext()) {
|
|
while (cda.hasNext()) {
|
|
LinkedHashMap<String, ElementData> map = cda.next();
|
|
LinkedHashMap<String, ElementData> map = cda.next();
|
|
- ElementData cd = map.get(c("测点"));
|
|
|
|
- ElementData hs = map.get(c("后视"));
|
|
|
|
- ElementData qs = map.get(c("前视"));
|
|
|
|
- ElementData yg = map.get(c("仪器高"));
|
|
|
|
- ElementData sc = map.get(c("实测高程"));
|
|
|
|
- ElementData sj = map.get(c("设计高程"));
|
|
|
|
- ElementData pc = map.get(c("偏差值"));
|
|
|
|
- ElementData bz = map.get(c("备注"));
|
|
|
|
Map<String,Object> tmp = new HashMap<>(16);
|
|
Map<String,Object> tmp = new HashMap<>(16);
|
|
- tmp.put("cd",cd.getValue());
|
|
|
|
|
|
+ KEYS.forEach(k->{
|
|
|
|
+ ElementData ed = map.get(c(k));
|
|
|
|
+ tmp.put(configMap.get(k),ed.stringValue());
|
|
|
|
+ });
|
|
tableData.add(tmp);
|
|
tableData.add(tmp);
|
|
}
|
|
}
|
|
List<Object> data= ITurnPointCalculator.create(tableData,configMap);
|
|
List<Object> data= ITurnPointCalculator.create(tableData,configMap);
|
|
AtomicInteger ai = new AtomicInteger();
|
|
AtomicInteger ai = new AtomicInteger();
|
|
Map<Integer,List<Object>> dataMap = data.stream().collect(Collectors.groupingBy(e->ai.getAndAdd(1)%configMap.size()));
|
|
Map<Integer,List<Object>> dataMap = data.stream().collect(Collectors.groupingBy(e->ai.getAndAdd(1)%configMap.size()));
|
|
- LinkedHashMap<String, FormData> fdsOrder =cda.getFds();
|
|
|
|
|
|
+ LinkedHashMap<String,FormData> fdsOrder =cda.getFds();
|
|
|
|
+ dataSourceMap.forEach((k,v)->{
|
|
|
|
+
|
|
|
|
+ });
|
|
int i=0;
|
|
int i=0;
|
|
for(FormData formData:fdsOrder.values()){
|
|
for(FormData formData:fdsOrder.values()){
|
|
List<Object> dl =dataMap.get(i++);
|
|
List<Object> dl =dataMap.get(i++);
|