260 lines
5.9 KiB
Go
260 lines
5.9 KiB
Go
package controller
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
"hepa-calc-admin-api/api/dao"
|
|
"hepa-calc-admin-api/api/dto"
|
|
"hepa-calc-admin-api/api/model"
|
|
"hepa-calc-admin-api/api/requests"
|
|
"hepa-calc-admin-api/api/responses"
|
|
"hepa-calc-admin-api/global"
|
|
"hepa-calc-admin-api/utils"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
type SystemMember struct{}
|
|
|
|
// GetSystemMemberList 获取会员配置列表
|
|
func (b *SystemMember) GetSystemMemberList(c *gin.Context) {
|
|
// 获取数据
|
|
systemMemberDao := dao.SystemMemberDao{}
|
|
systemMembers, err := systemMemberDao.GetSystemMemberListSearch()
|
|
if err != nil {
|
|
responses.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
// 处理返回值
|
|
g := dto.GetSystemMemberListDto(systemMembers)
|
|
|
|
responses.OkWithData(g, c)
|
|
}
|
|
|
|
// GetSystemMember 获取会员配置详情
|
|
func (b *SystemMember) GetSystemMember(c *gin.Context) {
|
|
id := c.Param("system_member_id")
|
|
if id == "" {
|
|
responses.FailWithMessage("缺少参数", c)
|
|
return
|
|
}
|
|
|
|
// 将 id 转换为 int64 类型
|
|
systemMemberId, err := strconv.ParseInt(id, 10, 64)
|
|
if err != nil {
|
|
responses.Fail(c)
|
|
return
|
|
}
|
|
|
|
// 获取问题数据
|
|
systemMemberDao := dao.SystemMemberDao{}
|
|
systemMember, err := systemMemberDao.GetSystemMemberById(systemMemberId)
|
|
if err != nil {
|
|
responses.FailWithMessage("数据异常", c)
|
|
return
|
|
}
|
|
|
|
// 处理返回值
|
|
g := dto.GetSystemMemberDto(systemMember)
|
|
|
|
responses.OkWithData(g, c)
|
|
}
|
|
|
|
// PutSystemMember 修改会员配置
|
|
func (b *SystemMember) PutSystemMember(c *gin.Context) {
|
|
systemMemberRequest := requests.SystemMemberRequest{}
|
|
req := systemMemberRequest.PutSystemMember
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
responses.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
// 参数验证
|
|
if err := global.Validate.Struct(req); err != nil {
|
|
responses.FailWithMessage(utils.Translate(err), c)
|
|
return
|
|
}
|
|
|
|
if req.DiscountPrice != nil {
|
|
if req.Price < *req.DiscountPrice {
|
|
responses.FailWithMessage("优惠价格不可超过原价", c)
|
|
return
|
|
}
|
|
|
|
if req.DiscountEndTime == nil {
|
|
responses.FailWithMessage("请填写优惠过期时间", c)
|
|
return
|
|
}
|
|
}
|
|
|
|
id := c.Param("system_member_id")
|
|
if id == "" {
|
|
responses.FailWithMessage("缺少参数", c)
|
|
return
|
|
}
|
|
|
|
// 将 id 转换为 int64 类型
|
|
systemMemberId, err := strconv.ParseInt(id, 10, 64)
|
|
if err != nil {
|
|
responses.Fail(c)
|
|
return
|
|
}
|
|
|
|
// 获取问题数据
|
|
systemMemberDao := dao.SystemMemberDao{}
|
|
systemMember, err := systemMemberDao.GetSystemMemberById(systemMemberId)
|
|
if err != nil {
|
|
responses.FailWithMessage("数据异常", c)
|
|
return
|
|
}
|
|
|
|
// 修改值
|
|
systemMemberData := make(map[string]interface{})
|
|
|
|
// 会员天数
|
|
if req.MemberDays != systemMember.MemberDays {
|
|
systemMemberData["member_days"] = req.MemberDays
|
|
}
|
|
|
|
// 价格
|
|
if req.Price != systemMember.Price {
|
|
systemMemberData["price"] = req.Price
|
|
}
|
|
|
|
// 优惠价格
|
|
if req.DiscountPrice != nil {
|
|
if systemMember.DiscountPrice == nil {
|
|
systemMemberData["discount_price"] = req.DiscountPrice
|
|
} else {
|
|
if *req.DiscountPrice != *systemMember.DiscountPrice {
|
|
systemMemberData["discount_price"] = req.DiscountPrice
|
|
}
|
|
}
|
|
} else {
|
|
if systemMember.DiscountPrice != nil {
|
|
systemMemberData["discount_price"] = nil
|
|
}
|
|
}
|
|
|
|
// 优惠截止时间
|
|
if req.DiscountEndTime != nil {
|
|
// 获取本地时区
|
|
location, err := time.LoadLocation("Local")
|
|
if err != nil {
|
|
responses.FailWithMessage("优惠截止时间错误", c)
|
|
return
|
|
}
|
|
|
|
discountEndTime, err := time.ParseInLocation("2006-01-02 15:04:05", *req.DiscountEndTime, location)
|
|
if err != nil {
|
|
responses.FailWithMessage("优惠截止时间错误", c)
|
|
return
|
|
}
|
|
|
|
if systemMember.DiscountEndTime == nil {
|
|
systemMemberData["discount_end_time"] = discountEndTime
|
|
} else {
|
|
if *systemMember.DiscountEndTime != discountEndTime {
|
|
systemMemberData["discount_end_time"] = discountEndTime
|
|
}
|
|
}
|
|
} else {
|
|
if systemMember.DiscountEndTime != nil {
|
|
systemMemberData["discount_end_time"] = nil
|
|
}
|
|
}
|
|
|
|
// 开始事务
|
|
tx := global.Db.Begin()
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
tx.Rollback()
|
|
}
|
|
}()
|
|
|
|
if len(systemMemberData) > 0 {
|
|
err = systemMemberDao.EditSystemMemberById(tx, systemMember.SystemMemberId, systemMemberData)
|
|
if err != nil {
|
|
tx.Rollback()
|
|
responses.FailWithMessage("操作失败", c)
|
|
return
|
|
}
|
|
}
|
|
|
|
tx.Commit()
|
|
responses.Ok(c)
|
|
}
|
|
|
|
// AddSystemMember 新增会员配置
|
|
func (b *SystemMember) AddSystemMember(c *gin.Context) {
|
|
systemMemberRequest := requests.SystemMemberRequest{}
|
|
req := systemMemberRequest.AddSystemMember
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
responses.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
// 参数验证
|
|
if err := global.Validate.Struct(req); err != nil {
|
|
responses.FailWithMessage(utils.Translate(err), c)
|
|
return
|
|
}
|
|
|
|
if req.DiscountPrice != nil {
|
|
if req.Price < *req.DiscountPrice {
|
|
responses.FailWithMessage("优惠价格不可超过原价", c)
|
|
return
|
|
}
|
|
|
|
if req.DiscountEndTime == nil {
|
|
responses.FailWithMessage("请填写优惠过期时间", c)
|
|
return
|
|
}
|
|
}
|
|
|
|
// 开始事务
|
|
tx := global.Db.Begin()
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
tx.Rollback()
|
|
}
|
|
}()
|
|
|
|
systemMember := &model.SystemMember{
|
|
MemberDays: req.MemberDays,
|
|
Price: req.Price,
|
|
DiscountPrice: req.DiscountPrice,
|
|
}
|
|
|
|
// 处理优惠截止时间
|
|
if req.DiscountEndTime != nil {
|
|
// 获取本地时区
|
|
location, err := time.LoadLocation("Local")
|
|
if err != nil {
|
|
tx.Rollback()
|
|
responses.FailWithMessage("优惠截止时间错误", c)
|
|
return
|
|
}
|
|
|
|
discountEndTime, err := time.ParseInLocation("2006-01-02 15:04:05", *req.DiscountEndTime, location)
|
|
if err != nil {
|
|
tx.Rollback()
|
|
responses.FailWithMessage("优惠截止时间错误", c)
|
|
return
|
|
}
|
|
|
|
systemMember.DiscountEndTime = &discountEndTime
|
|
}
|
|
|
|
systemMemberDao := dao.SystemMemberDao{}
|
|
systemMember, err := systemMemberDao.AddSystemMember(tx, systemMember)
|
|
if err != nil {
|
|
tx.Rollback()
|
|
responses.FailWithMessage("操作失败", c)
|
|
return
|
|
}
|
|
|
|
tx.Commit()
|
|
responses.Ok(c)
|
|
}
|