Browse Source

任务导出

maxiaoshan 3 years ago
parent
commit
5467b2af6f
4 changed files with 139 additions and 33 deletions
  1. 1 0
      src/front/front.go
  2. 101 0
      src/front/group.go
  3. 37 33
      src/front/project.go
  4. BIN
      src/web/model/taskexportmodel.xlsx

+ 1 - 0
src/front/front.go

@@ -71,6 +71,7 @@ type Front struct {
 	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"`    //用户组任务交付
+	groupTaskExport      xweb.Mapper `xweb:"/front/group/task/export"`     //用户组任务导出
 }
 
 func (f *Front) Index() {

+ 101 - 0
src/front/group.go

@@ -1,6 +1,9 @@
 package front
 
 import (
+	"fmt"
+	"github.com/tealeg/xlsx"
+	"os"
 	qu "qfw/util"
 	"strings"
 	"time"
@@ -110,3 +113,101 @@ func (f *Front) GroupTaskDeliver() {
 	}
 	f.ServeJson(map[string]interface{}{"success": success, "msg": msg})
 }
+
+var modelpath string = "web/model/任务详情%d.xlsx"
+
+// GroupTaskExport 用户组任务导出
+func (f *Front) GroupTaskExport() {
+	defer qu.Catch()
+	starttime, _ := f.GetInt("i_starttime")
+	completetime, _ := f.GetInt("i_completetime")
+	status := f.GetString("s_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_entname": map[string]interface{}{"$regex": search}},
+		}
+	}
+	if starttime > 0 {
+		query["i_starttime"] = map[string]interface{}{
+			"$gte": starttime,
+		}
+	}
+	if completetime > 0 {
+		query["i_completetime"] = map[string]interface{}{
+			"$lte": completetime,
+		}
+	}
+	qu.Debug("Query:", query)
+	count := util.Mgo.Count(util.TASKCOLLNAME, query)
+	if count > 0 {
+		file, err := xlsx.OpenFile("taskexportmodel.xlsx")
+		if err != nil {
+			qu.Debug("Load Excel Model Error")
+			f.ServeJson("加载脚本失败")
+			return
+		}
+		sheet := file.Sheets[0]
+		fields := map[string]interface{}{
+			"s_entname":      1,
+			"s_departname":   1,
+			"s_rulename":     1,
+			"s_projectname":  1,
+			"s_groupname":    1,
+			"s_personname":   1,
+			"i_givenum":      1,
+			"i_starttime":    1,
+			"i_completetime": 1,
+		}
+		list, _ := util.Mgo.Find(util.TASKCOLLNAME, query, nil, fields, false, -1, -1)
+		for _, l := range *list {
+			row := sheet.AddRow()
+			entname := qu.ObjToString(l["s_entname"])
+			departname := qu.ObjToString(l["s_departname"])
+			rulename := qu.ObjToString(l["s_rulename"])
+			projectname := qu.ObjToString(l["s_projectname"])
+			groupname := qu.ObjToString(l["s_groupname"])
+			personname := qu.ObjToString(l["s_personname"])
+			givenum := qu.IntAll(l["i_givenum"])
+			starttimestr := ""
+			if starttime := qu.Int64All(l["i_starttime"]); starttime != 0 {
+				starttimestr = qu.FormatDateByInt64(&starttime, qu.Date_Full_Layout)
+			}
+			completetimestr := ""
+			if completetime := qu.Int64All(l["i_completetime"]); completetime != 0 {
+				completetimestr = qu.FormatDateByInt64(&completetime, qu.Date_Full_Layout)
+			}
+			row.AddCell().SetValue(entname)
+			row.AddCell().SetValue(departname)
+			row.AddCell().SetValue(rulename)
+			row.AddCell().SetValue(projectname)
+			row.AddCell().SetValue(groupname)
+			row.AddCell().SetValue(personname)
+			row.AddCell().SetValue(givenum)
+			row.AddCell().SetValue(starttimestr)
+			row.AddCell().SetValue(completetimestr)
+		}
+		fname := fmt.Sprintf(modelpath, time.Now().Unix())
+		qu.Debug("File Name:", fname)
+		err = file.Save(fname)
+		if err != nil {
+			qu.Debug("Save Excel" + fname + "Error")
+			f.ServeJson("导出失败")
+			return
+		}
+		f.ServeFile(fname)
+		go func(path string) {
+			time.Sleep(time.Minute * 10)
+			os.Remove(path)
+		}(fname)
+	} else {
+		f.ServeJson("没有数据")
+	}
+}

+ 37 - 33
src/front/project.go

