package handler import ( "fmt" "server/common" "server/db" "server/modules/backend/app" "server/modules/backend/values" "time" "github.com/gin-gonic/gin" ) type GetPayPerReq struct { Second int // 秒 } type GetPayPerResp struct { Per int64 SuccessCount int64 TotalCount int64 } // 查询支付成功率 func GetPayPer(c *gin.Context) { a := app.NewApp(c) defer func() { a.Response() }() req := new(GetPayPerReq) a.S(req) if req.Second <= 0 { a.Code = values.CodeParam return } resp := &GetPayPerResp{} a.Data = resp su := time.Now().Unix() - int64(req.Second) count := getPayCount(0, su, 0) successCount := getPaySuccessCount(0, su, 0) if count > 0 { resp.Per = successCount * 100 / count } resp.SuccessCount = successCount resp.TotalCount = count } // 获取付费总单数 func getPayCount(channel int, su, eu int64) (count int64) { channelSql := "" if channel > 0 { channelSql = fmt.Sprintf(` and channel_id = %d `, channel) } var start, end string if su > 0 { suStr := time.Unix(su, 0) start = fmt.Sprintf(" and created_at >= '%s'", suStr.Format("2006-01-02 15:04:05")) } if eu > 0 { euStr := time.Unix(eu, 0) end = fmt.Sprintf(" and created_at < '%s'", euStr.Format("2006-01-02 15:04:05")) } sql := fmt.Sprintf(`SELECT ifNull(count(*),0) as count from recharge_order WHERE event = %d %s %s %s`, common.CurrencyEventReCharge, start, end, channelSql) db.Mysql().QueryCountBySql(sql, &count) return } // 获取付费成功总单数 func getPaySuccessCount(channel int, su, eu int64) (count int64) { channelSql := "" if channel > 0 { channelSql = fmt.Sprintf(` and channel_id = %d `, channel) } var start, end string if su > 0 { suStr := time.Unix(su, 0) start = fmt.Sprintf(" and created_at >= '%s'", suStr.Format("2006-01-02 15:04:05")) } if eu > 0 { euStr := time.Unix(eu, 0) end = fmt.Sprintf(" and created_at < '%s'", euStr.Format("2006-01-02 15:04:05")) } sql := fmt.Sprintf(`SELECT ifNull(count(*),0) as count from recharge_order WHERE event = %d and status = %d %s %s %s`, common.CurrencyEventReCharge, common.StatusROrderPay, start, end, channelSql) db.Mysql().QueryCountBySql(sql, &count) return }