Parcourir la source

公式相关 G10 bug

yangyj il y a 2 ans
Parent
commit
c5e50b3fbd

+ 19 - 9
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -17,18 +17,28 @@ public class FormulaUtils {
             //z的默认取值范围
             ranges="(0,15)";
         }
-        Matcher m = RegexUtils.matcher("[\\(||\\[](\\d*)(\\D)(\\d*)[\\)||\\]]",ranges.toString());
-        m.find();
-        Random rm = new Random();
-        int min = StringUtils.handObj2Integer(m.group(1));
-        int max = StringUtils.handObj2Integer(m.group(3));
-        Integer[] r= pythagorean(min,max);
-        map.put("X",String.valueOf(r[0]));
-        map.put("Y",String.valueOf(r[1]));
-        map.put("Z", String.valueOf(r[2]));
+        Matcher m = RegexUtils.matcher("(\\-?\\d+)(\\D)(\\+?\\d+)",ranges.toString());
+        if(m.find()) {
+            int min = StringUtils.handObj2Integer(m.group(1));
+            int max = StringUtils.handObj2Integer(m.group(3));
+            Integer[] r = pythagorean(min, max);
+            map.put("X", String.valueOf(r[0]));
+            map.put("Y", String.valueOf(r[1]));
+            map.put("Z", String.valueOf(r[2]));
+        }
         return map;
     }
 
+    public static void main(String[] args) {
+        Matcher m = RegexUtils.matcher("(\\-?\\d+)(\\D)(\\+?\\d+)","-5,5");
+        if(m.find()){
+            System.out.println(m.group());
+            System.out.println(m.group(1));
+            System.out.println(m.group(2));
+            System.out.println(m.group(3));
+        }
+    }
+
     /**
      * result[0]^2+result[1]^2=result[2]^2  result[] 元素均为正整数
      */

+ 5 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -1779,9 +1779,12 @@ public class ExcelTabController extends BladeController {
             dataArray.add(dataInfo);
         }
         List<TableInfo> tableInfoList = this.excelTabService.getTableInfoList(dataArray);
-        this.excelTabService.formulaFillData(tableInfoList);
+        try {
+            this.excelTabService.formulaFillData(tableInfoList);
+        }catch (Exception e){
+          e.printStackTrace();
+        }
         // pdf 预览
