|
@@ -5,7 +5,9 @@ import com.alibaba.fastjson.JSONObject;
|
|
|
import com.malk.server.aliwork.YDConf;
|
|
|
import com.malk.server.aliwork.YDParam;
|
|
|
import com.malk.server.aliwork.YDSearch;
|
|
|
+import com.malk.server.common.McR;
|
|
|
import com.malk.service.aliwork.YDClient;
|
|
|
+import com.malk.utils.UtilEnv;
|
|
|
import com.malk.utils.UtilMap;
|
|
|
import com.muzhi.tianhe.service.ThTbService;
|
|
|
import com.muzhi.tianhe.util.PublicUtil;
|
|
@@ -15,6 +17,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.lang.reflect.Array;
|
|
|
import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Slf4j
|
|
|
@Service
|
|
@@ -446,10 +449,33 @@ public class ThTbServiceImpl implements ThTbService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private String _matchFormUuid(String code) {
|
|
|
+ Map<String, String> formUuid = UtilMap.empty();
|
|
|
+ if (UtilEnv.getActiveProfile().equals(UtilEnv.ENV_PROD)) {
|
|
|
+ formUuid.put("TASK", "FORM-B8C09F8900BD43EC8025068B3CB4C4F8SLAD");
|
|
|
+ formUuid.put("CUSTFIELD", "FORM-031FC90C7D3C49A394600D4EE6C037915QSI");
|
|
|
+ } else {
|
|
|
+ formUuid.put("TASK", "FORM-59A439BCB8194F10B8C862C579F285F5KWG6"); // 文件夹/文件版本记录
|
|
|
+ formUuid.put("CUSTFIELD", "FORM-C5B14D2EE4464AED835BA259388E829D9937"); // 文件夹权限
|
|
|
+ }
|
|
|
+ return formUuid.get(code);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public void syncStateProject(String projectId) {
|
|
|
+ // 同步项目下自定义字段
|
|
|
+ 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);;
|
|
|
+ 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++) {
|
|
@@ -460,24 +486,123 @@ public class ThTbServiceImpl implements ThTbService {
|
|
|
for (int i = 0; i < tasks.size(); i++) {
|
|
|
JSONObject task = tasks.getJSONObject(i);
|
|
|
log.info("同步任务,任务编号:[{}]进度:[{}/{}]",task.getString("id"),i+1,tasks.size());
|
|
|
- ydClient.operateData(YDParam.builder().formUuid("FORM-59A439BCB8194F10B8C862C579F285F5KWG6")
|
|
|
- .formDataJson(JSONObject.toJSONString(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"))))
|
|
|
+ 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"));
|
|
|
+ saveMap.put("textField_m0xldyf3",task.getString("parentTaskId"));
|
|
|
+ JSONArray ancestorIds=task.getJSONArray("ancestorIds");
|
|
|
+ int size=ancestorIds.size();
|
|
|
+ if(size>0){
|
|
|
+ saveMap.put("textField_m0xldyf8",ancestorIds.getString(size-1));
|
|
|
+ if(size>1){
|
|
|
+ saveMap.put("textField_m0xldyf9",ancestorIds.getString(size-2));
|
|
|
+ if(size>2){
|
|
|
+ saveMap.put("textField_m0xldyfa",ancestorIds.getString(size-3));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 查询任务中的自定义字段值
|
|
|
+ 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("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"));
|
|
|
+
|
|
|
+ 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);
|
|
|
}
|
|
|
}
|
|
|
-// // 同步项目下自定义字段
|
|
|
-// List<JSONObject> projectCoutList=tbApiService.getProjectCustomfield(projectId).toJavaList(JSONObject.class);
|
|
|
-// projectCoutList.forEach(item -> {
|
|
|
-// ydClient.operateData(YDParam.builder().formUuid("FORM-C5B14D2EE4464AED835BA259388E829D9937")
|
|
|
-// .formDataJson(JSONObject.toJSONString(UtilMap.map("textField_m0vvz8ni, textField_m0vvz8nj, textField_m0vvz8nk, textField_m0vvz8nl"
|
|
|
-// ,projectId,item.getString("id"),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);
|
|
|
-// });
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getCustOne(JSONArray array,String key){
|
|
|
+ if(array==null||array.size()<1){
|
|
|
+ return "";
|
|
|
+ }else {
|
|
|
+ return array.getJSONObject(0).getString(key);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getCust(JSONArray array,String key){
|
|
|
+ if(array==null||array.size()<1){
|
|
|
+ return "";
|
|
|
+ }else {
|
|
|
+ return String.join(",",array.toJavaList(Map.class).stream().map(item->{
|
|
|
+ return UtilMap.getString(item,key);
|
|
|
+ }).collect(Collectors.toList()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void taskLock(String projectId, String taskType, List<String> keys, Boolean isAdd) {
|
|
|
+ JSONArray tasks=tbApiService.getTasksByType(projectId,taskType);
|
|
|
+ // 使用流来转换List<String>到List<Map<String, String>>
|
|
|
+ List<Map<String, String>> mapList = keys.stream()
|
|
|
+ .map(name -> Collections.singletonMap("action", name))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ for (int i = 0; i < tasks.size(); i++) {
|
|
|
+ JSONObject task = tasks.getJSONObject(i);
|
|
|
+ log.info(isAdd?"锁定":"解锁"+"任务字段,任务编号:[{}]进度:[{}/{}]",task.getString("id"),i+1,tasks.size());
|
|
|
+ tbApiService.updateTaskLock(task.getString("id"),isAdd,mapList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public McR taskUpdate(JSONObject param) {
|
|
|
+ String type=param.getString("type");
|
|
|
+ String taskId=param.getString("taskId");
|
|
|
+ if(type.equals("content")){
|
|
|
+ // 标题
|
|
|
+ tbApiService.updateTaskLock(taskId,false,Arrays.asList(UtilMap.map("action","content$update")));
|
|
|
+ tbApiService.updateTaskContent(taskId,param.getString("content"));
|
|
|
+ tbApiService.updateTaskLock(taskId,true,Arrays.asList(UtilMap.map("action","content$update")));
|
|
|
+ }else if(type.equals("executorId")){
|
|
|
+ // 执行人
|
|
|
+ tbApiService.updateTaskLock(taskId,false,Arrays.asList(UtilMap.map("action","executorId$update")));
|
|
|
+ tbApiService.updateTaskExecutor(taskId,tbApiService.getUserId(param.getString("executorId"),false));
|
|
|
+ tbApiService.updateTaskLock(taskId,true,Arrays.asList(UtilMap.map("action","executorId$update")));
|
|
|
+ }else if(type.equals("qz")){
|
|
|
+ // 权重
|
|
|
+ String[] taskIds=taskId.split(",");
|
|
|
+ String[] qzValues=param.getString("qzValues").split(",");
|
|
|
+ if(taskIds.length!=qzValues.length){
|
|
|
+ return McR.error("201","权重任务ID与数据长度不一致");
|
|
|
+ }
|
|
|
+ for (int i = 0; i < taskIds.length; i++) {
|
|
|
+ tbApiService.updateTaskLock(taskIds[i],false,Arrays.asList(UtilMap.map("action","cf:"+param.getString("cId")+"$update")));
|
|
|
+ tbApiService.updateTaskCustomfield(taskIds[i],param.getString("cId"),qzValues[i]);
|
|
|
+ tbApiService.updateTaskLock(taskIds[i],false,Arrays.asList(UtilMap.map("action","cf:"+param.getString("cId")+"$update")));
|
|
|
+ }
|
|
|
+ }else if(type.equals("lxzrr")){
|
|
|
+ // 联系责任人
|
|
|
+ List<String> ids=param.getJSONArray("userIds").toJavaList(String.class);
|
|
|
+ List<String> tbIds=tbApiService.getUserIds(String.join(",",ids),false);
|
|
|
+ JSONArray array=new JSONArray();
|
|
|
+ for (String id:tbIds){
|
|
|
+ array.add(UtilMap.map("id",id));
|
|
|
+ }
|
|
|
+ tbApiService.updateTaskLock(taskId,false,Arrays.asList(UtilMap.map("action","cf:"+param.getString("cId")+"$update")));
|
|
|
+ tbApiService.updateTaskCustomfield(taskId,param.getString("cId"),array);
|
|
|
+ tbApiService.updateTaskLock(taskId,true,Arrays.asList(UtilMap.map("action","cf:"+param.getString("cId")+"$update")));
|
|
|
+ }else if(type.equals("custValue")){
|
|
|
+ // 自定义字段
|
|
|
+ tbApiService.updateTaskLock(taskId,false,Arrays.asList(UtilMap.map("action","cf:"+param.getString("cId")+"$update")));
|
|
|
+ tbApiService.updateTaskCustomfield(taskId,param.getString("cId"),param.getString("cValue"));
|
|
|
+ tbApiService.updateTaskLock(taskId,true,Arrays.asList(UtilMap.map("action","cf:"+param.getString("cId")+"$update")));
|
|
|
+ }else{
|
|
|
+ return McR.error("201","type 错误");
|
|
|
+ }
|
|
|
+ return McR.success();
|
|
|
}
|
|
|
|
|
|
//获取项目任务类型
|