|
@@ -356,7 +356,7 @@ public class AWImplClient implements AWClint {
|
|
|
if (StringUtils.isNotBlank(projectCode)) {
|
|
|
ydParam.setSearchFieldJson(JSON.toJSONString(UtilMap.map("textField_le6o88w0", projectCode)));
|
|
|
}
|
|
|
- // prd 客户系统主数据, 是全量定时从mdmg更新, 因此不能增量
|
|
|
+ // prd 客户系统主数据, 是全量定时从mdm更新, 因此不能增量
|
|
|
List<Map> mapBaseList = ydService.queryFormData_all(ydParam);
|
|
|
if (StringUtils.isNotBlank(projectCode)) {
|
|
|
mapBaseList = mapBaseList.stream().filter(item -> projectCode.equals(item.get("textField_le6o88w0"))).collect(Collectors.toList());
|
|
@@ -405,7 +405,7 @@ public class AWImplClient implements AWClint {
|
|
|
if (projectMaps.size() > 0) {
|
|
|
ydParam2.setFormInstanceId(String.valueOf(projectMaps.get(0).get("instanceId")));
|
|
|
ydClient.operateData(ydParam2, YDConf.FORM_OPERATION.update);
|
|
|
- // 保留tb项目号, 避免冲重复通过模板参加项目 todo::: 临时bug
|
|
|
+ // 保留tb项目号, 避免冲重复通过模板参加项目
|
|
|
formData.put("textField_lqxtykce", UtilMap.getString(projectMaps.get(0), "textField_lqxtykce"));
|
|
|
formData.put("formInstanceId", projectMaps.get(0).get("instanceId"));
|
|
|
} else {
|
|
@@ -414,6 +414,11 @@ public class AWImplClient implements AWClint {
|
|
|
}
|
|
|
log.info("同步项目主数据", projectCode);
|
|
|
}
|
|
|
+ // tb项目成员更新
|
|
|
+ String projectId = UtilMap.getString(formData, "textField_lqxtykce");
|
|
|
+ if (StringUtils.isBlank(projectId) && StringUtils.isBlank(projectCode)) {
|
|
|
+ _syncProjectRole(formData, projectId);
|
|
|
+ }
|
|
|
return formData;
|
|
|
}
|
|
|
|
|
@@ -443,6 +448,11 @@ public class AWImplClient implements AWClint {
|
|
|
.updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_lqxtykce", projectId)))
|
|
|
.build(), YDConf.FORM_OPERATION.update);
|
|
|
}
|
|
|
+ _syncProjectRole(formData, projectId);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 同步TB项目成员 todo 群成员
|
|
|
+ void _syncProjectRole(Map formData, String projectId) {
|
|
|
// prd TB项目成员, 项目经理设置为管理者
|
|
|
List<String> pmUserId = new ArrayList<>();
|
|
|
List<String> roleIds = new ArrayList<>();
|
|
@@ -461,16 +471,26 @@ public class AWImplClient implements AWClint {
|
|
|
// 钉钉人员ID转TB人员ID
|
|
|
roleIds = _convertUserId(roleIds, false);
|
|
|
tbClient.createProjectMember(projectId, roleIds, tbConf.getOperatorId());
|
|
|
- // todo 删除项目成员
|
|
|
|
|
|
+ // prd 不做删除, 离职自动退出, 避免临时交接不可见的问题. 但需要移除项目经理权限
|
|
|
+ String pmRoleId = _getProjectRoleId(projectId, AWServer.PROJECT_PM_ROLE);
|
|
|
+ List<Map> roleList = tbClient.queryProjectMember(projectId, UtilMap.map("projectRoleId", pmRoleId));
|
|
|
+ for (Map role : roleList) {
|
|
|
+ List<String> tRoleIds = UtilMap.getList(role, "roleIds");
|
|
|
+ tRoleIds.remove(pmRoleId);
|
|
|
+ if (tRoleIds.isEmpty()) {
|
|
|
+ tRoleIds.add(_getProjectRoleId(projectId, "项目成员"));
|
|
|
+ }
|
|
|
+ tbClient.updateProjectMember(Arrays.asList(UtilMap.getString(role, "userId")), tRoleIds, projectId);
|
|
|
+ }
|
|
|
// 指定项目经理为编辑权限
|
|
|
if (!pmUserId.isEmpty()) {
|
|
|
- tbClient.updateProjectMember(_convertUserId(pmUserId, false), Arrays.asList(_getProjectRoleId(projectId, AWServer.PROJECT_PM_ROLE)), projectId);
|
|
|
+ tbClient.updateProjectMember(_convertUserId(pmUserId, false), Arrays.asList(pmRoleId), projectId);
|
|
|
}
|
|
|
log.info("TB项目信息, {}, {}", projectId, roleIds.size());
|
|
|
}
|
|
|
|
|
|
- // todo 提取方法, 并封装为 ...roleName
|
|
|
+ // todo 提取方法, 参考 getProjectCFID 实现
|
|
|
private String _getProjectRoleId(String projectId, String roleName) {
|
|
|
List<Map> roles = tbClient.queryProjectRoles(projectId);
|
|
|
Optional optional = roles.stream().filter(item -> roleName.equals(item.get("name"))).findAny();
|
|
@@ -530,21 +550,27 @@ public class AWImplClient implements AWClint {
|
|
|
* 项目迁移: 删除依赖项
|
|
|
*/
|
|
|
@Override
|
|
|
- public void removeDependencies(String projectId, String trNode) {
|
|
|
+ public void removeDependencies(String projectId, List<String> trNode) {
|
|
|
|
|
|
- log.info("删除依赖项 projectId = {}, trNode = {}", projectId, trNode);
|
|
|
// 任务编码字段ID
|
|
|
List<Map> customField = tbClient.queryProjectCustomField(projectId, null);
|
|
|
tbClient.queryProjectTaskList(projectId, null, taskList -> {
|
|
|
for (Map task : taskList) {
|
|
|
|
|
|
- // 获取资源名称对应的项目角色
|
|
|
- Optional optional = customField.stream().filter(item -> AWServer.TASK_ROLE.equals(item.get("name"))).findAny();
|
|
|
+ Optional optional = customField.stream().filter(item -> "TR评审节点".equals(item.get("name"))).findAny();
|
|
|
if (!optional.isPresent()) {
|
|
|
continue;
|
|
|
}
|
|
|
List<Map> customfields = (List<Map>) task.get("customfields");
|
|
|
- String roleName = TBConf.getTaskFieldValue_First(customfields, UtilMap.getString((Map) optional.get(), "id"));
|
|
|
+ String trName = TBConf.getTaskFieldValue_First(customfields, UtilMap.getString((Map) optional.get(), "id"));
|
|
|
+ if (trNode.contains(trName)) {
|
|
|
+ String taskId = UtilMap.getString(task, "id");
|
|
|
+ List<Map> dependencies = tbClient.queryTaskDependency(taskId, null);
|
|
|
+ log.info("taskID = {}, trNode, {}, 依赖数量: {}", taskId, trName, dependencies.size());
|
|
|
+ for (Map dependency : dependencies) {
|
|
|
+ tbClient.removeTaskDependency(UtilMap.getString(dependency, "id"), tbConf.getOperatorId());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
return true;
|
|
|
});
|
|
@@ -655,6 +681,11 @@ public class AWImplClient implements AWClint {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void test() {
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|