package controller import ( "github.com/gin-gonic/gin" "strconv" "time" "vote-admin-video-api/api/dao" "vote-admin-video-api/api/dto" "vote-admin-video-api/api/requests" "vote-admin-video-api/api/responses" "vote-admin-video-api/global" "vote-admin-video-api/utils" ) type System struct{} // GetSystemTime 获取投票时间详情 func (r *System) GetSystemTime(c *gin.Context) { id := c.Param("system_time_id") if id == "" { responses.FailWithMessage("缺少参数", c) return } // 将 id 转换为 int64 类型 systemTimeId, err := strconv.ParseInt(id, 10, 64) if err != nil { responses.Fail(c) return } // 获取数据 systemTimeDao := dao.SystemTimeDao{} systemTime, err := systemTimeDao.GetSystemTimeById(systemTimeId) if err != nil { responses.FailWithMessage("数据异常", c) return } // 处理返回值 g := dto.GetSystemTimeDto(systemTime) responses.OkWithData(g, c) } // PutSystemTime 修改投票时间 func (b *System) PutSystemTime(c *gin.Context) { systemRequest := requests.SystemRequest{} req := systemRequest.PutSystemTime if err := c.ShouldBind(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } id := c.Param("system_time_id") if id == "" { responses.FailWithMessage("缺少参数", c) return } // 将 id 转换为 int64 类型 systemTimeId, err := strconv.ParseInt(id, 10, 64) if err != nil { responses.Fail(c) return } // 获取数据 systemTimeDao := dao.SystemTimeDao{} systemTime, err := systemTimeDao.GetSystemTimeById(systemTimeId) if err != nil { responses.FailWithMessage("数据异常", c) return } // 修改值 systemTimeData := make(map[string]interface{}) // 获取本地时区 location, err := time.LoadLocation("Local") if err != nil { responses.FailWithMessage("修改失败", c) return } startTime, err := time.ParseInLocation("2006-01-02 15:04:05", req.StartTime, location) if err != nil { responses.FailWithMessage("修改失败", c) return } if startTime != time.Time(*systemTime.StartTime) { systemTimeData["start_time"] = req.StartTime } endTime, err := time.ParseInLocation("2006-01-02 15:04:05", req.EndTime, location) if err != nil { responses.FailWithMessage("修改失败", c) return } if endTime != time.Time(*systemTime.EndTime) { systemTimeData["end_time"] = req.EndTime } if len(systemTimeData) > 0 { // 开始事务 tx := global.Db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() err = systemTimeDao.EditSystemTimeById(tx, systemTimeId, systemTimeData) if err != nil { tx.Rollback() responses.FailWithMessage("操作失败", c) return } // 增加过期时间缓存 redisKey := "VoteSystemTime" // 当前时间 now := time.Now() duration := endTime.Sub(now) if duration < 0 { tx.Rollback() responses.FailWithMessage("结束时间错误", c) return } if duration > 5*time.Minute { duration = 5 * time.Minute } // 添加缓存 _, err = global.Redis.Set(c, redisKey, "1", duration).Result() if err != nil { tx.Rollback() responses.FailWithMessage("修改失败", c) return } tx.Commit() } responses.Ok(c) }