|
@@ -17,6 +17,10 @@ import (
|
|
|
"util"
|
|
|
)
|
|
|
|
|
|
+var (
|
|
|
+ purchasingField = map[string]string{"itemname": "名称", "brandname": "品牌", "modal": "型号", "unitprice": "单价", "number": "数量"}
|
|
|
+)
|
|
|
+
|
|
|
func (f *Front) RemarkList() {
|
|
|
qu.Catch()
|
|
|
pid := qu.ObjToString(f.GetString("pid"))
|
|
@@ -659,6 +663,10 @@ func (f *Front) CheckList() {
|
|
|
}
|
|
|
if status != "-1" { //任务状态
|
|
|
query["s_status"] = status
|
|
|
+ } else {
|
|
|
+ query["s_status"] = map[string]interface{}{
|
|
|
+ "$in": []string{"未开始", "进行中", "已完成"},
|
|
|
+ }
|
|
|
}
|
|
|
if search != "" {
|
|
|
query["$or"] = []interface{}{
|
|
@@ -785,6 +793,7 @@ func (f *Front) CheckJyData() {
|
|
|
}
|
|
|
status := f.GetString("s_status")
|
|
|
s_excp := f.GetString("s_excp")
|
|
|
+ s_isEff := f.GetString("isEff")
|
|
|
field := f.GetString("field") //字段
|
|
|
dataType1 := f.GetString("datatype1") //信息类型
|
|
|
min := f.GetString("minval") //min max不用int类型接收,以免有默认值0
|
|
@@ -796,6 +805,11 @@ func (f *Front) CheckJyData() {
|
|
|
} else if status == "-1" {
|
|
|
query["b_check"] = false
|
|
|
}
|
|
|
+ if s_isEff == "1" {
|
|
|
+ query["b_isEff"] = true
|
|
|
+ } else if s_isEff == "-1" {
|
|
|
+ query["b_isEff"] = false
|
|
|
+ }
|
|
|
if s_excp == "1" {
|
|
|
query["s_excp"] = nil
|
|
|
} else if s_excp == "-1" {
|
|
@@ -872,7 +886,7 @@ func (f *Front) CheckJyData() {
|
|
|
}
|
|
|
qu.Debug(query)
|
|
|
count := util.Mgo.Count(sourceinfo, query)
|
|
|
- fields := map[string]interface{}{"v_baseinfo.title": 1, "b_check": 1, "i_ckdata": 1, "s_login": 1, "b_istag": 1, "s_excp": 1, "s_excp_info": 1}
|
|
|
+ fields := map[string]interface{}{"v_baseinfo.title": 1, "b_check": 1, "i_ckdata": 1, "s_login": 1, "b_istag": 1, "s_excp": 1, "s_excp_info": 1, "b_isEff": 1}
|
|
|
info, _ := util.Mgo.Find(sourceinfo, query, `{"_id": 1}`, fields, false, start, limit)
|
|
|
f.ServeJson(map[string]interface{}{
|
|
|
"draw": draw,
|
|
@@ -929,6 +943,7 @@ func (f *Front) CheckJyData() {
|
|
|
f.T["taskTagNum"] = tagCount
|
|
|
f.T["taskCheckNum"] = checkCount
|
|
|
}
|
|
|
+ project, _ := util.Mgo.FindById(util.PROJECTCOLLNAME, pid, map[string]interface{}{"purchasinglist_key": 1})
|
|
|
f.T["pid"] = pid
|
|
|
f.T["tid"] = tid
|
|
|
f.T["gid"] = gid
|
|
@@ -937,6 +952,7 @@ func (f *Front) CheckJyData() {
|
|
|
f.T["datatype"] = datatype
|
|
|
f.T["topsubtype"] = util.TopSubStypeArr
|
|
|
f.T["allfield"] = util.AllFieldArr
|
|
|
+ f.T["purchasinglist_key"] = (*project)["purchasinglist_key"]
|
|
|
_ = f.Render("project/check_data_list.html", &f.T)
|
|
|
}
|
|
|
}
|
|
@@ -1086,17 +1102,19 @@ func (f *Front) CheckSave() {
|
|
|
for k, _ := range baseUnset {
|
|
|
allTagFields[k] = nil
|
|
|
}
|
|
|
- qu.Debug("allTagFields===", allTagFields)
|
|
|
- qu.Debug("tagSet===", tagSet)
|
|
|
+ //qu.Debug("allTagFields===", allTagFields)
|
|
|
+ //qu.Debug("tagSet===", tagSet)
|
|
|
|
|
|
// 质检时,标注标记变成质检标记
|
|
|
checkFields, _ := (*project)["v_fields"].(map[string]interface{})
|
|
|
+ //datatype := qu.ObjToString((*project)["s_datatype"])
|
|
|
+ qu.Debug(checkFields)
|
|
|
checkSet := make(map[string]interface{})
|
|
|
for k := range checkFields {
|
|
|
checkSet[k] = tagSet[k]
|
|
|
}
|
|
|
|
|
|
- if len(checkSet) > 0 || baseInfo["purchasinglist_alltag"] != nil { //purchasinglist_alltag特殊处理
|
|
|
+ if len(tagSet) > 0 || baseInfo["purchasinglist_alltag"] != nil { //purchasinglist_alltag特殊处理
|
|
|
//1、更新数据源信息
|
|
|
setResult := map[string]interface{}{ //更新字段集
|
|
|
"i_updatetime": time.Now().Unix(),
|
|
@@ -1134,7 +1152,6 @@ func (f *Front) CheckSave() {
|
|
|
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})
|
|
@@ -1207,6 +1224,21 @@ func (f *Front) CheckResult() {
|
|
|
f.ServeJson(map[string]interface{}{"rep": false, "msg": "无质检审核数据!"})
|
|
|
return
|
|
|
}
|
|
|
+ // 排序
|
|
|
+ fields := (*projcet)["v_fields"].(map[string]interface{})
|
|
|
+ purchasingTag := false // 标的物统计标识
|
|
|
+ var strs []string
|
|
|
+ if fields["purchasinglist"] != nil {
|
|
|
+ purchasingTag = true
|
|
|
+ delete(fields, "purchasinglist")
|
|
|
+ }
|
|
|
+ for k := range fields {
|
|
|
+ strs = append(strs, k)
|
|
|
+ }
|
|
|
+ pNum, pEffNum := 0, 0 // 标的物数量, 标的物有效数量
|
|
|
+ fieldNumMap := make(map[string]int) //字段总标注量,
|
|
|
+ tagNumMap := make(map[string]int) //字段标注数据量(标的物有效)
|
|
|
+ rightNumMap := make(map[string]int) //正确数据(标的物有效)
|
|
|
for tmp := make(map[string]interface{}); result.Next(&tmp); markNum++ {
|
|
|
user := qu.ObjToString(tmp["s_login"])
|
|
|
var up map[string]int
|
|
@@ -1243,10 +1275,42 @@ func (f *Front) CheckResult() {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
+ if tmp["b_check"].(bool) && purchasingTag {
|
|
|
+ info := tmp["v_baseinfo"].(map[string]interface{})
|
|
|
+ checkInfo := tmp["v_checkinfo"].(map[string]interface{})
|
|
|
+ if pList, o := info["purchasinglist"].([]interface{}); o {
|
|
|
+ pNum += len(pList)
|
|
|
+ if tmp["b_isEff"].(bool) {
|
|
|
+ pEffNum += 1
|
|
|
+ }
|
|
|
+ for _, p := range pList {
|
|
|
+ p1 := p.(map[string]interface{})
|
|
|
+ for f := range purchasingField {
|
|
|
+ if qu.ObjToString(p1[f]) != "" {
|
|
|
+ fieldNumMap[f] += 1
|
|
|
+ if b, o := p1["b_isEff"].(bool); b && o {
|
|
|
+ tagNumMap[f] += 1
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if cList, o := checkInfo["purchasinglist"].([]interface{}); o {
|
|
|
+ for _, c := range cList {
|
|
|
+ c1 := c.(map[string]interface{})
|
|
|
+ for f := range purchasingField {
|
|
|
|
|
|
+ if qu.IntAll(c1[f]) == 1 {
|
|
|
+ rightNumMap[f] += 1
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
qu.Debug(cmaps)
|
|
|
qu.Debug(umaps)
|
|
|
+ pResult := method(fieldNumMap, tagNumMap, rightNumMap)
|
|
|
// 前台页面数据
|
|
|
dataSource := make(map[string]interface{})
|
|
|
var userSelect []string
|
|
@@ -1259,12 +1323,7 @@ func (f *Front) CheckResult() {
|
|
|
tmp["num3"] = checkNumR
|
|
|
tmp["num4"] = CountPr(checkNumR, checkNum)
|
|
|
dataSelect = append(dataSelect, tmp)
|
|
|
- // 排序
|
|
|
- fields := (*projcet)["v_fields"].(map[string]interface{})
|
|
|
- var strs []string
|
|
|
- for k := range fields {
|
|
|
- strs = append(strs, k)
|
|
|
- }
|
|
|
+
|
|
|
sort.Strings(strs)
|
|
|
for _, v := range strs {
|
|
|
tmp1 := make(map[string]interface{})
|
|
@@ -1287,7 +1346,7 @@ func (f *Front) CheckResult() {
|
|
|
tmp2["num3"] = v2["re_rg_count"]
|
|
|
tmp2["num4"] = CountPr(v2["re_rg_count"], v2["re_count"])
|
|
|
dataSelect1 = append(dataSelect1, tmp2)
|
|
|
- for k, v := range (*projcet)["v_fields"].(map[string]interface{}) {
|
|
|
+ for k, v := range fields {
|
|
|
tmp1 := make(map[string]interface{})
|
|
|
tmp1["name"] = v
|
|
|
tmp1["num1"] = v2["ck_count"]
|
|
@@ -1299,6 +1358,8 @@ func (f *Front) CheckResult() {
|
|
|
dataSource[k1] = dataSelect1
|
|
|
}
|
|
|
}
|
|
|
+ qu.Debug("字段统计---", dataSource)
|
|
|
+ qu.Debug("字段统计---", pResult)
|
|
|
f.T["pid"] = pid
|
|
|
f.T["tid"] = tid
|
|
|
f.T["sourceinfo"] = sourceinfo
|
|
@@ -1306,11 +1367,30 @@ func (f *Front) CheckResult() {
|
|
|
f.T["taskTagNum"] = markNum
|
|
|
f.T["taskCheckNum"] = checkNum
|
|
|
f.T["taskCheckRight"] = checkNumR
|
|
|
+ f.T["pNum"] = pNum // 标的物数量
|
|
|
+ f.T["pEffNum"] = pEffNum //标的物有效数据量
|
|
|
f.T["tableData"] = dataSource
|
|
|
+ f.T["pResult"] = pResult
|
|
|
f.T["userSelect"] = userSelect
|
|
|
_ = f.Render("project/check_result.html", &f.T)
|
|
|
}
|
|
|
|
|
|
+// @Description 标的物统计结果
|
|
|
+// @Author J 2022/4/25 2:20 PM
|
|
|
+func method(m1, m2, m3 map[string]int) []map[string]interface{} {
|
|
|
+ var result []map[string]interface{}
|
|
|
+ for f, v := range purchasingField {
|
|
|
+ m := make(map[string]interface{})
|
|
|
+ m["name"] = v
|
|
|
+ m["num"] = m1[f]
|
|
|
+ m["num1"] = m2[f]
|
|
|
+ m["num2"] = m3[f]
|
|
|
+ m["num3"] = CountPr(m2[f], m3[f])
|
|
|
+ result = append(result, m)
|
|
|
+ }
|
|
|
+ return result
|
|
|
+}
|
|
|
+
|
|
|
// CountPr 计算百分比
|
|
|
func CountPr(c1, c2 int) string {
|
|
|
decimal.DivisionPrecision = 2
|
|
@@ -1384,7 +1464,7 @@ func (f *Front) CheckExcpData() {
|
|
|
f.ServeJson(map[string]interface{}{"success": true})
|
|
|
}
|
|
|
|
|
|
-var regReplAllSymbol = regexp.MustCompile("[(\\(<《【\\[{{〔)\\)>》】\\]}}〕,,;;::'\"“”。.\\??/+=\\-_——*&……\\^%$¥@#!!`~·]")
|
|
|
+var regReplAllSymbol = regexp.MustCompile("[<《【\\[{{〔>》】\\]}}〕,,;;::'\"“”。.??/+=\\-_—*&…^%$¥@#!!`~·]")
|
|
|
|
|
|
func DataException(tmp map[string]interface{}) (string, string) {
|
|
|
var tag []string
|
|
@@ -1969,30 +2049,32 @@ func MarkTimePlace(content []interface{}, tagSet, baseSet, baseUnset map[string]
|
|
|
qu.Debug("baseUnset===", baseUnset)
|
|
|
}
|
|
|
|
|
|
-// MarkPurchasinglist 标注标的信息
|
|
|
func MarkPurchasinglist(content []interface{}, tagSet, baseSet, baseUnset map[string]interface{}, istag bool, status int) {
|
|
|
if status == -1 {
|
|
|
return
|
|
|
}
|
|
|
baseSet["purchasinglist_alltag"] = istag //标的信息是否标注完全
|
|
|
purchasinglist := []interface{}{}
|
|
|
+ purchasinglistStatus := []interface{}{}
|
|
|
delpclson := 0
|
|
|
for _, con := range content {
|
|
|
info, _ := con.(map[string]interface{})
|
|
|
- isNew, _ := info["isnew"].(bool) //是否是新增子包
|
|
|
+ //isNew, _ := info["isnew"].(bool) //是否是新增子包
|
|
|
pclSonStatus := qu.IntAll(info["status"])
|
|
|
if pclSonStatus == 4 {
|
|
|
delpclson++
|
|
|
}
|
|
|
if uInputs, ok := info["uInput"].([]interface{}); ok {
|
|
|
result := map[string]interface{}{
|
|
|
- "isnew": isNew,
|
|
|
+ //"isnew": isNew,
|
|
|
}
|
|
|
+ statusMap := make(map[string]interface{})
|
|
|
for _, tmp := range uInputs {
|
|
|
if tmpMap, ok := tmp.(map[string]interface{}); ok {
|
|
|
key := qu.ObjToString(tmpMap["key"]) //字段
|
|
|
input := tmpMap["input"] //值
|
|
|
- //status := qu.IntAll(tmpMap["status"])
|
|
|
+ status := qu.IntAll(tmpMap["status"])
|
|
|
+ statusMap[key] = status
|
|
|
isNull := false
|
|
|
if input == "" { //判断前台页面是否填值,无值不进行字段存储
|
|
|
isNull = true
|
|
@@ -2009,6 +2091,7 @@ func MarkPurchasinglist(content []interface{}, tagSet, baseSet, baseUnset map[st
|
|
|
}
|
|
|
if len(result) > 0 && pclSonStatus != 4 {
|
|
|
purchasinglist = append(purchasinglist, result)
|
|
|
+ purchasinglistStatus = append(purchasinglistStatus, statusMap)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -2019,7 +2102,8 @@ func MarkPurchasinglist(content []interface{}, tagSet, baseSet, baseUnset map[st
|
|
|
} else if len(content) > 0 && delpclson == len(content) { //只有删除
|
|
|
baseUnset["purchasinglist"] = ""
|
|
|
}
|
|
|
- tagSet["purchasinglist"] = status
|
|
|
+ //tagSet["purchasinglist"] = status
|
|
|
+ tagSet["purchasinglist"] = purchasinglistStatus
|
|
|
} else {
|
|
|
qu.Debug("Purchasinglist Tag Error")
|
|
|
}
|
|
@@ -2261,6 +2345,7 @@ func (f *Front) CheckDataPurchase() {
|
|
|
stype := f.GetString("stype")
|
|
|
sourceinfo := f.GetString("s_sourceinfo")
|
|
|
tid := f.GetString("taskid")
|
|
|
+ pid := f.GetString("pid")
|
|
|
keyword := f.GetString("keyword")
|
|
|
keyword = strings.ReplaceAll(keyword, ",", ",")
|
|
|
keyArr := strings.Split(keyword, ",")
|
|
@@ -2290,30 +2375,40 @@ func (f *Front) CheckDataPurchase() {
|
|
|
query["i_ckdata"] = 2
|
|
|
}
|
|
|
}
|
|
|
+ util.Mgo.UpdateById(util.PROJECTCOLLNAME, pid, map[string]interface{}{"$set": map[string]interface{}{"purchasinglist_key": keyword}})
|
|
|
query["v_baseinfo.purchasinglist"] = map[string]interface{}{"$exists": true}
|
|
|
count := util.Mgo.Count(sourceinfo, query)
|
|
|
qu.Debug(query, count)
|
|
|
- info, _ := util.Mgo.Find(sourceinfo, query, `{"_id": 1}`, `{"v_baseinfo": 1, "b_isEff": 1}`, false, -1, -1)
|
|
|
+ info, _ := util.Mgo.Find(sourceinfo, query, `{"_id": 1}`, `{"v_baseinfo": 1, "b_isEff": 1, "v_checkinfo": 1, "v_taginfo": 1}`, false, -1, -1)
|
|
|
var updateArr [][]map[string]interface{}
|
|
|
for _, m := range *info {
|
|
|
baseinfo := m["v_baseinfo"].(map[string]interface{})
|
|
|
+ //taginfo := m["v_taginfo"].(map[string]interface{})
|
|
|
+ //checkinfo := m["v_checkinfo"].(map[string]interface{})
|
|
|
+ //var pursTag, pursCheck []interface{}
|
|
|
purs := baseinfo["purchasinglist"].([]interface{})
|
|
|
+ //if taginfo["purchasinglist"] != nil {
|
|
|
+ // pursTag = taginfo["purchasinglist"].([]interface{})
|
|
|
+ //}
|
|
|
+ //if checkinfo["purchasinglist"] != nil {
|
|
|
+ // pursCheck = checkinfo["purchasinglist"].([]interface{})
|
|
|
+ //}
|
|
|
if len(purs) > 0 {
|
|
|
- arr1 := []map[string]interface{}{} //质检通过
|
|
|
- arr2 := []map[string]interface{}{} //质检未通过
|
|
|
+ //arr1 := []map[string]interface{}{} //检验通过
|
|
|
+ //arr2 := []map[string]interface{}{} //检验未通过
|
|
|
for _, m2 := range qu.ObjArrToMapArr(purs) {
|
|
|
if validPurchase(keyArr, qu.ObjToString(m2["itemname"])) {
|
|
|
m2["b_isEff"] = true
|
|
|
if m["b_isEff"] != nil && !m["b_isEff"].(bool) {
|
|
|
m["b_isEff"] = true
|
|
|
}
|
|
|
- arr1 = append(arr1, m2)
|
|
|
+ //arr1 = append(arr1, m2)
|
|
|
} else {
|
|
|
m2["b_isEff"] = false
|
|
|
- arr2 = append(arr2, m2)
|
|
|
+ //arr2 = append(arr2, m2)
|
|
|
}
|
|
|
}
|
|
|
- baseinfo["purchasinglist"] = append(arr1, arr2...)
|
|
|
+ //baseinfo["purchasinglist"] = append(arr1, arr2...)
|
|
|
var update []map[string]interface{}
|
|
|
update = append(update, map[string]interface{}{"_id": m["_id"]})
|
|
|
update = append(update, map[string]interface{}{"$set": m})
|
|
@@ -2326,7 +2421,6 @@ func (f *Front) CheckDataPurchase() {
|
|
|
}
|
|
|
}
|
|
|
if len(updateArr) > 0 {
|
|
|
- qu.Debug(updateArr)
|
|
|
util.Mgo.UpSertBulk(sourceinfo, updateArr...)
|
|
|
}
|
|
|
f.ServeJson(map[string]interface{}{"success": true, "msg": ""})
|