Преглед на файлове

Merge branch 'test-merge' of http://219.151.181.73:3000/zhuwei/bladex into test-merge

lvy преди 6 дни
родител
ревизия
447bc0e196

+ 4 - 3
blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java

@@ -91,14 +91,15 @@ public class OssBuilder {
 		String tenantId = AuthUtil.getTenantId();
 		Oss oss = getOss(tenantId, code);
         String sys_isonline = ParamCache.getValue(CommonConstant.SYS_ISONLINE);
-       /* if(SystemUtils.isMacOs()||SystemUtils.isWindows()){
+       if(SystemUtils.isMacOs()||SystemUtils.isWindows()){
             if("20".equals(sys_isonline)){
                 oss.setEndpoint("http://183.247.216.148:9000/");
             }else {
                 oss.setEndpoint("https://xinan1.zos.ctyun.cn");
             }
-        }*/
-		oss.setEndpoint("https://xinan1.zos.ctyun.cn");
+        }
+		//oss.setEndpoint("http://183.247.216.148:9000/");
+		//oss.setEndpoint("https://xinan1.zos.ctyun.cn");
 		System.out.println("oss111="+oss.getEndpoint());
 		Oss ossCached = ossPool.get(tenantId);
 		OssTemplate template = templatePool.get(tenantId);

+ 12 - 3
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/RebateIncentiveAdvPay.java

@@ -5,6 +5,7 @@ import lombok.Data;
 import org.springblade.common.utils.BaseUtils;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 
 /**
  * @author yangyj
@@ -39,13 +40,21 @@ public class RebateIncentiveAdvPay implements  DataModel{
     public void calc(String contractAmount,String dyTotalAmount,String currentPeriodEndPay){
         double contractAmountD=BaseUtils.obj2DoubleZero(contractAmount);
         //2025/7/23  修改逻辑 将最后算出来的值需要减去上期末的扣回动员预付款 currentPeriodEndPay
-        double x=((2*(BaseUtils.obj2DoubleZero(subtotal) -0.3*contractAmountD)*BaseUtils.obj2DoubleZero(dyTotalAmount))/contractAmountD)-BaseUtils.obj2DoubleZero(currentPeriodEndPay);
+        double x=((2*(BaseUtils.obj2DoubleZero(subtotal) -0.3*contractAmountD)*BaseUtils.obj2DoubleZero(dyTotalAmount))/contractAmountD);
+        double y=BaseUtils.obj2DoubleZero(currentPeriodEndPay);
+        // 四舍五入后再相减
+        BigDecimal roundedX = new BigDecimal(x).setScale(0, BigDecimal.ROUND_HALF_UP);
+        BigDecimal roundedY = new BigDecimal(y).setScale(0, BigDecimal.ROUND_HALF_UP);
+        double result = roundedX.subtract(roundedY).doubleValue();
         if(x>0){
             /*扣回款本身就是负数*/
-            String s=new BigDecimal(x).setScale(5,BigDecimal.ROUND_HALF_UP).toPlainString();
-            //this.retained =s ;
+            String s=new BigDecimal(result).setScale(0,BigDecimal.ROUND_HALF_UP).toPlainString();
+            this.retained =s ;
             this.currentPay=s;
         }
+        if(roundedX.compareTo(BigDecimal.ZERO)>0){
+            this.endPay=roundedX.toPlainString();
+        }
 
     }
 

+ 10 - 2
blade-service/blade-manager/src/main/java/com/jfireel/expression/util/ValueUtil.java

