|
@@ -12,6 +12,7 @@ import com.malk.server.teambition.TBConf;
|
|
|
import com.malk.service.aliwork.YDClient;
|
|
|
import com.malk.service.aliwork.YDService;
|
|
|
import com.malk.service.teambition.TBClient;
|
|
|
+import com.malk.utils.UtilEnv;
|
|
|
import com.malk.utils.UtilMap;
|
|
|
import com.malk.utils.UtilString;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -26,13 +27,40 @@ import java.util.stream.Collectors;
|
|
|
@Slf4j
|
|
|
public class AWImplClient implements AWClint {
|
|
|
|
|
|
-
|
|
|
@Autowired
|
|
|
private YDClient ydClient;
|
|
|
|
|
|
@Autowired
|
|
|
private YDService ydService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private YDConf ydConf;
|
|
|
+
|
|
|
+ // 项目主数据表
|
|
|
+ String _matchFormUuid(String code) {
|
|
|
+ Map<String, String> formUuid = UtilMap.empty();
|
|
|
+ if (true || UtilEnv.getActiveProfile().equals(UtilEnv.ENV_PROD)) {
|
|
|
+ formUuid.put("REVIEW", "FORM-812FD46AF391449A8F206EDB3221B38840UQ"); // 交付物审批记录
|
|
|
+ formUuid.put("REVIEW_PROCESS", "TPROC--RJC66SC1NEFHXJ0H770K0CF4WN1K21HQ706RL5"); // 交付物审批记录
|
|
|
+ formUuid.put("PROJECT", "FORM-141E21DF183846028E21727CE43CD1C75CLZ"); // 项目主数据
|
|
|
+ formUuid.put("APPROVE", "FORM-A25299893F614A6EAA672514D3A76BB0QDBF"); // 交付物审批矩阵
|
|
|
+ formUuid.put("CHECK", "FORM-1A5D4D7FBF88409B956EBE51F9342A6BKOLP"); // 预检项
|
|
|
+ formUuid.put("RECORD", "FORM-6E2C0D1197264B8AA23EB3FECAE7344B00BN"); // 预检项记录
|
|
|
+ formUuid.put("ROLE", "FORM-3C7396A12ADB48A8833EBD90089C93833R21"); // 项目角色
|
|
|
+ formUuid.put("DOMAIN", "https://yida.awinic.com/"); // 宜搭域名
|
|
|
+ } else {
|
|
|
+ formUuid.put("REVIEW", "FORM-FBC1A390B4C348089020C763938A6F54RUNY");
|
|
|
+ formUuid.put("REVIEW_PROCESS", "TPROC--YU966T91PIDH4XDR82OJC8GVOP7Z19PODTXQL6");
|
|
|
+ formUuid.put("PROJECT", "FORM-84EF78C7DBA047E58A8C8511106F91D5WNVI");
|
|
|
+ formUuid.put("APPROVE", "FORM-AB7263D2A12F4E01A871656F0D995BC96PR1");
|
|
|
+ formUuid.put("CHECK", "FORM-E6CB042D7929448888AE5E2B27631E57IVPM");
|
|
|
+ formUuid.put("RECORD", "FORM-7B63BB056145452F8BC0A2C52492DE00QVBH");
|
|
|
+ formUuid.put("ROLE", "FORM-5BE21392886E46DF955D1EBC100ADA429NON");
|
|
|
+ formUuid.put("DOMAIN", "https://kabom7.aliwork.com/");
|
|
|
+ }
|
|
|
+ return formUuid.get(code);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 交付物审批 [ppExt: 宜搭附件传递 downloadUrl 和 name 即可实现在线预览]
|
|
|
*/
|
|
@@ -52,8 +80,7 @@ public class AWImplClient implements AWClint {
|
|
|
String tCode = UtilMap.getString(taskData, AWServer.TASK_CODE);
|
|
|
// 工作流tb虽然配置了流转逻辑, 冗余稳定性
|
|
|
List<Map> formList = (List<Map>) ydClient.queryData(YDParam.builder()
|
|
|
-// .formUuid("FORM-FBC1A390B4C348089020C763938A6F54RUNY")
|
|
|
- .formUuid("FORM-812FD46AF391449A8F206EDB3221B38840UQ")
|
|
|
+ .formUuid(_matchFormUuid("REVIEW"))
|
|
|
.searchFieldJson(JSON.toJSONString(UtilMap.map("selectField_lqxuswzd, textField_lrncs2fu", tCode, pCode)))
|
|
|
.instanceStatus("RUNNING")
|
|
|
.build(), YDConf.FORM_QUERY.retrieve_search_process).getData();
|
|
@@ -67,14 +94,12 @@ public class AWImplClient implements AWClint {
|
|
|
if (StringUtils.isBlank(tCode)) {
|
|
|
result = "无任务编码";
|
|
|
} else {
|
|
|
-// tList = ydService.queryDataList_FormData("FORM-AB7263D2A12F4E01A871656F0D995BC96PR1", UtilMap.map("selectField_lrncf4hk, radioField_lrnddfq6", tCode, "启用"));
|
|
|
- tList = ydService.queryDataList_FormData("FORM-A25299893F614A6EAA672514D3A76BB0QDBF", UtilMap.map("selectField_lrncf4hk, radioField_lrnddfq6", tCode, "启用"));
|
|
|
+ tList = ydService.queryDataList_FormData(_matchFormUuid("APPROVE"), UtilMap.map("selectField_lrncf4hk, radioField_lrnddfq6", tCode, "启用"));
|
|
|
tList = tList.stream().filter(item -> tCode.equals(item.get("selectField_lrncf4hk"))).collect(Collectors.toList());
|
|
|
if (tList.size() == 0) {
|
|
|
result = "未配置交付物审批";
|
|
|
} else {
|
|
|
-// List<Map> pList = ydService.queryDataList_FormData("FORM-84EF78C7DBA047E58A8C8511106F91D5WNVI", UtilMap.map("textField_lqxtykce", pCode));
|
|
|
- List<Map> pList = ydService.queryDataList_FormData("FORM-141E21DF183846028E21727CE43CD1C75CLZ", UtilMap.map("textField_lqxtykce", pCode));
|
|
|
+ List<Map> pList = ydService.queryDataList_FormData(_matchFormUuid("PROJECT"), UtilMap.map("textField_lqxtykce", pCode));
|
|
|
pList = pList.stream().filter(item -> pCode.equals(item.get("textField_lqxtykce"))).collect(Collectors.toList());
|
|
|
if (pList.size() == 0) {
|
|
|
result = "未匹配到项目主数据";
|
|
@@ -123,20 +148,17 @@ public class AWImplClient implements AWClint {
|
|
|
Map<String, String> extra = (Map) tbClient.idMapQuery(creatorId, "dingTalk-user", ddConf.getCorpId()).get(0).get("extra");
|
|
|
UtilMap.putAll(formData, UtilMap.map("textField_lr3dlwsa, textField_lr3er4qb", taskId, creatorId));
|
|
|
String instanceId = (String) ydClient.operateData(YDParam.builder()
|
|
|
-// .formUuid("FORM-FBC1A390B4C348089020C763938A6F54RUNY")
|
|
|
- .formUuid("FORM-812FD46AF391449A8F206EDB3221B38840UQ")
|
|
|
-// .processCode("TPROC--YU966T91PIDH4XDR82OJC8GVOP7Z19PODTXQL6")
|
|
|
- .processCode("TPROC--RJC66SC1NEFHXJ0H770K0CF4WN1K21HQ706RL5")
|
|
|
+ .formUuid(_matchFormUuid("REVIEW"))
|
|
|
+ .processCode(_matchFormUuid("REVIEW_PROCESS"))
|
|
|
.formDataJson(JSON.toJSONString(formData))
|
|
|
.userId(extra.get("userId"))
|
|
|
.build(), YDConf.FORM_OPERATION.start);
|
|
|
-// result = "https://kabom7.aliwork.com/APP_H7WUJTKB448F9IBDC6C4/processDetail?procInsId=" + instanceId;
|
|
|
- result = "https://yida.awinic.com/APP_R5EBUF2FPN3Y8DRF93M4/processDetail?procInsId=" + instanceId;
|
|
|
+ result = _matchFormUuid("DOMAIN") + ydConf.getAppType() + "/processDetail?procInsId=" + instanceId;
|
|
|
}
|
|
|
}
|
|
|
log.info("交付物结果, {}", result);
|
|
|
Map body = TBConf.assembleCustomFieldName(AWServer.TASK_APPROVE_LINK, result);
|
|
|
- tbClient.updateTaskCustomField(taskId, creatorId, body);
|
|
|
+ tbClient.updateTaskCustomField(taskId, tbConf.getOperatorId(), body);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -148,7 +170,7 @@ public class AWImplClient implements AWClint {
|
|
|
log.info("交付物审批回调, {}", data);
|
|
|
String result = String.valueOf(data.get("approve"));
|
|
|
String workFlowId = _getWorkFlowStatus(String.valueOf(data.get("projectId")), result);
|
|
|
- tbClient.updateTaskFlowStatus(String.valueOf(data.get("taskId")), String.valueOf(data.get("creatorId")), workFlowId, String.valueOf(data.get("approve")));
|
|
|
+ tbClient.updateTaskFlowStatus(String.valueOf(data.get("taskId")), tbConf.getOperatorId(), workFlowId, String.valueOf(data.get("approve")));
|
|
|
}
|
|
|
|
|
|
@Autowired
|
|
@@ -180,6 +202,7 @@ public class AWImplClient implements AWClint {
|
|
|
}
|
|
|
|
|
|
// 匹配工作流名称, 获取ID
|
|
|
+ @Deprecated
|
|
|
String _getWorkFlowStatus(String projectId, String workFlowStatusName) {
|
|
|
|
|
|
List<Map> customFlowStatus = tbClient.queryProjectCustomFlowStatus(projectId, UtilMap.map("q", workFlowStatusName));
|
|
@@ -187,8 +210,27 @@ public class AWImplClient implements AWClint {
|
|
|
return String.valueOf(customFlowStatus.get(0).get("id"));
|
|
|
}
|
|
|
|
|
|
+ // 前置过滤 todo 提取方法
|
|
|
+ List<String> _getWorkFlowStatusList(String projectId, String... workFlowStatusNames) {
|
|
|
+ List<String> workFlowStatusList = new ArrayList<>();
|
|
|
+ for (String name : workFlowStatusNames) {
|
|
|
+ List<Map> customFlowStatus = tbClient.queryProjectCustomFlowStatus(projectId, UtilMap.map("q", name));
|
|
|
+ workFlowStatusList.addAll(customFlowStatus.stream().map(item -> UtilMap.getString(item, "id")).collect(Collectors.toList()));
|
|
|
+ }
|
|
|
+ return workFlowStatusList;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 后置过滤 todo 提取方法
|
|
|
+ List<String> _getWorkFlowStatusList(String projectId, List<String> workFlowStatusNames) {
|
|
|
+ //List<String> names = Arrays.stream(workFlowStatusNames).collect(Collectors.toList());
|
|
|
+ List<Map> customFlowStatus = tbClient.queryProjectCustomFlowStatus(projectId, null);
|
|
|
+ List<Map> workFlowStatusList = customFlowStatus.stream().filter(item -> workFlowStatusNames.contains(item.get("name"))).collect(Collectors.toList());
|
|
|
+ return workFlowStatusList.stream().map(item -> UtilMap.getString(item, "id")).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
- * 获取知识库附件传递到宜搭 [ppExt]
|
|
|
+ * 获取知识库附件传递到宜搭
|
|
|
+ * - ppExt -
|
|
|
* 1. 宜搭附件传递 downloadUrl 和 name 即可实现在线预览
|
|
|
* 2. 知识库绑定没有文件后缀, 宜搭识别目前仅能点击下载跳转预览, 添加统一docx后缀, 文档会自行区分
|
|
|
*/
|
|
@@ -216,10 +258,14 @@ public class AWImplClient implements AWClint {
|
|
|
Map taskData = _getTaskFieldMap(taskId, AWServer.TASK_CODE, AWServer.TASK_CHECK_LINK, AWServer.TASK_ROLE, AWServer.TASK_STAGE, AWServer.TASK_CHECK_STATUS);
|
|
|
String checkLink = UtilMap.getString(taskData, AWServer.TASK_CHECK_LINK);
|
|
|
/// prd 预检项持续维护需要重新匹配, 任务号和主数据判定为非法, 无需重新刷新
|
|
|
- if (isTask && (StringUtils.isNotBlank(checkLink) && !AWServer.TASK_TIPS.equals(checkLink))) {
|
|
|
+ if (isTask && (StringUtils.isNotBlank(checkLink) && !"未配置预检项".equals(checkLink))) {
|
|
|
return UtilMap.map("result", "链接已加载");
|
|
|
}
|
|
|
+ // prd 非未完成任务若是未配置预检项状态, 忽略更新
|
|
|
Map rTask = UtilMap.getMap(taskData, "task");
|
|
|
+ if (isTask && !_getWorkFlowStatusList(UtilMap.getString(rTask, "projectId"), AWServer.WORKFLOW_INITIAL).contains(rTask.get("tfsId"))) {
|
|
|
+ return UtilMap.map("result", "任务已执行");
|
|
|
+ }
|
|
|
String creatorId = UtilMap.getString(rTask, "creatorId");
|
|
|
String tCode = UtilMap.getString(taskData, AWServer.TASK_CODE);
|
|
|
String pCode = UtilMap.getString(rTask, "projectId");
|
|
@@ -231,23 +277,20 @@ public class AWImplClient implements AWClint {
|
|
|
result = "无任务编码";
|
|
|
} else {
|
|
|
tList = ydService.queryFormData_all(YDParam.builder()
|
|
|
-// .formUuid("FORM-E6CB042D7929448888AE5E2B27631E57IVPM")
|
|
|
- .formUuid("FORM-1A5D4D7FBF88409B956EBE51F9342A6BKOLP")
|
|
|
+ .formUuid(_matchFormUuid("CHECK"))
|
|
|
.searchFieldJson(JSON.toJSONString(UtilMap.map("selectField_lrncf4hk, radioField_lrnddfq6", tCode, "启用")))
|
|
|
.build());
|
|
|
tList = tList.stream().filter(item -> tCode.equals(item.get("selectField_lrncf4hk"))).collect(Collectors.toList());
|
|
|
if (tList.size() == 0) {
|
|
|
- result = AWServer.TASK_TIPS;
|
|
|
+ result = "未配置预检项";
|
|
|
} else {
|
|
|
-// List<Map> pList = ydService.queryDataList_FormData("FORM-84EF78C7DBA047E58A8C8511106F91D5WNVI", UtilMap.map("textField_lqxtykce", pCode));
|
|
|
- List<Map> pList = ydService.queryDataList_FormData("FORM-141E21DF183846028E21727CE43CD1C75CLZ", UtilMap.map("textField_lqxtykce", pCode));
|
|
|
+ List<Map> pList = ydService.queryDataList_FormData(_matchFormUuid("PROJECT"), UtilMap.map("textField_lqxtykce", pCode));
|
|
|
pList = pList.stream().filter(item -> pCode.equals(item.get("textField_lqxtykce"))).collect(Collectors.toList());
|
|
|
if (pList.size() == 0) {
|
|
|
result = "未匹配到项目主数据";
|
|
|
} else {
|
|
|
rProject = pList.get(0);
|
|
|
-// result = "https://kabom7.aliwork.com/APP_H7WUJTKB448F9IBDC6C4/workbench/FORM-7B63BB056145452F8BC0A2C52492DE00QVBH?taskId=" + taskId;
|
|
|
- result = "https://yida.awinic.com/APP_R5EBUF2FPN3Y8DRF93M4/workbench/FORM-6E2C0D1197264B8AA23EB3FECAE7344B00BN?taskId=" + taskId;
|
|
|
+ result = _matchFormUuid("DOMAIN") + ydConf.getAppType() + "/workbench/" + _matchFormUuid("RECORD") + "?taskId=" + taskId;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -255,12 +298,12 @@ public class AWImplClient implements AWClint {
|
|
|
if (isTask) {
|
|
|
if (!checkLink.equals(result)) {
|
|
|
Map body = TBConf.assembleCustomFieldName(AWServer.TASK_CHECK_LINK, result);
|
|
|
- tbClient.updateTaskCustomField(taskId, creatorId, body);
|
|
|
+ tbClient.updateTaskCustomField(taskId, tbConf.getOperatorId(), body);
|
|
|
}
|
|
|
// prd 未配置预检项更新为已检查, 避免完成任务完成触发必填校验 [ppExt 避免重复写入, 重复写入TB会重复记录日志
|
|
|
- if (AWServer.TASK_TIPS.equals(result) && !taskData.get(AWServer.TASK_CHECK_STATUS).equals("已检查")) {
|
|
|
+ if (!result.startsWith("http") && !taskData.get(AWServer.TASK_CHECK_STATUS).equals("已检查")) {
|
|
|
Map body = TBConf.assembleCustomFieldName(AWServer.TASK_CHECK_STATUS, "已检查");
|
|
|
- tbClient.updateTaskCustomField(taskId, creatorId, body);
|
|
|
+ tbClient.updateTaskCustomField(taskId, tbConf.getOperatorId(), body);
|
|
|
}
|
|
|
return UtilMap.map("result", result);
|
|
|
}
|
|
@@ -274,8 +317,7 @@ public class AWImplClient implements AWClint {
|
|
|
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")))));
|
|
|
// 返回检查项
|
|
|
formData.put("tableField_lqxxgj4s", tList.stream().map(item -> {
|
|
|
-// item.put("associationFormField_lrrsitxu", YDConf.associationForm("APP_H7WUJTKB448F9IBDC6C4", "FORM-7B63BB056145452F8BC0A2C52492DE00QVBH", UtilMap.getString(item, "instanceId"), UtilMap.getString(item, "textField_lrnd3h0r"), "", false));
|
|
|
- item.put("associationFormField_lrrnem5r", YDConf.associationForm("APP_R5EBUF2FPN3Y8DRF93M4", "FORM-6E2C0D1197264B8AA23EB3FECAE7344B00BN", UtilMap.getString(item, "instanceId"), UtilMap.getString(item, "textField_lrnd3h0r"), "", false));
|
|
|
+ item.put("associationFormField_lrrnem5r", YDConf.associationForm(ydConf.getAppType(), _matchFormUuid("CHECK"), UtilMap.getString(item, "instanceId"), UtilMap.getString(item, "textField_lrnd3h0r"), "", false));
|
|
|
return item;
|
|
|
}).collect(Collectors.toList()));
|
|
|
return formData;
|
|
@@ -289,12 +331,10 @@ public class AWImplClient implements AWClint {
|
|
|
|
|
|
log.info("检查项回调, {}", data);
|
|
|
Map body = TBConf.assembleCustomFieldName(AWServer.TASK_CHECK_STATUS, "已检查");
|
|
|
- tbClient.updateTaskCustomField(String.valueOf(data.get("taskId")), String.valueOf(data.get("creatorId")), body);
|
|
|
-
|
|
|
-// String result = "https://kabom7.aliwork.com/APP_H7WUJTKB448F9IBDC6C4/formDetail?formInstId=" + data.get("formInstId");
|
|
|
- String result = "https://yida.awinic.com/APP_R5EBUF2FPN3Y8DRF93M4/formDetail?formInstId=" + data.get("formInstId");
|
|
|
+ tbClient.updateTaskCustomField(String.valueOf(data.get("taskId")), tbConf.getOperatorId(), body);
|
|
|
+ String result = _matchFormUuid("DOMAIN") + ydConf.getAppType() + "/formDetail?formInstId=" + data.get("formInstId");
|
|
|
Map body2 = TBConf.assembleCustomFieldName(AWServer.TASK_CHECK_LINK, result);
|
|
|
- tbClient.updateTaskCustomField(String.valueOf(data.get("taskId")), String.valueOf(data.get("creatorId")), body2);
|
|
|
+ tbClient.updateTaskCustomField(String.valueOf(data.get("taskId")), tbConf.getOperatorId(), body2);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -316,7 +356,8 @@ public class AWImplClient implements AWClint {
|
|
|
if (StringUtils.isNotBlank(projectCode)) {
|
|
|
ydParam.setSearchFieldJson(JSON.toJSONString(UtilMap.map("textField_le6o88w0", projectCode)));
|
|
|
}
|
|
|
- List<Map> mapBaseList = ydService.queryAllFormData(ydParam);
|
|
|
+ // prd 客户系统主数据, 是全量定时从mdmg更新, 因此不能增量
|
|
|
+ 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());
|
|
|
}
|
|
@@ -325,66 +366,49 @@ public class AWImplClient implements AWClint {
|
|
|
|
|
|
// 查询项目角色
|
|
|
YDParam ydParam1 = YDParam.builder()
|
|
|
-// .formUuid("FORM-5BE21392886E46DF955D1EBC100ADA429NON")
|
|
|
- .formUuid("FORM-3C7396A12ADB48A8833EBD90089C93833R21")
|
|
|
+ .formUuid(_matchFormUuid("ROLE"))
|
|
|
.build();
|
|
|
List<Map> mapRool = (List<Map>) ydClient.queryData(ydParam1, YDConf.FORM_QUERY.retrieve_list).getData();
|
|
|
|
|
|
// 匹配数据组件ID
|
|
|
- for (Map item : mapBaseList) {
|
|
|
- Map baseFormData = (Map) item.get("formData");
|
|
|
-
|
|
|
+ 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", item.get("formInstanceId")); //项目实例ID
|
|
|
-
|
|
|
+ formData.put("textField_lrj7vnxf", baseFormData.get("formInstanceId")); //项目实例ID
|
|
|
// 项目角色详情
|
|
|
List<Map> details = new ArrayList<>();
|
|
|
- mapRool.forEach(rool -> {
|
|
|
- Map roolFormData = (Map) rool.get("formData");
|
|
|
- //创建详情的角色名称和成员组件Map
|
|
|
- Map row = new HashMap();
|
|
|
-// Object roolItems = baseFormData.get(roolFormData.get("textField_lrj7t5mn"));
|
|
|
-// Object projectRool = roolFormData.get("textField_lqxu439g");
|
|
|
- Object roolItems = baseFormData.get(roolFormData.get("textField_lr7bgi76"));
|
|
|
- Object projectRool = roolFormData.get("textField_lqxu439g");
|
|
|
-
|
|
|
- if (roolItems != null && projectRool != null) {
|
|
|
-// row.put("employeeField_lqxtykch", baseFormData.get(roolFormData.get("textField_lrj7t5mn")));
|
|
|
-// row.put("selectField_lqxu6bgf", roolFormData.get("textField_lqxu439g"));
|
|
|
- row.put("employeeField_lqxtykch", baseFormData.get(roolFormData.get("textField_lr7bgi76")));
|
|
|
- row.put("selectField_lqxu6bgf", roolFormData.get("textField_lqxu439g"));
|
|
|
- details.add(row);
|
|
|
+ mapRool.forEach(root -> {
|
|
|
+ Map rootFormData = (Map) root.get("formData");
|
|
|
+ // 创建详情的角色名称和成员组件Map
|
|
|
+ Object rootItems = baseFormData.get(rootFormData.get("textField_lr7bgi76"));
|
|
|
+ Object projectRoot = rootFormData.get("textField_lqxu439g");
|
|
|
+ if (rootItems != null && projectRoot != null) {
|
|
|
+ details.add(UtilMap.map("employeeField_lqxtykch, selectField_lqxu6bgf", rootItems, projectRoot));
|
|
|
}
|
|
|
});
|
|
|
formData.put("tableField_lqxtykcf", details);
|
|
|
|
|
|
- //通过项目号获取项目是否已存在
|
|
|
- YDParam ydParam2 = YDParam.builder()
|
|
|
-// .formUuid("FORM-84EF78C7DBA047E58A8C8511106F91D5WNVI")
|
|
|
- .formUuid("FORM-141E21DF183846028E21727CE43CD1C75CLZ")
|
|
|
- .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_lrj7vnxb", baseFormData.get("textField_le6o88w0"))))
|
|
|
- .build();
|
|
|
- List<Map> projectMaps = (List<Map>) ydClient.queryData(ydParam2, YDConf.FORM_QUERY.retrieve_search_form).getData();
|
|
|
- projectMaps = projectMaps.stream().filter(sub -> baseFormData.get("textField_le6o88w0").equals(item.get("textField_lrj7vnxb"))).collect(Collectors.toList());
|
|
|
+ // 通过项目号获取项目是否已存在
|
|
|
+ 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 ydParam3 = YDParam.builder()
|
|
|
-// .formUuid("FORM-84EF78C7DBA047E58A8C8511106F91D5WNVI")
|
|
|
- .formUuid("FORM-141E21DF183846028E21727CE43CD1C75CLZ")
|
|
|
+ YDParam ydParam2 = YDParam.builder()
|
|
|
+ .formUuid(_matchFormUuid("PROJECT"))
|
|
|
.formDataJson(JSON.toJSONString(formData))
|
|
|
.updateFormDataJson(JSON.toJSONString(formData))
|
|
|
+ .useLatestVersion(true)
|
|
|
.build();
|
|
|
if (projectMaps.size() > 0) {
|
|
|
- ydParam3.setFormInstanceId(String.valueOf(projectMaps.get(0).get("formInstanceId")));
|
|
|
- ydClient.operateData(ydParam3, YDConf.FORM_OPERATION.update);
|
|
|
+ ydParam2.setFormInstanceId(String.valueOf(projectMaps.get(0).get("instanceId")));
|
|
|
+ ydClient.operateData(ydParam2, YDConf.FORM_OPERATION.update);
|
|
|
// 保留tb项目号, 避免冲重复通过模板参加项目
|
|
|
formData.put("textField_lqxtykce", UtilMap.getMap(projectMaps.get(0), "formData").get("textField_lqxtykce"));
|
|
|
} else {
|
|
|
- String formInstId = (String) ydClient.operateData(ydParam3, YDConf.FORM_OPERATION.create);
|
|
|
+ String formInstId = (String) ydClient.operateData(ydParam2, YDConf.FORM_OPERATION.create);
|
|
|
formData.put("formInstanceId", formInstId);
|
|
|
}
|
|
|
log.info("同步项目主数据", projectCode);
|
|
@@ -459,36 +483,44 @@ public class AWImplClient implements AWClint {
|
|
|
@Override
|
|
|
public void updateProjectRole(String projectId) {
|
|
|
|
|
|
- // todo 1000递归查询
|
|
|
- // 项目档案
|
|
|
-// List<Map> pList = ydService.queryDataList_FormData("FORM-84EF78C7DBA047E58A8C8511106F91D5WNVI", UtilMap.map("textField_lqxtykce", projectId));
|
|
|
- List<Map> pList = ydService.queryDataList_FormData("FORM-141E21DF183846028E21727CE43CD1C75CLZ", UtilMap.map("textField_lqxtykce", projectId));
|
|
|
+ // 项目档案 [tb项目号查询, 避免模糊匹配]
|
|
|
+ List<Map> pList = ydService.queryDataList_FormData(_matchFormUuid("PROJECT"), UtilMap.map("textField_lqxtykce", projectId));
|
|
|
McException.assertAccessException(pList.isEmpty(), "未匹配到项目主数据");
|
|
|
List<Map> rList = (List<Map>) pList.get(0).get("tableField_lqxtykcf");
|
|
|
|
|
|
// 任务编码字段ID
|
|
|
List<Map> customField = tbClient.queryProjectCustomField(projectId, null);
|
|
|
-
|
|
|
- List<Map> taskList = tbClient.queryProjectTaskList(projectId, null);
|
|
|
- for (Map task : taskList) {
|
|
|
-
|
|
|
- // 获取资源名称对应的项目角色
|
|
|
- Optional optional = customField.stream().filter(item -> AWServer.TASK_ROLE.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"));
|
|
|
- // 获取角色在项目主数据对应成员
|
|
|
- optional = rList.stream().filter(item -> roleName.equals(item.get("selectField_lqxu6bgf"))).findAny();
|
|
|
- if (!optional.isPresent()) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- List<String> roleIds = (List<String>) UtilMap.getList((Map) optional.get(), "employeeField_lqxtykch_id");
|
|
|
- if (roleIds.size() == 1) {
|
|
|
- tbClient.updateTaskExecutor(UtilMap.getString(task, "id"), tbConf.getOperatorId(), _convertUserId(roleIds.get(0), false), false, false);
|
|
|
+ // prd 非未完成任务, 不执行人员匹配更新
|
|
|
+ List<String> workFlowStatusList = _getWorkFlowStatusList(projectId, AWServer.WORKFLOW_INITIAL);
|
|
|
+
|
|
|
+ //List<Map> taskList = tbClient.queryProjectTaskList(projectId, UtilMap.map("pageSize", 10), null);
|
|
|
+ tbClient.queryProjectTaskList(projectId, null, taskList -> {
|
|
|
+ for (Map task : taskList) {
|
|
|
+ if (!workFlowStatusList.contains(task.get("tfsId"))) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // 获取资源名称对应的项目角色
|
|
|
+ Optional optional = customField.stream().filter(item -> AWServer.TASK_ROLE.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"));
|
|
|
+ // 获取角色在项目主数据对应成员
|
|
|
+ optional = rList.stream().filter(item -> roleName.equals(item.get("selectField_lqxu6bgf"))).findAny();
|
|
|
+ if (!optional.isPresent()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ List<String> roleIds = (List<String>) UtilMap.getList((Map) optional.get(), "employeeField_lqxtykch_id");
|
|
|
+ if (roleIds.size() == 1) {
|
|
|
+ String tbUserId = _convertUserId(roleIds.get(0), false);
|
|
|
+ if (StringUtils.isNotBlank(tbUserId)) {
|
|
|
+ tbClient.updateTaskExecutor(UtilMap.getString(task, "id"), tbConf.getOperatorId(), tbUserId, false, false);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
+ return true;
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
// TB与宜搭userId转换 todo 提取 tbService
|
|
@@ -496,6 +528,7 @@ public class AWImplClient implements AWClint {
|
|
|
List<Map> tbMap = tbClient.idMapQuery(userId, isTBID);
|
|
|
// 过滤未匹配人员信息 [ppExt: TB人员未匹配, 不执行修改也无报错]
|
|
|
if (tbMap.isEmpty()) {
|
|
|
+ log.warn("TB与宜搭userId转换为空, userId = {}, tbID = {}", userId, isTBID);
|
|
|
return "";
|
|
|
}
|
|
|
if (!isTBID) {
|
|
@@ -513,5 +546,88 @@ public class AWImplClient implements AWClint {
|
|
|
.filter(id -> StringUtils.isNotBlank(id))
|
|
|
.collect(Collectors.toList());
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 同步预检项 [全量同步, 忽略任务号为空记录]
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void syncCheckList(YDParam srcParam, Map<String, ?> compIds, String taskCompId, String codeCompId, String checkType, String associationCompId) {
|
|
|
+
|
|
|
+ String curFormUuid = "FORM-1A5D4D7FBF88409B956EBE51F9342A6BKOLP";
|
|
|
+ // 数据来源表
|
|
|
+ List<Map> srcList = ydService.queryFormData_all(srcParam);
|
|
|
+ // 当前记录表
|
|
|
+ List<Map> curList = ydService.queryFormData_all(YDParam.builder()
|
|
|
+ .formUuid(curFormUuid)
|
|
|
+ .searchFieldJson(JSON.toJSONString(UtilMap.map("selectField_lrnd3h0s", checkType)))
|
|
|
+ .build());
|
|
|
+
|
|
|
+ for (Map item : srcList) {
|
|
|
+ if (StringUtils.isBlank(UtilMap.getString(item, taskCompId))) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Map formData = UtilMap.map(associationCompId, YDConf.associationForm(srcParam.getAppType(), srcParam.getFormUuid(), UtilMap.getString(item, "formInstanceId"), UtilMap.getString(item, codeCompId), "", false));
|
|
|
+ formData.put("radioField_lrnddfq6", "启用");
|
|
|
+ formData.put("selectField_lrnd3h0s", checkType);
|
|
|
+ for (String compId : compIds.keySet()) {
|
|
|
+ formData.put(compId, item.get(compIds.get(compId)));
|
|
|
+ }
|
|
|
+ YDConf.FORM_OPERATION operate = YDConf.FORM_OPERATION.create;
|
|
|
+ YDParam ydParam = YDParam.builder()
|
|
|
+ .formUuid(curFormUuid)
|
|
|
+ .formDataJson(JSON.toJSONString(formData))
|
|
|
+ .updateFormDataJson(JSON.toJSONString(formData))
|
|
|
+ .useLatestVersion(true)
|
|
|
+ .build();
|
|
|
+ // 避免循坏内查询, 也避免了模糊匹配
|
|
|
+ Optional optional = curList.stream().filter(cur -> cur.get("textField_lrnd3h0r").equals(item.get(codeCompId))).findAny();
|
|
|
+ if (optional.isPresent()) {
|
|
|
+ ydParam.setFormInstanceId(UtilMap.getString((Map) optional.get(), "formInstanceId"));
|
|
|
+ operate = YDConf.FORM_OPERATION.update;
|
|
|
+ }
|
|
|
+ ydClient.operateData(ydParam, operate);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void syncCheckList(int type) {
|
|
|
+
|
|
|
+ switch (type) {
|
|
|
+ case 0:
|
|
|
+ // 经验库
|
|
|
+ YDParam ydParam1 = YDParam.builder()
|
|
|
+ .appType("APP_D4NPOH9J3KCG5VE1RVN6")
|
|
|
+ .systemToken("6J8668A1B59FA7SAFTAF89PTKKGP2HY3FP3OLV1")
|
|
|
+ .formUuid("FORM-D47CCA076DA54F969DF7442D81E4B5A8PC6Q")
|
|
|
+ .build();
|
|
|
+ // 任务号, 描述, ID(标题)
|
|
|
+ Map<String, ?> compIds1 = UtilMap.map("selectField_lrncf4hk, textField_lrrnqz7w, textField_lrnd3h0r", "selectField_ls9yctsd", "textareaField_lo5eakcv", "serialNumberField_lo5dmyfb");
|
|
|
+ syncCheckList(ydParam1, compIds1, "selectField_ls9yctsd", "serialNumberField_lo5dmyfb", "经验库", "associationFormField_lrrn5csf");
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 1:
|
|
|
+ // 技术评审要素表
|
|
|
+ YDParam ydParam2 = YDParam.builder()
|
|
|
+ .appType("APP_NOSSCZQ8FFZKHDQOIIDA")
|
|
|
+ .systemToken("UM6660D1BFTFLFAP7NPJDBJEEAB737FAR1SOLD4")
|
|
|
+ .formUuid("FORM-B40420AFCDB84AD69FE78D82D6D5CFD2C2D2")
|
|
|
+ .build();
|
|
|
+ // 任务号, 描述, ID(标题)
|
|
|
+ Map<String, ?> compIds2 = UtilMap.map("selectField_lrncf4hk, textField_lrrnqz7w, textField_lrnd3h0r", "selectField_bclg9y5", "textField_k1e08ji", "textField_96ikaoh");
|
|
|
+ syncCheckList(ydParam2, compIds2, "selectField_bclg9y5", "textField_96ikaoh", "技术评审要素表", "associationFormField_lrrn5csg");
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 2:
|
|
|
+ // TR评审要素表
|
|
|
+ YDParam ydParam3 = YDParam.builder()
|
|
|
+ .formUuid("FORM-5436DC75BC8347D498DFF2617925BA70O066")
|
|
|
+ .build();
|
|
|
+ // 任务号, 描述, ID(标题)
|
|
|
+ Map<String, ?> compIds3 = UtilMap.map("selectField_lrncf4hk, textField_lrrnqz7w, textField_lrnd3h0r", "selectField_4gwjfa5", "textField_lryetn3g", "textField_9x1yps6");
|
|
|
+ syncCheckList(ydParam3, compIds3, "selectField_4gwjfa5", "textField_9x1yps6", "TR评审要素表", "associationFormField_lrrn5csa");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+
|