|
@@ -50,6 +50,7 @@ public class AWImplClient implements AWClint {
|
|
|
formUuid.put("ROLE", "FORM-3C7396A12ADB48A8833EBD90089C93833R21"); // 项目角色
|
|
|
formUuid.put("DOMAIN", "https://yida.awinic.com/"); // 宜搭域名
|
|
|
} else {
|
|
|
+ // [ ppExt: 测试环境添加主数据, 匹配不同架构下企业成员 ]
|
|
|
formUuid.put("REVIEW", "FORM-FBC1A390B4C348089020C763938A6F54RUNY");
|
|
|
formUuid.put("REVIEW_PROCESS", "TPROC--YU966T91PIDH4XDR82OJC8GVOP7Z19PODTXQL6");
|
|
|
formUuid.put("PROJECT", "FORM-84EF78C7DBA047E58A8C8511106F91D5WNVI");
|
|
@@ -180,7 +181,7 @@ public class AWImplClient implements AWClint {
|
|
|
@Autowired
|
|
|
private DDConf ddConf;
|
|
|
|
|
|
- // 获取任务详情 todo 提取到 tbservice
|
|
|
+ // 获取任务详情 fixme 提取到 tbservice
|
|
|
private Map _getTaskFieldMap(String taskId, String... fieldNames) {
|
|
|
|
|
|
Map rTask = tbClient.queryTaskDetail(taskId, null, null).get(0);
|
|
@@ -211,7 +212,7 @@ public class AWImplClient implements AWClint {
|
|
|
return String.valueOf(customFlowStatus.get(0).get("id"));
|
|
|
}
|
|
|
|
|
|
- // 前置过滤 todo 提取方法
|
|
|
+ // 前置过滤 fixme 提取方法
|
|
|
List<String> _getWorkFlowStatusList(String projectId, String... workFlowStatusNames) {
|
|
|
List<String> workFlowStatusList = new ArrayList<>();
|
|
|
for (String name : workFlowStatusNames) {
|
|
@@ -221,7 +222,7 @@ public class AWImplClient implements AWClint {
|
|
|
return workFlowStatusList;
|
|
|
}
|
|
|
|
|
|
- // 后置过滤 todo 提取方法
|
|
|
+ // 后置过滤 fixme 提取方法
|
|
|
List<String> _getWorkFlowStatusList(String projectId, List<String> workFlowStatusNames) {
|
|
|
//List<String> names = Arrays.stream(workFlowStatusNames).collect(Collectors.toList());
|
|
|
List<Map> customFlowStatus = tbClient.queryProjectCustomFlowStatus(projectId, null);
|
|
@@ -313,7 +314,7 @@ public class AWImplClient implements AWClint {
|
|
|
Map formData = UtilMap.map("selectField_lqxuswzd, textField_lrndwu00, textField_lr3dlwsa, textField_lr3er4qb", tCode, pCode, taskId, creatorId);
|
|
|
// 项目信息
|
|
|
formData.putAll(UtilMap.map("selectField_lqxuswze, textField_lrndwu07, textField_lqxuc9m4", UtilMap.getString(rProject, "textField_lrj7vnxb"), UtilMap.getString(rProject, "textareaField_lrj7vnxl"), UtilMap.getString(rProject, "textField_lqxtykcd")));
|
|
|
- // 任务信息 todo userInfo 取值
|
|
|
+ // 任务信息 [TBManager 操作]
|
|
|
Map<String, String> extra = (Map) tbClient.idMapQuery(creatorId, "dingTalk-user", ddConf.getCorpId()).get(0).get("extra");
|
|
|
formData.putAll(UtilMap.map("textField_lrndwu09, textField_lrndwu0a, textField_lrndwu0b, employeeField_lrndwu0e", rTask.get("content"), taskData.get(AWServer.TASK_STAGE), taskData.get(AWServer.TASK_ROLE), Arrays.asList(UtilMap.map("value, name", extra.get("userId"), extra.get("userId")))));
|
|
|
// 返回检查项
|
|
@@ -348,7 +349,6 @@ public class AWImplClient implements AWClint {
|
|
|
// 新增场景下, 提供实例ID回写TB项目编号
|
|
|
Map formData = null;
|
|
|
|
|
|
- // fixme: test生产环境, 人员组件不能同步, 更新后人员会为空. todo 测试环境建立模拟项目主数据单据
|
|
|
// 查询项目主数据 [艾为应用]
|
|
|
YDParam ydParam = YDParam.builder()
|
|
|
.appType("APP_QBWQITQBSPJNYTUTNPDK")
|
|
@@ -365,7 +365,6 @@ public class AWImplClient implements AWClint {
|
|
|
}
|
|
|
log.info("项目主数据, {}", mapBaseList.size());
|
|
|
McException.assertAccessException(mapBaseList.isEmpty(), "未匹配项目主数据");
|
|
|
-
|
|
|
// 查询项目角色
|
|
|
YDParam ydParam1 = YDParam.builder()
|
|
|
.formUuid(_matchFormUuid("ROLE"))
|
|
@@ -376,11 +375,15 @@ public class AWImplClient implements AWClint {
|
|
|
for (Map baseFormData : mapBaseList) {
|
|
|
// 项目主数据
|
|
|
formData = new HashMap();
|
|
|
- formData.put("textField_lqxtykcd", baseFormData.get("textField_lo2c1f0l")); //项目名称
|
|
|
- formData.put("textField_lrj7vnxb", baseFormData.get("textField_le6o88w0")); //项目号
|
|
|
- formData.put("textField_lrj7vnxc", baseFormData.get("textField_le6o88w1")); //项目简称
|
|
|
- formData.put("textareaField_lrj7vnxl", baseFormData.get("textField_le6o88w2")); //项目描述
|
|
|
- formData.put("textField_lrj7vnxf", baseFormData.get("formInstanceId")); //项目实例ID
|
|
|
+ formData.put("textField_lqxtykcd", baseFormData.get("textField_lo2c1f0l")); // 项目名称
|
|
|
+ formData.put("textField_lrj7vnxb", baseFormData.get("textField_le6o88w0")); // 项目号
|
|
|
+ formData.put("textField_lrj7vnxc", baseFormData.get("textField_le6o88w1")); // 项目简称
|
|
|
+ formData.put("textareaField_lrj7vnxl", baseFormData.get("textField_le6o88w2")); // 项目描述
|
|
|
+ formData.put("textField_lrj7vnxf", baseFormData.get("formInstanceId")); // 项目实例ID
|
|
|
+ formData.put("textField_ltsdsti6", baseFormData.get("textField_libg2ea8")); // PDT (项目分组)
|
|
|
+ formData.put("textField_ltsdsti7", baseFormData.get("textField_llouhiyf")); // 项目状态
|
|
|
+ formData.put("textField_ltsdsti8", baseFormData.get("textField_lo2c1f0r")); // mPDT
|
|
|
+ formData.put("textField_ltsdsti9", baseFormData.get("textField_lki3egzn")); // Charter子类
|
|
|
// 项目角色详情
|
|
|
List<Map> details = new ArrayList<>();
|
|
|
mapRool.forEach(root -> {
|
|
@@ -393,11 +396,9 @@ public class AWImplClient implements AWClint {
|
|
|
}
|
|
|
});
|
|
|
formData.put("tableField_lqxtykcf", details);
|
|
|
-
|
|
|
// 通过项目号获取项目是否已存在
|
|
|
List<Map> projectMaps = ydService.queryDataList_FormData(_matchFormUuid("PROJECT"), UtilMap.map("textField_lrj7vnxb", baseFormData.get("textField_le6o88w0")));
|
|
|
projectMaps = projectMaps.stream().filter(sub -> baseFormData.get("textField_le6o88w0").equals(sub.get("textField_lrj7vnxb"))).collect(Collectors.toList());
|
|
|
-
|
|
|
YDParam ydParam2 = YDParam.builder()
|
|
|
.formUuid(_matchFormUuid("PROJECT"))
|
|
|
.formDataJson(JSON.toJSONString(formData))
|
|
@@ -406,25 +407,29 @@ public class AWImplClient implements AWClint {
|
|
|
.build();
|
|
|
if (projectMaps.size() > 0) {
|
|
|
ydParam2.setFormInstanceId(String.valueOf(projectMaps.get(0).get("instanceId")));
|
|
|
- ydClient.operateData(ydParam2, YDConf.FORM_OPERATION.update);
|
|
|
- // 保留tb项目号, 避免冲重复通过模板参加项目
|
|
|
+ ydClient.operateData(ydParam2, YDConf.FORM_OPERATION.update); // 主表为增量更新
|
|
|
+ // 保留tb项目号, 避免冲重复通过模板参加项目 [供新增用]
|
|
|
formData.put("textField_lqxtykce", UtilMap.getString(projectMaps.get(0), "textField_lqxtykce"));
|
|
|
formData.put("formInstanceId", projectMaps.get(0).get("instanceId"));
|
|
|
} else {
|
|
|
String formInstId = (String) ydClient.operateData(ydParam2, YDConf.FORM_OPERATION.create);
|
|
|
formData.put("formInstanceId", formInstId);
|
|
|
}
|
|
|
- log.info("同步项目主数据", projectCode);
|
|
|
- }
|
|
|
- // tb项目成员更新
|
|
|
- String projectId = UtilMap.getString(formData, "textField_lqxtykce");
|
|
|
- if (StringUtils.isBlank(projectId) && StringUtils.isBlank(projectCode)) {
|
|
|
- _syncProjectRole(formData, projectId);
|
|
|
+ // tb项目成员更新 [兼容存量创建项目, 被删除后执行异常]
|
|
|
+ String projectId = UtilMap.getString(formData, "textField_lqxtykce");
|
|
|
+ if (StringUtils.isNotBlank(projectId) && StringUtils.isBlank(projectCode)) {
|
|
|
+ try {
|
|
|
+ _syncProjectRole(formData, projectId);
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 记录错误信息
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.info("同步项目主数据, code = {}, id = {}", projectCode, projectCode);
|
|
|
}
|
|
|
return formData;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
@Autowired
|
|
|
private TBConf tbConf;
|
|
|
|
|
@@ -454,7 +459,7 @@ public class AWImplClient implements AWClint {
|
|
|
_syncProjectRole(formData, projectId);
|
|
|
}
|
|
|
|
|
|
- // 同步TB项目成员 todo 群成员
|
|
|
+ // 同步TB项目成员/项目分组 todo 群成员
|
|
|
void _syncProjectRole(Map formData, String projectId) {
|
|
|
// prd TB项目成员, 项目经理设置为管理者
|
|
|
List<String> pmUserId = new ArrayList<>();
|
|
@@ -490,10 +495,18 @@ public class AWImplClient implements AWClint {
|
|
|
if (!pmUserId.isEmpty()) {
|
|
|
tbClient.updateProjectMember(_convertUserId(pmUserId, false), Arrays.asList(pmRoleId), projectId);
|
|
|
}
|
|
|
+ // 同步项目分组 [prd 主数据建立产品与分组对照表,绑定末级分类接口,若未匹配则不添加]
|
|
|
+ String groupName = UtilMap.getString(formData, "textField_ltsdsti6");
|
|
|
+ if (StringUtils.isNotBlank(groupName)) {
|
|
|
+ List<Map> tagList = tbClient.queryTagList(UtilMap.map("q", groupName));
|
|
|
+ if (tagList.size() > 0) {
|
|
|
+ tbClient.updateProjectTag(projectId, Arrays.asList(UtilMap.getString(tagList.get(0), "id")), tbConf.getOperatorId());
|
|
|
+ }
|
|
|
+ }
|
|
|
log.info("TB项目信息, {}, {}", projectId, roleIds.size());
|
|
|
}
|
|
|
|
|
|
- // todo 提取方法, 参考 getProjectCFID 实现
|
|
|
+ // fixme 提取方法, 参考 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();
|
|
@@ -593,7 +606,7 @@ public class AWImplClient implements AWClint {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- // TB与宜搭userId转换 todo 提取 tbService
|
|
|
+ // TB与宜搭userId转换 fixme 提取 tbService
|
|
|
private String _convertUserId(String userId, boolean isTBID) {
|
|
|
List<Map> tbMap = tbClient.idMapQuery(userId, isTBID);
|
|
|
// 过滤未匹配人员信息 [ppExt: TB人员未匹配, 不执行修改也无报错]
|
|
@@ -609,7 +622,7 @@ public class AWImplClient implements AWClint {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // TB与宜搭userId转换 todo 提取 tbService
|
|
|
+ // TB与宜搭userId转换 fixme 提取 tbService
|
|
|
private List<String> _convertUserId(List<String> userIds, boolean isTBID) {
|
|
|
return userIds.stream().distinct()
|
|
|
.map(id -> _convertUserId(id, isTBID))
|