Bläddra i källkod

Merge remote-tracking branch 'origin/master'

liuyc 2 år sedan
förälder
incheckning
ee136180bc

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

@@ -22,6 +22,7 @@ import lombok.AllArgsConstructor;
 import javax.validation.Valid;
 import javax.validation.Valid;
 
 
 import org.springblade.archive.service.IArchiveAutoPdfService;
 import org.springblade.archive.service.IArchiveAutoPdfService;
+import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.api.R;
@@ -208,5 +209,35 @@ public class ArchivesAutoController extends BladeController {
 		return R.data("");
 		return R.data("");
 	}
 	}
 
 
+	/**
+	 * 锁定
+	 */
+	@PostMapping("/lock")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "锁定", notes = "传入ids")
+	public R lock(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+
+		List<ArchivesAuto> archivesAutos = archivesAutoService.listByIds(Func.toLongList(ids));
+		for (ArchivesAuto ar  :archivesAutos) {
+			ar.setIsLock(1);
+		}
+
+		return R.status(archivesAutoService.updateBatchById(archivesAutos));
+	}
+
+	/**
+	 * 解锁
+	 */
+	@PostMapping("/unlock")
+	@ApiOperationSupport(order = 11)
+	@ApiOperation(value = "解锁", notes = "传入ids")
+	public R unlock(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		List<ArchivesAuto> archivesAutos = archivesAutoService.listByIds(Func.toLongList(ids));
+		for (ArchivesAuto ar  :archivesAutos) {
+			ar.setIsLock(0);
+		}
+		return R.status(archivesAutoService.updateBatchById(archivesAutos));
+	}
+
 	
 	
 }
 }

+ 24 - 2
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveAutoPdfServiceImpl.java

@@ -1,6 +1,7 @@
 package org.springblade.archive.service.impl;
 package org.springblade.archive.service.impl;
 
 
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.itextpdf.text.Element;
 import com.itextpdf.text.Element;
 import com.itextpdf.text.pdf.*;
 import com.itextpdf.text.pdf.*;
@@ -16,6 +17,7 @@ import org.springblade.archive.service.IArchiveProjectConfigService;
 import org.springblade.archive.utils.FileUtils;
 import org.springblade.archive.utils.FileUtils;
 import org.springblade.archive.utils.FormulaUtil;
 import org.springblade.archive.utils.FormulaUtil;
 import org.springblade.business.entity.ArchiveFile;
 import org.springblade.business.entity.ArchiveFile;
+import org.springblade.business.feign.ArchiveFileClient;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.common.vo.DataVO;
 import org.springblade.common.vo.DataVO;
@@ -47,6 +49,8 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
 
 
     private final IArchiveFormulaConfigService archiveFormulaConfigService;
     private final IArchiveFormulaConfigService archiveFormulaConfigService;
 
 
+    private ArchiveFileClient archiveFileClient;
+
     public static final  String[] ARCHIVE_NUMBER = new String[]{"r_Archives_front","r_Archives_catalog","r_Archives_spare","r_Archives_back"};
     public static final  String[] ARCHIVE_NUMBER = new String[]{"r_Archives_front","r_Archives_catalog","r_Archives_spare","r_Archives_back"};
 
 
     public static final Map<String, String> URL_MAP = new HashMap<>();
     public static final Map<String, String> URL_MAP = new HashMap<>();
@@ -227,7 +231,7 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
         frontUrls.addAll(backUrls);
         frontUrls.addAll(backUrls);
 
 
         //统计文件大小
         //统计文件大小
-        flushFileSize(archivesAuto,archiveFileList,frontUrls);
+        RefreshFileSize(archivesAuto,archiveFileList,frontUrls);
 
 
         String joinedUrls = String.join(", ", frontUrls);
         String joinedUrls = String.join(", ", frontUrls);
         archivesAuto.setOutUrl(joinedUrls);
         archivesAuto.setOutUrl(joinedUrls);
@@ -672,7 +676,7 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
      * @param datas
      * @param datas
      * @param frontUrls
      * @param frontUrls
      */
      */
-    public void flushFileSize(ArchivesAuto archive,List<ArchiveFile> datas,List<String> frontUrls){
+    public void RefreshFileSize(ArchivesAuto archive,List<ArchiveFile> datas,List<String> frontUrls){
 
 
         List<String> fileUrls = new ArrayList<>();
         List<String> fileUrls = new ArrayList<>();
         for (ArchiveFile file: datas) {
         for (ArchiveFile file: datas) {
@@ -698,4 +702,22 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
         }
         }
     }
     }
 
 
