Files
stat_center/service/channelSer/settlementHelper.go
T
2026-05-20 16:13:58 +08:00

151 lines
4.3 KiB
Go

package channelSer
import (
"context"
"fmt"
"stat/api/proto"
"stat/common/utils"
"stat/middleware/define"
"stat/models/adminMod"
channelmod "stat/models/channelmod"
"stat/models/channelsettlementrecord"
"time"
"go.mongodb.org/mongo-driver/bson"
)
var (
SystemStartTime = time.Date(2020, time.January, 1, 0, 0, 0, 0, time.UTC)
)
func SettlementInfoToApplyRecord(src *channelsettlementrecord.ChannelSettlementRecord) *proto.ApplyFormRecord {
ret := &proto.ApplyFormRecord{
ID: src.ID,
Channel: src.Channel,
AppId: src.AppId,
BeginTime: src.BeginTime,
EndTime: src.EndTime,
TotalMoney: src.TotalMoney,
SettleMoney: src.SettleMoney,
Settlement: src.Settlement,
Wallet: src.Wallet,
PayMoney: src.PayMoney,
Usdt: src.Usdt,
Status: src.Status,
Remark: "",
Pictures: nil,
UpdatedAt: src.UpdatedAt,
CreatedAt: src.CreatedAt,
}
remark := ""
if len(src.OperateHistory) > 0 {
remark = src.OperateHistory[0].Remark
if len(src.OperateHistory) > 1 {
if remark == "" {
remark = src.OperateHistory[len(src.OperateHistory)-1].Remark
} else {
s := src.OperateHistory[len(src.OperateHistory)-1].Remark
if s != "" {
remark += " / " + s
}
}
}
ret.Pictures = src.OperateHistory[len(src.OperateHistory)-1].Pictures
}
ret.Remark = remark
return ret
}
func SettlementInfoListToApplyForm(lst channelsettlementrecord.ChannelSettlementRecordList) proto.ApplyFormRecordList {
res := make(proto.ApplyFormRecordList, 0)
for _, item := range lst {
a := SettlementInfoToApplyRecord(item)
res = append(res, a)
}
return res
}
func FenToYuanDisplay(fen int64) string {
return fmt.Sprintf("%.2f", float64(fen)/float64(100))
}
func IndentationDisplay(v int64) string {
return fmt.Sprintf("%.2f", float64(v)/float64(10000))
}
func CheckAndFixTime(startTime, endTime *time.Time) (*time.Time, *time.Time, error) {
var start, end *time.Time
// 开始时间和结束时间
if endTime == nil {
e := utils.BeginOfYesterday()
end = &e
} else {
end = endTime
}
if startTime == nil {
start = &SystemStartTime
} else {
start = startTime
}
//
if end.After(utils.BeginOfYesterday()) {
e := utils.BeginOfYesterday()
end = &e
}
if end.Before(*start) {
return nil, nil, fmt.Errorf("开始和结束的时间区间填写不正确")
}
return start, end, nil
}
func GetUpdateSettlementOperateItem(old channelsettlementrecord.ChannelSettlementRecord, update proto.SettlementInfoUpdate2,
accType define.ActType, account string, accountName string, images []string) channelsettlementrecord.SettlementOperateItem {
res := channelsettlementrecord.SettlementOperateItem{}
res.OperateTime = time.Now()
if update.Remark != nil {
res.Remark = *update.Remark
}
res.OperatorAccountType = accType
res.OperatorAccount = account
res.OperatorAccountName = accountName
res.BeforeStatus = old.Status
if update.Status != nil && *update.Status != old.Status {
res.AfterStatus = *update.Status
res.Content += fmt.Sprintf("状态改变:(%s => %s)\n", old.Status.String(), update.Status.String())
} else {
res.AfterStatus = old.Status
}
if update.Usdt != nil && *update.Usdt != old.Usdt {
res.Content += fmt.Sprintf("修改了打款金额(USDT):(%s => %s)\n", FenToYuanDisplay(old.Usdt), FenToYuanDisplay(*update.Usdt))
}
if update.PayMoney != nil && *update.PayMoney != old.PayMoney {
res.Content += fmt.Sprintf("修改了打款金额(CNY): (%s => %s)\n", FenToYuanDisplay(old.PayMoney), FenToYuanDisplay(*update.PayMoney))
}
if update.SettleMoney != nil && *update.SettleMoney != old.SettleMoney {
res.Content += fmt.Sprintf("修改了申请结算金额:(%s => %s)\n", FenToYuanDisplay(old.SettleMoney), FenToYuanDisplay(*update.SettleMoney))
}
for _, img := range images {
res.Pictures = append(res.Pictures, img)
}
return res
}
func GetAccountName(ctx context.Context, accType define.ActType, account string) (string, error) {
if accType == define.Admin {
if acc, err := adminMod.FindOneByAccount(ctx, account); err != nil {
return "", err
} else {
return acc.Name, nil
}
} else if accType == define.Channel {
if acc, err := channelmod.FindOneChannelInfo(ctx, bson.M{channelmod.FN.ChannelInfo.Channel: account}); err != nil {
return "", err
} else {
return acc.Channel, nil
}
} else {
return "", fmt.Errorf("error account type: %s", accType)
}
}