Bläddra i källkod

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java
chenr 4 månader sedan
förälder
incheckning
1a757645bd
30 ändrade filer med 472 tillägg och 161 borttagningar
  1. 1 1
      blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java
  2. 0 2
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ExcelTabClient.java
  3. 0 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ExcelTabClientFallBack.java
  4. 2 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java
  5. 4 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/SignPfxFilePreVo.java
  6. 25 0
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  7. 4 4
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java
  8. 17 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TrialMaterialController.java
  9. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/IEntrustInfoService.java
  10. 1 3
      blade-service/blade-business/src/main/java/org/springblade/business/service/ITaskService.java
  11. 9 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/EntrustInfoServiceImpl.java
  12. 2 2
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java
  13. 86 9
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  14. 8 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java
  15. 3 4
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/EVisaController.java
  16. 5 4
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVisaServiceImpl.java
  17. 77 23
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  18. 37 22
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/SignPfxFileController.java
  19. 0 16
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ExcelTabClientImpl.java
  20. 9 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java
  21. 8 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaTurnPoint.java
  22. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.java
  23. 7 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml
  24. 1 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/ISignPfxFilePreService.java
  25. 27 14
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  26. 44 18
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/SignPfxFilePreServiceImpl.java
  27. 6 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/TextdictInfoServiceImpl.java
  28. 10 8
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
  29. 75 10
      blade-service/blade-manager/src/main/java/org/springblade/manager/utils/FileUtils.java
  30. 1 2
      blade-service/blade-user/src/main/java/org/springblade/system/user/controller/WbsTreeController.java

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

@@ -85,7 +85,7 @@ public class OssBuilder {
         String tenantId = AuthUtil.getTenantId();
         Oss oss = getOss(tenantId, code);
         //oss.setEndpoint("http://183.247.216.148:9000/");
-       oss.setEndpoint("https://oss-cn-shenzhen.aliyuncs.com/");
+       //oss.setEndpoint("https://oss-cn-shenzhen.aliyuncs.com/");
         Oss ossCached = ossPool.get(tenantId);
         OssTemplateRe template = templatePool.get(tenantId);
         // 若为空或者不一致,则重新加载

+ 0 - 2
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ExcelTabClient.java

@@ -10,8 +10,6 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RequestParam;
 
-import javax.servlet.http.HttpServletRequest;
-
 import java.util.List;
 
 import static org.springblade.core.launch.constant.AppConstant.APPLICATION_NAME_PREFIX;

+ 0 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ExcelTabClientFallBack.java

@@ -10,7 +10,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Component;
 
-import javax.servlet.http.HttpServletRequest;
 import java.util.List;
 
 @Component

+ 2 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java

@@ -11,7 +11,6 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
-import java.util.Set;
 
 import static org.springblade.core.launch.constant.AppConstant.APPLICATION_NAME_PREFIX;
 
@@ -185,4 +184,6 @@ public interface WbsTreeContractClient {
     @GetMapping(API_PREFIX + "/searchNodeAllTableInfo")
     List<AppWbsTreeContractVO> searchNodeAllTableInfo(@RequestParam String primaryKeyId, @RequestParam String type, @RequestParam String contractId, @RequestParam String projectId, @RequestParam Long userId);
 
+    @PostMapping(API_PREFIX + "/selectContractJLForm")
+    List<WbsTreeContractTreeVOS> selectContractJLForm(@RequestBody List<Long> removeList);
 }

+ 4 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/SignPfxFilePreVo.java

@@ -6,5 +6,9 @@ import org.springframework.web.multipart.MultipartFile;
 
 @Data
 public class SignPfxFilePreVo extends SignPfxFilePre {
+    //接收的图片文件
     private MultipartFile file;
+    private  String preUrl;
+    //接收的图片地址
+    private String fileStr;
 }

+ 25 - 0
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -2772,7 +2772,32 @@ public class InformationWriteQueryController extends BladeController {
             }
         }
     }
+    /**
+     * 查询当前节点下的数据 是否包含监理填报数据
+     */
+    @PostMapping("/removeContractTreeNodeJudge")
+    @ApiOperationSupport(order = 11)
+    @ApiOperation(value = "删除节点前的校验判断")
+    @ApiImplicitParam(name = "ids", value = "节点的primaryKeyId")
+    public R removeContractTreeNodeJudge(@RequestParam String ids) {
+        //删除的节点
+        WbsTreeContract removeNode = this.wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(Long.parseLong(ids));
+
+        List<WbsTreeContract> removeNodeList = new ArrayList<>();
+        this.currentNodeAllChild(removeNodeList, Collections.singletonList(removeNode), removeNode.getContractId());
 
+        //获取pKeyId
+        List<Long> removeList = removeNodeList.stream().map(WbsTreeContract::getPKeyId).distinct().collect(Collectors.toList());
+        removeList.add(Long.parseLong(ids));
+        if (removeList.size() > 0) {
+            /** 判断是否子节点有上存在监理填报内容的资料,提示用户谨慎操作*/
+            List<WbsTreeContractTreeVOS> list =  this.wbsTreeContractClient.selectContractJLForm(removeList);
+            if (list != null && list.size() >= 1) {
+                return R.data(300, false, "当前节点已存在监理资料,删除节点会把监理数据一并删除(永久删除),建议与监理方确认是否能删除该数据,请慎重删除!删除后果请自行负责。");
+            }
+        }
+        return R.data(true);
+    }
     /**
      * 删除节点
      *

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

@@ -24,11 +24,12 @@ import org.springblade.archive.feign.ArchiveAutoClient;
 import org.springblade.archive.feign.ArchiveExpertConclusionClient;
 import org.springblade.business.dto.*;
 import org.springblade.business.entity.*;
-import org.springblade.business.service.*;
+import org.springblade.business.service.IDefaultConfigService;
+import org.springblade.business.service.ITaskParallelService;
+import org.springblade.business.service.ITaskService;
 import org.springblade.business.service.impl.MessageWarningServiceImpl;
 import org.springblade.business.utils.StringSPUtils;
 import org.springblade.business.vo.*;
-import org.springblade.common.constant.ClientIdConstant;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.log.exception.ServiceException;
@@ -69,7 +70,6 @@ import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletRequest;
 import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.io.InputStream;
 import java.text.SimpleDateFormat;
 import java.time.Duration;
 import java.util.*;
@@ -1619,7 +1619,7 @@ public class TaskController extends BladeController {
             return R.fail("请选择一条记录");
         }
         String header = request.getHeader("Blade-Auth");
-        taskService.reSigningEVisa(dto.getClassifyType(), dto.getTaskIds(), dto.getContractId(), dto.getProjectId(), dto.getType(), header);
+        taskService.reSigningEVisa(dto.getClassifyType(), dto.getTaskIds(), dto.getContractId(), dto.getProjectId(), dto.getType(), header,request);
         return R.success("任务已经成功提交重签,请耐心等待!");
     }
 

+ 17 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/TrialMaterialController.java

@@ -5,6 +5,7 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springblade.business.dto.TrialMaterialMobilizationDTO;
 import org.springblade.business.dto.TrialSampleInfoDTO;
 import org.springblade.business.entity.TrialMaterialMobilization;
@@ -24,6 +25,8 @@ import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springframework.dao.DataAccessException;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -31,6 +34,7 @@ import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.util.List;
 
+@Slf4j
 @RestController
 @AllArgsConstructor
 @RequestMapping("/material")
@@ -39,6 +43,7 @@ public class TrialMaterialController extends BladeController {
 
     private final ITrialMaterialMobilizationService iTrialMaterialMobilizationService;
     private final ITrialSampleInfoService iTrialSampleInfoService;
+    private final JdbcTemplate jdbcTemplate;
 
     @GetMapping("/mobilization/verification")
     @ApiOperationSupport(order = 1)
@@ -144,7 +149,18 @@ public class TrialMaterialController extends BladeController {
     @ApiOperationSupport(order = 13)
     @ApiOperation(value = "样品材料批量删除", notes = "传入ids")
     public R<Object> sampleRemove(@Valid @RequestParam String ids) {
-        return R.status(iTrialSampleInfoService.deleteLogic(Func.toLongList(ids)));
+        boolean b = iTrialSampleInfoService.deleteLogic(Func.toLongList(ids));
+        if(b){
+            //删除关联表中的额数据
+            String sqlForDelTrailSampleRecord = "delete from u_trial_sampling_record where sample_info_id in ("+ids+")";
+            try {
+                jdbcTemplate.execute(sqlForDelTrailSampleRecord);
+            } catch (DataAccessException e) {
+                log.error("删除关联表中的额数据失败", e);
+                throw new RuntimeException(e);
+            }
+        }
+        return R.status(b);
     }
 
     @PostMapping("/sample/copy")

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/IEntrustInfoService.java

@@ -46,7 +46,7 @@ public interface IEntrustInfoService extends BaseService<EntrustInfo> {
 	EntrustDataInfoVO getReportDetail(String id);
 
 	/**
-	 * 样品分
+	 * 样品分
 	 * @param page
 	 * @param trialSampleInfo
 	 * @return

+ 1 - 3
blade-service/blade-business/src/main/java/org/springblade/business/service/ITaskService.java

@@ -22,7 +22,6 @@ import org.springblade.business.vo.TaskApprovalVO;
 import org.springblade.business.vo.TaskVO;
 import org.springblade.core.mp.base.BaseService;
 import org.springframework.scheduling.annotation.Async;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.FileNotFoundException;
@@ -98,7 +97,7 @@ public interface ITaskService extends BaseService<Task> {
     void delArchiveFileBusinessData(Long projectId, Long wbsId);
 
     @Async
-    void reSigningEVisa(String classify, String taskIds, String contractId, String projectId,Integer type, String header);
+    void reSigningEVisa(String classify, String taskIds, String contractId, String projectId,Integer type, String header,HttpServletRequest request);
 
     /**
      * 根据数据源id查询任务
@@ -114,5 +113,4 @@ public interface ITaskService extends BaseService<Task> {
      * 试验自检任务业务相关
      */
     void trialSelfTaskRelated(TaskApprovalVO taskApprovalVO, String pdfUrlEVisa, String batchId) throws FileNotFoundException;
