yangyj 2 жил өмнө
parent
commit
75c1b43ff1

+ 10 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -296,15 +296,16 @@ public class FormulaController {
             if(dw.length==1){
                 result.put(info.getKey()+"__"+dw[0],data.stream().filter(StringUtils::isNotEmpty).map(Func::toStr).collect(Collectors.joining("、")));
             }else{
-                for(int i=0;i<dw.length;i++){
-                    if(data.size()>i){
-                        result.put(info.getKey()+"__"+dw[i],data.get(i));
+                int start=new ArrayList<>(Arrays.asList(dw)).indexOf(bak);
+                for(int i=start;i<dw.length;i++){
+                    if(data.size()>i-start){
+                        result.put(info.getKey()+"__"+dw[i],data.get(i-start));
                     }else{
                         break;
                     }
                 }
-                if(data.size()>dw.length){
-                    result.put("more",data.stream().skip(dw.length).map(StringUtils::handleNull).collect(Collectors.joining(StringPool.SEMICOLON)));
+                if(data.size()>dw.length-start){
+                    result.put("more",data.stream().skip(dw.length-start).map(StringUtils::handleNull).collect(Collectors.joining(StringPool.SEMICOLON)));
                 }
             }
             /*保存实测值参数*/
@@ -358,13 +359,12 @@ public class FormulaController {
               }
               if(keyMapper!=null&&Func.isNotEmpty(keyMapper.getFormulaId())){
                    Formula formula = this.service.getById(keyMapper.getFormulaId());
-                  String data = this.formulaOptionService.queryOption(fo.getContractId(),fo.getParentId(),fo.getPkeyId(),fo.getKey());
                   /*临时处理,等确定数据结构在优化*/
                    if(formula.getFormula().contains(".option")){
-                       return R.data(createRadioPanel(0,"是否引用公式数据",data));
+                       return R.data(createRadioPanel(0,"是否引用公式数据",this.formulaOptionService.queryOption(fo.getContractId(),fo.getParentId(),fo.getPkeyId(),key)));
                    }else if (StringUtils.isEquals("MILE",formula.getNumber())||StringUtils.isEquals("TURN_POINT",formula.getNumber())){
                       if(StringUtils.isEquals(key,formula.getRelyList().get(0).split(StringPool.COLON)[1])){
-                          return R.data(createRadioPanel(1,"竖直方向",data));
+                          return R.data(createRadioPanel(1,"竖直方向",this.formulaOptionService.queryOption(fo.getContractId(),fo.getParentId(),fo.getPkeyId(),fo.getKey())));
                       }
                   }
                   R.success("暂无公式控件");
@@ -374,9 +374,9 @@ public class FormulaController {
 
     public JSONObject createRadioPanel(Integer scope,String label,String data){
         JSONObject jo =JSON.parseObject(TEMPLATE);
-        jo.put("scope",1);
+        jo.put("scope",scope);
         JSONObject info =jo.getJSONObject("info");
-        info.put("label","竖直方向");
+        info.put("label",label);
         info.put("code","TF");
         if(Func.isNotEmpty(data)){
             info.put("data",data);

+ 7 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/Mileage.java

@@ -26,6 +26,7 @@ public class Mileage {
     private String dy;
     private String ds;
     private LinkedHashMap<String, ElementData> dataMap;
+    private Boolean isVertical=false;
 
     public Mileage(LinkedHashMap<String, ElementData> dataMap) {
         this.dataMap = dataMap;
@@ -186,5 +187,11 @@ public class Mileage {
         this.dataMap = dataMap;
     }
 
+    public Boolean getVertical() {
+        return isVertical;
+    }
 
+    public void setVertical(Boolean vertical) {
+        isVertical = vertical;
+    }
 }

+ 10 - 0
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.jfireel.expression.Expression;
 import com.mixsmart.utils.CustomFunction;
 import com.mixsmart.utils.FormulaUtils;
 import com.mixsmart.utils.ListUtils;
@@ -9,10 +10,12 @@ import org.springblade.business.feign.MileageClient;
 import org.springblade.common.utils.BaseUtils;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringPool;
+import org.springblade.manager.bean.TableInfo;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.entity.Formula;
 import org.springblade.manager.formula.FormulaStrategy;
+import org.springblade.manager.formula.KeyMapper;
 import org.springblade.manager.formula.Mileage;
 import org.springframework.stereotype.Component;
 
@@ -65,10 +68,15 @@ public class FormulaMileage implements FormulaStrategy {
         FormData line0=data.get(0);
         if(line0!=null&&Func.isNotEmpty(line0.getValues())){
                List<ElementData> eds=line0.getValues();
+            List<Long> tableInfoIds= tec.getKeyMappers().stream().filter(k->k.getTableName().equals(cur.getTableName())).map(KeyMapper::getPkId).distinct().collect(Collectors.toList());
             for (ElementData ed : eds) {
                 LinkedHashMap<String, ElementData> row = new LinkedHashMap<>();
                 Mileage mileage = new Mileage(row);
                 mileage.setValue(0, ed.stringValue());
+                Long pkeyId=tableInfoIds.get(ed.getIndex());
+                String findStr="OP['"+cur.getTableName()+"']['"+pkeyId+"@"+cur.getKey()+"__"+ed.getY()+"_"+ed.getX()+"']['TF']";
+                String flag=StringUtils.handleNull(Expression.parse(findStr).calculate(tec.getConstantMap()));
+                mileage.setVertical(StringUtils.isEquals(1,StringUtils.handleNull(Expression.parse(findStr).calculate(tec.getConstantMap()))));
                 row.put(line0.getCode(), ed);
                 for (int j = 1; j < relyList.size(); j++) {
                     FormData rely = data.get(j);
@@ -88,6 +96,8 @@ public class FormulaMileage implements FormulaStrategy {
         if(Func.isNotEmpty(mileageList)){
               List<String>  zhpw =mileageList.stream().filter(Mileage::isChecked).map(Mileage::getZhPw).collect(Collectors.toList());
             Map<String,String[]> coordinateMap  =  mileageClient.mileage2Coordinate(zhpw,Func.toLong(tec.getConstantMap().get("contractId")));
+            /*G10缓存对象*/
+            tec.getConstantMap().put("G10",new Object());
             if(coordinateMap.size()>0){
                 mileageList.forEach(m->{
                     String[] coordinate = coordinateMap.get(m.getZhPw());

+ 17 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaOptionServiceImpl.java

@@ -33,12 +33,24 @@ public class FormulaOptionServiceImpl extends ServiceImpl<FormulaOptionMapper, F
             FormulaOption fo = this.getOne(Wrappers.<FormulaOption>lambdaQuery().eq(FormulaOption::getParentId,parentId).eq(FormulaOption::getContractId,contractId));
             if(fo!=null&&wbc!=null){
                 JSONObject jo = JSON.parseObject(fo.getVal());
-                 if(jo.containsKey(pkeyId.toString())){
+                 if(jo.containsKey(wbc.getInitTableName())){
                      JSONObject tableJson=jo.getJSONObject(wbc.getInitTableName());
-                     if(tableJson.containsKey(pkeyId.toString())){
-                         JSONObject excel = tableJson.getJSONObject(pkeyId.toString());
-                         if(excel.containsKey(key)){
-                             return excel.getString(key);
+                     if(key.contains("__")){
+                         String cellKey= pkeyId+"@"+key;
+                         if(tableJson.containsKey(cellKey)){
+                             JSONObject excel = tableJson.getJSONObject(cellKey);
+                             if(excel.containsKey("TF")){
+                                 /*暂时只有TF:是或否*/
+                                 return excel.getString("TF");
+                             }
+                         }
+                     }else{
+                         if(tableJson.containsKey(key)){
+                             JSONObject excel = tableJson.getJSONObject(key);
+                             if(excel.containsKey("TF")){
+                                 /*暂时只有TF:是或否*/
+                                 return excel.getString("TF");
+                             }
                          }
                      }
 

+ 8 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -74,7 +74,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     /*元素标识*/
     public final static String E="E";
     /*公式参数*/
-    public final static String FMOT="FORMULA_OPTION";
+    public final static String FMOT="OP";
     /**表单信息*/
     public final static String TEXT_INFO_MAP="textInfoMap";
 
@@ -424,6 +424,10 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     continue;
                 }
                 String tmp =fd.getFormula().getFormula();
+                /*假如是直接取数,则补充上非空过滤*/
+                if(tmp.matches("^E\\[m__[0-9]{14}_[0-9]{19}:key_[0-9]{0,3}]$")){
+                    tmp="FC.removeEmpty("+tmp+")";
+                }
                 tmp = tmp.replace(FC, CustomFunction.CLASS_CALL);
                 if(tmp.contains("E[")||tmp.contains("WP[")){
                     Matcher am = AP.matcher(tmp);
@@ -805,9 +809,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                            Optional<KeyMapper> kOp=tec.getKeyMappers().stream().filter(e->StringUtils.isEquals(e.getCode(),fd.getCode())).findFirst();
                            if(kOp.isPresent()){
                                /*表名+合同段+父节点*/
-                               Map<String,Object> optionMap = (Map<String, Object>) this.constantMap.computeIfAbsent(FMOT,k->new HashMap<>());
-                               String findStr=fd.getTableName()+"['"+fd.getKey()+"']['TF']";
-                               flag=StringUtils.handleNull(Expression.parse(findStr).calculate(optionMap));
+                               String findStr="OP['"+fd.getTableName()+"']['"+fd.getKey()+"']['TF']";
+                               flag=StringUtils.handleNull(Expression.parse(findStr).calculate(this.constantMap));
                            }
                        }else if(flag.contains("E[")){
                            List<FormData> target = getFormDataByCode(flag);
@@ -815,7 +818,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                               flag= target.get(0).getValues().stream().map(ElementData::stringValue).filter(StringUtils::isNotEmpty).findFirst().orElse("0");
                            }
                        }
-                       if(Func.isBlank(flag)){
+                       if(Func.isBlank(flag)||"OPTION".equals(flag)){
                            /*默认0*/
                            flag="0";
                        }