288 lines
9.8 KiB
Go
288 lines
9.8 KiB
Go
package controllers
|
|
|
|
import (
|
|
"fmt"
|
|
"math"
|
|
"merchant/internal/models/account"
|
|
merchant2 "merchant/internal/models/merchant"
|
|
order2 "merchant/internal/models/order"
|
|
"merchant/internal/models/road"
|
|
"merchant/internal/sys/enum"
|
|
"strconv"
|
|
|
|
"github.com/duke-git/lancet/v2/mathutil"
|
|
"github.com/duke-git/lancet/v2/slice"
|
|
)
|
|
|
|
type Index struct {
|
|
KeepSession
|
|
}
|
|
|
|
// ShowUI 首页
|
|
func (c *Index) ShowUI() {
|
|
us := c.GetSession(enum.UserSession)
|
|
u := us.(merchant2.MerchantInfo)
|
|
c.Data["userName"] = u.MerchantName
|
|
c.TplName = "index.html"
|
|
}
|
|
|
|
// LoadUserAccountInfo 加载用户账户金额信息
|
|
func (c *Index) LoadUserAccountInfo() {
|
|
us := c.GetSession(enum.UserSession)
|
|
u := us.(merchant2.MerchantInfo)
|
|
|
|
ac := account.GetAccountByUid(u.MerchantUid)
|
|
|
|
info := make(map[string]any)
|
|
// 账户余额
|
|
info["balanceAmt"] = pubMethod.FormatFloat64ToString(ac.Balance)
|
|
// // 可用余额
|
|
// info["settAmount"] = pubMethod.FormatFloat64ToString(ac.WaitAmount)
|
|
// // 冻结金额
|
|
// info["freezeAmt"] = pubMethod.FormatFloat64ToString(ac.FreezeAmount)
|
|
// // 押款金额
|
|
// info["amountFrozen"] = pubMethod.FormatFloat64ToString(ac.LoanAmount)
|
|
c.Data["json"] = info
|
|
c.ServeJSON(true)
|
|
}
|
|
|
|
// LoadCountOrder 加载总订单信息
|
|
func (c *Index) LoadCountOrder() {
|
|
ctx := c.Ctx.Request.Context()
|
|
us := c.GetSession(enum.UserSession)
|
|
u := us.(merchant2.MerchantInfo)
|
|
|
|
md := merchant2.GetMerchantDeployByUid(ctx, u.MerchantUid)
|
|
|
|
type orderInPayWay struct {
|
|
PayWayName string // 支付方式名
|
|
OrderCount int // 订单数
|
|
SucOrderCount int // 成功订单数
|
|
SucRate string // 成功率
|
|
}
|
|
|
|
ways := make([]orderInPayWay, len(md))
|
|
|
|
for k, v := range md {
|
|
in := make(map[string]string)
|
|
in["merchant_uid"] = u.MerchantUid
|
|
|
|
ways[k].PayWayName = road.GetRoadInfoByRoadUid(ctx, v.SingleRoadUid).ProductName
|
|
|
|
in["road_uid"] = v.SingleRoadUid
|
|
ways[k].OrderCount = order2.GetOrderLenByMap(in)
|
|
|
|
in["status"] = enum.SUCCESS
|
|
ways[k].SucOrderCount = order2.GetOrderLenByMap(in)
|
|
|
|
if ways[k].OrderCount == 0 {
|
|
ways[k].SucRate = "0"
|
|
continue
|
|
}
|
|
ways[k].SucRate = fmt.Sprintf("%0.4f", float64(ways[k].SucOrderCount)/float64(ways[k].OrderCount))
|
|
}
|
|
|
|
c.Data["json"] = ways
|
|
c.ServeJSON()
|
|
c.StopRun()
|
|
}
|
|
|
|
// LoadOrderCount 加载总订单数
|
|
func (c *Index) LoadOrderCount() {
|
|
ctx := c.Ctx.Request.Context()
|
|
|
|
us := c.GetSession(enum.UserSession)
|
|
u := us.(merchant2.MerchantInfo)
|
|
in := make(map[string]string)
|
|
out := make(map[string]any)
|
|
|
|
in["merchant_uid"] = u.MerchantUid
|
|
out["orders"] = order2.GetOrderLenByMap(in)
|
|
|
|
in["status"] = enum.SUCCESS
|
|
out["suc_orders"] = order2.GetOrderLenByMap(in)
|
|
|
|
{
|
|
supplierAll := 0.0
|
|
platformAll := 0.0
|
|
agentAll := 0.0
|
|
allAmount := 0.0
|
|
TadaySuccessNum := 0
|
|
datainfo := order2.GetOrderProfitByMap(ctx, in, -1, 0)
|
|
|
|
for _, v := range datainfo {
|
|
if v.Status != "success" {
|
|
continue
|
|
}
|
|
allAmount += v.FactAmount
|
|
supplierAll += v.SupplierProfit
|
|
platformAll += v.PlatformProfit
|
|
agentAll += v.AgentProfit
|
|
TadaySuccessNum += 1
|
|
}
|
|
|
|
out["TadaySupplierProfit"], _ = strconv.ParseFloat(fmt.Sprintf("%.3f", supplierAll), 64)
|
|
out["TadayPlatformProfit"], _ = strconv.ParseFloat(fmt.Sprintf("%.3f", platformAll), 64)
|
|
out["TadayAgentProfit"], _ = strconv.ParseFloat(fmt.Sprintf("%.3f", agentAll), 64)
|
|
out["TadayAllAmount"], _ = strconv.ParseFloat(fmt.Sprintf("%.3f", allAmount), 64)
|
|
|
|
out["TadaySuccessNum"] = TadaySuccessNum
|
|
out["TadayAllNum"] = len(datainfo)
|
|
}
|
|
|
|
if out["orders"].(int) == 0 {
|
|
out["suc_rate"] = 0
|
|
} else {
|
|
out["suc_rate"] = fmt.Sprintf("%0.4f", math.Round(float64(out["suc_orders"].(int))/float64(out["orders"].(int))*10000)/10000)
|
|
}
|
|
|
|
c.Data["json"] = out
|
|
c.ServeJSON()
|
|
}
|
|
|
|
// LoadUserPayWayUI 加载用户支付配置
|
|
func (c *Index) LoadUserPayWayUI() {
|
|
us := c.GetSession(enum.UserSession)
|
|
u := us.(merchant2.MerchantInfo)
|
|
|
|
c.Data["userName"] = u.MerchantName
|
|
c.TplName = "pay_way.html"
|
|
}
|
|
|
|
func (c *Index) LoadUserPayWay() {
|
|
ctx := c.Ctx.Request.Context()
|
|
us := c.GetSession(enum.UserSession)
|
|
|
|
u := us.(merchant2.MerchantInfo)
|
|
md := merchant2.GetMerchantDeployByUid(ctx, u.MerchantUid)
|
|
|
|
type payConfig struct {
|
|
No string `json:"no"` // 通道编号
|
|
Name string `json:"name"` // 产品名
|
|
Rate float64 `json:"rate"` // 通道费率
|
|
Status string `json:"status"` // 通道状态
|
|
TodayAmount float64 `json:"todayAmount"` // 今日订单金额
|
|
TodayNum int `json:"todayNum"` // 今日订单数
|
|
TodaySucNum int `json:"todaySucNum"` // 今日成功订单数
|
|
TodaySucAmount float64 `json:"todaySucAmount"` // 今日成功订单金额
|
|
YesterdayAmount float64 `json:"yesterdayAmount"` // 昨日订单金额
|
|
YesterdayNum int `json:"yesterdayNum"` // 昨日订单数
|
|
YesterdaySucNum int `json:"yesterdaySucNum"` // 昨日成功订单数
|
|
YesterdaySucAmount float64 `json:"yesterdaySucAmount"` // 昨日成功订单金额
|
|
TodaySucRate float64 `json:"todaySucRate"` // 今日成功率
|
|
YesterdaySucRate float64 `json:"yesterdaySucRate"` // 昨日成功率
|
|
TotalAmount float64 `json:"totalAmount"` // 总订单金额
|
|
TotalNum int `json:"totalNum"` // 总订单数
|
|
TotalSucNum int `json:"totalSucNum"` // 总成功订单数
|
|
TotalSucRate float64 `json:"totalSucRate"` // 总成功率
|
|
TotalSucAmount float64 `json:"totalSucAmount"` // 总成功订单金额
|
|
}
|
|
|
|
type TotalSummary struct {
|
|
TodayAmount float64 `json:"todayAmount"` // 今日订单金额
|
|
TodayNum int `json:"todayNum"` // 今日订单数
|
|
TodaySucNum int `json:"todaySucNum"` // 今日成功订单数
|
|
TodaySucAmount float64 `json:"todaySucAmount"` // 今日成功订单金额
|
|
YesterdayAmount float64 `json:"yesterdayAmount"` // 昨日订单金额
|
|
YesterdayNum int `json:"yesterdayNum"` // 昨日订单数
|
|
YesterdaySucNum int `json:"yesterdaySucNum"` // 昨日成功订单数
|
|
YesterdaySucAmount float64 `json:"yesterdaySucAmount"` // 昨日成功订单金额
|
|
TodaySucRate float64 `json:"todaySucRate"` // 今日成功率
|
|
YesterdaySucRate float64 `json:"yesterdaySucRate"` // 昨日成功率
|
|
TotalAmount float64 `json:"totalAmount"` // 总订单金额
|
|
TotalNum int `json:"totalNum"` // 总订单数
|
|
TotalSucNum int `json:"totalSucNum"` // 总成功订单数
|
|
TotalSucRate float64 `json:"totalSucRate"` // 总成功率
|
|
TotalSucAmount float64 `json:"totalSucAmount"` // 总成功订单金额
|
|
}
|
|
|
|
totalSummary := TotalSummary{}
|
|
|
|
ways := slice.Map(md, func(index int, item merchant2.MerchantDeployInfo) payConfig {
|
|
|
|
road_ := road.GetRoadInfoByRoadUid(ctx, item.SingleRoadUid)
|
|
config := payConfig{
|
|
No: item.SingleRoadUid,
|
|
Name: road_.RoadName,
|
|
Rate: item.RollRoadPlatformRate,
|
|
}
|
|
|
|
rates := slice.Map(item.PlatformRate(ctx), func(index int, item merchant2.ProfitMargin) float64 {
|
|
return item.Value
|
|
})
|
|
if len(rates) > 0 {
|
|
config.Rate = mathutil.Average(rates...)
|
|
}
|
|
|
|
summary := order2.GetSummaryByRoadAndMerchant(ctx, item.SingleRoadUid, u.MerchantUid)
|
|
if len(summary) == 0 {
|
|
return config
|
|
}
|
|
slice.ForEach(summary, func(index int, item order2.Summary) {
|
|
totalSummary.TotalAmount += item.TotalAmount
|
|
totalSummary.TotalNum += item.TotalNum
|
|
totalSummary.TotalSucNum += item.SuccessNum
|
|
totalSummary.TotalSucAmount += item.SuccessAmount
|
|
})
|
|
totalSummary.TodayAmount += summary[0].TotalAmount
|
|
totalSummary.TodayNum += summary[0].TotalNum
|
|
totalSummary.TodaySucNum += summary[0].SuccessNum
|
|
totalSummary.TodaySucAmount += summary[0].SuccessAmount
|
|
|
|
config.TodayAmount = summary[0].TotalAmount
|
|
config.TodayNum = summary[0].TotalNum
|
|
config.TodaySucNum = summary[0].SuccessNum
|
|
config.TodaySucAmount = summary[0].SuccessAmount
|
|
config.TodaySucRate = summary[0].Rate
|
|
|
|
if len(summary) > 1 {
|
|
totalSummary.YesterdayAmount += summary[1].TotalAmount
|
|
totalSummary.YesterdayNum += summary[1].TotalNum
|
|
totalSummary.YesterdaySucNum += summary[1].SuccessNum
|
|
totalSummary.YesterdaySucAmount += summary[1].SuccessAmount
|
|
|
|
config.YesterdayAmount = summary[1].TotalAmount
|
|
config.YesterdayNum = summary[1].TotalNum
|
|
config.YesterdaySucNum = summary[1].SuccessNum
|
|
config.YesterdaySucAmount = summary[1].SuccessAmount
|
|
config.YesterdaySucRate = summary[1].Rate
|
|
}
|
|
|
|
config.TotalAmount = mathutil.Sum(slice.Map(summary, func(index int, item order2.Summary) float64 {
|
|
return item.TotalAmount
|
|
})...)
|
|
config.TotalNum = mathutil.Sum(slice.Map(summary, func(index int, item order2.Summary) int {
|
|
return item.TotalNum
|
|
})...)
|
|
config.TotalSucNum = mathutil.Sum(slice.Map(summary, func(index int, item order2.Summary) int {
|
|
return item.SuccessNum
|
|
})...)
|
|
config.TotalSucAmount = mathutil.Sum(slice.Map(summary, func(index int, item order2.Summary) float64 {
|
|
return item.SuccessAmount
|
|
})...)
|
|
if config.TotalNum != 0 {
|
|
config.TotalSucRate = mathutil.RoundToFloat(float64(config.TotalSucNum)/float64(config.TotalNum), 4)
|
|
}
|
|
return config
|
|
})
|
|
|
|
if totalSummary.TodayNum != 0 {
|
|
totalSummary.TodaySucRate = mathutil.RoundToFloat(float64(totalSummary.TodaySucNum)/float64(totalSummary.TodayNum), 4)
|
|
}
|
|
if totalSummary.YesterdayNum != 0 {
|
|
totalSummary.YesterdaySucRate = mathutil.RoundToFloat(float64(totalSummary.YesterdaySucNum)/float64(totalSummary.YesterdayNum), 4)
|
|
}
|
|
if totalSummary.TotalNum != 0 {
|
|
totalSummary.TotalSucRate = mathutil.RoundToFloat(float64(totalSummary.TotalSucNum)/float64(totalSummary.TotalNum), 4)
|
|
}
|
|
response := struct {
|
|
Ways []payConfig `json:"ways"`
|
|
TotalSummary TotalSummary `json:"totalSummary"`
|
|
}{
|
|
Ways: ways,
|
|
TotalSummary: totalSummary,
|
|
}
|
|
c.Data["json"] = response
|
|
c.ServeJSON()
|
|
}
|