123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308 |
- package dao
- import (
- "database/sql"
- "encoding/json"
- "exam_system/config"
- "exam_system/entity"
- "exam_system/result"
- "exam_system/utils"
- "exam_system/vo"
- "fmt"
- "time"
- "github.com/jmoiron/sqlx"
- )
- func AddTestPaper(t *vo.TestPaperVo) *result.Result {
- tx, err := config.DB.Beginx()
- return utils.Transation(tx, err, func(tx *sqlx.Tx) *result.Result {
- // 1.插入试卷
- sqlStr := "insert into test_paper(name,create_at,update_at,status,score,pass_score) values (?,?,?,?,?,?)"
- var res sql.Result
- res, err = tx.Exec(sqlStr, t.Name, time.Now(), time.Now(), entity.USE, t.Score, t.PassScore)
- if err != nil {
- return result.UNKNOW_ERROR.SetData(err)
- }
- id, _ := res.LastInsertId()
- var score int64
- for _, chapter := range t.Chapters {
- var subData []byte
- subData, err = json.Marshal(chapter.SubList)
- // 2.插入章节
- sqlStr = "insert into chapter(name,description,sub_ids,tp_id,`index`) values (?,?,?,?,?)"
- // sublist试题
- var res2 sql.Result
- res2, err = tx.Exec(sqlStr, chapter.Name, chapter.Description, string(subData), id, chapter.Index)
- if err != nil {
- return result.UNKNOW_ERROR.SetData(err)
- }
- affected, _ := res2.RowsAffected()
- score += affected
- }
- return result.SuccessResult(id)
- })
- }
- func TestPaperDetail(id string) *result.Result {
- // 1、查询试卷
- sqlStr := "select * from test_paper where id=? and delete_at is null"
- var t vo.TestPaperVo
- err := config.DB.Get(&t, sqlStr, id)
- if err != nil {
- if err == sql.ErrNoRows {
- return result.DATA_NOT_FOUND
- }
- return result.UNKNOW_ERROR.SetData(err.Error())
- }
- // 2、查询相关章节
- sqlStr = "select * from chapter where tp_id =? order by `index`"
- var chapters []*vo.ChapterVo
- err = config.DB.Select(&chapters, sqlStr, t.Id)
- if err != nil {
- return result.UNKNOW_ERROR.SetMsg(err.Error())
- }
- // 3、获取相关试题,chapter
- for _, chap := range chapters {
- var sidsvo []*vo.SubIdsVo
- err = json.Unmarshal([]byte(chap.SubIds), &sidsvo)
- if err != nil {
- return result.UNKNOW_ERROR.SetMsg(err.Error())
- }
- var subList []*vo.SubjectVo
- for _, sidvo := range sidsvo {
- var sub vo.SubjectVo
- sqlStr = "select * from subject where id = ?"
- err = config.DB.Get(&sub, sqlStr, sidvo.Id)
- if err != nil && err.Error() != "sql: no rows in result set" {
- return result.UNKNOW_ERROR.SetMsg(err.Error())
- }
- sub.Score = sidvo.Score
- subList = append(subList, &sub)
- }
- chap.SubList = subList
- }
- t.Chapters = chapters
- return result.SuccessResult(t)
- }
- func TestPaperDetail2(id string) *result.Result {
- // 1、查询试卷
- sqlStr := "select * from test_paper where id=? and delete_at is null"
- var t vo.TestPaperVo
- err := config.DB.Get(&t, sqlStr, id)
- if err != nil {
- if err == sql.ErrNoRows {
- return result.DATA_NOT_FOUND
- }
- return result.UNKNOW_ERROR.SetData(err.Error())
- }
- // 2、查询相关章节
- sqlStr = "select * from chapter where tp_id =? order by `index`"
- var chapters []*vo.ChapterVo
- err = config.DB.Select(&chapters, sqlStr, t.Id)
- if err != nil {
- return result.UNKNOW_ERROR.SetMsg(err.Error())
- }
- // 3、获取相关试题,chapter
- for _, chap := range chapters {
- var sidsvo []*vo.SubIdsVo
- err = json.Unmarshal([]byte(chap.SubIds), &sidsvo)
- if err != nil {
- return result.UNKNOW_ERROR.SetMsg(err.Error())
- }
- var subList []*vo.SubjectVo
- for _, sidvo := range sidsvo {
- var sub vo.SubjectVo
- sqlStr = "select id, create_at, update_at, delete_at, type, opt_a, opt_b, opt_c, opt_d, analysis, status, question, qb_id from subject where id = ?"
- err = config.DB.Get(&sub, sqlStr, sidvo.Id)
- if err != nil && err.Error() != "sql: no rows in result set" {
- return result.UNKNOW_ERROR.SetMsg(err.Error())
- }
- sub.Score = sidvo.Score
- subList = append(subList, &sub)
- }
- chap.SubList = subList
- }
- t.Chapters = chapters
- return result.SuccessResult(t)
- }
- func TestPaperList(page, size int, sort string, query map[string]interface{}) *result.Result {
- // 1、获取paper
- sqlStr := "select * from test_paper where delete_at is null "
- params := make([]interface{}, 0)
- if query["name"] != nil {
- sqlStr += "and name like ? "
- params = append(params, "%"+query["name"].(string)+"%")
- }
- if query["status"] != nil {
- sqlStr += "and status = ? "
- params = append(params, fmt.Sprintf("%1.0f", query["status"].(float64)))
- }
- sqlStr += "order by create_at "
- if sort == "asc" {
- sqlStr += "asc "
- } else {
- sqlStr += "desc "
- }
- sqlStr += "limit ?,?"
- params = append(params, utils.PostionSize(page, size), size)
- var tp []*vo.TestPaperVo
- err := config.DB.Select(&tp, sqlStr, params...)
- if err != nil {
- return result.UNKNOW_ERROR.SetMsg(err.Error())
- }
- // 2、获取章节
- for _, t := range tp {
- // 2、查询相关章节
- chapterStr := "select * from chapter where tp_id =?"
- var chapters []*vo.ChapterVo
- err = config.DB.Select(&chapters, chapterStr, t.Id)
- if err != nil {
- return result.UNKNOW_ERROR.SetData(err)
- }
- // 3、获取相关试题,chapter
- for _, chap := range chapters {
- var sidsvo []*vo.SubIdsVo
- err = json.Unmarshal([]byte(chap.SubIds), &sidsvo)
- if err != nil {
- return result.UNKNOW_ERROR.SetMsg(err.Error())
- }
- var subList []*vo.SubjectVo
- for _, sidvo := range sidsvo {
- var sub vo.SubjectVo
- sqlStr = "select * from subject where id = ?"
- err = config.DB.Get(&sub, sqlStr, sidvo.Id)
- if err != nil && err.Error() != "sql: no rows in result set" {
- return result.UNKNOW_ERROR.SetMsg(err.Error())
- }
- sub.Score = sidvo.Score
- subList = append(subList, &sub)
- }
- chap.SubList = subList
- }
- t.Chapters = chapters
- }
- // 获取总数
- sqlStr = "select count(id) from test_paper where delete_at is null "
- var total int
- params = make([]interface{}, 0)
- if query["name"] != nil {
- sqlStr += "and name like ? "
- params = append(params, "%"+query["name"].(string)+"%")
- }
- if query["status"] != nil {
- sqlStr += "and status = ? "
- params = append(params, fmt.Sprintf("%1.0f", query["status"].(float64)))
- }
- err = config.DB.Get(&total, sqlStr, params...)
- if err != nil {
- return result.UNKNOW_ERROR.SetData(err.Error())
- }
- return result.SUCCESS.SetData(result.NewPage(page, len(tp), total, tp))
- }
- func UpdateTestPaper(t *vo.TestPaperVo) *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 := "update test_paper set name=?,update_at=?,status=?,score=?,pass_score=? where id=? and delete_at is null "
- var res sql.Result
- res, err = config.DB.Exec(sqlStr, t.Name, time.Now(), t.Status, t.Score, t.PassScore, t.Id)
- if err != nil {
- return result.UNKNOW_ERROR.SetData(err)
- }
- affected, _ := res.RowsAffected()
- sqlStr = "delete from chapter where tp_id = ?"
- _, err = tx.Exec(sqlStr, t.Id)
- if err != nil {
- return result.UNKNOW_ERROR.SetData(err)
- }
- for _, chapter := range t.Chapters {
- sqlStr = "insert into chapter(name,description,sub_ids,tp_id) values (?,?,?,?)"
- var subData []byte
- subData, err = json.Marshal(chapter.SubList)
- // sublist试题
- res, err = tx.Exec(sqlStr, chapter.Name, chapter.Description, subData, t.Id)
- if err != nil {
- return result.UNKNOW_ERROR.SetData(err)
- }
- affected2, _ := res.RowsAffected()
- affected += affected2
- }
- return result.SuccessResult(result.NewResultChange(affected))
- })
- }
- func DeleteTestPapers(ids []string) *result.Result {
- parm := []interface{}{time.Now()}
- parmStr := ""
- for k, id := range ids {
- parm = append(parm, id)
- if k == (len(ids) - 1) {
- parmStr += "?"
- } else {
- parmStr += "?,"
- }
- }
- sqlStr := fmt.Sprintf("update test_paper set delete_at=? where id in (%s)", parmStr)
- res, err := config.DB.Exec(sqlStr, parm...)
- if err != nil {
- return result.UNKNOW_ERROR.SetMsg(err.Error())
- }
- affected, _ := res.RowsAffected()
- return result.SUCCESS.SetData(result.NewResultChange(affected))
- }
|