+    /**
+     * 刷新档号
+     * @param archive
+     * @param fileNumber
+     */
+    public void RefreshFileNumber(ArchivesAuto archive,String fileNumber) {
+        Long projectId = archive.getProjectId();
+        archive.setFileNumber(fileNumber);
+
+        List<ArchiveFile> archiveFiles = archiveFileClient.listWrappers(Wrappers.<ArchiveFile>lambdaQuery()
+                .eq(ArchiveFile::getArchiveId, archive.getId())
+                .eq(ArchiveFile::getIsArchive, 0)
+                .eq(ArchiveFile::getIsDeleted,0)
+                .orderByAsc(ArchiveFile::getSort));
+
+        buildArchiveFrontPdfs(projectId,archive,archiveFiles);
+    }
+
 }
 }

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

@@ -19,6 +19,7 @@ package org.springblade.archive.service.impl;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
@@ -743,5 +744,19 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 
 
 	}
 	}
 
 
+	/**
+	 * 查询案卷,排序
+	 * @param ids
+	 * @return
+	 */
+	public List<ArchivesAuto> findArchivesAutosByIds(List<Long> ids) {
+		QueryWrapper<ArchivesAuto> queryWrapper = new QueryWrapper<>();
+		queryWrapper.in("id", ids)
+				.orderByDesc("tree_sort")
+				.orderByAsc("auto_file_sort");
+
+		return this.list(queryWrapper);
+	}
+
 
 
 }
 }

+ 66 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/utils/ArchiveTreeUtil.java

@@ -0,0 +1,66 @@
+package org.springblade.archive.utils;
+
+import com.spire.ms.System.Collections.ArrayList;
+import org.apache.commons.lang.StringUtils;
+import org.springblade.common.utils.ForestNodeMergerEx;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.manager.entity.ArchiveTree;
+import org.springblade.manager.entity.ArchiveTreeContract;
+import org.springblade.manager.vo.ArchiveTreeContractVO2;
+import org.springblade.manager.vo.ArchiveTreeVO2;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+public class ArchiveTreeUtil {
+
+    /**
+     * 得到分组,
+     * @param arList
+     * @param subTreeList 建设单位,施工单位各个合同段,监理单位各个合同段,电子档案的
+     * @param subGroupedList
+     */
+    public static void  getGroupedList(List<ArchiveTreeContract> arList,
+                                       List<ArchiveTreeContractVO2> subTreeList,List<List<ArchiveTreeContract>>  subGroupedList) {
+        List<ArchiveTreeContractVO2> voList = new ArrayList();
+        Map<Long,ArchiveTreeContract> map = new LinkedHashMap<>();
+
+
+        for (ArchiveTreeContract archiveTreeContract: arList) {
+            ArchiveTreeContractVO2 archiveTreeContractVO2 =new ArchiveTreeContractVO2(archiveTreeContract);
+            voList.add(archiveTreeContractVO2);
+            map.put(archiveTreeContract.getId(),archiveTreeContract);
+        }
+
+        List<ArchiveTreeContractVO2> trees = ForestNodeMergerEx.merge(voList);
+        if (trees == null ||  trees.size() == 0) {
+            return;
+        }
+        ArchiveTreeContractVO2 tree = trees.get(0);
+
+        for (ArchiveTreeContractVO2 subTree: tree.getChildren()) {
+            if (StringUtils.isEmpty(subTree.getTreeCode())) {
+                //同步
+                subTreeList.add(subTree);
+
+            }else {
+                for (ArchiveTreeContractVO2 contractNode : subTree.getChildren()){
+                    subTreeList.add(contractNode);
+                }
+            }
+        }
+
+        for (ArchiveTreeContractVO2 subTree:subTreeList) {
+            List<ArchiveTreeContractVO2> tmpList = new ArrayList();
+            List<ArchiveTreeContract> groupList = new ArrayList();
+            ForestNodeMergerEx.getTreeList(subTree,tmpList);
+            for (ArchiveTreeContractVO2 vo2 :tmpList) {
+                ArchiveTreeContract ar = map.get(vo2.getId());
+                groupList.add(ar);
+            }
+            subGroupedList.add(groupList);
+        }
+    }
+
+}

