Merge branch 'dev_member' into dev_mall_member
# Conflicts: # controller/game_card.go # lib/status/status.go # lib/wxpay/wx_pay.go # model/autogenerated_user.go # model/model_test.go # model/user.go # router/router_app.go
This commit is contained in:
commit
ed8892088b
|
@ -18,7 +18,7 @@ func runServer() {
|
||||||
gin.SetMode(gin.DebugMode)
|
gin.SetMode(gin.DebugMode)
|
||||||
|
|
||||||
router.ConfigAppRouter(server)
|
router.ConfigAppRouter(server)
|
||||||
|
//OrderCancelId()
|
||||||
err := server.Run(fmt.Sprintf(":%d", config.AppConfig.ServerPort))
|
err := server.Run(fmt.Sprintf(":%d", config.AppConfig.ServerPort))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(err)
|
logger.Error(err)
|
||||||
|
@ -47,3 +47,86 @@ func init() {
|
||||||
|
|
||||||
utils.InitSnowFlakeByGo()
|
utils.InitSnowFlakeByGo()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//func OrderCancelId() {
|
||||||
|
// //ids := []uint32{8288, 8265}
|
||||||
|
// ids := []uint32{8335}
|
||||||
|
// for _, id := range ids {
|
||||||
|
// //OrderCancel(id)
|
||||||
|
// OrderCancel(id)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func OrderCancel(id uint32) {
|
||||||
|
// InitDBProd()
|
||||||
|
// model.DB = DBProd
|
||||||
|
// var order model.Order
|
||||||
|
// err := model.NewOrderQuerySet(model.DB).IDEq(id).One(&order)
|
||||||
|
// if err != nil {
|
||||||
|
// fmt.Println("err:", err)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// outTradeNo, err := model.GetWxPayExpressFeeRefundRecord(order.ID)
|
||||||
|
// if err != nil {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// orderSn :=model.GetOrderSn()
|
||||||
|
// err = model.UserOpenMemberRecord{Uid: uint32(order.Uid), OpenNo: orderSn, OrderId: order.ID, OrderType: 2}.Insert()
|
||||||
|
// if err != nil {
|
||||||
|
// logger.Error(errors.New("WebPay err"))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// orderRefund := wxpay.OrderRefund{
|
||||||
|
// OutTradeNo: outTradeNo,
|
||||||
|
// OutRefundNo: orderSn,
|
||||||
|
// NotifyUrl: "",
|
||||||
|
// Amount: wxpay.OrderRefundAmount{
|
||||||
|
// Refund: order.PayPrice,
|
||||||
|
// Total: order.PayPrice,
|
||||||
|
// Currency: "CNY",
|
||||||
|
// },
|
||||||
|
// }
|
||||||
|
// bytes, _ := json.Marshal(order)
|
||||||
|
// fmt.Println("订单取消:", string(bytes))
|
||||||
|
// orderRefundJson, _ := json.Marshal(&orderRefund)
|
||||||
|
// fmt.Println("订单取消 orderRefundJson:", string(orderRefundJson))
|
||||||
|
// //err = wxpay.WxPayOrderRefund(orderRefund)
|
||||||
|
// err = wxpay.TransactionOrderRefund(orderRefund)
|
||||||
|
// if err != nil {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//var DBProd *gorm.DB
|
||||||
|
//
|
||||||
|
//func InitDBProd() {
|
||||||
|
// var err error
|
||||||
|
// dialect := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
|
||||||
|
// "mh_pro", "fLeytnBFCRB553ab", "39.108.188.218", "3306",
|
||||||
|
// "mh_pro")
|
||||||
|
//
|
||||||
|
// DBProd, err = gorm.Open("mysql", dialect)
|
||||||
|
// if err != nil {
|
||||||
|
// fmt.Println("Connect Database Error, error = ", err)
|
||||||
|
// panic(err)
|
||||||
|
// }
|
||||||
|
// DBProd.DB().SetMaxOpenConns(1000)
|
||||||
|
// DBProd.DB().SetMaxIdleConns(500)
|
||||||
|
// DBProd.DB().SetConnMaxLifetime(time.Second * 10)
|
||||||
|
// //DBProd.LogMode(true)
|
||||||
|
// DBProd.LogMode(false)
|
||||||
|
// DBProd.SingularTable(true)
|
||||||
|
// DBProd.AutoMigrate(
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// if err := DBProd.DB().Ping(); err != nil {
|
||||||
|
// fmt.Println("Ping Database Fail, error = ", err)
|
||||||
|
// panic(err)
|
||||||
|
// }
|
||||||
|
// fmt.Println("DB init success")
|
||||||
|
//}
|
|
@ -28,6 +28,8 @@ func AuthLogin(c *gin.Context) {
|
||||||
}
|
}
|
||||||
fmt.Println("WxAppId", config.AppConfig.WxAppId)
|
fmt.Println("WxAppId", config.AppConfig.WxAppId)
|
||||||
fmt.Println("WxAppSecret", config.AppConfig.WxAppSecret)
|
fmt.Println("WxAppSecret", config.AppConfig.WxAppSecret)
|
||||||
|
model.AuthLoginMutex.Lock()
|
||||||
|
defer model.AuthLoginMutex.Unlock()
|
||||||
|
|
||||||
resp, err := weapp.Login(config.AppConfig.WxAppId, config.AppConfig.WxAppSecret, req.Code)
|
resp, err := weapp.Login(config.AppConfig.WxAppId, config.AppConfig.WxAppSecret, req.Code)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/codinl/go-logger"
|
"github.com/codinl/go-logger"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
|
@ -237,7 +238,6 @@ func PushWXPayNotice(c *gin.Context) {
|
||||||
ReturnCode: "FAIL",
|
ReturnCode: "FAIL",
|
||||||
}
|
}
|
||||||
correctSign, err := PayCallBackHandle(notify, config.AppConfig.WxMchSecret)
|
correctSign, err := PayCallBackHandle(notify, config.AppConfig.WxMchSecret)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("PushWXPayNotice sign create fail")
|
logger.Error("PushWXPayNotice sign create fail")
|
||||||
RespBodyXML(c, ret)
|
RespBodyXML(c, ret)
|
||||||
|
@ -251,13 +251,94 @@ func PushWXPayNotice(c *gin.Context) {
|
||||||
|
|
||||||
if notify.Attach == wxpay.WxPayRentCard {
|
if notify.Attach == wxpay.WxPayRentCard {
|
||||||
logger.Info("租借游戏卡 支付成功:")
|
logger.Info("租借游戏卡 支付成功:")
|
||||||
|
var order model.Order
|
||||||
err = model.NewOrderQuerySet(model.DB).OrderSnEq(notify.OutTradeNo).GetUpdater().
|
err := model.NewOrderQuerySet(model.DB).OrderSnEq(notify.OutTradeNo).PayStatusEq(PayStatusUnPay).CardStatusNe(OrderCardStatusCancel).One(&order)
|
||||||
SetPayStatus(model.PayStatusPaid).SetPayTime(time.Now()).Update()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
//orderJson, _ := json.Marshal(&order)
|
||||||
|
//fmt.Println("orderJson:", string(orderJson))
|
||||||
|
|
||||||
|
begin := model.DB.Begin()
|
||||||
|
err = model.NewOrderQuerySet(begin).IDEq(order.ID).GetUpdater().
|
||||||
|
SetPayStatus(model.PayStatusPaid).SetPayTime(time.Now()).Update()
|
||||||
|
if err != nil {
|
||||||
|
begin.Rollback()
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//model.OrderCard{}
|
||||||
|
_, err = model.NewOrderCardQuerySet(begin).OrderIdEq(order.ID).GetUpdater().
|
||||||
|
SetPayStatus(model.PayStatusPaid).UpdateNum()
|
||||||
|
if err != nil {
|
||||||
|
begin.Rollback()
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = order.InventoryReduction(begin)
|
||||||
|
if err != nil {
|
||||||
|
begin.Rollback()
|
||||||
|
logger.Error("err:", err)
|
||||||
|
// 库存不足取消订单
|
||||||
|
orderSn := model.GetOrderSn()
|
||||||
|
err = model.UserOpenMemberRecord{Uid: uint32(order.Uid), OpenNo: orderSn, OrderId: order.ID, OrderType: 2}.Insert()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error(errors.New("WebPay err"))
|
||||||
|
//RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
orderRefund := wxpay.OrderRefund{
|
||||||
|
//OutTradeNo: outTradeNo,
|
||||||
|
OutTradeNo: notify.OutTradeNo,
|
||||||
|
OutRefundNo: orderSn,
|
||||||
|
NotifyUrl: "",
|
||||||
|
Amount: wxpay.OrderRefundAmount{
|
||||||
|
Refund: order.PayPrice,
|
||||||
|
Total: order.PayPrice,
|
||||||
|
Currency: "CNY",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
bytes, _ := json.Marshal(order)
|
||||||
|
fmt.Println("订单取消:", string(bytes))
|
||||||
|
orderRefundJson, _ := json.Marshal(&orderRefund)
|
||||||
|
fmt.Println("订单取消 orderRefundJson:", string(orderRefundJson))
|
||||||
|
//err = wxpay.WxPayOrderRefund(orderRefund)
|
||||||
|
err = wxpay.TransactionOrderRefund(orderRefund)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
//RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := model.NewOrderQuerySet(model.DB).IDEq(order.ID).GetUpdater().SetCardStatus(OrderCardStatusCancel).UpdateNum()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, err = model.NewOrderCardQuerySet(model.DB).OrderIdEq(order.ID).GetUpdater().SetCardStatus(OrderCardStatusCancel).UpdateNum()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = begin.Commit().Error
|
||||||
|
if err != nil {
|
||||||
|
begin.Rollback()
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
go model.ShoppingCartCreateOrderByOrder(order)
|
||||||
|
//count, err := model.NewOrderQuerySet(model.DB).UidEq(order.Uid).IDEq(order.ID).Count()
|
||||||
|
//if err != nil {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
// return
|
||||||
|
//}
|
||||||
|
|
||||||
|
//go model.OrderCardUserRentCard(uint32(order.Uid), uint32(count), nil)
|
||||||
} else if notify.Attach == wxpay.WxPayMember {
|
} else if notify.Attach == wxpay.WxPayMember {
|
||||||
|
|
||||||
logger.Info("开通会员 支付成功:")
|
logger.Info("开通会员 支付成功:")
|
||||||
|
@ -288,17 +369,28 @@ func PushWXPayNotice(c *gin.Context) {
|
||||||
expireTime = user.MemberExpire.AddDate(1, 0, 0)
|
expireTime = user.MemberExpire.AddDate(1, 0, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
configInfo, err := model.PayConfigInfo()
|
//configInfo, err := model.PayConfigInfo()
|
||||||
|
//if err != nil {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
// return
|
||||||
|
//}
|
||||||
|
memberConfig, err := model.GetMemberConfig(record.MemberLevel)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("GetMemberConfig err:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
openMemberTime := time.Now()
|
||||||
|
if !user.OpenMemberTime.IsZero() {
|
||||||
|
openMemberTime = user.OpenMemberTime
|
||||||
|
}
|
||||||
|
_, err = model.NewUserQuerySet(model.DB).UidEq(record.Uid).GetUpdater().SetMemberLevel(record.MemberLevel).SetMemberExpire(expireTime).
|
||||||
|
SetDeposit(memberConfig.MemberDeposit).SetOpenMemberTime(openMemberTime).UpdateNum()
|
||||||
|
//err = model.UserUpdate(&model.User{Uid: uint32(record.Uid), MemberLevel: record.MemberLevel, MemberExpire: expireTime, Deposit: memberConfig.MemberDeposit})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = model.UserUpdate(&model.User{Uid: uint32(record.Uid), MemberLevel: 2, MemberExpire: expireTime, Deposit: configInfo.DepositFee})
|
|
||||||
if err != nil {
|
|
||||||
logger.Error("err:", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var invite model.UserInvite
|
var invite model.UserInvite
|
||||||
err = model.NewUserInviteQuerySet(model.DB).ToUidEq(record.Uid).One(&invite)
|
err = model.NewUserInviteQuerySet(model.DB).ToUidEq(record.Uid).One(&invite)
|
||||||
if err != nil && err != model.RecordNotFound {
|
if err != nil && err != model.RecordNotFound {
|
||||||
|
@ -313,6 +405,7 @@ func PushWXPayNotice(c *gin.Context) {
|
||||||
MemberType: 2,
|
MemberType: 2,
|
||||||
ToUid: record.Uid,
|
ToUid: record.Uid,
|
||||||
MemberStatus: 2,
|
MemberStatus: 2,
|
||||||
|
MemberLevel: record.MemberLevel,
|
||||||
}
|
}
|
||||||
err := userInvite.Create(model.DB)
|
err := userInvite.Create(model.DB)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -321,7 +414,7 @@ func PushWXPayNotice(c *gin.Context) {
|
||||||
} else {
|
} else {
|
||||||
qs := model.NewUserInviteQuerySet(model.DB).ToUidEq(record.Uid).GetUpdater()
|
qs := model.NewUserInviteQuerySet(model.DB).ToUidEq(record.Uid).GetUpdater()
|
||||||
if user.MemberLevel != 2 {
|
if user.MemberLevel != 2 {
|
||||||
qs = qs.SetMemberOpenTime(time.Now())
|
qs = qs.SetMemberOpenTime(time.Now()).SetMemberLevel(record.MemberLevel)
|
||||||
}
|
}
|
||||||
num, err := qs.SetMemberType(2).SetMemberStatus(2).UpdateNum()
|
num, err := qs.SetMemberType(2).SetMemberStatus(2).UpdateNum()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -333,8 +426,8 @@ func PushWXPayNotice(c *gin.Context) {
|
||||||
|
|
||||||
if invite.FromUid != 0 {
|
if invite.FromUid != 0 {
|
||||||
inviteUser := model.GetUserByUid(invite.FromUid)
|
inviteUser := model.GetUserByUid(invite.FromUid)
|
||||||
if inviteUser.UserType != 2 && user.MemberLevel != 2 {
|
if inviteUser.UserType != 2 && user.MemberLevel != 2 { // 邀请 新用户推送一次
|
||||||
err := model.CodeSendToUser(invite.FromUid, model.CodeTypeMemberCard30)
|
err := model.CodeSendToUser(invite.FromUid, model.CodeTypeMemberCard30, model.RedeemCodeActivityTypeUserInvite)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
}
|
}
|
||||||
|
@ -343,6 +436,15 @@ func PushWXPayNotice(c *gin.Context) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if user.MemberLevel != 2 {
|
||||||
|
err = model.CodeSendToUser(user.Uid, model.CodeTypeMemberCard30, model.RedeemCodeActivityTypeStore)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
model.CreateUserRentCardByMemberLevel(record.Uid,record.MemberLevel,memberConfig.CardMax)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("notify.TotalFee:", notify.TotalFee)
|
fmt.Println("notify.TotalFee:", notify.TotalFee)
|
||||||
|
@ -353,15 +455,27 @@ func PushWXPayNotice(c *gin.Context) {
|
||||||
err := record.GetByOpenNo()
|
err := record.GetByOpenNo()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
configInfo, err := model.PayConfigInfo()
|
//configInfo, err := model.PayConfigInfo()
|
||||||
|
//if err != nil {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
// return
|
||||||
|
//}
|
||||||
|
user := model.GetUserByUid(record.Uid)
|
||||||
|
if user == nil {
|
||||||
|
logger.Error("user nil")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
memberConfig, err := model.GetMemberConfig(user.MemberLevel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
num, err := model.NewUserQuerySet(model.DB).UidEq(record.Uid).GetUpdater().SetDeposit(configInfo.DepositFee).UpdateNum()
|
num, err := model.NewUserQuerySet(model.DB).UidEq(record.Uid).GetUpdater().SetDeposit(memberConfig.MemberDeposit).UpdateNum()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("update deposit err:", err)
|
logger.Error("update deposit err:", err)
|
||||||
}
|
}
|
||||||
|
@ -381,10 +495,50 @@ func PushWXPayNotice(c *gin.Context) {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
}
|
}
|
||||||
err = model.OrderUpdateGoodsStock(goodsOrder.GoodsId, goodsOrder.Quantity, model.DB)
|
err = model.OrderUpdateGoodsStock(goodsOrder.GoodsId, goodsOrder.Quantity, model.DB)
|
||||||
|
} else if notify.Attach == wxpay.WxPayUpgradeMember {
|
||||||
|
|
||||||
|
record := &model.UserOpenMemberRecord{OpenNo: notify.OutTradeNo}
|
||||||
|
err := record.GetByOpenNo()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
fmt.Println("UpgradeMember:", record.Uid)
|
||||||
|
var user model.User
|
||||||
|
err = model.NewUserQuerySet(model.DB).UidEq(record.Uid).One(&user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
memberConfig, err := model.GetMemberConfig(record.MemberLevel)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("GetMemberConfig err:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = model.NewUserQuerySet(model.DB).UidEq(record.Uid).GetUpdater().SetMemberLevel(record.MemberLevel).SetMemberExpire(record.MemberExpire).
|
||||||
|
SetDeposit(memberConfig.MemberDeposit).UpdateNum()
|
||||||
|
//err = model.UserUpdate(&model.User{Uid: uint32(record.Uid), MemberLevel: record.MemberLevel, MemberExpire: expireTime, Deposit: memberConfig.MemberDeposit})
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 添加会员时长 等级 借卡数量
|
||||||
|
var userRentCard model.UserRentCard
|
||||||
|
err = model.NewUserRentCardQuerySet(model.DB).UidEq(record.Uid).One(&userRentCard)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = model.NewUserRentCardQuerySet(model.DB).UidEq(record.Uid).GetUpdater().SetMemberLevel(record.MemberLevel).
|
||||||
|
SetLevelRentCount(memberConfig.CardMax).SetCanRentCount(memberConfig.CardMax - userRentCard.HaveRentCount).UpdateNum()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
model.CreateUserRentCardByMemberLevel(record.Uid,record.MemberLevel,memberConfig.CardMax)
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.Debug("微信推动支付通知")
|
logger.Debug("微信推动支付通知")
|
||||||
|
|
|
@ -55,14 +55,9 @@ import (
|
||||||
// }
|
// }
|
||||||
//}
|
//}
|
||||||
|
|
||||||
func OrderList(c *gin.Context) {
|
func RentCardOrderList(c *gin.Context) {
|
||||||
req := struct {
|
fmt.Println("RentCardOrderList")
|
||||||
Page int `json:"page"`
|
req := model.OrderListReq{}
|
||||||
PageSize int `json:"page_size"`
|
|
||||||
}{
|
|
||||||
Page: 1,
|
|
||||||
PageSize: 10,
|
|
||||||
}
|
|
||||||
if c.ShouldBindJSON(&req) != nil {
|
if c.ShouldBindJSON(&req) != nil {
|
||||||
logger.Error("ShouldBindJSON err")
|
logger.Error("ShouldBindJSON err")
|
||||||
RespJson(c, status.BadRequest, nil)
|
RespJson(c, status.BadRequest, nil)
|
||||||
|
@ -74,7 +69,9 @@ func OrderList(c *gin.Context) {
|
||||||
RespJson(c, status.Unauthorized, nil)
|
RespJson(c, status.Unauthorized, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
orderList, totalPage, err := model.GetOrderList(uint64(uc.Uid), req.Page, req.PageSize) // TODO
|
req.Uid = uc.Uid
|
||||||
|
|
||||||
|
orderCardList, totalPage, err := req.GetOrderCardList() // TODO
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
@ -82,9 +79,9 @@ func OrderList(c *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ret := map[string]interface{}{
|
ret := map[string]interface{}{
|
||||||
"order_list": orderList,
|
"order_card_list": orderCardList,
|
||||||
"cur_page": req.Page,
|
"cur_page": req.Page,
|
||||||
"total_page": totalPage,
|
"total_page": totalPage,
|
||||||
}
|
}
|
||||||
RespOK(c, ret)
|
RespOK(c, ret)
|
||||||
return
|
return
|
||||||
|
@ -92,7 +89,10 @@ func OrderList(c *gin.Context) {
|
||||||
|
|
||||||
func OrderInfo(c *gin.Context) {
|
func OrderInfo(c *gin.Context) {
|
||||||
req := struct {
|
req := struct {
|
||||||
OrderId uint32 `json:"order_id"`
|
//OrderId uint32 `json:"order_id"`
|
||||||
|
//GameCardId uint64 `json:"game_card_id"` // 游戏id
|
||||||
|
//GameCardGoodsId uint64 `json:"game_card_goods_id" ` // 游戏卡id
|
||||||
|
OrderCardId uint32 `json:"order_card_id"`
|
||||||
}{}
|
}{}
|
||||||
if c.ShouldBindJSON(&req) != nil {
|
if c.ShouldBindJSON(&req) != nil {
|
||||||
logger.Error("ShouldBindJSON err")
|
logger.Error("ShouldBindJSON err")
|
||||||
|
@ -100,15 +100,19 @@ func OrderInfo(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
order := model.Order{}
|
order := model.Order{}
|
||||||
order.ID = req.OrderId
|
//order.ID = req.OrderId
|
||||||
info, err := order.Info()
|
//order.GameCardId = req.GameCardId
|
||||||
|
info, err := order.Info(req.OrderCardId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.InternalServerError, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
var orderCard model.OrderCard
|
||||||
RespOK(c, info)
|
if len(info) > 0 {
|
||||||
|
orderCard = info[0]
|
||||||
|
}
|
||||||
|
RespOK(c, orderCard)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,18 +159,18 @@ func WXPaySuccess(c *gin.Context) {
|
||||||
var orderCreateLocker sync.Mutex
|
var orderCreateLocker sync.Mutex
|
||||||
|
|
||||||
// 创建订单
|
// 创建订单
|
||||||
func OrderCreate(c *gin.Context) {
|
func RentCardOrderCreate(c *gin.Context) {
|
||||||
//type Goods struct {
|
//type Goods struct {
|
||||||
// Price uint32 `json:"price"`
|
// Price uint32 `json:"price"`
|
||||||
//}
|
//}
|
||||||
|
|
||||||
req := struct {
|
req := struct {
|
||||||
GameCardId uint64 `json:"game_card_id"`
|
GameCardList []model.CardInfo `json:"game_card_list"`
|
||||||
StoreId uint64 `json:"store_id"`
|
StoreId uint32 `json:"store_id"`
|
||||||
UserAddressId uint64 `json:"user_address_id"`
|
UserAddressId uint32 `json:"user_address_id"`
|
||||||
Price uint32 `json:"price"`
|
Price uint32 `json:"price"`
|
||||||
DeliveryType uint8 `json:"delivery_type"` // 取货方式
|
DeliveryType uint8 `json:"delivery_type"` // 取货方式
|
||||||
ExpressFee uint32 `json:"express_fee"`
|
ExpressFee uint32 `json:"express_fee"`
|
||||||
}{}
|
}{}
|
||||||
|
|
||||||
bodyString, err := ioutil.ReadAll(c.Request.Body)
|
bodyString, err := ioutil.ReadAll(c.Request.Body)
|
||||||
|
@ -217,30 +221,59 @@ func OrderCreate(c *gin.Context) {
|
||||||
RespJson(c, status.NotMember, nil)
|
RespJson(c, status.NotMember, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if user.Deposit == 0 {
|
|
||||||
|
memberConfig, err := model.GetMemberConfig(user.MemberLevel)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("GetMemberConfig err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if user.Deposit != memberConfig.MemberDeposit {
|
||||||
logger.Error(errors.New("user deposit 0"))
|
logger.Error(errors.New("user deposit 0"))
|
||||||
RespJson(c, status.OrderUnpaidDeposit, nil)
|
RespJson(c, status.OrderUnpaidDeposit, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
model.UnPayOrderSetCancel(user.Uid)
|
cardCount := uint32(0)
|
||||||
|
for _, v := range req.GameCardList {
|
||||||
|
cardCount += v.Count
|
||||||
|
}
|
||||||
|
fmt.Println("cardCount:", cardCount)
|
||||||
|
rentCard := model.GetUserRentCard(uc.Uid)
|
||||||
|
if rentCard == nil {
|
||||||
|
//logger.Error(errors.New("GetUserByUid err"))
|
||||||
|
//RespJson(c, status.InternalServerError, nil)
|
||||||
|
//return
|
||||||
|
fmt.Println("CardMax", memberConfig.CardMax)
|
||||||
|
rentCard = &model.UserRentCard{LevelRentCount: memberConfig.CardMax, CanRentCount: memberConfig.CardMax}
|
||||||
|
|
||||||
|
}
|
||||||
|
fmt.Println("rentCard", rentCard.CanRentCount)
|
||||||
|
if cardCount > rentCard.CanRentCount {
|
||||||
|
logger.Error("GetMemberConfig err:", err)
|
||||||
|
RespJson(c, status.OrderOutRentCount, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 订单成功后 扣减库存
|
||||||
|
//model.UnPayOrderSetCancel(user.Uid)
|
||||||
|
|
||||||
orderCreateLocker.Lock()
|
orderCreateLocker.Lock()
|
||||||
defer orderCreateLocker.Unlock()
|
defer orderCreateLocker.Unlock()
|
||||||
|
|
||||||
unreturnedOrders, err := model.IsHaveUnreturnedOrders(uc.Uid)
|
isRentCount, err := rentCard.IsHaveUnreturnedOrders(cardCount)
|
||||||
|
//unreturnedOrders, err := model.IsHaveUnreturnedOrders(uc.Uid) // TODO
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.InternalServerError, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if unreturnedOrders {
|
if isRentCount {
|
||||||
logger.Error("unreturnedOrders")
|
logger.Error("unreturnedOrders")
|
||||||
RespJson(c, status.HaveUnreturnedOrders, nil)
|
RespJson(c, status.HaveUnreturnedOrders, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
online, err := model.IsGameCardOnline(uint32(req.GameCardId))
|
online, err := model.IsGameCardListOnline(req.GameCardList)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
@ -251,9 +284,9 @@ func OrderCreate(c *gin.Context) {
|
||||||
RespJson(c, status.GoodsSoldOut, nil)
|
RespJson(c, status.GoodsSoldOut, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if req.DeliveryType == 1 {
|
|
||||||
|
|
||||||
}
|
//if req.DeliveryType == 1 {
|
||||||
|
//}
|
||||||
reqJson, _ := json.Marshal(&req)
|
reqJson, _ := json.Marshal(&req)
|
||||||
fmt.Println("reqJson:", string(reqJson))
|
fmt.Println("reqJson:", string(reqJson))
|
||||||
|
|
||||||
|
@ -262,9 +295,9 @@ func OrderCreate(c *gin.Context) {
|
||||||
|
|
||||||
order := model.Order{
|
order := model.Order{
|
||||||
Uid: uint64(uc.Uid),
|
Uid: uint64(uc.Uid),
|
||||||
GameCardId: req.GameCardId,
|
GameCardId: 0,
|
||||||
StoreId: req.StoreId,
|
StoreId: uint64(req.StoreId),
|
||||||
UserAddressId: req.UserAddressId,
|
UserAddressId: uint64(req.UserAddressId),
|
||||||
DeliveryType: req.DeliveryType,
|
DeliveryType: req.DeliveryType,
|
||||||
Count: 1,
|
Count: 1,
|
||||||
PickupCode: model.GetPickupCode(), // TODO 取货码
|
PickupCode: model.GetPickupCode(), // TODO 取货码
|
||||||
|
@ -276,16 +309,26 @@ func OrderCreate(c *gin.Context) {
|
||||||
Postage: req.ExpressFee,
|
Postage: req.ExpressFee,
|
||||||
}
|
}
|
||||||
|
|
||||||
//tx := model.TransactionBegin()
|
//TODO 以支付成功作为订单下单成功的依据,不是订单创建 已修改
|
||||||
////TODO 以支付成功作为订单下单成功的依据,不是订单创建 已修改
|
//var gameCardGoodsStock model.GameCardGoodsStock
|
||||||
var gameCardGoodsStock model.GameCardGoodsStock
|
//err = model.NewGameCardGoodsStockQuerySet(model.DB).StoreIdEq(req.StoreId).GameCardIdEq(req.GameCardId).One(&gameCardGoodsStock)
|
||||||
err = model.NewGameCardGoodsStockQuerySet(model.DB).StoreIdEq(req.StoreId).GameCardIdEq(req.GameCardId).One(&gameCardGoodsStock)
|
//if err != nil {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
// RespJson(c, status.InternalServerError, nil)
|
||||||
|
// return
|
||||||
|
//}
|
||||||
|
//if gameCardGoodsStock.RentStock <= 0 {
|
||||||
|
// logger.Error("order stock out ")
|
||||||
|
// RespJson(c, status.OrderStockOut, nil)
|
||||||
|
// return
|
||||||
|
//}
|
||||||
|
stockEnough, err := model.IsCardGoodsStockEnough(req.GameCardList, req.StoreId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.OrderStockOut, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if gameCardGoodsStock.RentStock <= 0 {
|
if stockEnough {
|
||||||
logger.Error("order stock out ")
|
logger.Error("order stock out ")
|
||||||
RespJson(c, status.OrderStockOut, nil)
|
RespJson(c, status.OrderStockOut, nil)
|
||||||
return
|
return
|
||||||
|
@ -293,40 +336,65 @@ func OrderCreate(c *gin.Context) {
|
||||||
|
|
||||||
fmt.Println("PayPrice:", order.PayPrice)
|
fmt.Println("PayPrice:", order.PayPrice)
|
||||||
if req.Price == 0 {
|
if req.Price == 0 {
|
||||||
|
tx := model.TransactionBegin()
|
||||||
order.PayStatus = model.PayStatusPaid
|
order.PayStatus = model.PayStatusPaid
|
||||||
fmt.Println("orderId:", order.PayStatus)
|
fmt.Println("orderId:", order.PayStatus)
|
||||||
err = order.OrderCreate()
|
err = order.OrderCreate(tx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
tx.Rollback()
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.InternalServerError, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 减库存
|
// 减库存
|
||||||
sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock-1 WHERE store_id=%d AND game_card_id=%d;", req.StoreId, req.GameCardId)
|
//sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock-1 WHERE store_id=%d AND game_card_id=%d;", req.StoreId, req.GameCardId)
|
||||||
fmt.Println("sql:", sql)
|
//fmt.Println("sql:", sql)
|
||||||
err = model.DB.Exec(sql).Error
|
//err = model.DB.Exec(sql).Error
|
||||||
|
//if err != nil {
|
||||||
|
// logger.Errorf("err:", err)
|
||||||
|
// RespJson(c, status.InternalServerError, nil)
|
||||||
|
// return
|
||||||
|
//}
|
||||||
|
err := model.GameCardGoodsInventoryReduction(req.GameCardList, req.StoreId, tx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("err:", err)
|
tx.Rollback()
|
||||||
|
logger.Error("inventory reduction err:%s", err.Error())
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.InternalServerError, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
err = order.CreatOrderCard(req.GameCardList, req.StoreId, tx)
|
||||||
|
if err != nil {
|
||||||
|
tx.Rollback()
|
||||||
|
logger.Error("inventory reduction err:%s", err.Error())
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = tx.Commit().Error
|
||||||
|
if err != nil {
|
||||||
|
tx.Rollback()
|
||||||
|
logger.Error("commit err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
go model.OrderCardUserRentCard(uc.Uid, cardCount, memberConfig, nil)
|
||||||
ret := map[string]interface{}{
|
ret := map[string]interface{}{
|
||||||
"web_pay": "",
|
"web_pay": "",
|
||||||
"order_id": order.ID,
|
"order_id": order.ID,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
go model.ShoppingCartCreateOrder(uc.Uid, req.GameCardList)
|
||||||
RespOK(c, ret)
|
RespOK(c, ret)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
begin := model.DB.Begin()
|
|
||||||
//err = order.OrderCreate()
|
//err = order.OrderCreate()
|
||||||
//if err != nil {
|
//if err != nil {
|
||||||
// logger.Error("err:", err)
|
// logger.Error("err:", err)
|
||||||
// RespJson(c, status.InternalServerError, nil)
|
// RespJson(c, status.InternalServerError, nil)
|
||||||
// return
|
// return
|
||||||
//}
|
//}
|
||||||
|
begin := model.DB.Begin()
|
||||||
err = order.Create(begin)
|
err = order.Create(begin)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
|
@ -336,12 +404,27 @@ func OrderCreate(c *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 减库存
|
// 减库存
|
||||||
sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock-1 WHERE store_id=%d AND game_card_id=%d;", req.StoreId, req.GameCardId)
|
//sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock-1 WHERE store_id=%d AND game_card_id=%d;", req.StoreId, req.GameCardId)
|
||||||
fmt.Println("sql:", sql)
|
//fmt.Println("sql:", sql)
|
||||||
err = begin.Exec(sql).Error
|
//err = begin.Exec(sql).Error
|
||||||
|
//if err != nil {
|
||||||
|
// begin.Rollback()
|
||||||
|
// logger.Errorf("err:", err)
|
||||||
|
// RespJson(c, status.InternalServerError, nil)
|
||||||
|
// return
|
||||||
|
//}
|
||||||
|
// TODO 订单回调成功减库存
|
||||||
|
//err = model.GameCardGoodsInventoryReduction(req.GameCardList, req.StoreId, begin)
|
||||||
|
//if err != nil {
|
||||||
|
// begin.Rollback()
|
||||||
|
// logger.Error("inventory reduction err:%s", err.Error())
|
||||||
|
// RespJson(c, status.InternalServerError, nil)
|
||||||
|
// return
|
||||||
|
//}
|
||||||
|
err = order.CreatOrderCard(req.GameCardList, req.StoreId, begin)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
logger.Errorf("err:", err)
|
logger.Error("inventory reduction err:%s", err.Error())
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.InternalServerError, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -353,12 +436,12 @@ func OrderCreate(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
orderId := fmt.Sprintf("%d", order.ID)
|
//orderId := fmt.Sprintf("%d", order.ID)
|
||||||
//orderId = "100000"
|
////orderId = "100000"
|
||||||
fmt.Println("orderId", orderId)
|
//fmt.Println("orderId", orderId)
|
||||||
fmt.Println("Price", req.Price)
|
//fmt.Println("Price", req.Price)
|
||||||
fmt.Println("WxOpenID", user.WxOpenID)
|
//fmt.Println("WxOpenID", user.WxOpenID)
|
||||||
fmt.Println("WxPayRentCard", wxpay.WxPayRentCard)
|
//fmt.Println("WxPayRentCard", wxpay.WxPayRentCard)
|
||||||
webPay, err := wxpay.WebPay(order.OrderSn, req.Price, user.WxOpenID, "N", wxpay.WxPayRentCard)
|
webPay, err := wxpay.WebPay(order.OrderSn, req.Price, user.WxOpenID, "N", wxpay.WxPayRentCard)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(errors.New("WebPay err"))
|
logger.Error(errors.New("WebPay err"))
|
||||||
|
@ -698,14 +781,14 @@ func OrderRevert(c *gin.Context) {
|
||||||
}
|
}
|
||||||
//order := model.Order{}
|
//order := model.Order{}
|
||||||
//order.ID = req.OrderId
|
//order.ID = req.OrderId
|
||||||
info, err := order.Revert()
|
err := order.Revert()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
RespJson(c, status.OrderCompleted, nil)
|
RespJson(c, status.OrderCompleted, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
RespOK(c, info)
|
RespOK(c, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -718,22 +801,55 @@ func OrderRevertCancel(c *gin.Context) {
|
||||||
}
|
}
|
||||||
//order := model.Order{}
|
//order := model.Order{}
|
||||||
//order.ID = req.OrderId
|
//order.ID = req.OrderId
|
||||||
info, err := order.RevertCancel()
|
_, err := order.RevertCancel()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
RespJson(c, status.OrderCompleted, nil)
|
RespJson(c, status.OrderStatusNotReturning, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
//if isRecede {
|
||||||
RespOK(c, info)
|
// outTradeNo, err := model.GetWxPayExpressFeeRefundRecord(order.ID)
|
||||||
|
// if err != nil {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
// RespJson(c, status.InternalServerError, nil)
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// orderSn := model.GetOrderSn()
|
||||||
|
// err = model.UserOpenMemberRecord{Uid: uint32(order.Uid), OpenNo: orderSn, OrderId: order.ID, OrderType: 2}.Insert()
|
||||||
|
// if err != nil {
|
||||||
|
// logger.Error(errors.New("WebPay err"))
|
||||||
|
// RespJson(c, status.InternalServerError, nil)
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// orderRefund := wxpay.OrderRefund{
|
||||||
|
// OutTradeNo: outTradeNo,
|
||||||
|
// OutRefundNo: orderSn,
|
||||||
|
// NotifyUrl: "",
|
||||||
|
// Amount: wxpay.OrderRefundAmount{
|
||||||
|
// Refund: order.PayPrice,
|
||||||
|
// Total: order.PayPrice,
|
||||||
|
// Currency: "CNY",
|
||||||
|
// },
|
||||||
|
// }
|
||||||
|
// //bytes, _ := json.Marshal(orderRefund)
|
||||||
|
// //fmt.Println("订单取消:", string(bytes))
|
||||||
|
// //err = wxpay.WxPayOrderRefund(orderRefund)
|
||||||
|
// err = wxpay.TransactionOrderRefund(orderRefund)
|
||||||
|
// if err != nil {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
// RespJson(c, status.InternalServerError, nil)
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
RespOK(c, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func OrderCancel(c *gin.Context) {
|
func OrderCancel(c *gin.Context) {
|
||||||
req := struct {
|
order := model.Order{}
|
||||||
OrderId uint32 `json:"order_id"`
|
if c.ShouldBindJSON(&order) != nil {
|
||||||
}{}
|
|
||||||
if c.ShouldBindJSON(&req) != nil {
|
|
||||||
logger.Error("ShouldBindJSON err")
|
logger.Error("ShouldBindJSON err")
|
||||||
RespJson(c, status.BadRequest, nil)
|
RespJson(c, status.BadRequest, nil)
|
||||||
return
|
return
|
||||||
|
@ -744,18 +860,19 @@ func OrderCancel(c *gin.Context) {
|
||||||
// RespJson(c, status.Unauthorized, nil)
|
// RespJson(c, status.Unauthorized, nil)
|
||||||
// return
|
// return
|
||||||
//}
|
//}
|
||||||
fmt.Println("OrderId:", req.OrderId)
|
fmt.Println("OrderId:", order.ID)
|
||||||
order := &model.Order{}
|
//order := &model.Order{}
|
||||||
order.ID = req.OrderId
|
//order.ID = req.OrderId
|
||||||
err := order.Cancel()
|
isRecede, orderInfo, err := order.Cancel()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
RespJson(c, status.OrderDelivered, nil)
|
RespJson(c, status.OrderDelivered, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
order = orderInfo
|
||||||
fmt.Println("order:", order)
|
fmt.Println("order:", order)
|
||||||
if order.DeliveryType == 2 {
|
if isRecede {
|
||||||
|
|
||||||
outTradeNo, err := model.GetWxPayExpressFeeRefundRecord(order.ID)
|
outTradeNo, err := model.GetWxPayExpressFeeRefundRecord(order.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
|
@ -781,8 +898,10 @@ func OrderCancel(c *gin.Context) {
|
||||||
Currency: "CNY",
|
Currency: "CNY",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
//bytes, _ := json.Marshal(orderRefund)
|
bytes, _ := json.Marshal(order)
|
||||||
//fmt.Println("订单取消:", string(bytes))
|
fmt.Println("订单取消:", string(bytes))
|
||||||
|
orderRefundJson, _ := json.Marshal(&orderRefund)
|
||||||
|
fmt.Println("订单取消 orderRefundJson:", string(orderRefundJson))
|
||||||
//err = wxpay.WxPayOrderRefund(orderRefund)
|
//err = wxpay.WxPayOrderRefund(orderRefund)
|
||||||
err = wxpay.TransactionOrderRefund(orderRefund)
|
err = wxpay.TransactionOrderRefund(orderRefund)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -3,13 +3,15 @@ package controller
|
||||||
import (
|
import (
|
||||||
"github.com/codinl/go-logger"
|
"github.com/codinl/go-logger"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
|
"mh-server/lib/auth"
|
||||||
"mh-server/lib/status"
|
"mh-server/lib/status"
|
||||||
"mh-server/model"
|
"mh-server/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
func StoreList(c *gin.Context) {
|
func StoreList(c *gin.Context) {
|
||||||
req := struct {
|
req := struct {
|
||||||
GameCardId uint64 `json:"game_card_id"`
|
//GameCardId uint64 `json:"game_card_id"`
|
||||||
|
GameCardList []model.CardInfo `json:"game_card_list"`
|
||||||
}{}
|
}{}
|
||||||
if err := c.ShouldBindJSON(&req); err != nil {
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
logger.Error(err)
|
logger.Error(err)
|
||||||
|
@ -17,7 +19,7 @@ func StoreList(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
stores, err := model.GetStoreList(req.GameCardId)
|
stores, err := model.GetStoreList(req.GameCardList)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
@ -45,3 +47,118 @@ func StoreInfo(c *gin.Context) {
|
||||||
RespOK(c, store)
|
RespOK(c, store)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ShoppingCartAdd(c *gin.Context) {
|
||||||
|
req := &struct {
|
||||||
|
GameCardId uint32 `json:"game_card_id"`
|
||||||
|
AddType uint32 `json:"add_type"` // 1-加 2-减
|
||||||
|
}{}
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
logger.Error(err)
|
||||||
|
RespJson(c, status.BadRequest, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//fmt.Println("GameCardId:",req.GameCardId)
|
||||||
|
//fmt.Println("AddType:",req.AddType)
|
||||||
|
|
||||||
|
if req.GameCardId == 0 {
|
||||||
|
logger.Error("GameCardId is 0")
|
||||||
|
RespJson(c, status.BadRequest, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
uc := auth.GetCurrentUser(c)
|
||||||
|
if uc == nil {
|
||||||
|
RespJson(c, status.Unauthorized, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var shoppingCart model.ShoppingCart
|
||||||
|
err := model.NewShoppingCartQuerySet(model.DB).UidEq(uint64(uc.Uid)).GameCardIdEq(uint64(req.GameCardId)).One(&shoppingCart)
|
||||||
|
if err != nil && err != model.RecordNotFound {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err == model.RecordNotFound {
|
||||||
|
shoppingCart = model.ShoppingCart{
|
||||||
|
Uid: uint64(uc.Uid),
|
||||||
|
GameCardId: uint64(req.GameCardId),
|
||||||
|
Count: 1,
|
||||||
|
}
|
||||||
|
err := model.DB.Create(&shoppingCart).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
RespOK(c, shoppingCart)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if req.AddType == 1 {
|
||||||
|
shoppingCart.Count += 1
|
||||||
|
} else if req.AddType == 2 {
|
||||||
|
shoppingCart.Count -= 1
|
||||||
|
}
|
||||||
|
if shoppingCart.Count < 0 {
|
||||||
|
shoppingCart.Count = 0
|
||||||
|
}
|
||||||
|
_, err = model.NewShoppingCartQuerySet(model.DB).IDEq(shoppingCart.ID).GetUpdater().SetCount(shoppingCart.Count).UpdateNum()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
RespOK(c, shoppingCart)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func ShoppingCartList(c *gin.Context) {
|
||||||
|
req := &model.ShoppingCartListReq{}
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
logger.Error(err)
|
||||||
|
RespJson(c, status.BadRequest, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
uc := auth.GetCurrentUser(c)
|
||||||
|
if uc == nil {
|
||||||
|
RespJson(c, status.Unauthorized, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req.Uid = uc.Uid
|
||||||
|
list, err := req.List()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
RespOK(c, list)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func ShoppingCartDel(c *gin.Context) {
|
||||||
|
req := &struct {
|
||||||
|
ShoppingCartIds []uint32 `json:"shopping_cart_ids"`
|
||||||
|
}{}
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
logger.Error(err)
|
||||||
|
RespJson(c, status.BadRequest, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
uc := auth.GetCurrentUser(c)
|
||||||
|
if uc == nil {
|
||||||
|
RespJson(c, status.Unauthorized, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err := model.NewShoppingCartQuerySet(model.DB).UidEq(uint64(uc.Uid)).IDIn(req.ShoppingCartIds...).Delete()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
RespOK(c, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
|
@ -205,14 +205,14 @@ func UserInfoUpdate(c *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func OpenMember(c *gin.Context) {
|
func OpenMember(c *gin.Context) {
|
||||||
//req := struct {
|
req := struct {
|
||||||
// PayType uint32 `json:"pay_type"` // 1-开通会员 2-
|
MemberLevel uint32 `json:"member_level"` // 昵称
|
||||||
//}{}
|
}{}
|
||||||
//if c.ShouldBindJSON(&req) != nil {
|
if c.ShouldBindJSON(&req) != nil {
|
||||||
// RespJson(c, status.BadRequest, nil)
|
logger.Error("parameter err")
|
||||||
// return
|
RespJson(c, status.BadRequest, nil)
|
||||||
//}
|
return
|
||||||
|
}
|
||||||
uc := auth.GetCurrentUser(c)
|
uc := auth.GetCurrentUser(c)
|
||||||
if uc == nil {
|
if uc == nil {
|
||||||
RespJson(c, status.Unauthorized, nil)
|
RespJson(c, status.Unauthorized, nil)
|
||||||
|
@ -220,23 +220,20 @@ func OpenMember(c *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
user := model.GetUserByUid(uc.Uid)
|
user := model.GetUserByUid(uc.Uid)
|
||||||
//uid := fmt.Sprintf("%d", uc.Uid)
|
|
||||||
//totalFee := MemberFee + DepositFee
|
|
||||||
//uid := "623892011"
|
|
||||||
//user := model.GetUserByUid(62389201)
|
|
||||||
|
|
||||||
//totalFee = uint32(3)
|
//configInfo, err := model.PayConfigInfo()
|
||||||
//if user.MemberLevel > 1 {
|
//if err != nil {
|
||||||
// totalFee = DepositFee
|
// logger.Error("err:", err)
|
||||||
// //totalFee = uint32(1)
|
// RespJson(c, status.InternalServerError, nil)
|
||||||
|
// return
|
||||||
//}
|
//}
|
||||||
|
memberConfig, err := model.GetMemberConfig(req.MemberLevel)
|
||||||
configInfo, err := model.PayConfigInfo()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.InternalServerError, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
//totalFee := uint32(MemberFee + DepositFee)
|
//totalFee := uint32(MemberFee + DepositFee)
|
||||||
////totalFee = uint32(3) // TODO 测试
|
////totalFee = uint32(3) // TODO 测试
|
||||||
//if user.Deposit == 300 {
|
//if user.Deposit == 300 {
|
||||||
|
@ -244,10 +241,11 @@ func OpenMember(c *gin.Context) {
|
||||||
// // //totalFee = uint32(1) // TODO 测试
|
// // //totalFee = uint32(1) // TODO 测试
|
||||||
//}
|
//}
|
||||||
|
|
||||||
fmt.Println("configInfo.MemberFee : configInfo.DepositFee", configInfo.MemberFee, configInfo.DepositFee)
|
fmt.Println("configInfo.MemberFee : configInfo.DepositFee", memberConfig.MemberFee, memberConfig.MemberDeposit)
|
||||||
totalFee := configInfo.MemberFee + configInfo.DepositFee
|
|
||||||
if user.Deposit == configInfo.DepositFee {
|
totalFee := memberConfig.MemberFee + memberConfig.MemberDeposit - user.Deposit
|
||||||
totalFee = configInfo.MemberFee
|
if user.Deposit == memberConfig.MemberDeposit {
|
||||||
|
totalFee = memberConfig.MemberFee
|
||||||
}
|
}
|
||||||
if totalFee == 0 {
|
if totalFee == 0 {
|
||||||
logger.Error(errors.New("totalFee is 0"))
|
logger.Error(errors.New("totalFee is 0"))
|
||||||
|
@ -262,7 +260,7 @@ func OpenMember(c *gin.Context) {
|
||||||
//}
|
//}
|
||||||
//orderSn := utils.GetSerialNo32HEXString()
|
//orderSn := utils.GetSerialNo32HEXString()
|
||||||
orderSn := model.GetOrderSn()
|
orderSn := model.GetOrderSn()
|
||||||
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn}.Insert()
|
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, MemberLevel: req.MemberLevel}.Insert()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(errors.New("WebPay err"))
|
logger.Error(errors.New("WebPay err"))
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
@ -279,6 +277,225 @@ func OpenMember(c *gin.Context) {
|
||||||
RespOK(c, webPay)
|
RespOK(c, webPay)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func UpgradeMember(c *gin.Context) {
|
||||||
|
req := struct {
|
||||||
|
MemberLevel uint32 `json:"member_level"` // 昵称
|
||||||
|
}{}
|
||||||
|
if c.ShouldBindJSON(&req) != nil {
|
||||||
|
logger.Error("parameter err")
|
||||||
|
RespJson(c, status.BadRequest, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
uc := auth.GetCurrentUser(c)
|
||||||
|
if uc == nil {
|
||||||
|
RespJson(c, status.Unauthorized, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
user := model.GetUserByUid(uc.Uid)
|
||||||
|
if user.MemberLevel != 2 && user.MemberLevel != 4 {
|
||||||
|
logger.Error("MemberLevel err:")
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
originalMemberConfig, err := model.GetMemberConfig(user.MemberLevel)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
memberConfig, err := model.GetMemberConfig(req.MemberLevel)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
raiseTime, err := time.Parse("2006-01-02 15:04:05", "2022-01-01 00:00:00")
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
memberFee := originalMemberConfig.MemberFee
|
||||||
|
if user.OpenMemberTime.Before(raiseTime) {
|
||||||
|
memberFee = 29900
|
||||||
|
}
|
||||||
|
|
||||||
|
// 补押金
|
||||||
|
depositMendFee := int64(memberConfig.MemberDeposit) - int64(user.Deposit)
|
||||||
|
|
||||||
|
count, err := model.NewUserRedeemCodeQuerySet(model.DB).UidEq(uc.Uid).StatusEq(model.RedeemCodeStatusUsed).Count()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Println("count:", count)
|
||||||
|
// 抵扣天数
|
||||||
|
deductionDays := int64(0)
|
||||||
|
deductionTime := user.MemberExpire.Unix() - int64(count*30*24*3600) - time.Now().Unix() + 12*3600
|
||||||
|
if deductionTime < 0 {
|
||||||
|
deductionTime = 0
|
||||||
|
}
|
||||||
|
if deductionTime > 0 {
|
||||||
|
deductionDays = deductionTime / int64(24*3600)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 抵扣金
|
||||||
|
deductionFee := (((int64(memberFee) * deductionDays) / 365) / 100) * 100
|
||||||
|
|
||||||
|
// 补会员费
|
||||||
|
memberMendFee := int64(memberConfig.MemberFee) - deductionFee
|
||||||
|
|
||||||
|
totalFee := int64(depositMendFee) + memberMendFee
|
||||||
|
//if memberMendFee < 0 {
|
||||||
|
// depositMendFee = depositMendFee + memberMendFee
|
||||||
|
//}
|
||||||
|
fmt.Println("depositMendFee : memberMendFee", depositMendFee, memberMendFee)
|
||||||
|
|
||||||
|
if totalFee == 0 {
|
||||||
|
logger.Error(errors.New("totalFee is 0"))
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//totalFee := memberConfig.MemberFee + memberConfig.MemberDeposit
|
||||||
|
//if user.Deposit == memberConfig.MemberDeposit {
|
||||||
|
// totalFee = memberConfig.MemberFee
|
||||||
|
//}
|
||||||
|
if totalFee == 0 {
|
||||||
|
logger.Error(errors.New("totalFee is 0"))
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//webPay, err := wxpay.WebPay(uid, totalFee, user.WxOpenID, "N", wxpay.WxPayMember)
|
||||||
|
//if err != nil {
|
||||||
|
// logger.Error(errors.New("WebPay err"))
|
||||||
|
// RespJson(c, status.InternalServerError, nil)
|
||||||
|
// return
|
||||||
|
//}
|
||||||
|
//orderSn := utils.GetSerialNo32HEXString()
|
||||||
|
memberExpire := time.Now().AddDate(1, 0, count*30)
|
||||||
|
orderSn := model.GetOrderSn()
|
||||||
|
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn,
|
||||||
|
MemberLevel: req.MemberLevel, OrderType: 3, MemberExpire: memberExpire}.Insert()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error(errors.New("WebPay err"))
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
webPay, err := wxpay.WebPay(orderSn, uint32(totalFee), user.WxOpenID, "N", wxpay.WxPayUpgradeMember)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error(errors.New("WebPay err"))
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
RespOK(c, webPay)
|
||||||
|
}
|
||||||
|
|
||||||
|
func UpgradeMemberInfo(c *gin.Context) {
|
||||||
|
req := struct {
|
||||||
|
MemberLevel uint32 `json:"member_level"` // 昵称
|
||||||
|
}{}
|
||||||
|
if c.ShouldBindJSON(&req) != nil {
|
||||||
|
logger.Error("parameter err")
|
||||||
|
RespJson(c, status.BadRequest, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
uc := auth.GetCurrentUser(c)
|
||||||
|
if uc == nil {
|
||||||
|
RespJson(c, status.Unauthorized, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
user := model.GetUserByUid(uc.Uid)
|
||||||
|
if user.MemberLevel != 2 && user.MemberLevel != 4 {
|
||||||
|
logger.Error("MemberLevel err:")
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//configInfo, err := model.PayConfigInfo()
|
||||||
|
//if err != nil {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
// RespJson(c, status.InternalServerError, nil)
|
||||||
|
// return
|
||||||
|
//}
|
||||||
|
originalMemberConfig, err := model.GetMemberConfig(user.MemberLevel)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
memberConfig, err := model.GetMemberConfig(req.MemberLevel)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
raiseTime, err := time.Parse("2006-01-02 15:04:05", "2022-01-01 00:00:00")
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
memberFee := originalMemberConfig.MemberFee
|
||||||
|
if user.OpenMemberTime.Before(raiseTime) {
|
||||||
|
memberFee = 29900
|
||||||
|
}
|
||||||
|
|
||||||
|
// 补押金
|
||||||
|
depositMendFee := int64(memberConfig.MemberDeposit) - int64(user.Deposit)
|
||||||
|
|
||||||
|
count, err := model.NewUserRedeemCodeQuerySet(model.DB).UidEq(uc.Uid).StatusEq(model.RedeemCodeStatusUsed).Count()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Println("count:", count)
|
||||||
|
// 抵扣天数
|
||||||
|
deductionDays := int64(0)
|
||||||
|
deductionTime := user.MemberExpire.Unix() - int64(count*30*24*3600) - time.Now().Unix() + 12*3600
|
||||||
|
if deductionTime < 0 {
|
||||||
|
deductionTime = 0
|
||||||
|
}
|
||||||
|
if deductionTime > 0 {
|
||||||
|
deductionDays = deductionTime / int64(24*3600)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 抵扣金
|
||||||
|
deductionFee := (((int64(memberFee) * deductionDays) / 365) / 100) * 100
|
||||||
|
|
||||||
|
// 补会员费
|
||||||
|
memberMendFee := int64(memberConfig.MemberFee) - deductionFee
|
||||||
|
|
||||||
|
totalFee := int64(depositMendFee) + memberMendFee
|
||||||
|
//if memberMendFee < 0 {
|
||||||
|
// depositMendFee = depositMendFee + memberMendFee
|
||||||
|
//}
|
||||||
|
fmt.Println("depositMendFee : memberMendFee", depositMendFee, memberMendFee)
|
||||||
|
|
||||||
|
if totalFee == 0 {
|
||||||
|
logger.Error(errors.New("totalFee is 0"))
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
RespOK(c, map[string]interface{}{
|
||||||
|
"deduction_fee": deductionFee, // 会员抵扣费
|
||||||
|
"deduction_days": deductionDays, // 会员抵扣天数
|
||||||
|
"member_mend_fee": memberMendFee, // 会员补费
|
||||||
|
"deposit_mend_fee": depositMendFee, // 补押金
|
||||||
|
"total_fee": totalFee, // 总费用
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func PayDeposit(c *gin.Context) {
|
func PayDeposit(c *gin.Context) {
|
||||||
uc := auth.GetCurrentUser(c)
|
uc := auth.GetCurrentUser(c)
|
||||||
if uc == nil {
|
if uc == nil {
|
||||||
|
@ -294,14 +511,23 @@ func PayDeposit(c *gin.Context) {
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.InternalServerError, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
level := user.MemberLevel
|
||||||
configInfo, err := model.PayConfigInfo()
|
if level == model.MemberLevelPeriod {
|
||||||
|
level = model.MemberLevelGold
|
||||||
|
}
|
||||||
|
//configInfo, err := model.PayConfigInfo()
|
||||||
|
//if err != nil {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
// return
|
||||||
|
//}
|
||||||
|
memberConfig, err := model.GetMemberConfig(level)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("GetMemberConfig err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
totalFee := configInfo.DepositFee
|
totalFee := memberConfig.MemberDeposit
|
||||||
if totalFee == 0 || user.Deposit == totalFee {
|
if totalFee == 0 || user.Deposit == totalFee {
|
||||||
logger.Error(errors.New("totalFee is 0"))
|
logger.Error(errors.New("totalFee is 0"))
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
@ -356,7 +582,7 @@ func RefundDeposit(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
count, err := model.NewDepositRefundRecordQuerySet(model.DB).UidEq(uc.Uid).StatusNotIn(model.DepositRefundStatusRefunded,model.DepositRefundStatusRefused).Count()
|
count, err := model.NewDepositRefundRecordQuerySet(model.DB).UidEq(uc.Uid).StatusNotIn(model.DepositRefundStatusRefunded, model.DepositRefundStatusRefused).Count()
|
||||||
if err != nil || count > 0 {
|
if err != nil || count > 0 {
|
||||||
logger.Error("count is not 0")
|
logger.Error("count is not 0")
|
||||||
RespJson(c, status.RefundDepositSubmitted, nil)
|
RespJson(c, status.RefundDepositSubmitted, nil)
|
||||||
|
@ -396,3 +622,33 @@ func UserDepositRefundRecordList(c *gin.Context) {
|
||||||
|
|
||||||
RespOK(c, resp)
|
RespOK(c, resp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MemberConfigList(c *gin.Context) {
|
||||||
|
//uc := auth.GetCurrentUser(c)
|
||||||
|
//if uc == nil {
|
||||||
|
// RespJson(c, status.Unauthorized, nil)
|
||||||
|
// return
|
||||||
|
//}
|
||||||
|
|
||||||
|
resp, err := model.MemberConfigInfo()
|
||||||
|
if err != nil {
|
||||||
|
logger.Errorf("err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
RespOK(c, resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 升级 1-黄金会员 2-白金会员 3-黑金会员
|
||||||
|
// 开通会员
|
||||||
|
// 升级会员
|
||||||
|
// 订单
|
||||||
|
// 购物车
|
||||||
|
// 押金
|
||||||
|
|
||||||
|
// 会员列表 开通会员 下订单 借卡 还卡
|
||||||
|
// 会员升级
|
||||||
|
// 299会员 升级
|
||||||
|
// 订单 会员导数据
|
||||||
|
// 退押金记录
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -20,5 +20,5 @@ require (
|
||||||
github.com/spf13/viper v1.7.1
|
github.com/spf13/viper v1.7.1
|
||||||
github.com/wechatpay-apiv3/wechatpay-go v0.2.6
|
github.com/wechatpay-apiv3/wechatpay-go v0.2.6
|
||||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9
|
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9
|
||||||
qiniupkg.com/x v7.0.8+incompatible
|
qiniupkg.com/x v7.0.8+incompatible // indirect
|
||||||
)
|
)
|
||||||
|
|
|
@ -19,5 +19,6 @@ func TestExpressInfo(t *testing.T) {
|
||||||
//paramJson, _ := json.Marshal(paramMap)
|
//paramJson, _ := json.Marshal(paramMap)
|
||||||
//fmt.Println("paramJson:", string(paramJson))
|
//fmt.Println("paramJson:", string(paramJson))
|
||||||
|
|
||||||
ExpressInfo("zhongtong","73155364431352")
|
//ExpressInfo("zhongtong","73155364431352")
|
||||||
|
ExpressInfo("emsbg","9868015085913")
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,14 +83,16 @@ const (
|
||||||
AwardOffShelves = 500407 //奖品下架
|
AwardOffShelves = 500407 //奖品下架
|
||||||
AwardExchangeOut = 500408 //奖品已兑完
|
AwardExchangeOut = 500408 //奖品已兑完
|
||||||
|
|
||||||
NotMember = 500501 //非会员
|
NotMember = 500501 //非会员
|
||||||
HadReceiveReward = 500502 // 已经领取过奖励
|
HadReceiveReward = 500502 // 已经领取过奖励
|
||||||
OrderDelivered = 500503 // 订单已发货
|
OrderDelivered = 500503 // 订单已发货
|
||||||
OrderCompleted = 500504 // 订单已完成
|
OrderCompleted = 500504 // 订单已完成
|
||||||
OrderStockOut = 500505 // 没有库存
|
OrderStockOut = 500505 // 没有库存
|
||||||
OrderUnpaidDeposit = 500506 // 没有库存
|
OrderUnpaidDeposit = 500506 // 未交押金
|
||||||
|
RefundDepositSubmitted = 500507 // 已提交押金退款
|
||||||
RefundDepositSubmitted = 500507 // 已提交押金退款
|
OrderMemberLevelLow = 500508 // 会员等级低
|
||||||
|
OrderOutRentCount = 500509 // 会员超过可借卡数
|
||||||
|
OrderStatusNotReturning = 500510 // 订单已完成
|
||||||
|
|
||||||
GoodsNotSale = 500508 // 商品已下架
|
GoodsNotSale = 500508 // 商品已下架
|
||||||
|
|
||||||
|
@ -132,8 +134,9 @@ var statusDesc = map[int]string{
|
||||||
|
|
||||||
ExchangeStepLimit: "今日兑换步数超出上限",
|
ExchangeStepLimit: "今日兑换步数超出上限",
|
||||||
|
|
||||||
NotExists: "请求的资源不存在",
|
NotExists: "请求的资源不存在",
|
||||||
IsExists: "资源已经存在",
|
IsExists: "资源已经存在",
|
||||||
|
OrderStatusNotReturning: "该卡状态不能取消",
|
||||||
|
|
||||||
InternalServerError: "服务器开小差了,请稍后再试",
|
InternalServerError: "服务器开小差了,请稍后再试",
|
||||||
SmsFail: "短信发送失败",
|
SmsFail: "短信发送失败",
|
||||||
|
@ -197,8 +200,11 @@ var statusMsg = map[int]string{
|
||||||
CheckInAlready: "今日已签到",
|
CheckInAlready: "今日已签到",
|
||||||
OpenChestTimeNot: "宝箱时间未到",
|
OpenChestTimeNot: "宝箱时间未到",
|
||||||
|
|
||||||
NotExists: "请求的资源不存在",
|
|
||||||
IsExists: "资源已经存在",
|
NotExists: "请求的资源不存在",
|
||||||
|
IsExists: "资源已经存在",
|
||||||
|
OrderOutRentCount: "借卡数量超了",
|
||||||
|
|
||||||
|
|
||||||
InternalServerError: "服务器开小差了,请稍后再试",
|
InternalServerError: "服务器开小差了,请稍后再试",
|
||||||
SmsFail: "短信发送失败",
|
SmsFail: "短信发送失败",
|
||||||
|
|
|
@ -37,7 +37,8 @@ const (
|
||||||
WxPayMember = "member_pay" // 会员
|
WxPayMember = "member_pay" // 会员
|
||||||
WxPayRentCard = "rent_card_pay" // 租卡
|
WxPayRentCard = "rent_card_pay" // 租卡
|
||||||
WxPayDeposit = "deposit_pay" // 押金
|
WxPayDeposit = "deposit_pay" // 押金
|
||||||
WxPayExchangeGoods = "exchange_goods" // 押金
|
WxPayExchangeGoods = "exchange_goods" // 兑换商品
|
||||||
|
WxPayUpgradeMember = "upgrade_member" // 多级会员
|
||||||
|
|
||||||
//NotifyUrl = "https://switch.deovo.com:8001/api/v1/wxpay/notice" // TODO 数据库配置 生产
|
//NotifyUrl = "https://switch.deovo.com:8001/api/v1/wxpay/notice" // TODO 数据库配置 生产
|
||||||
//NotifyUrl = "https://dev.switch.deovo.com:8004/api/v1/wxpay/notice" // TODO 测试
|
//NotifyUrl = "https://dev.switch.deovo.com:8004/api/v1/wxpay/notice" // TODO 测试
|
||||||
|
@ -231,15 +232,30 @@ type (
|
||||||
FeeType string `xml:"fee_type,CDATA" json:"fee_type"`
|
FeeType string `xml:"fee_type,CDATA" json:"fee_type"`
|
||||||
CashFee uint `xml:"cash_fee,CDATA" json:"cash_fee"`
|
CashFee uint `xml:"cash_fee,CDATA" json:"cash_fee"`
|
||||||
CashFeeType string `xml:"cash_fee_type,CDATA" json:"cash_fee_type"`
|
CashFeeType string `xml:"cash_fee_type,CDATA" json:"cash_fee_type"`
|
||||||
CouponFee uint `xml:"coupon_fee,CDATA" json:"coupon_fee"`
|
|
||||||
CouponCount uint `xml:"coupon_count,CDATA" json:"coupon_count"`
|
CouponFee uint `xml:"coupon_fee,CDATA" json:"coupon_fee"`
|
||||||
CouponType0 uint `xml:"coupon_type_0,CDATA" json:"coupon_type"`
|
CouponCount uint `xml:"coupon_count,CDATA" json:"coupon_count"`
|
||||||
CouponId0 string `xml:"coupon_id_0,CDATA" json:"coupon_id"`
|
CouponType0 uint `xml:"coupon_type_0,CDATA" json:"coupon_type"`
|
||||||
CouponFee0 uint `xml:"coupon_fee_0,CDATA" json:"coupon_fee0"`
|
CouponId0 string `xml:"coupon_id_0,CDATA" json:"coupon_id"`
|
||||||
TransactionId string `xml:"transaction_id,CDATA" json:"transaction_id"`
|
CouponFee0 uint `xml:"coupon_fee_0,CDATA" json:"coupon_fee0"`
|
||||||
OutTradeNo string `xml:"out_trade_no,CDATA" json:"out_trade_no"`
|
//CouponCount string `json:"coupon_count"`
|
||||||
Attach string `xml:"attach,CDATA" json:"attach"`
|
//CouponFee string `json:"coupon_fee"`
|
||||||
TimeEnd string `xml:"time_end,CDATA" json:"time_end"`
|
//CouponFee0 string `json:"coupon_fee_0"`
|
||||||
|
//CouponId0 string `json:"coupon_id_0"`
|
||||||
|
|
||||||
|
CouponFee1 uint `xml:"coupon_fee_1,CDATA" json:"coupon_fee_1"`
|
||||||
|
CouponId1 string `xml:"coupon_id_1,CDATA" json:"coupon_id_1"`
|
||||||
|
CouponFee2 uint `xml:"coupon_fee_2,CDATA" json:"coupon_fee_2"`
|
||||||
|
CouponId2 string `xml:"coupon_id_2,CDATA" json:"coupon_id_2"`
|
||||||
|
CouponFee3 uint `xml:"coupon_fee_3,CDATA" json:"coupon_fee_3"`
|
||||||
|
CouponId3 string `xml:"coupon_id_3,CDATA" json:"coupon_id_3"`
|
||||||
|
CouponFee4 uint `xml:"coupon_fee_4,CDATA" json:"coupon_fee_4"`
|
||||||
|
CouponId4 string `xml:"coupon_id_4,CDATA" json:"coupon_id_4"`
|
||||||
|
|
||||||
|
TransactionId string `xml:"transaction_id,CDATA" json:"transaction_id"`
|
||||||
|
OutTradeNo string `xml:"out_trade_no,CDATA" json:"out_trade_no"`
|
||||||
|
Attach string `xml:"attach,CDATA" json:"attach"`
|
||||||
|
TimeEnd string `xml:"time_end,CDATA" json:"time_end"`
|
||||||
}
|
}
|
||||||
|
|
||||||
WechatNotify struct {
|
WechatNotify struct {
|
||||||
|
@ -263,6 +279,50 @@ type (
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type T struct {
|
||||||
|
CouponFee0 string `json:"coupon_fee_0"`
|
||||||
|
CouponFee1 string `json:"coupon_fee_1"`
|
||||||
|
CouponFee2 string `json:"coupon_fee_2"`
|
||||||
|
CouponFee3 string `json:"coupon_fee_3"`
|
||||||
|
CouponId0 string `json:"coupon_id_0"`
|
||||||
|
CouponId1 string `json:"coupon_id_1"`
|
||||||
|
CouponId2 string `json:"coupon_id_2"`
|
||||||
|
CouponId3 string `json:"coupon_id_3"`
|
||||||
|
}
|
||||||
|
|
||||||
|
//type T struct {
|
||||||
|
// Xml struct {
|
||||||
|
// Appid string `json:"appid"`
|
||||||
|
// Attach string `json:"attach"`
|
||||||
|
// BankType string `json:"bank_type"`
|
||||||
|
// CashFee string `json:"cash_fee"`
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// CouponCount string `json:"coupon_count"`
|
||||||
|
// CouponFee string `json:"coupon_fee"`
|
||||||
|
// CouponFee0 string `json:"coupon_fee_0"`
|
||||||
|
// CouponFee1 string `json:"coupon_fee_1"`
|
||||||
|
// CouponId0 string `json:"coupon_id_0"`
|
||||||
|
// CouponId1 string `json:"coupon_id_1"`
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// DeviceInfo string `json:"device_info"`
|
||||||
|
// FeeType string `json:"fee_type"`
|
||||||
|
// IsSubscribe string `json:"is_subscribe"`
|
||||||
|
// MchId string `json:"mch_id"`
|
||||||
|
// NonceStr string `json:"nonce_str"`
|
||||||
|
// Openid string `json:"openid"`
|
||||||
|
// OutTradeNo string `json:"out_trade_no"`
|
||||||
|
// ResultCode string `json:"result_code"`
|
||||||
|
// ReturnCode string `json:"return_code"`
|
||||||
|
// Sign string `json:"sign"`
|
||||||
|
// TimeEnd string `json:"time_end"`
|
||||||
|
// TotalFee string `json:"total_fee"`
|
||||||
|
// TradeType string `json:"trade_type"`
|
||||||
|
// TransactionId string `json:"transaction_id"`
|
||||||
|
// } `json:"xml"`
|
||||||
|
//}
|
||||||
|
|
||||||
////app 微信支付
|
////app 微信支付
|
||||||
////totalFee 单位是分
|
////totalFee 单位是分
|
||||||
//func AppPay(totalFee int, openId string) (*AppWxPayRet, string, error) {
|
//func AppPay(totalFee int, openId string) (*AppWxPayRet, string, error) {
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -215,62 +215,6 @@ func (qs ShoppingCartQuerySet) DeletedAtNe(deletedAt time.Time) ShoppingCartQuer
|
||||||
return qs.w(qs.db.Where("deleted_at != ?", deletedAt))
|
return qs.w(qs.db.Where("deleted_at != ?", deletedAt))
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeliveryTypeEq is an autogenerated method
|
|
||||||
// nolint: dupl
|
|
||||||
func (qs ShoppingCartQuerySet) DeliveryTypeEq(deliveryType uint8) ShoppingCartQuerySet {
|
|
||||||
return qs.w(qs.db.Where("delivery_type = ?", deliveryType))
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeliveryTypeGt is an autogenerated method
|
|
||||||
// nolint: dupl
|
|
||||||
func (qs ShoppingCartQuerySet) DeliveryTypeGt(deliveryType uint8) ShoppingCartQuerySet {
|
|
||||||
return qs.w(qs.db.Where("delivery_type > ?", deliveryType))
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeliveryTypeGte is an autogenerated method
|
|
||||||
// nolint: dupl
|
|
||||||
func (qs ShoppingCartQuerySet) DeliveryTypeGte(deliveryType uint8) ShoppingCartQuerySet {
|
|
||||||
return qs.w(qs.db.Where("delivery_type >= ?", deliveryType))
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeliveryTypeIn is an autogenerated method
|
|
||||||
// nolint: dupl
|
|
||||||
func (qs ShoppingCartQuerySet) DeliveryTypeIn(deliveryType ...uint8) ShoppingCartQuerySet {
|
|
||||||
if len(deliveryType) == 0 {
|
|
||||||
qs.db.AddError(errors.New("must at least pass one deliveryType in DeliveryTypeIn"))
|
|
||||||
return qs.w(qs.db)
|
|
||||||
}
|
|
||||||
return qs.w(qs.db.Where("delivery_type IN (?)", deliveryType))
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeliveryTypeLt is an autogenerated method
|
|
||||||
// nolint: dupl
|
|
||||||
func (qs ShoppingCartQuerySet) DeliveryTypeLt(deliveryType uint8) ShoppingCartQuerySet {
|
|
||||||
return qs.w(qs.db.Where("delivery_type < ?", deliveryType))
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeliveryTypeLte is an autogenerated method
|
|
||||||
// nolint: dupl
|
|
||||||
func (qs ShoppingCartQuerySet) DeliveryTypeLte(deliveryType uint8) ShoppingCartQuerySet {
|
|
||||||
return qs.w(qs.db.Where("delivery_type <= ?", deliveryType))
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeliveryTypeNe is an autogenerated method
|
|
||||||
// nolint: dupl
|
|
||||||
func (qs ShoppingCartQuerySet) DeliveryTypeNe(deliveryType uint8) ShoppingCartQuerySet {
|
|
||||||
return qs.w(qs.db.Where("delivery_type != ?", deliveryType))
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeliveryTypeNotIn is an autogenerated method
|
|
||||||
// nolint: dupl
|
|
||||||
func (qs ShoppingCartQuerySet) DeliveryTypeNotIn(deliveryType ...uint8) ShoppingCartQuerySet {
|
|
||||||
if len(deliveryType) == 0 {
|
|
||||||
qs.db.AddError(errors.New("must at least pass one deliveryType in DeliveryTypeNotIn"))
|
|
||||||
return qs.w(qs.db)
|
|
||||||
}
|
|
||||||
return qs.w(qs.db.Where("delivery_type NOT IN (?)", deliveryType))
|
|
||||||
}
|
|
||||||
|
|
||||||
// GameCardIdEq is an autogenerated method
|
// GameCardIdEq is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (qs ShoppingCartQuerySet) GameCardIdEq(gameCardId uint64) ShoppingCartQuerySet {
|
func (qs ShoppingCartQuerySet) GameCardIdEq(gameCardId uint64) ShoppingCartQuerySet {
|
||||||
|
@ -431,12 +375,6 @@ func (qs ShoppingCartQuerySet) OrderAscByDeletedAt() ShoppingCartQuerySet {
|
||||||
return qs.w(qs.db.Order("deleted_at ASC"))
|
return qs.w(qs.db.Order("deleted_at ASC"))
|
||||||
}
|
}
|
||||||
|
|
||||||
// OrderAscByDeliveryType is an autogenerated method
|
|
||||||
// nolint: dupl
|
|
||||||
func (qs ShoppingCartQuerySet) OrderAscByDeliveryType() ShoppingCartQuerySet {
|
|
||||||
return qs.w(qs.db.Order("delivery_type ASC"))
|
|
||||||
}
|
|
||||||
|
|
||||||
// OrderAscByGameCardId is an autogenerated method
|
// OrderAscByGameCardId is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (qs ShoppingCartQuerySet) OrderAscByGameCardId() ShoppingCartQuerySet {
|
func (qs ShoppingCartQuerySet) OrderAscByGameCardId() ShoppingCartQuerySet {
|
||||||
|
@ -479,12 +417,6 @@ func (qs ShoppingCartQuerySet) OrderDescByDeletedAt() ShoppingCartQuerySet {
|
||||||
return qs.w(qs.db.Order("deleted_at DESC"))
|
return qs.w(qs.db.Order("deleted_at DESC"))
|
||||||
}
|
}
|
||||||
|
|
||||||
// OrderDescByDeliveryType is an autogenerated method
|
|
||||||
// nolint: dupl
|
|
||||||
func (qs ShoppingCartQuerySet) OrderDescByDeliveryType() ShoppingCartQuerySet {
|
|
||||||
return qs.w(qs.db.Order("delivery_type DESC"))
|
|
||||||
}
|
|
||||||
|
|
||||||
// OrderDescByGameCardId is an autogenerated method
|
// OrderDescByGameCardId is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (qs ShoppingCartQuerySet) OrderDescByGameCardId() ShoppingCartQuerySet {
|
func (qs ShoppingCartQuerySet) OrderDescByGameCardId() ShoppingCartQuerySet {
|
||||||
|
@ -622,13 +554,6 @@ func (u ShoppingCartUpdater) SetDeletedAt(deletedAt *time.Time) ShoppingCartUpda
|
||||||
return u
|
return u
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetDeliveryType is an autogenerated method
|
|
||||||
// nolint: dupl
|
|
||||||
func (u ShoppingCartUpdater) SetDeliveryType(deliveryType uint8) ShoppingCartUpdater {
|
|
||||||
u.fields[string(ShoppingCartDBSchema.DeliveryType)] = deliveryType
|
|
||||||
return u
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetGameCardId is an autogenerated method
|
// SetGameCardId is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (u ShoppingCartUpdater) SetGameCardId(gameCardId uint64) ShoppingCartUpdater {
|
func (u ShoppingCartUpdater) SetGameCardId(gameCardId uint64) ShoppingCartUpdater {
|
||||||
|
@ -685,38 +610,35 @@ func (f ShoppingCartDBSchemaField) String() string {
|
||||||
|
|
||||||
// ShoppingCartDBSchema stores db field names of ShoppingCart
|
// ShoppingCartDBSchema stores db field names of ShoppingCart
|
||||||
var ShoppingCartDBSchema = struct {
|
var ShoppingCartDBSchema = struct {
|
||||||
ID ShoppingCartDBSchemaField
|
ID ShoppingCartDBSchemaField
|
||||||
CreatedAt ShoppingCartDBSchemaField
|
CreatedAt ShoppingCartDBSchemaField
|
||||||
UpdatedAt ShoppingCartDBSchemaField
|
UpdatedAt ShoppingCartDBSchemaField
|
||||||
DeletedAt ShoppingCartDBSchemaField
|
DeletedAt ShoppingCartDBSchemaField
|
||||||
Uid ShoppingCartDBSchemaField
|
Uid ShoppingCartDBSchemaField
|
||||||
GameCardId ShoppingCartDBSchemaField
|
GameCardId ShoppingCartDBSchemaField
|
||||||
DeliveryType ShoppingCartDBSchemaField
|
Count ShoppingCartDBSchemaField
|
||||||
Count ShoppingCartDBSchemaField
|
|
||||||
}{
|
}{
|
||||||
|
|
||||||
ID: ShoppingCartDBSchemaField("id"),
|
ID: ShoppingCartDBSchemaField("id"),
|
||||||
CreatedAt: ShoppingCartDBSchemaField("created_at"),
|
CreatedAt: ShoppingCartDBSchemaField("created_at"),
|
||||||
UpdatedAt: ShoppingCartDBSchemaField("updated_at"),
|
UpdatedAt: ShoppingCartDBSchemaField("updated_at"),
|
||||||
DeletedAt: ShoppingCartDBSchemaField("deleted_at"),
|
DeletedAt: ShoppingCartDBSchemaField("deleted_at"),
|
||||||
Uid: ShoppingCartDBSchemaField("uid"),
|
Uid: ShoppingCartDBSchemaField("uid"),
|
||||||
GameCardId: ShoppingCartDBSchemaField("game_card_id"),
|
GameCardId: ShoppingCartDBSchemaField("game_card_id"),
|
||||||
DeliveryType: ShoppingCartDBSchemaField("delivery_type"),
|
Count: ShoppingCartDBSchemaField("count"),
|
||||||
Count: ShoppingCartDBSchemaField("count"),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update updates ShoppingCart fields by primary key
|
// Update updates ShoppingCart fields by primary key
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (o *ShoppingCart) Update(db *gorm.DB, fields ...ShoppingCartDBSchemaField) error {
|
func (o *ShoppingCart) Update(db *gorm.DB, fields ...ShoppingCartDBSchemaField) error {
|
||||||
dbNameToFieldName := map[string]interface{}{
|
dbNameToFieldName := map[string]interface{}{
|
||||||
"id": o.ID,
|
"id": o.ID,
|
||||||
"created_at": o.CreatedAt,
|
"created_at": o.CreatedAt,
|
||||||
"updated_at": o.UpdatedAt,
|
"updated_at": o.UpdatedAt,
|
||||||
"deleted_at": o.DeletedAt,
|
"deleted_at": o.DeletedAt,
|
||||||
"uid": o.Uid,
|
"uid": o.Uid,
|
||||||
"game_card_id": o.GameCardId,
|
"game_card_id": o.GameCardId,
|
||||||
"delivery_type": o.DeliveryType,
|
"count": o.Count,
|
||||||
"count": o.Count,
|
|
||||||
}
|
}
|
||||||
u := map[string]interface{}{}
|
u := map[string]interface{}{}
|
||||||
for _, f := range fields {
|
for _, f := range fields {
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -27,7 +27,7 @@ func InitDB() {
|
||||||
DB.DB().SetMaxIdleConns(500)
|
DB.DB().SetMaxIdleConns(500)
|
||||||
DB.DB().SetConnMaxLifetime(time.Second * 10)
|
DB.DB().SetConnMaxLifetime(time.Second * 10)
|
||||||
DB.LogMode(true)
|
DB.LogMode(true)
|
||||||
DB.SetLogger(DBLoggerWriter{})
|
//DB.SetLogger(DBLoggerWriter{})
|
||||||
DB.SingularTable(true)
|
DB.SingularTable(true)
|
||||||
if err := DB.DB().Ping(); err != nil {
|
if err := DB.DB().Ping(); err != nil {
|
||||||
fmt.Println("Ping Database Fail, error = ", err)
|
fmt.Println("Ping Database Fail, error = ", err)
|
||||||
|
|
|
@ -2,6 +2,7 @@ package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"github.com/codinl/go-logger"
|
"github.com/codinl/go-logger"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -25,7 +26,8 @@ type PayConfig struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
ConfigNamePay = "pay_config" // 支付配置
|
ConfigNamePay = "pay_config" // 支付配置
|
||||||
|
ConfigNameMember = "member_config" // 会员配置
|
||||||
)
|
)
|
||||||
|
|
||||||
func PayConfigInfo() (*PayConfig, error) {
|
func PayConfigInfo() (*PayConfig, error) {
|
||||||
|
@ -46,15 +48,54 @@ func PayConfigInfo() (*PayConfig, error) {
|
||||||
return payConfig, nil
|
return payConfig, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
type MemberConfig struct {
|
||||||
|
MemberLever uint32 `json:"member_lever"` // 会员等级
|
||||||
|
MemberFee uint32 `json:"member_fee"` // 会员费
|
||||||
|
MemberDeposit uint32 `json:"member_deposit"` // 押金
|
||||||
|
CardMax uint32 `json:"card_max"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func MemberConfigInfo() ([]MemberConfig, error) {
|
||||||
|
var memberConfigs []MemberConfig
|
||||||
|
var configAllocation Config
|
||||||
|
err := NewConfigQuerySet(DB).NameEq(ConfigNameMember).One(&configAllocation)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return memberConfigs, err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = json.Unmarshal([]byte(configAllocation.Value), &memberConfigs)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return memberConfigs, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return memberConfigs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetMemberConfig(level uint32) (*MemberConfig, error) {
|
||||||
|
if level == 3 {
|
||||||
|
level = 2
|
||||||
|
}
|
||||||
|
info, err := MemberConfigInfo()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for _, config := range info {
|
||||||
|
if config.MemberLever == level {
|
||||||
|
return &config, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, errors.New("level err")
|
||||||
|
}
|
||||||
|
|
||||||
//type ConfigInterface interface {
|
//type ConfigInterface interface {
|
||||||
// Encode() string
|
// Encode() string
|
||||||
//}
|
//}
|
||||||
//
|
|
||||||
//type CheckConfig struct {
|
//type CheckConfig struct {
|
||||||
// Check uint8 `json:"check"`
|
// Check uint8 `json:"check"`
|
||||||
//}
|
//}
|
||||||
//
|
|
||||||
//func (c *CheckConfig) Encode() string {
|
//func (c *CheckConfig) Encode() string {
|
||||||
// configBytes, err := json.Marshal(c)
|
// configBytes, err := json.Marshal(c)
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
|
|
38
model/config_test.go
Normal file
38
model/config_test.go
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMemberConfigInfo(t *testing.T) {
|
||||||
|
lever := []uint32{2, 4, 5}
|
||||||
|
list := make([]MemberConfig, 0)
|
||||||
|
cardCount := 0
|
||||||
|
|
||||||
|
for i, _ := range lever {
|
||||||
|
if lever[i] == 2 {
|
||||||
|
cardCount = 1
|
||||||
|
} else if lever[i] == 4 {
|
||||||
|
cardCount = 2
|
||||||
|
} else if lever[i] == 4 {
|
||||||
|
cardCount = 5
|
||||||
|
}
|
||||||
|
|
||||||
|
var config = MemberConfig{
|
||||||
|
MemberLever: lever[i],
|
||||||
|
MemberFee: lever[i],
|
||||||
|
MemberDeposit: lever[i],
|
||||||
|
CardMax: uint32(cardCount),
|
||||||
|
}
|
||||||
|
list = append(list, config)
|
||||||
|
}
|
||||||
|
|
||||||
|
bytes, err := json.Marshal(&list)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("err:", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("list:", string(bytes))
|
||||||
|
}
|
|
@ -50,6 +50,11 @@ func (*HomeCarousel) TableName() string {
|
||||||
return "home_carousel"
|
return "home_carousel"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type CardInfo struct {
|
||||||
|
GameCardId uint32 `json:"game_card_id"`
|
||||||
|
Count uint32 `json:"count"`
|
||||||
|
}
|
||||||
|
|
||||||
func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId uint32) ([]GameCard, uint32, error) {
|
func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId uint32) ([]GameCard, uint32, error) {
|
||||||
var (
|
var (
|
||||||
cards []GameCard = make([]GameCard, 0)
|
cards []GameCard = make([]GameCard, 0)
|
||||||
|
@ -166,6 +171,21 @@ func IsGameCardOnline(gameCardId uint32) (bool, error) {
|
||||||
return count == 1, nil
|
return count == 1, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func IsGameCardListOnline(gameCards []CardInfo) (bool, error) {
|
||||||
|
for _, v := range gameCards {
|
||||||
|
count, err := NewGameCardQuerySet(DB).IDEq(v.GameCardId).StatusEq(1).Count()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
if count < 1 {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
|
||||||
func IsGameCardHaveStoke(storeId, gameCardId uint32) (bool, error) {
|
func IsGameCardHaveStoke(storeId, gameCardId uint32) (bool, error) {
|
||||||
var stock GameCardGoodsStock
|
var stock GameCardGoodsStock
|
||||||
err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).GameCardIdEq(uint64(gameCardId)).One(&stock)
|
err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).GameCardIdEq(uint64(gameCardId)).One(&stock)
|
||||||
|
|
|
@ -95,11 +95,17 @@ func InitTestDB() {
|
||||||
&UserRedeemCode{},
|
&UserRedeemCode{},
|
||||||
&DepositRefundRecord{},
|
&DepositRefundRecord{},
|
||||||
&GroupSendMessageTemplate{},
|
&GroupSendMessageTemplate{},
|
||||||
|
|
||||||
&Goods{},
|
&Goods{},
|
||||||
&GoodsOrder{},
|
&GoodsOrder{},
|
||||||
&UserVm{},
|
&UserVm{},
|
||||||
&UserVmRecord{},
|
&UserVmRecord{},
|
||||||
|
|
||||||
|
&OrderCard{},
|
||||||
|
&UserRentCard{},
|
||||||
|
&UserConsumeRecord{},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -132,7 +138,8 @@ func InitDBProd() {
|
||||||
DBProd.DB().SetMaxOpenConns(1000)
|
DBProd.DB().SetMaxOpenConns(1000)
|
||||||
DBProd.DB().SetMaxIdleConns(500)
|
DBProd.DB().SetMaxIdleConns(500)
|
||||||
DBProd.DB().SetConnMaxLifetime(time.Second * 10)
|
DBProd.DB().SetConnMaxLifetime(time.Second * 10)
|
||||||
DBProd.LogMode(true)
|
//DBProd.LogMode(true)
|
||||||
|
DBProd.LogMode(false)
|
||||||
DBProd.SingularTable(true)
|
DBProd.SingularTable(true)
|
||||||
DBProd.AutoMigrate(
|
DBProd.AutoMigrate(
|
||||||
&RedeemCode{},
|
&RedeemCode{},
|
||||||
|
@ -311,6 +318,7 @@ func TestGenShareCode(t *testing.T) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 用户绑定门店
|
||||||
func TestUserBundleFirstOrderStore(t *testing.T) {
|
func TestUserBundleFirstOrderStore(t *testing.T) {
|
||||||
UserBundleFirstOrderStore()
|
UserBundleFirstOrderStore()
|
||||||
}
|
}
|
||||||
|
@ -553,6 +561,7 @@ func MergingGameCards() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func TestGoodsAdd(t *testing.T) {
|
func TestGoodsAdd(t *testing.T) {
|
||||||
GoodsAdd()
|
GoodsAdd()
|
||||||
}
|
}
|
||||||
|
@ -586,3 +595,303 @@ func GoodsAdd() {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func UpdateUserName() {
|
||||||
|
InitDBProd()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMemberUserList(t *testing.T) {
|
||||||
|
MemberUserList()
|
||||||
|
}
|
||||||
|
|
||||||
|
func MemberUserList() {
|
||||||
|
InitDBProd()
|
||||||
|
var users []User
|
||||||
|
err := NewUserQuerySet(DBProd).MemberLevelEq(2).OrderAscByID().All(&users)
|
||||||
|
//err := NewUserQuerySet(DBProd).MemberLevelNe(2).OrderAscByID().All(&users)
|
||||||
|
//err := NewUserQuerySet(DBProd).StoreTypeEq(1).OrderAscByID().All(&users)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("users err:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
endTime, _ := time.Parse("2006-01-02", "2022-02-13")
|
||||||
|
startTime, _ := time.Parse("2006-01-02", "2021-07-30")
|
||||||
|
|
||||||
|
for _, user := range users {
|
||||||
|
count, err := NewUserInviteQuerySet(DBProd).ToUidEq(user.Uid).MemberTypeEq(2).MemberOpenTimeGt(startTime).MemberOpenTimeLt(endTime).Count()
|
||||||
|
//count, err := NewUserInviteQuerySet(DBProd).ToUidEq(user.Uid).MemberTypeEq(2).MemberOpenTimeGt(startTime).MemberOpenTimeLt(endTime).Count()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("err:", err)
|
||||||
|
}
|
||||||
|
if count == 0 {
|
||||||
|
fmt.Println("user :", user.Uid)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestOpenMemberTimeUserList(t *testing.T) {
|
||||||
|
OpenMemberTimeUserList()
|
||||||
|
}
|
||||||
|
|
||||||
|
func OpenMemberTimeUserList() {
|
||||||
|
InitDBProd()
|
||||||
|
var users []User
|
||||||
|
err := NewUserQuerySet(DBProd).MemberLevelEq(2).All(&users)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("err:", err)
|
||||||
|
}
|
||||||
|
userMap := make(map[uint32]User, 0)
|
||||||
|
for i, _ := range users {
|
||||||
|
userMap[users[i].Uid] = users[i]
|
||||||
|
}
|
||||||
|
|
||||||
|
var userInvites []UserInvite
|
||||||
|
err = NewUserInviteQuerySet(DBProd).MemberTypeEq(2).All(&userInvites)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("err:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, _ := range userInvites {
|
||||||
|
user, ok := userMap[userInvites[i].ToUid]
|
||||||
|
if ok {
|
||||||
|
if user.OpenMemberTime.IsZero() {
|
||||||
|
fmt.Println("", user.OpenMemberTime, user.Uid, user.MemberLevel)
|
||||||
|
fmt.Println("", userInvites[i].MemberOpenTime, userInvites[i].MemberType, userInvites[i].ToUid)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncUserRentCard(t *testing.T) {
|
||||||
|
SyncUserRentCard()
|
||||||
|
}
|
||||||
|
|
||||||
|
func SyncUserRentCard() {
|
||||||
|
InitDBProd()
|
||||||
|
var users []User
|
||||||
|
err := NewUserQuerySet(DBProd).MemberLevelIn(2, 3).All(&users)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, user := range users {
|
||||||
|
var orderCards []OrderCard
|
||||||
|
qs := NewOrderCardQuerySet(DBProd).UidEq(user.Uid).CardStatusIn(1, 2, 3).PayStatusEq(2)
|
||||||
|
qs.All(&orderCards)
|
||||||
|
count, err := qs.Count()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("err:", err)
|
||||||
|
}
|
||||||
|
if count > 1 {
|
||||||
|
//if orderCards[0].CardStatus > 1 &&orderCards[1].CardStatus >1{
|
||||||
|
// continue
|
||||||
|
//}
|
||||||
|
fmt.Println("订单 count: uid:", count, user.Uid, orderCards[0].CardStatus, orderCards[1].CardStatus)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//for _, user := range users {
|
||||||
|
// fmt.Println("user:", user.MemberLevel, user.MemberExpire, user.OpenMemberTime)
|
||||||
|
// userRentCard := &UserRentCard{
|
||||||
|
// Uid: user.Uid,
|
||||||
|
// MemberLevel: user.MemberLevel,
|
||||||
|
// LevelRentCount: 1,
|
||||||
|
// HaveRentCount: 0,
|
||||||
|
// CanRentCount: 1,
|
||||||
|
// Status: 0,
|
||||||
|
// }
|
||||||
|
// err = DBProd.Create(userRentCard).Error
|
||||||
|
// if err != nil {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncUserOpenMemberTime(t *testing.T) {
|
||||||
|
SyncUserOpenMemberTime()
|
||||||
|
}
|
||||||
|
|
||||||
|
func SyncUserOpenMemberTime() {
|
||||||
|
InitDBProd()
|
||||||
|
var userInvites []UserInvite
|
||||||
|
err := NewUserInviteQuerySet(DBProd).MemberTypeEq(2).All(&userInvites)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
count := 0
|
||||||
|
for _, userInvite := range userInvites {
|
||||||
|
fmt.Println("user:", userInvite.MemberLevel, userInvite.MemberOpenTime)
|
||||||
|
//err = NewUserInviteQuerySet(DBProd).IDEq(userInvite.ID).GetUpdater().SetMemberLevel(2).Update()
|
||||||
|
//if err != nil {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
//}
|
||||||
|
|
||||||
|
err = NewUserQuerySet(DBProd).UidEq(userInvite.ToUid).GetUpdater().
|
||||||
|
SetOpenMemberTime(userInvite.MemberOpenTime).Update()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("count:", count)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncUserOrder(t *testing.T) {
|
||||||
|
SyncUserOrder()
|
||||||
|
}
|
||||||
|
|
||||||
|
func SyncUserOrder() {
|
||||||
|
InitDBProd()
|
||||||
|
var orders []Order
|
||||||
|
sql := fmt.Sprintf("SELECT * FROM `order` WHERE pay_status = 2 AND card_status IN (1,2,3);")
|
||||||
|
err := DBProd.Raw(sql).Scan(&orders).Error
|
||||||
|
//err := NewOrderQuerySet(DBProd).PayStatusEq(2).CardStatusIn([]uint8{1, 2, 3}...).All(&orders)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Println("orders:", len(orders))
|
||||||
|
//for _, order := range orders {
|
||||||
|
// //fmt.Println("order:", order.PayStatus, order.GameCardGoodsId)
|
||||||
|
// //var gameCardGoods GameCardGoods
|
||||||
|
// //err = NewGameCardGoodsQuerySet(DBProd).IDEq(uint32(order.GameCardGoodsId)).One(&gameCardGoods)
|
||||||
|
// //if err != nil {
|
||||||
|
// // logger.Error("err:", err)
|
||||||
|
// // //continue
|
||||||
|
// //}
|
||||||
|
// //orderCard := OrderCard{
|
||||||
|
// // OrderId: order.ID,
|
||||||
|
// // Uid: uint32(order.Uid),
|
||||||
|
// // GameCardId: uint32(order.GameCardId),
|
||||||
|
// // GameCardGoodsId: uint32(order.GameCardGoodsId),
|
||||||
|
// // StoreId: uint32(order.StoreId),
|
||||||
|
// // CardStatus: uint32(order.CardStatus),
|
||||||
|
// // DeliveryTime: order.DeliveryTime,
|
||||||
|
// // ReceiptTime: order.ReceiptTime,
|
||||||
|
// // DeliveryType: order.DeliveryType,
|
||||||
|
// // SerialNumber: order.GameCardSerialNumber,
|
||||||
|
// // PayStatus: order.PayStatus,
|
||||||
|
// // RevertStoreId: order.RevertStoreId,
|
||||||
|
// // RevertTime: order.RevertTime,
|
||||||
|
// // RevertExpressCompany: order.RevertExpressCompany,
|
||||||
|
// // RevertExpressCompanyNo: order.RevertExpressCompanyNo,
|
||||||
|
// // RevertExpressNo: order.RevertExpressNo,
|
||||||
|
// // RevertExpressDuration: order.RevertExpressDuration,
|
||||||
|
// //
|
||||||
|
// // //Postage: order.Postage,
|
||||||
|
// // //ExpressCompany: order.ExpressCompany,
|
||||||
|
// // //ExpressCompanyNo: order.ExpressCompanyNo,
|
||||||
|
// // //ExpressNo: order.ExpressNo,
|
||||||
|
// // //GamePrice: 0,
|
||||||
|
// // //GameCoverImg: "",
|
||||||
|
// // //Order: nil,
|
||||||
|
// //}
|
||||||
|
// //fmt.Println("order:", order.ID, order.PayStatus, order.CardStatus, order.Uid, order.GameCardId)
|
||||||
|
// //err = DBProd.Create(&orderCard).Error
|
||||||
|
// //if err != nil {
|
||||||
|
// // logger.Error("err:", err)
|
||||||
|
// //}
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncUserRent(t *testing.T) {
|
||||||
|
SyncUserRent()
|
||||||
|
}
|
||||||
|
|
||||||
|
func SyncUserRent() {
|
||||||
|
InitDBProd()
|
||||||
|
var users []User
|
||||||
|
err := NewUserQuerySet(DBProd).MemberLevelIn(2, 3).All(&users)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
//Order{}
|
||||||
|
for _, user := range users {
|
||||||
|
if user.Uid == 34021861 || user.Uid == 81309358 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
count, err := NewUserRentCardQuerySet(DBProd).UidEq(user.Uid).CanRentCountEq(1).HaveRentCountEq(0).Count()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("err:", err)
|
||||||
|
}
|
||||||
|
if count > 0 {
|
||||||
|
orderCount, err := NewOrderCardQuerySet(DBProd).UidEq(user.Uid).CardStatusIn(1, 2, 3).PayStatusEq(2).Count()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("err:", err)
|
||||||
|
}
|
||||||
|
if orderCount == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
fmt.Println("订单 count: uid:", orderCount, user.Uid)
|
||||||
|
|
||||||
|
//_, err = NewUserRentCardQuerySet(DBProd).UidEq(user.Uid).GetUpdater().SetCanRentCount(0).
|
||||||
|
// SetHaveRentCount(1).UpdateNum()
|
||||||
|
//if err != nil {
|
||||||
|
// fmt.Println("err:", err)
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestOrderCancelId(t *testing.T) {
|
||||||
|
//OrderCancelId()
|
||||||
|
}
|
||||||
|
|
||||||
|
//func OrderCancelId() {
|
||||||
|
// ids := []uint32{8288, 8265}
|
||||||
|
// for _, id := range ids {
|
||||||
|
// //OrderCancel(id)
|
||||||
|
// controller.OrderCancelBy(id)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
|
||||||
|
//func OrderCancel(id uint32) {
|
||||||
|
// //InitDBProd()
|
||||||
|
// //DB = DBProd
|
||||||
|
// var order Order
|
||||||
|
// err := NewOrderQuerySet(DB).IDEq(id).One(&order)
|
||||||
|
// if err != nil {
|
||||||
|
// fmt.Println("err:", err)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// outTradeNo, err := GetWxPayExpressFeeRefundRecord(order.ID)
|
||||||
|
// if err != nil {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// orderSn := GetOrderSn()
|
||||||
|
// err = UserOpenMemberRecord{Uid: uint32(order.Uid), OpenNo: orderSn, OrderId: order.ID, OrderType: 2}.Insert()
|
||||||
|
// if err != nil {
|
||||||
|
// logger.Error(errors.New("WebPay err"))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// orderRefund := wxpay.OrderRefund{
|
||||||
|
// OutTradeNo: outTradeNo,
|
||||||
|
// OutRefundNo: orderSn,
|
||||||
|
// NotifyUrl: "",
|
||||||
|
// Amount: wxpay.OrderRefundAmount{
|
||||||
|
// Refund: order.PayPrice,
|
||||||
|
// Total: order.PayPrice,
|
||||||
|
// Currency: "CNY",
|
||||||
|
// },
|
||||||
|
// }
|
||||||
|
// bytes, _ := json.Marshal(order)
|
||||||
|
// fmt.Println("订单取消:", string(bytes))
|
||||||
|
// orderRefundJson, _ := json.Marshal(&orderRefund)
|
||||||
|
// fmt.Println("订单取消 orderRefundJson:", string(orderRefundJson))
|
||||||
|
// //err = wxpay.WxPayOrderRefund(orderRefund)
|
||||||
|
// err = wxpay.TransactionOrderRefund(orderRefund)
|
||||||
|
// if err != nil {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
672
model/order.go
672
model/order.go
|
@ -1,11 +1,12 @@
|
||||||
package model
|
package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/codinl/go-logger"
|
"github.com/codinl/go-logger"
|
||||||
|
"github.com/jinzhu/gorm"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"qiniupkg.com/x/log.v7"
|
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -35,7 +36,8 @@ type Order struct {
|
||||||
Uid uint64 `json:"uid" gorm:"index"`
|
Uid uint64 `json:"uid" gorm:"index"`
|
||||||
GameCardId uint64 `json:"game_card_id" gorm:"index"` // 游戏id
|
GameCardId uint64 `json:"game_card_id" gorm:"index"` // 游戏id
|
||||||
GameCardGoodsId uint64 `json:"game_card_goods_id" gorm:"index"` // 游戏卡id
|
GameCardGoodsId uint64 `json:"game_card_goods_id" gorm:"index"` // 游戏卡id
|
||||||
StoreId uint64 `json:"store_id"` // 门店id
|
GameCardSerialNumber string `json:"game_card_serial_number" gorm:"index"` // 游戏卡编号
|
||||||
|
StoreId uint64 `json:"store_id" gorm:"index"` // 门店id
|
||||||
UserAddressId uint64 `json:"user_address_id"` // 地址id
|
UserAddressId uint64 `json:"user_address_id"` // 地址id
|
||||||
DeliveryType uint8 `json:"delivery_type"` // 取货类型 1-门店自取 2-快递
|
DeliveryType uint8 `json:"delivery_type"` // 取货类型 1-门店自取 2-快递
|
||||||
Count uint32 `json:"count"` // 数量
|
Count uint32 `json:"count"` // 数量
|
||||||
|
@ -60,6 +62,43 @@ type Order struct {
|
||||||
RevertExpressDuration uint64 `json:"revert_express_duration"` // 归还物流时长
|
RevertExpressDuration uint64 `json:"revert_express_duration"` // 归还物流时长
|
||||||
OutTradeNo string `json:"out_trade_no"` // 支付订单
|
OutTradeNo string `json:"out_trade_no"` // 支付订单
|
||||||
Mchid string `json:"mchid"` // 商户
|
Mchid string `json:"mchid"` // 商户
|
||||||
|
|
||||||
|
OrderCardId uint32 `json:"order_card_id" gorm:"-"` //
|
||||||
|
}
|
||||||
|
|
||||||
|
// gen:qs
|
||||||
|
type OrderCard struct {
|
||||||
|
Model
|
||||||
|
OrderId uint32 `json:"order_id" gorm:"index"`
|
||||||
|
Uid uint32 `json:"uid" gorm:"index"`
|
||||||
|
GameCardId uint32 `json:"game_card_id" gorm:"index"` // 游戏id
|
||||||
|
GameCardGoodsId uint32 `json:"game_card_goods_id" gorm:"index"` // 游戏卡id
|
||||||
|
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
|
||||||
|
CardStatus uint32 `json:"card_status"` // 1-待取货中 2-游玩中 3-归还中 4-已完成 5-已取消
|
||||||
|
DeliveryTime time.Time `json:"delivery_time"` // 发货时间
|
||||||
|
ReceiptTime time.Time `json:"receipt_time"` // 收货时间
|
||||||
|
DeliveryType uint8 `json:"delivery_type"` // 取货类型 1-门店自取 2-快递
|
||||||
|
SerialNumber string `json:"serial_number" gorm:"index"` // 编号
|
||||||
|
PayStatus uint8 `json:"pay_status"` // 支付状态 1-未支付 2-已支付
|
||||||
|
|
||||||
|
RevertStoreId uint64 `json:"revert_store_id"` // 归还门店id
|
||||||
|
RevertTime time.Time `json:"revert_time"` // 归还时间
|
||||||
|
RevertExpressCompany string `json:"revert_express_company"` // 归还物流公司
|
||||||
|
RevertExpressCompanyNo string `json:"revert_express_company_no"` // 归还物流公司编号
|
||||||
|
RevertExpressNo string `json:"revert_express_no"` // 归还物流单号
|
||||||
|
RevertExpressDuration uint64 `json:"revert_express_duration"` // 归还物流时长
|
||||||
|
//Status uint8 `json:"status" gorm:"index"` // 1-待领取 2-游玩中 3-已归还 4-未领取
|
||||||
|
|
||||||
|
Postage uint32 `json:"postage" gorm:"-"` // 邮费
|
||||||
|
ExpressCompany string `json:"express_company" gorm:"-"` // 物流公司
|
||||||
|
ExpressCompanyNo string `json:"express_company_no" gorm:"-"` // 物流公司编号
|
||||||
|
ExpressNo string `json:"express_no" gorm:"-"` // 物流单号
|
||||||
|
|
||||||
|
GameName string `json:"name" gorm:"-"` // 名称
|
||||||
|
GamePrice uint32 `json:"price" gorm:"-"` // 价格
|
||||||
|
GameCoverImg string `json:"cover_img" gorm:"-"` // 封面
|
||||||
|
Order *Order `json:"order" gorm:"-"` // 订单
|
||||||
|
//PickupCode string `json:"pickup_code"` // 取货码
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*Order) TableName() string {
|
func (*Order) TableName() string {
|
||||||
|
@ -68,182 +107,320 @@ func (*Order) TableName() string {
|
||||||
|
|
||||||
func (m *Order) ToInfo(card *GameCard) OrderInfo {
|
func (m *Order) ToInfo(card *GameCard) OrderInfo {
|
||||||
return OrderInfo{
|
return OrderInfo{
|
||||||
Order: *m,
|
Order: *m,
|
||||||
GameName: card.Name,
|
|
||||||
GamePrice: card.Price,
|
|
||||||
GameCoverImg: card.CoverImg,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type OrderInfo struct {
|
type OrderInfo struct {
|
||||||
Order
|
Order
|
||||||
GameName string `json:"name" gorm:"index"` // 名称
|
Cards []OrderCard
|
||||||
GamePrice uint32 `json:"price" gorm:"index"` // 价格
|
|
||||||
GameCoverImg string `json:"cover_img"` // 封面
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetOrderList(uid uint64, page, pageSize int) ([]OrderInfo, uint32, error) {
|
func OrderCardListSetGameInfo(list []OrderCard) []OrderCard {
|
||||||
var (
|
//GameCardMap
|
||||||
orders []Order
|
ids := make([]uint32, 0, len(list))
|
||||||
totalPage uint32
|
orderIds := make([]uint32, 0, len(list))
|
||||||
orderInfos = make([]OrderInfo, 0, pageSize)
|
for i, _ := range list {
|
||||||
)
|
ids = append(ids, list[i].GameCardId)
|
||||||
page -= 1
|
orderIds = append(orderIds, list[i].OrderId)
|
||||||
if page < 0 {
|
}
|
||||||
page = 0
|
if len(ids) == 0 || len(orderIds) == 0 {
|
||||||
|
return list
|
||||||
}
|
}
|
||||||
|
|
||||||
//oq := NewOrderQuerySet(DB).UidEq(uid).OrderDescByCreatedAt().PayStatusEq(PayStatusPaid)
|
orderMap, err := OrderMap(orderIds)
|
||||||
oq := NewOrderQuerySet(DB).UidEq(uid).OrderDescByCreatedAt()
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return list
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("ids:", ids)
|
||||||
|
cardMap, err := GameCardMap(ids)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return list
|
||||||
|
}
|
||||||
|
bytes, _ := json.Marshal(&cardMap)
|
||||||
|
orderMapbytes, _ := json.Marshal(&orderMap)
|
||||||
|
fmt.Println("cardMap:", string(bytes))
|
||||||
|
fmt.Println("orderMap:", string(orderMapbytes))
|
||||||
|
for i, _ := range list {
|
||||||
|
fmt.Println("list[i].GameCardId", list[i].GameCardId)
|
||||||
|
fmt.Println("list[i].OrderId", list[i].OrderId)
|
||||||
|
gameCard, ok1 := cardMap[list[i].GameCardId]
|
||||||
|
order, ok2 := orderMap[list[i].OrderId]
|
||||||
|
fmt.Printf("gameCard1:%#v \n", gameCard)
|
||||||
|
if ok1 && ok2 {
|
||||||
|
if order.CardStatus == 2|| order.CardStatus == 3 {
|
||||||
|
order.CardStatus = 4
|
||||||
|
}
|
||||||
|
fmt.Printf("gameCard2:%#v \n", gameCard)
|
||||||
|
list[i].GameName = gameCard.Name
|
||||||
|
list[i].GameCoverImg = gameCard.CoverImg
|
||||||
|
list[i].GamePrice = gameCard.Price
|
||||||
|
list[i].Order = &order
|
||||||
|
}
|
||||||
|
}
|
||||||
|
listbytes, _ := json.Marshal(&list)
|
||||||
|
fmt.Println("listbytes:", string(listbytes))
|
||||||
|
return list
|
||||||
|
}
|
||||||
|
|
||||||
|
func GameCardMap(ids []uint32) (map[uint32]GameCard, error) {
|
||||||
|
cardMap := make(map[uint32]GameCard, 0)
|
||||||
|
var cards []GameCard
|
||||||
|
err := NewGameCardQuerySet(DB).IDIn(ids...).All(&cards)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return cardMap, err
|
||||||
|
}
|
||||||
|
if len(cards) == 0 {
|
||||||
|
return cardMap, nil
|
||||||
|
}
|
||||||
|
for i, _ := range cards {
|
||||||
|
cardMap[cards[i].ID] = cards[i]
|
||||||
|
}
|
||||||
|
return cardMap, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func OrderMap(ids []uint32) (map[uint32]Order, error) {
|
||||||
|
cardMap := make(map[uint32]Order, 0)
|
||||||
|
var cards []Order
|
||||||
|
err := NewOrderQuerySet(DB).IDIn(ids...).All(&cards)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return cardMap, err
|
||||||
|
}
|
||||||
|
if len(cards) == 0 {
|
||||||
|
return cardMap, nil
|
||||||
|
}
|
||||||
|
for i, _ := range cards {
|
||||||
|
cardMap[cards[i].ID] = cards[i]
|
||||||
|
}
|
||||||
|
return cardMap, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type OrderListReq struct {
|
||||||
|
Page int `json:"page"`
|
||||||
|
PageSize int `json:"page_size"`
|
||||||
|
OrderType uint32 `json:"order_type"` // 1-全部 2-进行中 3-已完成
|
||||||
|
Uid uint32 `json:"uid"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *OrderListReq) GetOrderCardList() ([]OrderCard, uint32, error) {
|
||||||
|
var (
|
||||||
|
orderCards []OrderCard
|
||||||
|
totalPage uint32
|
||||||
|
//orderInfos = make([]OrderInfo, 0, pageSize)
|
||||||
|
)
|
||||||
|
m.Page -= 1
|
||||||
|
if m.Page < 0 {
|
||||||
|
m.Page = 0
|
||||||
|
}
|
||||||
|
if m.PageSize == 0 {
|
||||||
|
m.PageSize = 10
|
||||||
|
}
|
||||||
|
oq := NewOrderCardQuerySet(DB).PayStatusEq(PayStatusPaid).UidEq(m.Uid)
|
||||||
|
if m.OrderType == 2 {
|
||||||
|
oq = oq.CardStatusIn([]uint32{1, 2, 3}...)
|
||||||
|
}
|
||||||
|
if m.OrderType == 3 {
|
||||||
|
oq = oq.CardStatusEq(4)
|
||||||
|
}
|
||||||
count, err := oq.Count()
|
count, err := oq.Count()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("NewGameCardQuerySet err:", err)
|
logger.Error("NewGameCardQuerySet err:", err)
|
||||||
return orderInfos, 0, err
|
return orderCards, 0, err
|
||||||
}
|
}
|
||||||
err = oq.Offset(page * pageSize).Limit(pageSize).All(&orders)
|
err = oq.OrderDescByCreatedAt().Offset(m.Page * m.PageSize).Limit(m.PageSize).All(&orderCards)
|
||||||
if err != nil && err != RecordNotFound {
|
if err != nil && err != RecordNotFound {
|
||||||
log.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
return orderInfos, 0, err
|
return orderCards, 0, err
|
||||||
}
|
}
|
||||||
totalPage = uint32(count/pageSize + 1)
|
totalPage = uint32(count/m.PageSize + 1)
|
||||||
|
fmt.Println("orderCards:", orderCards)
|
||||||
|
|
||||||
var games []GameCard
|
orderCards = OrderCardListSetGameInfo(orderCards)
|
||||||
gameIds := make([]uint32, 0, len(orders))
|
|
||||||
for i, _ := range orders {
|
|
||||||
gameIds = append(gameIds, uint32(orders[i].GameCardId))
|
|
||||||
}
|
|
||||||
if len(gameIds) == 0 {
|
|
||||||
log.Error("gameIds is null")
|
|
||||||
return orderInfos, 0, err
|
|
||||||
}
|
|
||||||
err = NewGameCardQuerySet(DB).IDIn(gameIds...).All(&games)
|
|
||||||
if err != nil && err != RecordNotFound {
|
|
||||||
log.Error("err:", err)
|
|
||||||
return orderInfos, 0, err
|
|
||||||
}
|
|
||||||
|
|
||||||
gamesMap := make(map[uint32]*GameCard)
|
return orderCards, totalPage, nil
|
||||||
for i, _ := range games {
|
|
||||||
gamesMap[games[i].ID] = &games[i]
|
|
||||||
}
|
|
||||||
for i, _ := range orders {
|
|
||||||
card, ok := gamesMap[uint32(orders[i].GameCardId)]
|
|
||||||
if !ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
orderInfos = append(orderInfos, orders[i].ToInfo(card))
|
|
||||||
}
|
|
||||||
|
|
||||||
return orderInfos, totalPage, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Order) Info() (*OrderInfo, error) {
|
func (m *Order) Info(orderCardId uint32) ([]OrderCard, error) {
|
||||||
var (
|
|
||||||
order Order
|
//err := NewOrderQuerySet(DB).IDEq(m.ID).One(&order)
|
||||||
card GameCard
|
//if err != nil {
|
||||||
)
|
// logger.Error("err:", err)
|
||||||
err := NewOrderQuerySet(DB).IDEq(m.ID).One(&order)
|
// return nil, err
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//err = NewGameCardQuerySet(DB).IDEq(uint32(order.GameCardId)).One(&card)
|
||||||
|
//if err != nil && err != RecordNotFound {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
// return nil, err
|
||||||
|
//}
|
||||||
|
|
||||||
|
qs := NewOrderCardQuerySet(DB).IDEq(orderCardId)
|
||||||
|
//qs := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardIdEq(uint32(m.GameCardId))
|
||||||
|
//if m.GameCardGoodsId != 0 {
|
||||||
|
// qs = qs.GameCardGoodsIdEq(uint32(m.GameCardGoodsId))
|
||||||
|
//}
|
||||||
|
var orderCards []OrderCard
|
||||||
|
err := qs.All(&orderCards)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
orderCards = OrderCardListSetGameInfo(orderCards)
|
||||||
|
|
||||||
err = NewGameCardQuerySet(DB).IDEq(uint32(order.GameCardId)).One(&card)
|
//info := order.ToInfo(&card)
|
||||||
if err != nil && err != RecordNotFound {
|
return orderCards, nil
|
||||||
log.Error("err:", err)
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
info := order.ToInfo(&card)
|
|
||||||
return &info, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Order) Revert() (*OrderInfo, error) {
|
func (m *Order) Revert() error {
|
||||||
var (
|
var (
|
||||||
order Order
|
orderCard OrderCard
|
||||||
card GameCard
|
//card GameCard
|
||||||
)
|
)
|
||||||
|
|
||||||
qs := NewOrderQuerySet(DB).IDEq(m.ID)
|
//qs := NewOrderQuerySet(DB).IDEq(m.ID)
|
||||||
err := qs.One(&order)
|
//err := qs.One(&order)
|
||||||
|
//if err != nil {
|
||||||
|
// logger.Errorf("err:%#v", err)
|
||||||
|
// return err
|
||||||
|
//}
|
||||||
|
//if order.CardStatus == OrderCardStatusCompleted {
|
||||||
|
// logger.Error("order card status completed")
|
||||||
|
// return errors.New("order card status completed")
|
||||||
|
//}
|
||||||
|
fmt.Println("GameCardGoodsId------:", m.GameCardGoodsId)
|
||||||
|
fmt.Println("ID------:", m.ID)
|
||||||
|
fmt.Println("OrderCardId------:", m.OrderCardId)
|
||||||
|
err := NewOrderCardQuerySet(DB).IDEq(m.OrderCardId).One(&orderCard)
|
||||||
|
//err := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("err:%#v", err)
|
logger.Errorf("err:%#v", err)
|
||||||
return nil, err
|
return err
|
||||||
}
|
}
|
||||||
if order.CardStatus == OrderCardStatusCompleted {
|
if orderCard.CardStatus == OrderCardStatusCompleted {
|
||||||
logger.Error("order card status completed")
|
logger.Error("order card status completed")
|
||||||
return nil, errors.New("order card status completed")
|
return errors.New("order card status completed")
|
||||||
}
|
}
|
||||||
|
|
||||||
err = qs.GetUpdater().
|
//err = qs.GetUpdater().
|
||||||
|
// SetCardStatus(OrderCardStatusReturning).
|
||||||
|
// SetRevertTime(time.Now()).
|
||||||
|
// SetRevertStoreId(m.RevertStoreId).
|
||||||
|
// SetRevertExpressCompany(m.RevertExpressCompany).
|
||||||
|
// SetRevertExpressCompanyNo(m.RevertExpressCompanyNo).
|
||||||
|
// SetRevertExpressNo(m.RevertExpressNo).Update()
|
||||||
|
//if err != nil {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
// return nil, err
|
||||||
|
//}
|
||||||
|
//order.CardStatus = OrderCardStatusReturning
|
||||||
|
////order.RevertTime = time.Now()
|
||||||
|
//order.RevertStoreId = m.RevertStoreId
|
||||||
|
//order.RevertExpressCompany = m.RevertExpressCompany
|
||||||
|
//order.RevertExpressCompanyNo = m.RevertExpressCompanyNo
|
||||||
|
//order.RevertExpressNo = m.RevertExpressNo
|
||||||
|
|
||||||
|
_, err = NewOrderCardQuerySet(DB).IDEq(m.OrderCardId).GetUpdater().
|
||||||
|
//_, err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).GetUpdater().
|
||||||
SetCardStatus(OrderCardStatusReturning).
|
SetCardStatus(OrderCardStatusReturning).
|
||||||
SetRevertTime(time.Now()).
|
SetRevertTime(time.Now()).
|
||||||
SetRevertStoreId(m.RevertStoreId).
|
SetRevertStoreId(m.RevertStoreId).
|
||||||
SetRevertExpressCompany(m.RevertExpressCompany).
|
SetRevertExpressCompany(m.RevertExpressCompany).
|
||||||
SetRevertExpressCompanyNo(m.RevertExpressCompanyNo).
|
SetRevertExpressCompanyNo(m.RevertExpressCompanyNo).
|
||||||
SetRevertExpressNo(m.RevertExpressNo).Update()
|
SetRevertExpressNo(m.RevertExpressNo).UpdateNum()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
return nil, err
|
return err
|
||||||
}
|
}
|
||||||
order.CardStatus = OrderCardStatusReturning
|
|
||||||
order.RevertTime = time.Now()
|
|
||||||
order.RevertStoreId = m.RevertStoreId
|
|
||||||
order.RevertExpressCompany = m.RevertExpressCompany
|
|
||||||
order.RevertExpressCompanyNo = m.RevertExpressCompanyNo
|
|
||||||
order.RevertExpressNo = m.RevertExpressNo
|
|
||||||
|
|
||||||
//err = NewGameCardQuerySet(DB).IDEq(uint32(order.GameCardId)).One(&card)
|
//err = NewGameCardQuerySet(DB).IDEq(uint32(order.GameCardId)).One(&card)
|
||||||
//if err != nil && err != RecordNotFound {
|
//if err != nil && err != RecordNotFound {
|
||||||
// log.Error("err:", err)
|
// logger.Error("err:", err)
|
||||||
// return nil, err
|
// return nil, err
|
||||||
//}
|
//}
|
||||||
info := order.ToInfo(&card)
|
|
||||||
return &info, nil
|
//info := order.ToInfo(&card)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Order) RevertCancel() (*OrderInfo, error) {
|
func (m *Order) RevertCancel() (bool, error) {
|
||||||
var (
|
var (
|
||||||
order Order
|
orderCard OrderCard
|
||||||
card GameCard
|
//order Order
|
||||||
|
//card GameCard
|
||||||
)
|
)
|
||||||
|
|
||||||
qs := NewOrderQuerySet(DB).IDEq(m.ID)
|
//qs := NewOrderQuerySet(DB).IDEq(m.ID)
|
||||||
err := qs.One(&order)
|
//err := qs.One(&order)
|
||||||
|
//if err != nil {
|
||||||
|
// logger.Errorf("err:%#v", err)
|
||||||
|
// return false, err
|
||||||
|
//}
|
||||||
|
//if order.CardStatus != OrderCardStatusReturning {
|
||||||
|
// logger.Error("order card status completed")
|
||||||
|
// return false, errors.New("order card status completed")
|
||||||
|
//}
|
||||||
|
err := NewOrderCardQuerySet(DB).IDEq(m.OrderCardId).One(&orderCard)
|
||||||
|
//err := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("err:%#v", err)
|
logger.Errorf("err:%#v", err)
|
||||||
return nil, err
|
return false, err
|
||||||
}
|
}
|
||||||
if order.CardStatus != OrderCardStatusReturning {
|
if orderCard.CardStatus != OrderCardStatusReturning {
|
||||||
logger.Error("order card status completed")
|
logger.Error("order card status returning")
|
||||||
return nil, errors.New("order card status completed")
|
return false, errors.New("order card status returning")
|
||||||
}
|
}
|
||||||
|
|
||||||
err = qs.GetUpdater().
|
//err = qs.GetUpdater().
|
||||||
|
// SetCardStatus(OrderCardStatusPlaying).
|
||||||
|
// SetRevertStoreId(0).
|
||||||
|
// SetRevertExpressCompany("").
|
||||||
|
// SetRevertExpressCompanyNo("").
|
||||||
|
// SetRevertExpressNo("").Update()
|
||||||
|
//if err != nil {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
// return nil, err
|
||||||
|
//}
|
||||||
|
//order.CardStatus = OrderCardStatusCancel
|
||||||
|
////order.RevertTime = time.Now()
|
||||||
|
//order.RevertStoreId = m.RevertStoreId
|
||||||
|
//order.RevertExpressCompany = m.RevertExpressCompany
|
||||||
|
//order.RevertExpressCompanyNo = m.RevertExpressCompanyNo
|
||||||
|
//order.RevertExpressNo = m.RevertExpressNo
|
||||||
|
_, err = NewOrderCardQuerySet(DB).IDEq(m.OrderCardId).GetUpdater().
|
||||||
|
//_, err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).GetUpdater().
|
||||||
SetCardStatus(OrderCardStatusPlaying).
|
SetCardStatus(OrderCardStatusPlaying).
|
||||||
|
//SetRevertTime(time.Time{}).
|
||||||
SetRevertStoreId(0).
|
SetRevertStoreId(0).
|
||||||
SetRevertExpressCompany("").
|
SetRevertExpressCompany("").
|
||||||
SetRevertExpressCompanyNo("").
|
SetRevertExpressCompanyNo("").
|
||||||
SetRevertExpressNo("").Update()
|
SetRevertExpressNo("").UpdateNum()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
return nil, err
|
return false, err
|
||||||
}
|
}
|
||||||
order.CardStatus = OrderCardStatusPlaying
|
isRecede := false
|
||||||
//order.RevertTime = time.Now()
|
//if order.DeliveryType == 2 && order.Postage > 0 {
|
||||||
order.RevertStoreId = m.RevertStoreId
|
// isHaveOnDeliver, err := IsHaveOnDeliverOrderCards(m.ID)
|
||||||
order.RevertExpressCompany = m.RevertExpressCompany
|
// if err != nil {
|
||||||
order.RevertExpressCompanyNo = m.RevertExpressCompanyNo
|
// logger.Error("err:", err)
|
||||||
order.RevertExpressNo = m.RevertExpressNo
|
// return false, err
|
||||||
|
// }
|
||||||
info := order.ToInfo(&card)
|
// if !isHaveOnDeliver {
|
||||||
return &info, nil
|
// isRecede = true
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//info := order.ToInfo(&card)
|
||||||
|
return isRecede, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Order) OrderCreate() error {
|
func (m *Order) OrderCreate(gdb *gorm.DB) error {
|
||||||
err := m.Create(DB)
|
err := m.Create(gdb)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -269,7 +446,7 @@ func (m *Order) Modify() (*OrderInfo, error) {
|
||||||
var card GameCard
|
var card GameCard
|
||||||
err := NewGameCardQuerySet(DB).IDEq(uint32(m.GameCardId)).One(&card)
|
err := NewGameCardQuerySet(DB).IDEq(uint32(m.GameCardId)).One(&card)
|
||||||
if err != nil && err != RecordNotFound {
|
if err != nil && err != RecordNotFound {
|
||||||
log.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -278,10 +455,12 @@ func (m *Order) Modify() (*OrderInfo, error) {
|
||||||
return &info, nil
|
return &info, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsHaveUnreturnedOrders(uid uint32) (bool, error) {
|
func (m *UserRentCard) IsHaveUnreturnedOrders(RentCount uint32) (bool, error) {
|
||||||
fmt.Println("uid", uid)
|
fmt.Println("uid", m.Uid)
|
||||||
|
|
||||||
sql := fmt.Sprintf("SELECT COUNT(*) AS count FROM `order` WHERE uid = %d AND pay_status=2 AND card_status IN (1,2,3) ;", uid)
|
sql := fmt.Sprintf("SELECT COUNT(order_card.id) FROM `order` RIGHT JOIN order_card ON `order`.id = order_card.order_id WHERE `order`.uid=%d AND `order`.pay_status=2 AND order_card.card_status IN (1,2,3) ;", m.Uid)
|
||||||
|
//sql := fmt.Sprintf("SELECT COUNT(*) AS count FROM `order` WHERE uid = %d AND pay_status=2 AND card_status IN (1,2,3) ;", m.Uid)
|
||||||
|
//sql := fmt.Sprintf("SELECT COUNT(*) AS count FROM `order` WHERE uid = %d AND pay_status=2 AND card_status IN (1,2,3) ;", uid)
|
||||||
//count, err := NewOrderQuerySet(DB).UidEq(uint64(uid)).PayStatusEq(PayStatusPaid).CardStatusIn(1, 2, 3).Count()
|
//count, err := NewOrderQuerySet(DB).UidEq(uint64(uid)).PayStatusEq(PayStatusPaid).CardStatusIn(1, 2, 3).Count()
|
||||||
//if err != nil {
|
//if err != nil {
|
||||||
// logger.Error("err:", err)
|
// logger.Error("err:", err)
|
||||||
|
@ -290,16 +469,29 @@ func IsHaveUnreturnedOrders(uid uint32) (bool, error) {
|
||||||
unreturned := &struct {
|
unreturned := &struct {
|
||||||
Count int `json:"count"`
|
Count int `json:"count"`
|
||||||
}{}
|
}{}
|
||||||
DB.Raw(sql).Scan(unreturned)
|
err := DB.Raw(sql).Scan(unreturned).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
fmt.Println("订单数量count:", unreturned.Count)
|
fmt.Println("订单数量count:", unreturned.Count)
|
||||||
return unreturned.Count != 0, nil
|
return uint32(unreturned.Count)+RentCount > m.LevelRentCount, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func IsHaveOnDeliverOrderCards(orderId uint32) (bool, error) {
|
||||||
|
count, err := NewOrderCardQuerySet(DB).OrderIdEq(orderId).CardStatusEq(OrderCardStatusUnPick).Count()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
return count > 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
func IsUserHaveUnreturnedOrder(uid uint32) (bool, error) {
|
func IsUserHaveUnreturnedOrder(uid uint32) (bool, error) {
|
||||||
fmt.Println("uid", uid)
|
fmt.Println("uid", uid)
|
||||||
|
|
||||||
sql := fmt.Sprintf("SELECT COUNT(*) AS count FROM `order` WHERE uid = %d AND pay_status IN (1,2) AND card_status IN (1,2,3) ;", uid)
|
//sql := fmt.Sprintf("SELECT COUNT(*) AS count FROM `order` WHERE uid = %d AND pay_status IN (1,2) AND card_status IN (1,2,3) ;", uid)
|
||||||
|
sql := fmt.Sprintf("SELECT COUNT(*) AS count FROM order_card WHERE uid = %d AND pay_status IN (1,2) AND card_status IN (1,2,3) ;", uid)
|
||||||
//count, err := NewOrderQuerySet(DB).UidEq(uint64(uid)).PayStatusEq(PayStatusPaid).CardStatusIn(1, 2, 3).Count()
|
//count, err := NewOrderQuerySet(DB).UidEq(uint64(uid)).PayStatusEq(PayStatusPaid).CardStatusIn(1, 2, 3).Count()
|
||||||
//if err != nil {
|
//if err != nil {
|
||||||
// logger.Error("err:", err)
|
// logger.Error("err:", err)
|
||||||
|
@ -351,58 +543,112 @@ func GetPickupCode() string {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Order) Cancel() error {
|
func (m *Order) Cancel() (bool, Order, error) {
|
||||||
var userOrder Order
|
var (
|
||||||
err := NewOrderQuerySet(DB).IDEq(m.ID).One(&userOrder)
|
order Order
|
||||||
|
orderCard OrderCard
|
||||||
|
)
|
||||||
|
err := NewOrderQuerySet(DB).IDEq(m.ID).One(&order)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
return err
|
return false, order, err
|
||||||
}
|
}
|
||||||
if userOrder.CardStatus != OrderCardStatusUnPick {
|
orderJson, _ := json.Marshal(m)
|
||||||
log.Error("card status not unpick err: ")
|
fmt.Println("orderJson:", string(orderJson))
|
||||||
return errors.New("card status not unpick")
|
|
||||||
|
err = NewOrderCardQuerySet(DB).IDEq(m.OrderCardId).One(&orderCard)
|
||||||
|
//err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardIdEq(uint32(m.GameCardId)).CardStatusEq(OrderCardStatusUnPick).Limit(1).One(&orderCard)
|
||||||
|
if err != nil && err != RecordNotFound {
|
||||||
|
logger.Errorf("err:%#v", err)
|
||||||
|
return false, order, err
|
||||||
}
|
}
|
||||||
if userOrder.PayStatus == PayStatusUnPay && userOrder.CreatedAt.Add(30*time.Minute).Before(time.Now()) {
|
if err == RecordNotFound {
|
||||||
//if userOrder.PayStatus == PayStatusUnPay && userOrder.CreatedAt.Add(3*time.Minute).Before(time.Now()) {
|
logger.Error("order card status not unpick")
|
||||||
log.Error("card status expire err: ")
|
return false, order, errors.New("order card status not unpick")
|
||||||
return errors.New("card status expire")
|
|
||||||
}
|
}
|
||||||
|
if orderCard.CardStatus != OrderCardStatusUnPick {
|
||||||
|
logger.Error("order card status not unpick")
|
||||||
|
return false, order, errors.New("order card status not unpick")
|
||||||
|
}
|
||||||
|
//if userOrder.CardStatus != OrderCardStatusUnPick {
|
||||||
|
// logger.Error("card status not unpick err: ")
|
||||||
|
// return false,errors.New("card status not unpick")
|
||||||
|
//}
|
||||||
|
//if userOrder.PayStatus == PayStatusUnPay && userOrder.CreatedAt.Add(30*time.Minute).Before(time.Now()) {
|
||||||
|
// //if userOrder.PayStatus == PayStatusUnPay && userOrder.CreatedAt.Add(3*time.Minute).Before(time.Now()) {
|
||||||
|
// logger.Error("card status expire err: ")
|
||||||
|
// return errors.New("card status expire")
|
||||||
|
//}
|
||||||
|
|
||||||
//fmt.Println("PayStatus",userOrder.PayStatus)
|
//fmt.Println("PayStatus",userOrder.PayStatus)
|
||||||
//fmt.Println("DeliveryType",userOrder.DeliveryType)
|
//fmt.Println("DeliveryType",userOrder.DeliveryType)
|
||||||
//fmt.Println("CreatedAt",userOrder.CreatedAt.Add(4*time.Minute))
|
//fmt.Println("CreatedAt",userOrder.CreatedAt.Add(4*time.Minute))
|
||||||
//fmt.Println("Now",time.Now())
|
//fmt.Println("Now",time.Now())
|
||||||
if userOrder.PayStatus == PayStatusPaid && userOrder.DeliveryType == DeliveryTypeStorePick && userOrder.CreatedAt.Add(24*time.Hour).Before(time.Now()) {
|
//if userOrder.PayStatus == PayStatusPaid && userOrder.DeliveryType == DeliveryTypeStorePick && userOrder.CreatedAt.Add(24*time.Hour).Before(time.Now()) {
|
||||||
//if userOrder.PayStatus == PayStatusPaid && userOrder.DeliveryType == DeliveryTypeStorePick && userOrder.CreatedAt.Add(4*time.Minute).Before(time.Now()) {
|
// //if userOrder.PayStatus == PayStatusPaid && userOrder.DeliveryType == DeliveryTypeStorePick && userOrder.CreatedAt.Add(4*time.Minute).Before(time.Now()) {
|
||||||
log.Error("card status expire err: ")
|
// logger.Error("card status expire err: ")
|
||||||
return errors.New("card status expire")
|
// return errors.New("card status expire")
|
||||||
}
|
//}
|
||||||
|
|
||||||
|
|
||||||
begin := DB.Begin()
|
begin := DB.Begin()
|
||||||
err = NewOrderQuerySet(begin).IDEq(m.ID).GetUpdater().SetCardStatus(OrderCardStatusCancel).Update()
|
//err = NewOrderQuerySet(begin).IDEq(orderCard.OrderId).GetUpdater().SetCardStatus(OrderCardStatusCancel).Update()
|
||||||
|
//if err != nil {
|
||||||
|
// begin.Rollback()
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
// return false,err
|
||||||
|
//}
|
||||||
|
_, err = NewOrderCardQuerySet(DB).IDEq(orderCard.ID).GetUpdater().SetCardStatus(OrderCardStatusCancel).UpdateNum()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
log.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
return err
|
return false, order, err
|
||||||
}
|
}
|
||||||
sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock+1 WHERE store_id=%d AND game_card_id=%d;", userOrder.StoreId, userOrder.GameCardId)
|
sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock+1 WHERE store_id=%d AND game_card_id=%d;", orderCard.StoreId, orderCard.GameCardId)
|
||||||
fmt.Println("sql:", sql)
|
fmt.Println("sql:", sql)
|
||||||
err = begin.Exec(sql).Error
|
err = begin.Exec(sql).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
logger.Errorf("err:%#v", err)
|
logger.Errorf("err:%#v", err)
|
||||||
return err
|
return false, order, err
|
||||||
|
}
|
||||||
|
//UserRentCard{}
|
||||||
|
sqlRent := fmt.Sprintf("UPDATE user_rent_card SET have_rent_count = have_rent_count-1,can_rent_count=can_rent_count+1 WHERE uid =%d;", order.Uid)
|
||||||
|
fmt.Println("sqlRent:", sqlRent)
|
||||||
|
err = begin.Exec(sqlRent).Error
|
||||||
|
if err != nil {
|
||||||
|
begin.Rollback()
|
||||||
|
logger.Errorf("err:%#v", err)
|
||||||
|
return false, order, err
|
||||||
}
|
}
|
||||||
err = begin.Commit().Error
|
err = begin.Commit().Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
logger.Errorf("err:%#v", err)
|
logger.Errorf("err:%#v", err)
|
||||||
return err
|
return false, order, err
|
||||||
|
}
|
||||||
|
isHaveOnDeliver, err := IsHaveOnDeliverOrderCards(m.ID)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return false, order, err
|
||||||
|
}
|
||||||
|
if !isHaveOnDeliver {
|
||||||
|
err = NewOrderQuerySet(DB).IDEq(order.ID).GetUpdater().SetCardStatus(OrderCardStatusCancel).Update()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return false, order, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*m = userOrder
|
isRecede := false
|
||||||
return nil
|
if order.DeliveryType == 2 && order.Postage > 0 {
|
||||||
|
if !isHaveOnDeliver {
|
||||||
|
isRecede = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//m.ID = order.ID
|
||||||
|
//m.Uid = order.Uid
|
||||||
|
//m.PayPrice = order.PayPrice
|
||||||
|
return isRecede, order, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func UnPayOrderSetCancel(uid uint32) {
|
func UnPayOrderSetCancel(uid uint32) {
|
||||||
|
@ -410,7 +656,7 @@ func UnPayOrderSetCancel(uid uint32) {
|
||||||
var order Order
|
var order Order
|
||||||
err := NewOrderQuerySet(DB.Debug()).UidEq(uint64(uid)).PayStatusEq(PayStatusUnPay).CardStatusEq(OrderCardStatusUnPick).One(&order)
|
err := NewOrderQuerySet(DB.Debug()).UidEq(uint64(uid)).PayStatusEq(PayStatusUnPay).CardStatusEq(OrderCardStatusUnPick).One(&order)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -421,7 +667,7 @@ func UnPayOrderSetCancel(uid uint32) {
|
||||||
SetCardStatus(OrderCardStatusCancel).UpdateNum()
|
SetCardStatus(OrderCardStatusCancel).UpdateNum()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
log.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -430,13 +676,135 @@ func UnPayOrderSetCancel(uid uint32) {
|
||||||
err = begin.Exec(sql).Error
|
err = begin.Exec(sql).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
log.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err = begin.Commit().Error
|
err = begin.Commit().Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
log.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//func (m *Order) CreateByCardInfoList(cardInfos []CardInfo, gdb *gorm.DB) error {
|
||||||
|
// err := gdb.Create(m).Error
|
||||||
|
// if err != nil {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// if m.ID == 0 {
|
||||||
|
// return errors.New("order id is 0")
|
||||||
|
// }
|
||||||
|
// for _, v := range cardInfos {
|
||||||
|
// for i := 0; i < int(v.Count); i++ {
|
||||||
|
// //OrderCard{
|
||||||
|
// // OrderId: m.ID,
|
||||||
|
// // Uid: uint32(m.Uid),
|
||||||
|
// // GameCardId: v.GameCardId,
|
||||||
|
// // GameCardGoodsId: 0,
|
||||||
|
// // StoreId: uint32(m.StoreId),
|
||||||
|
// // Status: 0,
|
||||||
|
// //}
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
|
||||||
|
func IsCardGoodsStockEnough(cards []CardInfo, storeId uint32) (bool, error) {
|
||||||
|
for i, _ := range cards {
|
||||||
|
var gameCardGoodsStock GameCardGoodsStock
|
||||||
|
err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).GameCardIdEq(uint64(cards[i].GameCardId)).
|
||||||
|
One(&gameCardGoodsStock)
|
||||||
|
if err != nil && err != RecordNotFound {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
if err == RecordNotFound {
|
||||||
|
logger.Error("order stock out:")
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
if gameCardGoodsStock.RentStock < cards[i].Count {
|
||||||
|
logger.Error("order stock out ")
|
||||||
|
return false, errors.New("order stock out")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GameCardGoodsInventoryReduction(cards []CardInfo, storeId uint32, gdb *gorm.DB) error {
|
||||||
|
for i, _ := range cards {
|
||||||
|
sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock-%d WHERE store_id=%d AND game_card_id=%d;", cards[i].Count, storeId, cards[i].GameCardId)
|
||||||
|
fmt.Println("sql:", sql)
|
||||||
|
err := gdb.Exec(sql).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Order) InventoryReduction(gdb *gorm.DB) error {
|
||||||
|
var cards []OrderCard
|
||||||
|
err := NewOrderCardQuerySet(DB).UidEq(uint32(m.Uid)).OrderIdEq(m.ID).All(&cards)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
//fmt.Println("cards:", cards)
|
||||||
|
for i, _ := range cards {
|
||||||
|
var gameCardGoodsStock GameCardGoodsStock
|
||||||
|
err := NewGameCardGoodsStockQuerySet(DB).GameCardIdEq(uint64(cards[i].GameCardId)).StoreIdEq(m.StoreId).One(&gameCardGoodsStock)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
//fmt.Println("cards:", cards[i].GameCardId, cards[i].StoreId, cards[i].Uid)
|
||||||
|
if gameCardGoodsStock.RentStock < 1 {
|
||||||
|
logger.Error("rent stock not enough:")
|
||||||
|
return errors.New("rent stock not enough")
|
||||||
|
}
|
||||||
|
sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock-1 WHERE store_id=%d AND game_card_id=%d;", m.StoreId, cards[i].GameCardId)
|
||||||
|
fmt.Println("sql:", sql)
|
||||||
|
err = gdb.Exec(sql).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err = OrderCardUserRentCard(uint32(m.Uid), uint32(len(cards)), nil, gdb)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Order) CreatOrderCard(cards []CardInfo, storeId uint32, gdb *gorm.DB) error {
|
||||||
|
for _, v := range cards {
|
||||||
|
for i := 0; i < int(v.Count); i++ {
|
||||||
|
orderCard := &OrderCard{
|
||||||
|
OrderId: m.ID,
|
||||||
|
Uid: uint32(m.Uid),
|
||||||
|
GameCardId: v.GameCardId,
|
||||||
|
GameCardGoodsId: 0,
|
||||||
|
StoreId: storeId,
|
||||||
|
CardStatus: OrderCardStatusUnPick,
|
||||||
|
DeliveryTime: time.Time{},
|
||||||
|
ReceiptTime: time.Time{},
|
||||||
|
DeliveryType: m.DeliveryType,
|
||||||
|
SerialNumber: "",
|
||||||
|
PayStatus: m.PayStatus,
|
||||||
|
}
|
||||||
|
err := gdb.Create(orderCard).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -167,7 +167,7 @@ func UserRedeemCodeConvert(uid uint32, serialCode string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func CodeSendToUser(uid uint32, codeType string) error {
|
func CodeSendToUser(uid uint32, codeType string, activityType uint32) error {
|
||||||
count, err := NewUserRedeemCodeQuerySet(DB).UidEq(uid).Count()
|
count, err := NewUserRedeemCodeQuerySet(DB).UidEq(uid).Count()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
|
@ -198,7 +198,8 @@ func CodeSendToUser(uid uint32, codeType string) error {
|
||||||
Status: UserRedeemCodeStatusHold,
|
Status: UserRedeemCodeStatusHold,
|
||||||
SerialCode: redeemCode.SerialCode,
|
SerialCode: redeemCode.SerialCode,
|
||||||
CodeType: redeemCode.CodeType,
|
CodeType: redeemCode.CodeType,
|
||||||
ActivityType: RedeemCodeActivityTypeUserInvite,
|
ActivityType: activityType,
|
||||||
|
//ActivityType: RedeemCodeActivityTypeUserInvite,
|
||||||
}
|
}
|
||||||
err = begin.Create(userRedeemCode).Error
|
err = begin.Create(userRedeemCode).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -1,16 +1,88 @@
|
||||||
package model
|
package model
|
||||||
|
|
||||||
|
import "github.com/codinl/go-logger"
|
||||||
|
|
||||||
//go:generate goqueryset -in shopping_cart.go
|
//go:generate goqueryset -in shopping_cart.go
|
||||||
// gen:qs
|
// gen:qs
|
||||||
type ShoppingCart struct {
|
type ShoppingCart struct {
|
||||||
Model
|
Model
|
||||||
|
|
||||||
Uid uint64 `json:"uid" gorm:"index"`
|
Uid uint64 `json:"uid" gorm:"index"`
|
||||||
GameCardId uint64 `json:"game_card_id"` // 游戏卡id
|
GameCardId uint64 `json:"game_card_id"` // 游戏卡id
|
||||||
DeliveryType uint8 `json:"delivery_type"` // 发货类型
|
Count uint32 `json:"count"` // 数量
|
||||||
Count uint32 `json:"count"` // 数量
|
|
||||||
|
GameCard GameCard `json:"game_card" gorm:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*ShoppingCart) TableName() string {
|
func (*ShoppingCart) TableName() string {
|
||||||
return "shopping_cart"
|
return "shopping_cart"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ShoppingCartListReq struct {
|
||||||
|
Uid uint32 `json:"uid"`
|
||||||
|
PageNum int `json:"page_num"`
|
||||||
|
PageSize int `json:"page_size"`
|
||||||
|
}
|
||||||
|
type ShoppingCartListResp struct {
|
||||||
|
List []ShoppingCart `json:"list"`
|
||||||
|
Total int `json:"total"`
|
||||||
|
PageNum int `json:"page_num"`
|
||||||
|
//PageSize int `json:"page_size"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *ShoppingCartListReq) List() (*ShoppingCartListResp, error) {
|
||||||
|
resp := &ShoppingCartListResp{
|
||||||
|
PageNum: m.PageNum,
|
||||||
|
}
|
||||||
|
page := m.PageNum - 1
|
||||||
|
if page < 0 {
|
||||||
|
page = 0
|
||||||
|
}
|
||||||
|
if m.PageSize == 0 {
|
||||||
|
m.PageSize = 10
|
||||||
|
}
|
||||||
|
qs := NewShoppingCartQuerySet(DB).UidEq(uint64(m.Uid))
|
||||||
|
count, err := qs.Count()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return resp, err
|
||||||
|
}
|
||||||
|
resp.Total = count/m.PageSize + 1
|
||||||
|
var shoppingCart []ShoppingCart
|
||||||
|
err = qs.OrderDescByID().Offset(page * m.PageSize).Limit(m.PageSize).All(&shoppingCart)
|
||||||
|
if err != nil && err != RecordNotFound {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return resp, err
|
||||||
|
}
|
||||||
|
resp.List = ShoppingCartListSetGameCard(shoppingCart)
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ShoppingCartListSetGameCard(list []ShoppingCart) []ShoppingCart {
|
||||||
|
if len(list) == 0 {
|
||||||
|
return list
|
||||||
|
}
|
||||||
|
ids := make([]uint32, 0)
|
||||||
|
for i, _ := range list {
|
||||||
|
ids = append(ids, uint32(list[i].GameCardId))
|
||||||
|
}
|
||||||
|
var gameCards []GameCard
|
||||||
|
err := NewGameCardQuerySet(DB).IDIn(ids...).All(&gameCards)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return list
|
||||||
|
}
|
||||||
|
gameCardMap := make(map[uint32]GameCard, 0)
|
||||||
|
for i, _ := range gameCards {
|
||||||
|
gameCardMap[gameCards[i].ID] = gameCards[i]
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, _ := range list {
|
||||||
|
v, ok := gameCardMap[uint32(list[i].GameCardId)]
|
||||||
|
if ok {
|
||||||
|
list[i].GameCard = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return list
|
||||||
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ type GameCardStock struct {
|
||||||
Stock uint32 `json:"stock"`
|
Stock uint32 `json:"stock"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetStoreList(gameId uint64) ([]GameCardStock, error) {
|
func GetStoreList(cardInfos []CardInfo) ([]GameCardStock, error) {
|
||||||
var eg errgroup.Group
|
var eg errgroup.Group
|
||||||
stores := make([]Store, 0)
|
stores := make([]Store, 0)
|
||||||
stocks := make([]GameCardGoodsStock, 0)
|
stocks := make([]GameCardGoodsStock, 0)
|
||||||
|
@ -48,7 +48,7 @@ func GetStoreList(gameId uint64) ([]GameCardStock, error) {
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
if gameId == 0 {
|
if len(cardInfos) == 0 {
|
||||||
stores = * <-storesCh
|
stores = * <-storesCh
|
||||||
fmt.Println("stores:", stores)
|
fmt.Println("stores:", stores)
|
||||||
for i, _ := range stores {
|
for i, _ := range stores {
|
||||||
|
@ -61,8 +61,15 @@ func GetStoreList(gameId uint64) ([]GameCardStock, error) {
|
||||||
return list, nil
|
return list, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gameIds := make([]uint64, 0)
|
||||||
|
cardInfoMap := make(map[uint64]uint32, 0)
|
||||||
|
for i, _ := range cardInfos {
|
||||||
|
gameIds = append(gameIds, uint64(cardInfos[i].GameCardId))
|
||||||
|
cardInfoMap[uint64(cardInfos[i].GameCardId)] = cardInfos[i].Count
|
||||||
|
}
|
||||||
eg.Go(func() error {
|
eg.Go(func() error {
|
||||||
err := NewGameCardGoodsStockQuerySet(DB).GameCardIdEq(gameId).RentStockGt(0).All(&stocks)
|
//err := NewGameCardGoodsStockQuerySet(DB).GameCardIdEq(gameId).RentStockGt(0).All(&stocks)
|
||||||
|
err := NewGameCardGoodsStockQuerySet(DB).GameCardIdIn(gameIds...).RentStockGt(0).All(&stocks)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("err:%+v", err)
|
logger.Errorf("err:%+v", err)
|
||||||
return err
|
return err
|
||||||
|
@ -75,20 +82,47 @@ func GetStoreList(gameId uint64) ([]GameCardStock, error) {
|
||||||
logger.Errorf("err:%+v", err)
|
logger.Errorf("err:%+v", err)
|
||||||
return list, err
|
return list, err
|
||||||
}
|
}
|
||||||
stockMap := make(map[uint64]uint32)
|
//stockMap := make(map[uint64]uint32)
|
||||||
|
//for i, _ := range stocks {
|
||||||
|
// count, ok := cardInfoMap[uint64(stocks[i].GameCardId)]
|
||||||
|
// if ok && count <= stocks[i].RentStock {
|
||||||
|
// stockMap[stocks[i].StoreId] = stocks[i].RentStock
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
storeStockMap := make(map[uint64]map[uint64]uint32, 0)
|
||||||
for i, _ := range stocks {
|
for i, _ := range stocks {
|
||||||
stockMap[stocks[i].StoreId] = stocks[i].RentStock
|
//count, ok := cardInfoMap[uint64(stocks[i].GameCardId)]
|
||||||
|
//if ok && count <= stocks[i].RentStock {
|
||||||
|
// stockMap[stocks[i].StoreId] = stocks[i].RentStock
|
||||||
|
//}
|
||||||
|
stockMap, ok := storeStockMap[stocks[i].StoreId]
|
||||||
|
if !ok {
|
||||||
|
stockMap = make(map[uint64]uint32, 0)
|
||||||
|
}
|
||||||
|
stockMap[stocks[i].GameCardId] = stocks[i].RentStock
|
||||||
|
storeStockMap[stocks[i].StoreId] = stockMap
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, _ := range stores {
|
for i, _ := range stores {
|
||||||
rentStock, ok := stockMap[uint64(stores[i].ID)]
|
stockMap, ok := storeStockMap[uint64(stores[i].ID)]
|
||||||
if ok {
|
if ok && IsStoreStockEnough(cardInfos, stockMap) {
|
||||||
cardStock := GameCardStock{
|
cardStock := GameCardStock{
|
||||||
Store: stores[i],
|
Store: stores[i],
|
||||||
Stock: rentStock,
|
Stock: 0,
|
||||||
}
|
}
|
||||||
list = append(list, cardStock)
|
list = append(list, cardStock)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//if ok {
|
||||||
|
// cardStock := GameCardStock{
|
||||||
|
// Store: stores[i],
|
||||||
|
// Stock: rentStock,
|
||||||
|
// }
|
||||||
|
// list = append(list, cardStock)
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
|
fmt.Println("list:", list)
|
||||||
return list, nil
|
return list, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,3 +152,14 @@ type CannibalizeGameCardGoods struct {
|
||||||
GameCardId uint32 `json:"game_card_id"` // 游戏卡id
|
GameCardId uint32 `json:"game_card_id"` // 游戏卡id
|
||||||
SerialNumber string `json:"serial_number" gorm:"index"` // 编号
|
SerialNumber string `json:"serial_number" gorm:"index"` // 编号
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func IsStoreStockEnough(cardInfos []CardInfo, gameStockMap map[uint64]uint32) bool {
|
||||||
|
//haveStock =
|
||||||
|
for i, _ := range cardInfos {
|
||||||
|
stock, ok := gameStockMap[uint64(cardInfos[i].GameCardId)]
|
||||||
|
if !ok || stock < cardInfos[i].Count {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
207
model/user.go
207
model/user.go
|
@ -2,8 +2,11 @@ package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"github.com/codinl/go-logger"
|
"github.com/codinl/go-logger"
|
||||||
|
"github.com/jinzhu/gorm"
|
||||||
"mh-server/lib/utils"
|
"mh-server/lib/utils"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -44,8 +47,16 @@ func (o *User) TableName() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
MemberTypeConsumer = 1
|
MemberTypeConsumer = 1 // 普通用户
|
||||||
MemberTypeMember = 2
|
MemberTypeMember = 2 // 黄金会员
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
MemberLevelConsumer = 1 // 普通用户
|
||||||
|
MemberLevelGold = 2 // 黄金会员
|
||||||
|
MemberLevelPeriod = 3
|
||||||
|
MemberLevelPlatinum = 4 // 白金会员
|
||||||
|
MemberLevelBlackGold = 5 // 黑金会员
|
||||||
)
|
)
|
||||||
|
|
||||||
const DateTimeFormat = "2006-01-02"
|
const DateTimeFormat = "2006-01-02"
|
||||||
|
@ -62,6 +73,7 @@ type UserInvite struct {
|
||||||
MemberStatus uint8 `json:"member_status"` // 被邀请用户 1-未开通 2-已开通 3-已取消会员
|
MemberStatus uint8 `json:"member_status"` // 被邀请用户 1-未开通 2-已开通 3-已取消会员
|
||||||
ToUid uint32 `json:"to_uid"` // 被邀请用户
|
ToUid uint32 `json:"to_uid"` // 被邀请用户
|
||||||
StoreType uint32 `json:"store_type"` // 门店类型
|
StoreType uint32 `json:"store_type"` // 门店类型
|
||||||
|
MemberLevel uint32 `json:"member_level"` // 会员等级
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -83,6 +95,39 @@ type DepositRefundRecord struct {
|
||||||
User User `json:"user" gorm:"-"`
|
User User `json:"user" gorm:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 黄金会员 member_gold 白金会员 member_platinum 黑金会员 member_black_gold
|
||||||
|
// member_gold_deposit member_platinum_deposit member_black_gold_platinum
|
||||||
|
// express_fee
|
||||||
|
const (
|
||||||
|
UserConsumeTypeMemberGold = "member_gold"
|
||||||
|
UserConsumeTypeMemberPlatinum = "member_platinum"
|
||||||
|
UserConsumeTypeMemberBlackGold = "member_black_gold"
|
||||||
|
UserConsumeTypeMemberGoldDeposit = "member_gold_deposit"
|
||||||
|
UserConsumeTypeMemberPlatinumDeposit = "member_platinum_deposit"
|
||||||
|
UserConsumeTypeMemberBlackGoldDeposit = "member_black_gold_platinum"
|
||||||
|
UserConsumeTypeExpressFee = "express_fee"
|
||||||
|
)
|
||||||
|
|
||||||
|
// gen:qs
|
||||||
|
type UserConsumeRecord struct {
|
||||||
|
Model
|
||||||
|
Uid uint32 `json:"uid"`
|
||||||
|
ConsumeType string `json:"consume_type"` // 黄金会员 member_gold 白金会员 member_platinum 黑金会员 member_black_gold
|
||||||
|
Amount uint32 `json:"amount"`
|
||||||
|
Status uint32 `json:"status"` // 1-待支付 2-已支付 3-已退款
|
||||||
|
}
|
||||||
|
|
||||||
|
// gen:qs
|
||||||
|
type UserRentCard struct {
|
||||||
|
Model
|
||||||
|
Uid uint32 `json:"uid"`
|
||||||
|
MemberLevel uint32 `json:"member_level"` // 会员等级 1-用户 2-会员
|
||||||
|
LevelRentCount uint32 `json:"level_rent_count"` // 等级借卡数量
|
||||||
|
HaveRentCount uint32 `json:"have_rent_count"` // 已借卡数量
|
||||||
|
CanRentCount uint32 `json:"can_rent_count"` // 可借卡数量
|
||||||
|
Status uint32 `json:"status"` // 状态
|
||||||
|
}
|
||||||
|
|
||||||
func GetUserByUid(uid uint32) *User {
|
func GetUserByUid(uid uint32) *User {
|
||||||
user := new(User)
|
user := new(User)
|
||||||
if err := NewUserQuerySet(DB).UidEq(uid).One(user); err != nil {
|
if err := NewUserQuerySet(DB).UidEq(uid).One(user); err != nil {
|
||||||
|
@ -92,6 +137,15 @@ func GetUserByUid(uid uint32) *User {
|
||||||
return user
|
return user
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetUserRentCard(uid uint32) *UserRentCard {
|
||||||
|
userRent := new(UserRentCard)
|
||||||
|
if err := NewUserRentCardQuerySet(DB).UidEq(uid).One(userRent); err != nil {
|
||||||
|
logger.Error(err, uid)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return userRent
|
||||||
|
}
|
||||||
|
|
||||||
func UserUpdate(user *User) error {
|
func UserUpdate(user *User) error {
|
||||||
if user.Uid == 0 {
|
if user.Uid == 0 {
|
||||||
return errors.New("uid is null")
|
return errors.New("uid is null")
|
||||||
|
@ -129,11 +183,12 @@ func UserUpdate(user *User) error {
|
||||||
type UserOpenMemberRecord struct {
|
type UserOpenMemberRecord struct {
|
||||||
Model
|
Model
|
||||||
|
|
||||||
Uid uint32 `json:"uid"`
|
Uid uint32 `json:"uid"`
|
||||||
OpenNo string `json:"open_no" gorm:"index"`
|
OpenNo string `json:"open_no" gorm:"index"`
|
||||||
OrderId uint32 `json:"order_id"`
|
OrderId uint32 `json:"order_id"`
|
||||||
OrderType uint32 `json:"order_type"` // 1-物流支付 3-积分兑换商品物流
|
OrderType uint32 `json:"order_type"` // 1-物流支付 2-取消物流租卡
|
||||||
|
MemberLevel uint32 `json:"member_level"`
|
||||||
|
MemberExpire time.Time `json:"member_expire"` // 会员到期时间
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *UserOpenMemberRecord) TableName() string {
|
func (o *UserOpenMemberRecord) TableName() string {
|
||||||
|
@ -345,7 +400,8 @@ func (m *User) Edit() {
|
||||||
|
|
||||||
func GetWxPayExpressFeeRefundRecord(orderId uint32) (string, error) {
|
func GetWxPayExpressFeeRefundRecord(orderId uint32) (string, error) {
|
||||||
var openMemberRecord UserOpenMemberRecord
|
var openMemberRecord UserOpenMemberRecord
|
||||||
err := NewUserOpenMemberRecordQuerySet(DB).OrderIdEq(orderId).OrderTypeEq(1).OrderDescByID().Limit(1).One(&openMemberRecord)
|
//err := NewUserOpenMemberRecordQuerySet(DB).OrderIdEq(orderId).OrderTypeEq(1).OrderDescByID().Limit(1).One(&openMemberRecord)
|
||||||
|
err := NewUserOpenMemberRecordQuerySet(DB).OrderIdEq(orderId).OrderDescByID().Limit(1).One(&openMemberRecord)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
return "", err
|
return "", err
|
||||||
|
@ -362,3 +418,138 @@ func GetDepositRefundRecordList(uid uint32) ([]DepositRefundRecord, error) {
|
||||||
}
|
}
|
||||||
return deposits, nil
|
return deposits, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var userMutexMap map[string]*sync.Mutex
|
||||||
|
|
||||||
|
func GetUserMutexMap() map[string]*sync.Mutex {
|
||||||
|
if userMutexMap == nil {
|
||||||
|
userMutexMap = make(map[string]*sync.Mutex, 0)
|
||||||
|
}
|
||||||
|
return userMutexMap
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetUserMutex(mutexKey string) *sync.Mutex {
|
||||||
|
mutexMap := GetUserMutexMap()
|
||||||
|
if v, ok := mutexMap[mutexKey]; ok {
|
||||||
|
return v
|
||||||
|
} else {
|
||||||
|
mutexMap[mutexKey] = new(sync.Mutex)
|
||||||
|
return mutexMap[mutexKey]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//func AuthLoginMutex(uid uint32) *sync.Mutex {
|
||||||
|
// return GetUserMutex(fmt.Sprintf("AuthLogin:%d", uid))
|
||||||
|
//}
|
||||||
|
|
||||||
|
var AuthLoginMutex = sync.Mutex{}
|
||||||
|
|
||||||
|
func OrderCardUserRentCard(uid uint32, count uint32, memberConfig *MemberConfig, gdb *gorm.DB) error {
|
||||||
|
//UserRentCard{}
|
||||||
|
if gdb == nil {
|
||||||
|
gdb = DB
|
||||||
|
}
|
||||||
|
var userRentCard UserRentCard
|
||||||
|
err := NewUserRentCardQuerySet(DB).UidEq(uid).One(&userRentCard)
|
||||||
|
if err != nil && err != RecordNotFound {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err == RecordNotFound {
|
||||||
|
user := GetUserByUid(uid)
|
||||||
|
if user == nil {
|
||||||
|
logger.Error("user nil")
|
||||||
|
return errors.New("user nil")
|
||||||
|
}
|
||||||
|
if memberConfig == nil {
|
||||||
|
memberConfig, err = GetMemberConfig(user.MemberLevel)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("GetMemberConfig err:", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rentCard := &UserRentCard{
|
||||||
|
Uid: uid,
|
||||||
|
MemberLevel: user.MemberLevel,
|
||||||
|
LevelRentCount: memberConfig.CardMax,
|
||||||
|
HaveRentCount: uint32(count),
|
||||||
|
CanRentCount: uint32(memberConfig.CardMax - count),
|
||||||
|
Status: 0,
|
||||||
|
}
|
||||||
|
err := gdb.Create(rentCard).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
sql := fmt.Sprintf("UPDATE user_rent_card SET have_rent_count=have_rent_count+%d ,can_rent_count=can_rent_count-%d WHERE uid = %d", count, count, uid)
|
||||||
|
err = gdb.Exec(sql).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ShoppingCartCreateOrder(uid uint32, cards []CardInfo) {
|
||||||
|
cardIds := make([]uint64, 0, len(cards))
|
||||||
|
for i, _ := range cards {
|
||||||
|
cardIds = append(cardIds, uint64(cards[i].GameCardId))
|
||||||
|
}
|
||||||
|
err := NewShoppingCartQuerySet(DB).UidEq(uint64(uid)).GameCardIdIn(cardIds...).Delete()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func ShoppingCartCreateOrderByOrder(order Order) {
|
||||||
|
var orderCards []OrderCard
|
||||||
|
err := NewOrderCardQuerySet(DB).OrderIdEq(order.ID).All(&orderCards)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err.Error())
|
||||||
|
}
|
||||||
|
cardIds := make([]uint64, 0, len(orderCards))
|
||||||
|
for i, _ := range orderCards {
|
||||||
|
cardIds = append(cardIds, uint64(orderCards[i].GameCardId))
|
||||||
|
}
|
||||||
|
err = NewShoppingCartQuerySet(DB).UidEq(uint64(order.Uid)).GameCardIdIn(cardIds...).Delete()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateUserRentCardByMemberLevel(uid, memberLevel, cardMax uint32) {
|
||||||
|
var userRentCard UserRentCard
|
||||||
|
err := NewUserRentCardQuerySet(DB).UidEq(uid).One(&userRentCard)
|
||||||
|
if err != nil && err != RecordNotFound {
|
||||||
|
logger.Error("UserRentCard err:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err == RecordNotFound {
|
||||||
|
userRentCard = UserRentCard{
|
||||||
|
Uid: uid,
|
||||||
|
MemberLevel: memberLevel,
|
||||||
|
LevelRentCount: cardMax,
|
||||||
|
HaveRentCount: 0,
|
||||||
|
CanRentCount: cardMax,
|
||||||
|
Status: 0,
|
||||||
|
}
|
||||||
|
err := DB.Create(&userRentCard).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("UserRentCard create err:", err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, err = NewUserRentCardQuerySet(DB).IDEq(userRentCard.ID).GetUpdater().
|
||||||
|
SetMemberLevel(memberLevel).
|
||||||
|
SetCanRentCount(cardMax - userRentCard.HaveRentCount).
|
||||||
|
SetLevelRentCount(cardMax).UpdateNum()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("update err:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -75,10 +75,14 @@ func ConfigAppRouter(r gin.IRouter) {
|
||||||
user.POST("user_info/tel", controller.UserTel) // 获取用户手机号
|
user.POST("user_info/tel", controller.UserTel) // 获取用户手机号
|
||||||
user.POST("user_info/update", controller.UserInfoUpdate) // 修改用户信息
|
user.POST("user_info/update", controller.UserInfoUpdate) // 修改用户信息
|
||||||
user.POST("open_member", controller.OpenMember) // 开通会员
|
user.POST("open_member", controller.OpenMember) // 开通会员
|
||||||
|
user.POST("upgrade_member", controller.UpgradeMember) // 升级会员
|
||||||
|
user.POST("upgrade_member_info", controller.UpgradeMemberInfo) // 升级详情
|
||||||
user.POST("pay_deposit", controller.PayDeposit) // 支付押金
|
user.POST("pay_deposit", controller.PayDeposit) // 支付押金
|
||||||
user.POST("refund_deposit", controller.RefundDeposit) // 押金
|
user.POST("refund_deposit", controller.RefundDeposit) // 退押金
|
||||||
user.POST("refund_deposit_record", controller.UserDepositRefundRecordList) // 押金记录
|
user.POST("refund_deposit_record", controller.UserDepositRefundRecordList) // 押金记录
|
||||||
|
|
||||||
|
user.POST("member_config", controller.MemberConfigList) // 开通会员配置
|
||||||
|
|
||||||
user.POST("common_problem/list", controller.CommonProblemList) // 常见问题列表
|
user.POST("common_problem/list", controller.CommonProblemList) // 常见问题列表
|
||||||
//user.POST("service/wechat_id", controller.GetCustomerServiceWechatId) // 获取客服微信号
|
//user.POST("service/wechat_id", controller.GetCustomerServiceWechatId) // 获取客服微信号
|
||||||
user.POST("invite_applet_code", controller.UserInviteAppletQRCode) // 小程序分享二维码
|
user.POST("invite_applet_code", controller.UserInviteAppletQRCode) // 小程序分享二维码
|
||||||
|
@ -123,14 +127,14 @@ func ConfigAppRouter(r gin.IRouter) {
|
||||||
order.POST("express", controller.OrderExpress) // 订单物流
|
order.POST("express", controller.OrderExpress) // 订单物流
|
||||||
order.POST("express_company/list", controller.ExpressCompanyList) // 物流公司列表
|
order.POST("express_company/list", controller.ExpressCompanyList) // 物流公司列表
|
||||||
order.POST("order/wx_pay/success", controller.WXPaySuccess) // 微信支付成功
|
order.POST("order/wx_pay/success", controller.WXPaySuccess) // 微信支付成功
|
||||||
order.POST("cancel", controller.OrderCancel) // 订单取消
|
order.POST("cancel", controller.OrderCancel) // 取消租卡
|
||||||
|
|
||||||
order.Use(auth.UserAccessAuth) // TODO
|
order.Use(auth.UserAccessAuth) // TODO
|
||||||
order.POST("create", controller.OrderCreate) // 创建订单
|
order.POST("create", controller.RentCardOrderCreate) // 创建租卡
|
||||||
order.POST("pay", controller.OrderPay) // 订单支付
|
order.POST("pay", controller.OrderPay) // 租卡订单支付
|
||||||
order.POST("list", controller.OrderList) // 订单列表
|
order.POST("list", controller.RentCardOrderList) // 租卡订单列表
|
||||||
order.POST("revert", controller.OrderRevert) // 订单归还
|
order.POST("revert", controller.OrderRevert) // 租卡订单归还
|
||||||
order.POST("revert/cancel", controller.OrderRevertCancel) // 订单归还
|
order.POST("revert/cancel", controller.OrderRevertCancel) // 取消归还
|
||||||
//order.POST("express_fee/refund", controller.ExpressFeeRefund) // 物流费退款
|
//order.POST("express_fee/refund", controller.ExpressFeeRefund) // 物流费退款
|
||||||
|
|
||||||
order.POST("confirm_receipt", controller.ConfirmReceipt) // 订单确认收货
|
order.POST("confirm_receipt", controller.ConfirmReceipt) // 订单确认收货
|
||||||
|
@ -170,5 +174,14 @@ func ConfigAppRouter(r gin.IRouter) {
|
||||||
mall.POST("user/vm_record", controller.MallUserVmRecord) // 用户-积分记录
|
mall.POST("user/vm_record", controller.MallUserVmRecord) // 用户-积分记录
|
||||||
mall.POST("order/confirm_receipt", controller.MallGoodsOrderConfirmReceipt) // 用户-确认收货
|
mall.POST("order/confirm_receipt", controller.MallGoodsOrderConfirmReceipt) // 用户-确认收货
|
||||||
}
|
}
|
||||||
|
shoppingCart := api.Group("shopping_cart")
|
||||||
|
{
|
||||||
|
|
||||||
|
shoppingCart.Use(auth.UserAccessAuth)
|
||||||
|
shoppingCart.POST("list", controller.ShoppingCartList) // 详情
|
||||||
|
shoppingCart.POST("add", controller.ShoppingCartAdd) //
|
||||||
|
shoppingCart.POST("del", controller.ShoppingCartDel) //
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user