-
         this.excelTabService.saveOrUpdateInfo(tableInfoList);
         //单个 pdf
         for(TableInfo tableInfo:tableInfoList){

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsParamController.java

@@ -87,6 +87,8 @@ public class WbsParamController {
            List<WbsParamBean> updateList = map.get(true);
            if(CollectionUtil.isNotEmpty(saveList)){
                this.service.saveBatch(BeanUtil.copy(saveList,WbsParam.class));
+               /*新建的时候需要初始化绑定表单元素*/
+
            }
            if(CollectionUtil.isNotEmpty(updateList)){
                List<WbsParam> ul = new ArrayList<>();

+ 9 - 19
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaMileage.java

@@ -1,5 +1,6 @@
 package org.springblade.manager.formula.impl;
 
+import com.mixsmart.utils.CustomFunction;
 import com.mixsmart.utils.FormulaUtils;
 import com.mixsmart.utils.ListUtils;
 import com.mixsmart.utils.StringUtils;
@@ -28,7 +29,7 @@ import java.util.stream.Collectors;
 public class FormulaMileage implements FormulaStrategy {
     private FormData cur;
     private final MileageClient mileageClient;
-    public static final Pattern MILE_ARGS= Pattern.compile("(?<=FC.MILE\\()[^>]+(?=\\))");
+    public static final Pattern MILE_ARGS= Pattern.compile("(?<=T\\(com.mixsmart.utils.CustomFunction\\)\\.MILE\\()[^)]+(?=\\))");
     public static final String ZH="桩号";
     public static final String PW="偏位";
     public static final String SJX="设计值X";
@@ -46,21 +47,10 @@ public class FormulaMileage implements FormulaStrategy {
     public void execute(List<FormData> fds, Map<String,Object> constantMap) {
         List<ElementData> eds = cur.getValues();
         Map<String,String[]> mileages = getCoordinate(cur.getFormula().getFormula(),fds, Func.toLong(constantMap.get("contractId")));
-        if(ListUtils.isNotEmpty(eds)){
-            Matcher m= MILE_ARGS.matcher(cur.getCode());
-            String f= cur.getFormula().getFormula();
-            f=f.replace("MILE-","");
-            Map<String,String> keyMap = BaseUtils.string2Map(f);
-            if(keyMap.size()<MIN_ELE_SIZE){
-                return;
-            }
-            Map<String,FormData> mapFd=new HashMap<>(100);
-            keys.forEach(e->mapFd.put(e,fds.stream().filter(k->e.equals(k.getCode())).findFirst().orElseGet(null)));
-
+        if(ListUtils.isNotEmpty(eds)&&!mileages.isEmpty()){
+            Matcher m= MILE_ARGS.matcher(cur.getFormula().getFormula());
             if(m.find()){
-                String tmp =m.group();
-                tmp=tmp.replace("E[","").replace("]","");
-                List<String> cp = Arrays.asList(tmp.split(","));
+                List<String> cp =cur.getFormula().getRelyList();
                 Map<String,FormData> map = new LinkedHashMap<>();
                 List<FormData> listFd = new ArrayList<>();
                 fds.forEach(e->{
@@ -112,15 +102,15 @@ public class FormulaMileage implements FormulaStrategy {
         }
         this.cur.setFinished(Boolean.TRUE);
     }
-    public static final Pattern MILE_P = Pattern.compile("(?<=FC.MILE\\()([^,]+),([^,]+)(?=,)");
+    public static final Pattern MILE_P = Pattern.compile("(?<=T\\(com.mixsmart.utils.CustomFunction\\).MILE\\()([^,]+),([^,]+)(?=,)");
 
     public  Map<String,String[]> getCoordinate(String tmp,List<FormData> fds,Long contractId){
         Matcher mile=MILE_P.matcher(tmp);
         List<String> zhs;
         List<String> jzs;
         if (mile.find()){
-            String zh= mile.group(1);
-            String jz= mile.group(2);
+            String zh= mile.group(1).replaceAll("E\\['","").replaceAll("']","");
+            String jz= mile.group(2).replaceAll("E\\['","").replaceAll("']","");
             /*查找桩号元素*/
             Optional<FormData> op=fds.stream().filter(e->e.getCode().equals(zh)).findFirst();
             if(op.isPresent()){
@@ -146,7 +136,7 @@ public class FormulaMileage implements FormulaStrategy {
             }
 
         }
-        return  new HashMap<>();
+        return  new HashMap<>(20);
     }
 
     @Override

+ 25 - 23
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -295,32 +295,34 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
 	@Override
 	public void formulaFillData(List<TableInfo> tableInfoList) {
-		StopWatch stopWatch = new StopWatch();
-		String ids =tableInfoList.stream().map(TableInfo::getPkeyId).collect(Collectors.joining(","));
-		List<Map<String,Object>> list=this.jdbcTemplate.queryForList("SELECT   a.p_key_id as nodeId,b.id as fieldId,b.e_key as field,c.init_table_name as tableName  from m_wbs_tree_contract a LEFT JOIN m_wbs_form_element b on a.id=b.f_id left JOIN m_wbs_tree c on a.id=c.id where b.is_deleted=0 and a.p_key_id in ("+ids+")");
-		List<KeyMapper> keyMappers = JSON.parseArray(JSONArray.toJSONString(list), KeyMapper.class);
-		if(Func.isNotEmpty(keyMappers)) {
-			Map<String,Map<String,String>> coordinateMap = new HashMap<>(keyMappers.size()*2);
-			keyMappers.forEach(e->{
-				try {
-					if(!coordinateMap.containsKey(e.getTableName())){
-						/*不包含定位信息的情况执行*/
-						coordinateMap.put(e.getTableName(),getTablbCols(e.getNodeId().toString(),null));
+		if(Func.isNotEmpty(tableInfoList)){
+			StopWatch stopWatch = new StopWatch();
+			String ids =tableInfoList.stream().map(TableInfo::getPkeyId).filter(Func::isNotEmpty).collect(Collectors.joining(","));
+			List<Map<String,Object>> list=this.jdbcTemplate.queryForList("SELECT   a.p_key_id as nodeId,b.id as fieldId,b.e_key as field,c.init_table_name as tableName  from m_wbs_tree_contract a LEFT JOIN m_wbs_form_element b on a.id=b.f_id left JOIN m_wbs_tree c on a.id=c.id where b.is_deleted=0 and a.p_key_id in ("+ids+")");
+			List<KeyMapper> keyMappers = JSON.parseArray(JSONArray.toJSONString(list), KeyMapper.class);
+			if(Func.isNotEmpty(keyMappers)) {
+				Map<String,Map<String,String>> coordinateMap = new HashMap<>(keyMappers.size()*2);
+				keyMappers.forEach(e->{
+					try {
+						if(!coordinateMap.containsKey(e.getTableName())){
+							/*不包含定位信息的情况执行*/
+							coordinateMap.put(e.getTableName(),getTablbCols(e.getNodeId().toString(),null));
+						}
+					} catch (FileNotFoundException fileNotFoundException) {
+						fileNotFoundException.printStackTrace();
 					}
-				} catch (FileNotFoundException fileNotFoundException) {
-					fileNotFoundException.printStackTrace();
+				});
+				stopWatch.start("公式处理");
+				List<Formula> formulas = this.formulaService.list(Wrappers.<Formula>lambdaQuery().in(Formula::getElementId, keyMappers.stream().map(KeyMapper::getFieldId).distinct().collect(Collectors.toList())));
+				TableElementConverter tec = new TableElementConverter(tableInfoList, keyMappers, formulas,coordinateMap,1111111L);
+				if (tec.isPresent()) {
+					tec.before();
+					this.formulaService.execute(tec);
+					tec.after();
 				}
-			});
-			stopWatch.start("公式处理");
-			List<Formula> formulas = this.formulaService.list(Wrappers.<Formula>lambdaQuery().in(Formula::getElementId, keyMappers.stream().map(KeyMapper::getFieldId).distinct().collect(Collectors.toList())));
-			TableElementConverter tec = new TableElementConverter(tableInfoList, keyMappers, formulas,coordinateMap,1111111L);
-			if (tec.isPresent()) {
-				tec.before();
-				this.formulaService.execute(tec);
-				tec.after();
+				stopWatch.stop();
+				StaticLog.info("{}", stopWatch);
 			}
-			stopWatch.stop();
-			StaticLog.info("{}", stopWatch);
 		}
 	}