-
 }

+ 9 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/EntrustInfoServiceImpl.java

@@ -18,6 +18,7 @@ package org.springblade.business.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import org.springblade.business.entity.EntrustInfo;
@@ -67,6 +68,14 @@ public class EntrustInfoServiceImpl extends BaseServiceImpl<EntrustInfoMapper, E
 
 	@Override
 	public IPage<TrialSampleDataInfoVO> samplePage(IPage<TrialSampleDataInfoVO> page, TrialSampleDataInfoVO trialSampleInfo) {
+		String startTime = trialSampleInfo.getStartTime();
+		String endTime = trialSampleInfo.getEndTime();
+		if(StringUtils.isNotEmpty(startTime) && StringUtils.isNotEmpty(endTime)){
+			startTime = startTime +" 00:00:00";
+			endTime = endTime +" 23:59:59";
+			trialSampleInfo.setStartTime(startTime);
+			trialSampleInfo.setEndTime(endTime);
+		}
 		return page.setRecords(baseMapper.samplePage(page, trialSampleInfo));
 	}
 

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

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
@@ -11,11 +12,11 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.http.client.utils.DateUtils;
 import org.springblade.business.entity.*;
 import org.springblade.business.feign.TaskClient;
+import org.springblade.business.mapper.InformationQueryMapper;
 import org.springblade.business.service.*;
 import org.springblade.business.utils.FileUtils;
 import org.springblade.business.vo.FileUserVO;
 import org.springblade.business.vo.InformationQueryVO;
-import org.springblade.business.mapper.InformationQueryMapper;
 import org.springblade.business.vo.QueryProcessDataVO;
 import org.springblade.common.constant.CommonConstant;
 import org.springblade.common.utils.SnowFlakeUtil;
@@ -42,7 +43,6 @@ import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import java.io.File;
 import java.io.FileNotFoundException;

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

@@ -49,15 +49,19 @@ import org.springblade.manager.vo.AppWbsTreeContractVO;
 import org.springblade.resource.feign.CommonFileClient;
 import org.springblade.resource.feign.NewIOSSClient;
 import org.springblade.system.cache.ParamCache;
+import org.springblade.system.entity.Dept;
+import org.springblade.system.user.entity.User;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.dao.DataAccessException;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.servlet.http.HttpServletRequest;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.util.*;
@@ -118,6 +122,10 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
     private final ExcelTabClient excelTabClient;
 
     private final NewIOSSClient newIOSSClient;
+    //超级管理员的角色id
+    private final String SUPER_ADMIN_ROLE_ID ="1123598816738675201";
+    //泓创智诚公司的部门id
+    private final Long  HONGCHENG_DEPT_ID = 1536982621165592577L;
 
     @Autowired
     StringRedisTemplate RedisTemplate;
@@ -257,7 +265,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                     //资料填报原始pdf
 //                    String approvalPdf = StringUtils.isNotEmpty(query.getEVisaPdfUrl()) ? query.getEVisaPdfUrl() : query.getPdfUrl();
                     /** 修改需求,任务查看时,附件不在列表中显示,需要拼接在电签后面。如果此处修改影响其他地方,则到时候再说*/
-                    String approvalPdf = StringUtils.isNotEmpty(query.getNodePdfUrl()) ? query.getNodePdfUrl() : query.getPdfUrl();
+                    String approvalPdf = StringUtils.isNotEmpty(query.getEVisaPdfUrl()) ? query.getEVisaPdfUrl() : query.getPdfUrl();
                     vo.setApprovalFileList(query.getName(), this.getHppsToHttp(approvalPdf));
 
                     //试验关联文件合并pdf
@@ -1130,12 +1138,12 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             System.out.println("----- 电签成功--------");
             //添加nodePdf的值
             List<Map<String, Object>> mapList = jdbcTemplate.queryForList("select *,domain_url as url from m_table_file where is_deleted = 0 and type in (10,11,12) and tab_id = (select wbs_id from u_information_query WHERE id = + "+formDataId+")");
