123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- package dao
- import (
- "database/sql"
- "exam_system/config"
- "exam_system/entity"
- "exam_system/result"
- "exam_system/utils"
- "exam_system/vo"
- "github.com/jmoiron/sqlx"
- "time"
- )
- func AddClass(c *entity.Class) *result.Result {
- tx, err := config.DB.Beginx()
- if err != nil {
- tx.Commit()
- return result.UNKNOW_ERROR.SetData(err)
- }
- return utils.Transation(tx, err, func(tx *sqlx.Tx) *result.Result {
-
- sqlStr := "select id from term where id = ? and delete_at is null limit 1"
- var termId int64
- err = tx.Get(&termId, sqlStr, c.TermId)
- if err != nil {
- if err == sql.ErrNoRows {
- return result.DATA_NOT_FOUND
- }
- return result.UNKNOW_ERROR.SetData(err)
- }
-
- sqlStr = "insert into class(name,term_id,create_at,update_at) values (?,?,?,?)"
- res, err := config.DB.Exec(sqlStr, c.Name, c.TermId, time.Now(), time.Now())
- if err != nil {
- return result.UNKNOW_ERROR.SetData(err)
- }
- id, _ := res.LastInsertId()
- return result.SuccessResult(id)
- })
- }
- func ClassDetail(id string) *result.Result {
- sqlStr := `SELECT
- c.id,
- c.name,
- c.term_id,
- c.create_at,
- c.update_at,
- t.name term_name
- FROM
- class c,
- term t
- WHERE
- c.id =?
- AND c.delete_at IS NULL
- AND c.term_id = t.id`
- var c vo.ClassVo
- err := config.DB.Get(&c, sqlStr, id)
- if err != nil {
- if err == sql.ErrNoRows {
- return result.DATA_NOT_FOUND
- }
- return result.UNKNOW_ERROR.SetData(err.Error())
- }
- return result.SuccessResult(&c)
- }
- func ClassList(page, size int, sort string, query map[string]interface{}) *result.Result {
- parm := make([]interface{}, 0)
- sqlStr := "select c.* from class c,term t where c.term_id = t.id and c.delete_at is null"
- if query["term_id"] != "" {
- sqlStr += `and t.id=? `
- parm = append(parm, query["term_id"])
- }
- sqlStr += `order by create_at `
- if sort == "desc" {
- sqlStr += "desc "
- }
- sqlStr += "limit ?,?"
- parm = append(parm, utils.PostionSize(page, size),size)
- var ts []*vo.ClassVo
- err := config.DB.Select(&ts, sqlStr, parm...)
- if err != nil {
- return result.UNKNOW_ERROR.SetMsg(err.Error())
- }
-
- sqlStr = "select count(c.id) from class c "
- parm = make([]interface{}, 0)
- if query["term_id"] != "" {
- sqlStr += `,term t where c.term_id = t.id and t.id=? and c.delete_at is null`
- parm = append(parm, query["term_id"])
- }
- var total int
- err = config.DB.Get(&total, sqlStr, parm...)
- if err != nil {
- return result.UNKNOW_ERROR.SetMsg(err.Error())
- }
- return result.SUCCESS.SetData(result.NewPage(page,len(ts),total,ts))
- }
- func UpdateClass(t *entity.Class) *result.Result {
-
- tx, err := config.DB.Beginx()
- if err != nil {
- return result.UNKNOW_ERROR.SetData(err)
- }
- return utils.Transation(tx, err, func(tx *sqlx.Tx) *result.Result {
- sqlStr := "select id from term where id = ? and delete_at is null limit 1"
- var termId int64
- err = tx.Get(&termId, sqlStr, t.TermId)
- if err != nil {
- if err == sql.ErrNoRows {
- return result.DATA_NOT_FOUND
- }
- return result.UNKNOW_ERROR.SetData(err)
- }
- sqlStr = `update class set name=?,term_id=?,update_at=? where id=? and delete_at is null `
- var res sql.Result
- res, err = config.DB.Exec(sqlStr, t.Name, t.TermId, time.Now(), t.Id)
- if err != nil {
- return result.UNKNOW_ERROR.SetData(err)
- }
- affected, _ := res.RowsAffected()
- return result.SuccessResult(result.NewResultChange(affected))
- })
- }
- func DeleteClasss(ids []string) *result.Result {
- sqlStr := "update class c left join user u on c.id = u.class_id set c.delete_at=?,u.delete_at=? where c.id in (?)"
- query, param, err := sqlx.In(sqlStr, time.Now(),time.Now(),ids)
- if err != nil {
- return result.UNKNOW_ERROR.SetMsg(err.Error())
- }
- res, err := config.DB.Exec(query, param...)
- if err != nil {
- return result.UNKNOW_ERROR.SetMsg(err.Error())
- }
- affected, _ := res.RowsAffected()
- return result.SUCCESS.SetData(result.NewResultChange(affected))
- }
|