Browse Source

电签相关

huangjn 2 years ago
parent
commit
c3e690eab8

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

@@ -38,6 +38,8 @@ public class ContractLogVO extends ContractLog {
 	@ApiModelProperty("流程状态")
 	private String statusValue;
 
+	private String name;
+
 	private List<SelectTree> selectNodeList;
 
 	private List<String> selectPrimaryKeyIds;

+ 8 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/ContractLogController.java

@@ -385,6 +385,10 @@ public class ContractLogController extends BladeController {
 			//获取数据源id
 			String[] ids = startTaskVO.getIds().split(",");
 			if(ids.length > 0){
+				List<ContractLog> logList = this.contractLogService.list(Wrappers.<ContractLog>lambdaQuery().in(ContractLog::getId, Arrays.asList(ids)));
+				Map<String, String> logMap = new HashMap<>();
+				logList.forEach(log -> logMap.put(log.getId().toString(), log.getFileName()));
+
 				for(String id : ids){
 					//生成任务实体
 					TaskVO taskVO = new TaskVO();
@@ -393,7 +397,10 @@ public class ContractLogController extends BladeController {
 						//标记为自定义流程
 						taskVO.setFixedFlowId(Long.parseLong("0"));
 					}
-
+					//设置任务名称
+					if(StringUtils.isNotEmpty(logMap.get(id))){
+						taskVO.setTaskName(logMap.get(id));
+					}
 					//设置数据源指向
 					taskVO.setFormDataId(id);
 					//设置上报类型

+ 68 - 10
blade-service/blade-business/src/main/java/org/springblade/business/controller/EVisaTaskCheckController.java

@@ -58,6 +58,52 @@ public class EVisaTaskCheckController {
 
     private final IFixedFlowService fixedFlowService;
 
+    /**
+     * 检查所选的流程环节处理人是否具有审批权限(三大填报页、日志列表的批量上报、首件列表的批量上报)
+     */
+    @PostMapping("/checkCustomFlowUserIsEVisaPermissions")
+    @ApiOperation(value = "检查所选的流程环节处理人是否具有审批权限(三大填报页、日志列表的批量上报、首件列表的批量上报)")
+    @ApiOperationSupport(order = 6)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "customFlowUserList", value = "所选的任务人集合,集合形式", required = true),
+            @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true),
+            @ApiImplicitParam(name = "privatePKeyId", value = "表单列表中的isTypePrivatePid字段,集合形式"),
+            @ApiImplicitParam(name = "theLogPrimaryKeyId", value = "日志左侧所选的填报类型ID"),
+            @ApiImplicitParam(name = "firstId", value = "首件记录ID,列表批量上报时传任意一个即可")
+    })
+    public R<Boolean> checkCustomFlowUserIsEVisaPermissions(@RequestBody JSONObject json){
+        if(json.containsKey("customFlowUserList") && !json.getJSONArray("customFlowUserList").isEmpty()){
+            //获取审批人
+            List<Long> customFlowUserList = json.getJSONArray("customFlowUserList").toJavaList(Long.class);
+            //获取这些审批人在当前合同段的权限
+            List<JSONObject> userRoleList = this.saveUserInfoByProjectClient.queryUserContractRole(customFlowUserList, json.getString("contractId"));
+            if(userRoleList == null || userRoleList.size() <= 0){
+                return R.data(300, null, "所选审批人均未找到对应权限,请联系服务人员处理");
+            }
+
+            //获取电签配置
+            List<JSONObject> jsonList = this.queryTableEVisaConfig(json);
+            if(jsonList == null){
+                return R.data(300, null, "未找到符合电签配置的相关流程,请联系服务人员处理");
+            }
+
+            //汇总电签配置的审批角色
+            List<String> eVisaRoleList = jsonList.stream().map(jsonObject -> jsonObject.getString("sigRoleId")).distinct().collect(Collectors.toList());
+            //检查
+            //循环审批人的角色集合,并判断电签配置中是否含有这个角色
+            for(JSONObject userRole : userRoleList){
+                if(!eVisaRoleList.contains(userRole.getString("roleId"))){
+                    User user = this.userClient.userInfoById(userRole.getLong("userId")).getData();
+                    return R.data(300, false, "所选中的用户【" + user.getRealName() + "】不具有相关审批权限,请联系维护人员处理或更换审批人员");
+                }
+            }
+            //均满足
+            return R.data(true);
+        }
+
+        return R.data(300, false, "未选择审批人!!!");
+    }
+
     /**
      * 获取符合条件的预设流程(三大填报页、日志列表的批量上报、首件列表的批量上报)
      */
@@ -65,7 +111,6 @@ public class EVisaTaskCheckController {
     @ApiOperationSupport(order = 5)
     @ApiOperation(value = "获取符合条件的预设流程(三大填报页、日志列表的批量上报、首件列表的批量上报)")
     @ApiImplicitParams({
-            @ApiImplicitParam(name = "flowId", value = "所选的流程ID", required = true),
             @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true),
             @ApiImplicitParam(name = "privatePKeyId", value = "表单列表中的isTypePrivatePid字段,集合形式"),
             @ApiImplicitParam(name = "theLogPrimaryKeyId", value = "日志左侧所选的填报类型ID"),
@@ -77,6 +122,7 @@ public class EVisaTaskCheckController {
         vo.setCurrent(1);
         vo.setSize(100);
         vo.setContractId(json.getLong("contractId"));
+        vo.setProjectId(json.getLong("projectId"));
 
         IPage<FixedFlowVO> flowPage = this.fixedFlowService.selectFixedFlowPage(vo);
         List<FixedFlowVO> flowList = flowPage.getRecords();
@@ -94,7 +140,7 @@ public class EVisaTaskCheckController {
         //校验这些预设流程哪些是符合条件的
         for(FixedFlowVO next : flowList){
             //先将流程设置为可选
-            next.setDisabled(true);
+            next.setDisabled(false);
 
             //首先找到对应流程下的审批人组
             List<FixedFlowLink> flowLink = this.fixedFlowLinkService.selectFixedFlowLink(next.getId().toString());
@@ -102,15 +148,27 @@ public class EVisaTaskCheckController {
             //获取这些人当前合同段下的权限
             List<JSONObject> userRoleList = this.saveUserInfoByProjectClient.queryUserContractRole(flowLink.stream().map(FixedFlowLink::getFixedFlowLinkUser).distinct().collect(Collectors.toList()), json.getString("contractId"));
             if(userRoleList == null){
-                next.setDisabled(false);
+                next.setDisabled(true);
             } else {
                 //校验流程
-                //循环审批人的角色集合,并判断电签配置中是否含有这个角色
-                for(JSONObject userRole : userRoleList){
-                    if(!eVisaRoleList.contains(userRole.getString("roleId"))){
-                        //但凡有个不符合条件,删除
-                        next.setDisabled(false);
-                        break;
+                if(eVisaRoleList.size() >= userRoleList.size()){
+                    //循环审批人的角色集合,并判断电签配置中是否含有这个角色
+                    for(JSONObject userRole : userRoleList){
+                        if(!eVisaRoleList.contains(userRole.getString("roleId"))){
+                            //但凡有个不符合条件,禁选
+                            next.setDisabled(true);
+                            break;
+                        }
+                    }
+                } else {
+                    //小于,反向判断
+                    List<String> userRoleIds = userRoleList.stream().map(jsonObject -> jsonObject.getString("roleId")).distinct().collect(Collectors.toList());
+                    for(String eVisaRole : eVisaRoleList){
+                        if(!userRoleIds.contains(eVisaRole)){
+                            //但凡有个不符合条件,禁选
+                            next.setDisabled(true);
+                            break;
+                        }
                     }
                 }
             }
@@ -287,7 +345,7 @@ public class EVisaTaskCheckController {
             //首件,先获取记录
             InformationQuery query = this.informationQueryService.getById(json.getLong("firstId"));
             if(query != null){
-                jsonList = this.queryTableEVisaConfig(Func.toStrList(query.getTableId()));
+                jsonList = this.queryTableEVisaConfig(Func.toStrList(this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(query.getTableId()).getIsTypePrivatePid().toString()));
             } else {
                 jsonList = null;
             }

+ 24 - 2
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -93,6 +93,23 @@ public class InformationWriteQueryController extends BladeController {
 
 	private final ProjectClient projectClient;
 
+	/**
+	 * 获取文件题名
+	 */
+	@GetMapping("/queryFirstDocumentTitle")
+	@ApiOperationSupport(order = 29)
+	@ApiOperation(value = "获取文件题名")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "queryId", value = "列表ID", required = true)
+	})
+	public R<String> queryFirstDocumentTitle(@RequestParam String queryId){
+		InformationQuery query = this.informationQueryService.getById(queryId);
+		if(query != null){
+			return R.data(query.getName());
+		}
+		return R.data(300, null, "未找到文件题名");
+	}
+
 	/**
 	 * 获取文件题名
 	 */
@@ -104,7 +121,6 @@ public class InformationWriteQueryController extends BladeController {
 			@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());
@@ -657,6 +673,9 @@ public class InformationWriteQueryController extends BladeController {
 			//获取数据源id
 			String[] ids = startTaskVO.getIds().split(",");
 			if(ids.length > 0){
+				List<InformationQuery> queryList = this.informationQueryService.list(Wrappers.<InformationQuery>lambdaQuery().in(InformationQuery::getId, Arrays.asList(ids)));
+				Map<String, String> queryMap = new HashMap<>();
+				queryList.forEach(query -> queryMap.put(query.getId().toString(), query.getName()));
 				try{
 					for(String id : ids){
 						//生成任务实体
@@ -666,7 +685,10 @@ public class InformationWriteQueryController extends BladeController {
 							//标记为自定义流程
 							taskVO.setFixedFlowId(Long.parseLong("0"));
 						}
-
+						//设置任务名称
+						if(StringUtils.isNotEmpty(queryMap.get(id))){
+							taskVO.setTaskName(queryMap.get(id));
+						}
 						//设置数据源指向
 						taskVO.setFormDataId(id);
 						//设置上报类型

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

@@ -285,8 +285,7 @@
         LEFT JOIN u_information_query AS uiq ON wtc.p_key_id = uiq.wbs_id AND uiq.classify = #{classify} and uiq.is_deleted = 0
         LEFT JOIN u_tree_contract_first AS tcf ON wtc.p_key_id = tcf.wbs_node_id AND tcf.is_deleted = 0
         WHERE
-            wtc.wbs_type = 1
-        AND wtc.type = 1
+            wtc.type = 1
         AND wtc.major_data_type in(1,2,3,4)
         AND wtc.ancestors like concat('%',#{parentId},'%')
         AND wtc.contract_id = #{contractId}

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

@@ -23,9 +23,7 @@ import org.springblade.business.vo.InformationQueryVO;
 import org.springblade.business.vo.QueryProcessDataVO;
 import org.springblade.core.mp.base.BaseService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.vo.WbsTreeContractTreeVOS;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 

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

@@ -93,7 +93,10 @@ public class ContractLogServiceImpl extends BaseServiceImpl<ContractLogMapper, C
 		}
 		//有数据,转换成VO
 		List<ContractLogVO> voResult = JSONArray.parseArray(JSONObject.toJSONString(result), ContractLogVO.class);
-		voResult.forEach(vo -> vo.setStatusValue(new Integer("0").equals(vo.getStatus()) ? "未上报" : new Integer("1").equals(vo.getStatus()) ? "待审批" : new Integer("2").equals(vo.getStatus()) ? "已审批" : "已废除"));
+		voResult.forEach(vo -> {
+			vo.setName(vo.getFileName());
+			vo.setStatusValue(new Integer("0").equals(vo.getStatus()) ? "未上报" : new Integer("1").equals(vo.getStatus()) ? "待审批" : new Integer("2").equals(vo.getStatus()) ? "已审批" : "已废除");
+		});
 
 		IPage<ContractLogVO> iPage = Condition.getPage(query);
 		iPage.setTotal(count);

+ 15 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FirstController.java

@@ -200,7 +200,8 @@ public class FirstController extends BladeController {
                         return R.fail("失败");
                     }
 
-                    List<Map<String, Object>> businessDataMapList = this.getFirstBusinessData(firstId).getData();
+                    //获取填报数据
+                    List<Map<String, Object>> businessDataMapList = this.getFirstBusinessData(firstId).getData().get("data");
 
                     try{
                         //处理数据
@@ -372,9 +373,9 @@ public class FirstController extends BladeController {
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "firstId", value = "pkeyId", required = true)
     })
-    public R<List<Map<String, Object>>> getFirstBusinessData(String firstId) {
+    public R<Map<String, List<Map<String, Object>>>> getFirstBusinessData(String firstId) {
         if(StringUtils.isNotEmpty(firstId)){
-            List<Map<String, Object>> result = new ArrayList<>();
+            Map<String, List<Map<String, Object>>> result = new HashMap<>();
 
             JSONObject json = this.informationQueryClient.queryFirstBusinessDataByFirstId(firstId);
             if(json != null){
@@ -384,6 +385,8 @@ public class FirstController extends BladeController {
                     //获取填报数据
                     List<Map<String, Object>> businessDataMapList = this.jdbcTemplate.queryForList("SELECT * FROM " + tableNode.getInitTableName() + " WHERE group_id = " + json.getString("id"));
                     if(businessDataMapList.size() > 0){
+                        List<Map<String, Object>> dataResult = new ArrayList<>();
+
                         for(Map<String, Object> mysqlData : businessDataMapList){
                             //数据结果
                             Map<String, Object> reData = new HashMap<>();
@@ -435,9 +438,17 @@ public class FirstController extends BladeController {
                             reData.remove("pkeyId");
                             reData.remove("projectId");
 
-                            result.add(reData);
+                            dataResult.add(reData);
                         }
 
+                        //设置表格数据
+                        result.put("data", dataResult);
+
+                        //获取关联
+                        List<Map<String, Object>> linkMapList = this.jdbcTemplate.queryForList("SELECT link_id AS id,title AS name FROM u_first_link_data WHERE first_id = " + firstId + " and is_deleted = 0");
+                        //设置关联数据
+                        result.put("link", linkMapList);
+
                         return R.data(result);
                     }
                 }