浏览代码

Merge branch 'dev' into master

yangyj 2 年之前
父节点
当前提交
5ccc5537d4

+ 15 - 8
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -41,6 +41,8 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
+import static java.util.regex.Pattern.*;
+
 
 /**
  * @author yangyj
@@ -345,11 +347,11 @@ public class FormulaUtils {
         }
 
         String str = eName.replaceAll("\\s", "");
-        Pattern pattern = Pattern.compile("[((_]");
+        Pattern pattern = compile("[((_]");
         String[] candidate = pattern.split(str);
 
         String regex = "[^\\u4e00-\\u9fa5]+";
-        Pattern p = Pattern.compile(regex);
+        Pattern p = compile(regex);
 
         return Arrays.stream(candidate)
                 .filter(s -> !isContainKeywords(s))
@@ -442,12 +444,12 @@ public class FormulaUtils {
                     .flatMap(tr->tr.select("td").stream())
                     .filter(d->!d.children().isEmpty())
                     .map(d->d.children().get(0)).map(d->d.attr("keyname")).filter(StringUtils::isNotEmpty).map(e->e.split("__"))
-                    .reduce(
-                            new HashMap<>(),
-                            (a,b)->{
-                                a.merge(b[0], b[1], (v1, v2) -> v1 + ";" + v2);
-                                return  a;},
-                            (a,b)->null
+                    .collect(
+                            Collectors.toMap(
+                                    b -> b[0],
+                                    b -> b[1],
+                                    (v1, v2) -> v1 + ";" + v2
+                            )
                     );
         }catch (Exception e){
             e.printStackTrace();
@@ -455,6 +457,11 @@ public class FormulaUtils {
         }
     }
 
+    public static void main(String[] args) {
+        Map<String,String> map =getElementCell("");
+        System.out.println();
+    }
+
 
     public static List<String> itemNames =Arrays.asList(
             ""

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

@@ -13,6 +13,7 @@ import com.mixsmart.utils.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import org.springblade.common.utils.BaseUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Condition;
@@ -30,6 +31,7 @@ import org.springblade.manager.service.*;
 import org.springblade.manager.service.impl.FormulaServiceImpl;
 import org.springblade.manager.vo.AppWbsTreeContractVO;
 import org.springblade.manager.wrapper.FormulaWrapper;
+import org.springframework.beans.BeanUtils;
 import org.springframework.dao.EmptyResultDataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
@@ -89,6 +91,7 @@ public class FormulaController {
             Formula fa = f.toFormula();
             fa.setFormula(StringUtils.escapeFormula(f.getFormula()));
             fa.setRemark(StringUtils.escapeFormula(fa.getRemark()));
+            fa.setFormula(StringUtils.removeMultiSpace(fa.getFormula()));
             this.service.relyParse(fa);
             if (f.isNewOne()) {
                 if (StringUtils.isEmpty(f.getFormula())) {
@@ -126,7 +129,13 @@ public class FormulaController {
                     this.jdbcTemplate.batchUpdate(sql);
                     return R.success("公式已删除");
                 }
-                this.service.updateById(fa);
+                Formula old = this.service.getById(fa.getId());
+                BeanUtils.copyProperties(fa,old,"formula","map","dev","scale");
+                old.setFormula(fa.getFormula());
+                old.setMap(fa.getMap());
+                old.setDev(fa.getDev());
+                old.setScale(fa.getScale());
+                this.service.update(Wrappers.<Formula>lambdaUpdate().set(Formula::getFormula,fa.getFormula()).set(Formula::getMap,fa.getMap()).set(Formula::getDev,fa.getDev()).set(Formula::getScale,fa.getScale()).eq(Formula::getId,fa.getId()));
                 return R.data(fa.getId());
             }
         }

+ 24 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -15,6 +15,7 @@ import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Element;
 import org.jsoup.select.Elements;
+import org.springblade.common.utils.BaseUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.tool.api.R;
@@ -724,7 +725,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                     local.add(new LocalVariable(index,f,variable));
                                 }
                                 if(local.size()>0){
-                                    List<Object> values = slice(local,tec.constantMap,f);
+                                    List<Object> values = slice(local,f);
                                     FormulaUtils.write(fd,values, !fd.getTableName().equals(checkTable));
                                 }
                             }else{
@@ -1284,10 +1285,11 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
 
 
 
-    public  List<Object> slice(List<LocalVariable>  local,Map<String,Object> constantMap,String formula){
+    public  List<Object> slice(List<LocalVariable>  local,String formula){
         int min =0;
         List<Object> result = new ArrayList<>();
         try {
+            pretreatment(local,formula);
             List<Object>  r= local.stream().map(e-> Expression.parse(e.getFormula()).calculate(e.getCurrentMap())).collect(Collectors.toList());
             if(CollectionUtil.isNotEmpty(r)&&r.stream().anyMatch(StringUtils::isNotEmpty)){
                 result.addAll(r);
@@ -1298,6 +1300,25 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
         return  result;
     }
 
+    public void  pretreatment(List<LocalVariable>  local,String formula){
+        formula=StringUtils.removeMultiSpace(formula);
+        if(formula.contains("LIST")){
+            Matcher  m=RegexUtils.matcher("\\(([^)]*)\\)/LIST",formula);
+            while (m.find()){
+                List<String> codes=this.getCodeList(m.group(1).replaceAll("[+-]",","));
+                local=local.stream().peek(e->{
+                    @SuppressWarnings("unckecked")
+                    Map<String,Object> map = (Map<String, Object>) e.getCurrentMap().getOrDefault(E,new HashMap<>());
+                    int listSize=(int)codes.stream().filter(c->StringUtils.isNotEmpty(map.get(c))).count();
+                    if(listSize<=0||listSize>codes.size()){
+                        listSize=codes.size();
+                    }
+                    map.put("LIST",listSize);
+                }).collect(Collectors.toList());
+            }
+        }
+    }
+
 
     public  static void sort( List<FormData> list,int n){
         /*System.out.println("剩余计算次数:"+n+"次");*/
@@ -1605,7 +1626,7 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
         if(StringUtils.isNotEmpty(codes)){
             String[] relyArr = codes.split(StringPool.COMMA);
             List<Map<String,Object>> mapList =this.jdbcTemplate.queryForList("select CONCAT(a.tab_en_name,':',b.e_key) ekey,a.tab_ch_name tableName,b.e_name ename  ,b.e_length elength,c.dict_value type f" +
-                    "rom m_table_info a JOIN m_wbs_form_element b on a.id=b.f_id  " +
+                    "rom m_table_info a JOIN m_wbs_form_element b on a.id=b.f_id and b.is_deleted=0  " +
                     "LEFT JOIN (select dict_key, dict_value from blade_dict where code ='data_type' and parent_id > 0 and is_sealed = 0 and is_deleted = 0 )c on b.e_type=c.dict_key" +
                     " where  a.tab_en_name in( "+ Arrays.stream(relyArr).map(e->e.split(StringPool.COLON)[0]).distinct().collect(Collectors.joining("','","'","'"))+")");
             if(ListUtils.isNotEmpty(mapList)){