소스 검색

Merge remote-tracking branch 'origin/master'

liuyc 2 년 전
부모
커밋
942a035640
18개의 변경된 파일226개의 추가작업 그리고 82개의 파일을 삭제
  1. 1 1
      blade-common/src/main/java/org/springblade/common/utils/AsyncConfigurer.java
  2. 3 2
      blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java
  3. 18 0
      blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchivesAutoVO.java
  4. 2 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/TaskBatch.java
  5. 23 4
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java
  6. 2 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchivesAutoService.java
  7. 65 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  8. 0 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java
  9. 1 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/TaskBatchMapper.xml
  10. 2 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/ITaskBatchService.java
  11. 1 2
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java
  12. 75 9
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  13. 12 3
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVisaServiceImpl.java
  14. 11 5
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  15. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml
  16. 9 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  17. 0 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java
  18. 0 46
      blade-service/blade-manager/src/main/java/org/springblade/manager/utils/AsyncConfigurer.java

+ 1 - 1
blade-common/src/main/java/org/springblade/common/utils/AsyncConfigurer.java

@@ -25,7 +25,7 @@ public class AsyncConfigurer {
     @Bean("taskExecutor1")
     public ThreadPoolExecutor getAsyncExecutor() {
         return new ThreadPoolMonitor(cpuNum
-                , 3
+                , 6
                 , 60
                 , TimeUnit.SECONDS
                 , new LinkedBlockingQueue<>(2000)

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

@@ -25,6 +25,7 @@ import org.springblade.core.oss.OssTemplate;
 import org.springblade.core.oss.enums.OssEnum;
 import org.springblade.core.oss.enums.OssStatusEnum;
 import org.springblade.core.oss.props.OssProperties;
+import org.springblade.core.oss.rule.BladeOssRule;
 import org.springblade.core.oss.rule.OssRule;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.utils.*;
@@ -98,9 +99,9 @@ public class OssBuilder {
                          * @create 2023-03-31
                          * @deprecated 重写BladeOssRule-》BladeOssRuleRe 修改文件名UUID -》原始名
                          */
-                        ossRule = new BladeOssRuleRe(Boolean.TRUE);
+                        ossRule = new BladeOssRule(Boolean.TRUE);
                     } else {
-                        ossRule = new BladeOssRuleRe(Boolean.FALSE);
+                        ossRule = new BladeOssRule(Boolean.FALSE);
                     }
                     if (oss.getCategory() == OssEnum.MINIO.getCategory()) {
                         template = MinioOssBuilder.template(oss, ossRule);

+ 18 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchivesAutoVO.java

@@ -47,6 +47,24 @@ public class ArchivesAutoVO extends ArchivesAuto {
 	@ApiModelProperty("当前页显示条数")
 	private Integer size;
 
+	/**
+	 * 搜索类型
+	 */
+	@ApiModelProperty("搜索类型1案卷2文件")
+	private Integer searchType;
+
+	/**
+	 * 年
+	 */
+	@ApiModelProperty("年")
+	private String year;
+
+	/**
+	 * 年
+	 */
+	@ApiModelProperty("月")
+	private String month;
+
 	/**
 	 * 输入框查询条件
 	 */

+ 2 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/TaskBatch.java

@@ -47,6 +47,8 @@ public class TaskBatch extends BaseEntity {
 
     private String jsonData;
 
+    private String nickName;
+
     public TaskBatch(String taskParallelId, String jsonData){
         this.setId(SnowFlakeUtil.getId());
         this.taskParallelId = taskParallelId;

+ 23 - 4
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java

@@ -16,9 +16,7 @@
  */
 package org.springblade.archive.controller;
 
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.*;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
 import javax.validation.Valid;
@@ -45,7 +43,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 @RestController
 @AllArgsConstructor
 @RequestMapping("/archivesauto")
-@Api(value = "", tags = "接口")
+@Api(value = "", tags = "档案接口")
 public class ArchivesAutoController extends BladeController {
 
 	private final IArchivesAutoService archivesAutoService;
@@ -84,6 +82,27 @@ public class ArchivesAutoController extends BladeController {
 		return R.data(pages);
 	}
 
+	/**
+	 * 档案利用-档案查询
+	 */
+	@GetMapping("/pageByArchivesAuto")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "档案利用-档案查询分页", notes = "传入archivesAuto")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "projectId", value = "项目id", required = true),
+			@ApiImplicitParam(name = "year", value = "年"),
+			@ApiImplicitParam(name = "month", value = "yue"),
+			@ApiImplicitParam(name = "storageTime", value = "保管期限"),
+			@ApiImplicitParam(name = "secretLevel", value = "保密级别"),
+			@ApiImplicitParam(name = "carrierType", value = "类别"),
+			@ApiImplicitParam(name = "queryValue", value = "输入框模糊搜索"),
+			@ApiImplicitParam(name = "searchType", value = "搜索类型1案卷2文件")
+	})
+	public R<IPage<ArchivesAuto>> pageByArchivesAuto(ArchivesAutoVO archivesAuto) {
+		IPage<ArchivesAuto> pages = archivesAutoService.pageByArchivesAuto(archivesAuto);
+		return R.data(pages);
+	}
+
 	/**
 	 * 新增 
 	 */

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

@@ -38,6 +38,8 @@ public interface IArchivesAutoService extends BaseService<ArchivesAuto> {
 	 */
 	IPage<ArchivesAutoVO> selectArchivesAutoPage(IPage<ArchivesAutoVO> page, ArchivesAutoVO archivesAuto);
 
+	IPage<ArchivesAuto> pageByArchivesAuto(ArchivesAutoVO archivesAuto);
+
 	IPage<ArchivesAutoVO> selectArchivesAutoFilePage(ArchivesAutoVO queryVo);
 
 	boolean updateArchivesAutoFileByNodeId(String ids, String nodeId,String nodeSort);

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

@@ -18,7 +18,9 @@ package org.springblade.archive.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
 import org.springblade.archive.entity.ArchivesAuto;
@@ -40,6 +42,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import java.time.LocalDateTime;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  *  服务实现类
@@ -62,6 +65,68 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		return page.setRecords(baseMapper.selectArchivesAutoPage(page, archivesAuto));
 	}
 
+	@Override
+	public IPage<ArchivesAuto> pageByArchivesAuto(ArchivesAutoVO vo) {
+		IPage<ArchivesAuto> page = new Page<>(vo.getCurrent(),vo.getSize());
+		LambdaQueryWrapper<ArchivesAuto> lqw = new LambdaQueryWrapper<>();
+		lqw.eq(ArchivesAuto::getProjectId,vo.getProjectId());
+		//过滤日期
+		if (StringUtils.isNotBlank(vo.getYear())){
+			if (StringUtils.isNotBlank(vo.getMonth())){
+				int day;
+				if (Arrays.asList("1,3,5,7,8,10,12".split(",")).contains(vo.getMonth())){
+					day = 31;
+				}else if (Arrays.asList("1,3,5,7,8,10,12".split(",")).contains(vo.getMonth())){
+					day = 30;
+				}else {
+					if (Integer.parseInt(vo.getYear()) % 4 == 0){
+						day = 29;
+					}else {
+						day = 28;
+					}
+				}
+				lqw.ge(ArchivesAuto::getStartDate,LocalDateTime.of(Integer.parseInt(vo.getYear()), Integer.parseInt(vo.getMonth()), 1, 0, 0, 0));
+				lqw.le(ArchivesAuto::getEndDate,LocalDateTime.of(Integer.parseInt(vo.getYear()), Integer.parseInt(vo.getMonth()), day, 0, 0, 0));
+			}else {
+				lqw.ge(ArchivesAuto::getStartDate,LocalDateTime.of(Integer.parseInt(vo.getYear()), 1, 1, 0, 0, 0));
+				lqw.ge(ArchivesAuto::getEndDate,LocalDateTime.of(Integer.parseInt(vo.getYear()), 12, 31, 0, 0, 0));
+			}
+		}else if (StringUtils.isNotBlank(vo.getMonth())){
+			throw new RuntimeException("请选择年");
+		}
+		lqw.eq(StringUtils.isNotBlank(vo.getStorageTime()),ArchivesAuto::getStorageTime,vo.getStorageTime())
+				.eq(StringUtils.isNotBlank(vo.getSecretLevel()),ArchivesAuto::getSecretLevel,vo.getSecretLevel())
+					.eq(StringUtils.isNotBlank(vo.getCarrierType()),ArchivesAuto::getCarrierType,vo.getCarrierType());
+		//按案卷搜索完成,判断是否按文件搜索
+		if (vo.getSearchType() == 1){
+			lqw.like(StringUtils.isNotBlank(vo.getQueryValue()),ArchivesAuto::getName,vo.getQueryValue());
+			this.page(page,lqw);
+			return page;
+		}else {
+			List<ArchivesAuto> list = this.list(lqw);
+			list = list.stream().filter(auto -> {
+				List<ArchiveFile> files = archiveFileClient.getArchiveFileByArchivesId(auto.getId() + "", "");
+				if (files != null && files.size() > 0){
+					files = files.stream().filter(file->file.getFileName().contains(vo.getQueryValue())).collect(Collectors.toList());
+				}
+				if (files != null && files.size() > 0){
+					return true;
+				}else {
+					return false;
+				}
+			}).collect(Collectors.toList());
+			if (list != null && list.size() > 0){
+				List<Long> ids = list.stream().map(l -> l.getId()).collect(Collectors.toList());
+				this.page(page,new LambdaQueryWrapper<ArchivesAuto>().in(ArchivesAuto::getId,ids));
+				return page;
+			}else {
+				return  null;
+			}
+
+		}
+
+	}
+
 	@Override
 	public IPage<ArchivesAutoVO> selectArchivesAutoFilePage(ArchivesAutoVO vo) {
 		Query query = new Query();

+ 0 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -313,7 +313,6 @@ public class TaskController extends BladeController {
                             String projectId = projectAndContractId.split(",")[0];
                             String contractId = projectAndContractId.split(",")[1];
                             Map<String, String> stringMap = iTaskService.getTaskCount(projectId, contractId, userId);
-
                             webSocket.sendMessageByUserId(AuthUtil.getUserId().toString(), JSON.toJSONString(stringMap));
                         }
                     }

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

@@ -14,6 +14,7 @@
         <result column="is_deleted" property="isDeleted"/>
         <result column="task_parallel_id" property="taskParallelId"/>
         <result column="json_data" property="jsonData"/>
+        <result column="nick_name" property="nickName"/>
     </resultMap>
 
     <delete id="deletedById">

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

@@ -19,6 +19,8 @@ package org.springblade.business.service;
 import org.springblade.business.entity.TaskBatch;
 import org.springblade.core.mp.base.BaseService;
 
+import java.util.List;
+
 /**
  *  服务类
  *

+ 1 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java

@@ -105,7 +105,7 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
             }
             if (tableList != null && tableList.size() > 0) {
                 //删除掉无法溯源的数据
-                tableList.removeIf(node -> node.getIsTypePrivatePid() == null || node.getIsTypePrivatePid() <= 0 || StringUtils.isEmpty(node.getIsTypePrivatePid().toString()));
+                tableList.removeIf(node -> node.getIsTypePrivatePid() == null || node.getIsTypePrivatePid() <= 0 || StringUtils.isEmpty(node.getIsTypePrivatePid().toString()) || node.getHtmlUrl()==null );
                 List<Long> privatePIdList = tableList.stream().map(WbsTreeContract::getIsTypePrivatePid).distinct().collect(Collectors.toList());
                 return JSONArray.parseArray(JSONObject.toJSONString(privatePIdList), String.class);
 
@@ -118,7 +118,6 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
                     return Func.toStrList(obj.getTableIds());
                 }
             }
-
         } else {
             //那么就可能是日志,检查是不是日志
             ContractLog log = this.contractLogService.getById(formDataId);

+ 75 - 9
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -1,5 +1,6 @@
 package org.springblade.business.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -38,10 +39,15 @@ import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.entity.ProjectInfo;
 import org.springblade.manager.feign.ContractClient;
 import org.springblade.manager.feign.ProjectClient;
+import org.springblade.system.user.cache.UserCache;
+import org.springblade.system.user.entity.User;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -96,6 +102,9 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
 
     private final JdbcTemplate jdbcTemplate;
 
+    @Autowired
+    StringRedisTemplate RedisTemplate;
+
     private final ITrialSelfInspectionRecordService iTrialSelfInspectionRecordService;
 
     // 线程池
@@ -425,19 +434,71 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                     .in(TaskParallel::getParallelProcessInstanceId, taskIds));
             //保存批次
         TaskBatch taskBatch = new TaskBatch(null, JSONObject.toJSONString(taskApprovalVOS));
-            taskBatch.setCreateUser(AuthUtil.getUserId());
+            taskBatch.setCreateUser(userId);
+            taskBatch.setNickName(nickName);
             taskBatch.setCreateTime(new Date());
 
             this.taskBatchService.save(taskBatch);
             String taskBatchId = taskBatch.getId().toString();
+
+            // 电签
+            Boolean istrue = true;
+            for (TaskApprovalVO taskApprovalVO : taskApprovalVOS) {
+                Boolean aBoolean = RedisTemplate.hasKey("sign-" + taskApprovalVO.getFormDataId());
+                if(aBoolean){
+                    istrue =false;
+                    break;
+                }
+            }
+
             // 添加到 线程中
-            CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> {
-                try {
-                    this.checkIsExsitTaskBatch(taskApprovalVOS, taskBatchId,userId,nickName);
-                } catch (FileNotFoundException e) {
-                    e.printStackTrace();
+            if(istrue){
+                CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> {
+                    try {
+                        this.checkIsExsitTaskBatch(taskApprovalVOS, taskBatchId,userId,nickName);
+                    } catch (FileNotFoundException e) {
+                        e.printStackTrace();
+                    }
+                }, executor);  
+            }
+    }
+
+
+    @Scheduled(cron = "0 */3 * * * ?")
+    public  void  SignInfo() {
+        //执行代码
+        logger.debug("扫描开始");
+        List<TaskBatch> maps = taskBatchService.getBaseMapper().selectList(Wrappers.<TaskBatch>lambdaQuery().eq(TaskBatch::getIsDeleted, 0));
+        if(maps!=null && maps.size()>=1){
+            for (TaskBatch dataInfo:maps){
+                String jsonData = dataInfo.getJsonData();
+                List<TaskApprovalVO> list=JSONArray.parseArray(jsonData,TaskApprovalVO.class);
+                String taskBatchId = dataInfo.getId().toString();
+                Long userId = dataInfo.getCreateUser();
+                String nickName = dataInfo.getNickName();
+
+                Boolean istrue = true;
+                for (TaskApprovalVO taskApprovalVO : list) {
+                    Boolean aBoolean = RedisTemplate.hasKey("sign-" + taskApprovalVO.getFormDataId());
+                    if(aBoolean){
+                        istrue =false;
+                        break;
+                    }
+                }
+
+                // 添加到 线程中
+                if(istrue){
+                    CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> {
+                        try {
+                            this.checkIsExsitTaskBatch(list, taskBatchId,userId,nickName);
+                        } catch (FileNotFoundException e) {
+                            e.printStackTrace();
+                        }
+                    }, executor);
+                    runAsync.join();
                 }
-            }, executor);
+            }
+        }
     }
 
     private void checkIsExsitTaskBatch(List<TaskApprovalVO> taskApprovalVOS, String batchId,Long userId,String nickName) throws FileNotFoundException {
@@ -448,8 +509,9 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             for (TaskApprovalVO taskApprovalVO : taskApprovalVOS) {
                 taskApprovalVO.setUserId(userId);
                 taskApprovalVO.setNickName(nickName);
-                String pdfUrlEVisa = this.completeApprovalTask(taskApprovalVO);
+                RedisTemplate.opsForValue().set("sign-"+taskApprovalVO.getFormDataId(),"1",300, TimeUnit.SECONDS);
 
+                String pdfUrlEVisa = this.completeApprovalTask(taskApprovalVO);
                 //TODO ============== 电签成功,修改试验状态,关联工程部位信息pdf(只有电签成功,才修改) liuYc 2023-03-16 ==============
                 if ("OK".equals(taskApprovalVO.getFlag()) && StringUtils.isNotEmpty(pdfUrlEVisa)) {
                     //已审批
@@ -460,8 +522,12 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                     this.iTrialSelfInspectionRecordService.updateTrialSelfInspectionRecordStatusFC(taskApprovalVO);
                 }
             }
-            //删除掉对应批次
+
+            //executor删除掉对应批次
             this.taskBatchService.deletedById(batchId);
+            for (TaskApprovalVO taskApprovalVO : taskApprovalVOS) {
+                RedisTemplate.delete("sign-"+taskApprovalVO.getFormDataId());
+            }
             isContinue = false;
         }
     }

