forked from all_user/stat_center
151 lines
4.3 KiB
Go
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)
|
|
}
|
|
}
|