增加导出-提现记录

This commit is contained in:
2023-11-13 16:22:24 +08:00
parent b0db2dd29a
commit d05ea66f01
7 changed files with 385 additions and 133 deletions
+175 -2
View File
@@ -1,15 +1,188 @@
package service
import (
"fmt"
"hospital-admin-api/api/dao"
"hospital-admin-api/api/model"
"hospital-admin-api/extend/aliyun"
"hospital-admin-api/utils"
"math/rand"
"time"
)
// ExportService 导出
type ExportService struct {
}
// DoctorWithdrawalData 提现记录数据
type DoctorWithdrawalData struct {
WithdrawalId string // 提现编号
DoctorName string // 医生姓名
Mobile string // 医生手机号
DoctorCardNum string // 医生证件号码
AppliedWithdrawalAmount float64 // 提现金额
ActualWithdrawalAmount float64 // 实际提现金额
IncomeTax float64 // 提现所得税金额
BankName string // 提现银行名称
BankCardCode string // 银行卡号
BankCardAddress string // 银行地址
ExamineStatus string // 审核状态(1:审核中 2:审核通过 3:审核未通过)
ExamineFailReason string // 审核失败原因
ExamineTime time.Time // 审核日期
ExamineBy string // 审核人员名称
PaymentStatus string // 财务打款状态(0:否 1:是)
PaymentTime time.Time // 财务打款时间
PaymentBy string // 财务打款人员id(后台用户id
CreatedAt time.Time // 创建时间
}
// DoctorWithdrawal 提现记录
func (r *ExportService) DoctorWithdrawal([]*model.DoctorWithdrawal) (string, error) {
func (r *ExportService) DoctorWithdrawal(doctorWithdrawals []*model.DoctorWithdrawal) (string, error) {
header := []utils.HeaderCellData{
{Value: "提现编号", CellType: "string", NumberFmt: "", ColWidth: 25},
{Value: "医生姓名", CellType: "string", NumberFmt: "", ColWidth: 18},
{Value: "医生手机号", CellType: "string", NumberFmt: "", ColWidth: 18},
{Value: "医生证件号码", CellType: "string", NumberFmt: "", ColWidth: 25},
{Value: "申请提现金额", CellType: "float", NumberFmt: "0.0000", ColWidth: 18},
{Value: "实际提现金额", CellType: "float", NumberFmt: "0.0000", ColWidth: 18},
{Value: "个人所得税", CellType: "float", NumberFmt: "0.0000", ColWidth: 18},
{Value: "银行名称", CellType: "string", NumberFmt: "", ColWidth: 25},
{Value: "银行卡号", CellType: "string", NumberFmt: "", ColWidth: 27},
{Value: "银行地址", CellType: "string", NumberFmt: "", ColWidth: 46},
{Value: "审核状态", CellType: "string", NumberFmt: "", ColWidth: 18},
{Value: "审核失败原因", CellType: "string", NumberFmt: "", ColWidth: 33},
{Value: "审核日期", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30},
{Value: "审核人员", CellType: "string", NumberFmt: "", ColWidth: 18},
{Value: "打款状态", CellType: "string", NumberFmt: "", ColWidth: 18},
{Value: "打款时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30},
{Value: "打款人员", CellType: "string", NumberFmt: "", ColWidth: 18},
{Value: "申请时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30},
}
var interfaceSlice []interface{}
for _, v := range doctorWithdrawals {
// 审核状态
examineStatus := "未知"
if v.ExamineStatus == 1 {
examineStatus = "审核中"
} else if v.ExamineStatus == 2 {
examineStatus = "审核通过"
} else if v.ExamineStatus == 3 {
examineStatus = "审核未通过"
}
// 审核人员
examineBy := ""
if v.ExamineBy != 0 {
adminUserDao := dao.AdminUserDao{}
adminUser, err := adminUserDao.GetAdminUserFirstById(v.ExamineBy)
if err == nil && adminUser != nil {
examineBy = adminUser.NickName
}
}
// 打款状态
paymentStatus := "未知"
if v.PaymentStatus == 0 {
paymentStatus = "未打款"
} else if v.ExamineStatus == 1 {
paymentStatus = "已打款"
}
// 打款人员
paymentBy := ""
if v.PaymentBy != 0 {
adminUserDao := dao.AdminUserDao{}
adminUser, err := adminUserDao.GetAdminUserFirstById(v.PaymentBy)
if err == nil && adminUser != nil {
paymentBy = adminUser.NickName
}
}
// 银行名称
bankName := "未知"
if v.DoctorWithdrawalBank != nil {
if v.DoctorWithdrawalBank.BasicBank != nil {
if v.DoctorWithdrawalBank.BasicBank.BankName != "" {
bankName = v.DoctorWithdrawalBank.BasicBank.BankName
}
}
}
// 银行卡号
bankCardCode := "未知"
// 开户行地址
bankCardAddress := ""
if v.DoctorWithdrawalBank != nil {
if v.DoctorWithdrawalBank.BankCardCode != "" {
bankCardCode = v.DoctorWithdrawalBank.BankCardCode
}
bankCardAddress = v.DoctorWithdrawalBank.Province + v.DoctorWithdrawalBank.City + v.DoctorWithdrawalBank.County
}
// 时间处理
var examineTime time.Time
if v.ExamineTime != (model.LocalTime{}) {
t := time.Time(v.ExamineTime)
examineTime = t
}
var paymentTime time.Time
if v.PaymentTime != (model.LocalTime{}) {
t := time.Time(v.PaymentTime)
paymentTime = t
}
var createdAt time.Time
if v.CreatedAt != (model.LocalTime{}) {
t := time.Time(v.CreatedAt)
createdAt = t
}
doctorWithdrawalData := DoctorWithdrawalData{
WithdrawalId: fmt.Sprintf("%d", v.WithdrawalId),
DoctorName: v.UserDoctor.UserName,
Mobile: v.UserDoctor.User.Mobile,
DoctorCardNum: v.UserDoctor.UserDoctorInfo.CardNum,
AppliedWithdrawalAmount: v.AppliedWithdrawalAmount,
ActualWithdrawalAmount: v.ActualWithdrawalAmount,
IncomeTax: v.IncomeTax,
BankName: bankName,
BankCardCode: bankCardCode,
BankCardAddress: bankCardAddress,
ExamineStatus: examineStatus,
ExamineFailReason: v.ExamineFailReason,
ExamineTime: examineTime,
ExamineBy: examineBy,
PaymentStatus: paymentStatus,
PaymentTime: paymentTime,
PaymentBy: paymentBy,
CreatedAt: createdAt,
}
interfaceSlice = append(interfaceSlice, doctorWithdrawalData)
}
file, err := utils.Export(header, interfaceSlice)
if err != nil {
return "", err
}
// 设置文件名字
now := time.Now()
dateTimeString := now.Format("20060102150405") // 当前时间字符串
rand.Seed(time.Now().UnixNano()) // 设置随机数
ossPath := "admin/export/output" + dateTimeString + fmt.Sprintf("%d", rand.Intn(9000)+1000) + ".xlsx"
// 上传oss
_, err = aliyun.PutObjectByte(ossPath, file.Bytes())
if err != nil {
return "", err
}
return "", nil
ossPath = utils.AddOssDomain("/" + ossPath)
return ossPath, nil
}