189 lines
6.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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(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
}
ossPath = utils.AddOssDomain("/" + ossPath)
return ossPath, nil
}