jianghan7 1 жил өмнө
parent
commit
1b47e13edc

+ 1 - 1
src/config.json

@@ -2,7 +2,7 @@
     "port": "7000",
     "mgodb": "192.168.3.166:27082",
     "dbsize": 10,
-    "dbname": "datacheck",
+    "dbname": "datacheck1",
     "alltocoll": "marked",
     "defaultpwd": "123",
     "bidding":{

+ 1 - 0
src/front/front.go

@@ -98,6 +98,7 @@ type Front struct {
 	groupStatsTaskExport xweb.Mapper `xweb:"/front/group/task/stats/export"` //剑鱼任务组统计任务导出
 	groupExportData      xweb.Mapper `xweb:"/front/project/task/exportdata"` //任务组数据导出
 	groupImportData      xweb.Mapper `xweb:"/front/project/task/importdata"` //任务组数据导入
+	statsTasData         xweb.Mapper `xweb:"/front/project/task/statsdata"`  //信息统计
 
 	checkResultWb xweb.Mapper `xweb:"/front/group/check/wb/result"` //外包质检结果
 

+ 106 - 0
src/front/group.go

@@ -1045,3 +1045,109 @@ func (f *Front) GroupImportData() {
 	}
 	f.ServeJson(map[string]interface{}{"success": true, "msg": "数据导入成功", "count": count})
 }
+
+func (f *Front) StatsTasData() {
+	tid := f.GetString("tid")
+	sourceinfo := f.GetString("s_sourceinfo")
+	if f.Method() == "POST" {
+		stype := f.GetString("stype")
+		sctype := f.GetString("sctype")
+		n1, n2, n3 := countFuc(stype, sourceinfo, tid, sctype)
+		f.ServeJson(map[string]interface{}{"success": true, "data": bson.M{"num": n1, "pCount": n2, "cCount": n3}})
+	} else {
+		f.T["taskid"] = tid
+		f.T["s_sourceinfo"] = sourceinfo
+		if f.GetString("stype") == "user" {
+			f.T["user"] = "user"
+			isTagNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_usertaskid": tid, "b_istag": true})               //已标注数量
+			allNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_usertaskid": tid})                                  //数据总量
+			effNum1 := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_usertaskid": tid, "v_baseinfo.is_efficient": "是"}) // 有效数据 是
+			effNum2 := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_usertaskid": tid, "v_baseinfo.is_efficient": "否"}) // 有效数据 否
+			effNum3 := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_usertaskid": tid, "v_baseinfo.is_efficient": nil}) // 有效数据 空
+			qu.Debug("数据总量:", allNum, "已标注量:", isTagNum)
+			f.T["allNum"] = allNum
+			f.T["isTagNum"] = isTagNum
+			f.T["effNum1"] = effNum1
+			f.T["effNum2"] = effNum2
+			f.T["effNum3"] = effNum3
+		} else if f.GetString("stype") == "group" {
+			f.T["group"] = "group"
+			//统计数据量
+			isTagNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": tid, "b_istag": true})               //已标注数量
+			allNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": tid})                                  //数据总量``
+			effNum1 := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": tid, "v_baseinfo.is_efficient": "是"}) // 有效数据 是
+			effNum2 := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": tid, "v_baseinfo.is_efficient": "否"}) // 有效数据 否
+			effNum3 := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": tid, "v_baseinfo.is_efficient": nil}) // 有效数据 空
+			qu.Debug("数据总量:", allNum, "已标注量:", isTagNum)
+			f.T["allNum"] = allNum
+			f.T["isTagNum"] = isTagNum
+			f.T["effNum1"] = effNum1
+			f.T["effNum2"] = effNum2
+			f.T["effNum3"] = effNum3
+		} else {
+			f.T["project"] = "project"
+			//统计数据量
+			isTagNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": tid, "b_istag": true})               //已标注数量
+			allNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": tid})                                  //数据总量
+			effNum1 := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": tid, "v_baseinfo.is_efficient": "是"}) // 有效数据 是
+			effNum2 := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": tid, "v_baseinfo.is_efficient": "否"}) // 有效数据 否
+			effNum3 := util.Mgo.Count(sourceinfo, map[string]interface{}{"s_grouptaskid": tid, "v_baseinfo.is_efficient": nil}) // 有效数据 空
+			qu.Debug("数据总量:", allNum, "已标注量:", isTagNum)
+			f.T["allNum"] = allNum
+			f.T["isTagNum"] = isTagNum
+			f.T["effNum1"] = effNum1
+			f.T["effNum2"] = effNum2
+			f.T["effNum3"] = effNum3
+		}
+		_ = f.Render("project/task_stats.html", &f.T)
+	}
+}
+
+func countFuc(stype, coll, tid, sctype string) (int, int, int) {
+	field := "" //
+	q := make(map[string]interface{})
+	f := make(map[string]interface{})
+	if sctype == "group" {
+		q["s_grouptaskid"] = tid
+	} else {
+		q["s_usertaskid"] = tid
+	}
+	q["b_istag"] = true
+	f["v_baseinfo.is_efficient"] = 1
+	if stype == "1" {
+		f["v_baseinfo.purchasinglist"] = 1
+		field = "purchasinglist"
+	} else if stype == "2" {
+		f["v_baseinfo.procurementlist"] = 1
+		field = "procurementlist"
+	} else if stype == "3" {
+		f["v_baseinfo.package"] = 1
+		field = "v_baseinfo.package"
+	}
+
+	sess := util.Mgo.GetMgoConn()
+	defer util.Mgo.DestoryMongoConn(sess)
+
+	qu.Debug(q)
+	query := sess.DB(util.Mgo.DbName).C(coll).Find(q).Select(f).Iter()
+	count := 0
+	size, pCount, cCount := 0, 0, 0 //标讯数量, 标的物/多包/意向 累加数量,有效数量
+	for tmp := make(map[string]interface{}); query.Next(tmp); count++ {
+		if count%2000 == 0 {
+			qu.Debug("current ---", count)
+		}
+		if binfo, ok := tmp["v_baseinfo"].(map[string]interface{}); ok {
+			if binfo["is_efficient"] == nil || qu.ObjToString(binfo["is_efficient"]) == "是" {
+				if binfo[field] != nil {
+					size++
+					if field == "package" {
+						pCount += len(binfo[field].(map[string]interface{}))
+					} else {
+						pCount += len(binfo[field].([]interface{}))
+					}
+				}
+			}
+		}
+	}
+	return size, pCount, cCount
+}

+ 3 - 0
src/front/project.go

@@ -425,6 +425,8 @@ func (f *Front) ProjectGroupTaskList() {
 			IsNotOkNotGiveDataNum := IsNoOkAllDataNum - IsNoOkIsGiveDataNum                                                       //未达标待分发量
 			IsNotOkIsTagDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": true, "b_istag": true})       //未达标已标注量
 
+			acceptNum := util.Mgo.Count("jy_check", map[string]interface{}{"projectid": projectid}) // 验收数据量
+
 			allGiveDataNum := okIsGiveDataNum + IsNoOkIsGiveDataNum      //总分发量
 			allNoGiveDataNum := okNotGiveDataNum + IsNotOkNotGiveDataNum //总待分发量
 			allIsTagDataNum := okIsTagDataNum + IsNotOkIsTagDataNum      //已标注总量
@@ -449,6 +451,7 @@ func (f *Front) ProjectGroupTaskList() {
 			f.T["okIsTagDataNum"] = okIsTagDataNum
 			f.T["IsNotOkIsTagDataNum"] = IsNotOkIsTagDataNum
 			f.T["okRealGiveNum"] = okRealGiveNum
+			f.T["acceptNum"] = acceptNum
 			_ = f.Render("project/project_clear.html", &f.T)
 		} else {
 			qu.Debug("Project Find Error")

+ 0 - 2
src/front/remark.go

@@ -2158,8 +2158,6 @@ func MarkTimePlace(content []interface{}, tagSet, baseSet, baseUnset map[string]
 }
 
 func MarkPurchasinglist(content []interface{}, tagSet, baseSet, baseUnset map[string]interface{}, istag bool, status int) {
-	qu.Debug(tagSet)
-	qu.Debug(content)
 	if status == -1 {
 		return
 	}

+ 25 - 0
src/web/templates/project/project_clear.html

@@ -84,6 +84,21 @@
                                 </div>
 
                             </div>
+
+                            <div class="box-body margin">
+                                <h4><i class="glyphicon glyphicon-exclamation-sign" style="margin-right: 6px"></i>数据验收进度</h4>
+                                <hr>
+                                <div class="form-group" style="margin-left: 10px">
+                                    <div class="col-xs-3" style="width: auto">
+                                        <label class="form-inline">数据总量:
+                                            <input type="text" class="form-control" style="width: 80px" readonly value="{{.T.allDataNum}}"></label>
+                                        <label class="form-inline" style="margin-left: 5px">已标注:
+                                            <input type="text" class="form-control" style="width: 80px" readonly value="{{.T.allIsTagDataNum}}"></label>
+                                        <label class="form-inline" style="margin-left: 5px">已验收:
+                                            <input type="text" class="form-control" style="width: 80px" readonly value="{{.T.acceptNum}}"></label>
+                                    </div>
+                                </div>
+                            </div>
                         </div>
                         <div id="status-div" class="col-xs-1" style="width: auto;float:right;">
                             <label for="statusSelect">状态:
@@ -256,6 +271,7 @@
                                     '<a class="btn btn-sm btn-primary" href="/front/group/user/task/list?pid='+projectid+'&grouptaskid='+val+'&s_groupid='+row.s_groupid+'&s_sourceinfo='+row.s_sourceinfo+'">查看</a>&nbsp;&nbsp;' +
                                     '<a class="btn btn-sm btn-primary" onclick="checkMethod1(\'' + row.s_projectid + '\',\'' + val + '\',\'' + row.s_sourceinfo + '\')">质检</a>&nbsp;&nbsp;' +
                                     '<a class="btn btn-sm btn-primary" onclick="#">已推送</a>&nbsp;&nbsp;' +
+                                    '<a class="btn btn-sm btn-primary" onclick="StatsTask(\'' + val + '\',\'' + row.s_status + '\',\''+row.s_sourceinfo+'\')">信息统计</a>&nbsp;&nbsp;' +
                                     '</div>';
                             } else {
                                 tmp = '<div>' +
@@ -264,6 +280,7 @@
                                     '<a class="btn btn-sm btn-primary" onclick="syncJyCm(\'' + val + '\',\''+row.s_sourceinfo+'\',\'' + row.s_status + '\')">推送</a>&nbsp;&nbsp;' +
                                     '<a class="btn btn-sm btn-primary" onclick="exportData(\'' + val + '\',\''+row.s_sourceinfo+'\')">导出</a>&nbsp;&nbsp;' +
                                     '<a class="btn btn-sm btn-primary" onclick="importData(\'' + val + '\',\''+row.s_sourceinfo+'\')">导入</a>&nbsp;&nbsp;' +
+                                    '<a class="btn btn-sm btn-primary" onclick="StatsTask(\'' + val + '\',\'' + row.s_status + '\',\''+row.s_sourceinfo+'\')">信息统计</a>&nbsp;&nbsp;' +
                                     '</div>';
                             }
                         }else {
@@ -715,4 +732,12 @@
         sessionStorage.setItem("check", "project")
         window.location.href = "/front/jy/check/data?pid="+pid+"&tid="+tid+"&s_sourceinfo="+sourceinfo+"&stype=group"
     }
+
+    function StatsTask(id, status, sourceinfo) {
+        if (status === "已完成") {
+            window.location.href = "/front/project/task/statsdata?tid="+id+"&s_sourceinfo="+sourceinfo+"&stype=group"
+        }else {
+            showTip("项目未完成")
+        }
+    }
 </script>

+ 1 - 0
src/web/templates/project/task_detail.html

@@ -466,6 +466,7 @@
             showTip("操作不允许")
         }
     }
