Jelajahi Sumber

试验电签相关

liuyc 2 tahun lalu
induk
melakukan
3e0bfd0496

+ 542 - 533
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -28,6 +28,7 @@ import org.springblade.core.sms.model.SmsResponse;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.jackson.JsonUtil;
 import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.flow.core.entity.BladeFlow;
 import org.springblade.flow.core.feign.NewFlowClient;
@@ -61,475 +62,483 @@ import java.util.stream.Collectors;
 @Api(value = "任务审核主表", tags = "任务审核主表接口")
 public class TaskController extends BladeController {
 
-	private final ITaskService taskService;
-
-	private final ITaskParallelService taskParallelService;
-
-	private final NewFlowClient newFlowClient;
-
-	private final IDictBizClient dictBizClient;
-
-	private final NewISmsClient newSmsClient;
-
-	private final IDefaultConfigService defaultConfigService;
-
-	private final ITaskBatchService taskBatchService;
-
-	private final ITaskService iTaskService;
-
-	private final WebSocket webSocket;
-
-	private final CommonFileClient commonFileClient;
-
-	private final ContractClient contractClient;
-
-	/**
-	 * 记录短信验证码超时时间
-	 */
-	@GetMapping("/save-sms-timeout")
-	@ApiOperationSupport(order = 13)
-	@ApiOperation(value = "记录短信验证码超时时间")
-	public void saveSmsTimeout(@RequestParam String code){
-		//获取账户记录
-		DefaultConfig config = this.defaultConfigService.getOne(Wrappers.<DefaultConfig>lambdaQuery().eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
-		if(config != null){
-			//获取当前时间
-			Date now = DateUtil.now();
-			//默认16小时后超时
-			now = DateUtil.plusHours(now, 16);
-
-			LambdaUpdateWrapper<DefaultConfig> wrapper = new LambdaUpdateWrapper<>();
-			wrapper.set(DefaultConfig::getSmsTimeOut, DateUtil.format(now, "yyyy-MM-dd HH:mm:ss"));
-			if(!StringUtils.equals(config.getSmsCode(), code)){
-				wrapper.set(DefaultConfig::getSmsCode, code);
-			}
-			//生成超时时间
-			this.defaultConfigService.update(wrapper.eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
-		}
-	}
-
-	/**
-	 * 校验电签短信验证码
-	 */
-	@PostMapping("/check-sms-code")
-	@ApiOperationSupport(order = 12)
-	@ApiOperation(value = "校验电签短信验证码")
-	public R<String> checkSmsCode(){
-		//获取账户验证码
-		DefaultConfig config = this.defaultConfigService.getOne(Wrappers.<DefaultConfig>lambdaQuery().eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
-
-		if(config != null){
-			if(StringUtils.isNotEmpty(config.getSmsTimeOut())){
-				//获取当前时间
-				Date now = DateUtil.now();
-				//先自行校验是否超时
-				Duration duration = DateUtil.between(DateUtil.parse(config.getSmsTimeOut(), "yyyy-MM-dd HH:mm:ss"), now);
-				if(duration.getSeconds() > 0){
-					//说明已经超时,清空短信验证记录
-					this.defaultConfigService.update(Wrappers.<DefaultConfig>lambdaUpdate().set(DefaultConfig::getSmsTimeOut, null).set(DefaultConfig::getSmsCode, null).eq(DefaultConfig::getId, config.getId()));
-				}
-			}
-			return R.data(config.getSmsTimeOut());
-		}
-
-		return R.data(null);
-	}
-
-	/**
-	 * 批量审批详情
-	 */
-	@GetMapping("/batch-approval-parameter")
-	@ApiOperationSupport(order = 11)
-	@ApiOperation(value = "批量页详情")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "formDataId", value = "数据源", required = true),
-			@ApiImplicitParam(name = "approvalType", value = "上报类型", required = true)
-	})
-	public R<TaskApprovalVO> getBatchApprovalTaskParameter(@RequestParam String formDataId, @RequestParam Integer approvalType){
-		TaskApprovalVO result = new TaskApprovalVO();
-		result.setFormDataId(formDataId);
-		result.setApprovalType(approvalType);
-
-		return R.data(this.taskService.queryBusinessData(result));
-	}
-
-	/**
-	 * 短信验证
-	 */
-	@PostMapping("/send-notice")
-	@ApiOperationSupport(order = 10)
-	@ApiOperation(value = "短信验证")
-	public R<Boolean> sendNotice(@RequestParam String phone){
-		String code = CommonUtil.getCharAndNumber(4);
-		Map<String, String> params = new HashMap<>(3);
-		params.put("code", code);
-		R<SmsResponse> result = this.newSmsClient.sendMessage("test_code", JsonUtil.toJson(params), phone);
-		if(result.getData().isSuccess()){
-			//记录当前验证码
-			DefaultConfig config = this.defaultConfigService.getOne(Wrappers.<DefaultConfig>lambdaQuery().eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
-			if(config != null){
-				//修改
-				config.setSmsCode(code);
-				this.defaultConfigService.updateById(config);
-			} else {
-				//新增
-				config = new DefaultConfig();
-				config.setSmsCode(code);
-				config.setCreateUser(AuthUtil.getUserId());
-				config.setCreateTime(new Date());
-				this.defaultConfigService.save(config);
-			}
-		}
-		return result.getData().isSuccess() ? R.data(200, true, code) : R.data(499, false, String.valueOf(JSONObject.parseObject(result.getData().getMsg(), Map.class).get("Message")));
-	}
-
-	/**
-	 * 获取发起
-	 */
-	@GetMapping("/query-user-start-flow")
-	@ApiOperationSupport(order =  9)
-	@ApiOperation(value = "获取发起")
-	public R<IPage<TaskVO>> queryUserStartFlow(TaskQueryVO queryVO){
-		//获取发起,只需要查询主表
-		//先查询符合条件的流程
-		LambdaQueryWrapper<Task> wrapper = Wrappers.<Task>lambdaQuery().eq(Task::getProjectId, queryVO.getProjectId()).eq(Task::getReportUser, AuthUtil.getUserId().toString());
-		//设置查询参数
-		this.integrationMethod(wrapper, queryVO);
-		//获取主流程
-		List<Task> masterTaskList = this.taskService.list(wrapper);
-		if(masterTaskList != null && masterTaskList.size() > 0){
-			//获取集合
-			List<String> processInstanceIds = masterTaskList.stream().map(Task::getProcessInstanceId).distinct().collect(Collectors.toList());
-			//设置主表map,方便获取
-			Map<String, Task> masterTaskMap = new HashMap<>();
-			masterTaskList.forEach(task -> masterTaskMap.put(task.getProcessInstanceId(), task));
-
-			R<Object> rObject = this.newFlowClient.selectSendPage(queryVO.getCurrent(), queryVO.getSize(),queryVO.getOrdType()==null?1:queryVO.getOrdType(), String.join(",", processInstanceIds));
-			if(rObject.isSuccess()){
-				Query query = new Query();
-				query.setCurrent(queryVO.getCurrent());
-				query.setSize(queryVO.getSize());
-				//新建一个IPage的实例
-				IPage<BladeFlow> newData = Condition.getPage(query);
-				//使用实例获取具体的类型进行转换
-				IPage flowIPage = JSONObject.parseObject(JSONObject.toJSONString(rObject.getData()), newData.getClass());
-				//本质上这里获取到的集合属于List<JSONObject>,所以需要在这进行一次类型转换,将JSONObject转为BladeFlow
-				List<BladeFlow> result = JSONArray.parseArray(JSONObject.toJSONString(flowIPage.getRecords()), BladeFlow.class);
-
-				//最终结果集合
-				List<TaskVO> finalResult = new ArrayList<>();
-				for(BladeFlow  flow : result) {
-					//获取实体
-					Task task = masterTaskMap.get(flow.getProcessInstanceId());
-					//类型转换
-					TaskVO vo = new TaskVO();
-					BeanUtils.copyProperties(task, vo);
-					//设置关键信息
-					vo.setTypeValue(new Integer("1").equals(vo.getType()) ? "普通任务" : new Integer("2").equals(vo.getType()) ? "验收任务" : "移交任务");
-					vo.setTaskId(flow.getTaskId());
-					vo.setTaskStatus(new Integer("1").equals(task.getStatus()) ? "待审批" : new Integer("2").equals(task.getStatus()) ? "已审批" : "已废除", task.getStatus());
-					//查询分支流程信息
-					List<TaskParallel> linkList = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getProcessInstanceId, task.getProcessInstanceId()));
-					if (linkList != null && !linkList.isEmpty()) {
-						this.integrationMethod(vo, linkList);
-					}
-					finalResult.add(vo);
-				}
-
-				// 手机app 需要排序接口
-				if(queryVO.getOrdType()!=null && queryVO.getOrdType()==1){ // 降序
-					finalResult.sort(Comparator.comparing(TaskVO::getCreateTime).reversed());
-				}
-				if(queryVO.getOrdType()!=null && queryVO.getOrdType()==2){ // 升序
-					finalResult.sort(Comparator.comparing(TaskVO::getCreateTime));
-				}
-
-				//最终分页数据
-				return this.getIPageR(query, flowIPage, finalResult);
-			}
-		}
-
-		return R.data(null);
-	}
-
-	/**
-	 * 统合方法
-	 */
-	private void integrationMethod(TaskVO vo, List<TaskParallel> linkList) {
-		linkList.forEach(link -> vo.setWaitingUserList(link.getTaskUserName(), new Integer("999").equals(link.getEVisaStatus()) ? 999 : new Integer("2").equals(link.getStatus()) ? 2 : new Integer("3").equals(link.getStatus()) && new Integer("1").equals(link.getInitiative()) ? 3 : 1));
-	}
-
-	/**
-	 * 批量审批
-	 */
-	@PostMapping("/batch-complete-approval-task")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "批量审批")
-	public R<Boolean> batchCompleteApprovalTask(@RequestBody BatchTaskVO batchTaskVO) throws IOException {
-		String taskIds = batchTaskVO.getTaskIds();
-		String parallelProcessInstanceIds = batchTaskVO.getParallelProcessInstanceIds();
-		if(StringUtils.isNotEmpty(taskIds)){
-			String[] taskIdArray = taskIds.split(",");
-			String[] parallelProcessInstanceIdArray = parallelProcessInstanceIds.split(",");
-			String[] approvalType = batchTaskVO.getApprovalType().split(",");
-			String[] formDataId = batchTaskVO.getFormDataId().split(",");
-
-			List<TaskApprovalVO> taskApprovalVOS = new ArrayList<>();
-
-			for(int i = 0, l = taskIdArray.length; i < l; i ++){
-				TaskApprovalVO approvalVO = new TaskApprovalVO();
-				approvalVO.setTaskId(taskIdArray[i]);
-				approvalVO.setParallelProcessInstanceId(parallelProcessInstanceIdArray[i]);
-				approvalVO.setFlag(batchTaskVO.getFlag());
-				approvalVO.setComment(batchTaskVO.getComment());
-				approvalVO.setApprovalType(Integer.parseInt(approvalType[i]));
-				approvalVO.setFormDataId(formDataId[i]);
-
-				taskApprovalVOS.add(approvalVO);
-			}
-
-			//审批
-			this.taskService.batchCompleteApprovalTask(taskApprovalVOS,AuthUtil.getUserId());
-
-			//通过WebSocket推送数量条数
-			if (ObjectUtil.isNotEmpty(AuthUtil.getUserId())) {
-				Map<String, String> webSocketMessageMap = WebSocket.getWebSocketMessageMap();
-				Set<Map.Entry<String, String>> message = webSocketMessageMap.entrySet();
-				for (Map.Entry<String, String> entry : message) {
-					String userId = entry.getKey();
-					if (userId.equals(AuthUtil.getUserId().toString())) { //只推送当前用户
-						String projectAndContractId = entry.getValue();
-						if (StringUtils.isNotEmpty(projectAndContractId) && StringUtils.isNotEmpty(userId)) {
-							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));
-						}
-					}
-				}
-			}
-
-			return R.data(true);
-		}
-		return R.data(false);
-	}
-
-	/**
-	 * 获取当前合同段的上报批次
-	 * @param projectId 项目ID
-	 * @param contractId 合同段ID
-	 */
-	@GetMapping("/query-batch-list")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "获取当前合同段的上报批次")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "projectId", value = "项目ID", required = true),
-			@ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
-	})
-	public R<List<Task>> queryBatchList(String projectId, String contractId){
-		return R.data(this.taskService.queryBatchList(projectId, contractId));
-	}
-
-	/**
-	 * 获取当前合同段有哪些上报批次
-	 * @param projectId 项目ID
-	 * @param contractId 合同段ID
-	 */
-	@GetMapping("/query-batch-list-two")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "获取当前合同段的上报批次")
-	@ApiImplicitParams({
-			@ApiImplicitParam(name = "projectId", value = "项目ID", required = true),
-			@ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
-	})
-	public R<List<String>> queryBatchListTwo(String projectId, String contractId,String type){
-		if (StringUtils.isBlank(type)) {
-			//为空,以information为主表查询填报资料批次
-			return R.data(this.taskService.queryBatchListTwo(projectId, contractId));
-		}else{
-			//如果type为1内页台账不需要去查询首件批次,type为2只查标记为首件的,type为3只查首件
-			return R.data(this.taskService.queryBatchListThree(projectId, contractId,type));
-		}
-	}
-
-
-	/**
-	 * 获取任务类型或任务状态
-	 */
-	@GetMapping("/query-task-type-status")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "获取任务类型或任务状态")
-	public R<List<DictBiz>> queryTaskTypeOrStatus(String typeOrStatus){
-		return this.dictBizClient.getList(typeOrStatus, "notRoot");
-	}
-
-	/**
-	 * 获取已办
-	 */
-	@GetMapping("/query-user-done-task-list")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "获取已办")
-	public R<IPage<TaskVO>> queryUserDoneTaskList(TaskQueryVO queryVO){
-		//设置获取参数
-		Map<String,Task> masterTaskMap = new HashMap<>();
-		Map<String,TaskParallel> parallelMap = new HashMap<>();
-		List<String> parallelProcessInstanceIds = new ArrayList<>();
-		//统合查询方法
-		this.integrationMethod(queryVO, masterTaskMap, parallelMap, parallelProcessInstanceIds, "2,3");
-
-		//获取已办(基于原生已办)
-		R<Object> rObject = this.newFlowClient.selectDonePage(queryVO.getCurrent(), queryVO.getSize(),queryVO.getOrdType()==null?1:queryVO.getOrdType(), String.join(",", parallelProcessInstanceIds));
-		//处理参数
-		return this.integrationMethod(queryVO, rObject, masterTaskMap, parallelMap, false);
-	}
-
-	/**
-	 * 审批页详情
-	 */
-	@GetMapping("/query-approval-parameter")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "审批页详情(单任务时)")
-	public R<TaskApprovalVO> getApprovalTaskParameter(@RequestParam String parallelProcessInstanceId, @RequestParam String formDataId, @RequestParam Integer approvalType){
-		TaskApprovalVO vo = new TaskApprovalVO();
-		vo.setFormDataId(formDataId);
-		vo.setApprovalType(approvalType);
-		//获取具体业务数据
-		return R.data(this.taskService.queryBusinessData(vo));
-	}
-	/**
-	 * 审批页pdf数量详情
-	 */
-	@GetMapping("/query-approval-parameter-pdf-num")
-	@ApiOperationSupport(order = 14)
-	@ApiOperation(value = "审批页pdf数量详情")
-	public R<Object> getApprovalTaskParameterPdfNum(@RequestParam String url){
-		String pdfNum = this.commonFileClient.getPdfNum(url);
-		return R.data(pdfNum);
-	}
-	/**
-	 * 获取当前用户待办流程
-	 */
-	@GetMapping("/user-to-do-task-list")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "获取当前用户待办流程")
-	public R<IPage<TaskVO>> todoUserApprovalTask(TaskQueryVO queryVO){
-		//设置获取参数
-		Map<String,Task> masterTaskMap = new HashMap<>();
-		Map<String,TaskParallel> parallelMap = new HashMap<>();
-		List<String> parallelProcessInstanceIds = new ArrayList<>();
-		//统合查询方法
-		this.integrationMethod(queryVO, masterTaskMap, parallelMap, parallelProcessInstanceIds, "1");
-		if (masterTaskMap.size() == 0){
-			return R.data(null);
-		}
-		//获取待办(基于原生待办)
-		R<Object> rObject = this.newFlowClient.selectTodoPage(queryVO.getCurrent(), queryVO.getSize(),queryVO.getOrdType()==null?1:queryVO.getOrdType(), String.join(",", parallelProcessInstanceIds));
-		//处理参数
-		return this.integrationMethod(queryVO, rObject, masterTaskMap, parallelMap, true);
-	}
-
-	/**
-	 * 统合查询方法
-	 */
-	private void integrationMethod(TaskQueryVO queryVO, Map<String,Task> masterTaskMap, Map<String,TaskParallel> parallelMap, List<String> parallelProcessInstanceIds, String status){
-		//先查询符合条件的流程
-		LambdaQueryWrapper<Task> wrapper = Wrappers.<Task>lambdaQuery().eq(Task::getIsDeleted, 0)
-				.eq(Task::getProjectId, queryVO.getProjectId()).eq(StringUtils.isNotBlank(queryVO.getBatch()),Task::getBatch,queryVO.getBatch());
-		this.integrationMethod(wrapper, queryVO);
-
-		//符合条件的集合
-		List<Task> masterTaskList = this.taskService.list(wrapper);
-		//根据主表获取附表且当前用户的记录
-		List<String> processInstanceIds = new ArrayList<>();
-		masterTaskList.forEach(task -> {
-			masterTaskMap.put(task.getProcessInstanceId(), task);
-			processInstanceIds.add(task.getProcessInstanceId());
-		});
-
-		if(processInstanceIds.size() > 0){
-			List<TaskParallel> parallelTaskList = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().in(TaskParallel::getProcessInstanceId, processInstanceIds).eq(TaskParallel::getTaskUser, AuthUtil.getUserId().toString()).eq(TaskParallel::getIsDeleted, 0).in(TaskParallel::getStatus, Arrays.asList(status.split(","))));
-			parallelTaskList.forEach(parallel -> {
-				parallelMap.put(parallel.getParallelProcessInstanceId(), parallel);
-				parallelProcessInstanceIds.add(parallel.getParallelProcessInstanceId());
-			});
-		}
-	}
-
-	private void integrationMethod(LambdaQueryWrapper<Task> wrapper, TaskQueryVO queryVO){
-		//任务类型
-		if(StringUtils.isNotEmpty(queryVO.getTaskType())){
-			wrapper.eq(Task::getType, queryVO.getTaskType());
-		}
-		//任务状态
-		if(StringUtils.isNotEmpty(queryVO.getTaskStatus())){
-			wrapper.eq(Task::getStatus, queryVO.getTaskStatus());
-		}
-		//合同段ID
-		if(StringUtils.isNotEmpty(queryVO.getContractId())){
-			ContractInfo contractInfo = contractClient.getContractById(Long.valueOf(queryVO.getContractId()));
-			if (contractInfo.getContractType() == 2){
-				wrapper.eq(Task::getProjectId, queryVO.getProjectId());
-			}else {
-				wrapper.eq(Task::getContractId, queryVO.getContractId());
-			}
-		}
-		//开始结束时间
-		if(StringUtils.isNotEmpty(queryVO.getStartTime()) && StringUtils.isNotEmpty(queryVO.getEndTime())){
-			wrapper.between(Task::getStartTime, queryVO.getStartTime(), queryVO.getEndTime());
-		}
-		//关键字查询
-		if(StringUtils.isNotEmpty(queryVO.getQueryValue())){
-			wrapper.like(Task::getTaskName, queryVO.getQueryValue());
-		}
-	}
-
-	/**
-	 * 统合处理方法
-	 */
-	private R<IPage<TaskVO>> integrationMethod(TaskQueryVO queryVO, R<Object> rObject, Map<String,Task> masterTaskMap, Map<String,TaskParallel> parallelMap, boolean isToDo){
-		Query query = new Query();
-		query.setCurrent(queryVO.getCurrent());
-		query.setSize(queryVO.getSize());
-		//最终集合
-		List<TaskVO> finalResult = new ArrayList<>();
-		if(rObject.isSuccess()){
-			//新建一个IPage的实例
-			IPage<BladeFlow> newData = Condition.getPage(query);
-			//使用实例获取具体的类型进行转换
-			IPage flowIPage = JSONObject.parseObject(JSONObject.toJSONString(rObject.getData()), newData.getClass());
-			//本质上这里获取到的集合属于List<JSONObject>,所以需要在这进行一次类型转换,将JSONObject转为BladeFlow
-			List<BladeFlow> result = JSONArray.parseArray(JSONObject.toJSONString(flowIPage.getRecords()), BladeFlow.class);
-
-			if(result != null && result.size() > 0){
-				//获取相关信息
-				result.forEach(flow -> {
-					TaskParallel taskParallel = parallelMap.get(flow.getProcessInstanceId());
-					if(taskParallel != null){
-						//查询主表数据
-						Task task = masterTaskMap.get(taskParallel.getProcessInstanceId());
-
-						if(task != null){
-							//复制数据
-							TaskVO vo = new TaskVO();
-							BeanUtils.copyProperties(task, vo);
-							//设置关键信息
-							vo.setTypeValue(new Integer("1").equals(vo.getType()) ? "普通任务" : new Integer("2").equals(vo.getType()) ? "验收任务" : "移交任务");
-							vo.setParallelProcessInstanceId(flow.getProcessInstanceId());
-							vo.setTaskId(flow.getTaskId());
-							vo.setTaskStatus(new Integer("1").equals(task.getStatus()) ? "待审批" : new Integer("2").equals(task.getStatus()) ? "已审批" : "已废除", task.getStatus());
-							vo.setEVisaContent(taskParallel.getEVisaContent());
-							//获取主流程下所有相关的审批人
-							List<TaskParallel> linkList = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getProcessInstanceId, task.getProcessInstanceId()).eq(TaskParallel::getIsDeleted, 0));
-							if(linkList != null && linkList.size() > 0){
-								this.integrationMethod(vo, linkList);
-							}
-
-							//设置最终集合
-							finalResult.add(vo);
-						}
-					}
-				});
+    private final ITaskService taskService;
+
+    private final ITaskParallelService taskParallelService;
+
+    private final NewFlowClient newFlowClient;
+
+    private final IDictBizClient dictBizClient;
+
+    private final NewISmsClient newSmsClient;
+
+    private final IDefaultConfigService defaultConfigService;
+
+    private final ITaskBatchService taskBatchService;
+
+    private final ITaskService iTaskService;
+
+    private final WebSocket webSocket;
+
+    private final CommonFileClient commonFileClient;
+
+    private final ContractClient contractClient;
+
+    /**
+     * 记录短信验证码超时时间
+     */
+    @GetMapping("/save-sms-timeout")
+    @ApiOperationSupport(order = 13)
+    @ApiOperation(value = "记录短信验证码超时时间")
+    public void saveSmsTimeout(@RequestParam String code) {
+        //获取账户记录
+        DefaultConfig config = this.defaultConfigService.getOne(Wrappers.<DefaultConfig>lambdaQuery().eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
+        if (config != null) {
+            //获取当前时间
+            Date now = DateUtil.now();
+            //默认16小时后超时
+            now = DateUtil.plusHours(now, 16);
+
+            LambdaUpdateWrapper<DefaultConfig> wrapper = new LambdaUpdateWrapper<>();
+            wrapper.set(DefaultConfig::getSmsTimeOut, DateUtil.format(now, "yyyy-MM-dd HH:mm:ss"));
+            if (!StringUtils.equals(config.getSmsCode(), code)) {
+                wrapper.set(DefaultConfig::getSmsCode, code);
+            }
+            //生成超时时间
+            this.defaultConfigService.update(wrapper.eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
+        }
+    }
+
+    /**
+     * 校验电签短信验证码
+     */
+    @PostMapping("/check-sms-code")
+    @ApiOperationSupport(order = 12)
+    @ApiOperation(value = "校验电签短信验证码")
+    public R<String> checkSmsCode() {
+        //获取账户验证码
+        DefaultConfig config = this.defaultConfigService.getOne(Wrappers.<DefaultConfig>lambdaQuery().eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
+
+        if (config != null) {
+            if (StringUtils.isNotEmpty(config.getSmsTimeOut())) {
+                //获取当前时间
+                Date now = DateUtil.now();
+                //先自行校验是否超时
+                Duration duration = DateUtil.between(DateUtil.parse(config.getSmsTimeOut(), "yyyy-MM-dd HH:mm:ss"), now);
+                if (duration.getSeconds() > 0) {
+                    //说明已经超时,清空短信验证记录
+                    this.defaultConfigService.update(Wrappers.<DefaultConfig>lambdaUpdate().set(DefaultConfig::getSmsTimeOut, null).set(DefaultConfig::getSmsCode, null).eq(DefaultConfig::getId, config.getId()));
+                }
+            }
+            return R.data(config.getSmsTimeOut());
+        }
+
+        return R.data(null);
+    }
+
+    /**
+     * 批量审批详情
+     */
+    @GetMapping("/batch-approval-parameter")
+    @ApiOperationSupport(order = 11)
+    @ApiOperation(value = "批量页详情")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "formDataId", value = "数据源", required = true),
+            @ApiImplicitParam(name = "approvalType", value = "上报类型", required = true)
+    })
+    public R<List<TaskApprovalVO>> getBatchApprovalTaskParameter(@RequestParam String formDataId, @RequestParam Integer approvalType) {
+        List<String> longs = Func.toStrList(formDataId);
+        List<TaskApprovalVO> taskApprovalVOList = new ArrayList<>();
+        for (String aLong : longs) {
+            TaskApprovalVO result = new TaskApprovalVO();
+            result.setFormDataId(aLong);
+            result.setApprovalType(approvalType);
+            taskApprovalVOList.add(this.taskService.queryBusinessData(result));
+        }
+        return R.data(taskApprovalVOList);
+    }
+
+    /**
+     * 短信验证
+     */
+    @PostMapping("/send-notice")
+    @ApiOperationSupport(order = 10)
+    @ApiOperation(value = "短信验证")
+    public R<Boolean> sendNotice(@RequestParam String phone) {
+        String code = CommonUtil.getCharAndNumber(4);
+        Map<String, String> params = new HashMap<>(3);
+        params.put("code", code);
+        R<SmsResponse> result = this.newSmsClient.sendMessage("test_code", JsonUtil.toJson(params), phone);
+        if (result.getData().isSuccess()) {
+            //记录当前验证码
+            DefaultConfig config = this.defaultConfigService.getOne(Wrappers.<DefaultConfig>lambdaQuery().eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
+            if (config != null) {
+                //修改
+                config.setSmsCode(code);
+                this.defaultConfigService.updateById(config);
+            } else {
+                //新增
+                config = new DefaultConfig();
+                config.setSmsCode(code);
+                config.setCreateUser(AuthUtil.getUserId());
+                config.setCreateTime(new Date());
+                this.defaultConfigService.save(config);
+            }
+        }
+        return result.getData().isSuccess() ? R.data(200, true, code) : R.data(499, false, String.valueOf(JSONObject.parseObject(result.getData().getMsg(), Map.class).get("Message")));
+    }
+
+    /**
+     * 获取发起
+     */
+    @GetMapping("/query-user-start-flow")
+    @ApiOperationSupport(order = 9)
+    @ApiOperation(value = "获取发起")
+    public R<IPage<TaskVO>> queryUserStartFlow(TaskQueryVO queryVO) {
+        //获取发起,只需要查询主表
+        //先查询符合条件的流程
+        LambdaQueryWrapper<Task> wrapper = Wrappers.<Task>lambdaQuery().eq(Task::getProjectId, queryVO.getProjectId()).eq(Task::getReportUser, AuthUtil.getUserId().toString());
+        //设置查询参数
+        this.integrationMethod(wrapper, queryVO);
+        //获取主流程
+        List<Task> masterTaskList = this.taskService.list(wrapper);
+        if (masterTaskList != null && masterTaskList.size() > 0) {
+            //获取集合
+            List<String> processInstanceIds = masterTaskList.stream().map(Task::getProcessInstanceId).distinct().collect(Collectors.toList());
+            //设置主表map,方便获取
+            Map<String, Task> masterTaskMap = new HashMap<>();
+            masterTaskList.forEach(task -> masterTaskMap.put(task.getProcessInstanceId(), task));
+
+            R<Object> rObject = this.newFlowClient.selectSendPage(queryVO.getCurrent(), queryVO.getSize(), queryVO.getOrdType() == null ? 1 : queryVO.getOrdType(), String.join(",", processInstanceIds));
+            if (rObject.isSuccess()) {
+                Query query = new Query();
+                query.setCurrent(queryVO.getCurrent());
+                query.setSize(queryVO.getSize());
+                //新建一个IPage的实例
+                IPage<BladeFlow> newData = Condition.getPage(query);
+                //使用实例获取具体的类型进行转换
+                IPage flowIPage = JSONObject.parseObject(JSONObject.toJSONString(rObject.getData()), newData.getClass());
+                //本质上这里获取到的集合属于List<JSONObject>,所以需要在这进行一次类型转换,将JSONObject转为BladeFlow
+                List<BladeFlow> result = JSONArray.parseArray(JSONObject.toJSONString(flowIPage.getRecords()), BladeFlow.class);
+
+                //最终结果集合
+                List<TaskVO> finalResult = new ArrayList<>();
+                for (BladeFlow flow : result) {
+                    //获取实体
+                    Task task = masterTaskMap.get(flow.getProcessInstanceId());
+                    //类型转换
+                    TaskVO vo = new TaskVO();
+                    BeanUtils.copyProperties(task, vo);
+                    //设置关键信息
+                    vo.setTypeValue(new Integer("1").equals(vo.getType()) ? "普通任务" : new Integer("2").equals(vo.getType()) ? "验收任务" : "移交任务");
+                    vo.setTaskId(flow.getTaskId());
+                    vo.setTaskStatus(new Integer("1").equals(task.getStatus()) ? "待审批" : new Integer("2").equals(task.getStatus()) ? "已审批" : "已废除", task.getStatus());
+                    //查询分支流程信息
+                    List<TaskParallel> linkList = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getProcessInstanceId, task.getProcessInstanceId()));
+                    if (linkList != null && !linkList.isEmpty()) {
+                        this.integrationMethod(vo, linkList);
+                    }
+                    finalResult.add(vo);
+                }
+
+                // 手机app 需要排序接口
+                if (queryVO.getOrdType() != null && queryVO.getOrdType() == 1) { // 降序
+                    finalResult.sort(Comparator.comparing(TaskVO::getCreateTime).reversed());
+                }
+                if (queryVO.getOrdType() != null && queryVO.getOrdType() == 2) { // 升序
+                    finalResult.sort(Comparator.comparing(TaskVO::getCreateTime));
+                }
+
+                //最终分页数据
+                return this.getIPageR(query, flowIPage, finalResult);
+            }
+        }
+
+        return R.data(null);
+    }
+
+    /**
+     * 统合方法
+     */
+    private void integrationMethod(TaskVO vo, List<TaskParallel> linkList) {
+        linkList.forEach(link -> vo.setWaitingUserList(link.getTaskUserName(), new Integer("999").equals(link.getEVisaStatus()) ? 999 : new Integer("2").equals(link.getStatus()) ? 2 : new Integer("3").equals(link.getStatus()) && new Integer("1").equals(link.getInitiative()) ? 3 : 1));
+    }
+
+    /**
+     * 批量审批
+     */
+    @PostMapping("/batch-complete-approval-task")
+    @ApiOperationSupport(order = 8)
+    @ApiOperation(value = "批量审批")
+    public R<Boolean> batchCompleteApprovalTask(@RequestBody BatchTaskVO batchTaskVO) throws IOException {
+        String taskIds = batchTaskVO.getTaskIds();
+        String parallelProcessInstanceIds = batchTaskVO.getParallelProcessInstanceIds();
+        if (StringUtils.isNotEmpty(taskIds)) {
+            String[] taskIdArray = taskIds.split(",");
+            String[] parallelProcessInstanceIdArray = parallelProcessInstanceIds.split(",");
+            String[] approvalType = batchTaskVO.getApprovalType().split(",");
+            String[] formDataId = batchTaskVO.getFormDataId().split(",");
+
+            List<TaskApprovalVO> taskApprovalVOS = new ArrayList<>();
+
+            for (int i = 0, l = taskIdArray.length; i < l; i++) {
+                TaskApprovalVO approvalVO = new TaskApprovalVO();
+                approvalVO.setTaskId(taskIdArray[i]);
+                approvalVO.setParallelProcessInstanceId(parallelProcessInstanceIdArray[i]);
+                approvalVO.setFlag(batchTaskVO.getFlag());
+                approvalVO.setComment(batchTaskVO.getComment());
+                approvalVO.setApprovalType(Integer.parseInt(approvalType[i]));
+                approvalVO.setFormDataId(formDataId[i]);
+
+                taskApprovalVOS.add(approvalVO);
+            }
+
+            //审批
+            this.taskService.batchCompleteApprovalTask(taskApprovalVOS, AuthUtil.getUserId());
+
+            //通过WebSocket推送数量条数
+            if (ObjectUtil.isNotEmpty(AuthUtil.getUserId())) {
+                Map<String, String> webSocketMessageMap = WebSocket.getWebSocketMessageMap();
+                Set<Map.Entry<String, String>> message = webSocketMessageMap.entrySet();
+                for (Map.Entry<String, String> entry : message) {
+                    String userId = entry.getKey();
+                    if (userId.equals(AuthUtil.getUserId().toString())) { //只推送当前用户
+                        String projectAndContractId = entry.getValue();
+                        if (StringUtils.isNotEmpty(projectAndContractId) && StringUtils.isNotEmpty(userId)) {
+                            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));
+                        }
+                    }
+                }
+            }
+
+            return R.data(true);
+        }
+        return R.data(false);
+    }
+
+    /**
+     * 获取当前合同段的上报批次
+     *
+     * @param projectId  项目ID
+     * @param contractId 合同段ID
+     */
+    @GetMapping("/query-batch-list")
+    @ApiOperationSupport(order = 7)
+    @ApiOperation(value = "获取当前合同段的上报批次")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "projectId", value = "项目ID", required = true),
+            @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
+    })
+    public R<List<Task>> queryBatchList(String projectId, String contractId) {
+        return R.data(this.taskService.queryBatchList(projectId, contractId));
+    }
+
+    /**
+     * 获取当前合同段有哪些上报批次
+     *
+     * @param projectId  项目ID
+     * @param contractId 合同段ID
+     */
+    @GetMapping("/query-batch-list-two")
+    @ApiOperationSupport(order = 7)
+    @ApiOperation(value = "获取当前合同段的上报批次")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "projectId", value = "项目ID", required = true),
+            @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
+    })
+    public R<List<String>> queryBatchListTwo(String projectId, String contractId, String type) {
+        if (StringUtils.isBlank(type)) {
+            //为空,以information为主表查询填报资料批次
+            return R.data(this.taskService.queryBatchListTwo(projectId, contractId));
+        } else {
+            //如果type为1内页台账不需要去查询首件批次,type为2只查标记为首件的,type为3只查首件
+            return R.data(this.taskService.queryBatchListThree(projectId, contractId, type));
+        }
+    }
+
+
+    /**
+     * 获取任务类型或任务状态
+     */
+    @GetMapping("/query-task-type-status")
+    @ApiOperationSupport(order = 6)
+    @ApiOperation(value = "获取任务类型或任务状态")
+    public R<List<DictBiz>> queryTaskTypeOrStatus(String typeOrStatus) {
+        return this.dictBizClient.getList(typeOrStatus, "notRoot");
+    }
+
+    /**
+     * 获取已办
+     */
+    @GetMapping("/query-user-done-task-list")
+    @ApiOperationSupport(order = 5)
+    @ApiOperation(value = "获取已办")
+    public R<IPage<TaskVO>> queryUserDoneTaskList(TaskQueryVO queryVO) {
+        //设置获取参数
+        Map<String, Task> masterTaskMap = new HashMap<>();
+        Map<String, TaskParallel> parallelMap = new HashMap<>();
+        List<String> parallelProcessInstanceIds = new ArrayList<>();
+        //统合查询方法
+        this.integrationMethod(queryVO, masterTaskMap, parallelMap, parallelProcessInstanceIds, "2,3");
+
+        //获取已办(基于原生已办)
+        R<Object> rObject = this.newFlowClient.selectDonePage(queryVO.getCurrent(), queryVO.getSize(), queryVO.getOrdType() == null ? 1 : queryVO.getOrdType(), String.join(",", parallelProcessInstanceIds));
+        //处理参数
+        return this.integrationMethod(queryVO, rObject, masterTaskMap, parallelMap, false);
+    }
+
+    /**
+     * 审批页详情
+     */
+    @GetMapping("/query-approval-parameter")
+    @ApiOperationSupport(order = 4)
+    @ApiOperation(value = "审批页详情(单任务时)")
+    public R<TaskApprovalVO> getApprovalTaskParameter(@RequestParam String parallelProcessInstanceId, @RequestParam String formDataId, @RequestParam Integer approvalType) {
+        TaskApprovalVO vo = new TaskApprovalVO();
+        vo.setFormDataId(formDataId);
+        vo.setApprovalType(approvalType);
+        //获取具体业务数据
+        return R.data(this.taskService.queryBusinessData(vo));
+    }
+
+    /**
+     * 审批页pdf数量详情
+     */
+    @GetMapping("/query-approval-parameter-pdf-num")
+    @ApiOperationSupport(order = 14)
+    @ApiOperation(value = "审批页pdf数量详情")
+    public R<Object> getApprovalTaskParameterPdfNum(@RequestParam String url) {
+        String pdfNum = this.commonFileClient.getPdfNum(url);
+        return R.data(pdfNum);
+    }
+
+    /**
+     * 获取当前用户待办流程
+     */
+    @GetMapping("/user-to-do-task-list")
+    @ApiOperationSupport(order = 3)
+    @ApiOperation(value = "获取当前用户待办流程")
+    public R<IPage<TaskVO>> todoUserApprovalTask(TaskQueryVO queryVO) {
+        //设置获取参数
+        Map<String, Task> masterTaskMap = new HashMap<>();
+        Map<String, TaskParallel> parallelMap = new HashMap<>();
+        List<String> parallelProcessInstanceIds = new ArrayList<>();
+        //统合查询方法
+        this.integrationMethod(queryVO, masterTaskMap, parallelMap, parallelProcessInstanceIds, "1");
+        if (masterTaskMap.size() == 0) {
+            return R.data(null);
+        }
+        //获取待办(基于原生待办)
+        R<Object> rObject = this.newFlowClient.selectTodoPage(queryVO.getCurrent(), queryVO.getSize(), queryVO.getOrdType() == null ? 1 : queryVO.getOrdType(), String.join(",", parallelProcessInstanceIds));
+        //处理参数
+        return this.integrationMethod(queryVO, rObject, masterTaskMap, parallelMap, true);
+    }
+
+    /**
+     * 统合查询方法
+     */
+    private void integrationMethod(TaskQueryVO queryVO, Map<String, Task> masterTaskMap, Map<String, TaskParallel> parallelMap, List<String> parallelProcessInstanceIds, String status) {
+        //先查询符合条件的流程
+        LambdaQueryWrapper<Task> wrapper = Wrappers.<Task>lambdaQuery().eq(Task::getIsDeleted, 0)
+                .eq(Task::getProjectId, queryVO.getProjectId()).eq(StringUtils.isNotBlank(queryVO.getBatch()), Task::getBatch, queryVO.getBatch());
+        this.integrationMethod(wrapper, queryVO);
+
+        //符合条件的集合
+        List<Task> masterTaskList = this.taskService.list(wrapper);
+        //根据主表获取附表且当前用户的记录
+        List<String> processInstanceIds = new ArrayList<>();
+        masterTaskList.forEach(task -> {
+            masterTaskMap.put(task.getProcessInstanceId(), task);
+            processInstanceIds.add(task.getProcessInstanceId());
+        });
+
+        if (processInstanceIds.size() > 0) {
+            List<TaskParallel> parallelTaskList = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().in(TaskParallel::getProcessInstanceId, processInstanceIds).eq(TaskParallel::getTaskUser, AuthUtil.getUserId().toString()).eq(TaskParallel::getIsDeleted, 0).in(TaskParallel::getStatus, Arrays.asList(status.split(","))));
+            parallelTaskList.forEach(parallel -> {
+                parallelMap.put(parallel.getParallelProcessInstanceId(), parallel);
+                parallelProcessInstanceIds.add(parallel.getParallelProcessInstanceId());
+            });
+        }
+    }
+
+    private void integrationMethod(LambdaQueryWrapper<Task> wrapper, TaskQueryVO queryVO) {
+        //任务类型
+        if (StringUtils.isNotEmpty(queryVO.getTaskType())) {
+            wrapper.eq(Task::getType, queryVO.getTaskType());
+        }
+        //任务状态
+        if (StringUtils.isNotEmpty(queryVO.getTaskStatus())) {
+            wrapper.eq(Task::getStatus, queryVO.getTaskStatus());
+        }
+        //合同段ID
+        if (StringUtils.isNotEmpty(queryVO.getContractId())) {
+            ContractInfo contractInfo = contractClient.getContractById(Long.valueOf(queryVO.getContractId()));
+            if (contractInfo.getContractType() == 2) {
+                wrapper.eq(Task::getProjectId, queryVO.getProjectId());
+            } else {
+                wrapper.eq(Task::getContractId, queryVO.getContractId());
+            }
+        }
+        //开始结束时间
+        if (StringUtils.isNotEmpty(queryVO.getStartTime()) && StringUtils.isNotEmpty(queryVO.getEndTime())) {
+            wrapper.between(Task::getStartTime, queryVO.getStartTime(), queryVO.getEndTime());
+        }
+        //关键字查询
+        if (StringUtils.isNotEmpty(queryVO.getQueryValue())) {
+            wrapper.like(Task::getTaskName, queryVO.getQueryValue());
+        }
+    }
+
+    /**
+     * 统合处理方法
+     */
+    private R<IPage<TaskVO>> integrationMethod(TaskQueryVO queryVO, R<Object> rObject, Map<String, Task> masterTaskMap, Map<String, TaskParallel> parallelMap, boolean isToDo) {
+        Query query = new Query();
+        query.setCurrent(queryVO.getCurrent());
+        query.setSize(queryVO.getSize());
+        //最终集合
+        List<TaskVO> finalResult = new ArrayList<>();
+        if (rObject.isSuccess()) {
+            //新建一个IPage的实例
+            IPage<BladeFlow> newData = Condition.getPage(query);
+            //使用实例获取具体的类型进行转换
+            IPage flowIPage = JSONObject.parseObject(JSONObject.toJSONString(rObject.getData()), newData.getClass());
+            //本质上这里获取到的集合属于List<JSONObject>,所以需要在这进行一次类型转换,将JSONObject转为BladeFlow
+            List<BladeFlow> result = JSONArray.parseArray(JSONObject.toJSONString(flowIPage.getRecords()), BladeFlow.class);
+
+            if (result != null && result.size() > 0) {
+                //获取相关信息
+                result.forEach(flow -> {
+                    TaskParallel taskParallel = parallelMap.get(flow.getProcessInstanceId());
+                    if (taskParallel != null) {
+                        //查询主表数据
+                        Task task = masterTaskMap.get(taskParallel.getProcessInstanceId());
+
+                        if (task != null) {
+                            //复制数据
+                            TaskVO vo = new TaskVO();
+                            BeanUtils.copyProperties(task, vo);
+                            //设置关键信息
+                            vo.setTypeValue(new Integer("1").equals(vo.getType()) ? "普通任务" : new Integer("2").equals(vo.getType()) ? "验收任务" : "移交任务");
+                            vo.setParallelProcessInstanceId(flow.getProcessInstanceId());
+                            vo.setTaskId(flow.getTaskId());
+                            vo.setTaskStatus(new Integer("1").equals(task.getStatus()) ? "待审批" : new Integer("2").equals(task.getStatus()) ? "已审批" : "已废除", task.getStatus());
+                            vo.setEVisaContent(taskParallel.getEVisaContent());
+                            //获取主流程下所有相关的审批人
+                            List<TaskParallel> linkList = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getProcessInstanceId, task.getProcessInstanceId()).eq(TaskParallel::getIsDeleted, 0));
+                            if (linkList != null && linkList.size() > 0) {
+                                this.integrationMethod(vo, linkList);
+                            }
+
+                            //设置最终集合
+                            finalResult.add(vo);
+                        }
+                    }
+                });
 
 //				//待办的原生方法并没有对数据做分页,所以需要在这里进行手动分页,而已办的原生方法已经做了分页处理
 //				if(!isToDo){
@@ -545,70 +554,70 @@ public class TaskController extends BladeController {
 //					//最终分页数据
 //					return this.getIPageR(query, flowIPage, finalFlowList);
 //				} else {
-					//最终分页数据
-					return this.getIPageR(query, flowIPage, finalResult);
+                //最终分页数据
+                return this.getIPageR(query, flowIPage, finalResult);
 //				}
-			}
-		}
-		return R.data(null);
-	}
-
-	@NotNull
-	private R<IPage<TaskVO>> getIPageR(Query query, IPage flowIPage, List<TaskVO> finalFlowList) {
-		IPage<TaskVO> finalPage = Condition.getPage(query);
-		finalPage.setTotal(flowIPage.getTotal());
-		finalPage.setSize(query.getSize());
-		finalPage.setCurrent(query.getCurrent());
-		finalPage.setRecords(finalFlowList);
-
-		return R.data(finalPage);
-	}
-
-	/**
-	 * 完成/审批任务
-	 */
-	@PostMapping("/complete-approval-task")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "完成/审批任务")
-	public R<Boolean> completeApprovalTask(@RequestBody TaskApprovalVO taskApprovalVO) throws FileNotFoundException {
-		//检查当前用户是否存在等待批次
-		//System.out.println(AuthUtil.getUserId());
-		long batchCount = this.taskBatchService.count(Wrappers.<TaskBatch>lambdaQuery().eq(TaskBatch::getCreateUser, AuthUtil.getUserId()));
-
-		if(batchCount > 0){
-			this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate()
-					.set(TaskParallel::getEVisaContent, "当前等待电签的批次较多,请等待几分钟后刷新页面查看........")
-					.eq(TaskParallel::getParallelProcessInstanceId, taskApprovalVO.getParallelProcessInstanceId()));
-
-			//生成等待批次,任务完成后删除
-			List<TaskApprovalVO> taskApprovalVOS = new ArrayList<>();
-			taskApprovalVOS.add(taskApprovalVO);
-
-			//存在批次,当前审批的追加进队列
-			TaskBatch taskBatch = new TaskBatch(taskApprovalVO.getParallelProcessInstanceId(), JSONObject.toJSONString(taskApprovalVOS));
-			taskBatch.setCreateUser(AuthUtil.getUserId());
-			taskBatch.setCreateTime(new Date());
-			this.taskBatchService.save(taskBatch);
-
-			return R.data(true, "当前等待电签的批次较多,请等待几分钟后刷新页面查看........");
-		} else {
-			//生成等待批次,任务完成后删除
-			List<TaskApprovalVO> taskApprovalVOS = new ArrayList<>();
-			taskApprovalVOS.add(taskApprovalVO);
-			this.taskService.batchCompleteApprovalTask(taskApprovalVOS,AuthUtil.getUserId());
-
-			return R.data(true, "提交成功");
-		}
-	}
-
-	/**
-	 * 上报
-	 */
-	@PostMapping("/start-approval")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "上报", notes = "taskVO对象")
-	public R<Boolean> startApproval(@RequestBody TaskVO taskVO){
-		return this.taskService.startApproval(taskVO) ? R.data(200, true, "操作成功") : R.data(200, false, "操作失败,请联系管理员");
-	}
+            }
+        }
+        return R.data(null);
+    }
+
+    @NotNull
+    private R<IPage<TaskVO>> getIPageR(Query query, IPage flowIPage, List<TaskVO> finalFlowList) {
+        IPage<TaskVO> finalPage = Condition.getPage(query);
+        finalPage.setTotal(flowIPage.getTotal());
+        finalPage.setSize(query.getSize());
+        finalPage.setCurrent(query.getCurrent());
+        finalPage.setRecords(finalFlowList);
+
+        return R.data(finalPage);
+    }
+
+    /**
+     * 完成/审批任务
+     */
+    @PostMapping("/complete-approval-task")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "完成/审批任务")
+    public R<Boolean> completeApprovalTask(@RequestBody TaskApprovalVO taskApprovalVO) throws FileNotFoundException {
+        //检查当前用户是否存在等待批次
+        //System.out.println(AuthUtil.getUserId());
+        long batchCount = this.taskBatchService.count(Wrappers.<TaskBatch>lambdaQuery().eq(TaskBatch::getCreateUser, AuthUtil.getUserId()));
+
+        if (batchCount > 0) {
+            this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate()
+                    .set(TaskParallel::getEVisaContent, "当前等待电签的批次较多,请等待几分钟后刷新页面查看........")
+                    .eq(TaskParallel::getParallelProcessInstanceId, taskApprovalVO.getParallelProcessInstanceId()));
+
+            //生成等待批次,任务完成后删除
+            List<TaskApprovalVO> taskApprovalVOS = new ArrayList<>();
+            taskApprovalVOS.add(taskApprovalVO);
+
+            //存在批次,当前审批的追加进队列
+            TaskBatch taskBatch = new TaskBatch(taskApprovalVO.getParallelProcessInstanceId(), JSONObject.toJSONString(taskApprovalVOS));
+            taskBatch.setCreateUser(AuthUtil.getUserId());
+            taskBatch.setCreateTime(new Date());
+            this.taskBatchService.save(taskBatch);
+
+            return R.data(true, "当前等待电签的批次较多,请等待几分钟后刷新页面查看........");
+        } else {
+            //生成等待批次,任务完成后删除
+            List<TaskApprovalVO> taskApprovalVOS = new ArrayList<>();
+            taskApprovalVOS.add(taskApprovalVO);
+            this.taskService.batchCompleteApprovalTask(taskApprovalVOS, AuthUtil.getUserId());
+
+            return R.data(true, "提交成功");
+        }
+    }
+
+    /**
+     * 上报
+     */
+    @PostMapping("/start-approval")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "上报", notes = "taskVO对象")
+    public R<Boolean> startApproval(@RequestBody TaskVO taskVO) {
+        return this.taskService.startApproval(taskVO) ? R.data(200, true, "操作成功") : R.data(200, false, "操作失败,请联系管理员");
+    }
 
 }

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

