maxiaoshan 3 years ago
parent
commit
e0e35a54ed
2 changed files with 158 additions and 6 deletions
  1. 2 1
      src/front/front.go
  2. 156 5
      src/front/mark.go

+ 2 - 1
src/front/front.go

@@ -81,7 +81,8 @@ type Front struct {
 	groupUserTaskList    xweb.Mapper `xweb:"/front/group/user/task/list"`  //用户组下用户任务列表
 
 	//mark
-	dataMark xweb.Mapper `xweb:"/front/data/mark"` //数据标注
+	userDataMark   xweb.Mapper `xweb:"/front/data/user/mark"`   //标注人员数据标注
+	jyUserDataMark xweb.Mapper `xweb:"/front/data/jyuser/mark"` //剑鱼管理人员数据标注
 
 	//check
 	remarkList   xweb.Mapper `xweb:"/front/user/remark/list"`

+ 156 - 5
src/front/mark.go

@@ -88,8 +88,8 @@ func (f *Front) JyMarkList() {
 	}
 }
 
-// DataMark 数据标注
-func (f *Front) DataMark() {
+// UserDataMark 标注人员数据标注(基于任务的标注)
+func (f *Front) UserDataMark() {
 	qu.Debug("------------------")
 	defer qu.Catch()
 	success := false
@@ -246,9 +246,160 @@ func (f *Front) DataMark() {
 	}, false, false)
 	qu.Debug("Update UserTask:", b)
 	//4、保存标注日志
-	b = SaveLog(infoId, userTaskId, username, userid, "标注", baseInfo, allTagFields, *userTask)
+	b = SaveLog(infoId, userTaskId, username, userid, qu.ObjToString((*userTask)["s_projectname"]), "标注", baseInfo, allTagFields)
 	qu.Debug("Save Log:", b)
+	f.ServeJson(map[string]interface{}{"success": success, "msg": msg})
+}
 
