Эх сурвалжийг харах

Merge branch 'master' of http://47.110.251.215:3000/java_org/bladex

huangtf 2 жил өмнө
parent
commit
00a804d97f

+ 2 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/ElementData.java

@@ -4,6 +4,7 @@ package org.springblade.manager.dto;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringPool;
 
+import java.io.Serializable;
 import java.util.Objects;
 
 
@@ -13,7 +14,7 @@ import java.util.Objects;
  * @description TODO
  */
 
-public class ElementData {
+public class ElementData implements Serializable {
     /**
      *  表的自然顺序,同一张表复制N次,index代表该数据在第几张
      */

+ 11 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormData.java

@@ -25,6 +25,9 @@ public class FormData {
      * 步长;跟别的元素计算时候,用于一对多
      */
     private Integer step=1;
+    /**
+     * 偏移量,🔢批量计算的时候起始点位置*/
+    private Integer offset=0;
     /**
      * 元素名称
      */
@@ -51,6 +54,8 @@ public class FormData {
      * 用于输出
      */
     private List<ElementData> values;
+    /**当需要偏移处理的时候需要备份原数据,等计算完成还原回去*/
+    private List<ElementData> backup;
     private Map<String,ElementData> vMap=new HashMap<>();
 
     /**
@@ -101,6 +106,12 @@ public class FormData {
     }
 
 
+    public void restore(){
+        this.offset=0;
+        this.values=new ArrayList<>(this.getBackup());
+    }
+
+
     public FormData(String code, Integer step, List<ElementData> values, Formula formula,String coords) {
         this.code = code;
         this.step = step;

+ 2 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java

@@ -335,6 +335,8 @@ public class ArchivesAutoController extends BladeController {
 		archivesAutoService.splitArchvies(projectId);
 		//项目自动组卷入口
 		archivesAutoService.archiveAutoMethod(projectId);
+		//刷新项目档号
+		archivesAutoService.refreshFileNumberNoSlipt(projectId);
 
 		//设置自动组卷结束
 		projectClient.updateIsArchivesAutoById(projectId,0);

+ 2 - 2
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml

@@ -255,14 +255,14 @@
         WHERE uaa.project_id =#{projectId} and uaa.is_deleted = #{type}
     </select>
     <select id="getAllArchiveAgeByContractType" resultType="java.util.Map">
-        SELECT CASE uaa.storage_time WHEN '10' THEN '10年' WHEN '30' THEN '30年' ELSE '永久' END as name,COUNT(uaa.storage_time) as value
+        SELECT CASE uaa.storage_time WHEN '1' THEN '10年' WHEN '2' THEN '30年' ELSE '永久' END as name,COUNT(uaa.storage_time) as value
         FROM m_archive_tree_contract matc left join u_archives_auto uaa on uaa.node_id =matc.id
         WHERE matc.project_id =#{projectId} and uaa.is_deleted =0
         GROUP BY uaa.storage_time
     </select>
 <!--    档案鉴定,档案查询-->
     <select id="pageByAuthenticate" resultType="org.springblade.archive.vo.ArchivesAutoVO">
-        select uaa.*
+        select uaa.id,uaa.file_number,uaa.name,uaa.file_size,CASE uaa.storage_time WHEN '1' THEN '10年' WHEN '2' THEN '30年' ELSE '永久' END as storageTimeValue
         from(
                 select id from m_archive_tree_contract
                 where project_id = #{vo.projectId} and ancestors like concat('%', #{vo.nodeId}, '%') or id = #{vo.nodeId}

+ 2 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchivesAutoService.java

@@ -72,4 +72,6 @@ public interface IArchivesAutoService extends BaseService<ArchivesAuto> {
 
 
 	void refreshFileNumberNoSlipt(List<ArchiveTreeContract> archiveTreeContracts);
+
+	void refreshFileNumberNoSlipt(Long projectId);
 }

+ 1 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -116,7 +116,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		if (archivesAutos != null && archivesAutos.size() >0) {
 			archivesAutos.stream().forEach(aa -> {
 				if (StringUtils.isNotBlank(aa.getStorageTime())) {
-					aa.setStorageTimeValue("9999".equals(aa.getStorageTime()) ? "永久" : ("30".equals(aa.getStorageTime()) ? "30年" : "10年"));
+					aa.setStorageTimeValue("3".equals(aa.getStorageTime()) ? "永久" : ("2".equals(aa.getStorageTime()) ? "30年" : "10年"));
 				}
 				if (StringUtils.isNotBlank(aa.getSecretLevel())) {
 					aa.setSecretLevelValue("1".equals(aa.getSecretLevel()) ? "机密" : ("2".equals(aa.getSecretLevel()) ? "绝密" : "秘密"));

+ 28 - 25
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -5,6 +5,7 @@ import cn.hutool.core.date.*;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.NumberUtil;
 import com.alibaba.fastjson.JSON;
+import com.jfireel.expression.Expression;
 import com.jfireel.expression.node.CalculateNode;
 import com.jfireel.expression.node.impl.OperatorResultNode;
 import com.jfireel.expression.node.impl.StaticObjectMethodNode;
@@ -15,6 +16,7 @@ import org.jsoup.Jsoup;
 import org.springblade.core.tool.utils.*;
 import org.springblade.manager.formula.ElementBlock;
 import org.springblade.manager.formula.ItemBlock;
+import org.springblade.manager.formula.KeyMapper;
 
 import java.io.FileInputStream;
 import java.math.BigDecimal;
@@ -25,6 +27,8 @@ import java.util.concurrent.atomic.AtomicInteger;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
 import static java.math.BigDecimal.ROUND_CEILING;
 import static java.math.BigDecimal.ROUND_HALF_UP;
 
@@ -289,6 +293,29 @@ public class CustomFunction {
 		return "";
 	}
 
+	/**
+	 * @Description 分段求平均值
+	 * @Param [data 原数据, n 分段数]
+	 * @return java.util.List<java.lang.Object>
+	 * @Author yangyj
+	 * @Date 2023.04.28 10:13
+	 **/
+	public static List<Object> avg4segment(List<Object> data, int n) {
+		if (data.isEmpty()) {
+			return null;
+		}
+		if (n <= 1) {
+			return Collections.singletonList(avg(data));
+		}
+		Map<Integer, List<Object>> group = IntStream.range(0, data.size())
+				.boxed()
+				.collect(Collectors.groupingBy(i -> i / n, LinkedHashMap::new, Collectors.mapping(data::get, Collectors.toList())));
+		return group.values().stream().map(CustomFunction::avg).collect(Collectors.toList());
+	}
+
+
+
+
 	public static Object max(List<Object> list) {
 		if(ListUtils.isNotEmpty(list)){
 			OptionalDouble op =list.stream().filter(StringUtils::isNumber).map(StringUtils::handleNull).mapToDouble(Double::parseDouble).max();
@@ -2576,31 +2603,7 @@ public class CustomFunction {
 		return "";
 	}
 
-//	public static void main(String[] args) {
-//		ElementBlock eb =new ElementBlock();
-//		eb.setCode("m_xxxx_:key_x");
-//		eb.setPass(5);
-//		eb.setTotal(5);
-//		eb.setSort(16);
-//		List<ItemBlock> list = new ArrayList<>();
-//		eb.setList(list);
-//		ItemBlock ib = new ItemBlock();
-//		ib.setDev("±5");
-//		ib.setPkeyId(123456789L);
-//		ib.setS("12/25/36");
-//		ib.setD("12,12/25,23/36,35");
-//		list.add(ib);
-//		ItemBlock ib2 = new ItemBlock();
-//		ib2.setDev("±5");
-//		ib2.setPkeyId(123456789L);
-//		ib2.setS("12");
-//		ib2.setD("12,12");
-//		list.add(ib2);
-//		String json=JSON.toJSONString(eb);
-//		System.out.println(json);
-//		ElementBlock ebj= JSON.parseObject(json,ElementBlock.class);
-//		System.out.println();
-//	}
+
 
 
 }

+ 27 - 22
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -12,9 +12,7 @@ import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.entity.Formula;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
+import java.io.*;
 import java.math.BigDecimal;
 import java.nio.charset.StandardCharsets;
 import java.util.*;
@@ -351,33 +349,40 @@ public class FormulaUtils {
 
 
     private static boolean isContainKeywords(String s) {
-        List<String> keywords = Arrays.asList("或", "每", "个");
+        List<String> keywords = Arrays.asList("或", "每", "个","附录");
         return keywords.stream().anyMatch(s::contains);
     }
 
-    public static byte[] compress(String data) throws IOException {
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        DeflaterOutputStream dos = new DeflaterOutputStream(bos, new Deflater(Deflater.BEST_COMPRESSION));
-        dos.write(data.getBytes(StandardCharsets.UTF_8));
-        dos.close();
-        return bos.toByteArray();
-    }
 
-    public static String decompress(byte[] data) throws IOException {
-        ByteArrayInputStream bis = new ByteArrayInputStream(data);
-        InflaterInputStream iis = new InflaterInputStream(bis, new Inflater());
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        byte[] buffer = new byte[1024];
-        int len;
-        while ((len = iis.read(buffer)) > 0) {
-            bos.write(buffer, 0, len);
+
+    /**
+     * @Description 深度拷贝
+     * @Param [originalList]
+     * @return java.util.List<T>
+     * @Author yangyj
+     * @Date 2023.04.28 14:18
+     **/
+    public static <T extends Serializable> List<T> copyList(List<T> originalList) {
+        try {
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            ObjectOutputStream oos = new ObjectOutputStream(baos);
+            oos.writeObject(originalList);
+            oos.close();
+            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+            ObjectInputStream ois = new ObjectInputStream(bais);
+            @SuppressWarnings("unchecked")
+            List<T> copiedList = (List<T>) ois.readObject();
+            ois.close();
+            return copiedList;
+        } catch (Exception e) {
+            e.printStackTrace();
         }
-        iis.close();
-        bos.close();
-        return new String(bos.toByteArray(), StandardCharsets.UTF_8);
+        return null;
     }
 
 
+
+
 //    public static void main(String[] args) {
 //        List<String> list =Arrays.asList(
 //                ""

+ 29 - 14
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -41,6 +41,7 @@ import javax.validation.constraints.NotNull;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -724,14 +725,22 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                             }
                             if(fd.getCoordsList().size()>1&&f.split("[/+\\-*]").length>1){
                                 LinkedHashMap<String,FormData> fdMap =new LinkedHashMap<>();
-                                Optional<FormData> tto= ele.stream().max(Comparator.comparingInt(fe->fe.getValues().size()));
-                                Optional<FormData> tts= ele.stream().min(Comparator.comparingInt(fe->fe.getValues().size()));
-                                if(tto.isPresent()&&tts.isPresent()){
-                                    if(tto.get().getValues().size()!=tts.get().getValues().size()){
-                                        int baseLength=tto.get().getValues().size();
-                                        ele.forEach(e->{
-                                            e.setStep(baseLength/e.getValues().size());
-                                        });
+//                                Optional<FormData> tto= ele.stream().max(Comparator.comparingInt(fe->fe.getValues().size()));
+//                                Optional<FormData> tts= ele.stream().min(Comparator.comparingInt(fe->fe.getValues().size()));
+//                                if(tto.isPresent()&&tts.isPresent()){
+//                                    if(tto.get().getValues().size()!=tts.get().getValues().size()){
+//                                        int baseLength=tto.get().getValues().size();
+//                                        ele.forEach(e->{
+//                                            e.setStep(baseLength/e.getValues().size());
+//                                        });
+//                                    }
+//                                }
+                                FormData maxFormData = Collections.max(ele, Comparator.comparingInt((FormData ef)->ef.getValues().size()));
+                                FormData minFormData = Collections.min(ele, Comparator.comparingInt((FormData ef)->ef.getValues().size()));
+                                if (maxFormData.getValues().size() != minFormData.getValues().size()) {
+                                    int baseLength = maxFormData.getValues().size();
+                                    for (FormData formData : ele) {
+                                        formData.setStep(baseLength / formData.getValues().size());
                                     }
                                 }
                                 ele.forEach(e->{
@@ -742,12 +751,17 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                 while (cda.hasNext()){
                                     LinkedHashMap<String,ElementData> tip= cda.next();
                                     Map<String, Object> variable = new HashMap<>(tec.constantMap);
+                                    @SuppressWarnings("unchecked")
                                     Map<String,Object> em= (Map<String, Object>) variable.computeIfAbsent(E, k->new HashMap<>());
                                     int index= new ArrayList<>(tip.values()).get(0).getIndex();
                                     for(Map.Entry<String,ElementData> se:tip.entrySet()){
                                         Object value=se.getValue().getValue();
                                         if(CustomFunction.isNumber(value)){
-                                            em.put(se.getKey(),StringUtils.obj2Double(value));
+                                            if(StringUtils.isDouble(value)){
+                                                em.put(se.getKey(), new BigDecimal(value.toString()));
+                                            }else{
+                                                em.put(se.getKey(),StringUtils.handleObj2Integer(value));
+                                            }
                                         }else{
                                             em.put(se.getKey(),value);
                                         }
@@ -757,13 +771,10 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                 }
                                 if(local.size()>0){
                                     List<Object> values = slice(local,tec.constantMap,f);
-                                    if(fd.getTableName().equals(checkTable)){
-                                        FormulaUtils.write(fd,values,false);
-                                    }else{
-                                        FormulaUtils.write(fd,values,true);
-                                    }
+                                    FormulaUtils.write(fd,values, !fd.getTableName().equals(checkTable));
                                 }
                             }else{
+                                @SuppressWarnings("unchecked")
                                 Map<String,Object> em = (Map<String, Object>) currentMap.computeIfAbsent(E,(k)-> new HashMap<>());
                                 ele.forEach(e->{
                                     em.put(e.getCode(),e.getValues().stream().map(ElementData::getValue).collect(Collectors.toList()));
@@ -771,6 +782,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                 Object data =Expression.parse(formula.getFormula()).calculate(currentMap);
                                 write(fd,data);
                             }
+                            /*重置*/
+                            ele.stream().filter(s->s.getOffset()>0).forEach(FormData::restore);
                         }else{
                             Object data =Expression.parse(formula.getFormula()).calculate(currentMap);
                             write(fd,data);
@@ -784,6 +797,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 fd.setUpdate(1);
             }
         }
+
     }
     /**附表处理*/
     public void forSubTb(){
@@ -834,6 +848,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     for (WbsTreeContract data : subTabList) {
                         /*自动挂载附表情况下,装配TableInfo数据*/
                         R bussDataInfo = this.getBussDataInfo(data.getPKeyId(), 1);
+                        @SuppressWarnings("unchecked")
                         Map<String, Object>  data1 = (Map<String, Object>) bussDataInfo.getData();
                         data1.put("pkeyId",data.getPKeyId());
                         dataArray.add(data1);