|
@@ -1,6 +1,7 @@
|
|
|
package front
|
|
|
|
|
|
import (
|
|
|
+ "encoding/json"
|
|
|
"fmt"
|
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
|
"math"
|
|
@@ -9,6 +10,7 @@ import (
|
|
|
"sort"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
+ "time"
|
|
|
"util"
|
|
|
)
|
|
|
|
|
@@ -583,8 +585,10 @@ func (f *Front) CheckList() {
|
|
|
|
|
|
func (f *Front) CheckData() {
|
|
|
qu.Catch()
|
|
|
+ pid := f.GetString("pid")
|
|
|
tid := f.GetString("tid")
|
|
|
sourceinfo := f.GetString("s_sourceinfo")
|
|
|
+
|
|
|
if f.Method() == "POST" {
|
|
|
start, _ := f.GetInteger("start")
|
|
|
limit, _ := f.GetInteger("length")
|
|
@@ -612,7 +616,15 @@ func (f *Front) CheckData() {
|
|
|
"recordsTotal": count,
|
|
|
})
|
|
|
} else {
|
|
|
+
|
|
|
+ task, _ := util.Mgo.FindById(util.TASKCOLLNAME, tid, map[string]interface{}{"i_givenum": 1})
|
|
|
+ tagCount := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": tid, "b_istag": true})
|
|
|
+ checkCount := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": tid, "b_check": true})
|
|
|
+ f.T["pid"] = pid
|
|
|
f.T["tid"] = tid
|
|
|
+ f.T["taskNum"] = (*task)["i_givenum"]
|
|
|
+ f.T["taskTagNum"] = tagCount
|
|
|
+ f.T["taskCheckNum"] = checkCount
|
|
|
f.T["sourceinfo"] = sourceinfo
|
|
|
_ = f.Render("project/check_data_list.html", &f.T)
|
|
|
}
|
|
@@ -663,3 +675,149 @@ func (f *Front) CheckDetail() {
|
|
|
f.T["nextid"] = GetNextDataId(did, coll) //下一条id
|
|
|
_ = f.Render("project/check_detail.html", &f.T)
|
|
|
}
|
|
|
+
|
|
|
+func (f *Front) CheckSave() {
|
|
|
+ defer qu.Catch()
|
|
|
+ success := false
|
|
|
+ msg := ""
|
|
|
+ user := f.GetSession("user").(map[string]interface{})
|
|
|
+ username := qu.ObjToString(user["s_login"]) //当前登录用户
|
|
|
+ userId := qu.ObjToString(user["id"]) //当前登录用户标识
|
|
|
+ var obj []map[string]interface{}
|
|
|
+ infoId := f.GetString("s_infoid")
|
|
|
+ sourceInfo := f.GetString("s_sourceinfo")
|
|
|
+ pid := f.GetString("pid")
|
|
|
+ qu.Debug("Data ID:", infoId)
|
|
|
+ project, _ := util.Mgo.FindById(util.PROJECTCOLLNAME, pid, map[string]interface{}{"s_name": 1, "v_fields": 1})
|
|
|
+ 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
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ 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)
|
|
|
+
|
|
|
+ // 质检时,标注标记变成质检标记
|
|
|
+ checkFields, _ := (*project)["v_fields"].(map[string]interface{})
|
|
|
+ tagSet = map[string]interface{}{}
|
|
|
+ for k := range checkFields {
|
|
|
+ tagSet[k] = true
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(tagSet) > 0 || baseInfo["purchasinglist_alltag"] != nil { //purchasinglist_alltag特殊处理
|
|
|
+ //1、更新数据源信息
|
|
|
+ setResult := map[string]interface{}{ //更新字段集
|
|
|
+ "i_updatetime": time.Now().Unix(),
|
|
|
+ "b_check": true,
|
|
|
+ "s_checkid": userId,
|
|
|
+ }
|
|
|
+ //for field, val := range tagSet { //更新质检字段
|
|
|
+ // setResult["v_taginfo."+field] = val
|
|
|
+ //}
|
|
|
+ setResult["v_checkinfo"] = tagSet
|
|
|
+ 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": mgo.StringTOBsonId(infoId)}, map[string]interface{}{"$set": tmp}, true, false)
|
|
|
+ qu.Debug("Update Marked:", b)
|
|
|
+ }
|
|
|
+ //3、保存标注日志
|
|
|
+ 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})
|
|
|
+}
|