接口已全部新增完毕

This commit is contained in:
wucongxing8150 2024-12-30 17:52:46 +08:00
parent 29632f7d50
commit 90c2cf1ce0
10 changed files with 323 additions and 22 deletions

View File

@ -156,7 +156,7 @@ func (b *Res) GetResCaseRecordList(c *gin.Context) {
// 获取数据
caseUserDao := dao.CaseUserDao{}
caseUsers, total, err := caseUserDao.GetCaseUserRecordList(req, page, pageSize)
caseUsers, total, err := caseUserDao.GetResCaseUserRecordList(req, page, pageSize)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
@ -306,3 +306,92 @@ func (b *Res) GetResCaseRecordList(c *gin.Context) {
result["data"] = g
responses.OkWithData(result, c)
}
// GetResCaseBehaviorList 获取病例用户操作行为列表
func (b *Res) GetResCaseBehaviorList(c *gin.Context) {
resRequest := requests.ResRequest{}
req := resRequest.GetResCaseBehaviorList
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
}
platformId := c.GetInt64("platformId") // 平台id
if platformId == 0 {
responses.FailWithMessage("非法请求", c)
return
}
req.PlatformId = platformId
if req.StartTime != "" {
if req.EndTime == "" {
responses.FailWithMessage("参数错误", c)
return
}
}
// 获取数据
caseUserDao := dao.CaseUserDao{}
caseUsers, err := caseUserDao.GetResCaseBehaviorList(req)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 处理返回值
g := make([]*dto.ResCaseBehaviorDto, len(caseUsers))
if len(caseUsers) > 0 {
userBehaviorRecordDao := dao.UserBehaviorRecordDao{}
for i, v := range caseUsers {
response := &dto.ResCaseBehaviorDto{
TslUid: v.User.UserIden,
Sid: fmt.Sprintf("%d", v.CaseId),
StartTime: time.Time(v.StartTime).Format("2006-01-02 15:04:05"),
EndTime: time.Time(v.StartTime).Format("2006-01-02 15:04:05"),
UseTime: v.ReadDuration,
IsComplete: 1,
Action: nil,
}
// 获取用户操作行为记录
maps := make(map[string]interface{})
maps["case_id"] = v.CaseId
maps["platform_id"] = v.PlatformId
maps["user_id"] = v.UserId
userBehaviorRecords, _ := userBehaviorRecordDao.GetUserBehaviorRecordList(maps)
// 评论
if len(userBehaviorRecords) > 0 {
response.Action = make([]*dto.ActionDto, len(userBehaviorRecords))
for i2, record := range userBehaviorRecords {
// 用时
useTime := time.Time(record.EndTime).Sub(time.Time(record.StartTime))
actionDto := &dto.ActionDto{
Step: record.Step,
In: time.Time(record.StartTime).Format("2006-01-02 15:04:05"),
Out: time.Time(record.EndTime).Format("2006-01-02 15:04:05"),
UseTime: int(useTime.Seconds()),
}
response.Action[i2] = actionDto
}
}
// 将转换后的结构体添加到新切片中
g[i] = response
}
}
responses.OkWithData(g, c)
}

View File

