Files
kami_boss/internal/models/order/order_profit_info.go
danial 86326c321f refactor(internal): 优化订单利润信息获取逻辑
- 移除了 getController.go 中的中文注释,统一为英文注释
- 删除了 getController.go 中未使用的代码注释
- 在 order_profit_info.go 中,将并行处理改为串行处理,以简化逻辑
- 移除了 order_profit_info.go 中的冗余注释
2025-03-03 23:03:29 +08:00

160 lines
4.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package order
import (
"github.com/duke-git/lancet/v2/slice"
"strings"
"time"
)
import (
"github.com/beego/beego/v2/client/orm"
"github.com/beego/beego/v2/core/logs"
)
type OrderProfitInfo struct {
Id int
MerchantName string
MerchantUid string
AgentName string
AgentUid string
PayProductCode string
PayProductName string
PayTypeCode string
PayTypeName string
Status string
MerchantOrderId string
BankOrderId string
BankTransId string
OrderAmount float64
ShowAmount float64
FactAmount float64 //实际支付金额
UserInAmount float64
SupplierRate float64
PlatformRate float64
AgentRate float64
AllProfit float64
SupplierProfit float64
PlatformProfit float64
AgentProfit float64
UpdateTime time.Time
CreateTime time.Time
}
const ORDER_PROFIT_INFO = "order_profit_info"
func GetOrderProfitByBankOrderId(bankOrderId string) OrderProfitInfo {
o := orm.NewOrm()
var orderProfit OrderProfitInfo
_, err := o.QueryTable(ORDER_PROFIT_INFO).Filter("bank_order_id", bankOrderId).Limit(1).All(&orderProfit)
if err != nil {
logs.Error("GetOrderProfitByBankOrderId fail", err)
}
return orderProfit
}
func GetOrderProfitListByBankOrderIdList(bankOrderIdList []string) []OrderProfitInfo {
o := orm.NewOrm()
orderProfitList := make([]OrderProfitInfo, 0)
if len(bankOrderIdList) == 0 {
return orderProfitList
}
bankOrderIdList = slice.Unique(bankOrderIdList)
slice.ForEach(slice.Chunk(bankOrderIdList, 100), func(index int, item []string) {
tmpOrderProfitList := make([]OrderProfitInfo, 0)
_, err := o.QueryTable(ORDER_PROFIT_INFO).Filter("bank_order_id__in", item).All(&tmpOrderProfitList)
if err != nil {
logs.Error("GetOrderProfitByBankOrderId fail", err)
return
}
orderProfitList = append(orderProfitList, tmpOrderProfitList...)
})
return orderProfitList
}
func GetAllOrderProfit(params map[string]string) []OrderProfitInfo {
o := orm.NewOrm()
var orderProfit []OrderProfitInfo
qs := o.QueryTable(ORDER_PROFIT_INFO)
for k, v := range params {
if len(v) > 0 {
qs = qs.Filter(k, v)
}
}
_, err := qs.RelatedSel().All(&orderProfit)
if err != nil {
logs.Error("GetOrderProfitByBankOrderId fail", err)
}
return orderProfit
}
func GetOrderProfitLenByMap(params map[string]interface{}) int {
o := orm.NewOrm()
qs := o.QueryTable(ORDER_PROFIT_INFO)
for k, v := range params {
switch v.(type) {
case string:
if len(v.(string)) > 0 {
qs = qs.Filter(k, v)
}
default:
qs = qs.Filter(k, v)
}
}
cnt, _ := qs.Limit(-1).Count()
return int(cnt)
}
func GetOrderProfitByMap(params map[string]interface{}, display, offset int) []OrderProfitInfo {
o := orm.NewOrm()
var orderProfitInfoList []OrderProfitInfo
qs := o.QueryTable(ORDER_PROFIT_INFO)
for k, v := range params {
switch v.(type) {
case string:
if len(v.(string)) > 0 {
qs = qs.Filter(k, v)
}
default:
qs = qs.Filter(k, v)
}
}
_, err := qs.Limit(display, offset).OrderBy("-update_time").All(&orderProfitInfoList)
if err != nil {
logs.Error("get order by map fail: ", err)
}
return orderProfitInfoList
}
func GetPlatformProfitByMap(params map[string]string) []PlatformProfit {
o := orm.NewOrm()
cond := "select merchant_name, agent_name, pay_product_name as supplier_name, pay_type_name, sum(fact_amount) as order_amount, count(1) as order_count, " +
"sum(platform_profit) as platform_profit, sum(agent_profit) as agent_profit from " + ORDER_PROFIT_INFO + " where status='success' "
flag := false
for k, v := range params {
if len(v) > 0 {
if flag {
cond += " and"
}
if strings.Contains(k, "create_time__gte") {
cond = cond + " create_time>='" + v + "'"
} else if strings.Contains(k, "create_time__lte") {
cond = cond + " create_time<='" + v + "'"
} else {
cond = cond + " " + k + "='" + v + "'"
}
flag = true
}
}
logs.Info(cond)
var platformProfitList []PlatformProfit
_, err := o.Raw(cond).QueryRows(&platformProfitList)
if err != nil {
logs.Error("get platform profit by map fail:", err)
}
return platformProfitList
}