package checks import ( "errors" "zhiyuan/models" "zhiyuan/pkg/app" "zhiyuan/pkg/db" "zhiyuan/pkg/utils" "zhiyuan/services/form" "zhiyuan/services/user/check" ) var Checks models.UserChecks func SelectChecks(form form.ChecksSelect, userID int) error { if form.Answer == "" { return errors.New("选择非法") } checksInfo, _ := GetInfoByID(form.ChecksId, nil, nil) if checksInfo == nil { return errors.New("invalid id") } checkInfo, _ := check.GetInfoByID(checksInfo.CheckId, nil, nil) if checkInfo == nil { return errors.New("invalid id") } if checkInfo.UserId != userID { return errors.New("权限错误") } if checkInfo.State != 0 { return errors.New("考核状态错误") } if checksInfo.Answer == "" { _, err := db.Update(models.UserCheck{}.TableName(), map[string]interface{}{"id": checkInfo.ID}, map[string]interface{}{ "`progress`": checkInfo.Progress + 1, }) if err != nil { return err } } _, err := db.Update(Checks.TableName(), map[string]interface{}{"id": checksInfo.ID}, map[string]interface{}{ "`answer`": form.Answer, }) return err } func Count(where map[string]interface{}) (int64, error) { return db.Count(Checks.TableName(), where) } func CountRaw(where string, param map[string]interface{}) (int64, error) { query := "`zy_user_checks` WHERE " + where return db.CountRaw(query, param) } func GetList(where map[string]interface{}, fields []string, page app.Page, retVal interface{}) ([]*models.UserChecks, error) { if page.PageNum > 0 && page.PageSize > 0 { where["_limit"] = db.GetOffset(uint(page.PageNum), uint(page.PageSize)) } return Checks.GetMulti(where, fields, retVal) } func GetCheckssRaw(where map[string]string, param map[string]interface{}, retVal interface{}) error { field := "SELECT `zy_user_checks`.*, `zy_question`.`content`, `zy_question`.`type`, `zy_question`.`options`, IF(`zy_user_check`.`state` = 1, `zy_question`.`answer`, '') as `right` FROM `zy_user_checks` left join `zy_question` on `zy_question`.`id` = `zy_user_checks`.`question_id` left join `zy_user_check` on `zy_user_check`.`id` = `zy_user_checks`.`check_id`" return db.GetMultiRaw(field, where, param, retVal) } func GetOne(where map[string]interface{}, fields []string, retVal interface{}) (*models.UserChecks, error) { return Checks.GetOne(where, fields, retVal) } func GetChecksOne(where map[string]string, param map[string]interface{}, retVal interface{}) error { field := "SELECT `zy_user_checks`.*, `zy_question`.`content`, `zy_question`.`type`, `zy_question`.`options`, IF(`zy_user_check`.`state` = 1, `zy_question`.`answer`, 0) as `right` FROM `zy_user_checks` left join `zy_question` on `zy_question`.`id` = `zy_user_checks`.`question_id` left join `zy_user_check` on `zy_user_check`.`id` = `zy_user_checks`.`check_id`" where["_page_size"] = utils.ToStr(1) where["_page_num"] = utils.ToStr(1) return db.GetMultiRaw(field, where, param, retVal) } func GetChecksByID(id int, retVal interface{}) error { where := map[string]string{ "where": "`zy_user_checks`.`id` = {{id}}", } param := map[string]interface{}{"id": id} return GetChecksOne(where, param, retVal) } func GetInfoByID(id int, fields []string, retVal interface{}) (*models.UserChecks, error) { return GetOne(map[string]interface{}{"id": id}, fields, retVal) }