-            if(Func.isNotEmpty(mapList)&&mapList.size()>=1){
+            if(Func.isNotEmpty(mapList)&&mapList.size()>=1) {
                 String file_path = org.springblade.business.utils.FileUtils.getSysLocalFileUrl();
                 List<String> datainfo = new ArrayList<>();
                 datainfo.add(newFileUrl);
                 for (Map<String, Object> tabsx : mapList) {
-                    datainfo.add(tabsx.get("url")+"");
+                    datainfo.add(tabsx.get("url") + "");
                 }
                 String listPdf = file_path + "/nodePDF/" + formDataId + ".pdf";
                 File tabpdf2 = ResourceUtil.getFile(listPdf);
@@ -1144,12 +1152,12 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                 }
 
                 org.springblade.business.utils.FileUtils.mergePdfPublicMethods(datainfo, listPdf);
-                if(sys_isonline.equals("20")){
+                if (sys_isonline.equals("20")) {
                     BladeFile bladeFile = this.newIOSSClient.uploadFile(formDataId + ".pdf", listPdf);
                     if (bladeFile != null && Func.isNotEmpty(bladeFile.getLink())) {
                         nodePdfUrl = bladeFile.getLink();
                     }
-                }else{
+                } else {
                     nodePdfUrl = org.springblade.business.utils.FileUtils.getNetUrl(listPdf);
                 }
 
@@ -1442,7 +1450,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
 //    }
 
     @Override
-    public void reSigningEVisa(String classify, String taskIds, String contractId, String projectId,Integer type, String header) {
+    public void reSigningEVisa(String classify, String taskIds, String contractId, String projectId, Integer type, String header , HttpServletRequest request) {
         //查询任务信息
         List<Task> taskList = jdbcTemplate.query("select * from u_task where id in(" + taskIds + ")", new BeanPropertyRowMapper<>(Task.class));
         if (taskList.size() > 0) {
@@ -1464,9 +1472,11 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             try {
                 for (Task task : taskList) {
                     R result = new R();
+                    jdbcTemplate.execute("DELETE from u_task_batch where json_data like '%"+task.getId()+"%'");
                     boolean b = informationQueryService.update(new LambdaUpdateWrapper<InformationQuery>()
                             .eq(InformationQuery::getId, task.getFormDataId())
-                            .set(InformationQuery::getEVisaPdfUrl, null));
+                            .set(InformationQuery::getEVisaPdfUrl, null)
+                            .set(InformationQuery::getPdfUrl, null));
 
                     if (type == 1) {
                         //重新保存
@@ -1501,7 +1511,9 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                             }
                         }
                         long startTime_2 = System.currentTimeMillis();
-                        this.batchCompleteApprovalTask(taskApprovalVOS);
+                        if(taskApprovalVOS!=null && taskApprovalVOS.size()>=1){
+                            this.batchCompleteApprovalTask(taskApprovalVOS);
+                        }
                         long endTime_2 = System.currentTimeMillis();
                         long executionTime_2 = endTime_2 - startTime_2;
                         log.info("batchCompleteApprovalTask执行时间:" + executionTime_2 + " 毫秒");
@@ -1512,7 +1524,14 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                                 .eq(TaskParallel::getProcessInstanceId, task.getProcessInstanceId()));
                     }
                 }
-
+                //获取当前操作人
+                Long userId = AuthUtil.getUserId(request);
+                String userName = AuthUtil.getNickName(request);
+                //判断是否是超级管理员并且是泓创智诚下的部门
+                if(judgeRoleIdAndDeptId(userId)){
+                    //满足去除当前填报人的条件 去除当前任务的填报人中当前操作人的信息
+                    removeUserAndName(taskIds, userId, userName);
+                }
             } catch (Exception e) {
                 e.printStackTrace();
                 throw new ServiceException("重新保存PDF信息失败,原因:" + e.getMessage());
@@ -1523,10 +1542,68 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
         }
     }
 
+
     R saveNodePdf(String classify, String nodePKeyIds, String contractId, String projectId, String header) throws Exception {
         return excelTabClient.synPDFInfo(contractId, nodePKeyIds, classify, projectId, header);
     }
 
