1
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
package service
|
||||
|
||||
import "case-admin-api/api/dao"
|
||||
|
||||
type ProjectService struct {
|
||||
}
|
||||
|
||||
// GetProjectIsHaveWelfare 获取项目福利存在情况
|
||||
func (r *ProjectService) GetProjectIsHaveWelfare(projectId, platformId int64) bool {
|
||||
var isHaveWelfare bool
|
||||
|
||||
// 获取项目关联平台
|
||||
projectPlatformDao := dao.ProjectPlatformDao{}
|
||||
maps := make(map[string]interface{})
|
||||
maps["project_id"] = projectId
|
||||
maps["platform_id"] = platformId
|
||||
projectPlatform, _ := projectPlatformDao.GetProjectPlatform(maps)
|
||||
if projectPlatform == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
// 获取项目关联病例
|
||||
caseDao := dao.CaseDao{}
|
||||
maps = make(map[string]interface{})
|
||||
maps["project_id"] = projectId
|
||||
results, _ := caseDao.GetCaseList(maps)
|
||||
if len(results) > 0 {
|
||||
casePlatformDao := dao.CasePlatformDao{}
|
||||
for _, result := range results {
|
||||
if result.CaseStatus != 1 {
|
||||
continue
|
||||
}
|
||||
|
||||
// 获取病例平台表
|
||||
maps = make(map[string]interface{})
|
||||
maps["case_id"] = result.CaseId
|
||||
maps["platform_id"] = platformId
|
||||
casePlatform, err := casePlatformDao.GetCasePlatform(maps)
|
||||
if err != nil && casePlatform == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
if projectPlatform.IsWelfare == 1 {
|
||||
// 单个病例总积分-单个病例已发放积分
|
||||
diffScore := projectPlatform.SingleCaseScore - casePlatform.IssuedScore
|
||||
if diffScore > 0 {
|
||||
isHaveWelfare = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return isHaveWelfare
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"case-admin-api/api/dao"
|
||||
"case-admin-api/api/model"
|
||||
"case-admin-api/utils"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// ProjectPlatformWhiteService 项目关联平台白名单
|
||||
type ProjectPlatformWhiteService struct {
|
||||
}
|
||||
|
||||
// DeleteProjectPlatformWhite 删除平台白名单数据
|
||||
func (r *ProjectPlatformWhiteService) DeleteProjectPlatformWhite(tx *gorm.DB, whiteType int, platformId int64) error {
|
||||
if whiteType == 1 {
|
||||
projectPlatformHospitalDao := dao.ProjectPlatformHospitalDao{}
|
||||
err := projectPlatformHospitalDao.DeleteProjectPlatformHospitalByPlatformId(tx, platformId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else if whiteType == 2 {
|
||||
projectPlatformDoctorDao := dao.ProjectPlatformDoctorDao{}
|
||||
err := projectPlatformDoctorDao.DeleteProjectPlatformDoctorByPlatformId(tx, platformId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else if whiteType == 3 {
|
||||
projectPlatformDynamicDao := dao.ProjectPlatformDynamicDao{}
|
||||
maps := make(map[string]interface{})
|
||||
maps["platform_id"] = platformId
|
||||
projectPlatformDynamic, err := projectPlatformDynamicDao.GetProjectPlatformDynamic(maps)
|
||||
if err != nil && projectPlatformDynamic != nil {
|
||||
// 删除明细
|
||||
projectPlatformDynamicItemDao := dao.ProjectPlatformDynamicItemDao{}
|
||||
err = projectPlatformDynamicItemDao.DeleteProjectPlatformDynamicItemByWhiteDynamicId(tx, projectPlatformDynamic.WhiteDynamicId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = projectPlatformDynamicDao.DeleteProjectPlatformDynamicByPlatformId(tx, platformId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// CheckProjectPlatformWhiteByUser 检测用户是否属于白名单
|
||||
func (r *ProjectPlatformWhiteService) CheckProjectPlatformWhiteByUser(user *model.User, projectId, platformId int64) (b bool, err error) {
|
||||
// 获取项目关联平台数据
|
||||
projectPlatformDao := dao.ProjectPlatformDao{}
|
||||
maps := make(map[string]interface{})
|
||||
maps["project_id"] = projectId
|
||||
maps["platform_id"] = platformId
|
||||
projectPlatform, err := projectPlatformDao.GetProjectPlatform(maps)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
// 肝胆相照平台,如果没有开启白名单,默认返回用户属于白名单
|
||||
if projectPlatform.PlatformId == 1 && projectPlatform.IsWhite == 0 {
|
||||
return true, err
|
||||
}
|
||||
|
||||
// 白名单-医生
|
||||
projectPlatformDoctorDao := dao.ProjectPlatformDoctorDao{}
|
||||
maps = make(map[string]interface{})
|
||||
maps["project_platform_id"] = projectPlatform.ProjectPlatformId
|
||||
maps["user_id"] = user.UserId
|
||||
projectPlatformDoctor, _ := projectPlatformDoctorDao.GetProjectPlatformDoctor(maps)
|
||||
if projectPlatformDoctor != nil {
|
||||
if projectPlatformDoctor.Status == 1 {
|
||||
return true, err
|
||||
}
|
||||
}
|
||||
|
||||
// 获取用户医院数据
|
||||
basicHospitalDao := dao.BasicHospitalDao{}
|
||||
basicHospital, err := basicHospitalDao.GetBasicHospitalById(user.HospitalId)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
// 白名单-医院
|
||||
projectPlatformHospitalDao := dao.ProjectPlatformHospitalDao{}
|
||||
maps = make(map[string]interface{})
|
||||
maps["project_platform_id"] = projectPlatform.ProjectPlatformId
|
||||
maps["hospital_id"] = user.HospitalId
|
||||
projectPlatformHospital, _ := projectPlatformHospitalDao.GetProjectPlatformHospital(maps)
|
||||
if projectPlatformHospital != nil {
|
||||
if projectPlatformHospital.Status == 1 {
|
||||
return true, err
|
||||
}
|
||||
}
|
||||
|
||||
// 白名单-动态
|
||||
projectPlatformDynamicDao := dao.ProjectPlatformDynamicDao{}
|
||||
maps = make(map[string]interface{})
|
||||
maps["project_platform_id"] = projectPlatform.ProjectPlatformId
|
||||
projectPlatformDynamics, _ := projectPlatformDynamicDao.GetProjectPlatformDynamicPreloadList(maps)
|
||||
if len(projectPlatformDynamics) > 0 {
|
||||
area := true
|
||||
level := true
|
||||
title := true
|
||||
department := true
|
||||
|
||||
for _, dynamic := range projectPlatformDynamics {
|
||||
if dynamic.Status == 2 {
|
||||
continue
|
||||
}
|
||||
|
||||
if dynamic.DynamicType == "area" {
|
||||
area = false
|
||||
}
|
||||
|
||||
if dynamic.DynamicType == "level" {
|
||||
level = false
|
||||
}
|
||||
|
||||
if dynamic.DynamicType == "title" {
|
||||
title = false
|
||||
}
|
||||
|
||||
if dynamic.DynamicType == "department" {
|
||||
department = false
|
||||
}
|
||||
|
||||
for _, item := range dynamic.ProjectPlatformDynamicItem {
|
||||
// 省份
|
||||
if dynamic.DynamicType == "area" {
|
||||
if basicHospital.Province == item.ItemValue {
|
||||
area = true
|
||||
}
|
||||
}
|
||||
|
||||
// 医院等级
|
||||
if dynamic.DynamicType == "level" {
|
||||
if basicHospital.HospitalLevel == item.ItemValue {
|
||||
level = true
|
||||
}
|
||||
}
|
||||
|
||||
// 职称
|
||||
if dynamic.DynamicType == "title" {
|
||||
if utils.DoctorTitleToString(user.Title) == item.ItemValue {
|
||||
title = true
|
||||
}
|
||||
}
|
||||
|
||||
// 科室
|
||||
if dynamic.DynamicType == "department" {
|
||||
if user.DepartmentName == item.ItemValue {
|
||||
department = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if area == true && level == true && title == true && department == true {
|
||||
return true, err
|
||||
}
|
||||
}
|
||||
|
||||
return false, err
|
||||
}
|
||||
@@ -0,0 +1,261 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"case-admin-api/api/dao"
|
||||
"case-admin-api/api/model"
|
||||
"case-admin-api/extend/aliyun"
|
||||
"case-admin-api/extend/app"
|
||||
"case-admin-api/extend/superKangaroo"
|
||||
"errors"
|
||||
"fmt"
|
||||
"gorm.io/gorm"
|
||||
"io"
|
||||
"math/rand"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
type UserService struct {
|
||||
}
|
||||
|
||||
// HandleUserImage 处理用户图片
|
||||
func (r *UserService) HandleUserImage(wxAvatar string) (ossPath string, err error) {
|
||||
if wxAvatar == "" {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
// 发送GET请求
|
||||
resp, err := http.Get(wxAvatar)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
defer func(Body io.ReadCloser) {
|
||||
_ = Body.Close()
|
||||
}(resp.Body)
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
return "", errors.New("请求失败")
|
||||
}
|
||||
|
||||
// 读取响应体
|
||||
respBody, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
// 设置文件名字
|
||||
now := time.Now()
|
||||
dateTimeString := now.Format("20060102150405") // 当前时间字符串
|
||||
rand.New(rand.NewSource(time.Now().UnixNano())) // 设置随机数
|
||||
ossPath = "user/avatar/" + dateTimeString + fmt.Sprintf("%d", rand.Intn(9000)+1000) + ".png"
|
||||
|
||||
// 上传oss
|
||||
_, err = aliyun.PutObjectByte(ossPath, respBody)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
ossPath = "/" + ossPath
|
||||
|
||||
return ossPath, nil
|
||||
}
|
||||
|
||||
// ReportUserScore 发放积分
|
||||
// scoreType : 积分类型(1:完成阅读 2:阅读时间满足 3:优质留言 4:再次优质留言 )
|
||||
func (r *UserService) ReportUserScore(tx *gorm.DB, projectId, caseId, platformId int64, scoreType int, user *model.User) (err error) {
|
||||
// 获取项目关联平台
|
||||
projectPlatformDao := dao.ProjectPlatformDao{}
|
||||
maps := make(map[string]interface{})
|
||||
maps["project_id"] = projectId
|
||||
maps["platform_id"] = platformId
|
||||
projectPlatform, err := projectPlatformDao.GetProjectPlatform(maps)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 检测福利开关
|
||||
if projectPlatform.IsWelfare == 0 {
|
||||
// 福利未开
|
||||
return nil
|
||||
}
|
||||
|
||||
// 检测白名单
|
||||
if projectPlatform.IsWhite == 1 {
|
||||
projectPlatformWhiteService := ProjectPlatformWhiteService{}
|
||||
isWhite, err := projectPlatformWhiteService.CheckProjectPlatformWhiteByUser(user, projectId, platformId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 非白名单用户,无需发放积分
|
||||
if isWhite == false {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// 获取需发放积分
|
||||
reportScore := 0
|
||||
appScoreTypeStr := "" // 积分发放原因-app
|
||||
superScoreTypeStr := "" // 积分发放原因-超级袋鼠
|
||||
nodeName := "" // 获取积分节点名称
|
||||
if scoreType == 1 {
|
||||
// 完成阅读
|
||||
reportScore = projectPlatform.CompleteRead
|
||||
appScoreTypeStr = "互动病例-完成阅读"
|
||||
superScoreTypeStr = "调研奖励(完成阅读)"
|
||||
nodeName = "学习"
|
||||
} else if scoreType == 2 {
|
||||
// 阅读时间满足
|
||||
reportScore = projectPlatform.CompleteReadTime
|
||||
appScoreTypeStr = "互动病例-阅读时间满足"
|
||||
superScoreTypeStr = "调研奖励(阅读质量)"
|
||||
nodeName = "阅读达标"
|
||||
} else if scoreType == 3 {
|
||||
// 优质留言
|
||||
reportScore = projectPlatform.FirstHighQuality
|
||||
appScoreTypeStr = "互动病例-优质留言"
|
||||
superScoreTypeStr = "调研奖励(社区贡献)"
|
||||
nodeName = "优质留言"
|
||||
} else if scoreType == 4 {
|
||||
// 再次优质留言
|
||||
reportScore = projectPlatform.OnceMoreHighQuality
|
||||
appScoreTypeStr = "互动病例-优质留言"
|
||||
superScoreTypeStr = "调研奖励(社区贡献)"
|
||||
nodeName = "优质留言"
|
||||
}
|
||||
|
||||
recordScoreDao := dao.RecordScoreDao{}
|
||||
|
||||
// 检测是否有相同手机号用户
|
||||
userDao := dao.UserDao{}
|
||||
maps = make(map[string]interface{})
|
||||
maps["mobile_encryption"] = user.MobileEncryption
|
||||
users, err := userDao.GetUserList(maps)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
for _, m := range users {
|
||||
// 检测积分是否已在其他平台发放过
|
||||
maps = make(map[string]interface{})
|
||||
maps["project_id"] = projectId
|
||||
maps["case_id"] = caseId
|
||||
maps["user_id"] = m.UserId
|
||||
recordScore, _ := recordScoreDao.GetRecordScoreUseTx(tx, maps)
|
||||
if recordScore != nil {
|
||||
if recordScore.PlatformId != platformId {
|
||||
// 由其他平台进行发放积分 修改平台id为其他平台id
|
||||
platformId = recordScore.PlatformId
|
||||
|
||||
user = m
|
||||
}
|
||||
}
|
||||
|
||||
// 检测该类型积分是否已经发放(其他平台也算)
|
||||
maps = make(map[string]interface{})
|
||||
maps["project_id"] = projectId
|
||||
maps["case_id"] = caseId
|
||||
maps["platform_id"] = platformId
|
||||
maps["user_id"] = m.UserId
|
||||
maps["type"] = scoreType
|
||||
recordScore, _ = recordScoreDao.GetRecordScore(maps)
|
||||
if recordScore != nil {
|
||||
// 积分已发放过
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// 获取病例关联平台数据
|
||||
casePlatformDao := dao.CasePlatformDao{}
|
||||
maps = make(map[string]interface{})
|
||||
maps["case_id"] = caseId
|
||||
maps["platform_id"] = platformId
|
||||
casePlatform, err := casePlatformDao.GetCasePlatform(maps)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 检测全部积分是否已发放完毕
|
||||
remainingScore := projectPlatform.SingleCaseScore - casePlatform.IssuedScore
|
||||
if remainingScore <= 0 {
|
||||
// 积分已发放完毕
|
||||
return nil
|
||||
}
|
||||
|
||||
// 新增发放记录-每发一次记录一次
|
||||
recordScore := &model.RecordScore{
|
||||
ProjectId: projectId,
|
||||
CaseId: caseId,
|
||||
PlatformId: platformId,
|
||||
UserId: user.UserId,
|
||||
UserName: user.UserName,
|
||||
Type: scoreType,
|
||||
NodeName: nodeName,
|
||||
Score: reportScore,
|
||||
}
|
||||
|
||||
recordScore, err = recordScoreDao.AddRecordScore(tx, recordScore)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 获取用户参与记录
|
||||
caseUserDao := dao.CaseUserDao{}
|
||||
maps = make(map[string]interface{})
|
||||
maps["case_id"] = caseId
|
||||
maps["platform_id"] = platformId
|
||||
maps["user_id"] = user.UserId
|
||||
caseUser, _ := caseUserDao.GetCaseUserUseTx(tx, maps)
|
||||
if caseUser == nil {
|
||||
return errors.New("积分发放失败")
|
||||
}
|
||||
|
||||
// 累计用户领取积分数据
|
||||
err = caseUserDao.Inc(tx, caseUser.CaseUserId, "total_score", reportScore)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 累计平台发放积分数据
|
||||
err = casePlatformDao.Inc(tx, casePlatform.CasePlatformId, "issued_score", reportScore)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 累计发放积分数据
|
||||
caseDao := dao.CaseDao{}
|
||||
err = caseDao.Inc(tx, caseId, "issued_score", reportScore)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 发放积分-
|
||||
if platformId != 1 && platformId != 2 {
|
||||
return errors.New("积分发放失败")
|
||||
}
|
||||
|
||||
// 肝胆相照
|
||||
if platformId == 1 {
|
||||
_, err = app.ReportUserScore(appScoreTypeStr, user.UserIden, reportScore)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// 超级袋鼠
|
||||
if platformId == 2 {
|
||||
// 获取病例数据
|
||||
caseDao := dao.CaseDao{}
|
||||
result, err := caseDao.GetCaseById(caseId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = superKangaroo.ReportUserScore(caseId, user.UserIden, superScoreTypeStr, recordScore, result)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,252 @@
|
||||
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 // 结束参与时间
|
||||
}
|
||||
|
||||
// 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
|
||||
}
|
||||
Reference in New Issue
Block a user