+
     function checkMethod(pid, tid, sourceinfo) {
         window.location.href = "/front/user/check/data?pid="+pid+"&tid="+tid+"&s_sourceinfo="+sourceinfo
     }

+ 10 - 0
src/web/templates/project/task_group_list.html

@@ -118,6 +118,7 @@
                             '<a class="btn btn-sm btn-primary" onclick="checkMethod(\'' + row.s_projectid + '\',\'' + val + '\',\'' + row.s_sourceinfo + '\')">质检</a>&nbsp;&nbsp;' +
                             // '<a class="btn btn-sm btn-primary">质检结果</a>&nbsp;&nbsp;' +
                             '<a class="btn btn-sm btn-primary" onclick="deliverTask(\'' + val + '\',\'' + row.s_status + '\')">交付</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-primary" onclick="StatsTask(\'' + val + '\',\'' + row.s_status + '\',\''+row.s_sourceinfo+'\')">信息统计</a>&nbsp;&nbsp;' +
                             '</div>';
                         return tmp
                     }
@@ -163,4 +164,13 @@
         window.location.href = "/front/jy/check/data?pid="+pid+"&tid="+tid+"&s_sourceinfo="+sourceinfo+"&stype=group"
     }
 
+    function StatsTask(id, status, sourceinfo) {
+        if (status === "已完成") {
+            window.location.href = "/front/project/task/statsdata?tid="+id+"&s_sourceinfo="+sourceinfo+"&stype=group"
+        }else {
+            showTip("项目未完成")
+        }
+    }
+
+
 </script>

