@ -7,7 +7,6 @@ import (
"github.com/gin-gonic/gin"
"github.com/xuri/excelize/v2"
"go-admin/app/admin/apis/pay"
utils "go-admin/app/admin/models/tools"
orm "go-admin/common/global"
"go-admin/logger"
"go-admin/tools"
@ -2601,11 +2600,6 @@ func ErpOrderPay(req *ErpOrderPayReq, c *gin.Context) (*ErpOrderPayResp, error)
}
}
if payStatus == PayOk { // 已完成支付的订单判断是否发优惠券
// 发放尊享会员优惠券
UpdateSwitchUserCoupon ( orderInfo . ID , orderInfo . Uid )
}
return resp , nil
}
@ -2711,11 +2705,6 @@ func QueryErpOrderPayStatus(billSn string) (*ErpOrderPayResp, error) {
return resp , fmt . Errorf ( "QueryErpOrderPayStatus[commit err]: %v" , err )
}
if payStatus == PayOk { // 已完成支付的订单判断是否发优惠券
// 发放尊享会员优惠券
UpdateSwitchUserCoupon ( orderInfo . ID , orderInfo . Uid )
}
resp . Status = payStatus
return resp , nil
}
@ -5986,14 +5975,14 @@ func QueryReceiptData(req *ErpOrderDeleteReq, c *gin.Context) (*ErpOrderReceiptD
}
// CreateErpOrder 创建零售订单
func CreateErpOrder ( req * ErpOrderCreateReq , c * gin . Context ) ( * ErpOrder , error ) {
func CreateErpOrder ( req * ErpOrderCreateReq , c * gin . Context ) error {
for i , _ := range req . ErpOrderCommodities {
req . ErpOrderCommodities [ i ] . ID = 0
}
// 校验订单数据
erpOrder , err := checkOrderData ( req , c )
if err != nil {
return nil , err
return err
}
// 四舍五入
tools . RoundFloatFields ( req )
@ -6004,7 +5993,7 @@ func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
userInfo , err := GetUserInfoByTel ( req . Tel )
if err != nil {
logger . Error ( "checkOrderData GetUserInfoByTel err:" , logger . Field ( "err" , err ) )
return nil , errors . New ( "操作失败:" + err . Error ( ) )
return errors . New ( "操作失败:" + err . Error ( ) )
}
if userInfo . Uid == 0 {
@ -6021,7 +6010,7 @@ func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
if err != nil {
begin . Rollback ( )
logger . Error ( "create user err:" , logger . Field ( "err" , err ) )
return nil , errors . New ( "操作失败:" + err . Error ( ) )
return errors . New ( "操作失败:" + err . Error ( ) )
}
}
}
@ -6036,7 +6025,7 @@ func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
if err != nil {
begin . Rollback ( )
logger . Error ( "create erp_order err:" , logger . Field ( "err" , err ) )
return nil , errors . New ( "操作失败:" + err . Error ( ) )
return errors . New ( "操作失败:" + err . Error ( ) )
}
// 销售信息添加零售订单id
@ -6048,7 +6037,7 @@ func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
if err != nil {
begin . Rollback ( )
logger . Error ( "Create erp_order_sales err" )
return nil , errors . New ( "操作失败:" + err . Error ( ) )
return errors . New ( "操作失败:" + err . Error ( ) )
}
// 支付方式添加零售订单id
@ -6066,7 +6055,7 @@ func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
if err != nil {
begin . Rollback ( )
logger . Error ( "Create erp_order_pay_way err" )
return nil , errors . New ( "操作失败:" + err . Error ( ) )
return errors . New ( "操作失败:" + err . Error ( ) )
}
// 订单商品表信息添加零售订单id
@ -6079,41 +6068,37 @@ func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
if err != nil {
begin . Rollback ( )
logger . Error ( "Create erp_order_commodity err" )
return nil , errors . New ( "操作失败:" + err . Error ( ) )
return errors . New ( "操作失败:" + err . Error ( ) )
}
err = begin . Commit ( ) . Error
if err != nil {
begin . Rollback ( )
logger . Error ( "commit err:" , logger . Field ( "err" , err ) )
return nil , errors . New ( "操作失败:" + err . Error ( ) )
return errors . New ( "操作失败:" + err . Error ( ) )
}
erpOrder . Commodities = req . ErpOrderCommodities
erpOrder . Cashiers = req . Cashiers
erpOrder . Salesman = req . Salesman
return erpOrder , nil
return nil
}
// EditErpOrder 编辑订单
func EditErpOrder ( req * ErpOrderCreateReq , c * gin . Context ) ( * ErpOrder , error ) {
func EditErpOrder ( req * ErpOrderCreateReq , c * gin . Context ) error {
var orderInfo ErpOrder
err := orm . Eloquent . Table ( "erp_order" ) . Where ( "bill_sn=?" , req . BillSn ) . Find ( & orderInfo ) . Error
if err != nil {
logger . Error ( "query erp_order err:" , logger . Field ( "err" , err ) )
return nil , errors . New ( "操作失败:" + err . Error ( ) )
return errors . New ( "操作失败:" + err . Error ( ) )
}
if orderInfo . State != ErpOrderStateUnAudit {
logger . Error ( "EditErpOrder err:" , logger . Field ( "err" , err ) )
return nil , errors . New ( "订单状态不是待审核,操作失败" )
return errors . New ( "订单状态不是待审核,操作失败" )
}
// 校验订单数据
erpOrder , err := checkOrderData ( req , c )
if err != nil {
return nil , err
return err
}
erpOrder . ID = orderInfo . ID
@ -6125,7 +6110,7 @@ func EditErpOrder(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
if err != nil {
begin . Rollback ( )
logger . Error ( "update erp_order err:" , logger . Field ( "err" , err ) )
return nil , errors . New ( "操作失败:" + err . Error ( ) )
return errors . New ( "操作失败:" + err . Error ( ) )
}
// 2-更新零售订单商品信息
@ -6133,7 +6118,7 @@ func EditErpOrder(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
if err != nil {
begin . Rollback ( )
logger . Error ( "update erp_order_commodity err:" , logger . Field ( "err" , err ) )
return nil , errors . New ( "操作失败:" + err . Error ( ) )
return errors . New ( "操作失败:" + err . Error ( ) )
}
// 3-更新销售员信息记录
@ -6141,7 +6126,7 @@ func EditErpOrder(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
if err != nil {
begin . Rollback ( )
logger . Error ( "update erp_order_sales err:" , logger . Field ( "err" , err ) )
return nil , errors . New ( "操作失败:" + err . Error ( ) )
return errors . New ( "操作失败:" + err . Error ( ) )
}
// 4-更新支付方式记录
@ -6149,21 +6134,17 @@ func EditErpOrder(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
if err != nil {
begin . Rollback ( )
logger . Error ( "update erp_order_pay_way err:" , logger . Field ( "err" , err ) )
return nil , errors . New ( "操作失败:" + err . Error ( ) )
return errors . New ( "操作失败:" + err . Error ( ) )
}
err = begin . Commit ( ) . Error
if err != nil {
begin . Rollback ( )
logger . Error ( "commit err:" , logger . Field ( "err" , err ) )
return nil , errors . New ( "操作失败:" + err . Error ( ) )
return errors . New ( "操作失败:" + err . Error ( ) )
}
erpOrder . Commodities = req . ErpOrderCommodities
erpOrder . Cashiers = req . Cashiers
erpOrder . Salesman = req . Salesman
return erpOrder , nil
return nil
}
// CheckUserStore 校验用户门店是否包含在门店数据中且未过期
@ -8206,179 +8187,3 @@ func saleDetailExport(list []ErpOrder, sumData RetailDetailTotalData, c *gin.Con
}
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
}