+    /**
+     * 返回true代表满足条件 是超级管理员并且部门是在泓创智诚下面的部门
+     */
+    public boolean judgeRoleIdAndDeptId(Long userId ){
+        try {
+            String sqlForUser = "select role_id ,dept_id from blade_user where id = "+userId;
+            User user = jdbcTemplate.queryForObject(sqlForUser, new BeanPropertyRowMapper<>(User.class));
+            String sqlforSkipDept = "select id from blade_dept where parent_id = "+HONGCHENG_DEPT_ID + " or id = "+HONGCHENG_DEPT_ID;
+            List<Dept> depts = jdbcTemplate.query(sqlforSkipDept, new BeanPropertyRowMapper<>(Dept.class));
+            String roleId = user.getRoleId();
+            String deptId = user.getDeptId();
+            //既是超级管理员同时是泓创下面的部门才允许跳过填报人赋值
+            if(roleId.contains(SUPER_ADMIN_ROLE_ID)){
+                Boolean flag = false;
+                for (Dept dept : depts) {
+                    if(deptId.contains(dept.getId().toString())){
+                        flag = true;
+                        return flag;
+                    }
+                }
+                return flag;
+            }else {
+                return false;
+            }
+        } catch (DataAccessException e) {
+            log.error(e.getMessage());
+            throw new RuntimeException("校验操作人角色异常");
+        }
+    }
+
+    /**
+     * 去掉对应的填报人信息
+     */
+    private void removeUserAndName(String taskIds, Long userId, String userName) {
+        try {
+            String sqlForInformationQuery = "select * from u_information_query where id = (select form_data_id from u_task where id =" +taskIds+ ")";
+            InformationQuery informationQuery = jdbcTemplate.queryForObject(sqlForInformationQuery, new BeanPropertyRowMapper<>(InformationQuery.class));
+            String fileUserIdAndName = informationQuery.getFileUserIdAndName();
+            if (StringUtils.isNotEmpty(fileUserIdAndName) && fileUserIdAndName.contains(userId + "-" + userName)){
+                String[] split = fileUserIdAndName.split(",");
+                if(split != null && split.length > 0){
+                    ArrayList<String> list = new ArrayList<>(Arrays.asList(split));
+                    for (int i = 0; i < list.size(); i++) {
+                        if(list.get(i).contains(userId + "-" + userName)){
+                            list.remove(i);
+                        }
+                    }
+                    String fileUserIdAndNameNew = String.join(",", list);
+                    String sqlForUpdateInformationQuery = "update  u_information_query set file_user_id_and_name = '"+fileUserIdAndNameNew+"' where id = (select form_data_id from u_task where id =" +taskIds+ ")";
+                    jdbcTemplate.execute(sqlForUpdateInformationQuery);
+                }
+            }
+        } catch (DataAccessException e) {
+           throw new RuntimeException("去除对应的填报人信息异常");
+        }
+    }
+
     @Override
     public Task getTaskByFormDataId(String formDataId) {
         return getOne(Wrappers.<Task>lambdaQuery()

+ 8 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java

@@ -175,6 +175,14 @@ public class TrialSelfInspectionRecordServiceImpl extends BaseServiceImpl<TrialS
                 if (entrustInfo != null){
                     record.setEntrustName(entrustInfo.getEntrustName());
                     record.setEntrustNo(entrustInfo.getEntrustNo());
+                    //材料id不为空
+                     if(Func.isNotEmpty(entrustInfo.getSampleId())){
+                         TrialSampleInfo sampleInfo = trialSampleInfoMapper.selectById(entrustInfo.getSampleId());
+                         if (Func.isNotEmpty(sampleInfo)){
+                             record.setSpecificationNumber(sampleInfo.getSpecificationNumber());
+                             record.setSpecificationModel(sampleInfo.getSpecificationModel());
+                         }
+                     }
                 }
                 //合并的pdfUrl
                 String pdf = this.getMergePdfToTrialNew(record.getContractId(), record.getId());

+ 3 - 4
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/EVisaController.java

@@ -66,10 +66,10 @@ public class EVisaController {
         //执行代码
 
         log.info("扫描开始");
-        //String sql = "SELECT * from u_task_batch where json_data like '%1821798868568768512%' and is_deleted<>5  LIMIT 10";
+       // String sql = "SELECT * from u_task_batch where json_data like '%1840658122872455168%' and is_deleted<>5  LIMIT 10";
         String sql = "SELECT * from u_task_batch where is_deleted<>5 LIMIT 10";
         List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
-        if (maps != null && maps.size() >= 1 && SystemUtils.isLinux()) {
+        if (maps != null && maps.size() >= 1 && SystemUtils.isLinux()) {//&& SystemUtils.isLinux()
             for (Map<String, Object> dataInfo : maps) {
                 if (executor.getQueue().size()<=40 ) {
                     String jsonData = dataInfo.get("json_data") + "";
@@ -129,9 +129,8 @@ public class EVisaController {
 
                 String  sql = "SELECT a.* from u_task_parallel a where a.process_instance_id=(SELECT process_instance_id from u_task_parallel b where  b.parallel_process_instance_id='"+taskApprovalVO.getParallelProcessInstanceId()+"') and is_deleted=0 and `status`=1 and sort not in(SELECT fixed_flow_branch_sort from u_fixed_flow_link where fixed_flow_id ="+masterTask.getFixedFlowId()+" and  flow_task_type=2 ) ";
                 List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
-                if (maps == null || maps.size() == 0) {
+                if (maps == null || maps.size() == 0 ) {
                     // 最后修改计量数据
-
                     //说明都审批完成,将主表状态更改为已完成
                     String finalPdfUrl = null;
                     if (eVisaStatus.contains("@@@@")) {

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

@@ -32,6 +32,7 @@ import com.alibaba.fastjson.JSONObject;
 import lombok.AllArgsConstructor;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
+import org.apache.http.entity.ContentType;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -90,7 +91,7 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class EVisaServiceImpl implements EVisaService {
 
-   // private static final String SIGN_HOST = "172.30.224.79";
+ //   private static final String SIGN_HOST = "172.30.224.79";
     private static final String SIGN_HOST = "47.115.117.246";
 
     private static final String SIGN_PORT = "8183";
@@ -603,7 +604,7 @@ public class EVisaServiceImpl implements EVisaService {
                     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])));
+                            MultipartFile newFiles = new MockMultipartFile("file", SnowFlakeUtil.getId() + ".pdf", ContentType.APPLICATION_OCTET_STREAM.toString(), IOUtils.toByteArray(new ByteArrayInputStream((byte[]) result[0])));
                             //重新上传
                             BladeFile bladeFile = this.newIOSSClient.uploadFileByInputStream(newFiles);
 
@@ -901,6 +902,7 @@ public class EVisaServiceImpl implements EVisaService {
             pdfBean.setBizSerialNo(GUIDUtil.generateId());
             pdfBean.setInputSource("");
             pdfBean.setInputType(BaseConstants.INPUT_TYPE_FILEDATA);
+            logger.info("【电签模块】pdf{}", "长度"+fileByte.length);
             pdfBean.setPdfData(fileByte);
             pdfBeans.add(pdfBean);
 
@@ -961,7 +963,6 @@ public class EVisaServiceImpl implements EVisaService {
         if (strategyVoList == null || strategyVoList.size() <= 0) {
             return null;
         }
-
         //构建策略
         for (SealStrategyVO vo : strategyVoList) {
             try {
@@ -1006,7 +1007,7 @@ public class EVisaServiceImpl implements EVisaService {
                             imageData = ImageUtil.resizeImage(imageData, 540, 540);
                         } else {
                             //非合同章
-                            imageData = ImageUtil.resizeImage(imageData, 400, 200);
+                            imageData = ImageUtil.resizeImage(imageData, 480, 132);
                         }
                     }
 

+ 77 - 23
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -21,9 +21,6 @@ import lombok.SneakyThrows;
 import org.apache.commons.codec.Charsets;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang3.ObjectUtils;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.IndexedColors;
-import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.WorkbookFactory;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
@@ -75,6 +72,7 @@ import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -1927,13 +1925,7 @@ public class ExcelTabController extends BladeController {
         /*全加载,或者可以优化成依赖加载*/
         List<AppWbsTreeContractVO> tableAll = new ArrayList<>();
         List<TableInfo> tableInfoList = this.excelTabService.getTableInfoList(dataArray);
-/*        long start = System.currentTimeMillis();
-        if (tableInfoList != null) {
-            tableInfoList.forEach(e->{e.setToBeUpdated(true);});
-            tableAll = wbsTreeContractService.searchNodeAllTable(nodeId, "1", contractId, projectId, null);
-            doForTableIst(tableAll,tableInfoList);
-        }
-        System.out.println("加载所有表单数据耗时:"+(System.currentTimeMillis()-start));*/
+
         executionTime.info("公式前");
         //公式填充
         this.excelTabService.formulaFillData(tableInfoList, Long.parseLong(nodeId), ExecuteType.INSPECTION);
@@ -4018,19 +4010,21 @@ public class ExcelTabController extends BladeController {
                 JSONArray array = new JSONArray();
                 if (tableAll != null && tableAll.size() >= 1) {
                     /*只需加载第一张即可,生效会自动补全*/
-                    AppWbsTreeContractVO tab =tableAll.get(0);
-                    Map<String, Object> jo = excelTabService.getBussDataInfo(tab.getPKeyId(), 0);
-                    String s = new Gson().toJson(jo);
-                    //字符串转jsonobject
-                    JSONObject obj = JSON.parseObject(s);
-                    obj.put("classify", classify);
-                    obj.put("nodeId", noId);
-                    obj.put("contractId", contractId);
-                    obj.put("pkeyId", tab.getPKeyId());
-                    obj.put("projectId", projectId);
-                    obj.put("isCollapseLoad", true);
-                    obj.put("isRenderForm", true);
-                    array.add(obj);
+                    for(AppWbsTreeContractVO tab:tableAll) {
+                      //  AppWbsTreeContractVO tab = tableAll.get(0);
+                        Map<String, Object> jo = excelTabService.getBussDataInfo(tab.getPKeyId(), 0);
+                        String s = new Gson().toJson(jo);
+                        //字符串转jsonobject
+                        JSONObject obj = JSON.parseObject(s);
+                        obj.put("classify", classify);
+                        obj.put("nodeId", noId);
+                        obj.put("contractId", contractId);
+                        obj.put("pkeyId", tab.getPKeyId());
+                        obj.put("projectId", projectId);
+                        obj.put("isCollapseLoad", true);
+                        obj.put("isRenderForm", true);
+                        array.add(obj);
+                    }
                 }
                 js2.put("orderList", array);
                 js.put("dataInfo", js2);
@@ -4109,6 +4103,66 @@ public class ExcelTabController extends BladeController {
     }
 
 
+    @Scheduled(cron = "0/20 * * * * ?")
+    public void HtmlCope() {
+        //执行代码
+        String sql = "SELECT * from m_wbs_tree_contract where p_key_id=1789131196718907437" ;
+        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
+        if (maps != null && maps.size() >= 1) {
+            for (Map<String, Object> dataInfo : maps) {
+                if (executor.getQueue().size() <= 40) {
+                    String idkey = dataInfo.get("p_key_id") + "";
+                    Boolean aBoolean = RedisTemplate.hasKey("sign-" + idkey);
+                    if (!aBoolean) {
+                        RedisTemplate.opsForValue().set("sign-" + idkey, "1", 30, TimeUnit.SECONDS);
+                        CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> {
+                            try {
+                                this.checkHtmlCope(dataInfo);
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                            }
+                        }, executor);
+                    }
+
+                }
+            }
+        }
+        System.out.println("队列数量" + executor.getQueue().size());
+        System.out.println("活跃数量" + executor.getActiveCount());
+        System.out.println("总共数量" + executor.getTaskCount());
+        System.out.println("完成数量" + executor.getCompletedTaskCount());
+    }
+
+    public void checkHtmlCope (Map < String, Object > dataInfo) throws Exception {
+        String pkey_id = dataInfo.get("p_key_id")+"";
+        String Html1 = dataInfo.get("html_url")+"";
+        String url183= "http://183.247.216.148:22776/";
+        String local183 = "/home/www/wwwroot/Users/hongchuangyanfa/Desktop/";
+        String s1 = Html1.replaceAll(local183, url183);
+        InputStream stream1 = getOSSInputStream2(s1);
+        if(stream1==null){
+
+        }else{
+            System.out.println("成功!");
+        }
+
+
+    }
+
+    public static synchronized InputStream getOSSInputStream2(String urlStr) throws Exception {
+        //获取OSS文件流
+        URL url =new URL(urlStr);
+        final URLConnection conn = url.openConnection();
+        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
+        try {
+            return conn.getInputStream();
+        } catch (Exception e){
+            System.out.println("zw-----------");
+            e.printStackTrace();
+            return null;
+        }
+    }
+
   //  @Scheduled(cron = "0/20 * * * * ?")
     public void SignInfo() {
         //执行代码

+ 37 - 22
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/SignPfxFileController.java

@@ -19,9 +19,9 @@ package org.springblade.manager.controller;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import com.mixsmart.utils.StringUtils;
 import io.swagger.annotations.*;
 import lombok.AllArgsConstructor;
 import okhttp3.OkHttpClient;
@@ -34,7 +34,10 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
-import org.springblade.manager.entity.*;
+import org.springblade.manager.entity.ContractInfo;
+import org.springblade.manager.entity.ProjectInfo;
+import org.springblade.manager.entity.SignPfxDeputy;
+import org.springblade.manager.entity.SignPfxFile;
 import org.springblade.manager.feign.ProjectAssignmentUserClient;
 import org.springblade.manager.service.*;
 import org.springblade.manager.utils.FileUtils;
@@ -53,7 +56,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.Valid;
 import java.io.File;
-import java.io.IOException;
+import java.io.InputStream;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -469,7 +472,7 @@ public class SignPfxFileController extends BladeController {
     @PostMapping("/compressAndUpload")
     public R<BladeFile> compressAndUpload(@RequestParam MultipartFile file, @RequestParam double wide,@RequestParam double high) throws Exception {
         String file_path = FileUtils.getSysLocalFileUrl();
-        String localImgPath = file_path + "print//" + UUID.randomUUID() + ".png";
+        String localImgPath = file_path + "print//" + SnowFlakeUtil.getId() + ".png";
         // 检查文件是否存在
         File newFile = new File(localImgPath);
         if (!newFile.exists()) {
@@ -482,36 +485,37 @@ public class SignPfxFileController extends BladeController {
         // 保存文件
         file.transferTo(newFile);
         //图片压缩后的地址
-        UUID uuid = UUID.randomUUID();
-        String compressImgPath = file_path + "/print//" + uuid + ".png";
+        Long id = SnowFlakeUtil.getId();
+        String compressImgPath = file_path + "/print//" + id + ".png";
         FileUtils.compressImage(localImgPath, compressImgPath, wide, high);
-        return R.data(newIOSSClient.uploadFile(uuid+".png", compressImgPath));
-    }
-    @PostMapping("/picPresave")
-    @ApiOperationSupport(order = 3)
-    @ApiOperation(value = "预览图片新增准备", notes = "传入signPfxFile")
-    public R picPresave( @RequestParam MultipartFile file, @RequestParam double wide,@RequestParam double high) throws IOException {
-        SignPfxFilePreVo signPfxFilePreVo = new SignPfxFilePreVo();
-        signPfxFilePreVo.setFile(file);
-        signPfxFilePreVo.setWide(wide);
-        signPfxFilePreVo.setHigh(high);
-        return pfxFilePreService.picPresave(signPfxFilePreVo);
+        return R.data(newIOSSClient.uploadFile(id+".png", compressImgPath));
     }
+
     @PostMapping ("/prePicture")
     @ApiOperationSupport(order = 4)
     @ApiOperation(value = "预览电签后的图片", notes = "传入signPfxFile")
-    public R prePicture( @RequestBody SignPfxFilePre signPfxFilePre) throws Exception {
-        return pfxFilePreService.prePicture(signPfxFilePre);
+    public R prePicture(@RequestParam Optional<MultipartFile> file, @RequestParam Optional<String> fileStr, @RequestParam Optional<String> wide,@RequestParam Optional<String> high) throws Exception {
+        SignPfxFilePreVo signPfxFilePreVo = new SignPfxFilePreVo();
+        signPfxFilePreVo.setFile(file.orElse(null));
+        if(Func.isNotEmpty(wide.orElse(null)) && Func.isNotEmpty(high.orElse(null)) && !"null".equals(wide.get()) && !"null".equals(high.get())){
+            double wideDouble = Double.parseDouble(wide.get());
+            double highDouble = Double.parseDouble(high.get());
+            signPfxFilePreVo.setWide(wideDouble);
+            signPfxFilePreVo.setHigh(highDouble);
+        }else {
+            signPfxFilePreVo.setWide(null);
+            signPfxFilePreVo.setHigh(null);
+        }
+        signPfxFilePreVo.setFileStr(fileStr.orElse(null));
+        return pfxFilePreService.prePicture(signPfxFilePreVo);
     }
-
-
     /**
      * 修改 个人/企业证书信息表
      */
     @PostMapping("/update")
     @ApiOperationSupport(order = 5)
     @ApiOperation(value = "修改", notes = "传入signPfxFile")
-    public R<Boolean> update(@Valid @RequestBody SignPfxFileVO vo) {
+    public R<Boolean> update(@Valid @RequestBody SignPfxFileVO vo) throws Exception {
         if (new Integer("2").equals(vo.getCertificateType())||new Integer("3").equals(vo.getCertificateType())) {
             //查询旧数据
             SignPfxFile oldData = this.signPfxFileService.getById(vo.getId());
@@ -523,6 +527,7 @@ public class SignPfxFileController extends BladeController {
             }
 
         }
+        vo.setSignatureFileUrl(compressionAndUpload(vo.getSignatureFileUrl(), vo.getWide(), vo.getHigh()));
         return R.status(this.signPfxFileService.updateById(vo));
     }
 
@@ -568,6 +573,16 @@ public class SignPfxFileController extends BladeController {
     public R<Boolean> remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
         return R.status(this.signPfxFileService.deleteLogic(Func.toLongList(ids)));
     }
+    public String compressionAndUpload(String fileStr, double wide, double high) throws Exception {
+        String file_path = FileUtils.getSysLocalFileUrl();
+        InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(fileStr);
+        //图片压缩后的地址
+        Long id = SnowFlakeUtil.getId();
+        String compressImgPath = file_path + "/print//" + id + ".png";
+        FileUtils.compressImage(inputStreamByUrl, compressImgPath, wide, high);
+        BladeFile bladeFile = newIOSSClient.uploadFile(id + ".png", compressImgPath);
+        return bladeFile.getLink();
+    }
 
 
 }

+ 0 - 16
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ExcelTabClientImpl.java

@@ -1,50 +1,34 @@
 package org.springblade.manager.feign;
 
-import com.alibaba.druid.util.DaemonThreadFactory;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
-import org.jsoup.Jsoup;
-import org.jsoup.nodes.Document;
-import org.jsoup.select.Elements;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springblade.business.dto.TrialSelfInspectionRecordDTO;
 import org.springblade.business.entity.InformationQuery;
 import org.springblade.business.feign.InformationQueryClient;
-import org.springblade.common.constant.CommonConstant;
 import org.springblade.core.oss.model.BladeFile;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.IoUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.ResourceUtil;
 import org.springblade.manager.bean.TableInfo;
 import org.springblade.manager.controller.ExcelTabController;
 import org.springblade.manager.entity.ExcelTab;
 import org.springblade.manager.entity.TrialSelfDataRecord;
-import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.enums.ExecuteType;
 import org.springblade.manager.service.IExcelTabService;
 import org.springblade.manager.service.IWbsTreePrivateService;
 import org.springblade.manager.utils.FileUtils;
-import org.springblade.manager.vo.WbsTreePrivateVO4;
 import org.springblade.resource.feign.NewIOSSClient;
-import org.springblade.system.cache.ParamCache;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RestController;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
 
 @RestController

+ 9 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java

@@ -12,6 +12,9 @@ import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.manager.entity.*;
+import org.springblade.manager.entity.ContractInfo;
+import org.springblade.manager.entity.ContractRelationJlyz;
+import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.mapper.WbsTreeContractMapper;
 import org.springblade.manager.service.IContractInfoService;
 import org.springblade.manager.service.IWbsTreeContractService;
@@ -159,7 +162,6 @@ public class WbsTreeContractClientImpl implements WbsTreeContractClient {
             wrappers.set(WbsTreeContract::getSort, node.getSort());
         }
 
-
         return this.wbsTreeContractService.update(wrappers.eq(WbsTreeContract::getPKeyId, node.getPKeyId()));
     }
 
@@ -446,5 +448,11 @@ public class WbsTreeContractClientImpl implements WbsTreeContractClient {
         return list;
     }
 
+    @Override
+    public List<WbsTreeContractTreeVOS> selectContractJLForm(List<Long> removeList) {
+        List<WbsTreeContractTreeVOS> vos =wbsTreeContractMapper.selectContractJLForm(removeList);
+        return vos;
+    }
+
 
 }

+ 8 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaTurnPoint.java

@@ -141,14 +141,15 @@ public class FormulaTurnPoint implements FormulaStrategy {
                 Map<String, Object> tmp = new HashMap<>(16);
                 KEYS.forEach(k -> {
                     ElementData ed = map.get(c(k,args));
-                    tmp.put(configMap.get(k), ed.stringValue());
-                    /*V判断*/
-                    if (CD.equals(k)) {
-                        Long pkeyId = tableInfoIds.get(ed.getIndex());
-                        String findStr = "OP['" + cur.getTableName() + "']['" + pkeyId + "@" + cur.getKey() + "__" + ed.getY() + "_" + ed.getX() + "']['TF']";
-                        tmp.put("vertical", StringUtils.handleNull(Expression.parse(findStr).calculate(tec.getConstantMap())));
+                    if(ed!=null){
+                        tmp.put(configMap.get(k), ed.stringValue());
+                        /*V判断*/
+                        if (CD.equals(k)) {
+                            Long pkeyId = tableInfoIds.get(ed.getIndex());
+                            String findStr = "OP['" + cur.getTableName() + "']['" + pkeyId + "@" + cur.getKey() + "__" + ed.getY() + "_" + ed.getX() + "']['TF']";
+                            tmp.put("vertical", StringUtils.handleNull(Expression.parse(findStr).calculate(tec.getConstantMap())));
+                        }
                     }
-
                 });
                 tableData.add(tmp);
         }

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

@@ -1,6 +1,5 @@
 package org.springblade.manager.mapper;
 
-import org.apache.ibatis.annotations.CacheNamespace;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.business.entity.InformationQuery;
 import org.springblade.manager.entity.*;
@@ -118,4 +117,6 @@ public interface WbsTreeContractMapper extends EasyBaseMapper<WbsTreeContract> {
     List<WbsTreeContract> projectAllTable(@Param("projectId") Long projectId);
 
     void batchUpdateTable(@Param("list") List<String> list);
+
+    List<WbsTreeContractTreeVOS> selectContractJLForm(List<Long> removeList);
 }

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

@@ -879,4 +879,11 @@
         select p_key_id,init_table_name
         from m_wbs_tree_contract where project_id = #{projectId} and type = 2 and is_deleted = 0
     </select>
+    <select id="selectContractJLForm" resultType="org.springblade.manager.vo.WbsTreeContractTreeVOS">
+        select id from m_wbs_tree_contract where p_key_id in (
+            <foreach collection="list" item="pkeyId" separator=",">
+                #{pkeyId}
+            </foreach>
+            ) and pdf_url is not null and pdf_url != '' and (table_owner = 4 or table_owner = 5 or table_owner = 6) and is_deleted = 0
+    </select>
 </mapper>

+ 1 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/ISignPfxFilePreService.java

@@ -1,7 +1,6 @@
 package org.springblade.manager.service;
 
 import org.springblade.core.tool.api.R;
-import org.springblade.manager.entity.SignPfxFilePre;
 import org.springblade.manager.vo.SignPfxFilePreVo;
 
 import java.io.IOException;
@@ -9,5 +8,5 @@ import java.io.IOException;
 public interface ISignPfxFilePreService {
     R picPresave(SignPfxFilePreVo signPfxFilePreVo) throws IOException;
 
-    R prePicture(SignPfxFilePre signPfxFilePre) throws Exception;
+    R prePicture(SignPfxFilePreVo signPfxFilePreVo) throws Exception;
 }

+ 27 - 14
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -45,6 +45,7 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.oss.model.BladeFile;
+import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.node.ForestNodeMerger;
@@ -316,14 +317,23 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                         }
                         dataMap2.put(k, lastStr);
                     } else {
-                        String dataVal = dataInfo2.getString(dataMap.get(k).get(0));
-                        if (StringUtils.isNotEmpty(dataVal)) {
-                            if (dataVal.contains("Ljava")) {
-                                Object o = dataInfo2.get(dataMap.get(k).get(0));
-                                dataVal = JSON.toJSONString(o).replace("\"", "");
+                            Object dataVal = dataInfo2.get(dataMap.get(k).get(0));
+                            if (Func.isNotEmpty(dataVal)) {
+                                if(dataVal instanceof JSONArray){ //数组时
+                                    JSONArray jsonArray = dataInfo2.getJSONArray(dataMap.get(k).get(0));
+                                    String data = jsonArray.get(0)+"";
+                                    if(data.contains("年") && data.contains("月")&& data.contains("日")){
+                                        JSONArray dataNew = new JSONArray(jsonArray.size());
+                                        for(int i=0;i<jsonArray.size();i++){
+                                            dataNew.add(i, jsonArray.get(i).toString().replace("\"", ""));
+                                        }
+                                        dataVal = dataNew;
+                                    }else{
+                                        dataVal = JSON.toJSONString(0).replace("\"", "");
+                                    }
+                                }
+                                dataMap2.put(k, dataVal + "_^_" + dataMap.get(k).get(0).split("__")[1]);
                             }
-                            dataMap2.put(k, dataVal + "_^_" + dataMap.get(k).get(0).split("__")[1]);
-                        }
                     }
                 }
                 dataInfo2.put("p_key_id", tableInfo.getPkeyId());
@@ -1150,11 +1160,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     /*检查发现有p_key_id缺失的情况,导致表单数据丢失,所以强制覆盖*/
                     dataMap2.put("p_key_id", tableInfo.getPkeyId());
                     //统计保存的字段
-//                    saveData.append(wbsTreeContract.getNodeName()+"<br>");
-//                    for (String s : dataMap2.keySet()) {
-//                        saveData.append(s+":"+dataMap2.get(s)+"<br>");
-//                    }
-//                    saveData.append("<br>");
+
                     sqlInfo = "INSERT INTO " + tabName + " ( ";
                     String keyStr = "id,";
                     String valStr = SnowFlakeUtil.getId() + ",";
@@ -1181,17 +1187,24 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     updateWrapper.in("p_key_id", tableInfo.getPkeyId());
                     updateWrapper.set("is_tab_pdf", 2);
                     wbsTreeContractService.update(updateWrapper);
-
+                    BladeUser user = AuthUtil.getUser();
                     TransactionStatus transactionStatus = this.beginTransaction(transactionManager1);
                     try {
+                        //添加被张表的操作日志
+                        StringBuffer sb = new StringBuffer();
+                        String sqlInfoNew = sqlInfo.replace("\"", "'");
+                        sb.append("insert into blade_tab_sql(p_key_id,user_id,create_time,sql_info) VALUES(");
+                        sb.append(tableInfo.getPkeyId());sb.append(",");sb.append(user.getUserId());
+                        sb.append(","); sb.append("SYSDATE()");sb.append(",\"");sb.append(sqlInfoNew);
+                        sb.append("\")");
                         jdbcTemplate.execute(delSql);
                         jdbcTemplate.execute(sqlInfo);
+                        jdbcTemplate.execute(sb.toString());
                         transactionManager1.commit(transactionStatus);
                     } catch (Exception e) {
                         transactionManager1.rollback(transactionStatus);
                         log.append(e.getMessage()).append("@@");
                         e.printStackTrace();
-                        /*return R.fail(wbsTreeContract.getNodeName());*/
                         return R.fail(reason(e.getMessage()));
                     }
                 }

+ 44 - 18
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/SignPfxFilePreServiceImpl.java

@@ -9,10 +9,12 @@ import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Element;
 import org.jsoup.select.Elements;
 import org.springblade.common.utils.CommonUtil;
+import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.ribbon.utils.BeanUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.IoUtil;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.ResourceUtil;
 import org.springblade.manager.entity.SignPfxFilePre;
 import org.springblade.manager.entity.TextdictInfo;
@@ -29,7 +31,10 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @Service
 public class SignPfxFilePreServiceImpl implements ISignPfxFilePreService {
@@ -37,7 +42,7 @@ public class SignPfxFilePreServiceImpl implements ISignPfxFilePreService {
     private SignPfxFilePreMapper signPfxFilePreMapper;
 
     private final String excelTabFileUrl = "https://blade-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20240731/cf9534fd3ac688df5f9d7a802ba754c0.xlsx";
-    private final String wbsHtmlUrl = "/www/wwwroot/Users/hongchuangyanfa/Desktop/privateUrl/1771066158930198528.html";
+    private final String wbsHtmlUrl = "privateUrl/1771066158930198528.html";
     @Autowired
     private BeanUtil beanUtil;
 
@@ -47,7 +52,7 @@ public class SignPfxFilePreServiceImpl implements ISignPfxFilePreService {
         MultipartFile file1 = vo.getFile();
         //图片保存到本地
         String file_path = FileUtils.getSysLocalFileUrl();
-        String localImgPath = file_path + "print//" + UUID.randomUUID() + ".png";
+        String localImgPath = file_path + "print//" + SnowFlakeUtil.getId() + ".png";
             // 检查文件是否存在
             File file = new File(localImgPath);
             if (!file.exists()) {
@@ -68,22 +73,33 @@ public class SignPfxFilePreServiceImpl implements ISignPfxFilePreService {
     }
 
     @Override
-    public R prePicture(SignPfxFilePre signPfxFilePre) throws Exception {
-        SignPfxFilePre spr = signPfxFilePreMapper.selectByPrimaryKey(signPfxFilePre.getId());
+    public R prePicture(SignPfxFilePreVo vo) throws Exception {
+//        SignPfxFilePre spr = signPfxFilePreMapper.selectByPrimaryKey(vo.getId());
+        InputStream inputStreamByUrl1 = FileUtils.getInputStreamByUrl(vo.getFileStr());
+        MultipartFile file1 = vo.getFile();
         //宽度
-        Double wide = spr.getWide();
+        Double wide = vo.getWide();
         //高度
-        Double hight = spr.getHigh();
+        Double high = vo.getHigh();
+        if(ObjectUtil.isEmpty(wide) && ObjectUtil.isEmpty(high)){
+            if(ObjectUtil.isEmpty(file1)){
+                Map imageSize = FileUtils.getImageSize(inputStreamByUrl1);
+                Integer width = (Integer) imageSize.get("width");
+                Integer height = (Integer) imageSize.get("height");
+                wide = width.doubleValue();
+                high = height.doubleValue();
+            }else {
+                wide = FileUtils.getImageWidth(file1).doubleValue();
+                high = FileUtils.getImageHeight(file1).doubleValue();
+            }
+        }
         //图片地址
-        String localImgPath = spr.getSignaturePngUrl();
         String file_path = FileUtils.getSysLocalFileUrl();
+        Long id = SnowFlakeUtil.getId();
+        String compressImgPath = file_path + "/pdf//" + id  + ".png";
 
-        //图片压缩后的地址
-        UUID uuid = UUID.randomUUID();
-        String compressImgPath = file_path + "/print//" + uuid + ".png";
-
-        String pdfPath = file_path + "/pdf//" + "1751795857679712265" + ".pdf";
-        String excelPath = file_path + "/pdf//" + uuid + ".xlsx";
+        String pdfPath = file_path + "/print//" + "1751795857679712265" + ".pdf";
+        String excelPath = file_path + "/pdf//" + id + ".xlsx";
 
         File tabPdf = ResourceUtil.getFile(pdfPath);
         if (tabPdf.exists()) {
@@ -105,8 +121,9 @@ public class SignPfxFilePreServiceImpl implements ISignPfxFilePreService {
         Sheet sheet = workbook.getSheetAt(0);
         sheet.setForceFormulaRecalculation(true);
         List<String> sign = new ArrayList<>();
-        if (StringUtils.isNotEmpty(wbsHtmlUrl)) {
-            InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(wbsHtmlUrl);
+        String wbsHtmlUrlNow = file_path+wbsHtmlUrl;
+        if (StringUtils.isNotEmpty(wbsHtmlUrlNow)) {
+            InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(wbsHtmlUrlNow);
             String htmlString = IoUtil.readToString(inputStreamByUrl);
             Document doc = Jsoup.parse(htmlString);
             Element table = doc.select("table").first();
@@ -155,9 +172,18 @@ public class SignPfxFilePreServiceImpl implements ISignPfxFilePreService {
         FileOutputStream outputStream = new FileOutputStream(excelPath);
         workbook.write(outputStream);
         FileUtils.excelToPdf(excelPath, pdfPath);
-        FileUtils.compressImage(localImgPath,compressImgPath, spr.getWide(),spr.getHigh());
+        if(ObjectUtil.isEmpty(file1)){
+            InputStream inputStreamByUrl2 = FileUtils.getInputStreamByUrl(vo.getFileStr());
+            FileUtils.compressImage(inputStreamByUrl2,compressImgPath, wide,high);
+        }else {
+            FileUtils.compressImage(file1.getInputStream(),compressImgPath, wide,high);
+        }
         PdfAddimgUtil.pdfAddImgInfoNew(pdfPath, String.join(",", sign),textMap,compressImgPath);
         //压缩后的图片上传oss
-        return R.data(FileUtils.getNetUrl(pdfPath));
+        SignPfxFilePreVo signPfxFilePreVo = new SignPfxFilePreVo();
+        signPfxFilePreVo.setWide(wide);
+        signPfxFilePreVo.setHigh(high);
+        signPfxFilePreVo.setPreUrl(FileUtils.getNetUrl(pdfPath));
+        return R.data(signPfxFilePreVo);
     }
 }

+ 6 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/TextdictInfoServiceImpl.java

@@ -31,8 +31,6 @@ import org.springblade.manager.mapper.WbsTreePrivateMapper;
 import org.springblade.manager.service.ITextdictInfoService;
 import org.springblade.manager.utils.FileUtils;
 import org.springblade.manager.vo.TextdictInfoVO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -69,8 +67,12 @@ public class TextdictInfoServiceImpl extends ServiceImpl<TextdictInfoMapper, Tex
                     for(Element ek:table){
                         dqid.addAll(Func.toStrList("\\|\\|",ek.attr("dqid")));
                     }
-                    if(textdictInfo.getShowType() == 1){
-                        textdict = baseMapper.selectTextdictBYIds(dqid,privateInfo.getProjectId());
+                    if(Func.isNotEmpty(textdictInfo.getShowType()) && textdictInfo.getShowType() == 1){
+                        if(Func.isNotEmpty(dqid) && dqid.size() > 0){
+                            textdict = baseMapper.selectTextdictBYIds(dqid,privateInfo.getProjectId());
+                        }else {
+                            textdict = new ArrayList<>();
+                        }
                     }else{
                         textdict = baseMapper.selectTextdictInfoByExcelId(page, textdictInfo);
                     }

+ 10 - 8
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -31,7 +31,6 @@ import org.springblade.core.redis.cache.BladeRedis;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.node.ForestNodeMerger;
-import org.springblade.core.tool.support.Try;
 import org.springblade.core.tool.utils.*;
 import org.springblade.manager.bean.NodeVO;
 import org.springblade.manager.dto.*;
@@ -57,11 +56,14 @@ import org.springframework.util.LinkedCaseInsensitiveMap;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
-import java.io.*;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.*;
-import java.util.concurrent.*;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Function;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -973,7 +975,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
     @Override
     public boolean syncContractTabSort(String projectId) {
         if (ObjectUtil.isNotEmpty(projectId)) {
-            List<WbsTreePrivate> tabs = jdbcTemplate.query("select id,sort from m_wbs_tree_private where is_deleted = 0 and sort is not null and wbs_type = 1 and project_id = " + projectId, new BeanPropertyRowMapper<>(WbsTreePrivate.class));
+            List<WbsTreePrivate> tabs = jdbcTemplate.query("select id,p_key_id,sort from m_wbs_tree_private where is_deleted = 0 and sort is not null and wbs_type = 1 and project_id = " + projectId, new BeanPropertyRowMapper<>(WbsTreePrivate.class));
             List<ContractInfo> contractInfos = jdbcTemplate.query("select id from m_contract_info where is_deleted = 0 and contract_type = 1 and p_id = " + projectId, new BeanPropertyRowMapper<>(ContractInfo.class));
             for (ContractInfo contractInfo : contractInfos) {
                 for (List<WbsTreePrivate> wbsTreePrivates : Lists.partition(tabs, 1000)) {
@@ -1149,13 +1151,13 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
      * @param contractId      合同段id
      */
     private void batchUpdateData(List<WbsTreePrivate> wbsTreePrivates, Long contractId) {
-        StringBuilder updateSqlBuilder = new StringBuilder("UPDATE m_wbs_tree_contract SET sort = CASE id ");
+        StringBuilder updateSqlBuilder = new StringBuilder("UPDATE m_wbs_tree_contract SET sort = CASE is_type_private_pid ");
         for (WbsTreePrivate wbsTreePrivate : wbsTreePrivates) {
-            updateSqlBuilder.append("WHEN ").append(wbsTreePrivate.getId()).append(" THEN ").append(wbsTreePrivate.getSort()).append(" ");
+            updateSqlBuilder.append("WHEN ").append(wbsTreePrivate.getPKeyId()).append(" THEN ").append(wbsTreePrivate.getSort()).append(" ");
         }
-        updateSqlBuilder.append("END WHERE id IN (");
+        updateSqlBuilder.append("END WHERE is_type_private_pid IN (");
         for (WbsTreePrivate wbsTreePrivate : wbsTreePrivates) {
-            updateSqlBuilder.append(wbsTreePrivate.getId()).append(",");
+            updateSqlBuilder.append(wbsTreePrivate.getPKeyId()).append(",");
         }
         updateSqlBuilder.deleteCharAt(updateSqlBuilder.length() - 1); //删除最后一个逗号
         updateSqlBuilder.append(") AND contract_id = ").append(contractId);

+ 75 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/FileUtils.java

@@ -36,6 +36,7 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.IoUtil;
 import org.springblade.core.tool.utils.ResourceUtil;
 import org.springblade.system.cache.ParamCache;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.imageio.ImageIO;
 import javax.servlet.http.HttpServletResponse;
@@ -328,6 +329,65 @@ public class FileUtils {
         // 保存缩放后的图片
         ImageIO.write(resizedImage, getFormat(sourceImagePath), new File(targetImagePath));
     }
+    public static void compressImage(InputStream inputStream, String targetImagePath, double maxWidth, double maxHeight) throws Exception {
+        // 读取源图片
+        BufferedImage originalImage = ImageIO.read(inputStream);
+        // 给定的目标宽度和高度
+        int targetWidth = (int)Math.round(maxWidth); // 目标宽度
+        int targetHeight = (int)Math.round(maxHeight); // 目标高度
+        // 创建新的图片对象
+        BufferedImage resizedImage = new BufferedImage(targetWidth, targetHeight, originalImage.getType());
+        // 使用 Graphics2D 进行绘制
+        Graphics2D g2d = resizedImage.createGraphics();
+        g2d.drawImage(originalImage, 0, 0, targetWidth, targetHeight, null);
+        g2d.dispose();
+        // 保存缩放后的图片
+        ImageIO.write(resizedImage, "png", new File(targetImagePath));
+    }
+
+    /**
+     * 获取图片的宽度
+     * @param file
+     * @return
+     * @throws IOException
+     */
+    public static Integer getImageWidth(MultipartFile file) throws IOException {
+        try (InputStream is = file.getInputStream()) {
+            BufferedImage image = ImageIO.read(is);
+            return image.getWidth();
+        }
+    }
+
+    /**
+     * 传入流获取图片的高度和宽度
+     * @param is
+     * @return
+     * @throws IOException
+     */
+    public static Map getImageSize(InputStream is) throws IOException {
+            BufferedImage image = ImageIO.read(is);
+        int width = image.getWidth();
+        int height = image.getHeight();
+        HashMap<String, Integer> stringIntegerHashMap = new HashMap<>();
+        stringIntegerHashMap.put("width", width);
+        stringIntegerHashMap.put("height", height);
+        return stringIntegerHashMap;
+
+    }
+
+    /**
+     * 获取图片的高度
+     * @param file
+     * @return
+     * @throws IOException
+     */
+    public static Integer getImageHeight(MultipartFile file) throws IOException {
+        try (InputStream is = file.getInputStream()) {
+            BufferedImage image = ImageIO.read(is);
+            return image.getHeight();
+        }
+    }
+
 
     /**
      * 获取图片格式
@@ -446,15 +506,14 @@ public class FileUtils {
         String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
         String file_path2 = getSysLocalFileUrl();
         String sys_file_net_url = ParamCache.getValue(CommonConstant.SYS_FILE_NET_URL);
-        if(fileUrl.indexOf("/www/wwwroot")>=0){
+        String sys_isonline = ParamCache.getValue(CommonConstant.SYS_ISONLINE);
+
+        if (fileUrl.indexOf("aliyuncs.com") >= 0) {
+            return fileUrl;
+        }else {
             file_path2 = file_path;
         }
-//        File file = new File(fileUrl);
-//
-//        if(file.exists()){
-//            //存在
-//            return fileUrl;
-//        }
+
        String path = sys_file_net_url + fileUrl.replaceAll("//", "/").replaceAll(file_path2, "");
         return path;
     }
@@ -463,15 +522,21 @@ public class FileUtils {
         String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
         String sys_isonline = ParamCache.getValue(CommonConstant.SYS_ISONLINE);
 
-        if(sys_isonline.equals("3")){ //正式环境
+        if(sys_isonline.equals("1")){ //正式环境
             if (SystemUtils.isMacOs()) {
-                file_path = "/Users/hongchuangyanfa/Desktop/";
+                file_path = "/www/wwwroot/Users/hongchuangyanfa/Desktop/";
             } else if (SystemUtils.isWindows()) {
                 file_path = "C://upload//";
             }
         }else if(sys_isonline.equals("2")){ //109测试环境
             if (SystemUtils.isMacOs()) {
-                file_path = "/Users/hongchuangyanfa/Desktop/";
+                file_path = "/www/wwwroot/Users/hongchuangyanfa/Desktop/";
+            } else if (SystemUtils.isWindows()) {
+                file_path = "C://upload//";
+            }
+        }else if(sys_isonline.equals("20")){ //183
+            if (SystemUtils.isMacOs()) {
+                file_path = "/home/www/wwwroot/Users/hongchuangyanfa/Desktop/";
             } else if (SystemUtils.isWindows()) {
                 file_path = "C://upload//";
             }

+ 1 - 2
blade-service/blade-user/src/main/java/org/springblade/system/user/controller/WbsTreeController.java

@@ -14,7 +14,6 @@ import org.springblade.business.vo.InformationQueryVO;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.ObjectUtil;
-import org.springblade.manager.vo.PrivateTreeVO;
 import org.springblade.manager.vo.PrivateTreeVO2;
 import org.springblade.manager.vo.WbsTreeContractLazyVO;
 import org.springblade.system.user.service.IUserService;
@@ -23,7 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.*;
+import java.util.List;
 
 @RestController
 @RequestMapping(value = "/wbs")