123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- package handler
- import (
- webServerEntity "cicv-data-closedloop/amd64/web_server/entity"
- "cicv-data-closedloop/common/config/c_db"
- "cicv-data-closedloop/common/config/c_log"
- commonEntity "cicv-data-closedloop/common/entity"
- "cicv-data-closedloop/common/util"
- "github.com/gin-gonic/gin"
- "github.com/signintech/gopdf"
- "io"
- "log"
- "net/http"
- "os"
- "time"
- )
- var defaultTime = time.Date(2006, time.January, 2, 15, 4, 5, 0, time.Local)
- // 考试开始时间
- func Begin(c *gin.Context) {
- param := new(webServerEntity.ExamPao)
- // 映射到结构体
- if err := c.ShouldBindJSON(¶m); err != nil {
- c_log.GlobalLogger.Error("项目启动接收请求参数报错:", err)
- c.JSON(http.StatusBadRequest, commonEntity.Response{
- Code: 500,
- Msg: "请求体解析失败。",
- })
- return
- }
- // 插入到数据库
- sqlTemplate, _ := util.ReadFile(c_db.SqlFilesMap["exam-insert-begin_time-by-team_name.sql"])
- c_log.GlobalLogger.Info("插入比赛开始时间", sqlTemplate)
- if err := c_db.DoTx(sqlTemplate, []any{
- param.TeamName,
- time.Now(),
- }); err != nil {
- c_log.GlobalLogger.Error("插入数据报错:", err)
- c.JSON(http.StatusBadRequest, commonEntity.Response{
- Code: 500,
- Msg: "插入数据报错。",
- })
- return
- }
- c.JSON(http.StatusOK, commonEntity.Response{
- Code: 200,
- Msg: "插入数据成功。",
- })
- }
- // 考试结束时间
- func End(c *gin.Context) {
- param := new(webServerEntity.ExamPao)
- // 映射到结构体
- if err := c.ShouldBindJSON(¶m); err != nil {
- c_log.GlobalLogger.Error("项目启动接收请求参数报错:", err)
- c.JSON(http.StatusBadRequest, commonEntity.Response{
- Code: 500,
- Msg: "请求体解析失败。",
- })
- return
- }
- // 1 查询指定队伍的开始时间最新的考试是否有结束时间,如果有则不在处理,如果没有则更新
- var result []webServerEntity.ExamPo
- selectSql, err := util.ReadFile(c_db.SqlFilesMap["exam-select-latest-by-team_name.sql"])
- if err != nil {
- c_log.GlobalLogger.Error("读取sql文件报错:", err)
- c.JSON(http.StatusBadRequest, commonEntity.Response{
- Code: 500,
- Msg: "读取sql文件报错。",
- })
- return
- }
- // 可以传参数
- if err = c_db.MysqlDb.Select(&result, selectSql, param.TeamName); err != nil {
- c_log.GlobalLogger.Error("数据库查询报错:", err)
- c.JSON(http.StatusBadRequest, commonEntity.Response{
- Code: 500,
- Msg: "数据库查询报错。",
- })
- return
- }
- c_log.GlobalLogger.Info("数据库查询成功:", result)
- if !result[0].EndTime.Equal(defaultTime) {
- c_log.GlobalLogger.Error("赛队", param.TeamName, "重复请求考试结束接口!")
- c.JSON(http.StatusBadRequest, commonEntity.Response{
- Code: 500,
- Msg: "重复请求。",
- })
- return
- }
- // 更新到数据库
- sqlTemplate, _ := util.ReadFile(c_db.SqlFilesMap["exam-update-end_time-by-team_name.sql"])
- if err := c_db.DoTx(sqlTemplate, []any{
- time.Now(),
- param.TeamName,
- }); err != nil {
- c_log.GlobalLogger.Error("插入数据报错:", err)
- c.JSON(http.StatusBadRequest, commonEntity.Response{
- Code: 500,
- Msg: "插入数据报错。",
- })
- return
- }
- c.JSON(http.StatusOK, commonEntity.Response{
- Code: 200,
- Msg: "插入数据成功。",
- })
- }
- // 分页查询
- // todo 如果日期为默认值,则返回空""
- func Page(c *gin.Context) {
- param := new(webServerEntity.ExamPagePao)
- _ = c.ShouldBindJSON(¶m)
- var resultPos []webServerEntity.ExamPo
- var resultPosTotal []int
- var pageSql string
- var totalSql string
- offset := (param.CurrentPage - 1) * param.PageSize
- size := param.PageSize
- if param.TeamName == "" && param.Topic == "" {
- pageSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-page.sql"])
- totalSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-total.sql"])
- err := c_db.MysqlDb.Select(&resultPos, pageSql, offset, size)
- if err != nil {
- c_log.GlobalLogger.Error(err)
- }
- err = c_db.MysqlDb.Select(&resultPosTotal, totalSql)
- if err != nil {
- c_log.GlobalLogger.Error(err)
- }
- }
- if param.TeamName != "" && param.Topic == "" {
- pageSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-page-by-team_name.sql"])
- totalSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-total-by-team_name.sql"])
- _ = c_db.MysqlDb.Select(&resultPos, pageSql, "%"+param.TeamName+"%", offset, size)
- _ = c_db.MysqlDb.Select(&resultPosTotal, totalSql, "%"+param.TeamName+"%")
- }
- if param.TeamName == "" && param.Topic != "" {
- pageSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-page-by-topic.sql"])
- totalSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-total-by-topic.sql"])
- _ = c_db.MysqlDb.Select(&resultPos, pageSql, "%"+param.Topic+"%", offset, size)
- _ = c_db.MysqlDb.Select(&resultPosTotal, totalSql, "%"+param.Topic+"%")
- }
- if param.TeamName != "" && param.Topic != "" {
- pageSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-page-by-team_name-and-topic.sql"])
- totalSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-total-by-team_name-and-topic.sql"])
- _ = c_db.MysqlDb.Select(&resultPos, pageSql, "%"+param.TeamName+"%", "%"+param.Topic+"%", offset, size)
- _ = c_db.MysqlDb.Select(&resultPosTotal, totalSql, "%"+param.TeamName+"%", "%"+param.Topic+"%")
- }
- var resultVos []webServerEntity.ExamVo
- for _, po := range resultPos {
- resultVos = append(resultVos, webServerEntity.ExamVo{
- Id: po.Id,
- TeamName: po.TeamName,
- Topic: po.Topic,
- BeginTime: util.GetTimeString(po.BeginTime),
- EndTime: util.GetTimeString(po.EndTime),
- ScoreOnline: po.ScoreOnline,
- ScoreOffline: po.ScoreOffline,
- ScoreFinal: po.ScoreFinal,
- Details: po.Details,
- ScoreReportPath: po.ScoreReportPath,
- })
- }
- c.JSON(http.StatusOK, commonEntity.Response{
- Code: 200,
- Msg: "分页查询成功!",
- Data: resultVos,
- Total: resultPosTotal[0],
- })
- }
- // 评分报告pdf下载
- func Report(c *gin.Context) {
- //param := new(webServerEntity.ExamReportPao)
- //// 映射到结构体
- //if err := c.ShouldBindJSON(¶m); err != nil {
- // c_log.GlobalLogger.Error("项目启动接收请求参数报错:", err)
- // c.JSON(http.StatusBadRequest, commonEntity.Response{
- // Code: 500,
- // Msg: "请求体解析失败。",
- // })
- // return
- //}
- // 1 根据ID查询数据
- // 2 根据数据生成pdf
- // 3 创建pdf文件
- {
- // 1 初始化 pdf 对象
- pdf := gopdf.GoPdf{}
- pdf.Start(gopdf.Config{PageSize: *gopdf.PageSizeA4})
- // 2 添加一页
- pdf.AddPage()
- // 3
- err := pdf.AddTTFFont("simfang", "D:\\code\\cicv-data-closedloop\\test\\pdf\\ttf\\simfang.ttf")
- if err != nil {
- log.Print(err.Error())
- return
- }
- err = pdf.SetFont("simfang", "", 14)
- if err != nil {
- log.Print(err.Error())
- return
- }
- err = pdf.Cell(nil, "您好")
- if err != nil {
- return
- }
- err = pdf.WritePdf("D:\\hello.pdf")
- if err != nil {
- return
- }
- }
- // 打开要发送的文件
- file, err := os.Open("D:\\hello.pdf")
- if err != nil {
- c.String(http.StatusNotFound, "文件未找到")
- return
- }
- defer file.Close()
- // 将文件复制到响应主体
- _, err = io.Copy(c.Writer, file)
- if err != nil {
- c.String(http.StatusInternalServerError, "无法复制文件到响应体")
- return
- }
- }
|