|
@@ -1,10 +1,13 @@
|
|
package manage
|
|
package manage
|
|
|
|
|
|
import (
|
|
import (
|
|
- "errors"
|
|
|
|
"fmt"
|
|
"fmt"
|
|
|
|
+ "github.com/go-xweb/log"
|
|
|
|
+ "github.com/pkg/errors"
|
|
|
|
+ "net/url"
|
|
util "qfw/coreutil"
|
|
util "qfw/coreutil"
|
|
qutil "qfw/util"
|
|
qutil "qfw/util"
|
|
|
|
+ "qfw/util/redis"
|
|
"strings"
|
|
"strings"
|
|
"time"
|
|
"time"
|
|
|
|
|
|
@@ -13,65 +16,86 @@ import (
|
|
|
|
|
|
type DataReportOrder struct {
|
|
type DataReportOrder struct {
|
|
*xweb.Action
|
|
*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+)"` //三级页
|
|
|
|
|
|
+ datareportList xweb.Mapper `xweb:"/manage/dataReport/list"` //数据报告列表
|
|
|
|
+ edit xweb.Mapper `xweb:"/manage/dataReportOrder/(\\w+)"` //数据列表编辑或新建
|
|
|
|
+ pageing xweb.Mapper `xweb:"/manage/dataReport/p"` //js翻页请求
|
|
|
|
+ dataDetail xweb.Mapper `xweb:"/manage/dataReport/dataDetail"` //数据报告详情
|
|
|
|
+ createDatereport xweb.Mapper `xweb:"/manage/dataReport/create"` //创建数据报告
|
|
|
|
+ deleteDatereport xweb.Mapper `xweb:"/manage/dataReport/delete"` //删除数据报告
|
|
|
|
+
|
|
|
|
+ orderList xweb.Mapper `xweb:"/manage/dataReportOrder/list"` //数据报告列表页面
|
|
|
|
+ orderListData xweb.Mapper `xweb:"/manage/dataReportOrder/listdata"` //数据报告列表页数据
|
|
|
|
+ //orderDetail xweb.Mapper `xweb:"/manage/dataReportOrder/Detailhtml"` //数据报告详情页面
|
|
|
|
+ orderDetailData xweb.Mapper `xweb:"/manage/dataReportOrder/Detaildata"` //数据报告详情页面数据
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
func init() {
|
|
func init() {
|
|
xweb.AddAction(&DataReportOrder{})
|
|
xweb.AddAction(&DataReportOrder{})
|
|
}
|
|
}
|
|
|
|
|
|
-func (d *DataReportOrder) OrderList() error {
|
|
|
|
|
|
+func (d *DataReportOrder) DatareportList() error {
|
|
return d.Render("/manage/datareport/index.html")
|
|
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")
|
|
|
|
|
|
+func (d *DataReportOrder) OrderList() error {
|
|
|
|
+ return d.Render("/manage/datareport/orderlist.html")
|
|
|
|
+}
|
|
|
|
+//func (d *DataReportOrder) OrderDetail() error {
|
|
|
|
+// return d.Render("/manage/datareport/orderdetail.html")
|
|
|
|
+//}
|
|
|
|
+
|
|
|
|
+func (d *DataReportOrder) Edit(optiontype string) error {
|
|
|
|
+ if optiontype == "edit" {
|
|
|
|
+ edit_id := d.GetString("id")
|
|
|
|
+ d.T["edit_id"] = edit_id
|
|
|
|
+ d.T["type"] = "edit"
|
|
|
|
+ return d.Render("/manage/datareport/edit.html", &d.T)
|
|
|
|
+ } else {
|
|
|
|
+ d.T["type"] = "create"
|
|
|
|
+ return d.Render("/manage/datareport/edit.html", &d.T)
|
|
}
|
|
}
|
|
- 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"] = qutil.Float64All((*m)["order_money"]) / 100
|
|
|
|
- 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) DataDetail() {
|
|
|
|
+ M := make(map[string]interface{})
|
|
|
|
+ reportId := d.GetString("reportid")
|
|
|
|
+ if reportId != "" {
|
|
|
|
+ res := util.Mysql.FindOne("jy_datareport", map[string]interface{}{
|
|
|
|
+ "report_id": reportId,
|
|
|
|
+ }, "", "")
|
|
|
|
+ if res != nil {
|
|
|
|
+ M["data"] = (*res)
|
|
|
|
+ M["status"] = "success"
|
|
|
|
+ } else {
|
|
|
|
+ log.Println("%s未查到数据", reportId)
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ M["data"] = ""
|
|
|
|
+ M["status"] = "fail"
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ d.ServeJson(M)
|
|
}
|
|
}
|
|
|
|
|
|
func (d *DataReportOrder) Pageing() {
|
|
func (d *DataReportOrder) Pageing() {
|
|
- startTime, _ := d.GetInt("starttime")
|
|
|
|
- endTime, _ := d.GetInt("endtime")
|
|
|
|
query := d.GetString("query")
|
|
query := d.GetString("query")
|
|
currentPage, _ := d.GetInteger("currentPage")
|
|
currentPage, _ := d.GetInteger("currentPage")
|
|
perPage, _ := d.GetInteger("perPage")
|
|
perPage, _ := d.GetInteger("perPage")
|
|
|
|
|
|
- sql := " from jy_datareport_order where pay_money is not null "
|
|
|
|
|
|
+ sql := " from jy_datareport where isdelete=0"
|
|
val := []interface{}{}
|
|
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).AddDate(0, 0, 1).Format(qutil.Date_Full_Layout))
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if query != "" {
|
|
if query != "" {
|
|
- sql = sql + " and (user_name like ? or user_phone like ? )"
|
|
|
|
- val = append(val, "%"+query+"%", "%"+query+"%")
|
|
|
|
|
|
+ sql = sql + " and (report_name like ? )"
|
|
|
|
+ val = append(val, "%"+query+"%")
|
|
}
|
|
}
|
|
|
|
|
|
countQuery := "select count(*) " + sql
|
|
countQuery := "select count(*) " + sql
|
|
count := util.Mysql.QueryCount(countQuery, val...)
|
|
count := util.Mysql.QueryCount(countQuery, val...)
|
|
//log.Println(countQuery, "count---", count)
|
|
//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)
|
|
|
|
|
|
+ listQuery := "select report_id,end_time,start_time,report_status,report_name,i_price " + sql + fmt.Sprintf(" order by create_time desc limit %d,%d", (currentPage-1)*perPage, perPage)
|
|
res := util.Mysql.Query(listQuery, val...)
|
|
res := util.Mysql.Query(listQuery, val...)
|
|
//log.Println("list---", len(*res))
|
|
//log.Println("list---", len(*res))
|
|
d.ServeJson(map[string]interface{}{
|
|
d.ServeJson(map[string]interface{}{
|
|
@@ -80,3 +104,270 @@ func (d *DataReportOrder) Pageing() {
|
|
"totalRows": count,
|
|
"totalRows": count,
|
|
})
|
|
})
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+func (d *DataReportOrder) CreateDatereport() {
|
|
|
|
+
|
|
|
|
+ reportName := d.GetString("reportName")
|
|
|
|
+ i_price, _ := d.GetInt("i_price")
|
|
|
|
+ s_price, _ := d.GetInt("s_price")
|
|
|
|
+ starttime := d.GetString("starttime")
|
|
|
|
+ endtime := d.GetString("endtime")
|
|
|
|
+ report_pdf := d.GetString("report_pdf")
|
|
|
|
+ content := d.GetString("content")
|
|
|
|
+ optiontype := d.GetString("optiontype")
|
|
|
|
+ cover_name := d.GetString("covername")
|
|
|
|
+ cover_url := d.GetString("cover_url")
|
|
|
|
+ report_file_name := d.GetString("report_file_name")
|
|
|
|
+ r := func() *FuncResult {
|
|
|
|
+ //数据校验
|
|
|
|
+ if reportName == "" || i_price == 0 || starttime == "" || endtime == "" ||
|
|
|
|
+ report_pdf == "" || content == "" || cover_url == "" || report_file_name == "" || cover_name == "" {
|
|
|
|
+ return &FuncResult{false, errors.New("参数不完整"), nil}
|
|
|
|
+ }
|
|
|
|
+ starttime, err := time.ParseInLocation(qutil.Date_Full_Layout, starttime, time.Local)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return &FuncResult{false, errors.New("数据报告时间异常"), nil}
|
|
|
|
+ }
|
|
|
|
+ endtime, err := time.ParseInLocation(qutil.Date_Full_Layout, endtime, time.Local)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return &FuncResult{false, errors.New("数据报告时间异常"), nil}
|
|
|
|
+ }
|
|
|
|
+ if endtime.Before(starttime) {
|
|
|
|
+ return &FuncResult{false, errors.New("时间异常"), nil}
|
|
|
|
+ }
|
|
|
|
+ //
|
|
|
|
+ d1_content, err := url.QueryUnescape(content)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return &FuncResult{false, errors.New("数据报告内容解析异常"), nil}
|
|
|
|
+ }
|
|
|
|
+ content, err := url.QueryUnescape(d1_content)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return &FuncResult{false, errors.New("数据报告内容解析异常"), nil}
|
|
|
|
+ }
|
|
|
|
+ if !(i_price > 0) {
|
|
|
|
+ return &FuncResult{false, errors.New("数据报告售价金额异常"), nil}
|
|
|
|
+ }
|
|
|
|
+ if(s_price>0){
|
|
|
|
+ if (i_price > s_price) {
|
|
|
|
+ return &FuncResult{false, errors.New("售价金额不能高于原价"), nil}
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ s_price = i_price
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //数据校验
|
|
|
|
+ mData := map[string]interface{}{
|
|
|
|
+ "report_name": reportName,
|
|
|
|
+ "i_price": i_price,
|
|
|
|
+ "s_price": s_price,
|
|
|
|
+ "start_time": starttime.Unix(),
|
|
|
|
+ "end_time": endtime.Unix(),
|
|
|
|
+ "create_time": time.Now().Unix(),
|
|
|
|
+ "s_desrice": content,
|
|
|
|
+ "report_file_name": report_file_name,
|
|
|
|
+ "cover_url": cover_url,
|
|
|
|
+ "report_url": report_pdf,
|
|
|
|
+ "cover_name": cover_name,
|
|
|
|
+ "isdelete": 0,
|
|
|
|
+ }
|
|
|
|
+ if starttime.Before(time.Now()) {
|
|
|
|
+ if endtime.Before(time.Now()){
|
|
|
|
+ mData["report_status"] = 2
|
|
|
|
+ }else{
|
|
|
|
+ mData["report_status"] = 1
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ mData["report_status"] = 0
|
|
|
|
+ }
|
|
|
|
+ if optiontype != "" && optiontype == "create" {
|
|
|
|
+ res := util.Mysql.Insert("jy_datareport", mData)
|
|
|
|
+ if res <= 0 {
|
|
|
|
+ return &FuncResult{false, errors.New("增加数据报告失败"), nil}
|
|
|
|
+ } else {
|
|
|
|
+ return &FuncResult{true, nil, nil}
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ report_id := d.GetString("reportid")
|
|
|
|
+ if report_id != "" {
|
|
|
|
+ q := util.Mysql.Update("jy_datareport", map[string]interface{}{
|
|
|
|
+ "report_id": report_id,
|
|
|
|
+ }, mData)
|
|
|
|
+ if !q {
|
|
|
|
+ return &FuncResult{false, errors.New("数据报告编辑更新失败"), nil}
|
|
|
|
+ } else {
|
|
|
|
+ key := "datareport_detail_" + report_id
|
|
|
|
+ redis.Del("other", key)
|
|
|
|
+ return &FuncResult{true, nil, nil}
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ return &FuncResult{false, errors.New("数据报告id为空"), nil}
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }()
|
|
|
|
+ if r.Err != nil {
|
|
|
|
+ log.Printf("Create err:%v\n", r.Err.Error())
|
|
|
|
+ }
|
|
|
|
+ d.ServeJson(r.Format())
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+func (d *DataReportOrder)DeleteDatereport(){
|
|
|
|
+ userId := d.GetSession("userId")
|
|
|
|
+ if userId!=""{
|
|
|
|
+ r := func() *FuncResult{
|
|
|
|
+ report_id := d.GetString("report_id")
|
|
|
|
+ if report_id !=""{
|
|
|
|
+ mData := make(map[string]interface{})
|
|
|
|
+ mData["report_id"] = report_id
|
|
|
|
+ query_status:=util.Mysql.FindOne("jy_datareport",mData,"report_status","")
|
|
|
|
+ if query_status !=nil{
|
|
|
|
+ if (*query_status)["report_status"] == 1{
|
|
|
|
+ return &FuncResult{false,errors.New("已上架数据不能删除"),nil}
|
|
|
|
+ }else{
|
|
|
|
+ res :=util.Mysql.Update("jy_datareport",mData, map[string]interface{}{
|
|
|
|
+ "isdelete":1,
|
|
|
|
+ })
|
|
|
|
+ //通过课程id查询该课程相关的订单
|
|
|
|
+ var updateSql = `UPDATE dataexport_order SET order_status = -2 WHERE order_status = 0 AND product_type = '数据报告' AND filter_id = '` + report_id + `'`
|
|
|
|
+ go util.Mysql.UpdateOrDeleteBySql(updateSql)
|
|
|
|
+ if res{
|
|
|
|
+ return &FuncResult{true,nil,nil}
|
|
|
|
+ }else{
|
|
|
|
+ log.Println("数据删除失败",report_id)
|
|
|
|
+ return &FuncResult{true,errors.New("数据删除失败"),nil}
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }else{
|
|
|
|
+ return &FuncResult{false,errors.New("数据报告不存在"),nil}
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }else{
|
|
|
|
+ return &FuncResult{false,errors.New("数据报告id为空"),nil}
|
|
|
|
+ }
|
|
|
|
+ }()
|
|
|
|
+ if r.Err != nil {
|
|
|
|
+ log.Printf("delete err:%v\n", r.Err.Error())
|
|
|
|
+ }
|
|
|
|
+ d.ServeJson(r.Format())
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (d *DataReportOrder)OrderListData(){
|
|
|
|
+ currentPage, _ := d.GetInteger("currentPage")
|
|
|
|
+ perPage, _ := d.GetInteger("perPage")
|
|
|
|
+
|
|
|
|
+ c_status := d.GetString("strSel1") //订单状态 0:未支付 1:已支付 -1:已删除 -2:已取消
|
|
|
|
+ c_type := d.GetString("strSel2") //请求类型 0:订单编号 1:报告名称 2:邮箱
|
|
|
|
+ c_content := d.GetString("strCont")
|
|
|
|
+ var sql = ``
|
|
|
|
+ var c_sql = "SELECT d.report_name,e.user_mail,e.order_money,e.create_time,e.order_status,e.applybill_status,e.order_code from dataexport_order e INNER JOIN jy_datareport d ON e.`filter_id` = d.`report_id` AND e.`product_type`="+"\"数据报告\" "
|
|
|
|
+ var c_sql_c = "SELECT count(*) FROM dataexport_order e INNER JOIN jy_datareport d ON e.`filter_id` = d.`report_id` WHERE e.product_type = '数据报告' "
|
|
|
|
+ if c_status != "" {
|
|
|
|
+ sql += `AND e.order_status =` + fmt.Sprint(c_status)
|
|
|
|
+ } else {
|
|
|
|
+ c_status = "-1"
|
|
|
|
+ sql += `AND e.order_status !=` + fmt.Sprint(c_status)
|
|
|
|
+ }
|
|
|
|
+ if c_type == "1" {
|
|
|
|
+ sql += ` AND d.report_name like '%` + c_content + `%'`
|
|
|
|
+ } else if c_type == "0" {
|
|
|
|
+ sql += ` AND e.order_code ='` + c_content + `'`
|
|
|
|
+ } else if c_type == "2" {
|
|
|
|
+ sql += ` AND e.user_mail like '%` + c_content + `%'`
|
|
|
|
+ }
|
|
|
|
+ c_sql = c_sql + sql
|
|
|
|
+ c_sql += ` order by e.create_time desc limit ` + fmt.Sprint((currentPage-1)*perPage) + `,` + fmt.Sprint(perPage)
|
|
|
|
+ log.Println("sql:", c_sql)
|
|
|
|
+ rData := util.Mysql.SelectBySql(c_sql)
|
|
|
|
+
|
|
|
|
+ c_sql_c = c_sql_c + sql
|
|
|
|
+ count := util.Mysql.CountBySql(c_sql_c)
|
|
|
|
+ d.ServeJson(map[string]interface{}{
|
|
|
|
+ "currentPage": currentPage,
|
|
|
|
+ "data": rData,
|
|
|
|
+ "totalRows": count,
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+func (d *DataReportOrder)OrderDetailData()error{
|
|
|
|
+ qMap := map[string]interface{}{}
|
|
|
|
+ order_code := d.GetString("code")
|
|
|
|
+ table := ""
|
|
|
|
+ qMap["order_code"] = order_code
|
|
|
|
+ res := util.Mysql.FindOne("dataexport_order", qMap, "", "create_time desc")
|
|
|
|
+ if len(*res) > 0 {
|
|
|
|
+ pay_time := qutil.ObjToString((*res)["pay_time"])
|
|
|
|
+ orderMoney := qutil.Float64All((*res)["order_money"]) / 100
|
|
|
|
+ order_status := qutil.IntAll((*res)["order_status"])
|
|
|
|
+ payway := qutil.ObjToString((*res)["pay_way"])
|
|
|
|
+ original_price := qutil.Int64All((*res)["original_price"])
|
|
|
|
+ if pay_time != "" && original_price != 0 {
|
|
|
|
+ (*res)["order_status"] = "已支付"
|
|
|
|
+ if order_status == -2 {
|
|
|
|
+ (*res)["order_status"] = "已取消"
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if order_status == -2 {
|
|
|
|
+ (*res)["order_status"] = "已取消"
|
|
|
|
+ } else if order_status == 0 {
|
|
|
|
+ (*res)["order_status"] = "未支付"
|
|
|
|
+ } else if order_status == 1 {
|
|
|
|
+ (*res)["order_status"] = "已支付"
|
|
|
|
+ }
|
|
|
|
+ if original_price == 0 {
|
|
|
|
+ if order_status == 1 {
|
|
|
|
+ (*res)["order_status"] = "已支付"
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ (*res)["order_money"] = orderMoney
|
|
|
|
+ if strings.Contains(payway, "wx") {
|
|
|
|
+ (*res)["pay_way"] = "微信"
|
|
|
|
+ table = "weixin_pay"
|
|
|
|
+ } else if strings.Contains(payway, "ali") {
|
|
|
|
+ (*res)["pay_way"] = "支付宝"
|
|
|
|
+ table = "ali_pay"
|
|
|
|
+ }
|
|
|
|
+ if original_price != 0 {
|
|
|
|
+ wxPayMap := map[string]interface{}{}
|
|
|
|
+ wxPayMap["out_trade_no"] = (*res)["out_trade_no"]
|
|
|
|
+ if (table!=""){
|
|
|
|
+ wxpay := util.Mysql.FindOne(table, wxPayMap, "transaction_id", "create_time desc")
|
|
|
|
+ log.Println("wxpay",wxpay)
|
|
|
|
+ if wxpay != nil {
|
|
|
|
+ d.T["transaction_id"] = qutil.ObjToString((*wxpay)["transaction_id"])
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ //申请发票
|
|
|
|
+ applybill_status := qutil.IntAll((*res)["applybill_status"])
|
|
|
|
+ if applybill_status == 1 {
|
|
|
|
+ (*res)["applybill_status"] = "已申请"
|
|
|
|
+ } else if applybill_status == 0 {
|
|
|
|
+ (*res)["applybill_status"] = "未申请"
|
|
|
|
+ }
|
|
|
|
+ data := util.Mysql.Find("invoice", qMap, "", "create_time", 0, 0)
|
|
|
|
+ if *data != nil && len(*data) != 0 {
|
|
|
|
+ (*res)["invoice"] = *data
|
|
|
|
+ }
|
|
|
|
+ //0个人 1单位
|
|
|
|
+ applybill_type := qutil.IntAll((*res)["applybill_type"])
|
|
|
|
+ if applybill_type == 1 {
|
|
|
|
+ (*res)["applybill_type"] = "单位"
|
|
|
|
+ } else {
|
|
|
|
+ (*res)["applybill_type"] = "个人"
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ d.T["res"] = *res
|
|
|
|
+ return d.Render("/manage/datareport/orderdetail.html")
|
|
|
|
+
|
|
|
|
+}
|