新增获取医生提现列表-分页

This commit is contained in:
wucongxing 2023-10-30 10:25:44 +08:00
parent 409de1661d
commit f65d7b8414
8 changed files with 451 additions and 2 deletions

View File

@ -13,6 +13,7 @@ type Api struct {
orderPrescriptionManage // 处方管理 orderPrescriptionManage // 处方管理
inquiryManage // 问诊管理 inquiryManage // 问诊管理
caManage // ca管理 caManage // ca管理
financeManage // 财务管理
} }
// SysSetting 系统设置 // SysSetting 系统设置
@ -71,3 +72,8 @@ type inquiryManage struct {
type caManage struct { type caManage struct {
UserCaCert // 证书 UserCaCert // 证书
} }
// 财务管理
type financeManage struct {
DoctorWithdrawal // 提现记录
}

View File

@ -0,0 +1,55 @@
package controller
import (
"github.com/gin-gonic/gin"
"hospital-admin-api/api/dao"
"hospital-admin-api/api/dto"
"hospital-admin-api/api/requests"
"hospital-admin-api/api/responses"
"hospital-admin-api/global"
"hospital-admin-api/utils"
)
// DoctorWithdrawal 医生提现
type DoctorWithdrawal struct{}
// GetDoctorWithdrawalPage 获取医生提现列表-分页
func (r *DoctorWithdrawal) GetDoctorWithdrawalPage(c *gin.Context) {
doctorWithdrawalRequest := requests.DoctorWithdrawalRequest{}
req := doctorWithdrawalRequest.GetDoctorWithdrawalPage
if err := c.ShouldBind(&req); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(req); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
if req.Page == 0 {
req.Page = 1
}
if req.PageSize == 0 {
req.PageSize = 20
}
doctorWithdrawalDao := dao.DoctorWithdrawalDao{}
doctorWithdrawal, total, err := doctorWithdrawalDao.GetDoctorWithdrawalPageSearch(req, req.Page, req.PageSize)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 处理返回值
res := dto.GetDoctorWithdrawalListDto(doctorWithdrawal)
result := make(map[string]interface{})
result["page"] = req.Page
result["page_size"] = req.PageSize
result["total"] = total
result["data"] = res
responses.OkWithData(result, c)
}

156
api/dao/doctorWithdrawal.go Normal file
View File

@ -0,0 +1,156 @@
package dao
import (
"gorm.io/gorm"
"hospital-admin-api/api/model"
"hospital-admin-api/api/requests"
"hospital-admin-api/global"
"strings"
"time"
)
type DoctorWithdrawalDao struct {
}
// GetDoctorWithdrawalById 获取医生提现数据-医生提现id
func (r *DoctorWithdrawalDao) GetDoctorWithdrawalById(withdrawalId int64) (m *model.DoctorWithdrawal, err error) {
err = global.Db.First(&m, withdrawalId).Error
if err != nil {
return nil, err
}
return m, nil
}
// DeleteDoctorWithdrawal 删除医生提现
func (r *DoctorWithdrawalDao) DeleteDoctorWithdrawal(tx *gorm.DB, maps interface{}) error {
err := tx.Where(maps).Delete(&model.DoctorWithdrawal{}).Error
if err != nil {
return err
}
return nil
}
// EditDoctorWithdrawal 修改医生提现
func (r *DoctorWithdrawalDao) EditDoctorWithdrawal(tx *gorm.DB, maps interface{}, data interface{}) error {
err := tx.Model(&model.DoctorWithdrawal{}).Where(maps).Updates(data).Error
if err != nil {
return err
}
return nil
}
// EditDoctorWithdrawalById 修改医生提现-医生提现id
func (r *DoctorWithdrawalDao) EditDoctorWithdrawalById(tx *gorm.DB, withdrawalId int64, data interface{}) error {
err := tx.Model(&model.DoctorWithdrawal{}).Where("withdrawal_id = ?", withdrawalId).Updates(data).Error
if err != nil {
return err
}
return nil
}
// GetDoctorWithdrawalList 获取医生提现列表
func (r *DoctorWithdrawalDao) GetDoctorWithdrawalList(maps interface{}) (m []*model.DoctorWithdrawal, err error) {
err = global.Db.Where(maps).Find(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// AddDoctorWithdrawal 新增医生提现
func (r *DoctorWithdrawalDao) AddDoctorWithdrawal(tx *gorm.DB, model *model.DoctorWithdrawal) (*model.DoctorWithdrawal, error) {
if err := tx.Create(model).Error; err != nil {
return nil, err
}
return model, nil
}
// GetDoctorWithdrawalPageSearch 获取医生提现列表-分页
func (r *DoctorWithdrawalDao) GetDoctorWithdrawalPageSearch(req requests.GetDoctorWithdrawalPage, page, pageSize int) (m []*model.DoctorWithdrawal, total int64, err error) {
var totalRecords int64
// 构建查询条件
query := global.Db.Model(&model.DoctorWithdrawal{})
// 医生
query = query.Preload("UserDoctor", func(db *gorm.DB) *gorm.DB {
return db.Omit("open_id", "union_id", "wx_session_key")
})
// 医生姓名
if req.UserName != "" {
subQuery := global.Db.Model(&model.UserDoctor{}).
Select("doctor_id").
Where("user_name LIKE ?", "%"+req.UserName+"%")
query = query.Where(gorm.Expr("doctor_id IN (?)", subQuery))
}
// 手机号-医生
if req.Mobile != "" {
// 医生
doctorUserSubQuery := global.Db.Model(&model.User{}).
Select("user_id").
Where("mobile = ?", req.Mobile)
doctorSubQuery := global.Db.Model(&model.UserDoctor{}).
Select("doctor_id").
Where(gorm.Expr("user_id IN (?)", doctorUserSubQuery))
query = query.Where("doctor_id IN (?)", doctorSubQuery)
}
// 审核状态
if req.ExamineStatus != nil {
query = query.Where("examine_status = ?", req.ExamineStatus)
}
// 打款状态
if req.PaymentStatus != nil {
query = query.Where("payment_status = ?", req.PaymentStatus)
}
// 审核日期
if req.ExamineTime != "" {
examineTime := strings.Split(req.ExamineTime, "&")
if len(examineTime) == 2 {
startTime, _ := time.Parse("2006-01-02", examineTime[0])
endTime, _ := time.Parse("2006-01-02", examineTime[1])
if startTime == endTime {
endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
}
query = query.Where("examine_time BETWEEN ? AND ?", startTime, endTime)
}
}
// 财务打款时间
if req.PaymentTime != "" {
paymentTime := strings.Split(req.PaymentTime, "&")
if len(paymentTime) == 2 {
startTime, _ := time.Parse("2006-01-02", paymentTime[0])
endTime, _ := time.Parse("2006-01-02", paymentTime[1])
if startTime == endTime {
endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
}
query = query.Where("payment_time BETWEEN ? AND ?", startTime, endTime)
}
}
// 排序
query = query.Order("created_at desc")
// 查询总数量
if err := query.Count(&totalRecords).Error; err != nil {
return nil, 0, err
}
err = query.Scopes(model.Paginate(page, pageSize)).Find(&m).Error
if err != nil {
return nil, 0, err
}
return m, totalRecords, nil
}

134
api/dto/DoctorWithdrawal.go Normal file
View File

@ -0,0 +1,134 @@
package dto
import (
"fmt"
"hospital-admin-api/api/dao"
"hospital-admin-api/api/model"
)
type DoctorWithdrawalDto struct {
WithdrawalId string `json:"withdrawal_id"` // 主键id
DoctorId string `json:"doctor_id"` // 医生id;NOT NULL
BankId string `json:"bank_id"` // 银行id
AccountName string `json:"account_name"` // 银行卡姓名;NOT NULL
BankCardCode string `json:"bank_card_code"` // 银行卡号
BankCardCodeFour string `json:"bank_card_code_four"` // 银行卡号(后四位);NOT NULL
AppliedWithdrawalAmount float64 `json:"applied_withdrawal_amount"` // 提现金额
ActualWithdrawalAmount float64 `json:"actual_withdrawal_amount"` // 实际提现金额
IncomeTax float64 `json:"income_tax"` // 提现所得税金额
ExamineStatus int `json:"examine_status"` // 审核状态1:审核中 2:审核通过 3:审核未通过)
ExamineFailReason string `json:"examine_fail_reason"` // 审核失败原因
ExamineTime model.LocalTime `json:"examine_time"` // 审核日期
ExamineBy string `json:"examine_by"` // 审核人员id后台用户id
PaymentStatus int `json:"payment_status"` // 财务打款状态0:否 1:是)
PaymentTime model.LocalTime `json:"payment_time"` // 财务打款时间
PaymentBy string `json:"payment_by"` // 财务打款人员id后台用户id
CreatedAt model.LocalTime `json:"created_at"` // 创建时间
UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间
DoctorName string `json:"doctor_name"` // 医生姓名
}
func GetDoctorWithdrawalDto(m *model.DoctorWithdrawal) *DoctorWithdrawalDto {
return &DoctorWithdrawalDto{
WithdrawalId: fmt.Sprintf("%d", m.WithdrawalId),
DoctorId: fmt.Sprintf("%d", m.DoctorId),
BankId: fmt.Sprintf("%d", m.BankId),
AccountName: m.AccountName,
BankCardCode: m.BankCardCode,
BankCardCodeFour: m.BankCardCodeFour,
AppliedWithdrawalAmount: m.AppliedWithdrawalAmount,
ActualWithdrawalAmount: m.ActualWithdrawalAmount,
IncomeTax: m.IncomeTax,
ExamineStatus: m.ExamineStatus,
ExamineFailReason: m.ExamineFailReason,
ExamineTime: m.ExamineTime,
ExamineBy: fmt.Sprintf("%d", m.ExamineBy),
PaymentStatus: m.PaymentStatus,
PaymentTime: m.PaymentTime,
PaymentBy: fmt.Sprintf("%d", m.PaymentBy),
CreatedAt: m.CreatedAt,
UpdatedAt: m.UpdatedAt,
}
}
func GetDoctorWithdrawalListDto(m []*model.DoctorWithdrawal) []*DoctorWithdrawalDto {
// 处理返回值
responses := make([]*DoctorWithdrawalDto, len(m))
if len(m) > 0 {
for i, v := range m {
response := &DoctorWithdrawalDto{
WithdrawalId: fmt.Sprintf("%d", v.WithdrawalId),
DoctorId: fmt.Sprintf("%d", v.DoctorId),
BankId: fmt.Sprintf("%d", v.BankId),
AccountName: v.AccountName,
BankCardCode: v.BankCardCode,
BankCardCodeFour: v.BankCardCodeFour,
AppliedWithdrawalAmount: v.AppliedWithdrawalAmount,
ActualWithdrawalAmount: v.ActualWithdrawalAmount,
IncomeTax: v.IncomeTax,
ExamineStatus: v.ExamineStatus,
ExamineFailReason: v.ExamineFailReason,
ExamineTime: v.ExamineTime,
ExamineBy: fmt.Sprintf("%d", v.ExamineBy),
PaymentStatus: v.PaymentStatus,
PaymentTime: v.PaymentTime,
PaymentBy: fmt.Sprintf("%d", v.PaymentBy),
CreatedAt: v.CreatedAt,
UpdatedAt: v.UpdatedAt,
}
// 加载医生名称
if v.UserDoctor != nil {
response.LoadDoctorName(v.UserDoctor)
}
// 加载审核人员
if v.ExamineBy != 0 {
response.LoadExamineByName(v.ExamineBy)
}
// 加载打款人员
if v.PaymentBy != 0 {
response.LoadPaymentByName(v.PaymentBy)
}
// 将转换后的结构体添加到新切片中
responses[i] = response
}
}
return responses
}
// LoadDoctorName 加载医生名称
func (r *DoctorWithdrawalDto) LoadDoctorName(m *model.UserDoctor) *DoctorWithdrawalDto {
if m != nil {
r.DoctorName = m.UserName
}
return r
}
// LoadExamineByName 加载审核人员名称
func (r *DoctorWithdrawalDto) LoadExamineByName(examineBy int64) *DoctorWithdrawalDto {
if examineBy != 0 {
adminUserDao := dao.AdminUserDao{}
adminUser, err := adminUserDao.GetAdminUserFirstById(examineBy)
if err == nil && adminUser != nil {
r.ExamineBy = adminUser.NickName
}
}
return r
}
// LoadPaymentByName 加载打款人员名称
func (r *DoctorWithdrawalDto) LoadPaymentByName(paymentBy int64) *DoctorWithdrawalDto {
if paymentBy != 0 {
adminUserDao := dao.AdminUserDao{}
adminUser, err := adminUserDao.GetAdminUserFirstById(paymentBy)
if err == nil && adminUser != nil {
r.PaymentBy = adminUser.NickName
}
}
return r
}

View File

@ -0,0 +1,47 @@
package model
import (
"gorm.io/gorm"
"hospital-admin-api/global"
"time"
)
// DoctorWithdrawal 医生提现表
type DoctorWithdrawal struct {
WithdrawalId int64 `gorm:"column:withdrawal_id;type:bigint(19);primary_key;comment:主键id" json:"withdrawal_id"`
DoctorId int64 `gorm:"column:doctor_id;type:bigint(19);comment:医生id;NOT NULL" json:"doctor_id"`
BankId int64 `gorm:"column:bank_id;type:bigint(19);comment:银行id" json:"bank_id"`
AccountName string `gorm:"column:account_name;type:varchar(50);comment:银行卡姓名;NOT NULL" json:"account_name"`
BankCardCode string `gorm:"column:bank_card_code;type:varchar(100);comment:银行卡号" json:"bank_card_code"`
BankCardCodeFour string `gorm:"column:bank_card_code_four;type:varchar(10);comment:银行卡号(后四位);NOT NULL" json:"bank_card_code_four"`
AppliedWithdrawalAmount float64 `gorm:"column:applied_withdrawal_amount;type:decimal(10,2);default:0.00;comment:提现金额" json:"applied_withdrawal_amount"`
ActualWithdrawalAmount float64 `gorm:"column:actual_withdrawal_amount;type:decimal(10,2);default:0.00;comment:实际提现金额" json:"actual_withdrawal_amount"`
IncomeTax float64 `gorm:"column:income_tax;type:decimal(10,2);default:0.00;comment:提现所得税金额" json:"income_tax"`
ExamineStatus int `gorm:"column:examine_status;type:tinyint(4);default:0;comment:审核状态1:审核中 2:审核通过 3:审核未通过)" json:"examine_status"`
ExamineFailReason string `gorm:"column:examine_fail_reason;type:varchar(255);comment:审核失败原因" json:"examine_fail_reason"`
ExamineTime LocalTime `gorm:"column:examine_time;type:datetime;comment:审核日期" json:"examine_time"`
ExamineBy int64 `gorm:"column:examine_by;type:bigint(19);comment:审核人员id后台用户id" json:"examine_by"`
PaymentStatus int `gorm:"column:payment_status;type:tinyint(1);default:0;comment:财务打款状态0:否 1:是)" json:"payment_status"`
PaymentTime LocalTime `gorm:"column:payment_time;type:datetime;comment:财务打款时间" json:"payment_time"`
PaymentBy int64 `gorm:"column:payment_by;type:bigint(19);comment:财务打款人员id后台用户id" json:"payment_by"`
UserDoctor *UserDoctor `gorm:"foreignKey:DoctorId;references:doctor_id" json:"user_doctor"` // 医生
Model
}
func (m *DoctorWithdrawal) TableName() string {
return "gdxz_doctor_withdrawal"
}
func (m *DoctorWithdrawal) BeforeCreate(tx *gorm.DB) error {
if m.WithdrawalId == 0 {
m.WithdrawalId = global.Snowflake.Generate().Int64()
}
m.CreatedAt = LocalTime(time.Now())
tx.Statement.SetColumn("CreatedAt", m.CreatedAt)
m.UpdatedAt = LocalTime(time.Now())
tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt)
return nil
}

View File

@ -0,0 +1,34 @@
package model
import (
"gorm.io/gorm"
"hospital-admin-api/global"
"time"
)
// DoctorWithdrawalOrder 医生提现-关联订单表
type DoctorWithdrawalOrder struct {
WithdrawalOrderId int64 `gorm:"column:withdrawal_order_id;type:bigint(19);primary_key;comment:主键id" json:"withdrawal_order_id"`
WithdrawalId int64 `gorm:"column:withdrawal_id;type:bigint(19);comment:提现表id;NOT NULL" json:"withdrawal_id"`
DoctorId int64 `gorm:"column:doctor_id;type:bigint(19);comment:医生id;NOT NULL" json:"doctor_id"`
OrderInquiryId int64 `gorm:"column:order_inquiry_id;type:bigint(19);comment:订单-问诊id;NOT NULL" json:"order_inquiry_id"`
Model
}
func (m *DoctorWithdrawalOrder) TableName() string {
return "gdxz_doctor_withdrawal_order"
}
func (m *DoctorWithdrawalOrder) BeforeCreate(tx *gorm.DB) error {
if m.WithdrawalOrderId == 0 {
m.WithdrawalOrderId = global.Snowflake.Generate().Int64()
}
m.CreatedAt = LocalTime(time.Now())
tx.Statement.SetColumn("CreatedAt", m.CreatedAt)
m.UpdatedAt = LocalTime(time.Now())
tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt)
return nil
}

View File

@ -0,0 +1,17 @@
package requests
type DoctorWithdrawalRequest struct {
GetDoctorWithdrawalPage // 获取医生提现列表-分页
}
// GetDoctorWithdrawalPage 获取医生提现列表-分页
type GetDoctorWithdrawalPage struct {
Page int `json:"page" form:"page" label:"页码"`
PageSize int `json:"page_size" form:"page_size" label:"每页个数"`
Mobile string `json:"mobile" form:"mobile" label:"手机号"`
UserName string `json:"user_name" form:"user_name" label:"用户名"`
ExamineTime string `json:"examine_time" form:"examine_time" label:"审核日期"` // 时间区间数组形式下标0为开始时间下标1为结束时间
PaymentTime string `json:"payment_time" form:"payment_time" label:"财务打款时间"` // 时间区间数组形式下标0为开始时间下标1为结束时间
ExamineStatus *int `json:"examine_status" form:"examine_status" label:"审核状态"` // 1:审核中 2:审核通过 3:审核未通过)
PaymentStatus *int `json:"payment_status" form:"payment_status" label:"打款状态"` // 财务打款状态0:否 1:是)
}

View File

@ -511,8 +511,8 @@ func privateRouter(r *gin.Engine, api controller.Api) {
// 提现记录 // 提现记录
withdrawalGroup := financeGroup.Group("/withdrawal") withdrawalGroup := financeGroup.Group("/withdrawal")
{ {
// 获取提现列表-分页 // 获取医生提现列表-分页
withdrawalGroup.GET("", api.OrderPrescription.GetOrderPrescriptionPage) withdrawalGroup.GET("", api.DoctorWithdrawal.GetDoctorWithdrawalPage)
// 提现详情 // 提现详情
withdrawalGroup.GET("/:withdrawal_id", api.OrderPrescription.GetOrderPrescriptionPage) withdrawalGroup.GET("/:withdrawal_id", api.OrderPrescription.GetOrderPrescriptionPage)