2024-09-12 13:47:29 +08:00

154 lines
3.2 KiB
Go

package controller
import (
"github.com/gin-gonic/gin"
"strconv"
"time"
"vote-admin-api/api/dao"
"vote-admin-api/api/dto"
"vote-admin-api/api/model"
"vote-admin-api/api/requests"
"vote-admin-api/api/responses"
"vote-admin-api/global"
"vote-admin-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 model.LocalTime(startTime) != *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 model.LocalTime(endTime) != *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
}
// 添加缓存
_, err = global.Redis.Set(c, redisKey, "1", duration).Result()
if err != nil {
tx.Rollback()
responses.FailWithMessage("修改失败", c)
return
}
tx.Commit()
}
responses.Ok(c)
}