package service import ( "case-admin-api/api/model" "case-admin-api/config" "case-admin-api/extend/aliyun" "case-admin-api/utils" "fmt" "math/rand" "time" ) // ExportService 导出 type ExportService struct { } // ProjectPlatformHospitalData 关联平台-白名单-医院数据 type ProjectPlatformHospitalData struct { HospitalName string // 医院名称 HospitalLevel string // 医院等级 DoctorNumber int // 医生数量 Province string // 省份 City string // 城市 County string // 区县 Address string // 地址 CreatedAt string // 创建时间 } // ProjectPlatformDoctorData 关联平台-白名单-医生数据 type ProjectPlatformDoctorData struct { UserName string // 姓名 Province string // 省份 HospitalName string // 医院名称 DepartmentName string // 科室名称 Title string // 医生职称(1:主任医师 2:主任中医师 3:副主任医师 4:副主任中医师 5:主治医师 6:住院医师) CreatedAt string // 加入时间 } // StatsCaseUserData 病例参与用户 type StatsCaseUserData struct { UserName string // 姓名 Title string // 省份 DepartmentName string // 科室 HospitalName string // 医院 Area string // 省份 PlatformName string // 平台名称 TotalScore int // 领取总积分 StartTime string // 开始参与时间 EndTime string // 结束参与时间 } // UserRecordData 用户参与记录 type UserRecordData struct { Id string // id标识 CaseName string // 病历名称 UserName string // 姓名 Province string // 省份 UserMobile string // 手机号 DoctorTitle string // 职称 HospitalName string // 医院 DepartmentName string // 科室 PlatformName string // 平台名称 OperateTime string // 操作时间 } // ProjectPlatformHospital 医院白名单 func (r *ExportService) ProjectPlatformHospital(projectPlatformHospitals []*model.ProjectPlatformHospital) (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: 25}, {Value: "城市", CellType: "string", NumberFmt: "", ColWidth: 25}, {Value: "区县", CellType: "string", NumberFmt: "", ColWidth: 25}, {Value: "地址", CellType: "string", NumberFmt: "", ColWidth: 30}, {Value: "创建时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, } var dataSlice []interface{} for _, v := range projectPlatformHospitals { var createdAt string if v.CreatedAt != (model.LocalTime{}) { createdAt = time.Time(v.CreatedAt).Format("2006-01-02 15:04:05") } projectPlatformHospitalData := ProjectPlatformHospitalData{ HospitalName: v.BasicHospital.HospitalName, HospitalLevel: v.BasicHospital.HospitalLevel, DoctorNumber: v.BasicHospital.DoctorNumber, Province: v.BasicHospital.Province, City: v.BasicHospital.City, County: v.BasicHospital.County, Address: v.BasicHospital.Address, CreatedAt: createdAt, } dataSlice = append(dataSlice, projectPlatformHospitalData) } file, err := utils.Export(header, dataSlice) if err != nil { return "", err } ossPath := "dev/" if config.C.Env == "prod" { ossPath = "prod/" } // 设置文件名字 now := time.Now() dateTimeString := now.Format("20060102150405") // 当前时间字符串 rand.New(rand.NewSource(time.Now().UnixNano())) // 设置随机数 ossPath = ossPath + "export/医院白名单" + 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 } // ProjectPlatformDoctor 医生白名单 func (r *ExportService) ProjectPlatformDoctor(projectPlatformDoctors []*model.ProjectPlatformDoctor) (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: 25}, {Value: "医生职称", CellType: "string", NumberFmt: "", ColWidth: 25}, {Value: "加入时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, } var dataSlice []interface{} for _, v := range projectPlatformDoctors { var createdAt string if v.CreatedAt != (model.LocalTime{}) { createdAt = time.Time(v.CreatedAt).Format("2006-01-02 15:04:05") } projectPlatformDoctorData := ProjectPlatformDoctorData{ UserName: v.User.UserName, Province: v.User.Hospital.Province, HospitalName: v.User.Hospital.HospitalName, DepartmentName: v.User.DepartmentName, Title: utils.DoctorTitleToString(v.User.Title), CreatedAt: createdAt, } dataSlice = append(dataSlice, projectPlatformDoctorData) } file, err := utils.Export(header, dataSlice) if err != nil { return "", err } ossPath := "dev/" if config.C.Env == "prod" { ossPath = "prod/" } // 设置文件名字 now := time.Now() dateTimeString := now.Format("20060102150405") // 当前时间字符串 rand.New(rand.NewSource(time.Now().UnixNano())) // 设置随机数 ossPath = ossPath + "export/医生白名单" + 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 } // StatsCaseUser 病例参与用户 func (r *ExportService) StatsCaseUser(statsCaseUsers []*model.CaseUser) (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: 25}, {Value: "省份", CellType: "string", NumberFmt: "", ColWidth: 25}, {Value: "平台名称", CellType: "string", NumberFmt: "", ColWidth: 18}, {Value: "领取总积分", CellType: "string", NumberFmt: "", ColWidth: 25}, {Value: "开始参与时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, {Value: "结束参与时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, } var dataSlice []interface{} for _, v := range statsCaseUsers { var startTime string if v.CreatedAt != (model.LocalTime{}) { startTime = time.Time(v.StartTime).Format("2006-01-02 15:04:05") } var endTime string if v.CreatedAt != (model.LocalTime{}) { endTime = time.Time(v.EndTime).Format("2006-01-02 15:04:05") } statsCaseUserData := StatsCaseUserData{ UserName: "", Title: "", DepartmentName: "", HospitalName: "", Area: "", TotalScore: v.TotalScore, StartTime: startTime, EndTime: endTime, } // 加载数据-平台名称 if v.Platform != nil { statsCaseUserData.PlatformName = v.Platform.PlatformName } if v.User != nil { // 加载数据-科室 statsCaseUserData.DepartmentName = v.User.DepartmentName // 加载数据-职称 statsCaseUserData.Title = utils.DoctorTitleToString(v.User.Title) // 加载数据-用户名称 statsCaseUserData.UserName = v.User.UserName // 加载数据-省份 if v.User.Hospital != nil { statsCaseUserData.Area = v.User.Hospital.Province statsCaseUserData.HospitalName = v.User.Hospital.HospitalName } } dataSlice = append(dataSlice, statsCaseUserData) } file, err := utils.Export(header, dataSlice) if err != nil { return "", err } ossPath := "dev/" if config.C.Env == "prod" { ossPath = "prod/" } // 设置文件名字 now := time.Now() dateTimeString := now.Format("20060102150405") // 当前时间字符串 rand.New(rand.NewSource(time.Now().UnixNano())) // 设置随机数 ossPath = ossPath + "export/参与用户" + 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 } // ExportUserRecord 用户参与记录导出 func (r *ExportService) ExportUserRecord(userBehaviorRecords []*model.UserBehaviorRecord) (string, error) { header := []utils.HeaderCellData{ {Value: "id标识", CellType: "string", NumberFmt: "", ColWidth: 25}, {Value: "病历名称", CellType: "string", NumberFmt: "", ColWidth: 50}, {Value: "姓名", CellType: "string", NumberFmt: "", ColWidth: 25}, {Value: "省份", CellType: "string", NumberFmt: "", ColWidth: 25}, {Value: "手机号", CellType: "string", NumberFmt: "", ColWidth: 18}, {Value: "职称", CellType: "string", NumberFmt: "", ColWidth: 18}, {Value: "医院", CellType: "string", NumberFmt: "", ColWidth: 35}, {Value: "科室", CellType: "string", NumberFmt: "", ColWidth: 18}, {Value: "平台名称", CellType: "string", NumberFmt: "", ColWidth: 18}, {Value: "操作时间", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, } var dataSlice []interface{} for _, v := range userBehaviorRecords { var createdAt string if v.CreatedAt != (model.LocalTime{}) { createdAt = time.Time(v.StartTime).Format("2006-01-02 15:04:05") } userRecordData := UserRecordData{ Id: fmt.Sprintf("%d", v.RecordId), CaseName: "", UserName: "", Province: "", UserMobile: "", DoctorTitle: "", HospitalName: "", DepartmentName: "", PlatformName: "", OperateTime: createdAt, } // 加载数据-平台名称 if v.Platform != nil { userRecordData.PlatformName = v.Platform.PlatformName } if v.Case != nil { userRecordData.CaseName = v.Case.CaseName } if v.User != nil { // 加载数据-手机号 userRecordData.UserMobile = v.User.UserMobile // 加载数据-科室 userRecordData.DepartmentName = v.User.DepartmentName // 加载数据-职称 userRecordData.DoctorTitle = utils.DoctorTitleToString(v.User.Title) // 加载数据-用户名称 userRecordData.UserName = v.User.UserName // 加载数据-省份 if v.User.Hospital != nil { userRecordData.Province = v.User.Hospital.Province userRecordData.HospitalName = v.User.Hospital.HospitalName } } dataSlice = append(dataSlice, userRecordData) } file, err := utils.Export(header, dataSlice) if err != nil { return "", err } ossPath := "dev/" if config.C.Env == "prod" { ossPath = "prod/" } // 设置文件名字 now := time.Now() dateTimeString := now.Format("20060102150405") // 当前时间字符串 rand.New(rand.NewSource(time.Now().UnixNano())) // 设置随机数 ossPath = ossPath + "export/用户参与记录" + 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 }