|
@@ -6,11 +6,11 @@ import (
|
|
|
"github.com/tealeg/xlsx"
|
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
|
"io/ioutil"
|
|
|
- "math"
|
|
|
"mime/multipart"
|
|
|
"mongodb"
|
|
|
qu "qfw/util"
|
|
|
"sort"
|
|
|
+ "strconv"
|
|
|
"strings"
|
|
|
"sync"
|
|
|
"sync/atomic"
|
|
@@ -66,7 +66,7 @@ func (f *Front) ProjectSave() {
|
|
|
importDataNum := 0 //查询数量
|
|
|
var s_rulename []string //规则
|
|
|
user := f.GetSession("user").(map[string]interface{})
|
|
|
- username := qu.ObjToString(user["s_name"]) //当前登录用户
|
|
|
+ username := qu.ObjToString(user["s_login"]) //当前登录用户
|
|
|
stype := f.GetString("s_type") //新建项目类型:数据库导入、excel导入
|
|
|
s_sourceinfoTmp := f.GetString("s_sourceinfo") //数据表
|
|
|
s_sourceinfo := "f_sourceinfo_" + s_sourceinfoTmp
|
|
@@ -98,17 +98,17 @@ func (f *Front) ProjectSave() {
|
|
|
}
|
|
|
//保存项目信息
|
|
|
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_sourcetaskinfo": "s_sourcetaskinfo_" + s_sourceinfoTmp, //源数据表
|
|
|
- "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_createname": username, //创建人
|
|
|
+ "s_status": "未开始", //项目状态
|
|
|
+ "i_createtime": time.Now().Unix(), //创建时间
|
|
|
+ "s_importtype": "excel", //导入类型
|
|
|
+ "b_isassessment": false, //是否进行了质量评估
|
|
|
}
|
|
|
} else if stype == "coll" { //数据库导入
|
|
|
historyid := f.GetString("s_historyid")
|
|
@@ -120,17 +120,18 @@ func (f *Front) ProjectSave() {
|
|
|
qu.Debug(s_departname, s_entname, s_rulename, importDataNum)
|
|
|
//保存项目信息
|
|
|
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": "coll", //导入类型
|
|
|
- "s_historyid": historyid, //源数据集标识
|
|
|
+ "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": "coll", //导入类型
|
|
|
+ "s_historyid": historyid, //源数据集标识
|
|
|
+ "b_isassessment": false, //是否进行了质量评估
|
|
|
}
|
|
|
} else if stype == "edit" { //编辑保存
|
|
|
success = true
|
|
@@ -143,7 +144,7 @@ func (f *Front) ProjectSave() {
|
|
|
v_fields := map[string]interface{}{}
|
|
|
if err := json.Unmarshal([]byte(fields), &v_fields); err != nil {
|
|
|
qu.Debug("V_Filelds Unmarshal Failed:", err)
|
|
|
- f.ServeJson(map[string]interface{}{"success": false})
|
|
|
+ f.ServeJson(map[string]interface{}{"success": false, "msg": err})
|
|
|
return
|
|
|
}
|
|
|
set = map[string]interface{}{
|
|
@@ -165,7 +166,7 @@ func (f *Front) ProjectSave() {
|
|
|
if !success { //保存项目失败
|
|
|
msg = "新建项目失败\n" + msg
|
|
|
} else {
|
|
|
- msg = "新建项目成功\n" + msg
|
|
|
+ msg = "保存项目成功"
|
|
|
}
|
|
|
}
|
|
|
qu.Debug("Create Project:", success, "importnum:", importDataNum, "successnum:", successNum, "failnum:", int64(importDataNum)-successNum)
|
|
@@ -178,6 +179,45 @@ func (f *Front) ProjectSave() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+// ProjectQualityAssessment 数据质量评估
|
|
|
+func (f *Front) ProjectQualityAssessment() {
|
|
|
+ defer qu.Catch()
|
|
|
+ msg := ""
|
|
|
+ success := false
|
|
|
+ //质量评估
|
|
|
+ projectid := f.GetString("pid") //项目id
|
|
|
+ qu.Debug("Project Id:", projectid)
|
|
|
+ project, _ := util.Mgo.FindById(util.PROJECTCOLLNAME, projectid, map[string]interface{}{"b_isassessment": 1, "s_sourceinfo": 1, "v_fields": 1})
|
|
|
+ if project != nil && len(*project) > 0 {
|
|
|
+ if isAssessment, ok := (*project)["b_isassessment"].(bool); ok && !isAssessment {
|
|
|
+ if fields, ok := (*project)["v_fields"].(map[string]interface{}); ok && len(fields) > 0 {
|
|
|
+ var fieldsArr []string
|
|
|
+ for f, _ := range fields {
|
|
|
+ fieldsArr = append(fieldsArr, f)
|
|
|
+ }
|
|
|
+ sourceinfo := qu.ObjToString((*project)["s_sourceinfo"])
|
|
|
+ success = QuaFieldScore(fieldsArr, sourceinfo) //调用数据质量评估接口
|
|
|
+ if success {
|
|
|
+ //点击清洗更新项目状态为进行中
|
|
|
+ b := util.Mgo.UpdateById(util.PROJECTCOLLNAME, projectid, map[string]interface{}{"$set": map[string]interface{}{"b_isassessment": true, "s_status": "进行中", "i_starttime": time.Now().Unix()}})
|
|
|
+ qu.Debug("Update Porject:"+projectid+" Status Success:", b)
|
|
|
+ } else {
|
|
|
+ msg = "质量评估失败"
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ msg = "项目标注字段查询失败"
|
|
|
+ }
|
|
|
+ } else if ok && isAssessment {
|
|
|
+ success = true
|
|
|
+ } else {
|
|
|
+ msg = "查询项目失败"
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ msg = "查询项目失败"
|
|
|
+ }
|
|
|
+ f.ServeJson(map[string]interface{}{"success": success, "msg": msg})
|
|
|
+}
|
|
|
+
|
|
|
// ProjectTaskList 用户组任务分发列表
|
|
|
func (f *Front) ProjectTaskList() {
|
|
|
defer qu.Catch()
|
|
@@ -202,15 +242,20 @@ func (f *Front) ProjectTaskList() {
|
|
|
map[string]interface{}{"s_groupname": map[string]interface{}{"$regex": search}},
|
|
|
}
|
|
|
}
|
|
|
- list, _ := util.Mgo.Find(util.TASKCOLLNAME, query, nil, nil, false, start, limit)
|
|
|
+ qu.Debug("Query:", query)
|
|
|
+ list, _ := util.Mgo.Find(util.TASKCOLLNAME, query, map[string]interface{}{"_id": -1}, nil, false, start, limit)
|
|
|
count := util.Mgo.Count(util.TASKCOLLNAME, query)
|
|
|
for _, l := range *list {
|
|
|
if status := qu.ObjToString(l["s_status"]); status == "进行中" { //更新任务进度
|
|
|
- groupId := qu.ObjToString(l["s_groupid"])
|
|
|
+ //groupId := qu.ObjToString(l["s_groupid"])
|
|
|
+ groupTaskId := mongodb.BsonIdToSId(l["_id"])
|
|
|
giveNum := qu.IntAll(l["i_givenum"])
|
|
|
sourceinfo := qu.ObjToString(l["s_sourceinfo"])
|
|
|
- tagNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_groupid": groupId, "b_istag": true})
|
|
|
- progress := fmt.Sprint(math.Ceil(float64(tagNum)/float64(giveNum))) + "%"
|
|
|
+ //tagNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_isgivegroup": true, "s_grouptaskid": groupTaskId, "b_istag": true})
|
|
|
+ tagNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": groupTaskId, "b_istag": true})
|
|
|
+ progressFloat := float64(tagNum) / float64(giveNum)
|
|
|
+ value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", progressFloat), 64)
|
|
|
+ progress := fmt.Sprint(value*100) + "%"
|
|
|
l["s_progress"] = progress
|
|
|
//同步数据库
|
|
|
util.Mgo.UpdateById(util.TASKCOLLNAME, l["_id"], map[string]interface{}{"$set": map[string]interface{}{"s_progress": progress}})
|
|
@@ -218,51 +263,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_status": 1, "s_sourceinfo": 1})
|
|
|
+ project, _ := util.Mgo.FindById(util.PROJECTCOLLNAME, projectid, map[string]interface{}{"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)
|
|
|
- }
|
|
|
- }
|
|
|
- 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}) //达标已标注量
|
|
|
+ sourceinfo := qu.ObjToString((*project)["s_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 用户组任务分发
|
|
@@ -276,22 +316,21 @@ 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") //项目标识
|
|
|
+ username := qu.ObjToString(user["s_login"]) //当前登录用户
|
|
|
+ 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"]) //任务日志表
|
|
|
+ projectname := qu.ObjToString((*project)["s_name"]) //项目名称
|
|
|
+ sourceinfo := qu.ObjToString((*project)["s_sourceinfo"]) //源数据表
|
|
|
group := f.GetString("s_group")
|
|
|
qu.Debug(group)
|
|
|
stype := f.GetString("s_type")
|
|
|
- qu.Debug("项目id:", projectid, " 项目名称:", projectname, "sourcetaskinfo:", sourcetaskinfo)
|
|
|
+ qu.Debug("项目id:", projectid, " 项目名称:", projectname)
|
|
|
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标注记录中删除
|
|
|
+ qu.Debug("用户组信息:", groupArr, stype)
|
|
|
+ if stype != "tag" { //如果分发的是达标数据或者全部数据且进行了初步质检,将没有质检记录的字段从v_taginfo标注记录中删除
|
|
|
DeleleDataTagInfo(sourceinfo)
|
|
|
}
|
|
|
for _, groupInfo := range groupArr {
|
|
@@ -307,24 +346,23 @@ 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", //任务类型
|
|
|
- "s_entname": qu.ObjToString((*project)["s_entname"]), //公司名称
|
|
|
- "s_departname": qu.ObjToString((*project)["s_departname"]), //部门名称
|
|
|
- "s_rulename": qu.ObjToString((*project)["s_rulename"]), //规则名称
|
|
|
+ "_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_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)
|
|
|
}
|
|
@@ -347,7 +385,9 @@ func (f *Front) ProjectTaskSave() {
|
|
|
success = util.Mgo.SaveBulk(util.TASKCOLLNAME, taskArr...)
|
|
|
if success {
|
|
|
msg = "任务分发成功"
|
|
|
- UpdateSourceinfo(sourceinfo, sourcetaskinfo, stype, groupIdTask) //用户组分发任务成功后,给数据源打上用户组标识,同时生成任务临时表
|
|
|
+ UpdateSourceinfo(sourceinfo, stype, groupIdTask) //用户组分发任务成功后,给数据源打上用户组标识,同时生成任务临时表
|
|
|
+ } else {
|
|
|
+ msg = "任务分发失败"
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -366,10 +406,15 @@ func (f *Front) ProjectGetEntnameList() {
|
|
|
},
|
|
|
}
|
|
|
list, _ := util.MgoJy.Find(util.JyUser, query, nil, map[string]interface{}{"username": 1}, false, -1, -1)
|
|
|
- for _, l := range *list {
|
|
|
- entnameList = append(entnameList, qu.ObjToString(l["username"]))
|
|
|
+ if len(*list) > 0 {
|
|
|
+ for _, l := range *list {
|
|
|
+ entnameList = append(entnameList, qu.ObjToString(l["username"]))
|
|
|
+ }
|
|
|
+ f.ServeJson(map[string]interface{}{"entname": entnameList})
|
|
|
+ } else {
|
|
|
+ f.ServeJson(map[string]interface{}{"entname": []string{}})
|
|
|
}
|
|
|
- f.ServeJson(map[string]interface{}{"entname": entnameList})
|
|
|
+
|
|
|
}
|
|
|
|
|
|
// ProjectTaskRepulse 用户组任务打回
|
|
@@ -379,153 +424,195 @@ func (f *Front) ProjectTaskRepulse() {
|
|
|
success := false
|
|
|
msg := ""
|
|
|
user := f.GetSession("user").(map[string]interface{})
|
|
|
- username := qu.ObjToString(user["s_name"])
|
|
|
- status := f.GetString("s_status")
|
|
|
- taskId := f.GetString("id")
|
|
|
- groupId := f.GetString("s_groupid")
|
|
|
+ username := qu.ObjToString(user["s_login"])
|
|
|
+ //status := f.GetString("s_status")
|
|
|
+ groupTaskId := f.GetString("taskid")
|
|
|
sourceinfo := f.GetString("s_sourceinfo")
|
|
|
- sourcetaskinfo := f.GetString("s_sourcetaskinfo")
|
|
|
- if status == "已完成" {
|
|
|
- //更新数据状态
|
|
|
- //1、更新源数据表
|
|
|
- success1 := util.Mgo.Update(sourceinfo, map[string]interface{}{"s_groupid": groupId}, map[string]interface{}{
|
|
|
+ //更新数据源
|
|
|
+ success = util.Mgo.Update(sourceinfo, map[string]interface{}{"s_grouptaskid": groupTaskId}, map[string]interface{}{
|
|
|
+ "$set": map[string]interface{}{
|
|
|
+ "b_istag": false,
|
|
|
+ "b_isgiveuser": false,
|
|
|
+ "i_updatetime": time.Now().Unix(),
|
|
|
+ },
|
|
|
+ "$unset": map[string]interface{}{
|
|
|
+ "s_userid": "",
|
|
|
+ "s_usertaskid": "",
|
|
|
+ },
|
|
|
+ }, false, true)
|
|
|
+ if success {
|
|
|
+ //更新用户组任务 清除最迟完成时间,更新任务状态
|
|
|
+ success = util.Mgo.UpdateById(util.TASKCOLLNAME, groupTaskId, map[string]interface{}{
|
|
|
"$set": map[string]interface{}{
|
|
|
- "b_istag": false,
|
|
|
- "i_updatetime": time.Now().Unix(),
|
|
|
+ "s_status": "未开始",
|
|
|
+ "s_updateperson": username,
|
|
|
+ "i_updatetime": time.Now().Unix(),
|
|
|
+ "s_progress": "0%",
|
|
|
},
|
|
|
"$unset": map[string]interface{}{
|
|
|
- "s_userid": "",
|
|
|
+ "i_completetime": "",
|
|
|
},
|
|
|
- }, false, true)
|
|
|
- //2、删除临时任务表中对应数据
|
|
|
- success2 := util.Mgo.Del(sourcetaskinfo, map[string]interface{}{"s_groupid": groupId})
|
|
|
- if success1 && success2 {
|
|
|
- //清除最迟完成时间,更新任务状态
|
|
|
- success = util.Mgo.UpdateById(util.TASKCOLLNAME, taskId, map[string]interface{}{
|
|
|
- "$set": map[string]interface{}{
|
|
|
- "s_status": "未开始",
|
|
|
- "s_updateperson": username,
|
|
|
- "i_updatetime": time.Now().Unix(),
|
|
|
- "s_progress": "0%",
|
|
|
- },
|
|
|
- "$unset": map[string]interface{}{
|
|
|
- "i_completetime": "",
|
|
|
- },
|
|
|
- })
|
|
|
- if !success {
|
|
|
- msg += "更新任务:" + taskId + "失败"
|
|
|
- }
|
|
|
- } else {
|
|
|
- qu.Debug("Update "+sourceinfo+":", success1, " Delete "+sourcetaskinfo+":", success2)
|
|
|
- if !success1 {
|
|
|
- msg += "更新" + sourceinfo + "数据失败;"
|
|
|
- }
|
|
|
- if !success2 {
|
|
|
- msg += "删除" + sourcetaskinfo + "数据失败;"
|
|
|
- }
|
|
|
+ })
|
|
|
+ if !success {
|
|
|
+ msg = "更新用户组任务失败"
|
|
|
}
|
|
|
+ } else {
|
|
|
+ msg = "更新数据源信息失败"
|
|
|
}
|
|
|
qu.Debug("Task Repulse:", success, " Msg:", msg)
|
|
|
f.ServeJson(map[string]interface{}{"success": success, "msg": msg})
|
|
|
}
|
|
|
|
|
|
// ProjectTaskRetrieve 用户组任务收回
|
|
|
-// TODO 关联用户组下所有用户任务的收回
|
|
|
func (f *Front) ProjectTaskRetrieve() {
|
|
|
defer qu.Catch()
|
|
|
- success := false
|
|
|
- msg := ""
|
|
|
- num := 0
|
|
|
user := f.GetSession("user").(map[string]interface{})
|
|
|
- username := qu.ObjToString(user["s_name"])
|
|
|
- status := f.GetString("s_status")
|
|
|
- taskId := f.GetString("id")
|
|
|
- groupId := f.GetString("s_groupid")
|
|
|
- sourceinfo := f.GetString("s_sourceinfo")
|
|
|
- sourcetaskinfo := f.GetString("s_sourcetaskinfo")
|
|
|
- if status == "已完成" {
|
|
|
- count1 := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_groupid": groupId, "b_istag": false})
|
|
|
- count2 := util.Mgo.Count(sourcetaskinfo, map[string]interface{}{"s_groupid": groupId, "b_iscomplete": false})
|
|
|
- if count1 != count2 { //数据源表和临时表数量不一致
|
|
|
- qu.Debug("Count Is Not Same:", sourceinfo+":", count1, sourceinfo+":", count2)
|
|
|
- }
|
|
|
- num = count1
|
|
|
- if count1 == 0 { //收回数据量为0
|
|
|
- success = true
|
|
|
- //更新任务状态、完成时间
|
|
|
- success = util.Mgo.UpdateById(util.TASKCOLLNAME, taskId, map[string]interface{}{
|
|
|
- "$set": map[string]interface{}{
|
|
|
- "s_status": "已完成",
|
|
|
- "s_updateperson": username,
|
|
|
- "i_updatetime": time.Now().Unix(),
|
|
|
- "i_completetime": time.Now().Unix(),
|
|
|
- "s_progress": "100%",
|
|
|
- },
|
|
|
- })
|
|
|
- if !success {
|
|
|
- msg += "更新任务:" + taskId + "失败"
|
|
|
- }
|
|
|
- } else {
|
|
|
- //1、更新源数据表
|
|
|
- success1 := util.Mgo.Update(sourceinfo, map[string]interface{}{"s_groupid": groupId, "b_istag": false}, map[string]interface{}{
|
|
|
- "$set": map[string]interface{}{
|
|
|
- "b_isgivegroup": false,
|
|
|
- "i_updatetime": time.Now().Unix(),
|
|
|
- },
|
|
|
- "$unset": map[string]interface{}{
|
|
|
- "s_groupid": "",
|
|
|
- },
|
|
|
- }, false, true)
|
|
|
- //2、删除临时任务表中对应未完成数据
|
|
|
- success2 := util.Mgo.Del(sourcetaskinfo, map[string]interface{}{"s_groupid": groupId, "b_iscomplete": false})
|
|
|
- if success1 && success2 {
|
|
|
- //更新任务状态、完成时间
|
|
|
- success = util.Mgo.UpdateById(util.TASKCOLLNAME, taskId, map[string]interface{}{
|
|
|
- "$set": map[string]interface{}{
|
|
|
- "s_status": "已完成",
|
|
|
- "s_updateperson": username,
|
|
|
- "i_updatetime": time.Now().Unix(),
|
|
|
- "i_completetime": time.Now().Unix(),
|
|
|
- },
|
|
|
- })
|
|
|
- if !success {
|
|
|
- msg += "更新任务:" + taskId + "失败"
|
|
|
- }
|
|
|
- } else {
|
|
|
- qu.Debug("Update "+sourceinfo+":", success1, " Delete "+sourcetaskinfo+":", success2)
|
|
|
- if !success1 {
|
|
|
- msg += "更新" + sourceinfo + "数据失败;"
|
|
|
+ username := qu.ObjToString(user["s_login"])
|
|
|
+ groupTaskId := f.GetString("taskid")
|
|
|
+ sourceInfo := f.GetString("s_sourceinfo")
|
|
|
+ status := f.GetString("s_status") //未开始、进行中
|
|
|
+ //giveNum, _ := f.GetInteger("i_givenum") //收回时要更新的分发数据量
|
|
|
+ msg := ""
|
|
|
+ success := false
|
|
|
+ count := 0
|
|
|
+ if status == "未开始" { //未开始的用户组任务,暂未给用户分发任务
|
|
|
+ success = true
|
|
|
+ } else { //进行中的用户组任务需更新其下用户信息
|
|
|
+ groupTask, _ := util.Mgo.FindById(util.TASKCOLLNAME, groupTaskId, map[string]interface{}{"v_sonids": 1})
|
|
|
+ if groupTask != nil && len(*groupTask) > 0 {
|
|
|
+ if sonIds, ok := (*groupTask)["v_sonids"].([]interface{}); ok && len(sonIds) > 0 { //更新所有用户任务信息
|
|
|
+ userTaskIdStatus := map[string]string{} //封装要回收的用户任务信息
|
|
|
+ for _, sId := range sonIds {
|
|
|
+ userTaskId := qu.ObjToString(sId)
|
|
|
+ userTask, _ := util.Mgo.FindById(util.TASKCOLLNAME, userTaskId, map[string]interface{}{"s_status": 1})
|
|
|
+ if userTask != nil && len(*userTask) > 0 {
|
|
|
+ if statusTmp := qu.ObjToString((*userTask)["s_status"]); statusTmp != "已完成" && statusTmp != "已关闭" { //已完成和已关闭的任务不收回
|
|
|
+ userTaskIdStatus[userTaskId] = statusTmp
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ qu.Debug("Find User Task:", userTaskId, "Error")
|
|
|
+ }
|
|
|
}
|
|
|
- if !success2 {
|
|
|
- msg += "删除" + sourcetaskinfo + "数据失败;"
|
|
|
+ qu.Debug("userTaskIdStatus:", len(userTaskIdStatus))
|
|
|
+ if len(userTaskIdStatus) > 0 { //收回用户组下所有用户信息
|
|
|
+ //用户组收回时,若已有用户任务在未开始时收回或关闭,调用RetrieveTaskByUser返回的总收回量count就遗漏了用户收回或关闭任务的量
|
|
|
+ msg, _, success = RetrieveCloseTaskByUser(sourceInfo, username, userTaskIdStatus) //用户信息收回
|
|
|
+ } else { //用户组下所有用户任务都已完成
|
|
|
+ success = true
|
|
|
}
|
|
|
+ } else { //没有分配给用户任务
|
|
|
+ success = true
|
|
|
}
|
|
|
+ } else {
|
|
|
+ msg = "用户组任务查找失败"
|
|
|
}
|
|
|
}
|
|
|
- qu.Debug("Task Retrieve:", success, " num:", num, " Msg:", msg)
|
|
|
- f.ServeJson(map[string]interface{}{"success": success, "msg": msg, "num": num})
|
|
|
+ if success { //所有用户信息收回成功后,更新用户组任务相关信息
|
|
|
+ count = util.Mgo.Count(sourceInfo, map[string]interface{}{ //统计该用户组任务下未标注的数据量
|
|
|
+ "s_grouptaskid": groupTaskId,
|
|
|
+ "b_istag": false,
|
|
|
+ })
|
|
|
+ UpdateGroupTaskAndSourceInfo(groupTaskId, sourceInfo, username, status, count, &msg, &success)
|
|
|
+ }
|
|
|
+ qu.Debug(success, count, msg)
|
|
|
+ f.ServeJson(map[string]interface{}{"success": success, "msg": msg, "count": count})
|
|
|
}
|
|
|
|
|
|
// ProjectTaskClose 用户组任务关闭
|
|
|
func (f *Front) ProjectTaskClose() {
|
|
|
defer qu.Catch()
|
|
|
- success := false
|
|
|
user := f.GetSession("user").(map[string]interface{})
|
|
|
- username := qu.ObjToString(user["s_name"])
|
|
|
- status := f.GetString("s_status")
|
|
|
- taskId := f.GetString("id")
|
|
|
- if status == "已完成" {
|
|
|
- //更新任务状态
|
|
|
- success = util.Mgo.UpdateById(util.TASKCOLLNAME, taskId, map[string]interface{}{
|
|
|
- "$set": map[string]interface{}{
|
|
|
- "s_status": "已关闭",
|
|
|
- "s_updateperson": username,
|
|
|
- "i_updatetime": time.Now().Unix(),
|
|
|
- "s_progress": "100%",
|
|
|
- },
|
|
|
+ username := qu.ObjToString(user["s_login"])
|
|
|
+ groupTaskId := f.GetString("taskid")
|
|
|
+ sourceInfo := f.GetString("s_sourceinfo")
|
|
|
+ status := f.GetString("s_status") //未开始、进行中
|
|
|
+ msg := ""
|
|
|
+ success := false
|
|
|
+ count := 0
|
|
|
+ if status == "未开始" { //未开始的用户组任务,暂未给用户分发任务;已完成只更新用户组任务
|
|
|
+ success = true
|
|
|
+ } else { //进行中的用户组任务需更新其下用户信息
|
|
|
+ //groupTask, _ := util.Mgo.FindById(util.TASKCOLLNAME, groupTaskId, map[string]interface{}{"v_sonids": 1})
|
|
|
+ //if groupTask != nil && len(*groupTask) > 0 {
|
|
|
+ // if sonIds, ok := (*groupTask)["v_sonids"].([]interface{}); ok && len(sonIds) > 0 { //更新所有用户任务信息
|
|
|
+ // userTaskIdStatus := map[string]string{} //封装要关闭的用户任务信息
|
|
|
+ // for _, sId := range sonIds {
|
|
|
+ // userTaskId := qu.ObjToString(sId)
|
|
|
+ // userTask, _ := util.Mgo.FindById(util.TASKCOLLNAME, userTaskId, map[string]interface{}{"s_status": 1})
|
|
|
+ // if userTask != nil && len(*userTask) > 0 {
|
|
|
+ // if statusTmp := qu.ObjToString((*userTask)["s_status"]); statusTmp == "已完成" && statusTmp != "已关闭" { //已关闭的任务不更新
|
|
|
+ // userTaskIdStatus[userTaskId] = statusTmp
|
|
|
+ // }
|
|
|
+ // } else {
|
|
|
+ // qu.Debug("Find User Task:", userTaskId, "Error")
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // if len(userTaskIdStatus) > 0 { //关闭用户组下所有用户信息
|
|
|
+ // msg, _, success = RetrieveCloseTaskByUser(sourceInfo, username, userTaskIdStatus) //用户信息收回
|
|
|
+ // } else { //用户组下所有用户任务都已关闭
|
|
|
+ // success = true
|
|
|
+ // }
|
|
|
+ // } else { //没有分配给用户任务
|
|
|
+ // success = true
|
|
|
+ // }
|
|
|
+ //} else {
|
|
|
+ // msg = "用户组任务查找失败"
|
|
|
+ //}
|
|
|
+ }
|
|
|
+ if success { //所有用户信息关闭成功后,更新用户组任务相关信息
|
|
|
+ count = util.Mgo.Count(sourceInfo, map[string]interface{}{ //统计该用户组任务下未标注的数据量
|
|
|
+ "s_grouptaskid": groupTaskId,
|
|
|
+ "b_istag": false,
|
|
|
})
|
|
|
+ UpdateGroupTaskAndSourceInfo(groupTaskId, sourceInfo, username, status, count, &msg, &success)
|
|
|
+ }
|
|
|
+ qu.Debug(success, count, msg)
|
|
|
+ f.ServeJson(map[string]interface{}{"success": success, "msg": msg, "count": count})
|
|
|
+}
|
|
|
+
|
|
|
+// UpdateGroupTaskAndSourceInfo 更新用户组任务相关信息
|
|
|
+func UpdateGroupTaskAndSourceInfo(groupTaskId, sourceInfo, username, status string, count int, msg *string, success *bool) {
|
|
|
+ defer qu.Catch()
|
|
|
+ qu.Debug("GroupTaskStatus:", status, " Count:", count)
|
|
|
+ if count != 0 { //更新数据源
|
|
|
+ query := map[string]interface{}{
|
|
|
+ "s_grouptaskid": groupTaskId,
|
|
|
+ "b_istag": false,
|
|
|
+ }
|
|
|
+ set := map[string]interface{}{
|
|
|
+ "b_isgivegroup": false,
|
|
|
+ "i_updatetime": time.Now().Unix(),
|
|
|
+ }
|
|
|
+ unset := map[string]interface{}{
|
|
|
+ "s_groupid": "",
|
|
|
+ "s_grouptaskid": "",
|
|
|
+ }
|
|
|
+ *success = util.Mgo.Update(sourceInfo, query, map[string]interface{}{"$set": set, "$unset": unset}, false, true)
|
|
|
+ }
|
|
|
+ //更新用户组任务
|
|
|
+ if *success {
|
|
|
+ taskSet := map[string]interface{}{
|
|
|
+ "s_status": "已完成",
|
|
|
+ "s_updateperson": username,
|
|
|
+ "i_updatetime": time.Now().Unix(),
|
|
|
+ "i_completetime": time.Now().Unix(),
|
|
|
+ "s_progress": "100%",
|
|
|
+ }
|
|
|
+
|
|
|
+ if status == "未开始" {
|
|
|
+ taskSet["i_starttime"] = time.Now().Unix()
|
|
|
+ taskSet["s_status"] = "已关闭"
|
|
|
+ }
|
|
|
+ inc := map[string]interface{}{
|
|
|
+ "i_givenum": -count,
|
|
|
+ }
|
|
|
+ *success = util.Mgo.UpdateById(util.TASKCOLLNAME, groupTaskId, map[string]interface{}{"$set": taskSet, "$inc": inc})
|
|
|
+ if !*success {
|
|
|
+ *msg = "更新用户组任务失败"
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ *msg = "更新数据源信息失败"
|
|
|
}
|
|
|
- f.ServeJson(map[string]interface{}{"success": success})
|
|
|
}
|
|
|
|
|
|
// DeleleDataTagInfo 删除标注记录
|
|
@@ -561,19 +648,24 @@ func DeleleDataTagInfo(sourceinfo string) {
|
|
|
update = append(update, map[string]interface{}{"_id": tmp["_id"]})
|
|
|
tagInfo, _ := tmp["v_taginfo"].(map[string]interface{})
|
|
|
checkInfo, _ := tmp["v_check"].(map[string]interface{})
|
|
|
- if len(tagInfo) == 0 || len(checkInfo) == 0 {
|
|
|
- return
|
|
|
+ id := mongodb.BsonIdToSId(tmp["_id"])
|
|
|
+ if id == "60b99c2d72c25c51c492af6a" {
|
|
|
+ qu.Debug(tagInfo, checkInfo)
|
|
|
+ }
|
|
|
+ set := map[string]interface{}{
|
|
|
+ "b_cleartag": true,
|
|
|
}
|
|
|
- for f, _ := range tagInfo {
|
|
|
- if checkInfo[f] == nil {
|
|
|
- delete(tagInfo, f)
|
|
|
+ if len(tagInfo) != 0 && len(checkInfo) != 0 {
|
|
|
+ for f, _ := range tagInfo {
|
|
|
+ if checkInfo[f] == nil {
|
|
|
+ delete(tagInfo, f)
|
|
|
+ }
|
|
|
}
|
|
|
+ set["v_taginfo"] = tagInfo
|
|
|
}
|
|
|
+
|
|
|
update = append(update, map[string]interface{}{
|
|
|
- "$set": map[string]interface{}{
|
|
|
- "v_taginfo": tagInfo,
|
|
|
- "b_cleartag": true,
|
|
|
- },
|
|
|
+ "$set": set,
|
|
|
})
|
|
|
lock.Lock()
|
|
|
updateArr = append(updateArr, update)
|
|
@@ -597,8 +689,8 @@ func DeleleDataTagInfo(sourceinfo string) {
|
|
|
lock.Unlock()
|
|
|
}
|
|
|
|
|
|
-// UpdateSourceinfo 用户组分发任务成功后,给数据源打上用户组标识,同时生成任务临时表
|
|
|
-func UpdateSourceinfo(sourceinfo, sourcetaskinfo, stype string, groupIdInfo map[string]util.Task) {
|
|
|
+// UpdateSourceinfo 用户组分发任务成功后,给数据源打上用户组标识
|
|
|
+func UpdateSourceinfo(sourceinfo, stype string, groupIdInfo map[string]util.Task) {
|
|
|
defer qu.Catch()
|
|
|
for groupTaskId, tInfo := range groupIdInfo {
|
|
|
groupId := tInfo.UserId
|
|
@@ -617,9 +709,8 @@ func UpdateSourceinfo(sourceinfo, sourcetaskinfo, stype string, groupIdInfo map[
|
|
|
query["b_istagging"] = true
|
|
|
}
|
|
|
fields := map[string]interface{}{
|
|
|
- "title": 1,
|
|
|
+ "v_baseinfo": 1,
|
|
|
}
|
|
|
- saveArr := []map[string]interface{}{}
|
|
|
updateArr := [][]map[string]interface{}{}
|
|
|
qu.Debug("Query:", query)
|
|
|
it := sess.DB(util.Mgo.DbName).C(sourceinfo).Find(&query).Select(&fields).Limit(int64(num)).Iter()
|
|
@@ -632,37 +723,23 @@ func UpdateSourceinfo(sourceinfo, sourcetaskinfo, stype string, groupIdInfo map[
|
|
|
<-ch
|
|
|
wg.Done()
|
|
|
}()
|
|
|
- id := mongodb.BsonIdToSId(tmp["_id"])
|
|
|
- title := qu.ObjToString(tmp["title"])
|
|
|
update := []map[string]interface{}{}
|
|
|
update = append(update, map[string]interface{}{"_id": tmp["_id"]})
|
|
|
update = append(update, map[string]interface{}{
|
|
|
"$set": map[string]interface{}{
|
|
|
"s_groupid": groupId,
|
|
|
+ "s_grouptaskid": groupTaskId,
|
|
|
"b_isgivegroup": true,
|
|
|
"i_updatetime": time.Now().Unix(),
|
|
|
},
|
|
|
})
|
|
|
- save := map[string]interface{}{
|
|
|
- "s_infoid": id,
|
|
|
- "s_infotitle": title,
|
|
|
- "s_groupid": groupId,
|
|
|
- "i_createtime": time.Now().Unix(),
|
|
|
- "b_iscomplete": false,
|
|
|
- "s_grouptaskid": groupTaskId,
|
|
|
- "b_isgiveuser": false,
|
|
|
- }
|
|
|
lock.Lock()
|
|
|
updateArr = append(updateArr, update)
|
|
|
- saveArr = append(saveArr, save)
|
|
|
+ //saveArr = append(saveArr, save)
|
|
|
if len(updateArr) > 500 {
|
|
|
util.Mgo.UpdateBulk(sourceinfo, updateArr...)
|
|
|
updateArr = [][]map[string]interface{}{}
|
|
|
}
|
|
|
- if len(saveArr) > 500 {
|
|
|
- util.Mgo.SaveBulk(sourcetaskinfo, saveArr...)
|
|
|
- saveArr = []map[string]interface{}{}
|
|
|
- }
|
|
|
lock.Unlock()
|
|
|
}(tmp)
|
|
|
if n%100 == 0 {
|
|
@@ -676,10 +753,6 @@ func UpdateSourceinfo(sourceinfo, sourcetaskinfo, stype string, groupIdInfo map[
|
|
|
util.Mgo.UpdateBulk(sourceinfo, updateArr...)
|
|
|
updateArr = [][]map[string]interface{}{}
|
|
|
}
|
|
|
- if len(saveArr) > 0 {
|
|
|
- util.Mgo.SaveBulk(sourcetaskinfo, saveArr...)
|
|
|
- saveArr = []map[string]interface{}{}
|
|
|
- }
|
|
|
lock.Unlock()
|
|
|
}
|
|
|
}
|
|
@@ -960,10 +1033,10 @@ func GetDataById(idsInfo map[string]map[string]interface{}, importType, s_source
|
|
|
baseInfoMap["v_taginfo"] = tagInfoMap
|
|
|
}
|
|
|
baseInfoMap["i_createtime"] = time.Now().Unix()
|
|
|
- baseInfoMap["b_isgivegroup"] = false //是否分配
|
|
|
+ baseInfoMap["b_isgivegroup"] = false //是否分配给用户组
|
|
|
baseInfoMap["b_istag"] = false //是否已标注
|
|
|
baseInfoMap["b_cleartag"] = false //是否清理标注信息
|
|
|
-
|
|
|
+ baseInfoMap["b_isgiveuser"] = false //是否分配给用户
|
|
|
if util.Mgo.SaveByOriID(s_sourceinfo, baseInfoMap) {
|
|
|
atomic.AddInt64(successNum, 1) //保存成功计数
|
|
|
} else {
|