@@ -19,14 +19,22 @@ public class ValueUtil {
                 if (tmp.size() == 0) {
                     return null;
                 }
-                left = sum(tmp);
+                if(tmp.size() == 1){
+                    left = tmp.get(0);
+                }else{
+                    left = sum(tmp);
+                }
             }
             if (right instanceof List) {
                 List<Object> tmp = CustomFunction.obj2ListNe(right);
                 if (tmp.size() == 0) {
                     return null;
                 }
-                right = sum(tmp);
+                if(tmp.size() == 1){
+                    right = tmp.get(0);
+                }else{
+                    right = sum(tmp);
+                }
 
             }
             if (StringUtils.isNotEmpty(left) && StringUtils.isNotEmpty(right)) {

+ 10 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -1353,14 +1353,19 @@ public class ExecutorMeter extends FormulaExecutor {
                                      rebateIncentiveAdvPay.calc(baseInfo.getContractAmount().toPlainString(), dyTotalAmount,preSubTotal.getCurrentPeriodEndPay());
                                  }
                                  if (preSubTotal != null) {
-                                     // 对两个参数进行四舍五入后再计算
-                                     String currentPayRounded = BaseUtils.str2BigDecimal(rebateIncentiveAdvPay.getCurrentPay()).setScale(0, RoundingMode.HALF_UP).toPlainString();
-                                     String previousPayRounded = BaseUtils.str2BigDecimal(preSubTotal.getCurrentPeriodEndPay()).setScale(0, RoundingMode.HALF_UP).toPlainString();
-                                     rebateIncentiveAdvPay.setEndPay(addFc.apply(currentPayRounded, previousPayRounded));
-                                     rebateIncentiveAdvPay.setRetained(rebateIncentiveAdvPay.getEndPay());
+//                                     // 对两个参数进行四舍五入后再计算
+//                                     String currentPayRounded = BaseUtils.str2BigDecimal(rebateIncentiveAdvPay.getCurrentPay()).setScale(0, RoundingMode.HALF_UP).toPlainString();
+//                                     String previousPayRounded = BaseUtils.str2BigDecimal(preSubTotal.getCurrentPeriodEndPay()).setScale(0, RoundingMode.HALF_UP).toPlainString();
+//                                     String endapply = addFc.apply(currentPayRounded, previousPayRounded);
+//                                    // rebateIncentiveAdvPay.setEndPay("0");
+//                                     rebateIncentiveAdvPay.setEndPay(endapply);
+//                                     //rebateIncentiveAdvPay.setEndPay(rebateIncentiveAdvPay.getEndPay());
                                  } else {
+                                     //累计扣回开工预付款金额
                                      rebateIncentiveAdvPay.setEndPay(rebateIncentiveAdvPay.getCurrentPay());
                                  }
+
+                                 //扣除金额-上期末累计扣回金额
                                  if(preSubTotal!=null){
                                      rebateIncentiveAdvPay.setPreviousPay(preSubTotal.getCurrentPeriodEndPay());
                                  }

+ 66 - 103
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -5871,119 +5871,82 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             }
             //多条件判断
             if (f.contains("ifelseMulti")){
-                int max = 0;
-                do {
-                    // 修改正则表达式,使用非贪婪匹配来处理嵌套情况
-                    Matcher m = RegexUtils.matcher(FC_REG + "(ifelseMulti)\\(((?:[^()]++|\\([^()]*\\))*?)\\)", f);
-                    boolean found = false;
-
-                    while (m.find()) {
-                        found = true;
-                        String el = m.group();
-
-                        try {
-                            // 提取括号内的内容(去掉外层的ifelse())
-                            String content = el.replaceFirst("^" + FC_REG + "ifelseMulti\\(", "").replaceFirst("\\)$", "");
-
-                            // 解析参数,处理嵌套逗号(在括号内的逗号不应该作为分隔符)
-                            List<String> pa = parseParameters(content);
-
-                            if (pa.size() == 3) {
-                                Map<String, Object> currentMap = createCurrentMap(el, tec);
-                                //判断 为
-                                String falseStr = pa.get(2);;
-                                if(pa.get(2).contains("(")){
-                                    pa.set(2,"-10086");
-                                }
-                                String string = pa.get(0) + "?" + pa.get(1) + ":" + pa.get(2);
-                                Expression parse = Expression.parse(string);
-                                Object data = parse.calculate(currentMap);
-                                //递归计算
-                                if(Objects.equals(String.valueOf(data),"-10086")){
-                                    //进入递归算法
-                                    data = multipleIfElse(falseStr,currentMap);
-                                }
-                                f = f.replace(el, putDataWithKey(data, tec));
-                            } else {
-                                f = f.replace(el, "参数格式错误");
-                            }
-                        } catch (Exception e) {
-                            f = f.replace(el, "解析错误");
+                try {
+                    // 提取括号内的内容(去掉外层的ifelse())
+                    String content = f.replaceFirst("^" + FC_REG + "ifelseMulti\\(", "").replaceFirst("\\)$", "");
+
+                    // 解析参数,处理嵌套逗号(在括号内的逗号不应该作为分隔符)
+                    List<String> pa = parseParameters(content);
+
+                    if (pa.size() == 3) {
+                        Map<String, Object> currentMap = createCurrentMap(f, tec);
+                        //判断 为
+                        String falseStr = pa.get(2);;
+                        if(pa.get(2).contains("(") && pa.get(2).contains(",") && pa.get(2).split(",").length == 3){
+                            pa.set(2,"-10086");
                         }
+                        String string = pa.get(0) + "?" + pa.get(1) + ":(" + pa.get(2) + ")";
+                        Expression parse = Expression.parse(string);
+                        Object data = parse.calculate(currentMap);
+                        //递归计算
+                        if(Objects.equals(String.valueOf(data),"-10086")){
+                            //进入递归算法
+                            data = multipleIfElse(falseStr,currentMap);
+                        }
+                        f = f.replace(f, putDataWithKey(data, tec));
+                    } else {
+                        f = f.replace(f, "参数格式错误");
                     }
-
-                    max++;
-                    // 如果没有找到匹配项,提前退出循环
-                    if (!found) {
-                        break;
-                    }
-                } while (f.contains("ifelseMulti") && max < 20);
+                } catch (Exception e) {
+                    f = f.replace(f, "解析错误");
+                }
             }
             // switch-case 选择公式
             if (f.contains("switchCase")){
-                int max = 0;
-                do {
-                    // 修改正则表达式,使用非贪婪匹配来处理嵌套情况
-                    Matcher m = RegexUtils.matcher(FC_REG + "(switchCase)\\(((?:[^()]++|\\([^()]*\\))*?)\\)", f);
-                    boolean found = false;
+                try {
+                    // 提取括号内的内容(去掉外层的ifelse())
+                    String content = f.replaceFirst("^" + FC_REG + "switchCase\\(", "").replaceFirst("\\)$", "");
 
-                    while (m.find()) {
-                        found = true;
-                        String el = m.group();
+                    String key = null;
+                    String value = null;
 
-                        try {
-                            // 提取括号内的内容(去掉外层的ifelse())
-                            String content = el.replaceFirst("^" + FC_REG + "switchCase\\(", "").replaceFirst("\\)$", "");
+                    Map<String, Object> currentMap = createCurrentMap(f, tec);
 
-
-                            //
-                            String key = null;
-                            String value = null;
-
-                            Map<String, Object> currentMap = createCurrentMap(el, tec);
-
-                            //根据分号分组 数据样例:a=x -> b=0; a=y -> c=1; else -> d=2
-                            String[] ruleArray = content.trim().split(",");
-                            if(ruleArray.length % 2 != 0){
-                                throw new ServiceException("数据格式错误");
-                            }
-                            List<String> list = Arrays.asList(ruleArray);
-                            //2条数据为一组
-                            List<List<String>> partition = Lists.partition(list, 2);
-                            for (List<String> strings : partition) {
-                                String s = strings.get(0);
-                                String s1 = strings.get(1);
-                                String[] action = s1.split("=");
-                                if ("else".equals(s)) {
-                                    key = action[0];
-                                    value = action[1];
-                                    break;
-                                }
-                                Expression parse = Expression.parse(s + "?1:0");
-                                Object data = parse.calculate(currentMap);
-                                if(Objects.equals("1",String.valueOf(data))){
-                                    key = action[0];
-                                    value = action[1];
-                                    break;
-                                }
-                            }
-                            f = "";
-                            if(key != null && value != null){
-                                /*数据回写*/
-                                write(key,value,tec);
-                            }
-                        } catch (Exception e) {
-                            f = f.replace(el, "解析错误");
+                    //根据分号分组 数据样例:a=x -> b=0; a=y -> c=1; else -> d=2
+                    String[] ruleArray = content.trim().split(",");
+                    if(ruleArray.length % 2 != 0){
+                        throw new ServiceException("数据格式错误");
+                    }
+                    List<String> list = Arrays.asList(ruleArray);
+                    //2条数据为一组
+                    List<List<String>> partition = Lists.partition(list, 2);
+                    for (List<String> strings : partition) {
+                        String s = strings.get(0);
+                        String s1 = strings.get(1);
+                        String[] action = s1.split("=");
+                        if ("else".equals(s)) {
+                            key = action[0];
+                            value = action[1];
+                            break;
+                        }
+                        Expression parse = Expression.parse(s + "?1:0");
+                        Object data = parse.calculate(currentMap);
+                        if(Objects.equals("1",String.valueOf(data))){
+                            key = action[0];
+                            value = action[1];
+                            break;
                         }
                     }
-
-                    max++;
-                    // 如果没有找到匹配项,提前退出循环
-                    if (!found) {
-                        break;
+                    f = "";
+                    if(key != null && value != null){
+                        /*数据回写*/
+                        write(key,value.replaceAll("\\(","").replaceAll("\\)",""),tec);
                     }
-                } while (f.contains("switchCase") && max < 20);
+                } catch (Exception e) {
+                    f = f.replace(f, "解析错误");
+                }
             }
+
             if (f.contains("avg4segment")) {
                 Matcher m = RegexUtils.matcher(FC_REG + "(avg4segment)\\(([^)]+)\\)", f);
                 while (m.find()) {
@@ -6051,10 +6014,10 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         if (pa.size() == 3) {
             String s = pa.get(2);;
             //
-            if(pa.get(2).contains("(")){
+            if(pa.get(2).contains("(") && pa.get(2).contains(",") && pa.get(2).split(",").length == 3){
                 pa.set(2,"-10086");
             }
-            String string = pa.get(0) + "?" + pa.get(1) + ":" + pa.get(2);
+            String string = pa.get(0) + "?" + pa.get(1) + ":(" + pa.get(2) + ")";
             Expression parse = Expression.parse(string);
             Object data = parse.calculate(currentMap);
             //递归计算