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 9ddeeba..0000000 Binary files a/output.xlsx and /dev/null differ 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 "" + } +}