From 32112a3702734c37604db213bc956050c42ab919 Mon Sep 17 00:00:00 2001 From: wucongxing <815046773@qq.com> Date: Tue, 14 Nov 2023 13:47:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=BB=E7=94=9F=E9=93=B6=E8=A1=8C=E5=8D=A1?= =?UTF-8?q?=E5=88=97=E8=A1=A8-=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/controller/export.go | 35 ++++++++++++++++ api/dao/doctorBankCard.go | 84 ++++++++++++++++++++++++++++++++++++- api/requests/userDoctor.go | 31 +++++++++----- api/router/router.go | 4 +- api/service/export.go | 77 ++++++++++++++++++++++++++++++++++ output.xlsx | Bin 26753 -> 8139 bytes utils/export.go | 21 +++++----- 7 files changed, 229 insertions(+), 23 deletions(-) diff --git a/api/controller/export.go b/api/controller/export.go index 0cb0d7b..ef7e8f2 100644 --- a/api/controller/export.go +++ b/api/controller/export.go @@ -116,3 +116,38 @@ func (r *Export) UserDoctor(c *gin.Context) { responses.OkWithData(ossAddress, c) } + +// UserDoctorBankCard 医生银行卡列表 +func (r *Export) UserDoctorBankCard(c *gin.Context) { + userDoctorRequest := requests.UserDoctorRequest{} + req := userDoctorRequest.UserDoctorBankCardExportList + 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 + } + + // 获取数据 + doctorBankCardDao := dao.DoctorBankCardDao{} + doctorBankCards, err := doctorBankCardDao.GetDoctorBankCardExportListSearch(req) + + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 业务处理 + exportService := service.ExportService{} + ossAddress, err := exportService.UserDoctorBankCard(doctorBankCards) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.OkWithData(ossAddress, c) +} diff --git a/api/dao/doctorBankCard.go b/api/dao/doctorBankCard.go index 40a0a23..6b2abaf 100644 --- a/api/dao/doctorBankCard.go +++ b/api/dao/doctorBankCard.go @@ -1,10 +1,12 @@ package dao import ( + "errors" "gorm.io/gorm" "hospital-admin-api/api/model" "hospital-admin-api/api/requests" "hospital-admin-api/global" + "strings" ) type DoctorBankCardDao struct { @@ -90,7 +92,7 @@ func (r *DoctorBankCardDao) AddDoctorBankCardByMap(tx *gorm.DB, data map[string] return userDoctorInfo, nil } -// GetDoctorBankCardPage 获取医生列表-分页 +// GetDoctorBankCardPage 获取医生银行卡列表-分页 func (r *DoctorBankCardDao) GetDoctorBankCardPage(req requests.GetUserDoctorBankCardPage, page, pageSize int) (m []*model.DoctorBankCard, total int64, err error) { var totalRecords int64 @@ -163,3 +165,83 @@ func (r *DoctorBankCardDao) GetDoctorBankCardPage(req requests.GetUserDoctorBank } return m, totalRecords, nil } + +// GetDoctorBankCardExportListSearch 获取医生银行卡列表-分页 +func (r *DoctorBankCardDao) GetDoctorBankCardExportListSearch(req requests.UserDoctorBankCardExportList) (m []*model.DoctorBankCard, err error) { + // 构建查询条件 + query := global.Db.Model(&model.DoctorBankCard{}) + + // 医生 + query = query.Preload("UserDoctor", func(db *gorm.DB) *gorm.DB { + return db.Omit("open_id", "union_id", "wx_session_key") + }) + + // 用户 + query = query.Preload("UserDoctor.User", func(db *gorm.DB) *gorm.DB { + return db.Omit("user_password", "salt") + }) + + // 银行 + query = query.Preload("BasicBank", func(db *gorm.DB) *gorm.DB { + return db.Select("bank_id,bank_code,bank_name") + }) + + // 当前搜索数据 + if req.Type == 1 { + // 手机号 + 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.UserName != "" { + subQuery := global.Db.Model(&model.User{}). + Select("doctor_id"). + Where("user_name LIKE ?", "%"+req.UserName+"%") + + query = query.Where(gorm.Expr("doctor_id IN (?)", subQuery)) + } + + // 银行卡号 + if req.BankCardCode != "" { + query = query.Where("bank_card_code = ?", req.BankCardCode) + } + + // 银行名称 + if req.BankName != "" { + subQuery := global.Db.Model(&model.BasicBank{}). + Select("bank_id"). + Where("bank_name LIKE ?", "%"+req.BankName+"%") + + query = query.Where(gorm.Expr("bank_id IN (?)", subQuery)) + } + } + + // 当前选择数据 + if req.Type == 2 { + if req.Id == "" { + return nil, errors.New("未提供需导出数据编号") + } + + id := strings.Split(req.Id, ",") + query = query.Where("bank_card_id IN (?)", id) + } + + // 排序 + query = query.Order("created_at desc") + + err = query.Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} diff --git a/api/requests/userDoctor.go b/api/requests/userDoctor.go index 64f9fb2..a8374b3 100644 --- a/api/requests/userDoctor.go +++ b/api/requests/userDoctor.go @@ -1,16 +1,17 @@ package requests type UserDoctorRequest struct { - GetUserDoctorPage // 获取医生列表-分页 - PutUserDoctor // 修改医生 - AddUserDoctor // 新增医生 - GetUserDoctorPendingPage // 身份审核-获取医生列表-分页 - PutUserDoctorPending // 身份审核-审核医生 - GetMultiPage // 多点-获取医生列表-分页 - PutMulti // 多点-审核医生 - GetUserDoctorList // 获取医生列表 - GetUserDoctorBankCardPage // 获取医生银行卡列表-分页 - UserDoctorExportList // 医生列表-导出 + GetUserDoctorPage // 获取医生列表-分页 + PutUserDoctor // 修改医生 + AddUserDoctor // 新增医生 + GetUserDoctorPendingPage // 身份审核-获取医生列表-分页 + PutUserDoctorPending // 身份审核-审核医生 + GetMultiPage // 多点-获取医生列表-分页 + PutMulti // 多点-审核医生 + GetUserDoctorList // 获取医生列表 + GetUserDoctorBankCardPage // 获取医生银行卡列表-分页 + UserDoctorExportList // 医生列表-导出 + UserDoctorBankCardExportList // 医生银行卡列表-导出 } // GetUserDoctorPage 获取医生列表-分页 @@ -172,3 +173,13 @@ type UserDoctorExportList struct { IsSysDiagnoCooperation *int `json:"is_sys_diagno_cooperation" form:"is_sys_diagno_cooperation" label:"是否先思达合作医生"` // (0:否 1:是) CreatedAt string `json:"created_at" form:"created_at" label:"注册时间"` } + +// UserDoctorBankCardExportList 医生银行卡列表-导出 +type UserDoctorBankCardExportList 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"` + Mobile string `json:"mobile" form:"mobile" label:"手机号"` + UserName string `json:"user_name" form:"user_name" label:"用户名"` + BankCardCode string `json:"bank_card_code" form:"bank_card_code" label:"银行卡号"` + BankName string `json:"bank_name" form:"bank_name" label:"银行名称"` +} diff --git a/api/router/router.go b/api/router/router.go index 1637870..1685883 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -611,8 +611,8 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 医生列表 doctorGroup.POST("", api.Export.UserDoctor) - // 医生银行卡 - doctorGroup.POST("/bank/card", api.UserCaCert.RenewUserCloudCert) + // 医生银行卡列表 + doctorGroup.POST("/bank/card", api.Export.UserDoctorBankCard) // 医生账户 doctorGroup.POST("/account", api.UserCaCert.RenewUserCloudCert) diff --git a/api/service/export.go b/api/service/export.go index dc0a88e..e112140 100644 --- a/api/service/export.go +++ b/api/service/export.go @@ -111,6 +111,17 @@ type UserDoctorData struct { BankCardAddress string // 开户银行地址 } +type DoctorBankCardData struct { + DoctorName string // 医生姓名 + DoctorMobile string // 医生手机号 + BankName string // 银行名称 + BankCardCode string // 银行卡号 + Province string // 省份 + City string // 城市 + County string // 区县 + CreatedAt time.Time // 创建时间 +} + // DoctorWithdrawal 提现记录 func (r *ExportService) DoctorWithdrawal(doctorWithdrawals []*model.DoctorWithdrawal) (string, error) { header := []utils.HeaderCellData{ @@ -682,3 +693,69 @@ func (r *ExportService) UserDoctor(userDoctors []*model.UserDoctor) (string, err ossPath = utils.AddOssDomain("/" + ossPath) return ossPath, nil } + +// UserDoctorBankCard 医生银行卡列表 +func (r *ExportService) UserDoctorBankCard(d []*model.DoctorBankCard) (string, error) { + header := []utils.HeaderCellData{ + {Value: "医生姓名", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "医生手机号", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "银行名称", CellType: "string", NumberFmt: "", ColWidth: 22}, + {Value: "银行卡号", CellType: "string", NumberFmt: "", ColWidth: 25}, + {Value: "省份", CellType: "string", NumberFmt: "", ColWidth: 20}, + {Value: "城市", CellType: "string", NumberFmt: "", ColWidth: 22}, + {Value: "区县", CellType: "string", NumberFmt: "", ColWidth: 25}, + {Value: "创建时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, + } + + var dataSlice []interface{} + for _, v := range d { + data := DoctorBankCardData{ + BankCardCode: v.BankCardCode, + Province: v.Province, + City: v.City, + County: v.County, + } + + if v.UserDoctor != nil { + // 医生姓名 + data.DoctorName = v.UserDoctor.UserName + + if v.UserDoctor.User != nil { + // 手机号 + data.DoctorMobile = v.UserDoctor.User.Mobile + } + } + + if v.BasicBank != nil { + data.BankName = v.BasicBank.BankName + } + + // 创建时间 + if v.CreatedAt != (model.LocalTime{}) { + t := time.Time(v.CreatedAt) + data.CreatedAt = t + } + + dataSlice = append(dataSlice, data) + } + + file, err := utils.Export(header, dataSlice) + 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 +} diff --git a/output.xlsx b/output.xlsx index 0ebf1a1717a27995b937a56bcc715b12b09ade73..753c93de6c7a2c5d77589c44302b105cf7e8ccc5 100755 GIT binary patch delta 2652 zcmYk8c{mh$7stn#!Jr6lO>;^1jIv%^#*!ps%dTvb#u&_4E|D#hU70L14N9o&%h+bD z6WJmZ*>W+mBwL~g3C*2)p7*);oXe?59kti~ z;L@4ReCU@tBMH+j4nv`5`W-5wjzbyiXwjC8(wB(txui9b93wfR%JRaC28 zxJu^UYQNIYDz(8)R)4%Z#P}`I=Y-!eG+{wA#8Z z=|-mgAHLQ+uFjvy4OIiaRi6gd6R@9quMV#?-oJn0L!fFK5Pba(GM@ZY>&Kg1{Yf{? zrZAXP-a)*f?1O}%POVIlrEAQ?v2g=B1(7p(s7MXN3Ha-BIOC>ryh8Up!#RCm2q|Nz zwnX8?mA&ob$r1L9k(B%+gj73oDbqZ8D zn+S}ShwS#DITgW0dQq~RNLt>Xy^EN~5(PK8bIrZWl^re$wKFZ`QZ(khVv8O) z!DTMZ3ZLW%hMj0KS7HgzGQX7!A$|9P{2=Zs9?HKw@>PLy@vL1|U29*+zf-Y7Pce38AD<*6U+*+d zM>W?Q^|$@_i0;uKK)fNJ#ctdFE|Rvf_3cy3D931X>|)Wz{LlU7r*B!4xDML8%i}yi z08p3&_E;rTlRfr7&LUuI^fim=96jmJnysH+XARwi&y={|DFN!ij0}GS?02{|tZh3B z1dN&n`0|vg+zhvlHgQkwA9iQ>O-#0K_;+3;R8Q>1wd0`=-Ik_BBvX&GooAX&r(S_4zzAVcIu3B*TJe)A?L;x|~u2CXa$`zA|24(dRu+O2$T zw~^VKR-7sL;@%Ibcpgri5*B{XcxYiuaceAu;#i2yn+cif9W3+K+>Xj!alw#%UX+bz zAMS?jEQt%SQYV&PvOE);_lEQw?KQ)ue0M)1BG#KTuZ(yz!Yf1iHL6f$hf{upeLGDC zW_&St>-J>ppJRc#F7zqO`!-R{&VD-+H66vWg~o^9=-2FTZLbD9erBN4izXEr7A^jH zno7R)SyWAi&&3D+%9TurRuVcBtjZmmdcS8LDDmHwLE>BkPgdI(1pp zRbQQhTeac7jPTuE&uQHk0xz6f-_X)5Lb9VIYkTLun~CikmWS_ujsJSn9f7)9vK2q_ zp{;Y8d5-b%#=Fr(q#FOo41TWGc5Zh{9IoV9e(J|F8d9fv8u95q%cW$3@C}RFF=Cn+ zqJ$er%Hv%*()V!lZbCbcLet_HvaO~aDB)BR5BA37Xd(?kmLBB)`1(>4&!)6>3N46p^3TDkZ$2_r! z0aYUf>A&$x?U^S`7Ts-1m4K@+FKGCZEEIYYx*6$79QF;M=x&A-Pf4@fZj1&bMx)o@ z4#LTMWLp=8CdxFdknrcVH4rB>LD4%cl%!<~8}RvqT)PX|AU5rC)5vV&p4mo|Jn7;7 zLGHo#M=s2kHc^rUk!1#~88Z9~>GUs#`O+0L2m=aYIj6k)(>&CYYWSGXAu)^wqd2yn zc%Ti~R|xbAuIiJ4;*r(umv7ZPcbgz0HS!PA0wUP6rx=u^YWZVB*#*3l(mcN)b`SI8K@LTvBJQ9kau7_FlG&au1gYO36#4Q`GiPrpBzg4jH-a=6U$v+ejBSZ8Yd zC%hbOtxy_E?Srn_cVDOFW)bR|nS0O{J_oSQGxc*PyiZD3yfuYJ9zdkn?PrTCQrQ^A^Phy#Uk>l8$oNo*wk7Hkaw^7N6k=$@IFw@N zm!q?8TO^7br&kwX>H}acLfucsJn<+JQnbU`ZW~j$H!plm{s~{ z0p?WzG#eV*bXU376)9$J8JF%PTq}(3f&*5Nd&~&5C1EJa2=TDx6Ka8_5fvhltYWBevfPL&Gvw2E-Syb0Ny8)hV~ocsNF%Q@mm^0954GZG zB`_|Xdq3`&+`jaPdjm|S?)ZhZwrRakNnb$y}~^`#e_OKM42S z`jVA+1fE`6OA%lIU|8b!rS`kl3Zy-;tp}5XuxEe(067P%59|PwzqtR89PBA5`tM-}07L-) z4fY2OSDjDe*l{E;sXEx delta 21358 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 diff --git a/utils/export.go b/utils/export.go index a726458..f574882 100644 --- a/utils/export.go +++ b/utils/export.go @@ -2,6 +2,7 @@ package utils import ( "bytes" + "errors" "fmt" "github.com/xuri/excelize/v2" "reflect" @@ -283,16 +284,16 @@ func Export(header []HeaderCellData, data []interface{}) (*bytes.Buffer, error) } } - buffer, err := f.WriteToBuffer() - if err != nil { - return nil, err - } - - return buffer, nil - - // 保存文件 - // if err := f.SaveAs("output.xlsx"); err != nil { + // buffer, err := f.WriteToBuffer() + // if err != nil { // return nil, err // } - // return nil, errors.New("已导出文件") + // + // return buffer, nil + + // 保存文件 + if err := f.SaveAs("output.xlsx"); err != nil { + return nil, err + } + return nil, errors.New("已导出文件") }