1、新增零售发尊享会员优惠券的逻辑;
2、新增/编辑零售订单时返回订单数据;
This commit is contained in:
parent
cc2beb17a0
commit
505f7548a5
|
@ -21,7 +21,7 @@ import (
|
||||||
// @Produce json
|
// @Produce json
|
||||||
// @Accept json
|
// @Accept json
|
||||||
// @Param request body models.ErpOrderCreateReq true "新建零售订单模型"
|
// @Param request body models.ErpOrderCreateReq true "新建零售订单模型"
|
||||||
// @Success 200 {object} app.Response
|
// @Success 200 {object} models.ErpOrder
|
||||||
// @Router /api/v1/erp_order/create [post]
|
// @Router /api/v1/erp_order/create [post]
|
||||||
func ErpOrderCreate(c *gin.Context) {
|
func ErpOrderCreate(c *gin.Context) {
|
||||||
var req = new(model.ErpOrderCreateReq)
|
var req = new(model.ErpOrderCreateReq)
|
||||||
|
@ -44,14 +44,14 @@ func ErpOrderCreate(c *gin.Context) {
|
||||||
app.Error(c, http.StatusBadRequest, errors.New("参数错误:缺少会员手机号"), "参数错误:缺少会员手机号")
|
app.Error(c, http.StatusBadRequest, errors.New("参数错误:缺少会员手机号"), "参数错误:缺少会员手机号")
|
||||||
}
|
}
|
||||||
|
|
||||||
err = model.CreateErpOrder(req, c)
|
erpOrder, err := model.CreateErpOrder(req, c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("CreateErpOrder err:", logger.Field("err", err))
|
logger.Error("CreateErpOrder err:", logger.Field("err", err))
|
||||||
app.Error(c, http.StatusInternalServerError, err, err.Error())
|
app.Error(c, http.StatusInternalServerError, err, err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
app.OK(c, nil, "新增成功")
|
app.OK(c, erpOrder, "新增成功")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ func ErpOrderCreate(c *gin.Context) {
|
||||||
// @Produce json
|
// @Produce json
|
||||||
// @Accept json
|
// @Accept json
|
||||||
// @Param request body models.ErpOrderCreateReq true "编辑零售订单模型"
|
// @Param request body models.ErpOrderCreateReq true "编辑零售订单模型"
|
||||||
// @Success 200 {object} app.Response
|
// @Success 200 {object} models.ErpOrder
|
||||||
// @Router /api/v1/erp_order/edit [post]
|
// @Router /api/v1/erp_order/edit [post]
|
||||||
func ErpOrderEdit(c *gin.Context) {
|
func ErpOrderEdit(c *gin.Context) {
|
||||||
var req = new(model.ErpOrderCreateReq)
|
var req = new(model.ErpOrderCreateReq)
|
||||||
|
@ -82,14 +82,14 @@ func ErpOrderEdit(c *gin.Context) {
|
||||||
app.Error(c, http.StatusBadRequest, errors.New("参数错误:缺少会员手机号"), "参数错误:缺少会员手机号")
|
app.Error(c, http.StatusBadRequest, errors.New("参数错误:缺少会员手机号"), "参数错误:缺少会员手机号")
|
||||||
}
|
}
|
||||||
|
|
||||||
err = model.EditErpOrder(req, c)
|
erpOrder, err := model.EditErpOrder(req, c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("EditErpOrder err:", logger.Field("err", err))
|
logger.Error("EditErpOrder err:", logger.Field("err", err))
|
||||||
app.Error(c, http.StatusInternalServerError, err, err.Error())
|
app.Error(c, http.StatusInternalServerError, err, err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
app.OK(c, nil, "编辑成功")
|
app.OK(c, erpOrder, "编辑成功")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -287,6 +287,11 @@ func ErpOrderAudit(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if req.State == 1 && nPayStatus == model.HavePaid { // 已完成支付的零售订单判断是否发优惠券
|
||||||
|
// 发放尊享会员优惠券
|
||||||
|
model.UpdateSwitchUserCoupon(erpOrder.ID, erpOrder.Uid)
|
||||||
|
}
|
||||||
|
|
||||||
app.OK(c, nil, "")
|
app.OK(c, nil, "")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,12 @@ import "time"
|
||||||
|
|
||||||
const (
|
const (
|
||||||
CouponTypeDeduction = "deduction" // 抵扣
|
CouponTypeDeduction = "deduction" // 抵扣
|
||||||
|
Switch1ActivityId = 11 // switch1用户尊享会员优惠券
|
||||||
|
Switch2ActivityId = 12 // switch2用户尊享会员优惠券
|
||||||
|
Switch1CategoryId1 = 2 // 国行主机分类ID
|
||||||
|
Switch1CategoryId2 = 3 // 通用主机分类ID
|
||||||
|
Switch2CategoryId2 = 68 // switch2主机分类ID
|
||||||
|
SwitchActivityType = 11 // 尊享会员优惠券类型
|
||||||
)
|
)
|
||||||
|
|
||||||
// gen:qs
|
// gen:qs
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/xuri/excelize/v2"
|
"github.com/xuri/excelize/v2"
|
||||||
"go-admin/app/admin/apis/pay"
|
"go-admin/app/admin/apis/pay"
|
||||||
|
utils "go-admin/app/admin/models/tools"
|
||||||
orm "go-admin/common/global"
|
orm "go-admin/common/global"
|
||||||
"go-admin/logger"
|
"go-admin/logger"
|
||||||
"go-admin/tools"
|
"go-admin/tools"
|
||||||
|
@ -2600,6 +2601,11 @@ func ErpOrderPay(req *ErpOrderPayReq, c *gin.Context) (*ErpOrderPayResp, error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if payStatus == PayOk { // 已完成支付的订单判断是否发优惠券
|
||||||
|
// 发放尊享会员优惠券
|
||||||
|
UpdateSwitchUserCoupon(orderInfo.ID, orderInfo.Uid)
|
||||||
|
}
|
||||||
|
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2705,6 +2711,11 @@ func QueryErpOrderPayStatus(billSn string) (*ErpOrderPayResp, error) {
|
||||||
return resp, fmt.Errorf("QueryErpOrderPayStatus[commit err]:%v", err)
|
return resp, fmt.Errorf("QueryErpOrderPayStatus[commit err]:%v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if payStatus == PayOk { // 已完成支付的订单判断是否发优惠券
|
||||||
|
// 发放尊享会员优惠券
|
||||||
|
UpdateSwitchUserCoupon(orderInfo.ID, orderInfo.Uid)
|
||||||
|
}
|
||||||
|
|
||||||
resp.Status = payStatus
|
resp.Status = payStatus
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
@ -5975,14 +5986,14 @@ func QueryReceiptData(req *ErpOrderDeleteReq, c *gin.Context) (*ErpOrderReceiptD
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateErpOrder 创建零售订单
|
// CreateErpOrder 创建零售订单
|
||||||
func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
|
func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
|
||||||
for i, _ := range req.ErpOrderCommodities {
|
for i, _ := range req.ErpOrderCommodities {
|
||||||
req.ErpOrderCommodities[i].ID = 0
|
req.ErpOrderCommodities[i].ID = 0
|
||||||
}
|
}
|
||||||
// 校验订单数据
|
// 校验订单数据
|
||||||
erpOrder, err := checkOrderData(req, c)
|
erpOrder, err := checkOrderData(req, c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
// 四舍五入
|
// 四舍五入
|
||||||
tools.RoundFloatFields(req)
|
tools.RoundFloatFields(req)
|
||||||
|
@ -5993,7 +6004,7 @@ func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
|
||||||
userInfo, err := GetUserInfoByTel(req.Tel)
|
userInfo, err := GetUserInfoByTel(req.Tel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("checkOrderData GetUserInfoByTel err:", logger.Field("err", err))
|
logger.Error("checkOrderData GetUserInfoByTel err:", logger.Field("err", err))
|
||||||
return errors.New("操作失败:" + err.Error())
|
return nil, errors.New("操作失败:" + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
if userInfo.Uid == 0 {
|
if userInfo.Uid == 0 {
|
||||||
|
@ -6010,7 +6021,7 @@ func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
logger.Error("create user err:", logger.Field("err", err))
|
logger.Error("create user err:", logger.Field("err", err))
|
||||||
return errors.New("操作失败:" + err.Error())
|
return nil, errors.New("操作失败:" + err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6025,7 +6036,7 @@ func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
logger.Error("create erp_order err:", logger.Field("err", err))
|
logger.Error("create erp_order err:", logger.Field("err", err))
|
||||||
return errors.New("操作失败:" + err.Error())
|
return nil, errors.New("操作失败:" + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
// 销售信息添加零售订单id
|
// 销售信息添加零售订单id
|
||||||
|
@ -6037,7 +6048,7 @@ func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
logger.Error("Create erp_order_sales err")
|
logger.Error("Create erp_order_sales err")
|
||||||
return errors.New("操作失败:" + err.Error())
|
return nil, errors.New("操作失败:" + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
// 支付方式添加零售订单id
|
// 支付方式添加零售订单id
|
||||||
|
@ -6055,7 +6066,7 @@ func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
logger.Error("Create erp_order_pay_way err")
|
logger.Error("Create erp_order_pay_way err")
|
||||||
return errors.New("操作失败:" + err.Error())
|
return nil, errors.New("操作失败:" + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
// 订单商品表信息添加零售订单id
|
// 订单商品表信息添加零售订单id
|
||||||
|
@ -6068,37 +6079,41 @@ func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
logger.Error("Create erp_order_commodity err")
|
logger.Error("Create erp_order_commodity err")
|
||||||
return errors.New("操作失败:" + err.Error())
|
return nil, errors.New("操作失败:" + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
err = begin.Commit().Error
|
err = begin.Commit().Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
logger.Error("commit err:", logger.Field("err", err))
|
logger.Error("commit err:", logger.Field("err", err))
|
||||||
return errors.New("操作失败:" + err.Error())
|
return nil, errors.New("操作失败:" + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
erpOrder.Commodities = req.ErpOrderCommodities
|
||||||
|
erpOrder.Cashiers = req.Cashiers
|
||||||
|
erpOrder.Salesman = req.Salesman
|
||||||
|
|
||||||
|
return erpOrder, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// EditErpOrder 编辑订单
|
// EditErpOrder 编辑订单
|
||||||
func EditErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
|
func EditErpOrder(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
|
||||||
var orderInfo ErpOrder
|
var orderInfo ErpOrder
|
||||||
err := orm.Eloquent.Table("erp_order").Where("bill_sn=?", req.BillSn).Find(&orderInfo).Error
|
err := orm.Eloquent.Table("erp_order").Where("bill_sn=?", req.BillSn).Find(&orderInfo).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("query erp_order err:", logger.Field("err", err))
|
logger.Error("query erp_order err:", logger.Field("err", err))
|
||||||
return errors.New("操作失败:" + err.Error())
|
return nil, errors.New("操作失败:" + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
if orderInfo.State != ErpOrderStateUnAudit {
|
if orderInfo.State != ErpOrderStateUnAudit {
|
||||||
logger.Error("EditErpOrder err:", logger.Field("err", err))
|
logger.Error("EditErpOrder err:", logger.Field("err", err))
|
||||||
return errors.New("订单状态不是待审核,操作失败")
|
return nil, errors.New("订单状态不是待审核,操作失败")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 校验订单数据
|
// 校验订单数据
|
||||||
erpOrder, err := checkOrderData(req, c)
|
erpOrder, err := checkOrderData(req, c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
erpOrder.ID = orderInfo.ID
|
erpOrder.ID = orderInfo.ID
|
||||||
|
@ -6110,7 +6125,7 @@ func EditErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
logger.Error("update erp_order err:", logger.Field("err", err))
|
logger.Error("update erp_order err:", logger.Field("err", err))
|
||||||
return errors.New("操作失败:" + err.Error())
|
return nil, errors.New("操作失败:" + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2-更新零售订单商品信息
|
// 2-更新零售订单商品信息
|
||||||
|
@ -6118,7 +6133,7 @@ func EditErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
logger.Error("update erp_order_commodity err:", logger.Field("err", err))
|
logger.Error("update erp_order_commodity err:", logger.Field("err", err))
|
||||||
return errors.New("操作失败:" + err.Error())
|
return nil, errors.New("操作失败:" + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3-更新销售员信息记录
|
// 3-更新销售员信息记录
|
||||||
|
@ -6126,7 +6141,7 @@ func EditErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
logger.Error("update erp_order_sales err:", logger.Field("err", err))
|
logger.Error("update erp_order_sales err:", logger.Field("err", err))
|
||||||
return errors.New("操作失败:" + err.Error())
|
return nil, errors.New("操作失败:" + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4-更新支付方式记录
|
// 4-更新支付方式记录
|
||||||
|
@ -6134,17 +6149,21 @@ func EditErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
logger.Error("update erp_order_pay_way err:", logger.Field("err", err))
|
logger.Error("update erp_order_pay_way err:", logger.Field("err", err))
|
||||||
return errors.New("操作失败:" + err.Error())
|
return nil, errors.New("操作失败:" + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
err = begin.Commit().Error
|
err = begin.Commit().Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
logger.Error("commit err:", logger.Field("err", err))
|
logger.Error("commit err:", logger.Field("err", err))
|
||||||
return errors.New("操作失败:" + err.Error())
|
return nil, errors.New("操作失败:" + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
erpOrder.Commodities = req.ErpOrderCommodities
|
||||||
|
erpOrder.Cashiers = req.Cashiers
|
||||||
|
erpOrder.Salesman = req.Salesman
|
||||||
|
|
||||||
|
return erpOrder, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// CheckUserStore 校验用户门店是否包含在门店数据中且未过期
|
// CheckUserStore 校验用户门店是否包含在门店数据中且未过期
|
||||||
|
@ -8187,3 +8206,179 @@ func saleDetailExport(list []ErpOrder, sumData RetailDetailTotalData, c *gin.Con
|
||||||
}
|
}
|
||||||
return url + fileName, nil
|
return url + fileName, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateSwitchUserCoupon
|
||||||
|
// 针对购买switch1老主机的用户,如果有录入手机号且开通了会员,则自动发放"500元尊享会员开通优惠券"
|
||||||
|
// 针对购买switch2新主机的用户,如果有录入手机号且开通了会员,则自动发放"300元尊享会员开通优惠券"
|
||||||
|
func UpdateSwitchUserCoupon(orderId uint32, uid int) error {
|
||||||
|
if uid == 0 || orderId == 0 {
|
||||||
|
return errors.New("参数不能为空")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断是否是会员
|
||||||
|
userInfo, err := GetUserInfoByUid(uint32(uid))
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("获取用户信息失败:", logger.Field("err", err))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if userInfo.Uid == 0 {
|
||||||
|
logger.Errorf("未查询到用户信息,uid:", uid)
|
||||||
|
return errors.New("未查询到用户信息")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断是否购买了switch1主机
|
||||||
|
var commodity []ErpOrderCommodity
|
||||||
|
err = orm.Eloquent.Table("erp_order_commodity").Where("erp_order_id = ?", orderId).Find(&commodity).Error
|
||||||
|
if err != nil && err != RecordNotFound {
|
||||||
|
logger.Errorf("查询订单商品失败: %w", err)
|
||||||
|
return fmt.Errorf("查询订单商品失败: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
buySwitch1, buySwitch2 := false, false
|
||||||
|
for _, item := range commodity {
|
||||||
|
if item.ErpCategoryId == Switch2CategoryId2 { // 判断是否购买了switch2主机
|
||||||
|
buySwitch2 = true
|
||||||
|
break
|
||||||
|
} else if item.ErpCategoryId == Switch1CategoryId1 || item.ErpCategoryId == Switch1CategoryId2 { // 判断是否购买了switch1主机
|
||||||
|
buySwitch1 = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !buySwitch1 && !buySwitch2 {
|
||||||
|
logger.Info("订单未包含Switch主机", logger.Field("orderId", orderId))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 已是尊享会员不发券
|
||||||
|
if IsValidPrivilegeMember(userInfo.Uid) {
|
||||||
|
logger.Info("用户已是尊享会员", logger.Field("uid", userInfo.Uid))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确定目标优惠券面值与活动ID
|
||||||
|
var targetActivityId int
|
||||||
|
var targetValue uint32
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case buySwitch1 && buySwitch2:
|
||||||
|
targetActivityId = Switch2ActivityId
|
||||||
|
targetValue = 30000
|
||||||
|
case buySwitch1:
|
||||||
|
targetActivityId = Switch1ActivityId
|
||||||
|
targetValue = 50000
|
||||||
|
case buySwitch2:
|
||||||
|
targetActivityId = Switch2ActivityId
|
||||||
|
targetValue = 30000
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询已发放优惠券(state = 1)
|
||||||
|
var existingCoupons []UserCoupon
|
||||||
|
err = orm.Eloquent.Table("user_coupon").
|
||||||
|
Where("uid = ? AND activity_type = ? AND state = 1", uid, SwitchActivityType).
|
||||||
|
Find(&existingCoupons).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("查询已发放优惠券失败", logger.Field("err", err))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 多张券处理逻辑
|
||||||
|
if len(existingCoupons) > 0 {
|
||||||
|
// 判断是否有比目标券面值小的旧券
|
||||||
|
var smallerCoupons []UserCoupon
|
||||||
|
var greaterOrEqualCoupons []UserCoupon
|
||||||
|
for _, c := range existingCoupons {
|
||||||
|
if c.Value < targetValue {
|
||||||
|
smallerCoupons = append(smallerCoupons, c)
|
||||||
|
} else {
|
||||||
|
greaterOrEqualCoupons = append(greaterOrEqualCoupons, c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(smallerCoupons) > 0 {
|
||||||
|
// 保留最小的一张更新有效期,删除其他券
|
||||||
|
minCoupon := smallerCoupons[0]
|
||||||
|
for _, c := range smallerCoupons {
|
||||||
|
if c.Value < minCoupon.Value {
|
||||||
|
minCoupon = c
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新最小券有效期
|
||||||
|
err = orm.Eloquent.Model(&UserCoupon{}).
|
||||||
|
Where("id = ?", minCoupon.ID).
|
||||||
|
Update("active_end", time.Now().AddDate(0, 1, 0)).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("更新优惠券有效期失败", logger.Field("err", err))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除其余所有券(除保留那张)
|
||||||
|
var deleteIds []uint32
|
||||||
|
for _, c := range existingCoupons {
|
||||||
|
if c.ID != minCoupon.ID {
|
||||||
|
deleteIds = append(deleteIds, c.ID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(deleteIds) > 0 {
|
||||||
|
err = orm.Eloquent.Table("user_coupon").
|
||||||
|
Where("id IN ?", deleteIds).
|
||||||
|
Delete(nil).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("删除多余旧券失败", logger.Field("err", err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil // 不再发新券
|
||||||
|
}
|
||||||
|
|
||||||
|
// 所有旧券面值 >= 当前目标,全部删除,继续发新券
|
||||||
|
err = orm.Eloquent.Table("user_coupon").
|
||||||
|
Where("uid = ? AND activity_type = ? AND state = 1", uid, SwitchActivityType).
|
||||||
|
Delete(nil).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("删除旧优惠券失败", logger.Field("err", err))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发放优惠券
|
||||||
|
var coupons []Coupon
|
||||||
|
err = orm.Eloquent.Debug().Table("coupon").Where("activity_id = ?", targetActivityId).Find(&coupons).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("查询优惠券失败:", logger.Field("err", err))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, _ := range coupons {
|
||||||
|
couponCode, err := utils.GenerateRandomNumber19()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("生成优惠码失败:", logger.Field("err", err))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
userCoupon := &UserCoupon{
|
||||||
|
Uid: userInfo.Uid,
|
||||||
|
CouponId: coupons[i].ID,
|
||||||
|
CouponType: coupons[i].CouponType,
|
||||||
|
ActivityType: coupons[i].ActivityType,
|
||||||
|
ActivityId: coupons[i].ActivityId,
|
||||||
|
Value: coupons[i].Value,
|
||||||
|
State: 1,
|
||||||
|
ActiveStart: time.Now(),
|
||||||
|
ActiveEnd: time.Now().AddDate(0, 1, 0),
|
||||||
|
UseTime: time.Time{},
|
||||||
|
MemberLevel: coupons[i].MemberLevel,
|
||||||
|
Approach: 0,
|
||||||
|
PromotionalSales: 0,
|
||||||
|
RedeemCode: "",
|
||||||
|
CategoryNumber: coupons[i].CategoryNumber,
|
||||||
|
Code: couponCode,
|
||||||
|
}
|
||||||
|
|
||||||
|
err = orm.Eloquent.Create(userCoupon).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Errorf("user coupon err:", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user