@@ -260,42 +260,46 @@ func (f *Front) ProjectTaskList() {
 		f.ServeJson(map[string]interface{}{"draw": draw, "data": *list, "recordsFiltered": count, "recordsTotal": count})
 	} else {
 		project, _ := util.Mgo.FindById(util.PROJECTCOLLNAME, projectid, map[string]interface{}{"s_sourceinfo": 1})
-		sourceinfo := qu.ObjToString((*project)["s_sourceinfo"]) //数据源表
-		qu.Debug(sourceinfo)
-		okAllDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": false})                           //达标数据总量
-		okIsGiveDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": false, "b_isgivegroup": true}) //达标数据已分发量
-		okNotGiveDataNum := okAllDataNum - okIsGiveDataNum                                                                 //达标待分发量
-		okIsTagDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": false, "b_istag": true})        //达标已标注量
+		if project != nil && len(*project) > 0 {
+			sourceinfo := qu.ObjToString((*project)["s_sourceinfo"]) //数据源表
+			qu.Debug(sourceinfo)
+			okAllDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": false})                           //达标数据总量
+			okIsGiveDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": false, "b_isgivegroup": true}) //达标数据已分发量
+			okNotGiveDataNum := okAllDataNum - okIsGiveDataNum                                                                 //达标待分发量
+			okIsTagDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": false, "b_istag": true})        //达标已标注量
 
-		IsNoOkAllDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": true})                           //未达标数据总量
-		IsNoOkIsGiveDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": true, "b_isgivegroup": true}) //未达标数据已分发量
-		IsNotOkNotGiveDataNum := IsNoOkAllDataNum - IsNoOkIsGiveDataNum                                                       //未达标待分发量
-		IsNotOkIsTagDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": true, "b_istag": true})       //未达标已标注量
+			IsNoOkAllDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": true})                           //未达标数据总量
+			IsNoOkIsGiveDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": true, "b_isgivegroup": true}) //未达标数据已分发量
+			IsNotOkNotGiveDataNum := IsNoOkAllDataNum - IsNoOkIsGiveDataNum                                                       //未达标待分发量
+			IsNotOkIsTagDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": true, "b_istag": true})       //未达标已标注量
 
-		allGiveDataNum := okIsGiveDataNum + IsNoOkIsGiveDataNum      //总分发量
-		allNoGiveDataNum := okNotGiveDataNum + IsNotOkNotGiveDataNum //总待分发量
-		allIsTagDataNum := okIsTagDataNum + IsNotOkIsTagDataNum      //已标注总量
-		allDataNum := allGiveDataNum + allNoGiveDataNum
-		qu.Debug("数据总量:", allDataNum, "已分发总量:", allGiveDataNum, "待分发总量:", allNoGiveDataNum, "已标注总量:", allIsTagDataNum)
-		qu.Debug("达标量:", okAllDataNum, "达标已分发量:", okIsGiveDataNum, "达标待分发量:", okNotGiveDataNum, "达标已标注量:", okIsTagDataNum)
-		qu.Debug(" 未达标量:", IsNoOkAllDataNum, " 未达标已分发量:", IsNoOkIsGiveDataNum, " 未达标待分发量:", IsNotOkNotGiveDataNum, " 未达标已标注量:", IsNotOkIsTagDataNum)
-		f.T["s_projectid"] = projectid
-		f.T["s_sourceinfo"] = sourceinfo
-		f.T["allDataNum"] = allDataNum
-		f.T["okAllDataNum"] = okAllDataNum
-		f.T["okIsGiveDataNum"] = okIsGiveDataNum
-		f.T["okNotGiveDataNum"] = okNotGiveDataNum
-		f.T["IsNoOkAllDataNum"] = IsNoOkAllDataNum
-		f.T["IsNoOkIsGiveDataNum"] = IsNoOkIsGiveDataNum
-		f.T["IsNotOkNotGiveDataNum"] = IsNotOkNotGiveDataNum
-		f.T["allGiveDataNum"] = allGiveDataNum
-		f.T["allNoGiveDataNum"] = allNoGiveDataNum
-		f.T["allIsTagDataNum"] = allIsTagDataNum
-		f.T["okIsTagDataNum"] = okIsTagDataNum
-		f.T["IsNotOkIsTagDataNum"] = IsNotOkIsTagDataNum
-		_ = f.Render("project/project_clear.html", &f.T)
+			allGiveDataNum := okIsGiveDataNum + IsNoOkIsGiveDataNum      //总分发量
+			allNoGiveDataNum := okNotGiveDataNum + IsNotOkNotGiveDataNum //总待分发量
+			allIsTagDataNum := okIsTagDataNum + IsNotOkIsTagDataNum      //已标注总量
+			allDataNum := allGiveDataNum + allNoGiveDataNum
+			qu.Debug("数据总量:", allDataNum, "已分发总量:", allGiveDataNum, "待分发总量:", allNoGiveDataNum, "已标注总量:", allIsTagDataNum)
+			qu.Debug("达标量:", okAllDataNum, "达标已分发量:", okIsGiveDataNum, "达标待分发量:", okNotGiveDataNum, "达标已标注量:", okIsTagDataNum)
+			qu.Debug(" 未达标量:", IsNoOkAllDataNum, " 未达标已分发量:", IsNoOkIsGiveDataNum, " 未达标待分发量:", IsNotOkNotGiveDataNum, " 未达标已标注量:", IsNotOkIsTagDataNum)
+			f.T["s_projectid"] = projectid
+			f.T["s_sourceinfo"] = sourceinfo
+			f.T["allDataNum"] = allDataNum
+			f.T["okAllDataNum"] = okAllDataNum
+			f.T["okIsGiveDataNum"] = okIsGiveDataNum
+			f.T["okNotGiveDataNum"] = okNotGiveDataNum
+			f.T["IsNoOkAllDataNum"] = IsNoOkAllDataNum
+			f.T["IsNoOkIsGiveDataNum"] = IsNoOkIsGiveDataNum
+			f.T["IsNotOkNotGiveDataNum"] = IsNotOkNotGiveDataNum
+			f.T["allGiveDataNum"] = allGiveDataNum
+			f.T["allNoGiveDataNum"] = allNoGiveDataNum
+			f.T["allIsTagDataNum"] = allIsTagDataNum
+			f.T["okIsTagDataNum"] = okIsTagDataNum
+			f.T["IsNotOkIsTagDataNum"] = IsNotOkIsTagDataNum
+			_ = f.Render("project/project_clear.html", &f.T)
+		} else {
+			qu.Debug("Project Find Error")
+			f.ServeJson("查询项目失败")
+		}
 	}
-
 }
 
 // ProjectTaskSave 用户组任务分发

BIN
src/web/model/taskexportmodel.xlsx