+ 12 - 3
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVisaServiceImpl.java

@@ -51,6 +51,8 @@ import org.springblade.manager.feign.ContractClient;
 import org.springblade.manager.feign.SignPfxClient;
 import org.springblade.resource.feign.NewIOSSClient;
 import org.springblade.system.cache.ParamCache;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
 import org.springframework.http.converter.HttpMessageConverter;
 import org.springframework.http.converter.StringHttpMessageConverter;
@@ -100,6 +102,9 @@ public class EVisaServiceImpl implements EVisaService {
 
     private final ContractClient contractClient;
 
+    @Autowired
+    StringRedisTemplate RedisTemplate;
+
     @Override
     public String certification(String pdfUrl, String fileName, String contractId) {
         try {
@@ -311,6 +316,7 @@ public class EVisaServiceImpl implements EVisaService {
         TaskApprovalVO taskFile = this.taskClient.queryBusinessDataTask(JSONObject.parseObject(JSONObject.toJSONString(task), TaskApprovalVO.class));
         if (taskFile == null || taskFile.getApprovalFileList().size() <= 0) {
             //没有找到业务文件,取消签章
+            RedisTemplate.delete("sign-"+task.getFormDataId());
             return NOT_PFX_OR_FILE;
         }
 
@@ -318,6 +324,7 @@ public class EVisaServiceImpl implements EVisaService {
         List<JSONObject> eVisaConfigList = this.taskClient.queryBusinessTableEVisaConfig(task.getParallelProcessInstanceId(),task.getUserId(), "false");
         if (eVisaConfigList == null || eVisaConfigList.size() == 0) {
             //没有电签配置,默认当前任务为不签字审批,返回成功
+            RedisTemplate.delete("sign-"+task.getFormDataId());
             return SUCCESS + "@@@@" + taskFile.getApprovalFileList().get(0).getFileUrl();
         }
 
@@ -325,11 +332,12 @@ public class EVisaServiceImpl implements EVisaService {
         List<SignPfxFile> userPfxList = this.signPfxClient.querySignPfxByUserIdOrContractId(task.getUserId().toString(), "");
         if (userPfxList == null || userPfxList.size() <= 0) {
             //没有签章,不执行电签
+            RedisTemplate.delete("sign-"+task.getFormDataId());
             return NOT_PFX_OR_FILE;
         }
 
         //上锁
-        if (DistributedRedisLock.acquire(task.getUserId().toString(), batch)) {
+        //if (DistributedRedisLock.acquire(task.getUserId().toString(), batch)) {
             try {
                 //获取需要签章的数据
                 List<TaskApprovalVO.ApprovalFile> files = taskFile.getApprovalFileList();
@@ -383,11 +391,12 @@ public class EVisaServiceImpl implements EVisaService {
                     }
                 }
             } catch (Exception e) {
+                RedisTemplate.delete("sign-"+task.getFormDataId());
                 e.printStackTrace();
             }
-        }
+       // }
         //释放锁
-        DistributedRedisLock.release(task.getUserId().toString());
+      //  DistributedRedisLock.release(task.getUserId().toString());
 
         return resultMessage;
     }

+ 11 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -282,8 +282,8 @@ public class ExcelTabController extends BladeController {
     })
     public R putFileAttach(@RequestParam("file") MultipartFile file, Long nodeId) {
 
-        String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
-        //String file_path = "/Users/hongchuangyanfa/Desktop/"; //ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+        //String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+        String file_path = "/Users/hongchuangyanfa/Desktop/"; //ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
 
         ExcelTab detail = excelTabService.getById(nodeId);
         // 上传excel文件
@@ -859,6 +859,9 @@ public class ExcelTabController extends BladeController {
 
             // 计算单元格坐标
             int x = 0;
+            if(i==9 || i==10){
+                System.out.println("1234");
+            }
             for (int j = 0; j < tds.size(); j++) {
                 {
                     Element data = tds.get(j);
@@ -971,7 +974,10 @@ public class ExcelTabController extends BladeController {
                                 int mx1 = Integer.parseInt(dataInfo3.split(":")[0]);
                                 int mx2 = Integer.parseInt(dataInfo3.split(":")[1]);
                                 if (mx2 + 1 == x1) {
-                                    dataInfo = StringUtils.join(ArrayUtils.remove(dataInfo2, dataInfo2.length - 1)); //removing element at index 2
+                                    String [] data3=new String[dataInfo2.length-1];
+                                    System.arraycopy(dataInfo2,0,data3,0,data3.length);
+                                    dataInfo = StringUtils.join(data3); //removing element at index 2
+
                                     if (dataInfo2.length == 1) {
                                         dataInfo = mx1 + ":" + x2;
                                     } else {
@@ -1679,9 +1685,9 @@ public class ExcelTabController extends BladeController {
         System.out.println("3=" + DateUtil.formatDateTime(DateUtil.now()));
         //单个 pdf加载
         for (TableInfo tableInfo : tableInfoList) {
-            if(!tableInfo.isToBeUpdated()){
+            //if(!tableInfo.isToBeUpdated()){
                 excelTabService.getBussPdfInfo(Long.parseLong(tableInfo.getPkeyId()));
-            }
+          //  }
 
         }
         System.out.println("4=" + DateUtil.formatDateTime(DateUtil.now()));

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml

@@ -426,7 +426,7 @@
                 #{tableOwnerList}
             </foreach>
         </if>
-        ORDER BY full_name,p_key_id,update_time
+        ORDER BY sort,full_name,p_key_id,update_time
     </select>
 
     <select id="selectRoleInfo" resultType="org.springblade.manager.entity.SaveUserInfoByProject">

+ 9 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -10,6 +10,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.mixsmart.utils.ListUtils;
 import com.mixsmart.utils.RegexUtils;
+import com.spire.xls.CellRange;
+import com.spire.xls.Workbook;
+import com.spire.xls.*;
 import lombok.AllArgsConstructor;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
@@ -71,6 +74,7 @@ import java.util.*;
 import java.util.function.Function;
 import java.util.regex.Matcher;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * 清表基础数据表 服务实现类
@@ -1155,8 +1159,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
     @Override
     public R getBussPdfInfo(Long pkeyId) throws Exception {
-        // String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
-        String file_path = "/Users/hongchuangyanfa/Desktop/";
+        String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+        //String file_path = "/Users/hongchuangyanfa/Desktop/";
         WbsTreeContract wbsTreeContract = wbsTreeContractService.getBaseMapper().selectOne(Wrappers.<WbsTreeContract>query().lambda()
                 .eq(WbsTreeContract::getPKeyId, pkeyId));
 
@@ -1401,8 +1405,6 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 }
             }
         }
-
-        //wb.saveToFile(excelPath, ExcelVersion.Version2010);
         //输出流
         FileOutputStream outputStream = new FileOutputStream(excelPath);
         workbook.write(outputStream);
@@ -1460,8 +1462,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
     @Override
     public void getBussPdfs(String nodeId, String classify, String contractId, String projectId) throws Exception {
-        //String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
-        String file_path = "/Users/hongchuangyanfa/Desktop/";
+        String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+        //String file_path = "/Users/hongchuangyanfa/Desktop/";
         // 获取有权限的节点信息
         List<AppWbsTreeContractVO> wbsTreeContractList = wbsTreeContractService.searchNodeAllTable(nodeId, classify, contractId, projectId);
         List<String> data = new ArrayList<>();
@@ -2319,7 +2321,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     //没有excel表单的不生成pdf
                     if (StringUtils.isNotEmpty(record.getHtmlUrl())) {
                         //生成记录表pdf
-                        String bussPdfInfo = this.getBussPDFTrial(record.getPKeyId(), contractId, id, recordPageNumber++, recordPageNumberCount, dto);
+                        String bussPdfInfo = this.getBussPDFTrial(record.getPKeyId(), contractId, id, recordPageNumber++, recordPageNumberCount,null);
                         if (StringUtils.isNotEmpty(bussPdfInfo)) {
                             dataPdfUrls.add(bussPdfInfo);
                         }

+ 0 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -17,7 +17,6 @@ import org.springblade.business.feign.InformationQueryClient;
 import org.springblade.common.constant.CommonConstant;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
-import org.springblade.common.utils.ThreadPoolMonitor;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Condition;

+ 0 - 46
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/AsyncConfigurer.java

@@ -1,46 +0,0 @@
-package org.springblade.manager.utils;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.annotation.EnableAsync;
-
-import java.util.concurrent.*;
-
-@Slf4j
-@Configuration
-@EnableAsync
-public class AsyncConfigurer {
-
-    /**
-     * cpu 核心数量
-     */
-    public static final int cpuNum = Runtime.getRuntime().availableProcessors();
-
-    /**
-     * 线程池配置
-     *
-     * @return
-     */
-    @Bean("taskExecutor1")
-    public ThreadPoolExecutor getAsyncExecutor() {
-        return new ThreadPoolMonitor(cpuNum
-                , cpuNum * 2
-                , 60
-                , TimeUnit.SECONDS
-                , new LinkedBlockingQueue<>(2000)
-                , new ThreadPoolExecutor.DiscardOldestPolicy(), "manager-thread-pool");
-    }
-
-    /**
-     * 线程池配置
-     *
-     * @return
-     */
-    @Bean("singleExecutor")
-    public ExecutorService getSingleExecutor() {
-        log.info("线程池初始化......");
-        return Executors.newSingleThreadExecutor();
-    }
-
-}