+ 27 - 3
blade-service/blade-business/src/main/java/org/springblade/business/controller/MetadataController.java

@@ -52,7 +52,11 @@ public class MetadataController extends BladeController {
     @ApiOperationSupport(order = 3)
     @ApiOperationSupport(order = 3)
     @ApiOperation(value = "逻辑删除", notes = "传入ids")
     @ApiOperation(value = "逻辑删除", notes = "传入ids")
     public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
     public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        return R.status(iMetadataClassificationService.deleteLogic(Func.toLongList(ids)));
+        boolean b = iMetadataClassificationService.deleteLogic(Func.toLongList(ids));
+        if(b){
+            return R.status(iMetadataClassificationService.deleteTableField(Func.toLongList(ids).get(0)));
+        }
+        return R.status(false);
     }
     }
 
 
     /**
     /**
@@ -64,12 +68,32 @@ public class MetadataController extends BladeController {
     public R allocation(@ApiParam(value = "主键集合", required = true) @RequestParam String ids,@RequestParam String type) {
     public R allocation(@ApiParam(value = "主键集合", required = true) @RequestParam String ids,@RequestParam String type) {
         return R.status(iMetadataClassificationService.updateMetadataBytype(Func.toLongList(ids),type));
         return R.status(iMetadataClassificationService.updateMetadataBytype(Func.toLongList(ids),type));
     }
     }
-
+    /**
+     * 取消捕获
+     */
+    @PostMapping("/cancelAllocation")
+    @ApiOperationSupport(order = 5)
+    @ApiOperation(value = "取消捕获", notes = "传入ids")
+    public R cancelAllocation(@ApiParam(value = "主键集合", required = true) @RequestParam String ids,@RequestParam String type) {
+        MetadataClassification byId = iMetadataClassificationService.getById(Func.toLongList(ids).get(0));
+        String[] split = byId.getFileStorageType().split(",");
+        StringBuffer str = new StringBuffer();
+        for(String s :split){
+            if(s.equals(type)){
+                continue;
+            }
+            str.append(s+",");
+        }
+        String substring = str.toString().substring(0, str.lastIndexOf(","));
+        byId.setFileStorageType(substring);
+        iMetadataClassificationService.updateById(byId);
+        return R.status(iMetadataClassificationService.updateById(byId));
+    }
     /**
     /**
      * 查看没有设置当前分类的元数据容器
      * 查看没有设置当前分类的元数据容器
      */
      */
     @GetMapping("/allocation/detail")
     @GetMapping("/allocation/detail")
-    @ApiOperationSupport(order = 5)
+    @ApiOperationSupport(order = 6)
     @ApiOperation(value = "元数据容器分类详情", notes = "传入分类类型")
     @ApiOperation(value = "元数据容器分类详情", notes = "传入分类类型")
     public R<IPage<MetadataClassification>> allocationDetail(@ApiIgnore @RequestParam String fileStorage, Query query) {
     public R<IPage<MetadataClassification>> allocationDetail(@ApiIgnore @RequestParam String fileStorage, Query query) {
         QueryWrapper<MetadataClassification> metadata = new QueryWrapper<>();
         QueryWrapper<MetadataClassification> metadata = new QueryWrapper<>();

+ 3 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/MetadataClassificationMapper.java

@@ -17,4 +17,7 @@ public interface MetadataClassificationMapper extends BaseMapper<MetadataClassif
     MetadataClassification selectMetadaOne(@Param("containerName") String containerName,@Param("code") String code,@Param("fieldKey") String fieldKey,@Param("id") Long id);
     MetadataClassification selectMetadaOne(@Param("containerName") String containerName,@Param("code") String code,@Param("fieldKey") String fieldKey,@Param("id") Long id);
 
 
     void updateMetadataBytype(@Param("ids") List<Long> ids, @Param("type") String type);
     void updateMetadataBytype(@Param("ids") List<Long> ids, @Param("type") String type);
+
+
+    void deleteTableField(@Param("containerInitTabName") String containerInitTabName,@Param("fieldKey") String fieldKey);
 }
 }

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/mapper/MetadataClassificationMapper.xml

@@ -38,7 +38,7 @@
 
 
 
 
     <update id="deleteTableField">
     <update id="deleteTableField">