@@ -450,10 +450,11 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             for (TaskApprovalVO taskApprovalVO : taskApprovalVOS) {
                 String pdfUrlEVisa = this.completeApprovalTask(taskApprovalVO);
 
-                //TODO ============== 电签成功,修改试验状态,关联工程部位信息pdf(只有电签成功,才修改) ==============
+                //TODO ============== 电签成功,修改试验状态,关联工程部位信息pdf(只有电签成功,才修改) liuYc 2023-03-16 ==============
                 if (StringUtils.isNotEmpty(pdfUrlEVisa)){
                     this.iTrialSelfInspectionRecordService.updateTrialSelfInspectionRecordStatus(pdfUrlEVisa, taskApprovalVOS);
                 }
+
             }
             //删除掉对应批次
             this.taskBatchService.deletedById(batchId);

+ 1 - 16
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java

@@ -484,6 +484,7 @@ public class TrialSelfInspectionRecordServiceImpl
                         );
 
                         TrialSelfInspectionRecord record = baseMapper.selectById(trialSelfInspectionRecordId);
+                        //此时的record.getPdfUrl()为电签后的pdf信息
                         if (("已审批").equals(record.getTaskStatus()) && (new Integer(1)).equals(record.getDetectionResult()) && (new Integer(1)).equals(record.getDetectionCategory())) {
                             /**
                              * 在资料填报工序-预览全部pdf时再拼接合并显示,当前只做储存(如果当前资料填报工序节点有其他多个试验记录pdf关联信息,那么合并存储,否则直接存储)
@@ -715,22 +716,6 @@ public class TrialSelfInspectionRecordServiceImpl
                 throw new ServiceException("保存实体表数据生成pdf时发生异常" + e.getMessage());
             }
 
-            //------关联工程及用途关系新增或删除------(已做修改,在审批修改状态时,再建立关联关系)
-            /*if (StringUtils.isEmpty(obj.getProjectPosition())) {
-                String delSql = "delete from u_trial_self_quality_project where self_id = " + obj.getId();
-                jdbcTemplate.execute(delSql);
-            } else {
-                String delSql = "delete from u_trial_self_quality_project where self_id = " + obj.getId();
-                jdbcTemplate.execute(delSql);
-
-                //保留新增
-                List<Long> recordIds = Func.toLongList(obj.getProjectPosition());
-                for (Long recordNodeId : recordIds) {
-                    String insertSql = "insert into u_trial_self_quality_project(id,self_id,quality_node_id) values (" + SnowFlakeUtil.getId() + "," + obj.getId() + "," + recordNodeId + ")";
-                    jdbcTemplate.execute(insertSql);
-                }
-            }*/
-
             //------关联原材料检测报告------
             RawMaterialSubmitRelationDTO relationDTO = new RawMaterialSubmitRelationDTO();
             relationDTO.setId(obj.getId().toString());

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

@@ -102,10 +102,10 @@ public class EVisaServiceImpl implements EVisaService {
 
     @Override
     public String certification(String pdfUrl, String fileName, String contractId) {
-        try{
+        try {
             //根据当前合同段获取相关的证书
             List<SignPfxFile> pfxFiles = this.signPfxClient.querySignPfxByUserIdOrContractId("", contractId);
-            if(pfxFiles == null || pfxFiles.size() <= 0){
+            if (pfxFiles == null || pfxFiles.size() <= 0) {
                 return NOT_PFX_OR_FILE;
             }
             //查询合同段信息
@@ -113,17 +113,17 @@ public class EVisaServiceImpl implements EVisaService {
 
             //找到合同章
             SignPfxFile contractPfx = null;
-            for(SignPfxFile pfxFile : pfxFiles){
-                if(new Integer("1").equals(contract.getContractType())){
+            for (SignPfxFile pfxFile : pfxFiles) {
+                if (new Integer("1").equals(contract.getContractType())) {
                     //施工方
-                    if("2".equals(pfxFile.getPfxType())){
+                    if ("2".equals(pfxFile.getPfxType())) {
                         //找到当前合同段的合同章类型
                         contractPfx = pfxFile;
                         break;
                     }
-                } else if(new Integer("2").equals(contract.getContractType())){
+                } else if (new Integer("2").equals(contract.getContractType())) {
                     //监理方
-                    if("3".equals(pfxFile.getPfxType())){
+                    if ("3".equals(pfxFile.getPfxType())) {
                         //找到当前合同段的合同章类型
                         contractPfx = pfxFile;
                         break;
@@ -131,7 +131,7 @@ public class EVisaServiceImpl implements EVisaService {
                 }
             }
             //没有找到合同章,直接返回
-            if(contractPfx == null){
+            if (contractPfx == null) {
                 return NOT_PFX_OR_FILE;
             }
 
@@ -144,7 +144,7 @@ public class EVisaServiceImpl implements EVisaService {
             //获取PDF文件
             PDDocument document = PDDocument.load(pdfInputStream);
             int page = document.getPages().getCount();
-            for(int i = 0; i < page; i ++){
+            for (int i = 0; i < page; i++) {
                 SealStrategyVO vo = new SealStrategyVO();
                 vo.setSealCode(EVisaConstant.SIGN_SEAL_CODE + contractPfx.getCertificatePassword());
                 vo.setSealPassword(contractPfx.getCertificatePassword());
@@ -155,7 +155,7 @@ public class EVisaServiceImpl implements EVisaService {
                 vo.setSealType("2");
                 vo.setLx("100");
                 vo.setLy("100");
-                vo.setPage(( i + 1) + "");
+                vo.setPage((i + 1) + "");
                 sealStrategyVOS.add(vo);
             }
             SealPdfVO pdfVO = new SealPdfVO();
@@ -166,33 +166,33 @@ public class EVisaServiceImpl implements EVisaService {
             //兼容大文件签章
             Object[] result;
             //大于50M的单个文件采用大文件签章处理
-            if(fileByte.length > 52428800){
+            if (fileByte.length > 52428800) {
                 result = null;
             } else {
                 //普通文件签章
                 result = this.signPdfByAXQZ(pdfVO, fileByte);
             }
-            if(result != null){
-                if(result[0] != null){
-                    byte[] newPdfData = (byte[])result[0];
+            if (result != null) {
+                if (result[0] != null) {
+                    byte[] newPdfData = (byte[]) result[0];
                     MultipartFile files = new MockMultipartFile("file", SnowFlakeUtil.getId() + ".pdf", "text/plain", IOUtils.toByteArray(new ByteArrayInputStream(newPdfData)));
                     //重新上传
                     BladeFile bladeFile = this.newIOSSClient.uploadFileByInputStream(files);
-                    if(bladeFile != null){
+                    if (bladeFile != null) {
                         return SUCCESS + "@@@@" + bladeFile.getLink();
                     } else {
                         return ERROR;
                     }
                 } else {
                     String s = result[1].toString();
-                    return s.contains("600619") ? "认证失败! " + fileName + "-文件存在无效签名。" : "认证失败!"+"原因:" + s;
+                    return s.contains("600619") ? "认证失败! " + fileName + "-文件存在无效签名。" : "认证失败!" + "原因:" + s;
                 }
             } else {
                 //电签失败 ,接口返回认证失败
                 return "认证失败!认证接口调用异常";
             }
 
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
 
@@ -201,6 +201,7 @@ public class EVisaServiceImpl implements EVisaService {
 
     /**
      * 合同章 签字
+     *
      * @param task
      * @param finalPdfUrl
      * @return
@@ -209,36 +210,36 @@ public class EVisaServiceImpl implements EVisaService {
     public String eVisaContractSeal(EVisaTaskApprovalVO task, String finalPdfUrl) {
         //获取任务对应表格的电签配置(合同张)
         List<JSONObject> eVisaConfigList = this.taskClient.queryBusinessTableEVisaConfig(task.getParallelProcessInstanceId(), "true");
-        if(eVisaConfigList == null || eVisaConfigList.size() == 0){
+        if (eVisaConfigList == null || eVisaConfigList.size() == 0) {
             //没有电签配置,默认当前任务为不签字审批,返回成功
             return finalPdfUrl;
         }
 
         String sysBatch = ParamCache.getValue(CommonConstant.SYS_USER_TASK_BATCH);
         int batch = 2;
-        if(CommonUtil.checkIsBigDecimal(sysBatch)){
+        if (CommonUtil.checkIsBigDecimal(sysBatch)) {
             batch = new Integer(sysBatch);
         }
 
         //确定合同段并获取合同章
         List<SignPfxFile> userPfxList = this.signPfxClient.querySignPfxByUserIdOrContractId("", this.taskClient.queryTaskContractId(task.getParallelProcessInstanceId()));
-        if(userPfxList == null || userPfxList.size() <= 0){
+        if (userPfxList == null || userPfxList.size() <= 0) {
             //没有签章,不执行电签
             return finalPdfUrl;
         }
 
         //上锁
         System.out.println(AuthUtil.getUserId().toString());
-        if(DistributedRedisLock.acquire(AuthUtil.getUserId().toString(), batch)){
-            try{
+        if (DistributedRedisLock.acquire(AuthUtil.getUserId().toString(), batch)) {
+            try {
                 //准备签章策略
                 List<SealStrategyVO> sealStrategyVOS = new ArrayList<>();
-                for(JSONObject eVisaConfig : eVisaConfigList){
+                for (JSONObject eVisaConfig : eVisaConfigList) {
                     //找到类型与之对应的合同章
                     Iterator<SignPfxFile> iterator = userPfxList.iterator();
-                    while (iterator.hasNext()){
+                    while (iterator.hasNext()) {
                         SignPfxFile next = iterator.next();
-                        if(eVisaConfig.getString("type").equals(next.getPfxType())){
+                        if (eVisaConfig.getString("type").equals(next.getPfxType())) {
                             //设置签章策略
                             SealStrategyVO vo = new SealStrategyVO();
                             vo.setSealCode(EVisaConstant.SIGN_SEAL_CODE + next.getId());
@@ -268,17 +269,17 @@ public class EVisaServiceImpl implements EVisaService {
                 byte[] fileByte = CommonUtil.InputStreamToBytes(CommonUtil.getOSSInputStream(finalPdfUrl));
                 //执行电签
                 Object[] result = this.signPdfByAXQZ(pdfVO, fileByte);
-                if(result != null){
-                    if(result[0] != null){
-                        MultipartFile newFiles = new MockMultipartFile("file", SnowFlakeUtil.getId() + ".pdf", "text/plain", IOUtils.toByteArray(new ByteArrayInputStream((byte[])result[0])));
+                if (result != null) {
+                    if (result[0] != null) {
+                        MultipartFile newFiles = new MockMultipartFile("file", SnowFlakeUtil.getId() + ".pdf", "text/plain", IOUtils.toByteArray(new ByteArrayInputStream((byte[]) result[0])));
                         //重新上传
                         BladeFile bladeFile = this.newIOSSClient.uploadFileByInputStream(newFiles);
-                        if(bladeFile != null){
+                        if (bladeFile != null) {
                             finalPdfUrl = bladeFile.getLink();
                         }
                     }
                 }
-            }catch (Exception e){
+            } catch (Exception e) {
                 e.printStackTrace();
             }
         }
@@ -291,6 +292,7 @@ public class EVisaServiceImpl implements EVisaService {
 
     /**
      * 个人-电签信息
+     *
      * @param task
      * @return
      */
@@ -301,38 +303,44 @@ public class EVisaServiceImpl implements EVisaService {
         //用户默认的电签批次参数
         String sysBatch = ParamCache.getValue(CommonConstant.SYS_USER_TASK_BATCH);
         int batch = 2;
-        if(CommonUtil.checkIsBigDecimal(sysBatch)){
+        if (CommonUtil.checkIsBigDecimal(sysBatch)) {
             batch = new Integer(sysBatch);
         }
 
         //根据任务类型获取对应的文件信息
         TaskApprovalVO taskFile = this.taskClient.queryBusinessDataTask(JSONObject.parseObject(JSONObject.toJSONString(task), TaskApprovalVO.class));
-        if(taskFile == null || taskFile.getApprovalFileList().size() <= 0){
+        if (taskFile == null || taskFile.getApprovalFileList().size() <= 0) {
             //没有找到业务文件,取消签章
             return NOT_PFX_OR_FILE;
         }
 
         //获取任务对应表格的电签配置
         List<JSONObject> eVisaConfigList = this.taskClient.queryBusinessTableEVisaConfig(task.getParallelProcessInstanceId(), "false");
-        if(eVisaConfigList == null || eVisaConfigList.size() == 0){
+        if (eVisaConfigList == null || eVisaConfigList.size() == 0) {
             //没有电签配置,默认当前任务为不签字审批,返回成功
             return SUCCESS + "@@@@" + taskFile.getApprovalFileList().get(0).getFileUrl();
         }
 
         //获取当前用户的证书信息
         List<SignPfxFile> userPfxList = this.signPfxClient.querySignPfxByUserIdOrContractId(AuthUtil.getUserId().toString(), "");
-        if(userPfxList == null || userPfxList.size() <= 0){
+        if (userPfxList == null || userPfxList.size() <= 0) {
             //没有签章,不执行电签
             return NOT_PFX_OR_FILE;
         }
 
         //上锁
-        if(DistributedRedisLock.acquire(AuthUtil.getUserId().toString(), batch)){
-            try{
+        if (DistributedRedisLock.acquire(AuthUtil.getUserId().toString(), batch)) {
+            try {
                 //获取需要签章的数据
                 List<TaskApprovalVO.ApprovalFile> files = taskFile.getApprovalFileList();
                 //这里的文件只会是一张拼接好的PDF
-                for(TaskApprovalVO.ApprovalFile file : files){
+                for (TaskApprovalVO.ApprovalFile file : files) {
+
+                    if (file.getFileName().contains("(关联试验文件)") || file.getFileName().contains("(关联试验工程部位信息文件)") || file.getFileName().contains("(原材料检测报告)")) {
+                        //TODO ============== 试验相关的关联文件不电签 liuYC 2023-03-17 ==============
+                        continue;
+                    }
+
                     //准备签章策略
                     List<SealStrategyVO> sealStrategyVOS = new ArrayList<>();
                     for (JSONObject eVisaConfig : eVisaConfigList) {
@@ -357,12 +365,12 @@ public class EVisaServiceImpl implements EVisaService {
                     byte[] fileByte = CommonUtil.InputStreamToBytes(CommonUtil.getOSSInputStream(file.getFileUrl()));
                     //执行电签
                     Object[] result = this.signPdfByAXQZ(pdfVO, fileByte);
-                    if(result != null){
-                        if(result[0] != null){
-                            MultipartFile newFiles = new MockMultipartFile("file", SnowFlakeUtil.getId() + ".pdf", "text/plain", IOUtils.toByteArray(new ByteArrayInputStream((byte[])result[0])));
+                    if (result != null) {
+                        if (result[0] != null) {
+                            MultipartFile newFiles = new MockMultipartFile("file", SnowFlakeUtil.getId() + ".pdf", "text/plain", IOUtils.toByteArray(new ByteArrayInputStream((byte[]) result[0])));
                             //重新上传
                             BladeFile bladeFile = this.newIOSSClient.uploadFileByInputStream(newFiles);
-                            if(bladeFile != null){
+                            if (bladeFile != null) {
                                 resultMessage = SUCCESS + "@@@@" + bladeFile.getLink();
                             } else {
                                 resultMessage = E_VISA_ERROR;
@@ -373,10 +381,8 @@ public class EVisaServiceImpl implements EVisaService {
                     } else {
                         resultMessage = E_VISA_ERROR;
                     }
-
                 }
-
-            }catch (Exception e){
+            } catch (Exception e) {
                 e.printStackTrace();
             }
         }
@@ -388,6 +394,7 @@ public class EVisaServiceImpl implements EVisaService {
 
     /**
      * 东方 中讯
+     *
      * @throws Exception
      */
     public static void signPdfByDFZX(SealPdfVO pdfVO, byte[] fileByte) throws Exception {
@@ -452,13 +459,13 @@ public class EVisaServiceImpl implements EVisaService {
     /**
      * 安心 - 签章
      */
-    private Object[] signPdfByAXQZ(SealPdfVO pdfVO, byte[] fileByte){
+    private Object[] signPdfByAXQZ(SealPdfVO pdfVO, byte[] fileByte) {
         Object[] result = new Object[3];
-        try{
+        try {
             PaperlessClient paperlessClient = new PaperlessClient(SIGN_HOST, SIGN_PORT, 300000, 36000000);
             paperlessClient.setSSL(false);
             //*****************************************************************************
-            CompoundSealPdfListDetachedRequest compoundSealPdfListDetachedRequest = new  CompoundSealPdfListDetachedRequest();
+            CompoundSealPdfListDetachedRequest compoundSealPdfListDetachedRequest = new CompoundSealPdfListDetachedRequest();
 
             RequestHead requestHead = new RequestHead();
             //业务流水号 非空
@@ -471,7 +478,7 @@ public class EVisaServiceImpl implements EVisaService {
             String channelCode = "";
 
             //设置属性
-            requestHead.setBasicInfo(transactionNo, organizationCode,operatorCode,channelCode);
+            requestHead.setBasicInfo(transactionNo, organizationCode, operatorCode, channelCode);
 
             compoundSealPdfListDetachedRequest.setHead(requestHead);
 
@@ -489,8 +496,8 @@ public class EVisaServiceImpl implements EVisaService {
             requestBody.setPdfBeans(pdfBeans);
             //***********************构造机构章策略 ********************************
             List<SealStrategy> sealStrategies = this.generateSealStrategies(pdfVO.getStrategyVoList());
-            if(null == sealStrategies || sealStrategies.size() <= 0){
-                logger.info("【电签模块】{}","签章策略为空");
+            if (null == sealStrategies || sealStrategies.size() <= 0) {
+                logger.info("【电签模块】{}", "签章策略为空");
                 return null;
             }
             requestBody.setSealStrategies(sealStrategies);
@@ -508,26 +515,26 @@ public class EVisaServiceImpl implements EVisaService {
             ResponseDto responseDto = paperlessClient.execute(compoundSealPdfListDetachedRequest);
 
             //******************************解析响应结果 *********************************************
-            CompoundSealPdfListDetachedResponse compoundSealPdfListDetachedResponse = (CompoundSealPdfListDetachedResponse)responseDto;
-            ResponseHead  responseHead = compoundSealPdfListDetachedResponse.getHead();
+            CompoundSealPdfListDetachedResponse compoundSealPdfListDetachedResponse = (CompoundSealPdfListDetachedResponse) responseDto;
+            ResponseHead responseHead = compoundSealPdfListDetachedResponse.getHead();
             CompoundSealPdfListDetachedResponseBody responseBody = compoundSealPdfListDetachedResponse.getBody();
-            if(ClientConstants.CODE_SUCCESS.equals(responseHead.getCode())){
+            if (ClientConstants.CODE_SUCCESS.equals(responseHead.getCode())) {
                 List<PdfBean4Response> pdfBeanList = responseBody.getPdfBeans();
-                if(pdfBeanList!=null && pdfBeanList.size()>0){
+                if (pdfBeanList != null && pdfBeanList.size() > 0) {
                     PdfBean4Response pdfBean4Response = pdfBeanList.get(0);
                     result[0] = pdfBean4Response.getPdf();
                 }
-            }else{
-                logger.info("【电签模块】{}","签章响应Response:" + compoundSealPdfListDetachedResponse);
-                logger.info("【电签模块】{}","签章响应code:" + responseHead.getCode());
+            } else {
+                logger.info("【电签模块】{}", "签章响应Response:" + compoundSealPdfListDetachedResponse);
+                logger.info("【电签模块】{}", "签章响应code:" + responseHead.getCode());
                 result[0] = null;
                 result[1] = compoundSealPdfListDetachedResponse.toString();
                 result[2] = responseHead.getMessage();
             }
 
-        } catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
-            logger.info("【电签模块】{}","电签签章接口调用异常");
+            logger.info("【电签模块】{}", "电签签章接口调用异常");
             e.printStackTrace();
             return null;
         }
@@ -539,16 +546,16 @@ public class EVisaServiceImpl implements EVisaService {
      * 构造机构章签章策略
      * 使用 :1-印章绑定的图片
      */
-    private List<SealStrategy> generateSealStrategies(List<SealStrategyVO> strategyVoList){
+    private List<SealStrategy> generateSealStrategies(List<SealStrategyVO> strategyVoList) {
         List<SealStrategy> sealStrategies = new ArrayList<>();
 
-        if(strategyVoList == null || strategyVoList.size() <= 0){
+        if (strategyVoList == null || strategyVoList.size() <= 0) {
             return null;
         }
 
         //构建策略
-        for(SealStrategyVO vo : strategyVoList){
-            try{
+        for (SealStrategyVO vo : strategyVoList) {
+            try {
                 SealStrategy sealStrategy = new SealStrategy();
 
                 // 使用图片签章
@@ -572,9 +579,9 @@ public class EVisaServiceImpl implements EVisaService {
                 String visible = "1";
                 sealStrategy.setVisible(visible);
 
-                if(!"authentication".equals(vo.getImageUrl())){
+                if (!"authentication".equals(vo.getImageUrl())) {
                     String imageUrl = vo.getImageUrl();
-                    if(StringUtils.isEmpty(imageUrl)){
+                    if (StringUtils.isEmpty(imageUrl)) {
                         logger.info("签章图片url为null,签章人员:" + vo.getSealPerson());
                         return null;
                     }
@@ -584,10 +591,10 @@ public class EVisaServiceImpl implements EVisaService {
                     imageData = ImageUtil.transferAlpha(imageData);
 
                     //设置大小
-                    if(vo.isCompanySeal()){
-                        imageData = ImageUtil.resizeImage(imageData,540,540);
-                    }else {
-                        imageData = ImageUtil.resizeImage(imageData,480,132);
+                    if (vo.isCompanySeal()) {
+                        imageData = ImageUtil.resizeImage(imageData, 540, 540);
+                    } else {
+                        imageData = ImageUtil.resizeImage(imageData, 480, 132);
 //                        imageData = ImageUtil.resizeImage(imageData,540,540);
                     }
 
@@ -596,7 +603,7 @@ public class EVisaServiceImpl implements EVisaService {
 
                     if (imageData != null) {
                         //图片进行Base64编码/
-                        String imageDataString =  new String(Base64.encode(imageData), StandardCharsets.UTF_8);
+                        String imageDataString = new String(Base64.encode(imageData), StandardCharsets.UTF_8);
                         sealStrategy.setSealImage(imageDataString);
                     }
                 } else {
@@ -604,7 +611,7 @@ public class EVisaServiceImpl implements EVisaService {
                     sealStrategy.setSealImage(EVisaConstant.base64String);
                 }
 
-                sealStrategy.setSealMiscInfo(vo.getSealPerson(), vo.getSealLocation(),  vo.getSealReason());
+                sealStrategy.setSealMiscInfo(vo.getSealPerson(), vo.getSealLocation(), vo.getSealReason());
 
                 //关键字签章
                 sealStrategy.setSealType(vo.getSealType());
@@ -614,14 +621,14 @@ public class EVisaServiceImpl implements EVisaService {
                     sealStrategy.setOffsetY(vo.getOffSetY());
                 } else if (vo.getSealType().equals("2")) {
                     //设置PDF坐标原点,签章图片定位点   默认为PDF左下角,签章图片定位为左下角
-                    if(StringUtils.isNotEmpty(vo.getIsCenterCoordinate())){
+                    if (StringUtils.isNotEmpty(vo.getIsCenterCoordinate())) {
                         sealStrategy.setIsCenterCoordinate(vo.getIsCenterCoordinate());
                     }
                     sealStrategy.setSignWithCoordinate(vo.getPage(), vo.getLx(), vo.getLy());
                 }
 
                 sealStrategies.add(sealStrategy);
-            }catch (Exception e){
+            } catch (Exception e) {
                 e.printStackTrace();
             }
         }
@@ -635,7 +642,7 @@ public class EVisaServiceImpl implements EVisaService {
         BufferedImage gridImage = ImageIO.read(new ByteArrayInputStream(bytes));
         final String formatName = "png";
         byte[] result = new byte[0];
-        for (Iterator<ImageWriter> iw = ImageIO.getImageWritersByFormatName(formatName); iw.hasNext();) {
+        for (Iterator<ImageWriter> iw = ImageIO.getImageWritersByFormatName(formatName); iw.hasNext(); ) {
             ImageWriter writer = iw.next();
             ImageWriteParam writeParam = writer.getDefaultWriteParam();
             ImageTypeSpecifier typeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB);
@@ -683,7 +690,7 @@ public class EVisaServiceImpl implements EVisaService {
      */
     @Override
     public String createSeal(EVisaMakeSealVO vo) {
-        try{
+        try {
             PaperlessClient paperlessClient = new PaperlessClient(SIGN_HOST, SIGN_PORT, 3000, 20000);
             paperlessClient.setSSL(false);
 
@@ -710,7 +717,7 @@ public class EVisaServiceImpl implements EVisaService {
             String privateKeyPassword = vo.getPfxPassword();
             String pkcs12Password = PwdEncryptUtil.encrypto(privateKeyPassword);
 
-            sealCertBean.setMakeSealWithPkcs12(pkcs12String, pkcs12Password, BaseConstants.KEY_ALG_RSA , BaseConstants.KEY_ALG_LENGTH_2048);
+            sealCertBean.setMakeSealWithPkcs12(pkcs12String, pkcs12Password, BaseConstants.KEY_ALG_RSA, BaseConstants.KEY_ALG_LENGTH_2048);
             sealCertBean.setUserInfo(vo.getUserName(), vo.getIdType(), vo.getIdNumber());
 
             // 构造sealInfo
@@ -727,27 +734,27 @@ public class EVisaServiceImpl implements EVisaService {
             MakeSealRequest requestBean = new MakeSealRequest();
             requestBean.setHead(requestHeadBean);
             requestBean.setBody(requestBodyBean);
-            logger.info("【电签模块】{}","创建印章请求Request:"+requestBean);
+            logger.info("【电签模块】{}", "创建印章请求Request:" + requestBean);
             // ------调用接口------
             ResponseDto responseDto = paperlessClient.execute(requestBean);
 
             // 接收响应报文对象
             MakeSealResponse responseBean = (MakeSealResponse) responseDto;
-            logger.info("【电签模块】{}","创建印章响应Response:"+requestBean);
+            logger.info("【电签模块】{}", "创建印章响应Response:" + requestBean);
 
             // 响应报文头
             ResponseHead responseHeadBean = responseBean.getHead();
             // 响应报文体
             MakeSealResponseBody responseBodyBean = responseBean.getBody();
-            if(responseBodyBean != null){
+            if (responseBodyBean != null) {
                 logger.info("【电签模块】{}", "创建印章成功==========certDn: " + responseBodyBean.getCertDn() + " ; message: " + responseHeadBean.getMessage());
                 //请求结果
                 return responseHeadBean.getMessage();
-            } else if(responseHeadBean.getMessage().contains("is exist")) {
+            } else if (responseHeadBean.getMessage().contains("is exist")) {
                 logger.info("【电签模块】{}", responseHeadBean.getMessage());
                 return "error";
             }
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
 
@@ -756,7 +763,7 @@ public class EVisaServiceImpl implements EVisaService {
 
     @Override
     public List<CertBean> onlineCheckSeal(String pdfUrl) {
-        try{
+        try {
             PaperlessClient paperlessClient = new PaperlessClient(SIGN_HOST, SIGN_PORT, 300000, 1800000);
             paperlessClient.setSSL(false);
 
@@ -773,7 +780,7 @@ public class EVisaServiceImpl implements EVisaService {
             //渠道编码 可为空
             String channelCode = EVisaConstant.channelCode;
             //设置属性
-            requestHead.setBasicInfo(transactionNo, organizationCode,operatorCode,channelCode);
+            requestHead.setBasicInfo(transactionNo, organizationCode, operatorCode, channelCode);
 
             verifyPdfSealRequest.setHead(requestHead);
             /*==================================================================================*/
@@ -798,18 +805,18 @@ public class EVisaServiceImpl implements EVisaService {
             ResponseDto responseDto = paperlessClient.execute(verifyPdfSealRequest);
             /*==================================================================================*/
 
-            VerifyPdfSealResponse verifyPdfSealResponse = (VerifyPdfSealResponse)responseDto;
+            VerifyPdfSealResponse verifyPdfSealResponse = (VerifyPdfSealResponse) responseDto;
 
-            ResponseHead  responseHead = verifyPdfSealResponse.getHead();
+            ResponseHead responseHead = verifyPdfSealResponse.getHead();
             VerifyPdfSealResponseBody responseBody = verifyPdfSealResponse.getBody();
 
-            if(ClientConstants.CODE_SUCCESS.equals(responseHead.getCode())){
+            if (ClientConstants.CODE_SUCCESS.equals(responseHead.getCode())) {
                 return responseBody.getCertBeans();
             } else {
-                logger.info("【电签模块】{}","验签接口响应code:" + responseHead.getCode());
+                logger.info("【电签模块】{}", "验签接口响应code:" + responseHead.getCode());
                 return null;
             }
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             return null;
         }

+ 0 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -1529,7 +1529,6 @@ public class ExcelTabController extends BladeController {
             if (stringObjectMap.get("e_visa_pdf_url") != null) {
                 //优先使用电签的pdf
                 pdfUrl = stringObjectMap.get("e_visa_pdf_url");
-
             }
 
             if (stringObjectMap.get("pdf_trial_url") != null || stringObjectMap.get("pdf_trial_url_position") != null) {