+// JyUserDataMark 剑鱼管理人员数据标注
+func (f *Front) JyUserDataMark() {
+	defer qu.Catch()
+	success := false
+	msg := ""
+	user := f.GetSession("user").(map[string]interface{})
+	username := qu.ObjToString(user["s_login"]) //当前登录用户
+	groupId := qu.ObjToString(user["s_groupid"])
+	userId := qu.ObjToString(user["id"])
+	userid := qu.ObjToString(user["id"]) //当前登录用户标识
+	obj := []map[string]interface{}{}
+	infoId := f.GetString("s_infoid")
+	sourceInfo := f.GetString("s_sourceinfo")
+	pid := f.GetString("pid")
+	qu.Debug("Data ID:", infoId)
+	data := f.GetString("data")
+	err := json.Unmarshal([]byte(data), &obj)
+	if err != nil {
+		qu.Debug("Json Unmarshal Error")
+		f.ServeJson(map[string]interface{}{"success": success, "msg": "解析数据失败"})
+		return
+	}
+	tagSet := map[string]interface{}{}    //被标注字段状态
+	baseSet := map[string]interface{}{}   //要修改的字段信息
+	baseUnset := map[string]interface{}{} //要删除的字段信息
+	if len(obj) == 1 {                    //单独保存某个一级
+		content, ok := obj[0]["content"].([]interface{})
+		if !ok || len(content) == 0 {
+			f.ServeJson(map[string]interface{}{"success": success, "msg": "解析数据失败"})
+			return
+		}
+		title := qu.ObjToString(obj[0]["title"])
+		istag, _ := obj[0]["checkAllTag"].(bool)
+		status := qu.IntAll(obj[0]["status"])
+		switch title {
+		case "基本字段":
+			MarkBase(content, tagSet, baseSet, baseUnset)
+		case "时间地点":
+			MarkTimePlace(content, tagSet, baseSet, baseUnset)
+		case "标的信息":
+			MarkPurchasinglist(content, tagSet, baseSet, baseUnset, istag, status)
+		case "多包信息":
+			MarkPackage(content, tagSet, baseSet, baseUnset, status)
+		case "中标候选人信息":
+			MarkWonderorder(content, tagSet, baseSet, baseUnset, status)
+		case "其余信息":
+			MarkOther(content, tagSet, baseSet, baseUnset)
+		}
+	} else {
+		for j, val := range obj {
+			content, ok := val["content"].([]interface{})
+			status := qu.IntAll(val["status"])
+			if !ok {
+				qu.Debug("Content Error")
+				continue
+			}
+			istag, _ := val["checkAllTag"].(bool)
+			if j == 0 { //基本信息
+				MarkBase(content, tagSet, baseSet, baseUnset)
+			} else if j == 1 { //时间地点
+				MarkTimePlace(content, tagSet, baseSet, baseUnset)
+			} else if j == 2 { //标的物
+				MarkPurchasinglist(content, tagSet, baseSet, baseUnset, istag, status)
+			} else if j == 3 { //多包
+				MarkPackage(content, tagSet, baseSet, baseUnset, status)
+			} else if j == 4 { //候选人
+				MarkWonderorder(content, tagSet, baseSet, baseUnset, status)
+			} else { //其余信息
+				MarkOther(content, tagSet, baseSet, baseUnset)
+			}
+		}
+	}
+	dataInfo, _ := util.Mgo.FindById(sourceInfo, infoId, map[string]interface{}{"v_baseinfo": 1, "v_taginfo": 1}) //查询标注保存前的原始信息
+	tagInfo, _ := (*dataInfo)["v_taginfo"].(map[string]interface{})
+	baseInfo, _ := (*dataInfo)["v_baseinfo"].(map[string]interface{})
+	if tagInfo != nil && len(tagInfo) > 0 {
+		for field, tmpStatus := range tagSet { //比对本次标注信息和历史标注信息
+			status := qu.IntAll(tmpStatus)            //此次被标注字段的状态
+			markedStatus := qu.IntAll(tagInfo[field]) //历史标注状态
+			if status == 1 && markedStatus != 0 {     //此次标注结果为正确,且有历史标注记录,不做修改
+				qu.Debug("已标注字段field---", field)
+				delete(tagSet, field)
+				delete(baseSet, field)
+				//continue
+			}
+			//else {
+			//	qu.Debug("未标注字段field---", field, status)
+			//}
+		}
+	}
+	//
+	allTagFields := map[string]interface{}{} //记录此此标注所有标注信息,用于日志记录
+	for k, _ := range tagSet {
+		allTagFields[k] = true
+	}
+	for k, v := range baseSet {
+		allTagFields[k] = v
+	}
+	for k, _ := range baseUnset {
+		allTagFields[k] = nil
+	}
+	qu.Debug("allTagFields===", allTagFields)
+	qu.Debug("tagSet===", tagSet)
+	if len(tagSet) > 0 || baseInfo["purchasinglist_alltag"] != nil { //purchasinglist_alltag特殊处理
+		//1、更新数据源信息
+		setResult := map[string]interface{}{ //更新字段集
+			"i_updatetime":  time.Now().Unix(),
+			"i_ckdata":      2,
+			"b_istag":       true,
+			"s_userid":      userId,
+			"s_groupid":     groupId,
+			"b_isgiveuser":  true,
+			"b_isgivegroup": true,
+		}
+		for field, val := range tagSet { //更新标注字段
+			setResult["v_taginfo."+field] = val
+		}
+		for field, val := range baseSet { //更新基本字段
+			setResult["v_baseinfo."+field] = val
+		}
+		baseUnsetResult := map[string]interface{}{} //删除字段集
+		for field, _ := range baseUnset {           //删除基本字段
+			baseUnsetResult["v_baseinfo."+field] = ""
+		}
+		set := map[string]interface{}{
+			"$set": setResult,
+		}
+		if len(baseUnsetResult) > 0 {
+			set["$unset"] = baseUnsetResult
+		}
+		qu.Debug("set---", set)
+		success = util.Mgo.UpdateById(sourceInfo, infoId, set)
+		//2、更新marked表
+		tmp, _ := util.Mgo.FindById(sourceInfo, infoId, map[string]interface{}{"v_baseinfo": 1, "v_taginfo": 1, "i_ckdata": 1})
+		qu.Debug("infoId:", infoId)
+		delete((*tmp), "_id")
+		(*tmp)["updatetime"] = time.Now().Unix()
+		b := util.Mgo.Update(util.AllToColl, map[string]interface{}{"_id": mongodb.StringTOBsonId(infoId)}, map[string]interface{}{"$set": tmp}, true, false)
+		qu.Debug("Update Marked:", b)
+	}
+	/*
+		} else {
+			表示页面标注时未做修改标注
+		}
+	*/
+	//3、保存标注日志
+	project, _ := util.Mgo.FindById(util.PROJECTCOLLNAME, pid, map[string]interface{}{"s_name": 1})
+	b := SaveLog(infoId, "", username, userid, qu.ObjToString((*project)["s_name"]), "标注", baseInfo, allTagFields)
+	qu.Debug("Save Log:", b)
 	f.ServeJson(map[string]interface{}{"success": success, "msg": msg})
 }
 
@@ -584,7 +735,7 @@ func MarkOther(content []interface{}, tagSet, baseSet, baseUnset map[string]inte
 }
 
 // SaveLog 标注日志保存
-func SaveLog(s_infoid, s_usertaskid, username, userid, s_stype string, baseInfo, allTagFields, userTask map[string]interface{}) (success bool) {
+func SaveLog(s_infoid, s_usertaskid, username, userid, projectname, s_stype string, baseInfo, allTagFields map[string]interface{}) (success bool) {
 	defer qu.Debug()
 	v_before := map[string]interface{}{}
 	for f, v := range allTagFields {
@@ -594,7 +745,7 @@ func SaveLog(s_infoid, s_usertaskid, username, userid, s_stype string, baseInfo,
 		v_before[f] = baseInfo[f]
 	}
 	save := map[string]interface{}{
-		"s_projectname": qu.ObjToString(userTask["s_projectname"]),
+		"s_projectname": projectname,
 		"s_taskid":      s_usertaskid,
 		"s_infoid":      s_infoid,
 		"s_stype":       s_stype,