-        alter table ${tabName} drop column ${fieldName}
+        alter table ${containerInitTabName} drop column ${fieldKey}
     </update>
     </update>
 
 
     <update id="updateData">
     <update id="updateData">

+ 2 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/IMetadataClassificationService.java

@@ -14,4 +14,6 @@ public interface IMetadataClassificationService extends BaseService<MetadataClas
     boolean classificationSubmit(MetadataClassification obj);
     boolean classificationSubmit(MetadataClassification obj);
 
 
     boolean updateMetadataBytype(List<Long> ids,String type);
     boolean updateMetadataBytype(List<Long> ids,String type);
+
+    boolean deleteTableField(Long ids);
 }
 }

+ 13 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/MetadataClassificationServiceImpl.java

@@ -65,7 +65,7 @@ public class MetadataClassificationServiceImpl
             }else{
             }else{
                 MetadataClassification metadataClassification = baseMapper.selectMetadaOne(obj.getContainerName(), obj.getCode(),
                 MetadataClassification metadataClassification = baseMapper.selectMetadaOne(obj.getContainerName(), obj.getCode(),
                         "file_key_" + obj.getCode().toLowerCase(),obj.getId());
                         "file_key_" + obj.getCode().toLowerCase(),obj.getId());
-                if(metadataClassification != null){
+                if(metadataClassification == null){
                     return false;
                     return false;
                 }
                 }
                 String filetype = "varchar";
                 String filetype = "varchar";
@@ -98,4 +98,16 @@ public class MetadataClassificationServiceImpl
         }
         }
         return true;
         return true;
     }
     }
+
+    @Override
+    public boolean deleteTableField(Long ids) {
+        try {
+            MetadataClassification metadataClassification = baseMapper.selectById(ids);
+            baseMapper.deleteTableField(metadataClassification.getContainerInitTabName(),metadataClassification.getFieldKey());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+        return true;
+    }
 }
 }

+ 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){
 	public static Object dateAfter(Object date ,Object n){
 		if(StringUtils.isNotEmpty(date)&&StringUtils.isNumber(n)){
 		if(StringUtils.isNotEmpty(date)&&StringUtils.isNumber(n)){
+			if(date instanceof  List){
+				date=((List)date).get(0);
+			}
 			DateTime dt = new DateTime(date.toString());
 			DateTime dt = new DateTime(date.toString());
 			dt.offset(DateField.HOUR_OF_DAY,24*Integer.parseInt(n.toString()));
 			dt.offset(DateField.HOUR_OF_DAY,24*Integer.parseInt(n.toString()));
 			return dt.toString(DatePattern.UTC_PATTERN);
 			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"))){
 			if(list.stream().filter(CustomFunction::containsZH).anyMatch(e->e.toString().contains("\n"))){
 				AtomicInteger index= new AtomicInteger(1);
 				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{
 			}else{
 				result=list.stream().distinct().collect(Collectors.toList());
 				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){
 	public  static Integer getScale(Object ...number){
 		int max=0;
 		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(){
     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){
         for(FormData fd:this.formDataList){
             if(fd.verify()){
             if(fd.verify()){
                 Formula formula =fd.getFormula();
                 Formula formula =fd.getFormula();
@@ -712,7 +717,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                 }
                                 }
                                 if(local.size()>0){
                                 if(local.size()>0){
                                     List<Object> values = slice(local,this.constantMap,f);
                                     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{
                             }else{
                                 Map<String,Object> em = (Map<String, Object>) currentMap.computeIfAbsent(E,(k)-> new HashMap<>());
                                 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){
 public  List<ElementData> setScale(Integer scale,List<ElementData> data){
     if(scale==null){
     if(scale==null){
-        scale=2;
+        scale=StringUtils.getScale(data.stream().map(ElementData::getValue).filter(StringUtils::isDouble).collect(Collectors.toList()));
     }
     }
     Integer finalScale = scale;
     Integer finalScale = scale;
     return data.stream().peek(e->{if(StringUtils.isDouble(e.getValue())){e.setValue(StringUtils.number2String(e.getValue(),finalScale));}}).collect(Collectors.toList());
     return data.stream().peek(e->{if(StringUtils.isDouble(e.getValue())){e.setValue(StringUtils.number2String(e.getValue(),finalScale));}}).collect(Collectors.toList());