فهرست منبع

公式相关:bug

yangyj 2 سال پیش
والد
کامیت
4ea67f5030

+ 4 - 1
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -412,6 +412,9 @@ public class CustomFunction {
 	 **/
 	public static Object dateAfter(Object date ,Object n){
 		if(StringUtils.isNotEmpty(date)&&StringUtils.isNumber(n)){
+			if(date instanceof  List){
+				date=((List)date).get(0);
+			}
 			DateTime dt = new DateTime(date.toString());
 			dt.offset(DateField.HOUR_OF_DAY,24*Integer.parseInt(n.toString()));
 			return dt.toString(DatePattern.UTC_PATTERN);
@@ -2057,7 +2060,7 @@ public class CustomFunction {
 			/*外观质量,这种中文描述去重*/
 			if(list.stream().filter(CustomFunction::containsZH).anyMatch(e->e.toString().contains("\n"))){
 				AtomicInteger index= new AtomicInteger(1);
-				result=list.stream().flatMap(e-> Arrays.stream(e.toString().split("\\n+"))).map(String::trim).map(e->e.replaceAll("^\\d+、","")).distinct().map(e->(index.getAndIncrement())+"、"+e+"\n").collect(Collectors.toList());
+				result=list.stream().flatMap(e-> Arrays.stream(e.toString().split("\\n+"))).map(String::trim).map(e->e.replaceAll("^\\d+[.]","")).distinct().map(e->(index.getAndIncrement())+"、"+e+"\n").collect(Collectors.toList());
 			}else{
 				result=list.stream().distinct().collect(Collectors.toList());
 			}

+ 12 - 7
blade-service/blade-manager/src/main/java/com/mixsmart/utils/StringUtils.java

@@ -1255,13 +1255,18 @@ public class StringUtils {
 	 **/
 	public  static Integer getScale(Object ...number){
 		int max=0;
-		for(Object n:number){
-			if(StringUtils.isNotEmpty(n)){
-				String[] sa = n.toString().split(",");
-				for(String s:sa){
-					Matcher m = RegexUtils.matcher("(\\d)+.(\\d)+",s);
-					if(m.find()){
-						max=Math.max(new StringBuilder(m.group()).reverse().toString().indexOf("."),max);
+		if(number!=null) {
+			for (Object n : number) {
+				if (StringUtils.isNotEmpty(n)) {
+					String[] sa = n.toString().split(",");
+					for (String s : sa) {
+						Matcher m = RegexUtils.matcher("(\\d)+.(\\d)+", s);
+						if (m.find()) {
+							int cp=new StringBuilder(m.group()).reverse().toString().indexOf(".");
+							if(cp<5) {
+								max = Math.max(cp, max);
+							}
+						}
 					}
 				}
 			}

+ 11 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -655,6 +655,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
     /**通用计算*/
     public void generalCalc(){
+        String checkTable ="";
+        Optional<AppWbsTreeContractVO> op=tec.getTableAll().stream().filter(e->StringUtils.isEquals(1,e.getTableType())).findAny();
+        if(op.isPresent()){
+            checkTable=op.get().getInitTableName();
+        }
         for(FormData fd:this.formDataList){
             if(fd.verify()){
                 Formula formula =fd.getFormula();
@@ -712,7 +717,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                 }
                                 if(local.size()>0){
                                     List<Object> values = slice(local,this.constantMap,f);
-                                    FormulaUtils.write(fd,values,true);
+                                    if(fd.getTableName().equals(checkTable)){
+                                        FormulaUtils.write(fd,values,false);
+                                    }else{
+                                        FormulaUtils.write(fd,values,true);
+                                    }
                                 }
                             }else{
                                 Map<String,Object> em = (Map<String, Object>) currentMap.computeIfAbsent(E,(k)-> new HashMap<>());
@@ -1061,7 +1070,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
 public  List<ElementData> setScale(Integer scale,List<ElementData> data){
     if(scale==null){
-        scale=2;
+        scale=StringUtils.getScale(data.stream().map(ElementData::getValue).filter(StringUtils::isDouble).collect(Collectors.toList()));
     }
     Integer finalScale = scale;
     return data.stream().peek(e->{if(StringUtils.isDouble(e.getValue())){e.setValue(StringUtils.number2String(e.getValue(),finalScale));}}).collect(Collectors.toList());