262 lines
6.0 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"
)
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 {
// 字符串时间转localtime
discountEndTime, err := utils.StrToLocalTime(*req.DiscountEndTime)
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
}
}
// 首单立减金额
if req.ReductionAmount != nil {
if systemMember.ReductionAmount == nil {
systemMemberData["reduction_amount"] = req.ReductionAmount
} else {
if *req.ReductionAmount != *systemMember.ReductionAmount {
systemMemberData["reduction_amount"] = req.ReductionAmount
}
}
} else {
if systemMember.ReductionAmount != nil {
systemMemberData["reduction_amount"] = 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,
ReductionAmount: req.ReductionAmount,
}
// 处理优惠截止时间
if req.DiscountEndTime != nil {
// 字符串时间转localtime
discountEndTime, err := utils.StrToLocalTime(*req.DiscountEndTime)
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)
}