157 lines
3.3 KiB
Go
157 lines
3.3 KiB
Go
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)
|
|
}
|