Browse Source

增加数据报告查询

wangkaiyue 6 years ago
parent
commit
b851c6e598

+ 77 - 1
common/src/qfw/util/mysql/mysql.go

@@ -171,6 +171,83 @@ func (m *Mysql) Find(tableName string, query map[string]interface{}, fields, ord
 	}
 	return &list
 }
+
+func (m *Mysql) Query(query string, args ...interface{}) *[]map[string]interface{} {
+	stmtOut, err := m.DB.Prepare(query)
+	if err != nil {
+		log.Println(err)
+		return nil
+	}
+	defer stmtOut.Close()
+	rows, err := stmtOut.Query(args...)
+	if err != nil {
+		log.Println(err)
+		return nil
+	}
+	if rows != nil {
+		defer rows.Close()
+	}
+	columns, err := rows.Columns()
+	if err != nil {
+		log.Println(err)
+		return nil
+	}
+	list := []map[string]interface{}{}
+	for rows.Next() {
+		scanArgs := make([]interface{}, len(columns))
+		values := make([]interface{}, len(columns))
+		ret := make(map[string]interface{})
+		for k, _ := range values {
+			scanArgs[k] = &values[k]
+		}
+		err = rows.Scan(scanArgs...)
+		if err != nil {
+			log.Println(err)
+			break
+		}
+
+		for i, col := range values {
+			if v, ok := col.([]uint8); ok {
+				ret[columns[i]] = string(v)
+			} else {
+				ret[columns[i]] = col
+			}
+		}
+		list = append(list, ret)
+	}
+	return &list
+}
+
+func (m *Mysql) QueryCount(query string, args ...interface{}) (count int) {
+	count = -1
+	if !strings.Contains(strings.ToLower(query), "count(*)") {
+		fmt.Println("QueryCount need query like < select count(*) from ..... >")
+		return
+	}
+	stmtOut, err := m.DB.Prepare(query)
+	if err != nil {
+		log.Println(err)
+		return
+	}
+	defer stmtOut.Close()
+	rows, err := stmtOut.Query(args...)
+	if err != nil {
+		log.Println(err)
+		return
+	}
+	if err != nil {
+		log.Println(err)
+		return
+	}
+	if rows.Next() {
+		err = rows.Scan(&count)
+		if err != nil {
+			log.Println(err)
+		}
+	}
+	return
+}
+
 func (m *Mysql) FindOne(tableName string, query map[string]interface{}, fields, order string) *map[string]interface{} {
 	list := m.Find(tableName, query, fields, order, 0, 1)
 	if list != nil && len(*list) == 1 {
@@ -251,7 +328,6 @@ func (m *Mysql) Count(tableName string, query map[string]interface{}) int64 {
 		if v == "$isNull" {
 			fields = append(fields, fmt.Sprintf("%s is null", k))
 		} else if v == "$isNotNull" {
-			log.Println("xxxx")
 			fields = append(fields, fmt.Sprintf("%s is not null", k))
 		} else {
 			fields = append(fields, fmt.Sprintf("%s=?", k))

+ 17 - 0
common/src/qfw/util/mysql/mysql_test.go

@@ -112,6 +112,23 @@ func Test_one(t *testing.T) {
 
 	log.Println(mysql.FindOne("person", map[string]interface{}{"id": 6}, "id,name,age", ""))
 }
+
+func Test_query(t *testing.T) {
+	mysql := &Mysql{
+		DBName:   "jianyu",
+		Address:  "192.168.3.11:3366",
+		UserName: "root",
+		PassWord: "Topnet123",
+	}
+	mysql.Init()
+	list := mysql.Query("select * from jy_datareport_order where pay_time>? and user_name=?", "2019-08-05 18:56:09", "玩怕")
+	for _, v := range *list {
+		fmt.Printf("%+v\n", v)
+	}
+	c := mysql.QueryCount("select count(*) from jy_datareport_order where user_name is not null")
+	fmt.Println(c)
+}
+
 func Test_count(t *testing.T) {
 	mysql := &Mysql{
 		DBName:   "jianyu",

+ 2 - 2
core/src/main_test.go

@@ -2,13 +2,13 @@ package main
 
 import (
 	"fmt"
-	. "gopkg.in/mgo.v2/bson"
 	"log"
 	. "qfw/coreconfig"
 	"qfw/util"
 	. "qfw/util/mongodb"
-	"reflect"
 	"testing"
+
+	. "gopkg.in/mgo.v2/bson"
 )
 
 func TestMongo(t *testing.T) {

+ 82 - 0
core/src/qfw/manage/dataReportOrder.go

@@ -0,0 +1,82 @@
+package manage
+
+import (
+	"errors"
+	"fmt"
+	util "qfw/coreutil"
+	qutil "qfw/util"
+	"strings"
+	"time"
+
+	"github.com/go-xweb/xweb"
+)
+
+type DataReportOrder struct {
+	*xweb.Action
+	orderList  xweb.Mapper `xweb:"/manage/dataReportOrder/list"`
+	pageing    xweb.Mapper `xweb:"/manage/dataReport/p"`                 //js翻页请求
+	dataDetail xweb.Mapper `xweb:"/manage/dataReport/dataDetail/(\\w+)"` //三级页
+}
+
+func init() {
+	xweb.AddAction(&DataReportOrder{})
+}
+
+func (d *DataReportOrder) OrderList() error {
+	return d.Render("/manage/datareport/index.html")
+}
+
+func (d *DataReportOrder) DataDetail(id string) error {
+	m := util.Mysql.FindOne("jy_datareport_order", map[string]interface{}{"id": id}, "user_name,user_mail,user_phone,user_company,order_money,pay_time,pay_way", "")
+	if m == nil {
+		return errors.New("not find order")
+	}
+	d.T["user_name"] = (*m)["user_name"]
+	d.T["user_mail"] = (*m)["user_mail"]
+	d.T["user_phone"] = (*m)["user_phone"]
+	d.T["user_company"] = (*m)["user_company"]
+	d.T["order_money"] = (*m)["order_money"]
+	d.T["pay_time"] = (*m)["pay_time"]
+	pay_way := qutil.ObjToString((*m)["pay_way"])
+	d.T["pay_way"] = qutil.If(strings.Contains(pay_way, "wx"), "微信支付", "支付宝支付")
+	d.T["source"] = qutil.If(strings.Contains(pay_way, "js"), "剑鱼标讯公众号", "剑鱼标讯APP")
+	return d.Render("/manage/datareport/detail.html", &d.T)
+}
+
+func (d *DataReportOrder) Pageing() {
+	startTime, _ := d.GetInt("starttime")
+	endTime, _ := d.GetInt("endtime")
+	query := d.GetString("query")
+	currentPage, _ := d.GetInteger("currentPage")
+	perPage, _ := d.GetInteger("perPage")
+
+	sql := " from jy_datareport_order where pay_money is not null "
+	val := []interface{}{}
+
+	if startTime != 0 {
+		sql = sql + "and pay_time > ? "
+		val = append(val, time.Unix(startTime, 0).Format(qutil.Date_Full_Layout))
+	}
+	if endTime != 0 {
+		sql = sql + "and pay_time < ? "
+		val = append(val, time.Unix(endTime, 0).Format(qutil.Date_Full_Layout))
+	}
+
+	if query != "" {
+		sql = sql + " and (user_name like ? or user_phone like ? )"
+		val = append(val, "%"+query+"%", "%"+query+"%")
+	}
+
+	countQuery := "select count(*) " + sql
+	count := util.Mysql.QueryCount(countQuery, val...)
+	//log.Println(countQuery, "count---", count)
+
+	listQuery := "select id,user_name,user_mail,user_phone,user_company,order_money,pay_time " + sql + fmt.Sprintf(" order by create_time desc limit %d,%d", (currentPage-1)*perPage, perPage)
+	res := util.Mysql.Query(listQuery, val...)
+	//log.Println("list---", len(*res))
+	d.ServeJson(map[string]interface{}{
+		"currentPage": currentPage,
+		"data":        res,
+		"totalRows":   count,
+	})
+}

+ 86 - 0
core/src/web/templates/manage/datareport/detail.html

@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset="utf-8" />
+		<meta name="viewport" content="width=device-width, initial-scale=1">
+		<title>数据报告订单</title>
+		{{include "/common/inc.html"}}
+		<link rel="stylesheet" type="text/css" href="{{Msg "seo" "cdn"}}/dataexport/base.css"/>
+    <link rel="stylesheet" type="text/css" href="{{Msg "seo" "cdn"}}/dataexport/dataExport.css"/>
+	</head>
+	<style>
+	.nofloat{float:none}
+	body {
+	    padding-top: 0px;
+	    font-family: tahoma, arial, 'Hiragino Sans GB', 'Microsoft YaHei', 宋体, sans-serif;
+	    color: #4e5051;
+	    background: #f5f5fb;
+	}
+	#dataReportOrder {
+	    background-color: #f5f5f5;
+	}
+	.cont-one, .row {
+   	 margin-top: 20px  !important;
+	}
+	.pbtn{
+		margin: 20px;
+	    background: #00bcd4;
+		user-select: none;
+	    float: right;
+	    width: 100px;
+	    height: 35px;
+	    line-height: 35px;
+	    text-align: center;
+	    color: #fff;
+      text-decoration:none;
+	}
+  .pbtn:hover{
+      text-decoration:none;
+      color:#fff;
+  }
+  .pbtn:visited {   
+      text-decoration: none;  
+  }
+  .pbtn:link {
+    text-decoration: none;  
+  }
+  .imgdiv{
+    padding: 27px 120px;
+    background: #fff;
+  }
+  .imgdiv img{
+    height: 200px;
+    width:30%;
+    max-width: 300px;
+  }  
+	</style>
+	<body>
+		{{include "/manage/audithead.html"}}
+		<div class="main">
+			<div class="left">
+			{{include "/manage/slider.html"}}</div>
+			<div class="right" style="background: #fff;color:#4e5051;min-height: 610px;">
+				<div class="title">
+					<span></span>订单详情 <span></span>
+				</div>
+				<!-- 订单信息 -->
+				<div class="order_info" >
+					<div class="hd">订单信息</div>
+					<div class="bd clearfix" style="padding-right: 65px;">
+						<ul class="row first"  style="margin-top:20px  !important;">
+							<li class="row-list nofloat">姓名:{{.T.user_name}}</li>
+							<li class="row-list nofloat">手机号:{{.T.user_phone}}</li>
+							<li class="row-list nofloat">邮箱:{{.T.user_mail}}</li>
+							<li class="row-list nofloat">公司名称:{{.T.user_company}}</li>
+							<li class="row-list nofloat">支付金额:{{.T.order_money}}</li>
+							<li class="row-list nofloat">支付时间:{{.T.pay_time}}</li>
+							<li class="row-list nofloat">支付方式:{{.T.pay_way}}</li>
+							<li class="row-list nofloat">信息来源:{{.T.source}}</li>
+						</ul>
+					</div>
+				</div>
+			</div>
+		</div>
+		{{include "/common/bottom.html"}}    
+	</body>
+</html>

+ 186 - 0
core/src/web/templates/manage/datareport/index.html

@@ -0,0 +1,186 @@
+
+<html>
+<head>
+<title>审核用户</title>
+{{include "/common/inc.html"}}
+<script src="{{Msg "seo" "cdn"}}/js/jquery.cookie.js"></script>
+<script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/zDialog.js"></script>
+<script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/My97DatePicker/WdatePicker.js"></script>
+<script src="/js/qfwtable.js"></script>
+<style type="text/css">
+#dataReportOrder{
+	background-color: #f5f5f5;
+}
+#content table{
+	table-layout: fixed;
+	border:0px;
+	font-size:14px;
+}
+
+.table>thead>tr>th:nth-child(1){
+width:15%;
+}
+.table>thead>tr>th:nth-child(2){
+width:15%;
+}
+.table>thead>tr>th:nth-child(3){
+width:20%;	
+}
+.table>thead>tr>th:nth-child(4){
+width:15%;
+}
+.table>thead>tr>th:nth-child(5){
+	width:15%;
+}
+.table>thead>tr>th:nth-child(6){
+	width:25%;
+}
+.table>thead>tr>th{
+border:0px;
+font-size:14px;
+}
+.table>tbody>tr>td{
+white-space: nowrap;
+text-overflow: ellipsis;
+overflow: hidden;
+border:0px;
+border-bottom:1px dashed #999999;
+}
+.table >tbody>tr{
+	cursor: pointer;
+}
+#_Container_0{
+background-color:#FFFFFF;
+}
+.buttonStyle{width:64px;height:22px;line-height:22px;color:#369;text-align:center;background:url({{Msg "seo" "cdn"}}/images/buticon.gif) no-repeat left top;border:0;font-size:12px;}
+.buttonStyle:hover{background:url({{Msg "seo" "cdn"}}/images/buticon.gif) no-repeat left -23px;}
+.pagination>.active>a:hover,.pagination>.active>a:focus{
+background-color:#18CC7D;
+}
+#sidebar { margin-left:0px;}
+.hui{color:#999999;}
+</style>
+</head>
+<body>
+{{include "/manage/audithead.html"}}
+<div class="row" style="width:96%; margin:0 auto;">
+{{include "/manage/slider.html"}}
+	<div id="content">
+		<div id="audit"></div>
+	</div>	
+</div>
+{{include "/common/bottom.html"}}
+</body>
+<script>
+$(function(){
+	$("#audit").datatable({
+		   perPage: 10
+		  ,showPagination:true
+		  ,checkbox:"" //check radio
+		  ,checkboxHeader:false
+		  ,idField:"_id"
+		  ,classname:"table-hover"
+		  ,css:{"height":"450px"}
+		  ,buttons: ['<div style="margin: 0px 15px;"><div style="width:40%;margin:5px" class="input-group pull-right" id="search"><input type="text" id="searchtext" value=""  data-original-title="Search" class="form-control" placeholder="微信用户名/手机号"><span class="input-group-btn"><button class="btn btn-success" onclick="SearchContent()" data-original-title="Search" id="searchtip" type="button" style="height:38px;width:70px;">检索</button></span></div><div style="margin:5px;" class="controls pull-left"><input type="text" style="background:#fff url({{Msg "seo" "cdn"}}/images/datePicker.gif) no-repeat right;"  id="starttime"  datatype="*" type="text" name="starttime" class="form-control" onClick="WdatePicker({oncleared:function(dp){oncleared(dp,this)},onpicked:function(dp){picked(dp,this)},dateFmt:\'yyyy-MM-dd\',maxDate:\'#F{$dp.$D(\\\'endtime\\\',{d:0})}\'})" readonly="ture" value="" placeholder="时间选择"></div><div class="controls pull-left" id="zhi" style="line-height: 46px;">至</div><div style="margin:5px;" class="controls pull-left"><input type="text"   style="background:#fff url({{Msg "seo" "cdn"}}/images/datePicker.gif) no-repeat right;"  id="endtime"  datatype="*" type="text" name="endtime" class="form-control" onClick="WdatePicker({oncleared:function(dp){oncleared(dp,this)},onpicked:function(dp){picked(dp,this)},dateFmt:\'yyyy-MM-dd\',minDate:\'#F{$dp.$D(\\\'starttime\\\',{d:0})}\'})" readonly="ture" value="" placeholder="时间选择"></div></div><div id="second"><div class="pull-right" id="allDoBut" style="display: none;"><button id="allDel" onclick="del(\'\',\'A\',\'\')" type="button" class="btn btn-primary">删除</button><button id="allPush" onclick="push(\'all\',\'\')" type="button" class="btn btn-warning">补推</button></div></div>']
+		  , url: '/manage/dataReport/p'
+		  , columns: [
+				{
+		            title: "姓名", field: "user_name"	
+		        },
+				{
+		            title: "手机号",field: "user_phone"
+		        },
+				{
+		            title: "邮箱", field: "user_mail"
+		        },
+				{
+		            title: "公司名称", field: "user_company"
+		        },
+				{
+		            title: "付款金额", field: "order_money"
+					,callback:function(ct,cd,val,k,m){
+						if(ct["order_money"]){
+						var o_money =ct["order_money"]/100
+						var a = num(o_money)
+						return a;
+				  }
+				}
+		        },
+				{
+		            title: "付款时间", field: "pay_time"
+		        },
+        {
+		      title: "", field: "order_code"
+					,callback:function(ct,cd,val,k,m){
+						if(ct["id"]){
+							var a=ct["order_code"]
+						return "<a style='display:none' style='color:#4e5051;text-decoration:none'>"+ct["id"]+"</a>"
+						}
+					}	
+		    }
+		    ]
+		});
+
+	//事件委托
+	$("#content").on("click","#audit>.dt-table-wrapper>.table>tbody>tr",function(){
+		var code = $(this).children().last().prev().children().html();
+    window.open("/manage/dataReport/dataDetail/"+code)
+	});
+});
+
+function SearchContent(){
+	var find=$("#audit").data("datatable");
+	if(!find.options.opost) find.options.opost=find.options.post||{};
+	find.options.post=$.extend(find.options.opost,{query:$("#searchtext").val()});
+	find.options.currentPage=1;
+	find.render();
+}
+//保留小数点后两位的方法
+function num(i) {
+	var n = i.toFixed(2);
+	return n
+}
+function picked(dp,obj){
+    var time = new Date(dp.cal.newdate.y, dp.cal.newdate.M - 1, dp.cal.newdate.d).getTime() + "";
+    time = time.substring(0, time.length - 3);
+    $(obj).attr("data-value", time);
+	var find=$("#audit").data("datatable")
+	if(!find.options.opost) find.options.opost=find.options.post||{};
+	find.options.post=$.extend(find.options.opost,{starttime:$("#starttime").attr("data-value"),endtime:$("#endtime").attr("data-value")});
+	find.options.currentPage=1
+	find.render();
+	
+	//全选按钮
+	var tdEle =document.getElementsByTagName('td');
+	var errorFlag =$("div").hasClass("alert-error");
+	if (tdEle[5]!=undefined){
+		console.log("!unde")
+		if (tdEle[5].innerHTML=="&nbsp;"){
+			$(".allSelect").addClass("disno");
+		}else{
+			$(".allSelect").removeClass("disno");
+		}
+	}else if (errorFlag){
+		console.log("errorFlag")
+		$(".allSelect").addClass("disno");
+	}else {
+		console.log("else")
+		$(".allSelect").removeClass("disno");
+	}
+}
+function oncleared(dp,obj){
+    $(obj).attr("data-value", "");
+	var find=$("#audit").data("datatable")
+	if(!find.options.opost) find.options.opost=find.options.post||{};
+	find.options.post=$.extend(find.options.opost,{starttime:$("#starttime").attr("data-value"),endtime:$("#endtime").attr("data-value")});
+	find.options.currentPage=1
+	find.render();
+	var tdEle =document.getElementsByTagName('td');
+	if (tdEle[5].innerHTML!="&nbsp;"){
+		$(".allSelect").removeClass("disno");
+	}else{
+		$(".allSelect").addClass("disno");
+	}
+}
+</script>
+</html>

+ 2 - 1
core/src/web/templates/manage/slider.html

@@ -9,8 +9,9 @@
 		<li id="count"  class="list-group-item"><a style=" font-weight:normal;" href="/manage/count"><i class="glyphicon glyphicon-signal"></i> <span>数据统计</span></a></li>
 		<li id="cauditbar"  class="list-group-item"><a style=" font-weight:normal;" href="/manage/caudit"><i class="glyphicon glyphicon-user"></i> <span>开发者认证</span></a></li>
 		<li id="message"  class="list-group-item"><a style=" font-weight:normal;" href="/manage/message/index"><i class="glyphicon glyphicon-comment"></i> <span>消息管理</span></a></li>
+    <li id="dataReportOrder"  class="list-group-item"><a style=" font-weight:normal;"  href="/manage/dataReportOrder/list"><i class="glyphicon glyphicon-download-alt"></i> <span>数据报告</span></a></li>
 		<li id="dataExportOrder"  class="list-group-item"><a style=" font-weight:normal;"  href="/manage/dataExportOrder/list"><i class="glyphicon glyphicon-download-alt"></i> <span>数据导出订单</span></a></li>
-        <li id="pcUndate"  class="list-group-item"><a style=" font-weight:normal;" onclick="pushVersion()"><i class="glyphicon glyphicon-level-up"></i> <span>PC助手版本更新</span></a></li>
+    <li id="pcUndate"  class="list-group-item"><a style=" font-weight:normal;" onclick="pushVersion()"><i class="glyphicon glyphicon-level-up"></i> <span>PC助手版本更新</span></a></li>
 		<!-- <li id="jydata"  class="list-group-item"><a style=" font-weight:normal;" href="/manage/data/index"><i class="glyphicon glyphicon-euro"></i> <span>剑鱼数据管理</span></a></li>
 		<li id="databack"  class="list-group-item"><a style=" font-weight:normal;" href="/manage/data/back"><i class="glyphicon glyphicon-euro"></i> <span>剑鱼备份数据</span></a></li> -->
 		<li id="sendMessage"  class="sendActive list-group-item" style="border-bottom-left-radius: 4px; border-bottom-right-radius: 4px;"><a style="font-weight:normal;"  data-toggle="collapse"