360 lines
11 KiB
Go
360 lines
11 KiB
Go
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
|
||
}
|