Explorar el Código

Merge remote-tracking branch 'origin/master' into master

yangyj hace 2 años
padre
commit
c65707a793
Se han modificado 19 ficheros con 271 adiciones y 42 borrados
  1. 4 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/OpinionUserClient.java
  2. 3 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/ContractLogVO.java
  3. 29 3
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ManagerHomePageVO.java
  4. 20 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  5. 9 0
      blade-service/blade-business/src/main/java/org/springblade/business/feignClient/OpinionUserClientImpl.java
  6. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/ContractLogMapper.java
  7. 33 2
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/ContractLogMapper.xml
  8. 2 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/UserOpinionMapper.java
  9. 23 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/UserOpinionMapper.xml
  10. 5 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/IMessageWarningService.java
  11. 2 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/IUserOpinionService.java
  12. 2 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/ContractLogServiceImpl.java
  13. 10 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/MessageWarningServiceImpl.java
  14. 52 3
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  15. 5 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/UserOpinionServiceImpl.java
  16. 9 10
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVisaServiceImpl.java
  17. 48 14
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ManagerHomePageController.java
  18. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java
  19. 13 5
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

+ 4 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/OpinionUserClient.java

@@ -1,5 +1,6 @@
 package org.springblade.business.feign;
 
+import com.alibaba.fastjson.JSONObject;
 import org.springblade.business.entity.AssessmentUser;
 import org.springblade.business.entity.UserOpinion;
 import org.springblade.business.vo.AssessmentUserVOS;
