private void recursionWrite(ArrayList decomposList) { //遍历decomposeList foreach (CrowdTask item in decomposList) { //根据每一个分解的Id,去查找对应的分解结果 ArrayList decomposeResultList = findDecomposeResultByWorkflowIdAndVote(item.taskWorkflowId, item.mainTaskId); if (decomposeResultList.Count != 0 && decomposeResultList != null) { //将这个分解结果写入到数据库 foreach (DecomposeResult dr in decomposeResultList) { CrowdTask ct = findCrowdTaskByWorkflowId(item.taskWorkflowId); DecomposeTree dt = findDecomposeTreeByTaskNameAndTaskDescription(ct.taskName, ct.taskDescription, ct.mainTaskId); insertDecomposeTree(dr.taskName, dr.taskDescription, dr.taskOrder, null, dt.id, dr.mainTaskId); if (dr.simple == "yes") { int dtId = findDecomposeTreeByTaskNameAndTaskDescription(dr.taskName, dr.taskDescription, dr.mainTaskId).id; string taskSolution = findSolveResultByTaskNameAndBestAnswer(dr.taskName, dr.mainTaskId).taskSolution; updateDecomposeTreeSetSolution(taskSolution, dtId); } } foreach (DecomposeResult dr in decomposeResultList) { //遍历当前分解结果list里面的每一个任务,看看是否还有分解,然后再写入到数据库 ArrayList subDecomposeList = findCrowdTaskByParentWorkflowIdAndTaskTypeAndTaskName(dr.workflow_id, dr.taskName, TaskType.decomposeTask, dr.mainTaskId); recursionWrite(subDecomposeList); } } } }
private DecomposeTree findDecomposeTreeByTaskNameAndTaskDescription(string taskName, string taskDescription, string mainTaskId) { DecomposeTree dt = new DecomposeTree(); SqlCommand com = null; try { conn.Open(); string sql = string.Format("select * from decomposeTree where taskName='{0}' and mainTaskWorkflowId='{1}' and taskDescription='{2}'", taskName, mainTaskId, taskDescription); com = new SqlCommand(sql, conn); SqlDataReader dr = com.ExecuteReader(); while (dr.Read()) { dt.id = Convert.ToInt32(dr["id"].ToString()); dt.taskName = dr["taskName"].ToString(); dt.taskDescription = dr["taskDescription"].ToString(); dt.taskOrder = dr["taskOrder"].ToString(); dt.solution = dr["taskSolution"].ToString(); dt.parentId = Convert.ToInt32(dr["parentId"].ToString()); dt.mainTaskId = dr["mainTaskWorkflowId"].ToString(); } } catch (Exception e) { throw e; } finally { if (com != null) { com.Dispose(); } if (conn != null) { conn.Close(); } } return(dt); }