360 lines
11 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}