@ -108,8 +108,8 @@ func (r *CaseUserDao) GetCaseUser(maps interface{}) (m *model.CaseUser, err erro
return m, nil
}
// GetCaseUserRecordList 病例领取记录
func (r *CaseUserDao) GetCaseUserRecordList(req requests.GetResCaseRecordList, page, pageSize int) (m []*model.CaseUser, total int64, err error) {
// GetResCaseUserRecordList 病例领取记录
func (r *CaseUserDao) GetResCaseUserRecordList(req requests.GetResCaseRecordList, page, pageSize int) (m []*model.CaseUser, total int64, err error) {
var totalRecords int64
// 构建查询条件
@ -144,3 +144,28 @@ func (r *CaseUserDao) GetCaseUserRecordList(req requests.GetResCaseRecordList, p
}
return m, totalRecords, nil
}
// GetResCaseBehaviorList 获取病例用户操作行为列表
func (r *CaseUserDao) GetResCaseBehaviorList(req requests.GetResCaseBehaviorList) (m []*model.CaseUser, err error) {
// 构建查询条件
query := global.Db.Model(&model.CaseUser{})
query = query.Preload("User")
query = query.Where("case_id = ?", req.CaseId)
query = query.Where("platform_id = ?", req.PlatformId)
// 时间
if req.StartTime != "" && req.EndTime != "" {
query = query.Where("created_at BETWEEN ? AND ?", req.StartTime, req.EndTime)
}
// 排序
query = query.Order("created_at desc")
err = query.Find(&m).Error
if err != nil {
return nil, err
}
return m, nil
}

View File

@ -11,8 +11,8 @@ type UserAnswerRecordDao struct {
}
// GetUserAnswerRecordById 获取数据-id
func (r *UserAnswerRecordDao) GetUserAnswerRecordById(CaseUserQuestionId int64) (m *model.UserAnswerRecord, err error) {
err = global.Db.First(&m, CaseUserQuestionId).Error
func (r *UserAnswerRecordDao) GetUserAnswerRecordById(RecordId int64) (m *model.UserAnswerRecord, err error) {
err = global.Db.First(&m, RecordId).Error
if err != nil {
return nil, err
}
@ -20,8 +20,8 @@ func (r *UserAnswerRecordDao) GetUserAnswerRecordById(CaseUserQuestionId int64)
}
// GetUserAnswerRecordPreloadById 获取数据-加载全部关联-id
func (r *UserAnswerRecordDao) GetUserAnswerRecordPreloadById(CaseUserQuestionId int64) (m *model.UserAnswerRecord, err error) {
err = global.Db.Preload(clause.Associations).First(&m, CaseUserQuestionId).Error
func (r *UserAnswerRecordDao) GetUserAnswerRecordPreloadById(RecordId int64) (m *model.UserAnswerRecord, err error) {
err = global.Db.Preload(clause.Associations).First(&m, RecordId).Error
if err != nil {
return nil, err
}
@ -38,8 +38,8 @@ func (r *UserAnswerRecordDao) DeleteUserAnswerRecord(tx *gorm.DB, maps interface
}
// DeleteUserAnswerRecordById 删除-id
func (r *UserAnswerRecordDao) DeleteUserAnswerRecordById(tx *gorm.DB, CaseUserQuestionId int64) error {
if err := tx.Delete(&model.UserAnswerRecord{}, CaseUserQuestionId).Error; err != nil {
func (r *UserAnswerRecordDao) DeleteUserAnswerRecordById(tx *gorm.DB, RecordId int64) error {
if err := tx.Delete(&model.UserAnswerRecord{}, RecordId).Error; err != nil {
return err
}
return nil
@ -55,8 +55,8 @@ func (r *UserAnswerRecordDao) EditUserAnswerRecord(tx *gorm.DB, maps interface{}
}
// EditUserAnswerRecordById 修改-id
func (r *UserAnswerRecordDao) EditUserAnswerRecordById(tx *gorm.DB, CaseUserQuestionId int64, data interface{}) error {
err := tx.Model(&model.UserAnswerRecord{}).Where("case_user_question_id = ?", CaseUserQuestionId).Updates(data).Error
func (r *UserAnswerRecordDao) EditUserAnswerRecordById(tx *gorm.DB, RecordId int64, data interface{}) error {
err := tx.Model(&model.UserAnswerRecord{}).Where("record_id = ?", RecordId).Updates(data).Error
if err != nil {
return err
}

View File

@ -0,0 +1,117 @@
package dao
import (
"case-open-api/api/model"
"case-open-api/global"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
type UserBehaviorRecordDao struct {
}
// GetUserBehaviorRecordById 获取数据-id
func (r *UserBehaviorRecordDao) GetUserBehaviorRecordById(RecordId int64) (m *model.UserBehaviorRecord, err error) {
err = global.Db.First(&m, RecordId).Error
if err != nil {
return nil, err
}
return m, nil
}
// GetUserBehaviorRecordPreloadById 获取数据-加载全部关联-id
func (r *UserBehaviorRecordDao) GetUserBehaviorRecordPreloadById(RecordId int64) (m *model.UserBehaviorRecord, err error) {
err = global.Db.Preload(clause.Associations).First(&m, RecordId).Error
if err != nil {
return nil, err
}
return m, nil
}
// DeleteUserBehaviorRecord 删除
func (r *UserBehaviorRecordDao) DeleteUserBehaviorRecord(tx *gorm.DB, maps interface{}) error {
err := tx.Where(maps).Delete(&model.UserBehaviorRecord{}).Error
if err != nil {
return err
}
return nil
}
// DeleteUserBehaviorRecordById 删除-id
func (r *UserBehaviorRecordDao) DeleteUserBehaviorRecordById(tx *gorm.DB, RecordId int64) error {
if err := tx.Delete(&model.UserBehaviorRecord{}, RecordId).Error; err != nil {
return err
}
return nil
}
// EditUserBehaviorRecord 修改
func (r *UserBehaviorRecordDao) EditUserBehaviorRecord(tx *gorm.DB, maps interface{}, data interface{}) error {
err := tx.Model(&model.UserBehaviorRecord{}).Where(maps).Updates(data).Error
if err != nil {
return err
}
return nil
}
// EditUserBehaviorRecordById 修改-id
func (r *UserBehaviorRecordDao) EditUserBehaviorRecordById(tx *gorm.DB, RecordId int64, data interface{}) error {
err := tx.Model(&model.UserBehaviorRecord{}).Where("record_id = ?", RecordId).Updates(data).Error
if err != nil {
return err
}
return nil
}
// GetUserBehaviorRecordList 获取列表
func (r *UserBehaviorRecordDao) GetUserBehaviorRecordList(maps interface{}) (m []*model.UserBehaviorRecord, err error) {
err = global.Db.Where(maps).Find(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// GetUserBehaviorRecordPreloadList 获取列表
func (r *UserBehaviorRecordDao) GetUserBehaviorRecordPreloadList(maps interface{}) (m []*model.UserBehaviorRecord, err error) {
err = global.Db.Preload(clause.Associations).Where(maps).Find(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// GetUserBehaviorRecordCount 获取数量
func (r *UserBehaviorRecordDao) GetUserBehaviorRecordCount(maps interface{}) (total int64, err error) {
err = global.Db.Model(&model.UserBehaviorRecord{}).Where(maps).Count(&total).Error
if err != nil {
return 0, err
}
return total, nil
}
// GetUserBehaviorRecordListRand 获取列表-随机
func (r *UserBehaviorRecordDao) GetUserBehaviorRecordListRand(maps interface{}, limit int) (m []*model.UserBehaviorRecord, err error) {
err = global.Db.Where(maps).Order("rand()").Limit(limit).Find(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// AddUserBehaviorRecord 新增
func (r *UserBehaviorRecordDao) AddUserBehaviorRecord(tx *gorm.DB, model *model.UserBehaviorRecord) (*model.UserBehaviorRecord, error) {
if err := tx.Create(model).Error; err != nil {
return nil, err
}
return model, nil
}
// GetUserBehaviorRecord 获取
func (r *UserBehaviorRecordDao) GetUserBehaviorRecord(maps interface{}) (m *model.UserBehaviorRecord, err error) {
err = global.Db.Where(maps).First(&m).Error
if err != nil {
return nil, err
}
return m, nil
}

View File

@ -63,6 +63,25 @@ type ResCaseRecordDto struct {
Remark []*RemarkDto `json:"remark"` // 评论
}
// ResCaseBehaviorDto 病例用户操作行为
type ResCaseBehaviorDto struct {
TslUid string `json:"tsl_uid"` // 天士力系统uid
Sid string `json:"sid"` // 病例id
StartTime string `json:"starttime"` // 开始时间
EndTime string `json:"endtime"` // 结束时间
UseTime int `json:"usetime"` // 总用时单位秒
IsComplete int `json:"is_complete"` // 是否完成了问卷 1是0 否
Action []*ActionDto `json:"action"` // 步骤数组
}
// ActionDto 病例用户操作行为-步骤数组
type ActionDto struct {
Step string `json:"step"` //步骤名称
In string `json:"in"` //进入时间
Out string `json:"out"` //结束时间
UseTime int `json:"usetime"` //用时 单位秒
}
// QuestionAnswerDto 病例领取记录-问题
type QuestionAnswerDto struct {
Question string `json:"question"` // 问题标题

View File

@ -8,13 +8,15 @@ import (
// CaseUser 统计数据-病例-用户
type CaseUser struct {
CaseUserId int64 `gorm:"column:case_user_id;type:bigint(19);primary_key;comment:主键id" json:"case_user_id"`
CaseId int64 `gorm:"column:case_id;type:bigint(19);comment:所属病例id;NOT NULL" json:"case_id"`
PlatformId int64 `gorm:"column:platform_id;type:bigint(19);comment:用户所属平台id;NOT NULL" json:"platform_id"`
UserId int64 `gorm:"column:user_id;type:bigint(19);comment:用户id;NOT NULL" json:"user_id"`
ShareUserIden string `gorm:"column:share_user_iden;type:varchar(100);comment:分享人标识" json:"share_user_iden"`
ReadDuration int `gorm:"column:read_duration;type:int(5);default:0;comment:阅读时长(秒)" json:"read_duration"`
TotalScore int `gorm:"column:total_score;type:int(5);default:0;comment:单个病例领取总积分" json:"total_score"`
CaseUserId int64 `gorm:"column:case_user_id;type:bigint(19);primary_key;comment:主键id" json:"case_user_id"`
CaseId int64 `gorm:"column:case_id;type:bigint(19);comment:所属病例id;NOT NULL" json:"case_id"`
PlatformId int64 `gorm:"column:platform_id;type:bigint(19);comment:用户所属平台id;NOT NULL" json:"platform_id"`
UserId int64 `gorm:"column:user_id;type:bigint(19);comment:用户id;NOT NULL" json:"user_id"`
ShareUserIden string `gorm:"column:share_user_iden;type:varchar(100);comment:分享人标识" json:"share_user_iden"`
ReadDuration int `gorm:"column:read_duration;type:int(5);default:0;comment:阅读时长(秒)" json:"read_duration"`
TotalScore int `gorm:"column:total_score;type:int(5);default:0;comment:单个病例领取总积分" json:"total_score"`
StartTime LocalTime `gorm:"column:start_time;type:datetime;comment:开始参与时间" json:"start_time"`
EndTime LocalTime `gorm:"column:end_time;type:datetime;comment:结束参与时间" json:"end_time"`
Model
Platform *Platform `gorm:"foreignKey:PlatformId;references:platform_id" json:"platform"`
User *User `gorm:"foreignKey:UserId;references:user_id" json:"user"`

View File

@ -20,7 +20,7 @@ type UserAnswerRecord struct {
}
func (m *UserAnswerRecord) TableName() string {
return "user_answer_records"
return "user_answer_record"
}
func (m *UserAnswerRecord) BeforeCreate(tx *gorm.DB) error {

View File

@ -0,0 +1,37 @@
package model
import (
"case-open-api/global"
"gorm.io/gorm"
"time"
)
// UserBehaviorRecord 用户操作记录
type UserBehaviorRecord struct {
RecordId int64 `gorm:"column:record_id;type:bigint(19);primary_key;comment:主键id" json:"record_id"`
CaseId int64 `gorm:"column:case_id;type:bigint(19);comment:病例id;NOT NULL" json:"case_id"`
PlatformId int64 `gorm:"column:platform_id;type:bigint(19);comment:平台id;NOT NULL" json:"platform_id"`
UserId int64 `gorm:"column:user_id;type:bigint(19);comment:用户id;NOT NULL" json:"user_id"`
Step string `gorm:"column:step;type:varchar(100);comment:步骤名称" json:"step"`
StartTime LocalTime `gorm:"column:start_time;type:datetime;comment:开始时间" json:"start_time"`
EndTime LocalTime `gorm:"column:end_time;type:datetime;comment:结束时间" json:"end_time"`
Model
}
func (m *UserBehaviorRecord) TableName() string {
return "user_behavior_record"
}
func (m *UserBehaviorRecord) BeforeCreate(tx *gorm.DB) error {
if m.RecordId == 0 {
m.RecordId = global.Snowflake.Generate().Int64()
}
m.CreatedAt = LocalTime(time.Now())
tx.Statement.SetColumn("CreatedAt", m.CreatedAt)
m.UpdatedAt = LocalTime(time.Now())
tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt)
return nil
}

View File

@ -1,9 +1,10 @@
package requests
type ResRequest struct {
GetResProjectList // 获取项目列表
GetResCaseList // 获取病例列表
GetResCaseRecordList // 病例领取记录
GetResProjectList // 获取项目列表
GetResCaseList // 获取病例列表
GetResCaseRecordList // 病例领取记录
GetResCaseBehaviorList // 获取病例用户操作行为列表
}
// GetResProjectList 获取项目列表
@ -25,3 +26,11 @@ type GetResCaseRecordList struct {
StartTime string `json:"starttime" form:"starttime" label:"开始时间"`
EndTime string `json:"endtime" form:"endtime" label:"结束时间"`
}
// GetResCaseBehaviorList 获取病例用户操作行为列表
type GetResCaseBehaviorList struct {
PlatformId int64 `json:"platform_id" form:"platform_id" label:"平台id"`
CaseId string `json:"sid" form:"sid" label:"病例标识" validate:"required"`
StartTime string `json:"starttime" form:"starttime" label:"开始时间" validate:"required"`
EndTime string `json:"endtime" form:"endtime" label:"结束时间" validate:"required"`
}

View File

@ -101,6 +101,9 @@ func privateRouter(r *gin.Engine, api controller.Api) {
// 病例领取记录
resCaseGroup.GET("/record", api.Res.GetResCaseRecordList)
// 获取病例用户操作行为列表
resCaseGroup.GET("/behavior/list", api.Res.GetResCaseBehaviorList)
}
}