|
@@ -133,6 +133,7 @@ public class ThTbServiceImpl implements ThTbService {
|
|
|
// 红绿灯
|
|
|
// 循环获取其他同级任务状态,判断是否有更高级别的任务状态
|
|
|
// 同级红灯状态ID
|
|
|
+ taskStatusChange(task);// 同步到宜搭
|
|
|
JSONObject redTfs=tbApiService.getProjectStateId(projectId,"红灯",tfid,"").getJSONObject(0);
|
|
|
String redId=redTfs.getString("id");
|
|
|
// 同级黄状态ID
|
|
@@ -461,35 +462,70 @@ public class ThTbServiceImpl implements ThTbService {
|
|
|
return formUuid.get(code);
|
|
|
}
|
|
|
|
|
|
+ private static String NULLDATA = "NULL";
|
|
|
@Override
|
|
|
public void syncStateProject(String projectId) {
|
|
|
+ // 有责任人的任务编号
|
|
|
+ List<Map> taskDatas = new ArrayList<>();
|
|
|
// 同步项目下自定义字段
|
|
|
Map<String,String> projectCusts=new HashMap<>();
|
|
|
List<JSONObject> projectCoutList=tbApiService.getProjectCustomfield(projectId).toJavaList(JSONObject.class);
|
|
|
projectCoutList.forEach(item -> {
|
|
|
projectCusts.put(item.getString("name"),item.getString("id"));
|
|
|
- ydClient.operateData(YDParam.builder().formUuid(_matchFormUuid("CUSTFIELD"))
|
|
|
- .formDataJson(JSONObject.toJSONString(UtilMap.map("textField_m0vvz8ni, textField_m0vvz8nj, textField_m0vvz8nk, textField_m0vvz8nl"
|
|
|
- ,projectId,"",item.getString("name"),item.getString("id"))))
|
|
|
- .searchCondition(JSONObject.toJSONString(Arrays.asList(new YDSearch("textField_m0vvz8nl",item.getString("id"),"自定义字段编号", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ))))
|
|
|
- .build(), YDConf.FORM_OPERATION.upsert);
|
|
|
});
|
|
|
// 同步项目下任务状态
|
|
|
JSONObject project = tbApiService.getProjectInfo(projectId).getJSONObject(0);
|
|
|
Map<String,String> map=getProjectStateVule(projectId);
|
|
|
JSONArray array = getXiangmuRenwuLeixing(projectId);
|
|
|
for (int j = 0; j < array.size(); j++) {
|
|
|
- if(array.getJSONObject(j).getString("name").contains("变更")){
|
|
|
+ String cTname=array.getJSONObject(j).getString("name");
|
|
|
+ String cTid=array.getJSONObject(j).getString("id");
|
|
|
+ if(cTname.contains("变更")){
|
|
|
continue;
|
|
|
}
|
|
|
- JSONArray tasks=tbApiService.getTasksByType(projectId,array.getJSONObject(j).getString("id"));
|
|
|
+ List<String> custNames;
|
|
|
+ List<String> ydKyes;
|
|
|
+ if(cTname.contains("一级")){
|
|
|
+ custNames=Arrays.asList("责任人","联席责任人");
|
|
|
+ ydKyes=Arrays.asList(NULLDATA,NULLDATA);
|
|
|
+ }else if(cTname.contains("二级")){
|
|
|
+ custNames=Arrays.asList("责任人","联席责任人","责任部门","上级任务责任人");
|
|
|
+ ydKyes=Arrays.asList(NULLDATA,NULLDATA,"textField_m102rax6",NULLDATA);
|
|
|
+ }else if(cTname.contains("三级")){
|
|
|
+ custNames=Arrays.asList("责任人","联席责任人","责任部门","权重","上级任务责任人","问题与风险","解决方案思路");
|
|
|
+ ydKyes=Arrays.asList(NULLDATA,NULLDATA,"textField_m102rax6","textField_m0xldyf7",NULLDATA,"textField_m21hlie0","textField_m21hlie1");
|
|
|
+ }else if(cTname.contains("指标")){
|
|
|
+ custNames=Arrays.asList("权重","统计口径","验收依据","Q1目标","Q1实际达成","Q1偏差原因说明","Q1改进举措","Q2目标","Q2实际达成","Q2偏差原因说明","Q2改进举措"
|
|
|
+ ,"Q3目标","Q3实际达成","Q3偏差原因说明","Q3改进举措","Q4目标","Q4实际达成","Q4偏差原因说明","Q4改进举措","年度指标完成情况","自评分","证明材料");
|
|
|
+ ydKyes=Arrays.asList("textField_m0xldyf7","textField_m21hliea","textField_m102rax9",
|
|
|
+ "textField_m102raxm","textField_m21hlief","textField_m21hlieg","textField_m21hlieh", // q1
|
|
|
+ "textField_m10at4ej","textField_m21hliei","textField_m21hliel","textField_m21hlieo", // q2
|
|
|
+ "textField_m10at4ek","textField_m21hliej","textField_m21hliem","textField_m21hliep", // q3
|
|
|
+ "textField_m10at4el","textField_m21hliek","textField_m21hlien","textField_m21hlieq", // q4
|
|
|
+ "textField_m21hlieb","textField_m21hliec","textField_m21hlied");
|
|
|
+ }else{
|
|
|
+ custNames=new ArrayList<>();
|
|
|
+ ydKyes=new ArrayList<>();
|
|
|
+ }
|
|
|
+ projectCoutList.forEach(item -> {
|
|
|
+ if(custNames.contains(item.getString("name"))){
|
|
|
+ ydClient.operateData(YDParam.builder().formUuid(_matchFormUuid("CUSTFIELD"))
|
|
|
+ .formDataJson(JSONObject.toJSONString(UtilMap.map("textField_m0vvz8ni, textField_m0vvz8nj, textField_m0vvz8nk, textField_m0vvz8nl"
|
|
|
+ ,projectId,cTid,item.getString("name"),item.getString("id"))))
|
|
|
+ .searchCondition(JSONObject.toJSONString(Arrays.asList(new YDSearch("textField_m0vvz8nl",item.getString("id"),"自定义字段编号", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ)
|
|
|
+ ,new YDSearch("textField_m0vvz8nj",cTid,"任务类型编号", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ))))
|
|
|
+ .build(), YDConf.FORM_OPERATION.upsert);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ JSONArray tasks=tbApiService.getTasksByType(projectId,cTid);
|
|
|
for (int i = 0; i < tasks.size(); i++) {
|
|
|
JSONObject task = tasks.getJSONObject(i);
|
|
|
log.info("同步任务,任务编号:[{}]进度:[{}/{}]",task.getString("id"),i+1,tasks.size());
|
|
|
Map saveMap=UtilMap.map("textField_m0rkuewb, textField_m0rkuewd, textField_m0rkuewc, textField_m0rkuewe, selectField_m0rkuewk, textField_m0vtq84z, textField_m0vtq850"
|
|
|
,task.getString("id"),task.getString("content")
|
|
|
,projectId,project.getString("name"),map.get(task.getString("tfsId"))
|
|
|
- ,array.getJSONObject(j).getString("id"),array.getJSONObject(j).getString("name"));
|
|
|
+ ,cTid,cTname);
|
|
|
saveMap.put("textField_m0xldyf3",task.getString("parentTaskId"));
|
|
|
JSONArray ancestorIds=task.getJSONArray("ancestorIds");
|
|
|
int size=ancestorIds.size();
|
|
@@ -506,15 +542,21 @@ public class ThTbServiceImpl implements ThTbService {
|
|
|
Map<String,JSONArray> taskCustValues=new HashMap<>();
|
|
|
List<JSONObject> custs=task.getJSONArray("customfields").toJavaList(JSONObject.class);
|
|
|
custs.forEach(item -> taskCustValues.put(item.getString("cfId"),item.getJSONArray("value")));
|
|
|
- saveMap.put("textField_m0xldyf7",getCustOne(taskCustValues.get(projectCusts.get("权重")),"title"));
|
|
|
+ saveMap.put("textField_m21p4jl8",String.join(",",ancestorIds.toJavaList(String.class)));
|
|
|
saveMap.put("employeeField_m0xldyf4",Arrays.asList(tbApiService.getUserId(task.getString("executorId"),true)));
|
|
|
saveMap.put("employeeField_m0xldyf5",tbApiService.getUserIds(getCust(taskCustValues.get(projectCusts.get("联席责任人")),"id"),true));
|
|
|
- saveMap.put("textField_m102rax6",getCustOne(taskCustValues.get(projectCusts.get("责任部门")),"title"));
|
|
|
- saveMap.put("textField_m102rax9",getCustOne(taskCustValues.get(projectCusts.get("验收依据")),"title"));
|
|
|
- saveMap.put("textField_m102raxm",getCustOne(taskCustValues.get(projectCusts.get("Q1目标")),"title"));
|
|
|
- saveMap.put("textField_m10at4ej",getCustOne(taskCustValues.get(projectCusts.get("Q2目标")),"title"));
|
|
|
- saveMap.put("textField_m10at4ek",getCustOne(taskCustValues.get(projectCusts.get("Q3目标")),"title"));
|
|
|
- saveMap.put("textField_m10at4el",getCustOne(taskCustValues.get(projectCusts.get("Q4目标")),"title"));
|
|
|
+ // 责任人
|
|
|
+ List<String> zrrList=tbApiService.getUserIds(getCust(taskCustValues.get(projectCusts.get("责任人")),"id"),true);
|
|
|
+ if(zrrList!=null&&zrrList.size()>0){
|
|
|
+ taskDatas.add(UtilMap.map("taskId, parentTaskId, zrr",task.getString("id"),task.getString("parentTaskId"),zrrList));
|
|
|
+ }
|
|
|
+ saveMap.put("employeeField_m201jmmi",zrrList);
|
|
|
+ saveMap.put("employeeField_m21hlidz",tbApiService.getUserIds(getCust(taskCustValues.get(projectCusts.get("上级任务责任人")),"id"),true));
|
|
|
+ for (int k = 0; k < ydKyes.size(); k++) {
|
|
|
+ if(!ydKyes.get(k).equals(NULLDATA)){
|
|
|
+ saveMap.put(ydKyes.get(k),getCustOne(taskCustValues.get(projectCusts.get(custNames.get(k))),"title"));
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
ydClient.operateData(YDParam.builder().formUuid(_matchFormUuid("TASK"))
|
|
|
.formDataJson(JSONObject.toJSONString(saveMap))
|
|
@@ -522,6 +564,49 @@ public class ThTbServiceImpl implements ThTbService {
|
|
|
.build(), YDConf.FORM_OPERATION.upsert);
|
|
|
}
|
|
|
}
|
|
|
+ log.info("TB任务同步完成,开始处理权限成员");
|
|
|
+ for (Map taskData:taskDatas){
|
|
|
+ String taskId=UtilMap.getString(taskData,"taskId");
|
|
|
+ String parentTaskId=UtilMap.getString(taskData,"parentTaskId");
|
|
|
+ List<String> zrr=UtilMap.getList(taskData,"zrr");
|
|
|
+ // 父项目添加当前项目负责人权限
|
|
|
+ if(!PublicUtil.isNull(parentTaskId)){
|
|
|
+ addTaskAuthUser("textField_m0rkuewb",parentTaskId,zrr); // 更新父级
|
|
|
+ }
|
|
|
+ // 查询父级任务并修改权限数据
|
|
|
+ addTaskAuthUser("textField_m21p4jl8",taskId,zrr); // 更新子级
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void addTaskAuthUser(String key,String taskId,List<String> users){
|
|
|
+ List<Map> list = (List<Map>) ydClient.queryData(YDParam.builder().formUuid(_matchFormUuid("TASK")).searchCondition(
|
|
|
+ JSONObject.toJSONString(Arrays.asList(new YDSearch(key,taskId,"taskid", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.LIKE)))
|
|
|
+ ).build(), YDConf.FORM_QUERY.retrieve_list).getData();
|
|
|
+ if(list!=null&&list.size()>0){
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ Map formData=UtilMap.getMap(list.get(i),"formData");
|
|
|
+ String formInstanceId=UtilMap.getString(list.get(i),"formInstanceId");
|
|
|
+ List<String> newUsers = UtilMap.getList(formData,"employeeField_m217qmy5_id");
|
|
|
+ newUsers.addAll(users);
|
|
|
+ ydClient.operateData(YDParam.builder().formInstId(formInstanceId).updateFormDataJson(
|
|
|
+ JSONObject.toJSONString(UtilMap.map("employeeField_m217qmy5",newUsers))
|
|
|
+ ).build(), YDConf.FORM_OPERATION.update);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void taskStatusChange(JSONObject task){
|
|
|
+ try {
|
|
|
+ Map<String,String> map=getProjectStateVule(task.getString("projectId"));
|
|
|
+ Map saveMap=UtilMap.map("selectField_m0rkuewk",map.get(task.getString("tfsId")));
|
|
|
+ ydClient.operateData(YDParam.builder().formUuid(_matchFormUuid("TASK"))
|
|
|
+ .formDataJson(JSONObject.toJSONString(saveMap))
|
|
|
+ .searchCondition(JSONObject.toJSONString(Arrays.asList(new YDSearch("textField_m0rkuewb",task.getString("id"),"taskid", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ))))
|
|
|
+ .build(), YDConf.FORM_OPERATION.upsert);
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error("同步到宜搭出错,不影响TB");
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private String getCustOne(JSONArray array,String key){
|