From 1b72243833e41535d27bbe60d23e1a0d497bbed5 Mon Sep 17 00:00:00 2001 From: wucongxing <815046773@qq.com> Date: Wed, 15 Nov 2023 11:25:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=BB=E7=94=9F=E8=B4=A6=E6=88=B7-=E5=85=B3?= =?UTF-8?q?=E8=81=94=E8=AE=A2=E5=8D=95-=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 | 34 ++++++ api/controller/orderInquiry.go | 36 +------ api/dao/orderInquiry.go | 167 +++++++++++++++++++++++++++++ api/dto/OrderInquiry.go | 2 +- api/requests/orderInquiry.go | 30 +++++- api/router/router.go | 2 +- api/service/OrderInquiry.go | 67 ++++++------ api/service/export.go | 187 +++++++++++++++++++++++++++++++++ output.xlsx | Bin 6908 -> 0 bytes utils/intToString.go | 156 +++++++++++++++++++++++++++ 10 files changed, 611 insertions(+), 70 deletions(-) delete mode 100755 output.xlsx diff --git a/api/controller/export.go b/api/controller/export.go index 388b8df..3a1b4a4 100644 --- a/api/controller/export.go +++ b/api/controller/export.go @@ -185,3 +185,37 @@ func (r *Export) DoctorAccount(c *gin.Context) { responses.OkWithData(ossAddress, c) } + +// OrderInquiryForAccount 医生账户-关联订单 +func (r *Export) OrderInquiryForAccount(c *gin.Context) { + orderInquiryRequest := requests.OrderInquiryRequest{} + req := orderInquiryRequest.OrderInquiryForAccountExportList + 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 + } + + // 获取数据 + orderInquiryDao := dao.OrderInquiryDao{} + orderInquirys, err := orderInquiryDao.GetOrderInquiryForAccountExportListSearch(req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 业务处理 + exportService := service.ExportService{} + ossAddress, err := exportService.OrderInquiryForAccount(orderInquirys) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.OkWithData(ossAddress, c) +} diff --git a/api/controller/orderInquiry.go b/api/controller/orderInquiry.go index df506ef..f1e13bf 100644 --- a/api/controller/orderInquiry.go +++ b/api/controller/orderInquiry.go @@ -9,7 +9,6 @@ import ( "hospital-admin-api/api/service" "hospital-admin-api/global" "hospital-admin-api/utils" - "math" "strconv" ) @@ -278,39 +277,14 @@ func (r *OrderInquiry) GetOrderInquiryForAccountPage(c *gin.Context) { return } + orderInquiryService := service.OrderInquiryService{} for _, v := range res { // 处理入账状态(0:未入账 1:已入账 2:入账中 3:入账失败 4:入账取消) - // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - if v.InquiryStatus == 7 { - entryStatus := 4 - v.EntryStatus = &entryStatus - } + entryStatus := orderInquiryService.GetOrderInquiryEntryStatus(v.InquiryStatus, v.StatisticsStatus) + v.EntryStatus = &entryStatus - if v.InquiryStatus == 1 || v.InquiryStatus == 2 || v.InquiryStatus == 3 { - entryStatus := 0 - v.EntryStatus = &entryStatus - } - - if v.InquiryStatus == 4 || v.InquiryStatus == 5 { - entryStatus := 2 - v.EntryStatus = &entryStatus - v.DoctorAmount = math.Floor(v.AmountTotal*0.75*100000) / 100000 // 医生收益 - } - - if v.InquiryStatus == 6 { - v.DoctorAmount = math.Floor(v.AmountTotal*0.75*100000) / 100000 // 医生收益 - - if v.StatisticsStatus == 1 { - entryStatus := 1 - v.EntryStatus = &entryStatus - } - - // 统计失败/已结束未统计 - if v.StatisticsStatus == 2 || v.StatisticsStatus == 0 { - entryStatus := 3 - v.EntryStatus = &entryStatus - } - } + // 处理医生收益 + v.DoctorAmount = orderInquiryService.GetOrderInquiryDoctorAmount(v.InquiryStatus, v.AmountTotal) } result := make(map[string]interface{}) diff --git a/api/dao/orderInquiry.go b/api/dao/orderInquiry.go index b337502..6d41ae7 100644 --- a/api/dao/orderInquiry.go +++ b/api/dao/orderInquiry.go @@ -1,6 +1,7 @@ package dao import ( + "errors" "gorm.io/gorm" "gorm.io/gorm/clause" "hospital-admin-api/api/model" @@ -640,3 +641,169 @@ func (r *OrderInquiryDao) GetOrderInquiryForAccountPageSearch(req requests.GetOr } return m, totalRecords, nil } + +// GetOrderInquiryForAccountExportListSearch 医生账户-关联订单 +func (r *OrderInquiryDao) GetOrderInquiryForAccountExportListSearch(req requests.OrderInquiryForAccountExportList) (m []*model.OrderInquiry, err error) { + // 构建查询条件 + query := global.Db.Model(&model.OrderInquiry{}) + + // 医生 + query = query.Preload("UserDoctor", func(db *gorm.DB) *gorm.DB { + return db.Omit("open_id", "union_id", "wx_session_key") + }) + + // 用户 + query = query.Preload("User") + + // 医生id + if req.DoctorId != "" { + query = query.Where("doctor_id = ?", req.DoctorId) + } + + // 当前搜索数据 + if req.Type == 1 { + // 问诊订单状态 + if req.InquiryStatus != nil { + query = query.Where("inquiry_status = ?", req.InquiryStatus) + } + + // 系统订单编号 + if req.InquiryNo != "" { + query = query.Where("inquiry_no = ?", req.InquiryNo) + } + + // 第三方支付流水号 + if req.EscrowTradeNo != "" { + query = query.Where("escrow_trade_no = ?", req.EscrowTradeNo) + } + + // 支付时间 + if req.PayTime != "" { + payTime := strings.Split(req.PayTime, "&") + if len(payTime) == 2 { + startTime, _ := time.Parse("2006-01-02", payTime[0]) + endTime, _ := time.Parse("2006-01-02", payTime[1]) + + if startTime == endTime { + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + } + + query = query.Where("pay_time BETWEEN ? AND ?", startTime, endTime) + } + } + + // 接诊时间 + if req.ReceptionTime != "" { + receptionTime := strings.Split(req.ReceptionTime, "&") + if len(receptionTime) == 2 { + startTime, _ := time.Parse("2006-01-02", receptionTime[0]) + endTime, _ := time.Parse("2006-01-02", receptionTime[1]) + + if startTime == endTime { + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + } + + query = query.Where("reception_time BETWEEN ? AND ?", startTime, endTime) + } + } + + // 订单完成时间 + if req.CompleteTime != "" { + completeTime := strings.Split(req.CompleteTime, "&") + if len(completeTime) == 2 { + startTime, _ := time.Parse("2006-01-02", completeTime[0]) + endTime, _ := time.Parse("2006-01-02", completeTime[1]) + + if startTime == endTime { + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + } + + query = query.Where("complete_time BETWEEN ? AND ?", startTime, endTime) + } + } + + // 订单结束时间 + if req.FinishTime != "" { + finishTime := strings.Split(req.FinishTime, "&") + if len(finishTime) == 2 { + startTime, _ := time.Parse("2006-01-02", finishTime[0]) + endTime, _ := time.Parse("2006-01-02", finishTime[1]) + + if startTime == endTime { + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + } + + query = query.Where("finish_time BETWEEN ? AND ?", startTime, endTime) + } + } + + // 是否提现 + if req.IsWithdrawal != nil { + query = query.Where("is_withdrawal = ?", req.IsWithdrawal) + } + + // 订单取消时间 + if req.CancelTime != "" { + cancelTime := strings.Split(req.CancelTime, "&") + if len(cancelTime) == 2 { + startTime, _ := time.Parse("2006-01-02", cancelTime[0]) + endTime, _ := time.Parse("2006-01-02", cancelTime[1]) + + if startTime == endTime { + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + } + + query = query.Where("cancel_time BETWEEN ? AND ?", startTime, endTime) + } + } + + // 创建时间 + if req.CreatedAt != "" { + createdAt := strings.Split(req.CreatedAt, "&") + if len(createdAt) == 2 { + startTime, _ := time.Parse("2006-01-02", createdAt[0]) + endTime, _ := time.Parse("2006-01-02", createdAt[1]) + + if startTime == endTime { + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + } + + query = query.Where("created_at BETWEEN ? AND ?", startTime, endTime) + } + } + + // 患者姓名-就诊人 + if req.PatientName != "" { + query = query.Where("patient_name LIKE ?", "%"+req.PatientName+"%") + } + + // 手机号-医生/患者 + if req.Mobile != "" { + // 患者 + subQuery := global.Db.Model(&model.User{}). + Select("user_id"). + Where("mobile = ?", req.Mobile) + + query = query.Where("user_id IN (?)", subQuery) + } + } + + // 当前选中数据 + if req.Type == 2 { + if req.Id == "" { + return nil, errors.New("未提供需导出数据编号") + } + + id := strings.Split(req.Id, ",") + query = query.Where("order_inquiry_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/dto/OrderInquiry.go b/api/dto/OrderInquiry.go index 50c8df9..991a1ff 100644 --- a/api/dto/OrderInquiry.go +++ b/api/dto/OrderInquiry.go @@ -49,7 +49,7 @@ type OrderInquiryDto struct { OrderEvaluation *OrderEvaluationDto `json:"order_evaluation"` // 订单评价 UserDoctor *UserDoctorDto `json:"user_doctor"` // 医生数据 MessageIm []*MessageImDto `json:"message_im"` // 聊天记录 - EntryStatus *int `json:"entry_status"` // 入账状态(0:未入账 1:已入账 2:入账中 3:入账失败) + EntryStatus *int `json:"entry_status"` // 入账状态(0:未入账 1:已入账 2:入账中 3:入账失败 4:入账取消) DoctorAmount float64 `json:"doctor_amount"` // 医生收益 } diff --git a/api/requests/orderInquiry.go b/api/requests/orderInquiry.go index bd63115..6d8b897 100644 --- a/api/requests/orderInquiry.go +++ b/api/requests/orderInquiry.go @@ -1,11 +1,12 @@ package requests type OrderInquiryRequest struct { - GetOrderInquiryPage // 获取问诊订单列表-分页 - CancelOrderInquiry // 取消问诊订单 - GetOrderInquiryRecordPage // 获取问诊记录列表-分页 - GetOrderInquiryImPage // 获取问诊订单im内容列表-分页 - GetOrderInquiryForAccountPage // 获取账户关联问诊订单列表-分页 + GetOrderInquiryPage // 获取问诊订单列表-分页 + CancelOrderInquiry // 取消问诊订单 + GetOrderInquiryRecordPage // 获取问诊记录列表-分页 + GetOrderInquiryImPage // 获取问诊订单im内容列表-分页 + GetOrderInquiryForAccountPage // 获取账户关联问诊订单列表-分页 + OrderInquiryForAccountExportList // 医生账户-关联订单-导出 } // GetOrderInquiryPage 获取问诊订单列表-分页 @@ -86,3 +87,22 @@ type GetOrderInquiryForAccountPage struct { CancelTime string `json:"cancel_time" form:"cancel_time" label:"订单取消时间"` // 时间区间,数组形式,下标0为开始时间,下标1为结束时间 CreatedAt string `json:"created_at" form:"created_at" label:"订单创建时间"` // 时间区间,数组形式,下标0为开始时间,下标1为结束时间 } + +// OrderInquiryForAccountExportList 医生账户-关联订单-导出 +type OrderInquiryForAccountExportList 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时必填 + DoctorId string `json:"doctor_id" form:"doctor_id" validate:"required" label:"医生id"` + InquiryNo string `json:"inquiry_no" form:"inquiry_no" label:"系统订单编号"` + EscrowTradeNo string `json:"escrow_trade_no" form:"escrow_trade_no" label:"第三方支付流水号"` + PatientName string `json:"patient_name" form:"patient_name" label:"患者姓名-就诊人"` + Mobile string `json:"mobile" form:"mobile" label:"手机号-患者"` + InquiryStatus *int `json:"inquiry_status" form:"inquiry_status" label:"问诊订单状态"` // 1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消 + PayTime string `json:"pay_time" form:"pay_time" label:"支付时间"` // 时间区间,数组形式,下标0为开始时间,下标1为结束时间 + ReceptionTime string `json:"reception_time" form:"reception_time" label:"接诊时间"` // 时间区间,数组形式,下标0为开始时间,下标1为结束时间 + CompleteTime string `json:"complete_time" form:"complete_time" label:"订单完成时间"` // 时间区间,数组形式,下标0为开始时间,下标1为结束时间 + FinishTime string `json:"finish_time" form:"finish_time" label:"订单结束时间"` // 时间区间,数组形式,下标0为开始时间,下标1为结束时间 + IsWithdrawal *int `json:"is_withdrawal" form:"is_withdrawal" label:"是否提现"` // 0:否 1:是 2:提现中 + CancelTime string `json:"cancel_time" form:"cancel_time" label:"订单取消时间"` // 时间区间,数组形式,下标0为开始时间,下标1为结束时间 + CreatedAt string `json:"created_at" form:"created_at" label:"订单创建时间"` // 时间区间,数组形式,下标0为开始时间,下标1为结束时间 +} diff --git a/api/router/router.go b/api/router/router.go index bf1138f..0995910 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -618,7 +618,7 @@ func privateRouter(r *gin.Engine, api controller.Api) { doctorGroup.POST("/account", api.Export.DoctorAccount) // 医生账户-关联订单 - doctorGroup.POST("/account/order", api.UserCaCert.RenewUserCloudCert) + doctorGroup.POST("/account/order", api.Export.OrderInquiryForAccount) } // 患者 diff --git a/api/service/OrderInquiry.go b/api/service/OrderInquiry.go index 7c697d0..47e52c0 100644 --- a/api/service/OrderInquiry.go +++ b/api/service/OrderInquiry.go @@ -2,6 +2,7 @@ package service import ( "errors" + "github.com/shopspring/decimal" "gorm.io/gorm" "hospital-admin-api/api/dao" "hospital-admin-api/api/dto" @@ -363,44 +364,46 @@ func (r *OrderInquiryService) GetOrderInquiryRecord(orderInquiryId int64) (g *dt return g, nil } -// GetOrderInquiryRecord 问诊记录详情 -func (r *OrderInquiryService) GetDoctor(orderInquiryId int64) (g *dto.OrderInquiryDto, err error) { - // 获取问诊订单数据 - orderInquiryDao := dao.OrderInquiryDao{} - orderInquiry, err := orderInquiryDao.GetOrderInquiryPreloadById(orderInquiryId) - if err != nil || orderInquiry == nil { - return nil, errors.New(err.Error()) +// GetOrderInquiryEntryStatus 获取订单入账状态 +func (r *OrderInquiryService) GetOrderInquiryEntryStatus(inquiryStatus, statisticsStatus int) int { + // entryStatus 入账状态(0:未入账 1:已入账 2:入账中 3:入账失败 4:入账取消) + // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + var entryStatus int + if inquiryStatus == 7 { + entryStatus = 4 } - // 获取问诊病例 - orderInquiryCaseDao := dao.OrderInquiryCaseDao{} - orderInquiryCase, err := orderInquiryCaseDao.GetOrderInquiryCaseByOrderInquiryId(orderInquiryId) - if orderInquiryCase == nil { - return nil, errors.New("数据错误,无问诊病例") + if inquiryStatus == 1 || inquiryStatus == 2 || inquiryStatus == 3 { + entryStatus = 0 } - // 获取医生数据 - userDoctorService := UserDoctorService{} - userDoctor, err := userDoctorService.GetUserDoctorById(orderInquiry.DoctorId) - if err != nil { - return nil, errors.New(err.Error()) + if inquiryStatus == 4 || inquiryStatus == 5 { + entryStatus = 2 } - // 获取聊天记录 - messageImDao := dao.MessageImDao{} - messageIms, err := messageImDao.GetMessageImByOrderInquiryId(orderInquiryId) + if inquiryStatus == 6 { + if statisticsStatus == 1 { + entryStatus = 1 + } - // 处理返回值 - g = dto.GetOrderInquiryRecordDto(orderInquiry) + // 统计失败/已结束未统计 + if inquiryStatus == 2 || inquiryStatus == 0 { + entryStatus = 3 + } + } - // 加载医生数据 - g.UserDoctor = userDoctor - - // 加载问诊病例 - g.LoadMaskOrderInquiryCase(orderInquiryCase) - - // 加载聊天记录 - g.LoadMessageIm(messageIms) - - return g, nil + return entryStatus +} + +// GetOrderInquiryDoctorAmount 获取订单中医生收益 +func (r *OrderInquiryService) GetOrderInquiryDoctorAmount(inquiryStatus int, amountTotal float64) float64 { + var doctorAmount float64 + if inquiryStatus == 4 || inquiryStatus == 5 || inquiryStatus == 6 { + doctorAmount, _ = decimal.NewFromFloat(amountTotal). + Mul(decimal.NewFromFloat(0.75)). + Mul(decimal.NewFromFloat(100000)).Floor(). + Div(decimal.NewFromFloat(100000)).Float64() + } + + return doctorAmount } diff --git a/api/service/export.go b/api/service/export.go index 2410271..6d78b12 100644 --- a/api/service/export.go +++ b/api/service/export.go @@ -136,6 +136,42 @@ type DoctorAccountData struct { EstimateIncome float64 // 今日预计收入 } +// OrderInquiryForAccount 医生账户-关联订单 +type OrderInquiryForAccount struct { + InquiryNo string // 系统订单编号 + DoctorName string // 医生姓名 + UserName string // 用户姓名(患者) + PatientName string // 患者姓名-就诊人 + PatientSex string // 患者性别-就诊人(0:未知 1:男 2:女) + PatientAge string // 患者年龄-就诊人 + PatientMobile string // 患者电话 + InquiryType string // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测) + InquiryMode string // 订单问诊方式(1:图文 2:视频 3:语音 4:电话 5:会员) + InquiryStatus string // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + IsDelete string // 删除状态(0:否 1:是) + InquiryRefundStatus string // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + InquiryPayChannel string // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) + InquiryPayStatus string // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + EscrowTradeNo string // 第三方支付流水号 + AmountTotal float64 // 订单金额 + CouponAmountTotal float64 // 优惠卷总金额 + PaymentAmountTotal float64 // 实际付款金额 + DoctorAmount float64 // 医生收益 + PayTime time.Time // 支付时间 + ReceptionTime time.Time // 接诊时间(已接诊) + CompleteTime time.Time // 订单完成时间(问诊完成时间) + FinishTime time.Time // 订单结束时间 + StatisticsStatus string // 订单统计状态(0:未统计 1:已统计 2:统计失败) + StatisticsTime time.Time // 订单统计时间 + IsWithdrawal string // 是否提现(0:否 1:是 2:提现中) + WithdrawalTime time.Time // 提现时间 + CancelTime time.Time // 订单取消时间 + CancelReason string // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) + CancelRemarks string // 取消订单备注(自动添加) + EntryStatus string // 入账状态(0:未入账 1:已入账 2:入账中 3:入账失败) + CreatedAt time.Time // 创建时间 +} + // DoctorWithdrawal 提现记录 func (r *ExportService) DoctorWithdrawal(doctorWithdrawals []*model.DoctorWithdrawal) (string, error) { header := []utils.HeaderCellData{ @@ -839,3 +875,154 @@ func (r *ExportService) DoctorAccount(d []*model.DoctorAccount) (string, error) ossPath = utils.AddOssDomain("/" + ossPath) return ossPath, nil } + +// OrderInquiryForAccount 医生账户-关联订单 +func (r *ExportService) OrderInquiryForAccount(d []*model.OrderInquiry) (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: 18}, + {Value: "患者性别-就诊人", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "患者年龄-就诊人", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "患者电话", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "订单类型", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "订单问诊方式", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "问诊订单状态", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "删除状态", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "问诊订单退款状态", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "支付渠道", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "支付状态", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "第三方支付流水号", CellType: "string", NumberFmt: "", ColWidth: 25}, + {Value: "订单金额", CellType: "float64", NumberFmt: "0.0000", ColWidth: 18}, + {Value: "优惠卷总金额", CellType: "float64", NumberFmt: "0.0000", ColWidth: 18}, + {Value: "实际付款金额", CellType: "float64", NumberFmt: "0.0000", ColWidth: 18}, + {Value: "医生收益", CellType: "float64", NumberFmt: "0.0000", ColWidth: 18}, + {Value: "支付时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, + {Value: "接诊时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, + {Value: "订单完成时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, + {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}, + {Value: "是否提现", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "提现时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, + {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: "string", NumberFmt: "", ColWidth: 18}, + {Value: "创建时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, + } + + orderInquiryService := OrderInquiryService{} + + var dataSlice []interface{} + for _, v := range d { + data := OrderInquiryForAccount{ + InquiryNo: v.InquiryNo, + DoctorName: v.PatientName, + PatientName: v.PatientName, + PatientAge: fmt.Sprintf("%d", v.PatientAge), + EscrowTradeNo: v.EscrowTradeNo, + AmountTotal: v.AmountTotal, + CouponAmountTotal: v.CouponAmountTotal, + PaymentAmountTotal: v.PaymentAmountTotal, + CancelRemarks: v.CancelRemarks, + } + + if v.UserDoctor != nil { + // 医生姓名 + data.DoctorName = v.UserDoctor.UserName + } + + if v.User != nil { + // 用户姓名(患者) + data.UserName = v.User.UserName + + // 患者电话 + data.PatientMobile = v.User.Mobile + } + + // 性别 + data.PatientSex = utils.SexToString(v.PatientSex) + data.InquiryType = utils.InquiryTypeToString(v.InquiryType) + data.InquiryMode = utils.InquiryModeToString(v.InquiryMode) + data.InquiryStatus = utils.InquiryStatusToString(v.InquiryStatus) + data.IsDelete = utils.IsDeleteToString(v.IsDelete) + data.InquiryRefundStatus = utils.RefundStatusToString(v.InquiryRefundStatus) + data.InquiryPayChannel = utils.PayChannelToString(v.InquiryPayChannel) + data.InquiryPayStatus = utils.PayStatusToString(v.InquiryPayStatus) + + if v.PayTime != (model.LocalTime{}) { + t := time.Time(v.PayTime) + data.PayTime = t + } + + if v.ReceptionTime != (model.LocalTime{}) { + t := time.Time(v.ReceptionTime) + data.ReceptionTime = t + } + + if v.CompleteTime != (model.LocalTime{}) { + t := time.Time(v.CompleteTime) + data.CompleteTime = t + } + + if v.FinishTime != (model.LocalTime{}) { + t := time.Time(v.FinishTime) + data.FinishTime = t + } + + if v.StatisticsTime != (model.LocalTime{}) { + t := time.Time(v.StatisticsTime) + data.StatisticsTime = t + } + + if v.WithdrawalTime != (model.LocalTime{}) { + t := time.Time(v.WithdrawalTime) + data.WithdrawalTime = t + } + + if v.CancelTime != (model.LocalTime{}) { + t := time.Time(v.CancelTime) + data.CancelTime = t + } + + if v.CreatedAt != (model.LocalTime{}) { + t := time.Time(v.CreatedAt) + data.CreatedAt = t + } + + data.StatisticsStatus = utils.StatisticsStatusToString(v.StatisticsStatus) + data.IsWithdrawal = utils.IsWithdrawalToString(v.IsWithdrawal) + data.CancelReason = utils.CancelReasonToString(v.CancelReason) + + // 处理入账状态(0:未入账 1:已入账 2:入账中 3:入账失败 4:入账取消) + entryStatus := orderInquiryService.GetOrderInquiryEntryStatus(v.InquiryStatus, v.StatisticsStatus) + data.EntryStatus = utils.EntryStatusToString(entryStatus) + + // 处理医生收益 + data.DoctorAmount = orderInquiryService.GetOrderInquiryDoctorAmount(v.InquiryStatus, v.AmountTotal) + + 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 deleted file mode 100755 index 9ddeebaadc9f84c1bbe51927c068ca6f0ab07f19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6908 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 I|093@2WS|ss{jB1 diff --git a/utils/intToString.go b/utils/intToString.go index 470ab70..912c992 100644 --- a/utils/intToString.go +++ b/utils/intToString.go @@ -233,3 +233,159 @@ func WithdrawalExamineStatusToString(i int) string { return "未知" } } + +// InquiryTypeToString 问诊订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测) +func InquiryTypeToString(i int) string { + switch i { + case 1: + return "专家问诊" + case 2: + return "快速问诊" + case 3: + return "公益问诊" + case 4: + return "问诊购药" + case 5: + return "检测" + default: + return "未知" + } +} + +// InquiryModeToString 订单问诊方式(1:图文 2:视频 3:语音 4:电话 5:会员) +func InquiryModeToString(i int) string { + switch i { + case 1: + return "图文" + case 2: + return "视频" + case 3: + return "语音" + case 4: + return "电话" + case 5: + return "会员" + default: + return "未知" + } +} + +// IsDeleteToString 删除状态(0:否 1:是) +func IsDeleteToString(i int) string { + switch i { + case 0: + return "否" + case 1: + return "是" + default: + return "" + } +} + +// RefundStatusToString 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) +func RefundStatusToString(i int) string { + switch i { + case 0: + return "无退款" + case 1: + return "申请退款" + case 2: + return "退款中" + case 3: + return "退款成功" + case 4: + return "拒绝退款" + case 5: + return "退款关闭" + case 6: + return "退款异常" + default: + return "未知" + } +} + +// PayStatusToString 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) +func PayStatusToString(i int) string { + switch i { + case 1: + return "未支付" + case 2: + return "已支付" + case 3: + return "支付中" + case 4: + return "支付失败" + case 5: + return "支付超时" + case 6: + return "支付关闭" + case 7: + return "已撤销" + default: + return "未知" + } +} + +// StatisticsStatusToString 订单统计状态(0:未统计 1:已统计 2:统计失败) +func StatisticsStatusToString(i int) string { + switch i { + case 0: + return "未统计" + case 1: + return "已统计" + case 2: + return "统计失败" + default: + return "" + } +} + +// IsWithdrawalToString 是否提现(0:否 1:是 2:提现中) +func IsWithdrawalToString(i int) string { + switch i { + case 0: + return "否" + case 1: + return "是" + case 2: + return "提现中" + default: + return "" + } +} + +// CancelReasonToString 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) +func CancelReasonToString(i int) string { + switch i { + case 1: + return "医生未接诊" + case 2: + return "主动取消" + case 3: + return "无可分配医生" + case 4: + return "客服取消" + case 5: + return "支付超时" + default: + return "" + } +} + +// EntryStatusToString 入账状态(0:未入账 1:已入账 2:入账中 3:入账失败 4:入账取消) +func EntryStatusToString(i int) string { + switch i { + case 0: + return "未入账" + case 1: + return "已入账" + case 2: + return "入账中" + case 3: + return "入账失败" + case 4: + return "入账取消" + default: + return "" + } +}