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/api/service" "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") // 获取用户数据-病例 userCaseDao := dao.UserCaseDao{} userCase, err := userCaseDao.GetUserCaseByUserId(userId) if err != nil { responses.FailWithMessage("用户数据错误", c) return } userCaseData := make(map[string]interface{}) // 是否医院就诊 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() utils.LogJsonErr("操作失败", r) responses.FailWithMessage("操作失败", c) return } }() // 删除疾病列表 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{} for _, 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 } } } // 病例数据 if len(userCaseData) > 0 { err := userCaseDao.EditUserCaseById(tx, userCase.UserCaseId, userCaseData) if err != nil { tx.Rollback() responses.Fail(c) return } } // 发放用户完善资料优惠卷 couponService := service.CouponService{} res := couponService.GrantFillUserInfoCoupon(tx, userId) if res != true { tx.Rollback() responses.FailWithMessage("操作失败", c) return } tx.Commit() responses.Ok(c) }