From 702e4826592e83c0cfc23532d23d1771f5a54681 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 20 Aug 2024 14:57:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=97=85=E4=BE=8B=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/controller/Base.go | 1 + api/controller/User.go | 57 -------- api/controller/UserCase.go | 229 +++++++++++++++++++++++++++++++ api/dao/UserCase.go | 9 ++ api/dao/UserCaseDiseaseItem.go | 17 +++ api/dto/UserCase.go | 48 +++++++ api/dto/UserCaseDiseaseItem.go | 59 ++++++++ api/model/UserCase.go | 1 + api/model/UserCaseDiseaseItem.go | 1 + api/requests/UserCase.go | 24 ++++ api/router/router.go | 10 ++ api/service/User.go | 20 ++- extend/app/userCase.go | 136 ++++++++++++++++-- extend/app/userInfo.go | 10 +- 14 files changed, 545 insertions(+), 77 deletions(-) create mode 100644 api/controller/UserCase.go create mode 100644 api/dto/UserCase.go create mode 100644 api/dto/UserCaseDiseaseItem.go create mode 100644 api/requests/UserCase.go diff --git a/api/controller/Base.go b/api/controller/Base.go index fc8272a..c547a52 100644 --- a/api/controller/Base.go +++ b/api/controller/Base.go @@ -7,6 +7,7 @@ type Api struct { BaseClass // 分类 Question // 问题 User // 用户 + UserCase // 用户病例 UserCoupon // 用户优惠卷 UserCollection // 用户收藏 OrderSingle // 订单-单项 diff --git a/api/controller/User.go b/api/controller/User.go index dd25cdb..f859a14 100644 --- a/api/controller/User.go +++ b/api/controller/User.go @@ -86,63 +86,6 @@ func (r *User) PutUser(c *gin.Context) { responses.Ok(c) } -// PutBindUserName 绑定用户数据-昵称 -func (r *User) PutBindUserName(c *gin.Context) { - userRequest := requests.UserRequest{} - req := userRequest.PutBindUserName - 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 - } - - if req.Nickname == "" { - responses.FailWithMessage("参数错误", c) - return - } - - userId := c.GetInt64("UserId") - - // 获取用户数据 - userDao := dao.UserDao{} - user, err := userDao.GetUserById(userId) - if err != nil { - responses.FailWithMessage("用户数据错误", c) - return - } - - if user.UserName != "" { - responses.Ok(c) - return - } - - userData := make(map[string]interface{}) - userData["user_name"] = req.Nickname - - // 开始事务 - tx := global.Db.Begin() - defer func() { - if r := recover(); r != nil { - tx.Rollback() - } - }() - - err = userDao.EditUserById(tx, user.UserId, userData) - if err != nil { - tx.Rollback() - responses.FailWithMessage(err.Error(), c) - return - } - - tx.Commit() - responses.Ok(c) -} - // GetUserCheck 检测用户数据绑定状态 func (r *User) GetUserCheck(c *gin.Context) { userRequest := requests.UserRequest{} diff --git a/api/controller/UserCase.go b/api/controller/UserCase.go new file mode 100644 index 0000000..57d72c0 --- /dev/null +++ b/api/controller/UserCase.go @@ -0,0 +1,229 @@ +package controller + +import ( + "github.com/gin-gonic/gin" + "hepa-calc-api/api/dao" + "hepa-calc-api/api/dto" + "hepa-calc-api/api/model" + "hepa-calc-api/api/requests" + "hepa-calc-api/api/responses" + "hepa-calc-api/extend/app" + "hepa-calc-api/global" + "hepa-calc-api/utils" + "strconv" +) + +type UserCase struct{} + +// GetUserCase 获取用户数据-病例 +func (r *UserCase) GetUserCase(c *gin.Context) { + userId := c.GetInt64("UserId") + + // 获取用户数据-病例 + userCaseDao := dao.UserCaseDao{} + userCase, err := userCaseDao.GetUserCaseByUserId(userId) + if err != nil { + responses.FailWithMessage("用户数据错误", c) + return + } + + // 获取疾病列表 + userCaseDiseaseItemDao := dao.UserCaseDiseaseItemDao{} + userCaseDiseaseItems, err := userCaseDiseaseItemDao.GetUserCaseDiseaseItemListPreloadByUserCaseId(userCase.UserCaseId) + if err != nil { + responses.FailWithMessage("用户数据错误", c) + return + } + + // 处理返回数据 + g := dto.GetUserCaseDto(userCase) + + // 加载数据-疾病列表 + g.LoadUserCaseDiseaseItem(userCaseDiseaseItems) + + responses.OkWithData(g, c) +} + +// PutUserCase 修改用户数据-病例 +func (r *UserCase) PutUserCase(c *gin.Context) { + userCaseRequest := requests.UserCaseRequest{} + req := userCaseRequest.PutUserCase + if err := c.ShouldBindJSON(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + userId := c.GetInt64("UserId") + + // 获取用户数据 + userDao := dao.UserDao{} + user, err := userDao.GetUserById(userId) + if err != nil { + responses.FailWithMessage("用户数据错误", c) + return + } + + // 获取用户数据-病例 + userCaseDao := dao.UserCaseDao{} + userCase, err := userCaseDao.GetUserCaseByUserId(userId) + if err != nil { + responses.FailWithMessage("用户数据错误", c) + return + } + + userCaseData := make(map[string]interface{}) + appData := app.UpdateUserCaseRequest{ + IsAllergy: req.IsAllergyHistory, + AllergyInfo: req.AllergyHistory, + IsHospital: req.IsHospital, + IsMedication: req.IsMedication, + MedicationInfo: req.Medication, + LiverStatus: req.LiverStatus, + OtherDisease: req.ChronicDisease, + PatientUuid: user.AppIden, + DiseasesList: nil, + } + + // 是否医院就诊 + if req.IsHospital != nil { + userCaseData["is_hospital"] = *req.IsHospital + } else { + userCaseData["is_hospital"] = nil + } + + // 肝脏状态 + userCaseData["liver_status"] = req.LiverStatus + + // 是否服药 + if req.IsMedication != nil { + userCaseData["is_medication"] = *req.IsMedication + + // 服药名称 + if *req.IsMedication == 1 { + if req.Medication == "" { + responses.FailWithMessage("请填写正在服用药品名称", c) + return + } + + userCaseData["medication"] = req.Medication + } + } else { + userCaseData["is_medication"] = nil + userCaseData["medication"] = "" + } + + // 慢性疾病名称(逗号分隔) + userCaseData["chronic_disease"] = req.ChronicDisease + + // 过敏史 + if req.IsAllergyHistory != nil { + userCaseData["is_allergy_history"] = *req.IsAllergyHistory + + // 过敏史描述 + if *req.IsAllergyHistory == 1 { + if req.AllergyHistory == "" { + responses.FailWithMessage("请填写过敏史描述", c) + return + } + + userCaseData["allergy_history"] = req.AllergyHistory + } + } else { + userCaseData["is_allergy_history"] = nil + userCaseData["allergy_history"] = "" + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + // 删除疾病列表 + userCaseDiseaseItemDao := dao.UserCaseDiseaseItemDao{} + err = userCaseDiseaseItemDao.DeleteUserCaseDiseaseItemByUserCaseIdId(tx, userCase.UserCaseId) + if err != nil { + tx.Rollback() + responses.FailWithMessage("操作失败", c) + return + } + + // 所患疾病列表 + if len(req.UserCaseDiseaseItem) > 0 { + baseDiseaseClassDao := dao.BaseDiseaseClassDao{} + diseasesLists := make([]*app.DiseasesListRequest, len(req.UserCaseDiseaseItem)) + + for i, item := range req.UserCaseDiseaseItem { + diseaseClassId, err := strconv.ParseInt(item.DiseaseClassId, 10, 64) + if err != nil { + tx.Rollback() + responses.Fail(c) + return + } + + // 获取疾病分类数据 + baseDiseaseClass, err := baseDiseaseClassDao.GetBaseDiseaseClassById(diseaseClassId) + if err != nil { + tx.Rollback() + responses.Fail(c) + return + } + + userCaseDiseaseItem := &model.UserCaseDiseaseItem{ + UserCaseId: userCase.UserCaseId, + DiseaseClassId: diseaseClassId, + AppIden: baseDiseaseClass.AppIden, + Duration: &item.Duration, + Genotype: item.Genotype, + } + + userCaseDiseaseItem, err = userCaseDiseaseItemDao.AddUserCaseDiseaseItem(tx, userCaseDiseaseItem) + if err != nil { + tx.Rollback() + responses.Fail(c) + return + } + + // app请求数据 + diseasesList := &app.DiseasesListRequest{ + Uuid: baseDiseaseClass.AppIden, + Year: &item.Duration, + Info: "", + Name: baseDiseaseClass.DiseaseClassName, + } + diseasesLists[i] = diseasesList + } + + appData.DiseasesList = diseasesLists + } + + // 病例数据 + if len(userCaseData) > 0 { + err := userCaseDao.EditUserCaseById(tx, userCase.UserCaseId, userCaseData) + if err != nil { + tx.Rollback() + responses.Fail(c) + return + } + } + + // app数据 + appData.PatientUuid = user.AppIden + _, err = app.UpdateUserCase(appData) + if err != nil { + tx.Rollback() + responses.Fail(c) + return + } + + tx.Commit() + responses.Ok(c) +} diff --git a/api/dao/UserCase.go b/api/dao/UserCase.go index a056bf4..195ce63 100644 --- a/api/dao/UserCase.go +++ b/api/dao/UserCase.go @@ -37,6 +37,15 @@ func (r *UserCaseDao) GetUserCaseByUserId(userId int64) (m *model.UserCase, err return m, nil } +// GetUserCasePreloadByUserId 获取数据-user_id +func (r *UserCaseDao) GetUserCasePreloadByUserId(userId int64) (m *model.UserCase, err error) { + err = global.Db.Preload(clause.Associations).Where("user_id = ?", userId).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + // DeleteUserCase 删除 func (r *UserCaseDao) DeleteUserCase(tx *gorm.DB, maps interface{}) error { err := tx.Where(maps).Delete(&model.UserCase{}).Error diff --git a/api/dao/UserCaseDiseaseItem.go b/api/dao/UserCaseDiseaseItem.go index 0088bca..038b20d 100644 --- a/api/dao/UserCaseDiseaseItem.go +++ b/api/dao/UserCaseDiseaseItem.go @@ -37,6 +37,15 @@ func (r *UserCaseDiseaseItemDao) GetUserCaseDiseaseItemByUserCaseId(userCaseId i return m, nil } +// GetUserCaseDiseaseItemListPreloadByUserCaseId 获取数据-user_case_id +func (r *UserCaseDiseaseItemDao) GetUserCaseDiseaseItemListPreloadByUserCaseId(userCaseId int64) (m []*model.UserCaseDiseaseItem, err error) { + err = global.Db.Preload(clause.Associations).Where("user_case_id = ?", userCaseId).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + // DeleteUserCaseDiseaseItem 删除 func (r *UserCaseDiseaseItemDao) DeleteUserCaseDiseaseItem(tx *gorm.DB, maps interface{}) error { err := tx.Where(maps).Delete(&model.UserCaseDiseaseItem{}).Error @@ -54,6 +63,14 @@ func (r *UserCaseDiseaseItemDao) DeleteUserCaseDiseaseItemById(tx *gorm.DB, User return nil } +// DeleteUserCaseDiseaseItemByUserCaseIdId 删除-id +func (r *UserCaseDiseaseItemDao) DeleteUserCaseDiseaseItemByUserCaseIdId(tx *gorm.DB, userCaseId int64) error { + if err := tx.Where("user_case_id = ?", userCaseId).Delete(&model.UserCaseDiseaseItem{}).Error; err != nil { + return err + } + return nil +} + // EditUserCaseDiseaseItem 修改 func (r *UserCaseDiseaseItemDao) EditUserCaseDiseaseItem(tx *gorm.DB, maps interface{}, data interface{}) error { err := tx.Model(&model.UserCaseDiseaseItem{}).Where(maps).Updates(data).Error diff --git a/api/dto/UserCase.go b/api/dto/UserCase.go new file mode 100644 index 0000000..a3cb6ec --- /dev/null +++ b/api/dto/UserCase.go @@ -0,0 +1,48 @@ +package dto + +import ( + "fmt" + "hepa-calc-api/api/model" +) + +// UserCaseDto 用户表-病例 +type UserCaseDto struct { + UserCaseId string `json:"user_case_id"` // 主键id + UserId string `json:"user_id"` // 用户id + IsHospital *int `json:"is_hospital"` // 是否医院就诊(0:否 1:是) + LiverStatus string `json:"liver_status"` // 肝脏状态 + IsMedication *int `json:"is_medication"` // 是否服药(0:否 1:是) + Medication string `json:"medication"` // 服药名称 + ChronicDisease string `json:"chronic_disease"` // 慢性疾病名称(逗号分隔) + IsAllergyHistory *int `json:"is_allergy_history"` // 过敏史(0:否 1:是) + AllergyHistory string `json:"allergy_history"` // 过敏史描述 + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间 + UserCaseDiseaseItem []*UserCaseDiseaseItemDto `json:"user_case_disease_item"` // 所患疾病列表 +} + +// GetUserCaseDto 详情 +func GetUserCaseDto(m *model.UserCase) *UserCaseDto { + return &UserCaseDto{ + UserCaseId: fmt.Sprintf("%d", m.UserCaseId), + UserId: fmt.Sprintf("%d", m.UserId), + IsHospital: m.IsHospital, + LiverStatus: m.LiverStatus, + IsMedication: m.IsMedication, + Medication: m.Medication, + ChronicDisease: m.ChronicDisease, + IsAllergyHistory: m.IsAllergyHistory, + AllergyHistory: m.AllergyHistory, + CreatedAt: m.CreatedAt, + UpdatedAt: m.UpdatedAt, + } +} + +// LoadUserCaseDiseaseItem 加载数据-疾病列表 +func (r *UserCaseDto) LoadUserCaseDiseaseItem(m []*model.UserCaseDiseaseItem) *UserCaseDto { + if len(m) > 0 { + r.UserCaseDiseaseItem = GetUserCaseDiseaseItemListDto(m) + } + + return r +} diff --git a/api/dto/UserCaseDiseaseItem.go b/api/dto/UserCaseDiseaseItem.go new file mode 100644 index 0000000..58a0350 --- /dev/null +++ b/api/dto/UserCaseDiseaseItem.go @@ -0,0 +1,59 @@ +package dto + +import ( + "fmt" + "hepa-calc-api/api/model" +) + +// UserCaseDiseaseItemDto 用户-病例-所患疾病列表 +type UserCaseDiseaseItemDto struct { + ItemId string `json:"item_id"` // 主键id + UserCaseId string `json:"user_case_id"` // 用户病例id + DiseaseClassId string `json:"disease_class_id"` // 疾病分类id + DiseaseClassName string `json:"disease_class_name"` // 疾病分类名称 + AppIden string `json:"app_iden"` // app唯一标识 + Duration *int `json:"duration"` // 患病时长(年) + Genotype string `json:"genotype"` // 基因型(仅丙肝存在) + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间 +} + +// GetUserCaseDiseaseItemListDto 列表-分页 +func GetUserCaseDiseaseItemListDto(m []*model.UserCaseDiseaseItem) []*UserCaseDiseaseItemDto { + // 处理返回值 + responses := make([]*UserCaseDiseaseItemDto, len(m)) + + if len(m) > 0 { + for i, v := range m { + response := &UserCaseDiseaseItemDto{ + ItemId: fmt.Sprintf("%d", v.ItemId), + UserCaseId: fmt.Sprintf("%d", v.UserCaseId), + DiseaseClassId: fmt.Sprintf("%d", v.DiseaseClassId), + AppIden: v.AppIden, + Duration: v.Duration, + Genotype: v.Genotype, + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } + + // 加载数据-疾病名称 + if v.BaseDiseaseClass != nil { + response = response.LoadDiseaseClassName(v.BaseDiseaseClass) + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + return responses +} + +// LoadDiseaseClassName 加载数据-疾病名称 +func (r *UserCaseDiseaseItemDto) LoadDiseaseClassName(m *model.BaseDiseaseClass) *UserCaseDiseaseItemDto { + if m != nil { + r.DiseaseClassName = m.DiseaseClassName + } + + return r +} diff --git a/api/model/UserCase.go b/api/model/UserCase.go index 1f68053..4337306 100644 --- a/api/model/UserCase.go +++ b/api/model/UserCase.go @@ -18,6 +18,7 @@ type UserCase struct { IsAllergyHistory *int `gorm:"column:is_allergy_history;type:tinyint(1);comment:过敏史(0:否 1:是)" json:"is_allergy_history"` AllergyHistory string `gorm:"column:allergy_history;type:varchar(100);comment:过敏史描述" json:"allergy_history"` Model + UserCaseDiseaseItem []*UserCaseDiseaseItem `gorm:"foreignKey:UserCaseId;references:user_case_id" json:"user_case_disease_item"` } func (m *UserCase) TableName() string { diff --git a/api/model/UserCaseDiseaseItem.go b/api/model/UserCaseDiseaseItem.go index 6aeabde..0cf36cf 100644 --- a/api/model/UserCaseDiseaseItem.go +++ b/api/model/UserCaseDiseaseItem.go @@ -15,6 +15,7 @@ type UserCaseDiseaseItem struct { Duration *int `gorm:"column:duration;type:int(5);comment:患病时长(年)" json:"duration"` Genotype string `gorm:"column:genotype;type:varchar(20);comment:基因型(仅丙肝存在)" json:"genotype"` Model + BaseDiseaseClass *BaseDiseaseClass `gorm:"foreignKey:DiseaseClassId;references:disease_class_id" json:"disease_class"` } func (m *UserCaseDiseaseItem) TableName() string { diff --git a/api/requests/UserCase.go b/api/requests/UserCase.go new file mode 100644 index 0000000..21faa30 --- /dev/null +++ b/api/requests/UserCase.go @@ -0,0 +1,24 @@ +package requests + +type UserCaseRequest struct { + PutUserCase // 修改用户数据-病例 +} + +// PutUserCase 修改用户数据-病例 +type PutUserCase struct { + IsHospital *int `json:"is_hospital" form:"is_hospital" label:"是否医院就诊"` + LiverStatus string `json:"liver_status" form:"liver_status" label:"肝脏状态"` + IsMedication *int `json:"is_medication" form:"is_medication" label:"是否服药"` + Medication string `json:"medication" form:"medication" label:"服药名称"` + ChronicDisease string `json:"chronic_disease" form:"chronic_disease" label:"慢性疾病名称(逗号分隔)"` + IsAllergyHistory *int `json:"is_allergy_history" form:"is_allergy_history" label:"过敏史"` + AllergyHistory string `json:"allergy_history" form:"allergy_history" label:"过敏史描述"` + UserCaseDiseaseItem []*PutUserCaseUserCaseDiseaseItem `json:"user_case_disease_item" form:"user_case_disease_item" label:"所患疾病列表"` +} + +// PutUserCaseUserCaseDiseaseItem 修改用户数据-病例-所患疾病列表 +type PutUserCaseUserCaseDiseaseItem struct { + DiseaseClassId string `json:"disease_class_id" form:"disease_class_id" label:"疾病分类id" validate:"required"` // 疾病分类id + Duration int `json:"duration" form:"duration" label:"患病时长" validate:"required"` // 患病时长(年) + Genotype string `json:"genotype" form:"genotype" label:"基因型(仅丙肝存在)"` // 基因型(仅丙肝存在) +} diff --git a/api/router/router.go b/api/router/router.go index b8fe930..3850060 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -184,6 +184,16 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 修改用户数据-基本信息 centerGroup.PUT("", api.User.PutUser) + + // 用户病例 + caseGroup := centerGroup.Group("/case") + { + // 获取用户数据-病例 + caseGroup.GET("", api.UserCase.GetUserCase) + + // 修改用户数据-病例 + caseGroup.PUT("", api.UserCase.PutUserCase) + } } // 优惠卷 diff --git a/api/service/User.go b/api/service/User.go index b343e96..ac74d71 100644 --- a/api/service/User.go +++ b/api/service/User.go @@ -686,6 +686,18 @@ func (r *UserService) PutUser(userId int64, req requests.PutUser) (bool, error) userData["sex"] = req.Sex } + // 头像 + if req.Avatar != "" { + avatar := utils.RemoveOssDomain(req.Avatar) + if avatar != user.Avatar { + userData["avatar"] = req.Avatar + } + } else { + if user.Avatar != "" { + userData["avatar"] = "" + } + } + // 身高 if req.Height != nil { height := fmt.Sprintf("%d", *req.Height) @@ -693,7 +705,9 @@ func (r *UserService) PutUser(userId int64, req requests.PutUser) (bool, error) userInfoData["height"] = req.Height } } else { - userInfoData["height"] = nil + if userInfo.Height != "" { + userInfoData["height"] = nil + } } // 体重 @@ -703,7 +717,9 @@ func (r *UserService) PutUser(userId int64, req requests.PutUser) (bool, error) userInfoData["weight"] = req.Weight } } else { - userInfoData["weight"] = nil + if userInfo.Weight != "" { + userInfoData["weight"] = nil + } } // 民族id diff --git a/extend/app/userCase.go b/extend/app/userCase.go index 9465f0f..3974a58 100644 --- a/extend/app/userCase.go +++ b/extend/app/userCase.go @@ -18,6 +18,28 @@ type GetUserCaseByAppIdenRequest struct { Timestamp string `json:"timestamp"` // 当前时间戳(10位) } +// UpdateUserCaseRequest 修改疾病信息-请求数据 +type UpdateUserCaseRequest struct { + IsAllergy *int `json:"isAllergy"` // 是否过敏史 0否 1是 + AllergyInfo string `json:"allergyInfo"` // 过敏史详情 + IsHospital *int `json:"isHospital"` // 是否去医院 0否 1是 + IsMedication *int `json:"isMedication"` // 是否服药 0否 1是 + MedicationInfo string `json:"medicationInfo"` // 正在服用的药物 + LiverStatus string `json:"liverStatus"` // 目前肝脏状态 + OtherDisease string `json:"otherDisease"` // 合并其他慢性疾病 (多个英文逗号分隔拼接) + DiseasesList []*DiseasesListRequest `json:"diseasesList"` // 所患疾病列表 + PatientUuid string `json:"patientUuid"` // 患者 uuid + Platform string `json:"platform"` // 所属平台 + Timestamp string `json:"timestamp"` // 当前时间戳(10位) +} + +type DiseasesListRequest struct { + Uuid string `json:"uuid"` // 疾病 uuid + Year *int `json:"year"` // 患病时长 + Info string `json:"info"` // 丙肝基因型(仅针对丙肝) + Name string `json:"name"` // 疾病名称 +} + // GetUserCaseByAppIdenResponse 根据app唯一标识获取用户病例信息-返回数据 type GetUserCaseByAppIdenResponse struct { Code int `json:"code"` // 接口调用状态。200:正常;其它值:调用出错 @@ -27,21 +49,30 @@ type GetUserCaseByAppIdenResponse struct { Message string `json:"message"` } -// GetUserCaseByAppIdenData 根据app唯一标识获取用户病例信息-data详细数据 -type GetUserCaseByAppIdenData struct { - AllergyInfo string `json:"allergyInfo" description:"过敏史详情"` - PatientUUID string `json:"patientUuid" description:"患者 uuid"` - DiseasesList []*DiseaseData `json:"diseasesList" description:"所患疾病列表"` - MedicationInfo string `json:"medicationInfo" description:"正在服用的药物"` - OtherDisease string `json:"otherDisease" description:"合并其他慢性疾病 (多个英文逗号分隔拼接)"` - IsMedication *int `json:"isMedication" description:"是否服药 0否 1是"` - IsHospital *int `json:"isHospital" description:"是否去医院 0否 1是"` - IsAllergy *int `json:"isAllergy" description:"是否过敏史 0否 1是"` - LiverStatus string `json:"liverStatus" description:"目前肝脏状态"` +// UpdateUserCaseResponse 修改用户病例-返回数据 +type UpdateUserCaseResponse struct { + Code int `json:"code"` // 接口调用状态。200:正常;其它值:调用出错 + Msg string `json:"msg"` // 结果说明。如果接口调用出错,那么返回错误描述。成功则返回 ok + Data string `json:"data"` // 接口返回结果,各个接口自定义,数据结构参考具体文档说明 + Success bool `json:"success"` + Message string `json:"message"` } -// DiseaseData 所患疾病数据 -type DiseaseData struct { +// GetUserCaseByAppIdenData 根据app唯一标识获取用户病例信息-data详细数据 +type GetUserCaseByAppIdenData struct { + AllergyInfo string `json:"allergyInfo" description:"过敏史详情"` + PatientUUID string `json:"patientUuid" description:"患者 uuid"` + DiseasesList []*DiseasesListData `json:"diseasesList" description:"所患疾病列表"` + MedicationInfo string `json:"medicationInfo" description:"正在服用的药物"` + OtherDisease string `json:"otherDisease" description:"合并其他慢性疾病 (多个英文逗号分隔拼接)"` + IsMedication *int `json:"isMedication" description:"是否服药 0否 1是"` + IsHospital *int `json:"isHospital" description:"是否去医院 0否 1是"` + IsAllergy *int `json:"isAllergy" description:"是否过敏史 0否 1是"` + LiverStatus string `json:"liverStatus" description:"目前肝脏状态"` +} + +// DiseasesListData 根据app唯一标识获取用户病例信息-data详细数据-所患疾病数据 +type DiseasesListData struct { UUID string `json:"uuid" description:"疾病 uuid"` Year *int `json:"year" description:"患病时长"` Info string `json:"info" description:"丙肝基因型(仅针对丙肝)"` @@ -130,3 +161,82 @@ func GetUserCaseByAppIden(appIden string) (g *GetUserCaseByAppIdenResponse, err return g, nil } + +// UpdateUserCase 修改用户病例 +func UpdateUserCase(reqData UpdateUserCaseRequest) (g *UpdateUserCaseResponse, err error) { + reqData.Platform = platform + reqData.Timestamp = strconv.FormatInt(time.Now().Unix(), 10) + + // 将 JSON 数据编码为字节数组 + jsonData, err := json.Marshal(reqData) + if err != nil { + return g, err + } + + maps := make(map[string]interface{}) + err = json.Unmarshal(jsonData, &maps) + if err != nil { + return g, err + } + + // 获取请求签名 + sign, err := GenSignature(maps) + if err != nil { + return g, err + } + + // 准备请求体 + requestBody := bytes.NewBuffer(jsonData) + + // 设置请求 URL + url := apiUrl + "/patient-api/upDiseaseInfo" + + // 创建 POST 请求 + req, err := http.NewRequest("POST", url, requestBody) + if err != nil { + return g, err + } + + // 设置请求头 + req.Header.Set("Content-Type", "application/json") + req.Header.Set("sign", sign) + + // 发送请求 + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + return g, err + } + + defer func(Body io.ReadCloser) { + _ = Body.Close() + }(resp.Body) + + body, err := io.ReadAll(resp.Body) + if err != nil { + return g, err + } + + // 检查响应状态码 + if resp.StatusCode != 200 { + return g, errors.New("失败") + } + + err = json.Unmarshal(body, &g) + if err != nil { + // json解析失败 + return g, err + } + + utils.LogJsonInfo("修改app数据返回", g) + + if g.Code != 200 { + if g.Msg != "" { + return g, errors.New(g.Msg) + } else { + return g, errors.New("失败") + } + } + + return g, nil +} diff --git a/extend/app/userInfo.go b/extend/app/userInfo.go index 1c4e8da..61ddd34 100644 --- a/extend/app/userInfo.go +++ b/extend/app/userInfo.go @@ -48,11 +48,11 @@ type GetInfoByMobileResponse struct { // UpdateInfoResponse 修改用户信息-返回数据 type UpdateInfoResponse struct { - Code int `json:"code"` // 接口调用状态。200:正常;其它值:调用出错 - Msg string `json:"msg"` // 结果说明。如果接口调用出错,那么返回错误描述。成功则返回 ok - Data GetInfoByMobileData `json:"data"` // 接口返回结果,各个接口自定义,数据结构参考具体文档说明 - Success bool `json:"success"` - Message string `json:"message"` + Code int `json:"code"` // 接口调用状态。200:正常;其它值:调用出错 + Msg string `json:"msg"` // 结果说明。如果接口调用出错,那么返回错误描述。成功则返回 ok + Data string `json:"data"` // 接口返回结果,各个接口自定义,数据结构参考具体文档说明 + Success bool `json:"success"` + Message string `json:"message"` } // GetInfoByMobileData 根据手机号获取用户信息-data详细数据