+ 169 - 0
src/web/templates/project/task_stats.html

@@ -0,0 +1,169 @@
+{{include "com/inc.html"}}
+<!-- Main Header -->
+{{include "com/header.html"}}
+<!-- Left side column. 权限菜单 -->
+{{include "com/menu.html"}}
+<div class="content-wrapper">
+    <section class="content-header">
+        <h1><small></small></h1>
+        <ol class="breadcrumb">
+            {{if .T.project}}
+            <li><a href="/front/project"><i class="fa fa-dashboard"></i> 项目列表</a></li>
+            <li><a href="/front/project/task/list?pid={{ .T.pid }}"><i class="fa fa-dashboard"></i> 项目分发</a></li>
+            <li><a href="#"><i class="fa fa-dashboard"></i> 信息统计</a></li>
+            {{else if .T.user}}
+            <li><a href="/front/user/task/list"><i class="fa fa-dashboard"></i> 用户组任务列表</a></li>
+            <li><a href="#"><i class="fa fa-dashboard"></i> 信息统计</a></li>
+            {{else if .T.group}}
+            <li><a href="/front/group/task/list"><i class="fa fa-dashboard"></i> 用户组任务列表</a></li>
+            <li><a href="#"><i class="fa fa-dashboard"></i> 信息统计</a></li>
+            {{end}}
+        </ol>
+    </section>
+    <!-- Main content -->
+    <section class="content">
+        <div class="row">
+            <div class="col-xs-12">
+                <div class="box">
+                    <div class="box-body">
+
+                        <div class="box-body margin">
+                            <h4><i class="glyphicon glyphicon-exclamation-sign" style="margin-right: 6px"></i>数据情况</h4>
+                            <div class="form-group" style="margin-left: 10px;margin-top: 30px">
+                                <div class="col-xs-5" style="width: auto">
+                                    <label class="form-inline">数据总量:
+                                        <input type="text" class="form-control" style="width: 80px" readonly value="{{.T.allNum}}"></label>
+                                    <label class="form-inline" style="margin-left: 5px">已标注:
+                                        <input type="text" class="form-control" style="width: 80px" readonly value="{{.T.isTagNum}}"></label>
+                                    <label class="form-inline" style="margin-left: 5px">是否有效标签数据(是/否/空):
+                                        <input type="text" class="form-control" style="width: 150px" readonly value="{{.T.effNum1}} / {{.T.effNum2}} / {{.T.effNum3}}"></label>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="box-body margin">
+                            <div class="form-group">
+                                <h4><i class="glyphicon glyphicon-stats" style="margin-right: 6px"></i>标的物信息统计
+                                    <button class="btn btn-sm btn-primary glyphicon glyphicon-refresh" onclick="statsMethod('1')">统计</button>
+                                </h4>
+                            </div>
+                            <div class="form-group" style="margin-left: 10px;margin-top: 30px">
+                                <div class="col-xs-5" style="width: auto">
+                                    <label class="form-inline">含有标的物数据量:
+                                        <input type="text" class="form-control" style="width: 80px" readonly id="purSize"></label>
+                                    <label class="form-inline" style="margin-left: 5px">标的物数量:
+                                        <input type="text" class="form-control" style="width: 80px" readonly id="purCount"></label>
+                                    <label class="form-inline" style="margin-left: 5px">有效标的物数量:
+                                        <input type="text" class="form-control" style="width: 80px" readonly id="purCheckCount"></label>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="box-body margin">
+                            <h4><i class="glyphicon glyphicon-stats" style="margin-right: 6px"></i>采购意向统计
+                                <button class="btn btn-sm btn-primary glyphicon glyphicon-refresh" onclick="statsMethod('2')">统计</button>
+                            </h4>
+                            <div class="form-group" style="margin-left: 10px;margin-top: 30px">
+                                <div class="col-xs-5" style="width: auto">
+                                    <label class="form-inline">含有采购意向信息数据量:
+                                        <input type="text" class="form-control" style="width: 80px" readonly id="proSize"></label>
+                                    <label class="form-inline" style="margin-left: 5px">采购意向信息数量:
+                                        <input type="text" class="form-control" style="width: 80px" readonly id="proCount"></label>
+                                    <label class="form-inline" style="margin-left: 5px">有效采购意向信息数量:
+                                        <input type="text" class="form-control" style="width: 80px" readonly id="proCheckCount"></label>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="box-body margin">
+                            <h4><i class="glyphicon glyphicon-stats" style="margin-right: 6px"></i>多包信息统计
+                                <button class="btn btn-sm btn-primary glyphicon glyphicon-refresh" onclick="statsMethod('3')">统计</button>
+                            </h4>
+                            <div class="form-group" style="margin-left: 10px;margin-top: 30px">
+                                <div class="form-group" style="margin-left: 10px;margin-top: 30px">
+                                    <div class="col-xs-5" style="width: auto">
+                                        <label class="form-inline">含有标的物数据量:
+                                            <input type="text" class="form-control" style="width: 80px" readonly id="pkgSize"></label>
+                                        <label class="form-inline" style="margin-left: 5px">多包信息数量:
+                                            <input type="text" class="form-control" style="width: 80px" readonly id="pkgCount"></label>
+                                        <label class="form-inline" style="margin-left: 5px">有效包数量:
+                                            <input type="text" class="form-control" style="width: 80px" readonly id="pkgCheckCount"></label>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                    <!-- /.box-body -->
+                </div>
+                <!-- /.box -->
+            </div>
+        </div>
+    </section>
+</div>
+
+<div class="modal fade" id="loadingModal" backdrop="static" keyboard="false">
+    <div style="width: 250px;height:100px; z-index: 20000; position: absolute; text-align: center; left: 50%; top: 50%;margin-left:-100px;margin-top:-10px">
+        <div id="loadText" class="progress progress-striped active"
+             style="margin-bottom: 0;height:50px; text-align:center;line-height: 50px;font-size:large;padding-left: 5px">
+            loading......    
+        </div>
+    </div>
+</div>
+
+{{include "com/footer.html"}}
+<script>
+    let sctype = ""
+    if ({{ .T.project }}) {
+        menuActive("project");
+        sctype = "group"
+    }else if ({{ .T.user }}) {
+        menuActive("/user/task/list");
+        sctype = "user"
+    }else {
+        menuActive("group/task/list");
+        sctype = "group"
+    }
+
+    let sourceinfo = {{ .T.s_sourceinfo }}
+    let gid = {{ .T.taskid }}
+
+    function statsMethod(stype) {
+        showLoading("正在统计数据,请稍候...")
+        $.ajax({
+            url: "/front/project/task/statsdata",
+            type: "POST",
+            data: {"stype": stype, "tid": gid, "s_sourceinfo": sourceinfo, "sctype": sctype},
+            success: function (r) {
+                hideLoading()
+                if (r.success) {
+                    setValues(stype, r.data)
+                }else {
+                    alert("统计出错!")
+                }
+            }
+        })
+    }
+
+    function setValues(stype, obj) {
+        switch (stype) {
+            case '1':
+                // 标的物
+                $('#purSize').val(obj.num)
+                $('#purCount').val(obj.pCount)
+                $('#purCheckCount').val(obj.cCount)
+                break;
+            case '2':
+                // 采购意向
+                $('#proSize').val(obj.num)
+                $('#proCount').val(obj.pCount)
+                $('#proCheckCount').val(obj.cCount)
+                break;
+            case '3':
+                // 多包
+                $('#pkgSize').val(obj.num)
+                $('#pkgCount').val(obj.pCount)
+                $('#pkgCheckCount').val(obj.cCount)
+                break;
+            default:
+                break;
+        }
+    }
+
+</script>

