This commit is contained in:
li 2022-04-04 19:03:22 +08:00
parent d7be9e94f1
commit a8fdb04881
9 changed files with 1543 additions and 178 deletions

View File

@ -518,7 +518,6 @@ func PushWXPayNotice(c *gin.Context) {
logger.Error("err:", err)
}
} else if notify.Attach == wxpay.WxPayUpgradeMember {
record := &model.UserOpenMemberRecord{OpenNo: notify.OutTradeNo}
err := record.GetByOpenNo()
if err != nil {
@ -580,6 +579,25 @@ func PushWXPayNotice(c *gin.Context) {
logger.Error("err:", err)
return
}
} else if notify.Attach == wxpay.WxPayShareCardRetrieve {
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 {
// logger.Error("err:", err)
// return
//}
_, err = model.NewShareCardRetrieveQuerySet(model.DB).IDEq(record.OrderId).
GetUpdater().SetPayState(2).UpdateNum()
if err != nil {
logger.Error("update pay state err:", err)
}
}
logger.Debug("微信推动支付通知")

View File

@ -1,11 +1,14 @@
package controller
import (
"encoding/json"
"errors"
"fmt"
"github.com/codinl/go-logger"
"github.com/gin-gonic/gin"
"mh-server/lib/auth"
"mh-server/lib/status"
"mh-server/lib/wxpay"
"mh-server/model"
)
@ -300,18 +303,239 @@ func ShareCardRetrieveCreate(c *gin.Context) {
RespJson(c, status.Unauthorized, nil)
return
}
err := req.RetrieveCreate()
req.Uid = uc.Uid
user := model.GetUserByUid(uc.Uid)
if user == nil {
RespJson(c, status.Unauthorized, nil)
return
}
if user.MemberLevel != 2 && user.MemberLevel != 4 && user.MemberLevel != 5 {
logger.Error("user not is member err:")
RespJson(c, status.NotMember, nil)
return
}
req.Amount = 10 // TODO
retrieve, err := req.RetrieveCreate()
if err != nil {
logger.Error("share card retrieve create err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
if req.RetrieveCardType == 1 {
RespOK(c, nil)
return
}
//user := model.GetUserByUid(uc.Uid)
//if user == nil {
// RespJson(c, status.Unauthorized, nil)
// return
//}
webPay, err := wxpay.WebPay(retrieve.OrderSn, req.Amount, user.WxOpenID, "N", wxpay.WxPayShareCardRetrieve)
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: retrieve.OrderSn, OrderId: retrieve.ID, OrderType: 1}.Insert()
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
ret := map[string]interface{}{
"web_pay": webPay,
}
RespOK(c, ret)
return
}
func ShareCardRetrieveList(c *gin.Context) {
req := model.ShareCardRetrieveListReq{}
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
}
req.Uid = uc.Uid
list, totalPage, err := req.List()
if err != nil {
logger.Error("share card retrieve list err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
ret := map[string]interface{}{
"list": list,
"cur_page": req.Page,
"total_page": totalPage,
}
RespOK(c, ret)
return
}
func ShareCardRetrieveDetail(c *gin.Context) {
req := struct {
ShareCardRetrieveId uint32 `json:"share_card_retrieve_id"`
}{}
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
//}
//req.Uid = uc.Uid
info, err := model.GetShareCardRetrieveInfo(req.ShareCardRetrieveId)
if err != nil {
logger.Error("share card retrieve list err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
//ret := map[string]interface{}{
// "list": list,
// "cur_page": req.Page,
// "total_page": totalPage,
//}
RespOK(c, info)
return
}
func ShareCardRetrieveCancel(c *gin.Context) {
req := struct {
ShareCardRetrieveId uint32 `json:"share_card_retrieve_id"`
}{}
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
//}
//req.Uid = uc.Uid
//info, err := model.GetShareCardRetrieveInfo(req.ShareCardRetrieveId)
//if err != nil {
// logger.Error("share card retrieve list err:", err)
// RespJson(c, status.InternalServerError, nil)
// return
//}
var retrieve model.ShareCardRetrieve
err := model.NewShareCardRetrieveQuerySet(model.DB).IDEq(req.ShareCardRetrieveId).One(&retrieve)
if err != nil {
logger.Error("share card retrieve err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
var refundOrderSn string
if retrieve.RetrieveCardType == 2 {
refundOrderSn = model.GetShareCardRetrieveOrderSn()
err = model.UserOpenMemberRecord{Uid: uint32(retrieve.Uid), OpenNo: refundOrderSn, OrderId: retrieve.ID, OrderType: 2}.Insert()
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
orderRefund := wxpay.OrderRefund{
OutTradeNo: retrieve.OrderSn,
OutRefundNo: refundOrderSn,
NotifyUrl: "",
Amount: wxpay.OrderRefundAmount{
Refund: retrieve.PayAmount,
Total: retrieve.PayState,
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
}
}
begin := model.DB.Begin()
qs := model.NewShareCardRetrieveQuerySet(begin).IDEq(req.ShareCardRetrieveId).GetUpdater().
SetState(model.RetrieveStateCancel).SetPickupCode("已取消")
if refundOrderSn != "" {
qs = qs.SetRefundOrderSn(refundOrderSn)
}
_, err = qs.UpdateNum()
if err != nil {
logger.Error("update share card retrieve err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
_, err = model.NewShareCardRetrieveCardQuerySet(begin).ShareCardRetrieveIdEq(req.ShareCardRetrieveId).GetUpdater().
SetState(model.RetrieveStateCancel).UpdateNum()
if err != nil {
logger.Error("update share card retrieve card err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
err = begin.Commit().Error
if err != nil {
logger.Error("commit err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
//ret := map[string]interface{}{
//}
RespOK(c, nil)
return
}
func ShareCardRetrieveConfirm(c *gin.Context) {
req := struct {
ShareCardRetrieveId uint32 `json:"share_card_retrieve_id"`
}{}
if c.ShouldBindJSON(&req) != nil {
logger.Error("parameter err")
RespJson(c, status.BadRequest, nil)
return
}
begin := model.DB.Begin()
_, err := model.NewShareCardRetrieveQuerySet(begin).IDEq(req.ShareCardRetrieveId).GetUpdater().
SetState(model.RetrieveStateReceivedCard).UpdateNum()
if err != nil {
logger.Error("update share card retrieve err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
_, err = model.NewShareCardRetrieveCardQuerySet(begin).ShareCardRetrieveIdEq(req.ShareCardRetrieveId).GetUpdater().
SetState(model.RetrieveStateReceivedCard).UpdateNum()
if err != nil {
logger.Error("update share card retrieve card err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
err = begin.Commit().Error
if err != nil {
logger.Error("commit err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, nil)
return
}

View File

@ -40,6 +40,7 @@ const (
WxPayExchangeGoods = "exchange_goods" // 兑换商品
WxPayUpgradeMember = "upgrade_member" // 多级会员
WxPayMemberExpireDelay = "member_expire_delay" // 会员过期滞纳金
WxPayShareCardRetrieve = "share_card_retrieve" // 会员过期滞纳金
//NotifyUrl = "https://switch.deovo.com:8001/api/v1/wxpay/notice" // TODO 数据库配置 生产
//NotifyUrl = "https://dev.switch.deovo.com:8004/api/v1/wxpay/notice" // TODO 测试

File diff suppressed because it is too large Load Diff

View File

@ -112,6 +112,9 @@ func InitTestDB() {
&UserShareCardVm{},
&ShareCardDateVm{},
&ShareCardVmRecord{},
&ShareCardRetrieve{},
&ShareCardRetrieveCard{},
//&GameShareCardVm{},
)

View File

@ -543,6 +543,23 @@ func GetPickupCode() string {
}
func GetShareCardRetrievePickupCode() string {
for {
rand.Seed(time.Now().UnixNano())
code := fmt.Sprintf("%d", rand.Intn(1000000)+100000)
//count, err := NewOrderQuerySet(DB).PickupCodeEq(code).Count()
count, err := NewShareCardRetrieveQuerySet(DB).PickupCodeEq(code).Count()
if err != nil {
logger.Error("err:", err)
}
if count == 0 {
return code
}
}
//将时间戳设置成种子数
}
func (m *Order) Cancel() (bool, Order, error) {
var (
order Order

View File

@ -62,19 +62,20 @@ const (
// gen:qs
type UserShareCard struct {
Model
Uid uint32 `json:"uid" gorm:"index"`
SerialNumber string `json:"serial_number" gorm:"index"` // 编号
BillSn string `json:"bill_sn" gorm:"index"`
GameCardId uint32 `json:"game_card_id" gorm:"index"`
State string `json:"state" gorm:"index"`
GameCardGoodsId uint32 `json:"game_card_goods_id" gorm:"index"`
UserShareCardBillId uint32 `json:"user_share_card_bill_id" gorm:"index"`
ShareCardBillGameId uint32 `json:"share_card_bill_game_id" gorm:"index"`
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
ProfitState uint32 `json:"profit_state"` // 1-未生效 2-生效
TotalVm uint32 `json:"total_vm"` // 累计积分
SerialNumberRetrieve string `json:"serial_number_retrieve" gorm:"index"` // 收卡编号
GameCard GameCard `json:"game_card" gorm:"-"`
Uid uint32 `json:"uid" gorm:"index"`
SerialNumber string `json:"serial_number" gorm:"index"` // 编号
BillSn string `json:"bill_sn" gorm:"index"`
GameCardId uint32 `json:"game_card_id" gorm:"index"`
State string `json:"state" gorm:"index"`
GameCardGoodsId uint32 `json:"game_card_goods_id" gorm:"index"`
UserShareCardBillId uint32 `json:"user_share_card_bill_id" gorm:"index"`
ShareCardBillGameId uint32 `json:"share_card_bill_game_id" gorm:"index"`
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
ProfitState uint32 `json:"profit_state"` // 1-未生效 2-生效
TotalVm uint32 `json:"total_vm"` // 累计积分
RetrieveSerialNumber string `json:"retrieve_serial_number" gorm:"index"` // 收卡编号
RetrieveGameCardGoodsId uint32 `json:"retrieve_game_card_goods_id" gorm:"index"` // 收回卡id
GameCard GameCard `json:"game_card" gorm:"-"`
}
// gen:qs
@ -136,19 +137,25 @@ type ShareCardVmRecord struct {
// gen:qs
type ShareCardRetrieve struct {
Model
Uid uint32 `json:"uid" gorm:"index"`
State string `json:"state" gorm:"index"` // 1-暂无库存 2-待发卡 3-待取卡 4-已发卡 5-已收卡 6-已取消
RetrieveCardType uint32 `json:"retrieve_card_type" gorm:"index"` // 1-送卡 2-邮寄
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
ExpressCompany string `json:"express_company"` // 物流公司
ExpressCompanyNo string `json:"express_company_no"` // 物流公司编号
ExpressNo string `json:"express_no"` // 物流单号
StockRemovalTime time.Time `json:"stock_removal_time"` // 出库时间
StockTime time.Time `json:"stock_time"` // 入库时间
Remark string `json:"remark"`
Store Store `json:"store" gorm:"-"`
Uid uint32 `json:"uid" gorm:"index"`
State string `json:"state" gorm:"index"` // 1-暂无库存 2-待发卡 3-待取卡 4-已发卡 5-已收卡 6-已取消
RetrieveCardType uint32 `json:"retrieve_card_type" gorm:"index"` // 1-送卡门店 2-邮寄
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
ExpressCompany string `json:"express_company"` // 物流公司
ExpressCompanyNo string `json:"express_company_no"` // 物流公司编号
ExpressNo string `json:"express_no"` // 物流单号
StockRemovalTime time.Time `json:"stock_removal_time"` // 出库时间
StockTime time.Time `json:"stock_time"` // 入库时间
PayState uint32 `json:"pay_state"` // 1-未支付 2-已支付
PayAmount uint32 `json:"pay_amount"` // 支付金额
Remark string `json:"remark"`
OrderSn string `json:"order_sn" gorm:"index"` // 订单编号
AddressId uint32 `json:"address_id" gorm:"index"` // 收货地址
RefundOrderSn string `json:"refund_order_sn" gorm:"index"` // 订单编号退费
PickupCode string `json:"pickup_code"` // 取货码
Store Store `json:"store" gorm:"-"`
UserAddress UserAddress `json:"user_address" gorm:"-"`
ShareCardRetrieveCards []ShareCardRetrieveCard `json:"share_card_retrieve_cards" gorm:"-"`
//TotalVm uint32 `json:"total_vm"` // 累计积分
//ShareCardBillGameId uint32 `json:"share_card_bill_game_id" gorm:"index"`
//GameCardGoodsId uint32 `json:"game_card_goods_id" gorm:"index"`
@ -160,6 +167,8 @@ type ShareCardRetrieve struct {
}
const (
RetrieveStateInCheck = "in_check" // 待审核
RetrieveStateCheckLose = "check_lose" // 审核失败
RetrieveStateOutStock = "out_stock" // 暂无库存
RetrieveStateInSendCard = "in_send_card" // 待发卡
RetrieveStateInPickCard = "in_pick_card" // 待取卡
@ -171,23 +180,27 @@ const (
// gen:qs
type ShareCardRetrieveCard struct {
Model
ShareCardRetrieveId uint32 `json:"share_card_retrieve_id" gorm:"index"`
UserShareCardId uint32 `json:"user_share_card_id" gorm:"index"` // 用户共享卡收回
Uid uint32 `json:"uid" gorm:"index"`
SerialNumber string `json:"serial_number" gorm:"index"` // 编号
State string `json:"state" gorm:"index"` // 1-暂无库存 2-待发卡 3-待取卡 4-已发卡 5-已收卡 6-已取消
BillSn string `json:"bill_sn" gorm:"index"`
GameCardId uint32 `json:"game_card_id" gorm:"index"`
RetrieveCardType uint32 `json:"retrieve_card_type" gorm:"index"` // 1-送卡 2-邮寄
GameCardGoodsId uint32 `json:"game_card_goods_id" gorm:"index"`
UserShareCardBillId uint32 `json:"user_share_card_bill_id" gorm:"index"`
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
Remark string `json:"remark"`
GameCard GameCard `json:"game_card" gorm:"-"`
Store Store `json:"store" gorm:"-"`
ShareCardRetrieveId uint32 `json:"share_card_retrieve_id" gorm:"index"`
UserShareCardId uint32 `json:"user_share_card_id" gorm:"index"` // 用户共享卡收回
Uid uint32 `json:"uid" gorm:"index"`
SerialNumber string `json:"serial_number" gorm:"index"` // 编号
State string `json:"state" gorm:"index"` // 1-暂无库存 2-待发卡 3-待取卡 4-已发卡 5-已收卡 6-已取消
BillSn string `json:"bill_sn" gorm:"index"`
GameCardId uint32 `json:"game_card_id" gorm:"index"`
RetrieveCardType uint32 `json:"retrieve_card_type" gorm:"index"` // 1-送卡 2-邮寄
GameCardGoodsId uint32 `json:"game_card_goods_id" gorm:"index"`
UserShareCardBillId uint32 `json:"user_share_card_bill_id" gorm:"index"`
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
Remark string `json:"remark"`
RetrieveSerialNumber string `json:"retrieve_serial_number" gorm:"index"` // 收卡编号
RetrieveGameCardGoodsId uint32 `json:"retrieve_game_card_goods_id" gorm:"index"` // 收回卡id
GameCard GameCard `json:"game_card" gorm:"-"`
Store Store `json:"store" gorm:"-"`
ShareCardRetrieve ShareCardRetrieve `json:"share_card_retrieve" gorm:"-"`
//TotalVm uint32 `json:"total_vm"` // 累计积分
//ShareCardBillGameId uint32 `json:"share_card_bill_game_id" gorm:"index"`
// share_card_retrieve_card
}
func GetUserShareCardBillList(uid uint32, page, pageSize int, state string) ([]UserShareCardBill, int, error) {
@ -274,7 +287,7 @@ func UserShareCardBillListSetGame(list []UserShareCardBill) []UserShareCardBill
games[i].GameCard = v
}
}
for i, _ := range games {
billMap[games[i].UserShareCardBillId] = append(billMap[games[i].UserShareCardBillId], games[i])
}
@ -416,80 +429,310 @@ type ShareCardRetrieveCreateReq struct {
SerialNumbers []string `json:"serial_numbers"`
StoreId uint32 `json:"store_id"` // 门店id
RetrieveCardType uint32 `json:"retrieve_card_type"`
AddressId uint32 `json:"address_id"` // 收货地址
Amount uint32 `json:"amount"` // 金额
Uid uint32 `json:"uid"`
}
func (m *ShareCardRetrieveCreateReq) RetrieveCreate() error {
func (m *ShareCardRetrieveCreateReq) RetrieveCreate() (*ShareCardRetrieve, error) {
var userShareCards []UserShareCard
err := NewUserShareCardQuerySet(DB).SerialNumberIn(m.SerialNumbers...).All(&userShareCards)
if err != nil {
logger.Error("user share card err:", err)
return err
}
gameIds := make([]uint64, 0)
for i, _ := range userShareCards {
gameIds = append(gameIds, uint64(userShareCards[i].GameCardId))
return nil, err
}
//gameIds := make([]uint64, 0)
//for i, _ := range userShareCards {
// gameIds = append(gameIds, uint64(userShareCards[i].GameCardId))
//}
//var gameCardGoodsStocks []GameCardGoodsStock
//err = NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(m.StoreId)).GameCardIdIn(gameIds...).All(&gameCardGoodsStocks)
//if err != nil {
// logger.Error("game card goods stock err:", err)
// return err
//}
var gameGoods []GameCardGoods
err = NewGameCardGoodsQuerySet(DB).GameCardIdIn(gameIds...).StatusEq(1).OrderAscByID().All(&gameGoods)
if err != nil && err != RecordNotFound {
logger.Error("game card goods err:", err)
return err
}
//state := RetrieveStateInSendCard
//for i, _ := range gameGoods {
// if gameGoods[i].Status == {
// }
//var gameGoods []GameCardGoods
//err = NewGameCardGoodsQuerySet(DB).GameCardIdIn(gameIds...).StatusEq(1).OrderAscByID().All(&gameGoods)
//if err != nil && err != RecordNotFound {
// logger.Error("game card goods err:", err)
// return err
//}
payState := uint32(1)
if m.RetrieveCardType == 1 {
payState = 2
}
begin := DB.Begin()
retrieve := &ShareCardRetrieve{
Uid: m.Uid,
RetrieveCardType: m.RetrieveCardType,
StoreId: m.StoreId,
State: RetrieveStateInCheck,
OrderSn: GetShareCardRetrieveOrderSn(),
PayState: payState,
AddressId: m.AddressId,
PayAmount: m.Amount,
PickupCode: GetShareCardRetrievePickupCode(),
}
err = begin.Create(&retrieve).Error
if err != nil {
logger.Error("create share card retrieve err:", err)
return err
return retrieve, err
}
for i, _ := range userShareCards {
ShareCardRetrieveCard{
card := &ShareCardRetrieveCard{
ShareCardRetrieveId: retrieve.ID,
UserShareCardId: userShareCards[i].ID,
Uid: m.Uid,
SerialNumber: userShareCards[i].SerialNumber,
State: "",
BillSn: "",
GameCardId: 0,
RetrieveCardType: 0,
GameCardGoodsId: 0,
UserShareCardBillId: 0,
StoreId: 0,
Remark: "",
GameCard: GameCard{},
Store: Store{},
State: RetrieveStateInCheck,
BillSn: userShareCards[i].BillSn,
GameCardId: userShareCards[i].GameCardId,
RetrieveCardType: m.RetrieveCardType,
GameCardGoodsId: userShareCards[i].GameCardGoodsId,
UserShareCardBillId: userShareCards[i].ShareCardBillGameId,
StoreId: m.StoreId,
}
err = begin.Create(&card).Error
if err != nil {
logger.Error("create share card retrieve card err:", err)
return retrieve, err
}
}
return nil
err = begin.Commit().Error
if err != nil {
logger.Error("commit err:", err)
return retrieve, err
}
return retrieve, nil
}
func GetUserCardBySerialNumber(serialNumber string, list []GameCardGoods) (*GameCardGoods, bool) {
//func GetUserCardBySerialNumber(serialNumber string, list []GameCardGoods) (*GameCardGoods, bool) {
// for i, _ := range list {
// if list[i].SerialNumber == serialNumber {
// return &list[i], true
// }
// }
// return nil, false
//}
//func SetUserCardSerialNumber(storeId uint32, list []UserShareCard) ([]UserShareCard, error) {
// for i, _ := range list {
// var goods GameCardGoods
// err := NewGameCardGoodsQuerySet(DB).StoreIdEq(uint64(storeId)).SerialNumberEq(list[i].SerialNumber).
// StatusEq(1).One(&goods)
// if err != nil && err != RecordNotFound {
// logger.Error("game card goods err:", err)
// return list, err
// }
// if goods.ID == list[i].GameCardGoodsId {
// list[i].SerialNumber = goods.SerialNumber
// list[i].GameCardGoodsIdRetrieve = goods.ID
// }
// }
// return list, nil
//}
//
//func SetRandomCardSerialNumber(storeId uint32, list []UserShareCard) ([]UserShareCard, error) {
// for i, _ := range list {
// var goods GameCardGoods
// err := NewGameCardGoodsQuerySet(DB).StoreIdEq(uint64(storeId)).GameCardIdEq(uint64(list[i].GameCardId)).
// StatusEq(1).OrderAscByID().Limit(1).One(&goods)
// if err != nil && err != RecordNotFound {
// logger.Error("game card goods err:", err)
// return list, err
// }
// list[i].SerialNumber = goods.SerialNumber
// list[i].GameCardGoodsIdRetrieve = goods.ID
// }
// return list, nil
//}
type ShareCardRetrieveListReq struct {
Uid uint32 `json:"uid"`
State string `json:"state"`
Page int `json:"cur_page"`
PageSize int `json:"page_size"`
}
func (m *ShareCardRetrieveListReq) List() ([]ShareCardRetrieve, int, error) {
var retrieveCards []ShareCardRetrieve
qs := NewShareCardRetrieveQuerySet(DB).PayStateEq(2)
if m.State != "" {
qs = qs.StateEq(m.State)
}
page := m.Page - 1
if page < 0 {
page = 0
}
if m.PageSize == 0 {
m.PageSize = 10
}
count, err := qs.Count()
if err != nil {
logger.Error("user share card bill count err:", err)
return retrieveCards, 0, err
}
totalPage := count/m.PageSize + 1
err = qs.OrderDescByID().Offset(page * m.PageSize).Limit(m.PageSize).All(&retrieveCards)
if err != nil && err != RecordNotFound {
logger.Error("user share card bill err:", err)
return retrieveCards, 0, err
}
if len(retrieveCards) == 0 {
return retrieveCards, totalPage, nil
}
retrieveCards = ShareCardRetrieveListSetGames(retrieveCards)
return retrieveCards, totalPage, nil
}
func ShareCardRetrieveListSetGames(list []ShareCardRetrieve) []ShareCardRetrieve {
gameIds := make([]uint32, 0, len(list))
retrieveIds := make([]uint32, 0, len(list))
for i, _ := range list {
if list[i].SerialNumber == serialNumber {
return &list[i], true
//gameIds = append(gameIds, list[i].GameCardId)
retrieveIds = append(retrieveIds, list[i].ID)
}
if len(retrieveIds) == 0 {
return list
}
var cards []ShareCardRetrieveCard
err := NewShareCardRetrieveCardQuerySet(DB).ShareCardRetrieveIdIn(retrieveIds...).All(&cards)
if err != nil {
logger.Error("share card retrieve card err:", err)
return list
}
for i, _ := range cards {
gameIds = append(gameIds, cards[i].GameCardId)
}
if len(gameIds) == 0 {
logger.Error("game ids err:", err)
return list
}
gameMap, err := GameCardMap(gameIds)
if err != nil {
logger.Error("game card map err:", err)
return list
}
for i, _ := range cards {
v, ok := gameMap[cards[i].GameCardId]
if ok {
cards[i].GameCard = v
}
}
return nil, false
cardsMap := make(map[uint32][]ShareCardRetrieveCard, 0)
for i, _ := range cards {
cardsMap[cards[i].ShareCardRetrieveId] = append(
cardsMap[cards[i].ShareCardRetrieveId], cards[i])
}
//retrieveMap, err := GetShareCardRetrieveMap(retrieveIds)
//if err != nil {
// logger.Error("get share card retrieve map err:", err)
// return list
//}
for i, _ := range list {
v, ok1 := cardsMap[list[i].ID]
if ok1 {
list[i].ShareCardRetrieveCards = v
}
//retrieve, ok2 := retrieveMap[list[i].ShareCardRetrieveId]
//if ok2 {
// list[i].ShareCardRetrieve = retrieve
//}
}
return list
}
func ShareCardRetrieveCardListSetGame(list []ShareCardRetrieveCard) []ShareCardRetrieveCard {
gameIds := make([]uint32, 0, len(list))
retrieveIds := make([]uint32, 0, len(list))
for i, _ := range list {
gameIds = append(gameIds, list[i].GameCardId)
retrieveIds = append(retrieveIds, list[i].ShareCardRetrieveId)
}
cardMap, err := GameCardMap(gameIds)
if err != nil {
logger.Error("game card map err:", err)
return list
}
for i, _ := range list {
v, ok1 := cardMap[list[i].GameCardId]
if ok1 {
list[i].GameCard = v
}
}
return list
}
func GetShareCardRetrieveMap(ids []uint32) (map[uint32]ShareCardRetrieve, error) {
retrieveMap := make(map[uint32]ShareCardRetrieve, 0)
if len(ids) == 0 {
return retrieveMap, nil
}
var retrieves []ShareCardRetrieve
err := NewShareCardRetrieveQuerySet(DB).IDIn(ids...).All(&retrieves)
if err != nil {
logger.Error("share card retrieve err:", err)
return retrieveMap, err
}
for i, _ := range retrieves {
retrieveMap[retrieves[i].ID] = retrieves[i]
}
return retrieveMap, nil
}
func GetShareCardRetrieveInfo(retrieveId uint32) (ShareCardRetrieve, error) {
var retrieve ShareCardRetrieve
err := NewShareCardRetrieveQuerySet(DB).IDEq(retrieveId).One(&retrieve)
if err != nil {
logger.Error("share card retrieve err:", err)
return retrieve, err
}
var cards []ShareCardRetrieveCard
err = NewShareCardRetrieveCardQuerySet(DB).ShareCardRetrieveIdEq(retrieveId).All(&cards)
if err != nil {
logger.Error("share card retrieve card err:", err)
return retrieve, err
}
retrieve.ShareCardRetrieveCards = ShareCardRetrieveCardListSetGame(cards)
err = retrieve.SetStore()
if err != nil {
logger.Error("store err:", err)
return retrieve, err
}
err = retrieve.SetUserAddress()
if err != nil {
logger.Error("user address err:", err)
return retrieve, err
}
return retrieve, nil
}
func (m *ShareCardRetrieve) SetStore() error {
err := NewStoreQuerySet(DB).IDEq(m.StoreId).One(&m.Store)
if err != nil && err != RecordNotFound {
logger.Error("set store err:", err)
return err
}
return nil
}
func (m *ShareCardRetrieve) SetUserAddress() error {
err := NewUserAddressQuerySet(DB).IDEq(m.AddressId).One(&m.UserAddress)
if err != nil && err != RecordNotFound {
logger.Error("set store err:", err)
return err
}
return nil
}
// 用户收回卡

View File

@ -204,7 +204,7 @@ type UserOpenMemberRecord struct {
Uid uint32 `json:"uid"`
OpenNo string `json:"open_no" gorm:"index"`
OrderId uint32 `json:"order_id"`
OrderType uint32 `json:"order_type"` // 1-物流支付 2-取消物流租卡 3-滞纳金
OrderType uint32 `json:"order_type"` // 1-物流支付 2-取消物流租卡 3-滞纳金 4-收回卡
MemberLevel uint32 `json:"member_level"`
MemberExpire time.Time `json:"member_expire"` // 会员到期时间
}
@ -423,6 +423,21 @@ func GetShareCardBillSn() string {
return billSn
}
func GetShareCardRetrieveOrderSn() string {
var orderSn string
for {
orderSn = utils.GetSerialNo32HEXString()
count, err := NewShareCardRetrieveQuerySet(DB).OrderSnEq(orderSn).Count()
if err != nil {
logger.Error("err:", err)
}
if count == 0 {
break
}
}
return orderSn
}
func (m *User) Edit() {
err := DB.Save(m).Error
if err != nil {

View File

@ -195,7 +195,11 @@ func ConfigAppRouter(r gin.IRouter) {
shareCard.POST("bill/my_card", controller.UserShareCardMyCard) // 我的共享卡
shareCard.POST("user_card_vm", controller.UserShareCardVmRecord) // 我的共享卡积分记录
shareCard.POST("retrieve/add", controller.ShareCardRetrieveCreate) // 我的共享卡收回
shareCard.POST("retrieve/add", controller.ShareCardRetrieveCreate) // 我的共享卡收回
shareCard.POST("retrieve_card/cancel", controller.ShareCardRetrieveCancel) // 我的共享卡收回取消
shareCard.POST("retrieve_card/list", controller.ShareCardRetrieveList) // 我的共享卡收回审核
shareCard.POST("retrieve_card/detail", controller.ShareCardRetrieveDetail) // 我的共享卡收回审核
shareCard.POST("retrieve_card/confirm", controller.ShareCardRetrieveConfirm) // 我的共享卡收回审核
//shoppingCart.POST("del", controller.ShoppingCartDel) //