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) } }