+ 9 - 0
src/web/templates/project/task_user_list.html

@@ -152,6 +152,7 @@
                             '<a class="btn btn-sm btn-primary" onclick="markMethod(\'' + val + '\',\''+row.s_projectid+'\',\''+row.s_sourceinfo+'\',\'' + row.s_status + '\')">标注</a>&nbsp;&nbsp;' +
                             '<a class="btn btn-sm btn-primary" onclick="deliverTask(\'' + val + '\',\''+row.s_sourceinfo+'\',\'' + row.s_status + '\')">交付</a>&nbsp;&nbsp;' +
                             '<a class="btn btn-sm btn-primary" onclick="appendTask(\'' + val + '\',\''+row.s_sourceinfo+'\',\'' + row.s_parentid + '\')">领取数据</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-primary" onclick="StatsTask(\'' + val + '\',\'' + row.s_status + '\',\''+row.s_sourceinfo+'\')">信息统计</a>&nbsp;&nbsp;' +
                             '</div>';
                         return tmp
                     }
@@ -266,4 +267,12 @@
             showTip("操作不允许")
         }
     }
+
+    function StatsTask(id, status, sourceinfo) {
+        // if (status === "已完成") {
+            window.location.href = "/front/project/task/statsdata?tid="+id+"&s_sourceinfo="+sourceinfo+"&stype=user"
+        // }else {
+        //     showTip("项目未完成")
+        // }
+    }
 </script>