diff --git a/api/dao/doctorWithdrawal.go b/api/dao/doctorWithdrawal.go index 2f500f0..a6e7beb 100644 --- a/api/dao/doctorWithdrawal.go +++ b/api/dao/doctorWithdrawal.go @@ -1,6 +1,7 @@ package dao import ( + "errors" "gorm.io/gorm" "hospital-admin-api/api/model" "hospital-admin-api/api/requests" @@ -160,3 +161,112 @@ func (r *DoctorWithdrawalDao) GetDoctorWithdrawalPageSearch(req requests.GetDoct } return m, totalRecords, nil } + +// GetDoctorWithdrawalExportListSearch 获取医生提现列表-导出 +func (r *DoctorWithdrawalDao) GetDoctorWithdrawalExportListSearch(req requests.DoctorWithdrawalExportList, 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") + }) + + // 提现关联银行卡 + query = query.Preload("DoctorWithdrawalBank") + + // 基础银行卡 + query = query.Preload("DoctorWithdrawalBank.BasicBank") + + // 当前搜索数据 + if req.Type == 1 { + // 医生姓名 + 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) + } + } + } + + // 当前选择数据 + if req.Type == 2 { + if req.Id == "" { + return nil, 0, errors.New("未提供需导出数据编号") + } + + id := strings.Split(req.Id, ",") + query = query.Where("withdrawal_id IN (?)", id) + } + + // 排序 + 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 +} diff --git a/api/dao/doctorWithdrawalOrder.go b/api/dao/doctorWithdrawalOrder.go index 79f5ca0..6c61e1c 100644 --- a/api/dao/doctorWithdrawalOrder.go +++ b/api/dao/doctorWithdrawalOrder.go @@ -35,6 +35,10 @@ func (r *DoctorWithdrawalOrderDao) GetDoctorWithdrawalOrderPageSearch(req reques // 构建查询条件 query := global.Db.Model(&model.DoctorWithdrawalOrder{}) + if req.WithdrawalId != "" { + query = query.Where("withdrawal_id = ?", req.WithdrawalId) + } + // 医生 query = query.Preload("UserDoctor", func(db *gorm.DB) *gorm.DB { return db.Omit("open_id", "union_id", "wx_session_key") diff --git a/api/requests/doctorWithdrawal.go b/api/requests/doctorWithdrawal.go index b273590..322f7a4 100644 --- a/api/requests/doctorWithdrawal.go +++ b/api/requests/doctorWithdrawal.go @@ -5,6 +5,7 @@ type DoctorWithdrawalRequest struct { GetDoctorWithdrawalOrderPage // 提现详情-关联订单列表-分页 PutDoctorWithdrawalIncome // 修改提现个人所得税 PutDoctorWithdrawalExamine // 修改提现审核状态 + DoctorWithdrawalExportList // 提现记录列表-导出 } // GetDoctorWithdrawalPage 获取医生提现列表-分页 @@ -21,8 +22,9 @@ type GetDoctorWithdrawalPage struct { // GetDoctorWithdrawalOrderPage 提现详情-关联订单列表-分页 type GetDoctorWithdrawalOrderPage struct { - Page int `json:"page" form:"page" label:"页码"` - PageSize int `json:"page_size" form:"page_size" label:"每页个数"` + WithdrawalId string `json:"withdrawal_id" form:"withdrawal_id" validate:"required" label:"id"` + Page int `json:"page" form:"page" label:"页码"` + PageSize int `json:"page_size" form:"page_size" label:"每页个数"` } // PutDoctorWithdrawalIncome 修改提现个人所得税 @@ -35,3 +37,17 @@ type PutDoctorWithdrawalExamine struct { ExamineStatus int `json:"examine_status" form:"examine_status" validate:"required,oneof=2 3" label:"审核状态"` // (1:审核中 2:审核通过 3:审核未通过) ExamineFailReason string `json:"examine_fail_reason" form:"examine_fail_reason" label:"审核失败原因"` } + +// DoctorWithdrawalExportList 提现记录列表-导出 +type DoctorWithdrawalExportList struct { + Type int `json:"type" form:"type" label:"类型" validate:"required,oneof=1 2 3"` // 1:当前搜索数据 2:当前选择数据 3:全部数据 + Id string `json:"id" form:"id" label:"id"` // 选择数据的id,当type为2时必填 + 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:是) +}