dongfeng-pay/gateway/models/order/order_info.go

223 lines
6.2 KiB
Go

/***************************************************
** @Desc : This file for ...
** @Time : 2019/10/28 10:15
** @Author : yuebin
** @File : order_info
** @Last Modified by : yuebin
** @Last Modified time: 2019/10/28 10:15
** @Software: GoLand
****************************************************/
package order
import (
"fmt"
"github.com/beego/beego/v2/client/orm"
"github.com/beego/beego/v2/core/logs"
"strconv"
)
type OrderInfo struct {
Id int
ShopName string //商品名称
OrderPeriod string //订单有效时间
MerchantOrderId string //商户订单id
BankOrderId string //本系统订单id
BankTransId string //上游流水id
OrderAmount float64 //订单提交的金额
ShowAmount float64 //待支付的金额
FactAmount float64 //用户实际支付金额
RollPoolCode string //轮询池编码
RollPoolName string //轮询池名臣
RoadUid string //通道标识
RoadName string //通道名称
PayProductName string //上游支付公司的名称
PayProductCode string //上游支付公司的编码代号
PayTypeCode string //支付产品编码
PayTypeName string //支付产品名称
OsType string //操作系统类型
Status string //订单支付状态
Refund string //退款状态
RefundTime string //退款操作时间
Freeze string //冻结状态
FreezeTime string //冻结时间
Unfreeze string //是否已经解冻
UnfreezeTime string //解冻时间
ReturnUrl string //支付完跳转地址
NotifyUrl string //下游回调地址
MerchantUid string //商户id
MerchantName string //商户名称
AgentUid string //该商户所属代理
AgentName string //该商户所属代理名称
UpdateTime string
CreateTime string
}
const ORDER_INFO = "order_info"
func InsertOrder(orderInfo OrderInfo) bool {
o := orm.NewOrm()
_, err := o.Insert(&orderInfo)
if err != nil {
logs.Error("insert order info fail: ", err)
return false
}
return true
}
func OrderNoIsEixst(orderId string) bool {
o := orm.NewOrm()
exits := o.QueryTable(ORDER_INFO).Filter("merchant_order_id", orderId).Exist()
return exits
}
func BankOrderIdIsEixst(bankOrderId string) bool {
o := orm.NewOrm()
exists := o.QueryTable(ORDER_INFO).Filter("bank_order_id", bankOrderId).Exist()
return exists
}
func GetOrderLenByMap(params map[string]string) int {
o := orm.NewOrm()
qs := o.QueryTable(ORDER_INFO)
for k, v := range params {
if len(v) > 0 {
qs = qs.Filter(k, v)
}
}
cnt, _ := qs.Limit(-1).Count()
return int(cnt)
}
func GetOrderByMap(params map[string]string, display, offset int) []OrderInfo {
o := orm.NewOrm()
var orderInfoList []OrderInfo
qs := o.QueryTable(ORDER_INFO)
for k, v := range params {
if len(v) > 0 {
qs = qs.Filter(k, v)
}
}
_, err := qs.Limit(display, offset).OrderBy("-update_time").All(&orderInfoList)
if err != nil {
logs.Error("get order by map fail: ", err)
}
return orderInfoList
}
func GetSuccessRateByMap(params map[string]string) string {
o := orm.NewOrm()
qs := o.QueryTable(ORDER_INFO)
for k, v := range params {
if len(v) > 0 {
qs = qs.Filter(k, v)
}
}
successRate := "0%"
allCount, _ := qs.Limit(-1).Count()
successCount, _ := qs.Filter("status", "success").Limit(-1).Count()
if allCount == 0 {
return successRate
}
tmp := float64(successCount) / float64(allCount) * 100
successRate = fmt.Sprintf("%.1f", tmp)
return successRate + "%"
}
func GetAllAmountByMap(params map[string]string) float64 {
o := orm.NewOrm()
condition := "select sum(order_amount) as allAmount from order_info "
for _, v := range params {
if len(v) > 0 {
condition = condition + "where "
break
}
}
flag := false
if params["create_time__gte"] != "" {
flag = true
condition = condition + " create_time >= '" + params["create_time__gte"] + "'"
}
if params["create_time__lte"] != "" {
if flag {
condition = condition + " and "
}
condition = condition + " create_time <= '" + params["create_time__lte"] + "'"
}
if params["merchant_name__icontains"] != "" {
if flag {
condition = condition + " and "
}
condition = condition + "merchant_name like %'" + params["merchant_name__icontains"] + "'% "
}
if params["merchant_order_id"] != "" {
if flag {
condition = condition + " and "
}
condition = condition + " merchant_order_id = '" + params["merchant_order_id"] + "'"
}
if params["bank_order_id"] != "" {
if flag {
condition = condition + " and "
}
condition = condition + " bank_order_id = '" + params["bank_order_id"] + "'"
}
if params["status"] != "" {
if flag {
condition = condition + " and "
}
condition = condition + "status = '" + params["status"] + "'"
}
if params["pay_product_code"] != "" {
if flag {
condition = condition + " and "
}
condition = condition + "pay_product_code = " + params["pay_product_code"] + "'"
}
if params["pay_type_code"] != "" {
if flag {
condition = condition + " and "
}
condition = condition + "pay_type_code = " + params["pay_type_code"]
}
logs.Info("get order amount str = ", condition)
var maps []orm.Params
allAmount := 0.00
num, err := o.Raw(condition).Values(&maps)
if err == nil && num > 0 {
allAmount, _ = strconv.ParseFloat(maps[0]["allAmount"].(string), 64)
}
return allAmount
}
func GetOrderByBankOrderId(bankOrderId string) OrderInfo {
o := orm.NewOrm()
var orderInfo OrderInfo
_, err := o.QueryTable(ORDER_INFO).Filter("bank_order_id", bankOrderId).Limit(1).All(&orderInfo)
if err != nil {
logs.Error("get order info by bankOrderId fail: ", err)
}
return orderInfo
}
func GetOrderByMerchantOrderId(merchantOrderId string) OrderInfo {
o := orm.NewOrm()
var orderInfo OrderInfo
_, err := o.QueryTable(ORDER_INFO).Filter("merchant_order_id", merchantOrderId).Limit(1).All(&orderInfo)
if err != nil {
logs.Error("get order by merchant_order_id: ", err.Error())
}
return orderInfo
}
func GetOneOrder(bankOrderId string) OrderInfo {
o := orm.NewOrm()
var orderInfo OrderInfo
_, err := o.QueryTable(ORDER_INFO).Filter("bank_order_id", bankOrderId).Limit(1).All(&orderInfo)
if err != nil {
logs.Error("get one order fail: ", err)
}
return orderInfo
}