huangtf hace 2 años
padre
commit
8ddace150d

+ 19 - 3
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java

@@ -280,7 +280,7 @@ public class ArchivesAutoController extends BladeController {
 		//archiveAutoPdfService.test1();
 		Long projectId = 1645263362890129410L;
 		List<ArchiveTreeContract> list = archiveTreeContractClient.getListByProjectId(projectId);
-		archivesAutoService.refreshFileNumberNoSlipt(list);
+		//archivesAutoService.refreshFileNumberNoSlipt(list,null);
 		return R.data("");
 	}
 
@@ -317,11 +317,14 @@ public class ArchivesAutoController extends BladeController {
 
 	/**
 	 * 自动组卷入口
+	 * projectId 为当前项目
+	 * contractId 为客户端当前选定的合同段
+	 * nodeId 为左侧树选定的节点id
 	 * @param projectId
 	 * @return
 	 */
 	@PostMapping("/archiveAutoMethod")
-	public R archiveAutoMethod(Long projectId) {
+	public R archiveAutoMethod(Long projectId,Long contractId,Long nodeId) {
 		//先验证当前项目是否在自动组卷中,组卷中直接返回
 		ProjectInfo projectInfo = projectClient.getById(String.valueOf(projectId));
 		Integer isArchivesAuto = projectInfo.getIsArchivesAuto();
@@ -336,7 +339,7 @@ public class ArchivesAutoController extends BladeController {
 		//项目自动组卷入口
 		archivesAutoService.archiveAutoMethod(projectId);
 		//刷新项目档号
-		archivesAutoService.refreshFileNumberNoSlipt(projectId);
+		archivesAutoService.refreshFileNumberNoSlipt(projectId,contractId,nodeId);
 
 		//设置自动组卷结束
 		projectClient.updateIsArchivesAutoById(projectId,0);
@@ -392,5 +395,18 @@ public class ArchivesAutoController extends BladeController {
 		return R.status(archivesAutoService.removeFiles(ids));
 	}
 
+	/**
+	 * 刷新指定项目的档案
+	 * @param projectId 项目id
+	 * @return R
+	 */
+	@PostMapping("/refreshFileNumber")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "刷新项目档案", notes = "传入projectId,contractId")
+	public R<String> refreshProjectArchive(@RequestParam Long projectId, @RequestParam Long contractId,@RequestParam Long nodeId) {
+		archivesAutoService.refreshFileNumberNoSlipt(projectId,contractId,nodeId);
+		return R.data("刷新成功");
+	}
+
 
 }

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

@@ -71,7 +71,6 @@ public interface IArchivesAutoService extends BaseService<ArchivesAuto> {
 	boolean removeFiles(String ids);
 
 
-	void refreshFileNumberNoSlipt(List<ArchiveTreeContract> archiveTreeContracts);
-
-	void refreshFileNumberNoSlipt(Long projectId);
+	//刷新某个项目的档号
+	void refreshFileNumberNoSlipt(Long projectId,Long contractId,Long nodeId);
 }

+ 104 - 6
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -39,6 +39,8 @@ 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.utils.Func;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.manager.entity.ArchiveTreeContract;
@@ -82,7 +84,6 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	private final NewIOSSClient iossClient;
 
 
-
 	@Override
 	public IPage<ArchivesAutoVO> selectArchivesAutoPage(IPage<ArchivesAutoVO> page, ArchivesAutoVO archivesAuto) {
 		return page.setRecords(baseMapper.selectArchivesAutoPage(page, archivesAuto));
@@ -965,19 +966,29 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 
 
 	/**
-	 * 刷新项目档号
+	 *   不重组的情况下刷新档号
+	 * projectId 为当前项目
+	 * contractId 为客户端当前选定的合同段
+	 * nodeId 为左侧树选定的节点i
+	 * 规则,1. 合同段ID为空,则不过滤
+	 *      2. 业主或者管理员,treeCode为空,则按照nodeid过滤,nodeid为空,则不过滤
+	 *      3. 合同段用户,安装找contractId过滤,过滤该合同段所有节点。
 	 * @param projectId
+	 * @param contractId
+	 * @param nodeId
 	 */
-	public void refreshFileNumberNoSlipt(Long projectId) {
+	public void refreshFileNumberNoSlipt(Long projectId,Long contractId,Long nodeId) {
 		List<ArchiveTreeContract> list = archiveTreeContractClient.getListByProjectId(projectId);
-		this.refreshFileNumberNoSlipt(list);
+		this.refreshFileNumberNoSlipt(list,contractId,nodeId);
 	}
 
 	/**
-	 * 不重组的情况下刷新档号
+	 *
 	 * @param archiveTreeContracts
+	 * @param contractId
+	 * @param nodeId
 	 */
-	public void refreshFileNumberNoSlipt(List<ArchiveTreeContract> archiveTreeContracts) {
+	public void refreshFileNumberNoSlipt(List<ArchiveTreeContract> archiveTreeContracts,Long contractId,Long nodeId) {
 
 		List<ArchiveTreeContractVO2> subTreeList = new ArrayList<>();
 		List<List<ArchiveTreeContract>>  subGroupedList = new ArrayList<>();
@@ -992,6 +1003,10 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 					.map(ArchiveTreeContract::getId)
 					.collect(Collectors.toList());
 
+			//todo 后续根据 authFilter函数过滤
+
+			subList = authFilter(subList,contractId,nodeId);
+
 			index =1;
 			List<ArchivesAuto> archivesAutos = findArchivesAutosByIds(ids);
 			if (archivesAutos == null || archivesAutos.size() == 0) {
@@ -1123,5 +1138,88 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	}
 
 
+	/**
+	 * 施工则返回“C”,监理则返回“S”,其他返回“”
+	 * @return
+	 */
+	public String getAuthCode(Long contractId) {
+		String code ="";
+		BladeUser bladeUser = AuthUtil.getUser();
+		if (AuthUtil.isAdministrator() || contractId == null) {
+			return code;
+		}
+
+		//查询合同段信息
+		ContractInfo contractInfo = contractClient.getContractById(contractId);
+		switch (contractInfo.getContractType()){
+			case 2:
+				code = "S";
+				break;
+			case 3:
+				code = "";
+				break;
+			default:
+				code = "C";
+				break;
+		}
+
+		return code;
+	}
+
+	/**
+	 * 带权限筛选的档案列表筛选函数
+	 * 规则,1. 合同段ID为空,则不过滤
+	 *      2. 业主或者管理员,treeCode为空,则按照nodeid过滤,nodeid为空,则不过滤
+	 *      3. 合同段用户,安装找contractId过滤,过滤该合同段所有节点。
+	 * @param archiveTreeContracts 档案列表archiveTreeContracts
+	 * @param contractId 合同编号,用于获取权限码
+	 * @param nodeId 筛选条件:节点编号
+	 * @return 符合条件的档案列表
+	 */
+	public List<ArchiveTreeContract> authFilter(List<ArchiveTreeContract> archiveTreeContracts, Long contractId, Long nodeId) {
+		//合同段ID为空则全部返回
+		if (contractId == null) {
+			return  archiveTreeContracts;
+		}
+
+		String treeCode = getAuthCode(contractId);
+		String strNodeId = "";
+		if (nodeId!= null) {
+			strNodeId  = nodeId.toString();
+		}
+
+		return archiveTreeContractFilter(archiveTreeContracts, treeCode, strNodeId);
+	}
+
+	/**
+	 * 对档案列表进行筛选
+	 * @param archiveTreeContracts 档案列表
+	 * @param treeCode 筛选条件:权限码
+	 * @param nodeId 筛选条件:节点编号
+	 * @return 符合条件的档案列表
+	 */
+	public List<ArchiveTreeContract> archiveTreeContractFilter(List<ArchiveTreeContract> archiveTreeContracts, String treeCode, String nodeId) {
+		List<ArchiveTreeContract> result = new ArrayList<>();
+
+		if (StringUtils.isEmpty(treeCode) && StringUtils.isEmpty(nodeId)) {
+			return archiveTreeContracts;
+		}
+
+		for (ArchiveTreeContract contract : archiveTreeContracts) {
+			if (StringUtils.isEmpty(treeCode)) {
+				if (StringUtils.isNotEmpty(contract.getAncestors()) && contract.getAncestors().contains(nodeId)) {
+					result.add(contract);
+				}
+			} else {
+				if (treeCode.equals(contract.getTreeCode())) {
+					result.add(contract);
+				}
+			}
+		}
+
+		return result;
+	}
+
+
 
 }