maxiaoshan 3 年之前
父節點
當前提交
fa0124d4fd
共有 6 個文件被更改,包括 170 次插入115 次删除
  1. 5 5
      src/front/front.go
  2. 112 0
      src/front/group.go
  3. 47 106
      src/front/project.go
  4. 3 3
      src/front/user.go
  5. 2 0
      src/main.go
  6. 1 1
      src/web/templates/project/project_list.html

+ 5 - 5
src/front/front.go

@@ -53,9 +53,8 @@ type Front struct {
 	roleSecondEdit xweb.Mapper `xweb:"/front/role/second/edit"` //二级权限编辑
 
 	//project
-	projectList xweb.Mapper `xweb:"/front/project"`      //项目列表
-	projectSave xweb.Mapper `xweb:"/front/project/save"` //新增项目
-	//projectClear          xweb.Mapper `xweb:"/front/project/clear/"`         //项目清洗
+	projectList           xweb.Mapper `xweb:"/front/project"`                //项目列表
+	projectSave           xweb.Mapper `xweb:"/front/project/save"`           //新增项目
 	projectTaskSave       xweb.Mapper `xweb:"/front/project/task/save"`      //用户组任务分发
 	projectTaskList       xweb.Mapper `xweb:"/front/project/task/list"`      //用户组任务分发列表
 	projectTaskRetrieve   xweb.Mapper `xweb:"/front/project/task/retrieve"`  //用户组任务收回
@@ -67,8 +66,9 @@ type Front struct {
 	userTaskList     xweb.Mapper `xweb:"/front/user/task/list"`     //用户任务列表
 	userTaskRetrieve xweb.Mapper `xweb:"/front/user/task/retrieve"` //用户任务收回
 
-	groupTaskList xweb.Mapper `xweb:"/front/group/task/list"` //用户组任务列表
-
+	groupTaskListByAdmin xweb.Mapper `xweb:"/front/group/admin/task/list"` //用户组任务列表(系统管理员权限)
+	groupTaskListByGroup xweb.Mapper `xweb:"/front/group/task/list"`       //用户组任务列表(用户组权限)
+	groupTaskDeliver     xweb.Mapper `xweb:"/front/group/task/deliver"`    //用户组任务交付
 }
 
 func (f *Front) Index() {

+ 112 - 0
src/front/group.go

@@ -0,0 +1,112 @@
+package front
+
+import (
+	qu "qfw/util"
+	"strings"
+	"time"
+	"util"
+)
+
+// GroupTaskListByGroup 用户组权限用户组任务列表
+func (f *Front) GroupTaskListByGroup() {
+	defer qu.Catch()
+	if f.Method() == "POST" {
+		start, _ := f.GetInteger("start")
+		limit, _ := f.GetInteger("length")
+		draw, _ := f.GetInteger("draw")
+		status := f.GetString("status")
+		searchStr := f.GetString("search[value]")
+		search := strings.TrimSpace(searchStr)
+		query := map[string]interface{}{
+			"s_stype": "group", //检索用户组任务
+		}
+		if status != "-1" { //任务状态
+			query["s_status"] = status
+		}
+		if search != "" {
+			query["$or"] = []interface{}{
+				map[string]interface{}{"s_projectname": map[string]interface{}{"$regex": search}},
+			}
+		}
+		list, _ := util.Mgo.Find(util.TASKCOLLNAME, query, nil, nil, false, start, limit)
+		count := util.Mgo.Count(util.TASKCOLLNAME, query)
+		f.ServeJson(map[string]interface{}{"draw": draw, "data": *list, "recordsFiltered": count, "recordsTotal": count})
+	} else {
+		_ = f.Render("project/task_group_list.html")
+	}
+}
+
+// GroupTaskListByAdmin 系统管理员权限用户组任务列表
+func (f *Front) GroupTaskListByAdmin() {
+	defer qu.Catch()
+	if f.Method() == "POST" {
+		start, _ := f.GetInteger("start")
+		limit, _ := f.GetInteger("length")
+		draw, _ := f.GetInteger("draw")
+		status := f.GetString("status")
+		searchStr := f.GetString("search[value]")
+		search := strings.TrimSpace(searchStr)
+		query := map[string]interface{}{
+			"s_stype": "group", //检索用户组任务
+		}
+		if status != "-1" { //任务状态
+			query["s_status"] = status
+		}
+		if search != "" {
+			query["$or"] = []interface{}{
+				map[string]interface{}{"s_projectname": map[string]interface{}{"$regex": search}},
+			}
+		}
+		list, _ := util.Mgo.Find(util.TASKCOLLNAME, query, nil, nil, false, start, limit)
+		count := util.Mgo.Count(util.TASKCOLLNAME, query)
+		f.ServeJson(map[string]interface{}{"draw": draw, "data": *list, "recordsFiltered": count, "recordsTotal": count})
+	} else {
+		_ = f.Render("project/task_group_list.html")
+	}
+}
+
+// GroupTaskDeliver 用户组任务交付
+func (f *Front) GroupTaskDeliver() {
+	defer qu.Catch()
+	user := f.GetSession("user").(map[string]interface{})
+	username := qu.ObjToString(user["s_name"]) //当前登录用户
+	success := true
+	msg := ""
+	taskId := f.GetString("taskid") //用户组任务id
+	qu.Debug("Group Task ID:", taskId)
+	groupTask, _ := util.Mgo.FindById(util.TASKCOLLNAME, taskId, map[string]interface{}{"v_sonids": 1})
+	if groupTask != nil && len(*groupTask) > 0 {
+		sonUserIds := (*groupTask)["v_sonids"].([]interface{})
+		if len(sonUserIds) > 0 {
+			for _, id := range sonUserIds {
+				userTaskId := qu.ObjToString(id)
+				userTask, _ := util.Mgo.FindById(util.TASKCOLLNAME, userTaskId, map[string]interface{}{"s_status": 1})
+				status := qu.ObjToString((*userTask)["s_status"])
+				if status != "已完成" || status != "已关闭" {
+					success = false
+					msg = "任务暂未完成"
+				}
+			}
+			if success { //用户组下用户任务全部完成,更新该用户组任务状态
+				success = util.Mgo.UpdateById(util.TASKCOLLNAME, taskId, map[string]interface{}{
+					"$set": map[string]interface{}{
+						"i_completetime": time.Now().Unix(),
+						"s_updateperson": username,
+						"i_updatetime":   time.Now().Unix(),
+						"s_status":       "已完成",
+					},
+				})
+				if !success {
+					msg = "更新任务信息失败"
+				}
+			}
+		} else {
+			success = false
+			msg = "任务暂未分配"
+		}
+	} else {
+		success = false
+		msg = "查询任务失败"
+	}
+	f.ServeJson(map[string]interface{}{"success": success, "msg": msg})
+}

+ 47 - 106
src/front/project.go

@@ -66,11 +66,11 @@ func (f *Front) ProjectSave() {
 	importDataNum := 0      //查询数量
 	var s_rulename []string //规则
 	user := f.GetSession("user").(map[string]interface{})
-	username := qu.ObjToString(user["s_name"])  //当前登录用户
-	stype := f.GetString("s_type")              //新建项目类型:数据库导入、excel导入
-	s_sourceinfo := f.GetString("s_sourceinfo") //数据表
-	s_sourceinfo = "f_sourceinfo_" + s_sourceinfo
-	if s_sourceinfo == "" {
+	username := qu.ObjToString(user["s_name"])     //当前登录用户
+	stype := f.GetString("s_type")                 //新建项目类型:数据库导入、excel导入
+	s_sourceinfoTmp := f.GetString("s_sourceinfo") //数据表
+	s_sourceinfo := "f_sourceinfo_" + s_sourceinfoTmp
+	if stype != "edit" && s_sourceinfo == "" {
 		f.ServeJson(map[string]interface{}{"success": false, "msg": "缺少数据存储表名"})
 		return
 	}
@@ -79,6 +79,7 @@ func (f *Front) ProjectSave() {
 		"s_name": s_name,
 	}
 	set := map[string]interface{}{}
+	qu.Debug(stype)
 	//导入数据
 	if stype == "excel" { //excel导入
 		s_entname = f.GetString("s_entname") //公司名称
@@ -90,21 +91,24 @@ func (f *Front) ProjectSave() {
 		rulename := f.GetString("s_rulename")      //规则名称
 		s_rulename = strings.Split(rulename, ",")
 		mf, _, err := f.GetFile("xlsx")
+		qu.Debug(s_entname, s_departname, s_rulename)
+
 		if err == nil {
 			importDataNum = ImportDataByExcel(s_sourceinfo, mf, &success, &msg, &successNum)
 		}
 		//保存项目信息
 		set = map[string]interface{}{
-			"s_name":       s_name,                        //项目名称
-			"s_entname":    s_entname,                     //公司名称
-			"s_departname": s_departname,                  //部门名称
-			"s_rulename":   strings.Join(s_rulename, ","), //规则名称
-			"i_importnum":  importDataNum,                 //导入数量
-			"s_sourceinfo": s_sourceinfo,                  //源数据表
-			"s_createname": username,                      //创建人
-			"s_status":     "未开始",                         //项目状态
-			"i_createtime": time.Now().Unix(),             //创建时间
-			"s_importtype": "excel",                       //导入类型
+			"s_name":           s_name,                                //项目名称
+			"s_entname":        s_entname,                             //公司名称
+			"s_departname":     s_departname,                          //部门名称
+			"s_rulename":       strings.Join(s_rulename, ","),         //规则名称
+			"i_importnum":      importDataNum,                         //导入数量
+			"s_sourceinfo":     s_sourceinfo,                          //源数据表
+			"s_sourcetaskinfo": "s_sourcetaskinfo_" + s_sourceinfoTmp, //源数据表
+			"s_createname":     username,                              //创建人
+			"s_status":         "未开始",                                 //项目状态
+			"i_createtime":     time.Now().Unix(),                     //创建时间
+			"s_importtype":     "excel",                               //导入类型
 		}
 	} else if stype == "coll" { //数据库导入
 		historyid := f.GetString("s_historyid")
@@ -174,57 +178,6 @@ func (f *Front) ProjectSave() {
 	}
 }
 
-// ProjectClear 项目清洗
-//func (f *Front) ProjectClear() {
-//	defer qu.Catch()
-//	if f.Method() == "POST" {
-//		projectid := f.GetString("s_projectid") //项目id
-//		project, _ := util.Mgo.FindById(util.PROJECTCOLLNAME, projectid, map[string]interface{}{"s_status": 1, "s_sourceinfo": 1})
-//		if project != nil && len(*project) > 0 {
-//			if status := qu.ObjToString((*project)["s_status"]); status == "未开始" {
-//				//TODO:调用数据质量评估接口
-//				//点击清洗更新项目状态为进行中
-//				b := util.Mgo.UpdateById(util.PROJECTCOLLNAME, projectid, map[string]interface{}{"$set": map[string]interface{}{"s_status": "进行中", "i_starttime": time.Now().Unix()}})
-//				qu.Debug("Update Porject:"+projectid+"	Status Success:", b)
-//			}
-//		} else {
-//			qu.Debug("Search Porject Failed:", projectid)
-//			f.ServeJson("查询项目信息失败")
-//			return
-//		}
-//
-//		sourceinfo := qu.ObjToString((*project)["s_sourceinfo"])                                                       //数据源表
-//		noTagAllDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": false})                    //达标数据总量
-//		noTagGiveDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": false, "b_isgive": true}) //达标数据已分发量
-//		noTagNoGiveDataNum := noTagAllDataNum - noTagGiveDataNum                                                       //达标待分发量
-//		tagAllDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": true})                       //未达标数据总量
-//		tagGiveDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": true, "b_isgive": true})    //未达标数据已分发量
-//		tagNoGiveDataNum := tagAllDataNum - tagGiveDataNum                                                             //未达标待分发量
-//		allGiveDataNum := noTagGiveDataNum + tagGiveDataNum                                                            //总分发量
-//		allNoGiveDataNum := noTagNoGiveDataNum + tagNoGiveDataNum                                                      //总待分发量
-//		allDataNum := allGiveDataNum + allNoGiveDataNum
-//
-//		data := make(map[string]interface{})
-//		data["allDataNum"] = allDataNum
-//		data["allGiveDataNum"] = allGiveDataNum
-//		data["allNoGiveDataNum"] = allNoGiveDataNum
-//		data["noTagAllDataNum"] = noTagAllDataNum
-//		data["noTagGiveDataNum"] = noTagGiveDataNum
-//		data["noTagNoGiveDataNum"] = noTagNoGiveDataNum
-//		data["tagAllDataNum"] = tagAllDataNum
-//		data["tagGiveDataNum"] = tagGiveDataNum
-//		data["tagNoGiveDataNum"] = tagNoGiveDataNum
-//		data["s_projectid"] = projectid
-//		qu.Debug(data)
-//		f.ServeJson(data)
-//	} else {
-//		pid := f.GetString("pid")
-//		f.T["s_projectid"] = pid
-//		_ = f.Render("project/project_clear.html", &f.T)
-//	}
-//
-//}
-
 // ProjectTaskList 用户组任务分发列表
 func (f *Front) ProjectTaskList() {
 	defer qu.Catch()
@@ -322,17 +275,20 @@ func (f *Front) ProjectTaskSave() {
 	success := false
 	msg := ""
 	user := f.GetSession("user").(map[string]interface{})
-	username := qu.ObjToString(user["s_name"])                                                  //当前登录用户
-	projectid := f.GetString("s_projectid")                                                     //项目标识
-	projectname := f.GetString("s_projectname")                                                 //项目名称
-	sourceinfo := f.GetString("s_sourceinfo")                                                   //源数据表
-	sourcetaskinfo := "f_sourcetaskinfo_" + strings.ReplaceAll(sourceinfo, "f_sourceinfo_", "") //任务日志表
+	username := qu.ObjToString(user["s_name"]) //当前登录用户
+	projectid := f.GetString("s_projectid")    //项目标识
+	project, _ := util.Mgo.FindById(util.PROJECTCOLLNAME, projectid, nil)
+	projectname := qu.ObjToString((*project)["s_projectname"])       //项目名称
+	sourceinfo := qu.ObjToString((*project)["s_sourceinfo"])         //源数据表
+	sourcetaskinfo := qu.ObjToString((*project)["s_sourcetaskinfo"]) //任务日志表
 	group := f.GetString("s_group")
 	stype := f.GetString("s_type")
+	qu.Debug("项目id:", projectid, " 项目名称:", projectname, "sourcetaskinfo:", sourcetaskinfo)
 	if err := json.Unmarshal([]byte(group), &groupArr); err != nil {
 		qu.Debug("GroupInfo Unmarshal Failed:", err)
 		msg = "用户组信息解析失败"
 	} else {
+		qu.Debug("用户组信息:", groupArr)
 		if stype == "notag" { //如果分发的是达标数据且进行了初步质检,将没有质检记录的字段从v_taginfo标注记录中删除
 			DeleleDataTagInfo(sourceinfo)
 		}
@@ -349,27 +305,30 @@ func (f *Front) ProjectTaskSave() {
 			}
 			groupIdTask[groupTaskIdStr] = gt
 			groupTask := map[string]interface{}{
-				"_id":              groupTaskId,                               //生成任务id
-				"s_projectid":      projectid,                                 //项目标识
-				"s_projectname":    projectname,                               //项目名称
-				"s_status":         "未开始",                                     //任务状态
-				"s_personid":       qu.ObjToString(groupInfo["s_personid"]),   //任务负责人标识
-				"s_personname":     qu.ObjToString(groupInfo["s_personname"]), //任务负责人
-				"s_groupname":      qu.ObjToString(groupInfo["s_groupname"]),  //用户组名称
-				"s_groupid":        groupId,                                   //用户组标识
-				"i_givenum":        givenum,                                   //分发数据量
-				"s_createname":     username,                                  //创建人
-				"i_createtime":     time.Now().Unix(),                         //创建时间
-				"s_progress":       "0%",                                      //完成进度
-				"s_sourceinfo":     sourceinfo,                                //源数据表
-				"s_sourcetaskinfo": sourcetaskinfo,                            //任务日志表
-				"s_stype":          "group",                                   //任务类型
+				"_id":              groupTaskId,                                //生成任务id
+				"s_projectid":      projectid,                                  //项目标识
+				"s_projectname":    projectname,                                //项目名称
+				"s_status":         "未开始",                                      //任务状态
+				"s_personid":       qu.ObjToString(groupInfo["s_personid"]),    //任务负责人标识
+				"s_personname":     qu.ObjToString(groupInfo["s_personname"]),  //任务负责人
+				"s_groupname":      qu.ObjToString(groupInfo["s_groupname"]),   //用户组名称
+				"s_groupid":        groupId,                                    //用户组标识
+				"i_givenum":        givenum,                                    //分发数据量
+				"s_createname":     username,                                   //创建人
+				"i_createtime":     time.Now().Unix(),                          //创建时间
+				"s_progress":       "0%",                                       //完成进度
+				"s_sourceinfo":     sourceinfo,                                 //源数据表
+				"s_sourcetaskinfo": sourcetaskinfo,                             //任务日志表
+				"s_stype":          "group",                                    //任务类型
+				"s_entname":        qu.ObjToString((*project)["s_entname"]),    //公司名称
+				"s_departname":     qu.ObjToString((*project)["s_departname"]), //部门名称
+				"s_rulename":       qu.ObjToString((*project)["s_rulename"]),   //规则名称
 			}
 			taskArr = append(taskArr, groupTask)
 		}
 	}
 	if len(taskArr) > 0 {
-		//分发数据后更新项目中用户组标识信息
+		//分发数据后更新项目中用户组标识信息和用户组任务id
 		success = util.Mgo.UpdateById(util.PROJECTCOLLNAME, projectid, map[string]interface{}{
 			"$push": map[string]interface{}{
 				"v_groupids": map[string]interface{}{
@@ -390,7 +349,7 @@ func (f *Front) ProjectTaskSave() {
 			}
 		}
 	}
-	qu.Debug("Msg:", msg)
+	qu.Debug("Success:", success, "Msg:", msg)
 	f.ServeJson(map[string]interface{}{"success": success, "msg": msg})
 }
 
@@ -1054,21 +1013,3 @@ func UpdateMarkColl(bidData, markData, tagInfoMap, baseInfoMap *map[string]inter
 		(*baseInfoMap)["i_ckdata"] = 1
 	}
 }
-
-func (f *Front) UserTaskList() {
-	qu.Catch()
-	if f.Method() == "POST" {
-
-	} else {
-		_ = f.Render("project/task_user_list.html")
-	}
-}
-
-func (f *Front) GroupTaskList() {
-	qu.Catch()
-	if f.Method() == "POST" {
-
-	} else {
-		_ = f.Render("project/task_group_list.html")
-	}
-}

+ 3 - 3
src/front/user.go

@@ -419,8 +419,8 @@ func (f *Front) UserTaskSave() {
 	}
 }
 
-// UerTaskList 用户任务分发列表
-func (f *Front) UerTaskList() {
+// UserTaskList 用户任务分发列表
+func (f *Front) UserTaskList() {
 	defer qu.Catch()
 	//groupId := f.GetString("s_groupid") //用户组id
 	groupTaskId := f.GetString("grouptaskid") //用户组任务id
@@ -458,7 +458,7 @@ func (f *Front) UerTaskList() {
 		f.T["isNotGiveNum"] = isNotGiveNum
 		f.T["isTagNum"] = isTagNum
 		f.T["isNotTagNum"] = isNotTagNum
-		_ = f.Render("/user/task.html", &f.T)
+		_ = f.Render("project/task_user_list.html", &f.T)
 	}
 }
 

+ 2 - 0
src/main.go

@@ -33,6 +33,8 @@ func init() {
 }
 
 func main() {
+	//qu.Debug(SE.EncodeString("60b99c2d72c25c51c492af6a"))
+	//return
 	//Mgo.UpdateById("test11", "61a9975a180a78e6edf8285d", map[string]interface{}{
 	//	"$inc": map[string]interface{}{
 	//		"count": -555,

+ 1 - 1
src/web/templates/project/project_list.html

@@ -433,7 +433,7 @@
         tmp["v_field"] = m
         if (tmp !== projectmap) {
             $.ajax({
-                url: "/front/project/save",
+                url: "/front/project/task/save",
                 type: 'POST',
                 data: projectmap,
                 success: function (r) {