@@ -21,6 +22,9 @@ public interface OpinionUserClient {
      */
     String API_PREFIX = "/api/business/opinionUser";
 
+    @GetMapping(API_PREFIX + "/getOpinionNumber")
+    JSONObject getOpinionNumber();
+
     @PostMapping(API_PREFIX + "/queryOpinionTypeAmount")
     List<UserOpinion> queryOpinionTypeAmount();
 

+ 3 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/ContractLogVO.java

@@ -42,6 +42,9 @@ public class ContractLogVO extends ContractLog {
 
 	private List<String> selectPrimaryKeyIds;
 
+	@ApiModelProperty("是否有删除、废除权限")
+	private boolean operation;
+
 	public void setSelectNodeList(String primaryKeyId, String title){
 		if(this.selectNodeList == null){
 			this.selectNodeList = new ArrayList<>();

+ 29 - 3
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ManagerHomePageVO.java

@@ -40,8 +40,13 @@ public class ManagerHomePageVO {
      */
     private List<UserOpinionFlow> userOpinionFlowList = new ArrayList<>();
 
-    public void setUserOpinionFlowList(String userOpinionId, String title, Integer currentLink, Integer newNumber, String currentLinkId, boolean operation){
-        this.userOpinionFlowList.add(new UserOpinionFlow(userOpinionId, title, currentLink, newNumber, currentLinkId, operation));
+    public void setUserOpinionFlowList(String userOpinionId, String title,
+                                       Integer currentLink, Integer newNumber,
+                                       String currentLinkId, String projectContract,
+                                       String roleUser, String manageUser,
+                                       String time, boolean operation){
+
+        this.userOpinionFlowList.add(new UserOpinionFlow(userOpinionId, title, currentLink, newNumber, currentLinkId, projectContract, roleUser, manageUser, time, operation));
     }
 
     public OpinionDetails getOpinionDetails(String projectName, String contractName, String opinionContent, String submitUserName, String submitUser, String submitUserRole, String submitPhone, String manageTime, List<String> fileUrl){
@@ -138,6 +143,18 @@ public class ManagerHomePageVO {
         @ApiModelProperty("标题")
         private String title;
 
+        @ApiModelProperty("项目及合同段")
+        private String projectContract;
+
+        @ApiModelProperty("客户及客户岗位")
+        private String roleUser;
+
+        @ApiModelProperty("处理人")
+        private String manageUser;
+
+        @ApiModelProperty("时间")
+        private String time;
+
         //当前环节
         @ApiModelProperty("当前环节")
         private Integer currentLink;
@@ -154,12 +171,21 @@ public class ManagerHomePageVO {
         @ApiModelProperty("是否有操作权限")
         private boolean operation;
 
-        public UserOpinionFlow(String userOpinionId, String title, Integer currentLink, Integer newNumber, String currentLinkId, boolean operation){
+        public UserOpinionFlow(String userOpinionId, String title,
+                               Integer currentLink, Integer newNumber,
+                               String currentLinkId, String projectContract,
+                               String roleUser, String manageUser,
+                               String time, boolean operation){
+
             this.userOpinionId = userOpinionId;
             this.title = title;
             this.currentLink = currentLink;
             this.newNumber = newNumber;
             this.currentLinkId = currentLinkId;
+            this.projectContract = projectContract;
+            this.roleUser = roleUser;
+            this.manageUser = manageUser;
+            this.time = time;
             this.operation = operation;
         }
     }

+ 20 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -92,6 +92,25 @@ public class InformationWriteQueryController extends BladeController {
 
 	private final ProjectClient projectClient;
 
+	/**
+	 * 获取文件题名
+	 */
+	@GetMapping("/queryDocumentTitle")
+	@ApiOperationSupport(order = 28)
+	@ApiOperation(value = "获取文件题名")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "primaryKeyId", value = "节点的primaryKeyId", required = true),
+			@ApiImplicitParam(name = "classify", value = "当前所选的类型", required = true)
+	})
+	public R<String> queryDocumentTitle(@RequestParam String primaryKeyId, @RequestParam Integer classify){
+
+		List<InformationQuery> result = this.informationQueryService.list(Wrappers.<InformationQuery>lambdaQuery().eq(InformationQuery::getClassify, classify).eq(InformationQuery::getWbsId, primaryKeyId));
+		if(result != null && result.size() > 0){
+			return R.data(result.get(0).getName());
+		}
+		return R.data(300, null, "未找到文件题名");
+	}
+
 	/**
 	 * 初始化合同段导图树
 	 */
@@ -265,7 +284,7 @@ public class InformationWriteQueryController extends BladeController {
 						//说明开启数据复制限制,根据合同段类型判断哪些数据是能够被复制的
 						String removeString = new Integer("1").equals(contract.getContractType()) ? "1,2,3" : "5,6,7";
 						//找符合条件的表格
-						List<WbsTreeContract> tables = tableList.stream().filter(tree -> Arrays.asList(removeString.split(",")).contains(tree.getTableType().toString())).distinct().collect(Collectors.toList());
+						List<WbsTreeContract> tables = tableList.stream().filter(tree -> Arrays.asList(removeString.split(",")).contains(tree.getTableOwner())).distinct().collect(Collectors.toList());
 						if(tables.size() <= 0){
 							continue;
 						}

+ 9 - 0
blade-service/blade-business/src/main/java/org/springblade/business/feignClient/OpinionUserClientImpl.java

@@ -1,5 +1,6 @@
 package org.springblade.business.feignClient;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
@@ -33,6 +34,14 @@ public class OpinionUserClientImpl implements OpinionUserClient {
 
     private final IUserOpinionFileService userOpinionFileService;
 
+    @Override
+    public JSONObject getOpinionNumber() {
+        JSONObject json = new JSONObject();
+        json.put("currentUserCount", this.userOpinionService.getOpinionNumber(String.valueOf(AuthUtil.getUserId())));
+        json.put("otherUserCount", this.userOpinionService.getOpinionNumber(null));
+        return json;
+    }
+
     @Override
     public List<UserOpinion> queryOpinionTypeAmount() {
         return this.userOpinionService.queryOpinionTypeAmount();

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

@@ -35,7 +35,7 @@ public interface ContractLogMapper extends BaseMapper<ContractLog> {
 
 	List<ContractLog> queryFillUser(@Param("vo") ContractLogVO vo);
 
-	List<ContractLog> constructionLogPage(@Param("current") Integer current, @Param("size") Integer size, @Param("vo") ContractLogVO vo);
+	List<ContractLog> constructionLogPage(@Param("current") Integer current, @Param("size") Integer size, @Param("vo") ContractLogVO vo, @Param("currentUserId") Long currentUserId);
 
 	Integer selectPageCount(@Param("vo") ContractLogVO vo);
 

+ 33 - 2
blade-service/blade-business/src/main/java/org/springblade/business/mapper/ContractLogMapper.xml

@@ -29,6 +29,34 @@
         <result column="batch" property="batch"/>
     </resultMap>
 
+    <!-- 通用查询映射结果 -->
+    <resultMap id="contractLogVoResultMap" type="org.springblade.business.vo.ContractLogVO">
+        <result column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_dept" property="createDept"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="project_id" property="projectId"/>
+        <result column="contract_id" property="contractId"/>
+        <result column="wbs_node_id" property="wbsNodeId"/>
+        <result column="wbs_node_type" property="wbsNodeType"/>
+        <result column="record_time" property="recordTime"/>
+        <result column="record_number" property="recordNumber"/>
+        <result column="project_pileno" property="projectPileno"/>
+        <result column="project_part" property="projectPart"/>
+        <result column="data_id" property="dataId"/>
+        <result column="create_user_name" property="createUserName"/>
+        <result column="file_name" property="fileName"/>
+        <result column="pdf_url" property="pdfUrl"/>
+        <result column="e_visa_pdf_url" property="eVisaPdfUrl"/>
+        <result column="audit_user_id_and_name" property="auditUserIdAndName"/>
+        <result column="batch" property="batch"/>
+        <result column="operation" property="operation"/>
+    </resultMap>
+
     <select id="getSubmitLogDateList" resultType="java.lang.String">
         select record_time from u_contract_log where is_deleted = 0 and wbs_node_id = #{primaryKeyId} and contract_id = #{contractId} and record_time like concat('%',#{year},'%') group by record_time order by record_time DESC
     </select>
@@ -37,7 +65,7 @@
       select create_user, create_user_name from u_contract_log where is_deleted = 0 and wbs_node_id = #{vo.wbsNodeId}
     </select>
 
-    <select id="constructionLogPage" resultMap="contractLogResultMap">
+    <select id="constructionLogPage" resultMap="contractLogVoResultMap">
         select
           id,
           record_time,
@@ -51,7 +79,10 @@
           pdf_url,
           e_visa_pdf_url,
           audit_user_id_and_name,
-          batch
+          batch,
+          CASE
+          WHEN create_user = #{currentUserId} THEN true
+          ELSE false END AS operation
         from
           u_contract_log
         where

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

@@ -31,6 +31,8 @@ import java.util.List;
  */
 public interface UserOpinionMapper extends BaseMapper<UserOpinion> {
 
+	Integer getOpinionNumber(@Param("userId") String userId);
+
 	List<UserOpinion> opinionPage(@Param("current")Long current, @Param("size")Long size, @Param("param") UserOpinionVO userOpinion, @Param("currentUser") String currentUser);
 
 	List<UserOpinion> queryOpinionTypeAmount();

+ 23 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/UserOpinionMapper.xml

@@ -39,6 +39,29 @@
         <result column="manage_user_name" property="managerUserName"/>
     </resultMap>
 
+    <select id="getOpinionNumber" resultType="java.lang.Integer">
+        SELECT
+          COUNT(querys.user_opinion_id)
+        FROM
+        (
+            SELECT
+                uof.user_opinion_id
+            FROM
+              u_user_opinion_flow AS uof
+            LEFT JOIN u_user_opinion AS uo ON uof.user_opinion_id = uo.id
+            WHERE
+              uof.is_deleted = 0
+            AND uof.sort = 4
+            AND uof.is_current != 2
+            <if test="userId != null and userId != ''">
+                AND uof.manage_user = #{userId}
+                AND (uo.is_ignore != 1 OR uo.is_ignore IS NULL)
+            </if>
+            GROUP BY
+            uof.user_opinion_id
+        ) AS querys
+    </select>
+
     <select id="queryOpinionTypeAmount" resultMap="userOpinionResultMap">
         select project_id, problem_type from u_user_opinion where is_deleted = 0
     </select>

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

@@ -21,6 +21,8 @@ import org.springblade.business.vo.MessageWarningVO;
 import org.springblade.core.mp.base.BaseService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.util.List;
+
 /**
  *  服务类
  *
@@ -32,6 +34,8 @@ public interface IMessageWarningService extends BaseService<MessageWarning> {
 	/**
 	 * 保存记录
 	 */
-	void savePushUserMessageWarning(MessageWarningVO vo);
+	void savePushUserMessageWarning(MessageWarningVO vos);
+
+	void savePushUserMessageWarning(List<MessageWarningVO> vo);
 
 }

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

@@ -18,6 +18,8 @@ import java.util.List;
  */
 public interface IUserOpinionService extends BaseService<UserOpinion> {
 
+	Integer getOpinionNumber(String userId);
+
 	List<UserOpinion> queryOpinionTypeAmount();
 
 	/**

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

@@ -27,6 +27,7 @@ import org.springblade.business.vo.FileUserVO;
 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.secure.utils.AuthUtil;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
@@ -80,7 +81,7 @@ public class ContractLogServiceImpl extends BaseServiceImpl<ContractLogMapper, C
 		//总数
 		Integer count = this.baseMapper.selectPageCount(logVO);
 		//分页信息
-		List<ContractLog> result = this.baseMapper.constructionLogPage(current, logVO.getSize(), logVO);
+		List<ContractLog> result = this.baseMapper.constructionLogPage(current, logVO.getSize(), logVO, AuthUtil.getUserId());
 		//没有数据
 		if(result == null || result.size() == 0){
 			return Condition.getPage(query);

+ 10 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/MessageWarningServiceImpl.java

@@ -16,6 +16,8 @@
  */
 package org.springblade.business.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import org.springblade.business.entity.MessageWarning;
 import org.springblade.business.mapper.MessageWarningMapper;
 import org.springblade.business.service.IMessageWarningService;
@@ -24,6 +26,8 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  *  服务实现类
  *
@@ -33,6 +37,12 @@ import org.springframework.stereotype.Service;
 @Service
 public class MessageWarningServiceImpl extends BaseServiceImpl<MessageWarningMapper, MessageWarning> implements IMessageWarningService {
 
+	@Override
+	public void savePushUserMessageWarning(List<MessageWarningVO> vos) {
+		List<MessageWarning> saveList = JSONArray.parseArray(JSONObject.toJSONString(vos), MessageWarning.class);
+		this.saveBatch(saveList);
+	}
+
 	@Override
 	public void savePushUserMessageWarning(MessageWarningVO vo) {
 		MessageWarning messageWarning = new MessageWarning();

+ 52 - 3
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -10,6 +10,7 @@ import org.apache.commons.lang.time.DateUtils;
 import org.springblade.business.entity.*;
 import org.springblade.business.mapper.TaskMapper;
 import org.springblade.business.service.*;
+import org.springblade.business.vo.MessageWarningVO;
 import org.springblade.business.vo.TaskApprovalVO;
 import org.springblade.business.vo.TaskVO;
 import org.springblade.common.utils.SnowFlakeUtil;
@@ -31,6 +32,10 @@ import org.springblade.flow.core.feign.NewFlowClient;
 import org.springblade.flow.core.utils.FlowUtil;
 import org.springblade.flow.core.utils.TaskUtil;
 import org.springblade.flow.core.vo.FlowProcessVO;
+import org.springblade.manager.entity.ContractInfo;
+import org.springblade.manager.entity.ProjectInfo;
+import org.springblade.manager.feign.ContractClient;
+import org.springblade.manager.feign.ProjectClient;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
@@ -67,6 +72,12 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
 
     private final IContractLogService contractLogService;
 
+    private final IMessageWarningService messageWarningService;
+
+    private final ProjectClient projectClient;
+
+    private final ContractClient contractClient;
+
     @Override
     public List<TaskParallel> queryApprovalUser(String formDataIds) {
         //返回结果
@@ -363,6 +374,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             List<TaskParallel> otherLink = this.taskParallelService.queryOtherLinkList(parallelProcessInstanceId);
             //主流程实例ID
             String masterProcessInstanceId;
+
             if(otherLink != null && otherLink.size() > 0){
                 masterProcessInstanceId = otherLink.get(0).getProcessInstanceId();
                 for(TaskParallel parallel : otherLink){
@@ -382,10 +394,8 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                     }
                 }
             } else {
-                //获取主流程数据
-                Task task = this.getOne(Wrappers.<Task>lambdaQuery().eq(Task::getIsDeleted, 0).eq(Task::getProcessInstanceId, currentLink.getProcessInstanceId()));
                 //找到实例ID
-                masterProcessInstanceId = task.getProcessInstanceId();
+                masterProcessInstanceId = currentLink.getProcessInstanceId();
             }
 
             //处理完分支流程后,将主流程结束并设置状态为废除
@@ -398,6 +408,45 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             this.update(Wrappers.<Task>lambdaUpdate().set(Task::getStatus, 3).set(Task::getUpdateTime, new Date()).eq(Task::getProcessInstanceId, masterProcessInstanceId));
             //修改对应的业务数据状态为已废除
             this.updateBusinessDataByFormDataId(this.getOne(Wrappers.<Task>lambdaQuery().eq(Task::getProcessInstanceId, masterProcessInstanceId)), 3, null);
+
+            //查询合同段及项目名称
+            ProjectInfo projectInfo = this.projectClient.queryProjectList(Func.toStrList(masterTask.getProjectId())).get(0);
+            String projectName = StringUtils.isNotEmpty(projectInfo.getProjectAlias()) ? projectInfo.getProjectAlias() : projectInfo.getProjectName();
+            ContractInfo contractInfo = this.contractClient.getContractById(Long.parseLong(masterTask.getContractId()));
+            String contractName = contractInfo.getContractName();
+
+            try{
+                //设置废除通知信息
+                List<MessageWarningVO> messageWarningList = new ArrayList<>();
+                List<TaskParallel> linkTaskList = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getProcessInstanceId, masterProcessInstanceId));
+                for(TaskParallel parallel : linkTaskList){
+                    if(!currentLink.getId().equals(parallel.getId())){
+                        messageWarningList.add(new MessageWarningVO(
+                                Long.parseLong(masterTask.getProjectId()),
+                                Long.parseLong(masterTask.getContractId()),
+                                3,
+                                "【" + projectName + "-" + contractName + "】的用户【" + AuthUtil.getNickName() + "】废除了【" + masterTask.getTaskName() + "】,废除原因为【" + comment + "】,请及时查看",
+                                Long.parseLong(parallel.getTaskUser()),
+                                0
+                        ));
+                    }
+                }
+
+                //通知上报人
+                messageWarningList.add(new MessageWarningVO(
+                        Long.parseLong(masterTask.getProjectId()),
+                        Long.parseLong(masterTask.getContractId()),
+                        3,
+                        "【" + projectName + "-" + contractName + "】的用户【" + AuthUtil.getNickName() + "】废除了【" + masterTask.getTaskName() + "】,废除原因为【" + comment + "】,请及时查看",
+                        masterTask.getCreateUser(),
+                        0
+                ));
+
+                //生成废除通知
+                this.messageWarningService.savePushUserMessageWarning(messageWarningList);
+            }catch (Exception e){
+                e.printStackTrace();
+            }
         }
 
         return true;

+ 5 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/UserOpinionServiceImpl.java

@@ -56,6 +56,11 @@ public class UserOpinionServiceImpl extends BaseServiceImpl<UserOpinionMapper, U
 
 	private final SaveUserInfoByProjectClient saveUserInfoByProjectClient;
 
+	@Override
+	public Integer getOpinionNumber(String userId) {
+		return this.baseMapper.getOpinionNumber(userId);
+	}
+
 	@Override
 	public List<UserOpinion> queryOpinionTypeAmount() {
 		return this.baseMapper.queryOpinionTypeAmount();

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

@@ -212,12 +212,18 @@ public class EVisaServiceImpl implements EVisaService {
             batch = new Integer(sysBatch);
         }
 
+        //根据任务类型获取对应的文件信息
+        TaskApprovalVO taskFile = this.taskClient.queryBusinessDataTask(JSONObject.parseObject(JSONObject.toJSONString(task), TaskApprovalVO.class));
+        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){
             //没有电签配置,默认当前任务为不签字审批,返回成功
-            return SUCCESS;
+            return SUCCESS + "@@@@" + taskFile.getApprovalFileList().get(0).getFileUrl();
         }
 
         //首先获取当前用户的证书信息
@@ -227,13 +233,6 @@ public class EVisaServiceImpl implements EVisaService {
             return NOT_PFX_OR_FILE;
         }
 
-        //根据任务类型获取对应的文件信息
-        TaskApprovalVO taskFile = this.taskClient.queryBusinessDataTask(JSONObject.parseObject(JSONObject.toJSONString(task), TaskApprovalVO.class));
-        if(taskFile == null || taskFile.getApprovalFileList().size() <= 0){
-            //没有找到业务文件,取消签章
-            return NOT_PFX_OR_FILE;
-        }
-
         //上锁
         if(DistributedRedisLock.acquire(AuthUtil.getUserId().toString(), batch)){
             try{
@@ -243,8 +242,8 @@ public class EVisaServiceImpl implements EVisaService {
                 //这里的文件只会是一张拼接好的PDF
                 for(TaskApprovalVO.ApprovalFile file : files){
                     //获取PDF文件
-                    PDDocument document = PDDocument.load(CommonUtil.getOSSInputStream(file.getFileUrl()));
-                    int page = document.getPages().getCount();
+//                    PDDocument document = PDDocument.load(CommonUtil.getOSSInputStream(file.getFileUrl()));
+//                    int page = document.getPages().getCount();
 
                     //准备签章策略
                     List<SealStrategyVO> sealStrategyVOS = new ArrayList<>();

+ 48 - 14
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ManagerHomePageController.java

@@ -1,6 +1,7 @@
 package org.springblade.manager.controller;
 
 import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.mixsmart.utils.StringUtils;
 import io.swagger.annotations.Api;
@@ -26,10 +27,7 @@ import org.springblade.system.feign.IDictBizClient;
 import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.HashMap;
 import java.util.Iterator;
@@ -57,6 +55,16 @@ public class ManagerHomePageController extends BladeController {
 
     private final ISysClient sysClient;
 
+    /**
+     * 获取当前用户和全部的工单数量
+     */
+    @GetMapping("/getOpinionNumber")
+    @ApiOperationSupport(order = 7)
+    @ApiOperation(value = "获取当前用户和全部的工单数量")
+    public R<JSONObject> getOpinionNumber(){
+        return R.data(this.opinionUserClient.getOpinionNumber());
+    }
+
     /**
      * 证书统计
      */
@@ -257,10 +265,20 @@ public class ManagerHomePageController extends BladeController {
             //拼接数据
             result.forEach(vo -> {
                 if(!new Integer("1").equals(vo.getIsIgnore())){
-                    String title = "待办工单任务:" + DateUtil.format(vo.getCreateTime(), "yyyy-MM-dd HH:mm:ss") + "来自" + "【" + vo.getProjectName() + "-" + vo.getContractName() + "】" +
-                            "的【" + vo.getSubmitUserRole() + vo.getSubmitUserName() + "】" + "向您反馈" + "\"" + vo.getProblemType() + "\"";
 
-                    resultVO.setUserOpinionFlowList(vo.getUserOpinionId().toString(), title, vo.getCurrentLink(), vo.getNewNumber(), vo.getCurrentLinkId().toString(), vo.getOperation());
+                    resultVO.setUserOpinionFlowList(
+                            vo.getUserOpinionId().toString(),
+                            "\"" + vo.getProblemType() + "\"",
+                            vo.getCurrentLink(),
+                            vo.getNewNumber(),
+                            vo.getCurrentLinkId().toString(),
+                            "【" + vo.getProjectName() + "-" + vo.getContractName() + "】",
+                            "【" + vo.getSubmitUserRole() + vo.getSubmitUserName() + "】",
+                            "您",
+                            DateUtil.format(vo.getCreateTime(), "yyyy-MM-dd HH:mm:ss"),
+                            vo.getOperation()
+                    );
+
                     count.getAndIncrement();
                 }
             });
@@ -292,18 +310,34 @@ public class ManagerHomePageController extends BladeController {
             result.removeIf(BusinessUserOpinionVO::getIsCurrent);
             //拼接数据
             result.forEach(vo -> {
-                String title;
                 if(vo.getOperation()){
                     //有操作权限且没有被忽略的
                     if(!new Integer("1").equals(vo.getIsIgnore())){
-                        title = "待办工单任务:" + DateUtil.format(vo.getCreateTime(), "yyyy-MM-dd HH:mm:ss") + "来自" + "【" + vo.getProjectName() + "-" + vo.getContractName() + "】" +
-                                "的【" + vo.getSubmitUserRole() + vo.getSubmitUserName() + "】" + "向您反馈" + "\"" + vo.getProblemType() + "\"";
-                        resultVO.setUserOpinionFlowList(vo.getUserOpinionId().toString(), title, vo.getCurrentLink(), vo.getNewNumber(), vo.getCurrentLinkId().toString(), vo.getOperation());
+
+                        resultVO.setUserOpinionFlowList(
+                                vo.getUserOpinionId().toString(),
+                                "\"" + vo.getProblemType() + "\"", vo.getCurrentLink(),
+                                vo.getNewNumber(),
+                                vo.getCurrentLinkId().toString(),
+                                "【" + vo.getProjectName() + "-" + vo.getContractName() + "】",
+                                "【" + vo.getSubmitUserRole() + vo.getSubmitUserName() + "】",
+                                "您",
+                                DateUtil.format(vo.getCreateTime(), "yyyy-MM-dd HH:mm:ss"),
+                                vo.getOperation()
+                        );
                     }
                 } else {
-                    title = "待办工单任务:" + DateUtil.format(vo.getCreateTime(), "yyyy-MM-dd HH:mm:ss") + "来自" + "【" + vo.getProjectName() + "-" + vo.getContractName() + "】" +
-                            "的【" + vo.getSubmitUserRole() + vo.getSubmitUserName() + "】" + "向【" + vo.getManagerUserName() + "】反馈" + "\"" + vo.getProblemType() + "\"";
-                    resultVO.setUserOpinionFlowList(vo.getUserOpinionId().toString(), title, vo.getCurrentLink(), vo.getNewNumber(), vo.getCurrentLinkId().toString(), vo.getOperation());
+                    resultVO.setUserOpinionFlowList(
+                            vo.getUserOpinionId().toString(),
+                            "\"" + vo.getProblemType() + "\"",
+                            vo.getCurrentLink(),
+                            vo.getNewNumber(),
+                            vo.getCurrentLinkId().toString(),
+                            "【" + vo.getProjectName() + "-" + vo.getContractName() + "】",
+                            "【" + vo.getSubmitUserRole() + vo.getSubmitUserName() + "】",
+                            "【" + vo.getManagerUserName() + "】",
+                            DateUtil.format(vo.getCreateTime(), "yyyy-MM-dd HH:mm:ss"),
+                            vo.getOperation());
                 }
             });
 

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

@@ -88,7 +88,7 @@ public class WbsTreeContractClientImpl implements WbsTreeContractClient {
             LambdaQueryWrapper<WbsTreeContract> wrapper = Wrappers.lambdaQuery();
             wrapper.eq(WbsTreeContract::getParentId, treeNode.getId()).eq(WbsTreeContract::getContractId, treeNode.getContractId()).eq(WbsTreeContract::getType, "2");
             if(StringUtils.isNotEmpty(classify)){
-                wrapper.in(WbsTreeContract::getTableType, "1".equals(classify) ? Arrays.asList("1,2,3".split(",")) : Arrays.asList("4,5,6".split(",")));
+                wrapper.in(WbsTreeContract::getTableOwner, "1".equals(classify) ? Arrays.asList("1,2,3".split(",")) : Arrays.asList("4,5,6".split(",")));
             }
             //查询表格
             return this.wbsTreeContractService.list(wrapper);

+ 13 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -394,12 +394,20 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 				e.printStackTrace();
 			}
 
-			//处理每个表格的关联情况
-			List<JSONObject> linkTabIds = JSONArray.parseArray(JSONObject.toJSONString(tableInfo.getLinkTabIds()), JSONObject.class);
-			for(JSONObject json : linkTabIds){
-				json.put("businessId", id);
+
+			List<Object> linkTabIds = tableInfo.getLinkTabIds();
+			if(linkTabIds == null || linkTabIds.size() > 0){
+				//这一步主要为了兼容同工序时只想在第一张勾选的情况
+				linkTabIds = tableInfoList.get(0).getLinkTabIds();
+			}
+			if(linkTabIds != null && linkTabIds.size() > 0){
+				//处理每个表格的关联情况
+				List<JSONObject> jsonLinkTabIds = JSONArray.parseArray(JSONObject.toJSONString(linkTabIds), JSONObject.class);
+				for(JSONObject json : jsonLinkTabIds){
+					json.put("businessId", id);
+				}
+				logWbsList.addAll(jsonLinkTabIds);
 			}
-			logWbsList.addAll(linkTabIds);
 		}
 
 		//保存日志记录