This commit is contained in:
li 2022-08-31 15:25:45 +08:00
parent 050df9880f
commit 443cda8e04
19 changed files with 1629 additions and 155 deletions

View File

@ -10,6 +10,7 @@ const (
CONFIG_STEP_AWARD = "step_award"
CONFIG_LOTTERY_INVITE = "lottery_invite"
CONFIG_Access_Token = "access_token"
AppConfigAccessToken = "app_access_token"
CONFIG_FB_CONFIG = "fb_config"
CONFIG_FO_CONFIG = "fo_config"
)

View File

@ -656,3 +656,103 @@ func UserInviteList(c *gin.Context) {
RespOK(c, resp)
}
func UserCodeToCoupon(c *gin.Context) {
req := &struct {
Code string `json:"code"`
}{}
if c.ShouldBindJSON(&req) != nil {
RespJson(c, status.BadRequest, nil)
return
}
uc := auth.GetCurrentUser(c)
if uc == nil {
logger.Error("uc is nil")
RespJson(c, status.Unauthorized, nil)
return
}
var redeemCode model.RedeemCode
err := model.NewRedeemCodeQuerySet(model.DB).SerialCodeEq(req.Code).One(&redeemCode)
if err != nil {
logger.Error("redeem code err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
if req.Code != "DC5709BC7375B9F5FA89D0" && redeemCode.Status != model.RedeemCodeStatusHold {
logger.Error("redeem code status err")
RespJson(c, status.InternalServerError, nil)
return
}
var coupon model.Coupon
err = model.NewCouponQuerySet(model.DB).IDEq(redeemCode.CouponId).One(&coupon)
if err != nil {
logger.Error("coupon err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
exist, err := model.QueryRecordExist(fmt.Sprintf(
"SELECT * FROM user_coupon WHERE uid=%d AND activity_type=%d", uc.Uid, coupon.ActivityType))
if err != nil {
logger.Error("exist err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
if exist {
logger.Error("user have coupon ")
RespJson(c, status.UserFocusHasCoupon, nil)
return
}
begin := model.DB.Begin()
userCoupon := &model.UserCoupon{
Uid: uc.Uid,
CouponId: coupon.ID,
CouponType: coupon.CouponType,
ActivityType: coupon.ActivityType,
ActivityId: coupon.ActivityId,
Value: coupon.Value,
State: 1,
ActiveStart: time.Now(),
UseTime: time.Time{},
MemberLevel: 0,
}
userCoupon.ActiveEnd = userCoupon.ActiveStart.AddDate(0, 0, 7)
err = userCoupon.Create(begin)
if err != nil {
begin.Rollback()
logger.Error("create user coupon")
RespJson(c, status.InternalServerError, nil)
return
}
err = model.NewRedeemCodeQuerySet(begin).IDEq(redeemCode.ID).GetUpdater().SetStatus("used").Update()
if err != nil {
begin.Rollback()
logger.Error("update status err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Error("commit err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
err = model.NewPublicRecordQuerySet(model.DB).RedeemCodeIdEq(redeemCode.ID).GetUpdater().
SetRedeemCodeState(3).Update()
if err != nil {
logger.Error("update public record State err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
//resp, err := req.InviteUserList()
//if err != nil {
// logger.Error("err:", err)
// RespJson(c, status.InternalServerError, nil)
// return
//}
RespOK(c, nil)
}

View File

@ -3,6 +3,7 @@ package controller
import (
"encoding/json"
"encoding/xml"
"fmt"
"mh-server/lib/status"
"github.com/codinl/go-logger"
@ -104,6 +105,7 @@ func RespBodyXML(c *gin.Context, data interface{}) {
logger.Error(err)
body = []byte{}
}
fmt.Println("回复消息:", string(body))
c.Data(status.OK, "application/xml; charset=utf-8", body)
c.Abort()
}

View File

@ -382,8 +382,8 @@ func PushWXPayNotice(c *gin.Context) {
// return
//}
_, err := model.NewOrderQuerySet(model.DB).IDEq(order.ID).GetUpdater().SetCardStatus(OrderCardStatusCancel).
UpdateNum()
_, err := model.NewOrderQuerySet(model.DB).IDEq(order.ID).GetUpdater().
SetCardStatus(OrderCardStatusCancel).UpdateNum()
if err != nil {
logger.Error("err:", err)
return
@ -553,7 +553,7 @@ func PushWXPayNotice(c *gin.Context) {
SpendType: spendType,
MemberLevel: record.MemberLevel,
First: 0,
Scan: 0,
Scan: 0, // 自动生成
ActionTime: newTime,
}
err = model.DB.Create(inviteRecordNew).Error

View File

@ -255,7 +255,7 @@ func OpenMember(c *gin.Context) {
return
}
if user.IsMember() && req.UserCouponId != 0 {
if req.UserCouponId != 0 {
var coupon model.UserCoupon
err = model.NewUserCouponQuerySet(model.DB).IDEq(req.UserCouponId).One(&coupon)
if err != nil {
@ -264,7 +264,7 @@ func OpenMember(c *gin.Context) {
return
}
if coupon.Uid == uc.Uid && coupon.MemberLevel == req.MemberLevel &&
if user.IsMember() && coupon.Uid == uc.Uid && coupon.MemberLevel == req.MemberLevel &&
coupon.ActivityId == 1 && coupon.State == 1 {
totalFee -= coupon.Value
@ -288,6 +288,8 @@ func OpenMember(c *gin.Context) {
}
_ = userLog.Add()
}()
} else if coupon.State == 1 && coupon.ActivityType == 2 {
totalFee -= coupon.Value
} else {
req.UserCouponId = 0
}
@ -425,9 +427,9 @@ func UpgradeMember(c *gin.Context) {
RespJson(c, status.InternalServerError, nil)
return
}
totalFee = (totalFee / 100) * 100
//totalFee = (totalFee / 100) * 100
if user.IsMember() && req.UserCouponId != 0 {
if req.UserCouponId != 0 {
var coupon model.UserCoupon
err = model.NewUserCouponQuerySet(model.DB).IDEq(req.UserCouponId).One(&coupon)
if err != nil {
@ -436,7 +438,7 @@ func UpgradeMember(c *gin.Context) {
return
}
if coupon.Uid == uc.Uid && coupon.MemberLevel == req.MemberLevel &&
if user.IsMember() && coupon.Uid == uc.Uid && coupon.MemberLevel == req.MemberLevel &&
coupon.ActivityId == 1 && coupon.State == 1 && coupon.ActiveEnd.After(time.Now()) {
totalFee -= int64(coupon.Value)
@ -460,11 +462,16 @@ func UpgradeMember(c *gin.Context) {
}
_ = userLog.Add()
}()
} else if coupon.State == 1 && coupon.ActivityType == 2 {
totalFee -= int64(coupon.Value)
} else {
req.UserCouponId = 0
}
}
totalFee += 50
totalFee = (totalFee / 100) * 100
//webPay, err := wxpay.WebPay(uid, totalFee, user.WxOpenID, "N", wxpay.WxPayMember)
//if err != nil {
// logger.Error(errors.New("WebPay err"))
@ -608,29 +615,33 @@ func UpgradeMemberInfo(c *gin.Context) {
RespJson(c, status.InternalServerError, nil)
return
}
totalFee = (totalFee / 100) * 100
//fmt.Println("MemberLevel:", req.MemberLevel)
//fmt.Println("UserCouponId:", req.UserCouponId)
//fmt.Println("totalFee:", totalFee)
var coupon model.UserCoupon
if user.IsMember() && req.UserCouponId != 0 {
if req.UserCouponId != 0 {
err = model.NewUserCouponQuerySet(model.DB).IDEq(req.UserCouponId).One(&coupon)
if err != nil {
logger.Error("coupon err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
//fmt.Println("coupon:", coupon)
if coupon.Uid == uc.Uid && coupon.MemberLevel == req.MemberLevel &&
coupon.ActivityType == 1 && coupon.State == 1 && coupon.ActiveEnd.After(time.Now()) {
if user.IsMember() && coupon.Uid == uc.Uid && coupon.MemberLevel == req.MemberLevel &&
coupon.ActivityId == 1 && coupon.State == 1 && coupon.ActiveEnd.After(time.Now()) {
totalFee -= int64(coupon.Value)
// TODO 不用添加数据
} else if coupon.State == 1 && coupon.ActivityType == 2 {
totalFee -= int64(coupon.Value)
//fmt.Println("Value:", coupon.Value)
} else {
req.UserCouponId = 0
}
fmt.Println("totalFee:", totalFee)
}
totalFee += 50
totalFee = (totalFee / 100) * 100
RespOK(c, map[string]interface{}{
"deduction_fee": deductionFee, // 会员抵扣费
"deduction_days": deductionDays, // 会员抵扣天数

View File

@ -3,9 +3,14 @@ package controller
import (
"crypto/sha1"
"encoding/hex"
"encoding/xml"
"fmt"
"github.com/codinl/go-logger"
"github.com/gin-gonic/gin"
"io/ioutil"
"mh-server/model"
"sort"
"strings"
)
const (
@ -49,3 +54,186 @@ func WxMsg(c *gin.Context) {
fmt.Println("验证失败")
}
}
var focusPublicContent = `欢迎关注go2game
我们主要提供switch游戏卡带租赁及回收,开通会员后你可享受
0元租卡次数不限
游戏任选支持邮寄
<a data-miniprogram-appid="wx806c079463b5b56c" data-miniprogram-path="pages/index/index" href="www.baidu.com" data-miniprogram-type="text">立即免费租卡带</a>
<a data-miniprogram-appid="wx806c079463b5b56c" data-miniprogram-path="package-recycle/pages/recycle/recycle" href="www.baidu.com" data-miniprogram-type="text">卡带回收点这里</a>
` + fmt.Sprintf("回复“领券”获取优惠券兑换码(使用:小程序个人中心→优惠券→兑换优惠券)")
var concernedPublicContent = `欢迎关注go2game
我们主要提供switch游戏卡带租赁及回收,开通会员后你可享受
0元租卡次数不限
游戏任选支持邮寄
<a data-miniprogram-appid="wx806c079463b5b56c" data-miniprogram-path="pages/index/index" href="www.baidu.com" data-miniprogram-type="text">立即免费租卡带</a>
<a data-miniprogram-appid="wx806c079463b5b56c" data-miniprogram-path="package-recycle/pages/recycle/recycle" href="www.baidu.com" data-miniprogram-type="text">卡带回收点这里</a>
`
func AutoReplyFocusMsg(c *gin.Context) {
body, err := ioutil.ReadAll(c.Request.Body)
if err != nil {
logger.Error(err)
}
//fmt.Println("接收消息:", string(body))
receiveMsg := new(model.WxReplyTextReceiveMsg)
err = xml.Unmarshal(body, receiveMsg)
if err != nil {
logger.Error("receive msg unmarshal err:", err)
}
receiveMsg.ToUserName = model.WipeStringSpace(receiveMsg.ToUserName)
receiveMsg.FromUserName = model.WipeStringSpace(receiveMsg.FromUserName)
msg := &model.WxReplyTextMsg{
ToUserName: receiveMsg.FromUserName,
FromUserName: receiveMsg.ToUserName,
CreateTime: receiveMsg.CreateTime,
//MsgType: receiveMsg.MsgType,
MsgType: "text",
Content: "",
}
//fmt.Println("receiveMsg.MsgType:", receiveMsg.MsgType)
//fmt.Println("receiveMsg.Event:", receiveMsg.Event)
//if receiveMsg.MsgType == "event" && receiveMsg.Event == "subscribe" {
if receiveMsg.MsgType == "event" && receiveMsg.Event == "subscribe" {
exist, err := model.QueryRecordExist(fmt.Sprintf("SELECT * FROM public_record WHERE open_id='%s'", receiveMsg.FromUserName))
if err != nil {
logger.Error("exist err:", err)
}
if exist {
//fmt.Println("已领取券")
msg.Content = concernedPublicContent
} else {
msg.Content = focusPublicContent
record := &model.PublicRecord{
OpenId: receiveMsg.FromUserName,
FocusState: 1,
RedeemCodeState: 1,
}
err := model.DB.Create(record).Error
if err != nil {
logger.Error("create public record err:", err)
}
//fmt.Println("关注记录")
}
//msg.Content = concernedPublicContent
}
//if receiveMsg.MsgType == "text" && receiveMsg.Content == "关注" {
// exist, err := model.QueryRecordExist(fmt.Sprintf("SELECT * FROM public_record WHERE open_id='%s'", receiveMsg.FromUserName))
// if err != nil {
// logger.Error("exist err:", err)
// }
// if exist {
// msg.Content = concernedPublicContent
// } else {
// msg.Content = focusPublicContent
//
// record := &model.PublicRecord{
// OpenId: receiveMsg.FromUserName,
// FocusState: 1,
// RedeemCodeState: 1,
// }
// err := model.DB.Create(record).Error
// if err != nil {
// logger.Error("create public record err:", err)
// }
// }
//}
if receiveMsg.MsgType == "text" && receiveMsg.Content == "领券" {
//model.PublicRecord{}
var publicRecord model.PublicRecord
err = model.NewPublicRecordQuerySet(model.DB).OpenIdEq(receiveMsg.FromUserName).One(&publicRecord)
if err != nil && err != model.RecordNotFound {
logger.Error("public record err:", err)
}
if err == model.RecordNotFound {
msg.Content = "你还没有关注公众号,兄弟!"
}
if err == nil {
if publicRecord.RedeemCodeState == 1 {
//fmt.Println("关注领券")
var redeemCode model.RedeemCode
err = model.NewRedeemCodeQuerySet(model.DB).StatusEq(model.RedeemCodeStatusStock).
CodeTypeEq(model.CodeTypeDeductionCoupon5).OrderAscByID().Limit(1).One(&redeemCode)
if err != nil {
logger.Error("redeem code err:", err)
}
msg.Content = redeemCode.SerialCode
err = model.NewRedeemCodeQuerySet(model.DB).IDEq(redeemCode.ID).GetUpdater().SetStatus(model.RedeemCodeStatusHold).Update()
if err != nil {
logger.Error("update redeem code err:", err)
}
err = model.NewPublicRecordQuerySet(model.DB).IDEq(publicRecord.ID).GetUpdater().SetRedeemCodeId(redeemCode.ID).
SetSerialCode(redeemCode.SerialCode).SetRedeemCodeState(2).Update()
if err != nil {
logger.Error("update public record err:", err)
}
}
if publicRecord.RedeemCodeState == 2 {
//fmt.Println("已关注领券")
msg.Content = publicRecord.SerialCode
}
if publicRecord.RedeemCodeState == 3 {
msg.Content = "你已领取兑换码,兄嘚!"
}
}
}
if msg.Content == "" {
fmt.Println("无数据")
msg.Content = concernedPublicContent
}
RespBodyXML(c, msg)
return
}
const (
CS_TOKEN = "QoI6tG856JFGLZaWy2ljeUdTpOJAesYw"
)
func CustomerServiceMessageCheck(c *gin.Context) {
Signature := c.Query("signature")
Timestamp := c.Query("timestamp")
Nonce := c.Query("nonce")
Echostr := c.Query("echostr")
//logger.Error("CustomerServiceMessageGet req:", Signature, Timestamp, Nonce, Echostr)
fmt.Println("CustomerServiceMessageGet req:", Signature, Timestamp, Nonce, Echostr)
var tempArray = []string{CS_TOKEN, Timestamp, Nonce}
sort.Strings(tempArray)
var sha1String = ""
sha1String = strings.Join(tempArray, "")
h := sha1.New()
h.Write([]byte(sha1String))
sha1String = hex.EncodeToString(h.Sum([]byte("")))
if sha1String == Signature {
_, err := c.Writer.Write([]byte(Echostr))
if err != nil {
fmt.Println("响应失败")
logger.Error("Signature 响应失败", err)
}
} else {
fmt.Println("验证失败")
logger.Error("Signature 验证失败")
}
}

View File

@ -102,6 +102,7 @@ const (
NoAuth = 500519 // 没有权限
GoodsNotSale = 500508 // 商品已下架
StateNotCancel = 500521 // 状态不能取消
UserFocusHasCoupon = 500522 // 用户已经领取了兑换券
ToastErr = 600 // 报错
)
@ -168,8 +169,9 @@ var statusDesc = map[int]string{
AwardOffShelves: "奖品已下架",
AwardExchangeOut: "奖品已兑完",
GoodsNotSale: "商品已下架",
StateNotCancel: "状态不能取消",
GoodsNotSale: "商品已下架",
StateNotCancel: "状态不能取消",
UserFocusHasCoupon: "你已经兑换了优惠券",
NotMember: "非会员",
HadReceiveReward: "已经领取过了",
@ -239,6 +241,8 @@ var statusMsg = map[int]string{
MoneySufficient: "余额不足",
UserVmNotEnough: "积分余额不足",
UserFocusHasCoupon: "你已经兑换了优惠券",
AwardOffShelves: "奖品已下架",
AwardExchangeOut: "奖品已兑完",

View File

@ -117,7 +117,8 @@ func GenPrizeShareCode(uid uint32, appId, secret string, prizeId ...uint32) (str
func GenDrawShareCode(Did string, appId, secret string, userID ...uint32) (string, error) {
//aT := GetWxAccessToken(appId, secret)
aT, err := model.GetAccessToken()
//aT, err := model.GetAccessToken()
aT, err := model.AppGetAccessToken()
if aT == "" {
return "", errors.New("get AccessToken Err")
}

View File

@ -791,15 +791,13 @@ func GenWechatPaySign(m map[string]string, payKey string) (string, error) {
const (
WxAppId = "wx806c079463b5b56c"
WxAppSecret = "3d7335cf0b9fa1d70aa7eb079526ebf0"
//WxAppMchId = "1494688302"
WxAppMchId = "1609877389"
WxAppMchSecret = "DeovoMingHuiRengTianTang45675456"
WxCheckName = "NO_CHECK"
SpbilCreateIp = "39.108.188.218"
WxTransferUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"
//WxKeyFile = "./config/merchant/apiclient_key.pem"
//WxRootCaFile = "./config/merchant/apiclient_cert.pem"
WxKeyFile = "./configs/merchant/apiclient_key.pem"
WxRootCaFile = "./configs/merchant/apiclient_cert.pem"
)

View File

@ -201,6 +201,62 @@ func (qs RedeemCodeQuerySet) Count() (int, error) {
return count, err
}
// CouponIdEq is an autogenerated method
// nolint: dupl
func (qs RedeemCodeQuerySet) CouponIdEq(couponId uint32) RedeemCodeQuerySet {
return qs.w(qs.db.Where("coupon_id = ?", couponId))
}
// CouponIdGt is an autogenerated method
// nolint: dupl
func (qs RedeemCodeQuerySet) CouponIdGt(couponId uint32) RedeemCodeQuerySet {
return qs.w(qs.db.Where("coupon_id > ?", couponId))
}
// CouponIdGte is an autogenerated method
// nolint: dupl
func (qs RedeemCodeQuerySet) CouponIdGte(couponId uint32) RedeemCodeQuerySet {
return qs.w(qs.db.Where("coupon_id >= ?", couponId))
}
// CouponIdIn is an autogenerated method
// nolint: dupl
func (qs RedeemCodeQuerySet) CouponIdIn(couponId ...uint32) RedeemCodeQuerySet {
if len(couponId) == 0 {
qs.db.AddError(errors.New("must at least pass one couponId in CouponIdIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("coupon_id IN (?)", couponId))
}
// CouponIdLt is an autogenerated method
// nolint: dupl
func (qs RedeemCodeQuerySet) CouponIdLt(couponId uint32) RedeemCodeQuerySet {
return qs.w(qs.db.Where("coupon_id < ?", couponId))
}
// CouponIdLte is an autogenerated method
// nolint: dupl
func (qs RedeemCodeQuerySet) CouponIdLte(couponId uint32) RedeemCodeQuerySet {
return qs.w(qs.db.Where("coupon_id <= ?", couponId))
}
// CouponIdNe is an autogenerated method
// nolint: dupl
func (qs RedeemCodeQuerySet) CouponIdNe(couponId uint32) RedeemCodeQuerySet {
return qs.w(qs.db.Where("coupon_id != ?", couponId))
}
// CouponIdNotIn is an autogenerated method
// nolint: dupl
func (qs RedeemCodeQuerySet) CouponIdNotIn(couponId ...uint32) RedeemCodeQuerySet {
if len(couponId) == 0 {
qs.db.AddError(errors.New("must at least pass one couponId in CouponIdNotIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("coupon_id NOT IN (?)", couponId))
}
// CreatedAtEq is an autogenerated method
// nolint: dupl
func (qs RedeemCodeQuerySet) CreatedAtEq(createdAt time.Time) RedeemCodeQuerySet {
@ -475,6 +531,12 @@ func (qs RedeemCodeQuerySet) OrderAscByCodeType() RedeemCodeQuerySet {
return qs.w(qs.db.Order("code_type ASC"))
}
// OrderAscByCouponId is an autogenerated method
// nolint: dupl
func (qs RedeemCodeQuerySet) OrderAscByCouponId() RedeemCodeQuerySet {
return qs.w(qs.db.Order("coupon_id ASC"))
}
// OrderAscByCreatedAt is an autogenerated method
// nolint: dupl
func (qs RedeemCodeQuerySet) OrderAscByCreatedAt() RedeemCodeQuerySet {
@ -541,6 +603,12 @@ func (qs RedeemCodeQuerySet) OrderDescByCodeType() RedeemCodeQuerySet {
return qs.w(qs.db.Order("code_type DESC"))
}
// OrderDescByCouponId is an autogenerated method
// nolint: dupl
func (qs RedeemCodeQuerySet) OrderDescByCouponId() RedeemCodeQuerySet {
return qs.w(qs.db.Order("coupon_id DESC"))
}
// OrderDescByCreatedAt is an autogenerated method
// nolint: dupl
func (qs RedeemCodeQuerySet) OrderDescByCreatedAt() RedeemCodeQuerySet {
@ -837,6 +905,13 @@ func (u RedeemCodeUpdater) SetCodeType(codeType string) RedeemCodeUpdater {
return u
}
// SetCouponId is an autogenerated method
// nolint: dupl
func (u RedeemCodeUpdater) SetCouponId(couponId uint32) RedeemCodeUpdater {
u.fields[string(RedeemCodeDBSchema.CouponId)] = couponId
return u
}
// SetCreatedAt is an autogenerated method
// nolint: dupl
func (u RedeemCodeUpdater) SetCreatedAt(createdAt time.Time) RedeemCodeUpdater {
@ -939,6 +1014,7 @@ var RedeemCodeDBSchema = struct {
CodeSecret RedeemCodeDBSchemaField
EffectiveTime RedeemCodeDBSchemaField
ExpirationTime RedeemCodeDBSchemaField
CouponId RedeemCodeDBSchemaField
}{
ID: RedeemCodeDBSchemaField("id"),
@ -952,6 +1028,7 @@ var RedeemCodeDBSchema = struct {
CodeSecret: RedeemCodeDBSchemaField("code_secret"),
EffectiveTime: RedeemCodeDBSchemaField("effective_time"),
ExpirationTime: RedeemCodeDBSchemaField("expiration_time"),
CouponId: RedeemCodeDBSchemaField("coupon_id"),
}
// Update updates RedeemCode fields by primary key
@ -969,6 +1046,7 @@ func (o *RedeemCode) Update(db *gorm.DB, fields ...RedeemCodeDBSchemaField) erro
"code_secret": o.CodeSecret,
"effective_time": o.EffectiveTime,
"expiration_time": o.ExpirationTime,
"coupon_id": o.CouponId,
}
u := map[string]interface{}{}
for _, f := range fields {

View File

@ -0,0 +1,867 @@
// Code generated by go-queryset. DO NOT EDIT.
package model
import (
"errors"
"fmt"
"strings"
"time"
"github.com/jinzhu/gorm"
)
// ===== BEGIN of all query sets
// ===== BEGIN of query set PublicRecordQuerySet
// PublicRecordQuerySet is an queryset type for PublicRecord
type PublicRecordQuerySet struct {
db *gorm.DB
}
// NewPublicRecordQuerySet constructs new PublicRecordQuerySet
func NewPublicRecordQuerySet(db *gorm.DB) PublicRecordQuerySet {
return PublicRecordQuerySet{
db: db.Model(&PublicRecord{}),
}
}
func (qs PublicRecordQuerySet) w(db *gorm.DB) PublicRecordQuerySet {
return NewPublicRecordQuerySet(db)
}
func (qs PublicRecordQuerySet) Select(fields ...PublicRecordDBSchemaField) PublicRecordQuerySet {
names := []string{}
for _, f := range fields {
names = append(names, f.String())
}
return qs.w(qs.db.Select(strings.Join(names, ",")))
}
// Create is an autogenerated method
// nolint: dupl
func (o *PublicRecord) Create(db *gorm.DB) error {
return db.Create(o).Error
}
// Delete is an autogenerated method
// nolint: dupl
func (o *PublicRecord) Delete(db *gorm.DB) error {
return db.Delete(o).Error
}
// All is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) All(ret *[]PublicRecord) error {
return qs.db.Find(ret).Error
}
// Count is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) Count() (int, error) {
var count int
err := qs.db.Count(&count).Error
return count, err
}
// CreatedAtEq is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) CreatedAtEq(createdAt time.Time) PublicRecordQuerySet {
return qs.w(qs.db.Where("created_at = ?", createdAt))
}
// CreatedAtGt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) CreatedAtGt(createdAt time.Time) PublicRecordQuerySet {
return qs.w(qs.db.Where("created_at > ?", createdAt))
}
// CreatedAtGte is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) CreatedAtGte(createdAt time.Time) PublicRecordQuerySet {
return qs.w(qs.db.Where("created_at >= ?", createdAt))
}
// CreatedAtLt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) CreatedAtLt(createdAt time.Time) PublicRecordQuerySet {
return qs.w(qs.db.Where("created_at < ?", createdAt))
}
// CreatedAtLte is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) CreatedAtLte(createdAt time.Time) PublicRecordQuerySet {
return qs.w(qs.db.Where("created_at <= ?", createdAt))
}
// CreatedAtNe is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) CreatedAtNe(createdAt time.Time) PublicRecordQuerySet {
return qs.w(qs.db.Where("created_at != ?", createdAt))
}
// Delete is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) Delete() error {
return qs.db.Delete(PublicRecord{}).Error
}
// DeleteNum is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) DeleteNum() (int64, error) {
db := qs.db.Delete(PublicRecord{})
return db.RowsAffected, db.Error
}
// DeleteNumUnscoped is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) DeleteNumUnscoped() (int64, error) {
db := qs.db.Unscoped().Delete(PublicRecord{})
return db.RowsAffected, db.Error
}
// DeletedAtEq is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) DeletedAtEq(deletedAt time.Time) PublicRecordQuerySet {
return qs.w(qs.db.Where("deleted_at = ?", deletedAt))
}
// DeletedAtGt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) DeletedAtGt(deletedAt time.Time) PublicRecordQuerySet {
return qs.w(qs.db.Where("deleted_at > ?", deletedAt))
}
// DeletedAtGte is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) DeletedAtGte(deletedAt time.Time) PublicRecordQuerySet {
return qs.w(qs.db.Where("deleted_at >= ?", deletedAt))
}
// DeletedAtIsNotNull is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) DeletedAtIsNotNull() PublicRecordQuerySet {
return qs.w(qs.db.Where("deleted_at IS NOT NULL"))
}
// DeletedAtIsNull is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) DeletedAtIsNull() PublicRecordQuerySet {
return qs.w(qs.db.Where("deleted_at IS NULL"))
}
// DeletedAtLt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) DeletedAtLt(deletedAt time.Time) PublicRecordQuerySet {
return qs.w(qs.db.Where("deleted_at < ?", deletedAt))
}
// DeletedAtLte is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) DeletedAtLte(deletedAt time.Time) PublicRecordQuerySet {
return qs.w(qs.db.Where("deleted_at <= ?", deletedAt))
}
// DeletedAtNe is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) DeletedAtNe(deletedAt time.Time) PublicRecordQuerySet {
return qs.w(qs.db.Where("deleted_at != ?", deletedAt))
}
// FocusStateEq is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) FocusStateEq(focusState uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("focus_state = ?", focusState))
}
// FocusStateGt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) FocusStateGt(focusState uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("focus_state > ?", focusState))
}
// FocusStateGte is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) FocusStateGte(focusState uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("focus_state >= ?", focusState))
}
// FocusStateIn is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) FocusStateIn(focusState ...uint32) PublicRecordQuerySet {
if len(focusState) == 0 {
qs.db.AddError(errors.New("must at least pass one focusState in FocusStateIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("focus_state IN (?)", focusState))
}
// FocusStateLt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) FocusStateLt(focusState uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("focus_state < ?", focusState))
}
// FocusStateLte is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) FocusStateLte(focusState uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("focus_state <= ?", focusState))
}
// FocusStateNe is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) FocusStateNe(focusState uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("focus_state != ?", focusState))
}
// FocusStateNotIn is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) FocusStateNotIn(focusState ...uint32) PublicRecordQuerySet {
if len(focusState) == 0 {
qs.db.AddError(errors.New("must at least pass one focusState in FocusStateNotIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("focus_state NOT IN (?)", focusState))
}
// GetDB is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) GetDB() *gorm.DB {
return qs.db
}
// GetUpdater is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) GetUpdater() PublicRecordUpdater {
return NewPublicRecordUpdater(qs.db)
}
// IDEq is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) IDEq(ID uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("id = ?", ID))
}
// IDGt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) IDGt(ID uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("id > ?", ID))
}
// IDGte is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) IDGte(ID uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("id >= ?", ID))
}
// IDIn is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) IDIn(ID ...uint32) PublicRecordQuerySet {
if len(ID) == 0 {
qs.db.AddError(errors.New("must at least pass one ID in IDIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("id IN (?)", ID))
}
// IDLt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) IDLt(ID uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("id < ?", ID))
}
// IDLte is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) IDLte(ID uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("id <= ?", ID))
}
// IDNe is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) IDNe(ID uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("id != ?", ID))
}
// IDNotIn is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) IDNotIn(ID ...uint32) PublicRecordQuerySet {
if len(ID) == 0 {
qs.db.AddError(errors.New("must at least pass one ID in IDNotIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("id NOT IN (?)", ID))
}
// Limit is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) Limit(limit int) PublicRecordQuerySet {
return qs.w(qs.db.Limit(limit))
}
// Offset is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) Offset(offset int) PublicRecordQuerySet {
return qs.w(qs.db.Offset(offset))
}
// One is used to retrieve one result. It returns gorm.ErrRecordNotFound
// if nothing was fetched
func (qs PublicRecordQuerySet) One(ret *PublicRecord) error {
return qs.db.First(ret).Error
}
// OpenIdEq is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OpenIdEq(openId string) PublicRecordQuerySet {
return qs.w(qs.db.Where("open_id = ?", openId))
}
// OpenIdGt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OpenIdGt(openId string) PublicRecordQuerySet {
return qs.w(qs.db.Where("open_id > ?", openId))
}
// OpenIdGte is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OpenIdGte(openId string) PublicRecordQuerySet {
return qs.w(qs.db.Where("open_id >= ?", openId))
}
// OpenIdIn is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OpenIdIn(openId ...string) PublicRecordQuerySet {
if len(openId) == 0 {
qs.db.AddError(errors.New("must at least pass one openId in OpenIdIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("open_id IN (?)", openId))
}
// OpenIdLike is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OpenIdLike(openId string) PublicRecordQuerySet {
return qs.w(qs.db.Where("open_id LIKE ?", openId))
}
// OpenIdLt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OpenIdLt(openId string) PublicRecordQuerySet {
return qs.w(qs.db.Where("open_id < ?", openId))
}
// OpenIdLte is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OpenIdLte(openId string) PublicRecordQuerySet {
return qs.w(qs.db.Where("open_id <= ?", openId))
}
// OpenIdNe is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OpenIdNe(openId string) PublicRecordQuerySet {
return qs.w(qs.db.Where("open_id != ?", openId))
}
// OpenIdNotIn is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OpenIdNotIn(openId ...string) PublicRecordQuerySet {
if len(openId) == 0 {
qs.db.AddError(errors.New("must at least pass one openId in OpenIdNotIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("open_id NOT IN (?)", openId))
}
// OpenIdNotlike is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OpenIdNotlike(openId string) PublicRecordQuerySet {
return qs.w(qs.db.Where("open_id NOT LIKE ?", openId))
}
// OrderAscByCreatedAt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OrderAscByCreatedAt() PublicRecordQuerySet {
return qs.w(qs.db.Order("created_at ASC"))
}
// OrderAscByDeletedAt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OrderAscByDeletedAt() PublicRecordQuerySet {
return qs.w(qs.db.Order("deleted_at ASC"))
}
// OrderAscByFocusState is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OrderAscByFocusState() PublicRecordQuerySet {
return qs.w(qs.db.Order("focus_state ASC"))
}
// OrderAscByID is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OrderAscByID() PublicRecordQuerySet {
return qs.w(qs.db.Order("id ASC"))
}
// OrderAscByOpenId is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OrderAscByOpenId() PublicRecordQuerySet {
return qs.w(qs.db.Order("open_id ASC"))
}
// OrderAscByRedeemCodeId is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OrderAscByRedeemCodeId() PublicRecordQuerySet {
return qs.w(qs.db.Order("redeem_code_id ASC"))
}
// OrderAscByRedeemCodeState is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OrderAscByRedeemCodeState() PublicRecordQuerySet {
return qs.w(qs.db.Order("redeem_code_state ASC"))
}
// OrderAscBySerialCode is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OrderAscBySerialCode() PublicRecordQuerySet {
return qs.w(qs.db.Order("serial_code ASC"))
}
// OrderAscByUpdatedAt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OrderAscByUpdatedAt() PublicRecordQuerySet {
return qs.w(qs.db.Order("updated_at ASC"))
}
// OrderDescByCreatedAt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OrderDescByCreatedAt() PublicRecordQuerySet {
return qs.w(qs.db.Order("created_at DESC"))
}
// OrderDescByDeletedAt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OrderDescByDeletedAt() PublicRecordQuerySet {
return qs.w(qs.db.Order("deleted_at DESC"))
}
// OrderDescByFocusState is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OrderDescByFocusState() PublicRecordQuerySet {
return qs.w(qs.db.Order("focus_state DESC"))
}
// OrderDescByID is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OrderDescByID() PublicRecordQuerySet {
return qs.w(qs.db.Order("id DESC"))
}
// OrderDescByOpenId is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OrderDescByOpenId() PublicRecordQuerySet {
return qs.w(qs.db.Order("open_id DESC"))
}
// OrderDescByRedeemCodeId is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OrderDescByRedeemCodeId() PublicRecordQuerySet {
return qs.w(qs.db.Order("redeem_code_id DESC"))
}
// OrderDescByRedeemCodeState is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OrderDescByRedeemCodeState() PublicRecordQuerySet {
return qs.w(qs.db.Order("redeem_code_state DESC"))
}
// OrderDescBySerialCode is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OrderDescBySerialCode() PublicRecordQuerySet {
return qs.w(qs.db.Order("serial_code DESC"))
}
// OrderDescByUpdatedAt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) OrderDescByUpdatedAt() PublicRecordQuerySet {
return qs.w(qs.db.Order("updated_at DESC"))
}
// RedeemCodeIdEq is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) RedeemCodeIdEq(redeemCodeId uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("redeem_code_id = ?", redeemCodeId))
}
// RedeemCodeIdGt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) RedeemCodeIdGt(redeemCodeId uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("redeem_code_id > ?", redeemCodeId))
}
// RedeemCodeIdGte is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) RedeemCodeIdGte(redeemCodeId uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("redeem_code_id >= ?", redeemCodeId))
}
// RedeemCodeIdIn is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) RedeemCodeIdIn(redeemCodeId ...uint32) PublicRecordQuerySet {
if len(redeemCodeId) == 0 {
qs.db.AddError(errors.New("must at least pass one redeemCodeId in RedeemCodeIdIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("redeem_code_id IN (?)", redeemCodeId))
}
// RedeemCodeIdLt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) RedeemCodeIdLt(redeemCodeId uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("redeem_code_id < ?", redeemCodeId))
}
// RedeemCodeIdLte is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) RedeemCodeIdLte(redeemCodeId uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("redeem_code_id <= ?", redeemCodeId))
}
// RedeemCodeIdNe is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) RedeemCodeIdNe(redeemCodeId uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("redeem_code_id != ?", redeemCodeId))
}
// RedeemCodeIdNotIn is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) RedeemCodeIdNotIn(redeemCodeId ...uint32) PublicRecordQuerySet {
if len(redeemCodeId) == 0 {
qs.db.AddError(errors.New("must at least pass one redeemCodeId in RedeemCodeIdNotIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("redeem_code_id NOT IN (?)", redeemCodeId))
}
// RedeemCodeStateEq is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) RedeemCodeStateEq(redeemCodeState uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("redeem_code_state = ?", redeemCodeState))
}
// RedeemCodeStateGt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) RedeemCodeStateGt(redeemCodeState uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("redeem_code_state > ?", redeemCodeState))
}
// RedeemCodeStateGte is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) RedeemCodeStateGte(redeemCodeState uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("redeem_code_state >= ?", redeemCodeState))
}
// RedeemCodeStateIn is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) RedeemCodeStateIn(redeemCodeState ...uint32) PublicRecordQuerySet {
if len(redeemCodeState) == 0 {
qs.db.AddError(errors.New("must at least pass one redeemCodeState in RedeemCodeStateIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("redeem_code_state IN (?)", redeemCodeState))
}
// RedeemCodeStateLt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) RedeemCodeStateLt(redeemCodeState uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("redeem_code_state < ?", redeemCodeState))
}
// RedeemCodeStateLte is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) RedeemCodeStateLte(redeemCodeState uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("redeem_code_state <= ?", redeemCodeState))
}
// RedeemCodeStateNe is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) RedeemCodeStateNe(redeemCodeState uint32) PublicRecordQuerySet {
return qs.w(qs.db.Where("redeem_code_state != ?", redeemCodeState))
}
// RedeemCodeStateNotIn is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) RedeemCodeStateNotIn(redeemCodeState ...uint32) PublicRecordQuerySet {
if len(redeemCodeState) == 0 {
qs.db.AddError(errors.New("must at least pass one redeemCodeState in RedeemCodeStateNotIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("redeem_code_state NOT IN (?)", redeemCodeState))
}
// SerialCodeEq is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) SerialCodeEq(serialCode string) PublicRecordQuerySet {
return qs.w(qs.db.Where("serial_code = ?", serialCode))
}
// SerialCodeGt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) SerialCodeGt(serialCode string) PublicRecordQuerySet {
return qs.w(qs.db.Where("serial_code > ?", serialCode))
}
// SerialCodeGte is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) SerialCodeGte(serialCode string) PublicRecordQuerySet {
return qs.w(qs.db.Where("serial_code >= ?", serialCode))
}
// SerialCodeIn is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) SerialCodeIn(serialCode ...string) PublicRecordQuerySet {
if len(serialCode) == 0 {
qs.db.AddError(errors.New("must at least pass one serialCode in SerialCodeIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("serial_code IN (?)", serialCode))
}
// SerialCodeLike is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) SerialCodeLike(serialCode string) PublicRecordQuerySet {
return qs.w(qs.db.Where("serial_code LIKE ?", serialCode))
}
// SerialCodeLt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) SerialCodeLt(serialCode string) PublicRecordQuerySet {
return qs.w(qs.db.Where("serial_code < ?", serialCode))
}
// SerialCodeLte is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) SerialCodeLte(serialCode string) PublicRecordQuerySet {
return qs.w(qs.db.Where("serial_code <= ?", serialCode))
}
// SerialCodeNe is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) SerialCodeNe(serialCode string) PublicRecordQuerySet {
return qs.w(qs.db.Where("serial_code != ?", serialCode))
}
// SerialCodeNotIn is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) SerialCodeNotIn(serialCode ...string) PublicRecordQuerySet {
if len(serialCode) == 0 {
qs.db.AddError(errors.New("must at least pass one serialCode in SerialCodeNotIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("serial_code NOT IN (?)", serialCode))
}
// SerialCodeNotlike is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) SerialCodeNotlike(serialCode string) PublicRecordQuerySet {
return qs.w(qs.db.Where("serial_code NOT LIKE ?", serialCode))
}
// UpdatedAtEq is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) UpdatedAtEq(updatedAt time.Time) PublicRecordQuerySet {
return qs.w(qs.db.Where("updated_at = ?", updatedAt))
}
// UpdatedAtGt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) UpdatedAtGt(updatedAt time.Time) PublicRecordQuerySet {
return qs.w(qs.db.Where("updated_at > ?", updatedAt))
}
// UpdatedAtGte is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) UpdatedAtGte(updatedAt time.Time) PublicRecordQuerySet {
return qs.w(qs.db.Where("updated_at >= ?", updatedAt))
}
// UpdatedAtLt is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) UpdatedAtLt(updatedAt time.Time) PublicRecordQuerySet {
return qs.w(qs.db.Where("updated_at < ?", updatedAt))
}
// UpdatedAtLte is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) UpdatedAtLte(updatedAt time.Time) PublicRecordQuerySet {
return qs.w(qs.db.Where("updated_at <= ?", updatedAt))
}
// UpdatedAtNe is an autogenerated method
// nolint: dupl
func (qs PublicRecordQuerySet) UpdatedAtNe(updatedAt time.Time) PublicRecordQuerySet {
return qs.w(qs.db.Where("updated_at != ?", updatedAt))
}
// SetCreatedAt is an autogenerated method
// nolint: dupl
func (u PublicRecordUpdater) SetCreatedAt(createdAt time.Time) PublicRecordUpdater {
u.fields[string(PublicRecordDBSchema.CreatedAt)] = createdAt
return u
}
// SetDeletedAt is an autogenerated method
// nolint: dupl
func (u PublicRecordUpdater) SetDeletedAt(deletedAt *time.Time) PublicRecordUpdater {
u.fields[string(PublicRecordDBSchema.DeletedAt)] = deletedAt
return u
}
// SetFocusState is an autogenerated method
// nolint: dupl
func (u PublicRecordUpdater) SetFocusState(focusState uint32) PublicRecordUpdater {
u.fields[string(PublicRecordDBSchema.FocusState)] = focusState
return u
}
// SetID is an autogenerated method
// nolint: dupl
func (u PublicRecordUpdater) SetID(ID uint32) PublicRecordUpdater {
u.fields[string(PublicRecordDBSchema.ID)] = ID
return u
}
// SetOpenId is an autogenerated method
// nolint: dupl
func (u PublicRecordUpdater) SetOpenId(openId string) PublicRecordUpdater {
u.fields[string(PublicRecordDBSchema.OpenId)] = openId
return u
}
// SetRedeemCodeId is an autogenerated method
// nolint: dupl
func (u PublicRecordUpdater) SetRedeemCodeId(redeemCodeId uint32) PublicRecordUpdater {
u.fields[string(PublicRecordDBSchema.RedeemCodeId)] = redeemCodeId
return u
}
// SetRedeemCodeState is an autogenerated method
// nolint: dupl
func (u PublicRecordUpdater) SetRedeemCodeState(redeemCodeState uint32) PublicRecordUpdater {
u.fields[string(PublicRecordDBSchema.RedeemCodeState)] = redeemCodeState
return u
}
// SetSerialCode is an autogenerated method
// nolint: dupl
func (u PublicRecordUpdater) SetSerialCode(serialCode string) PublicRecordUpdater {
u.fields[string(PublicRecordDBSchema.SerialCode)] = serialCode
return u
}
// SetUpdatedAt is an autogenerated method
// nolint: dupl
func (u PublicRecordUpdater) SetUpdatedAt(updatedAt time.Time) PublicRecordUpdater {
u.fields[string(PublicRecordDBSchema.UpdatedAt)] = updatedAt
return u
}
// Update is an autogenerated method
// nolint: dupl
func (u PublicRecordUpdater) Update() error {
return u.db.Updates(u.fields).Error
}
// UpdateNum is an autogenerated method
// nolint: dupl
func (u PublicRecordUpdater) UpdateNum() (int64, error) {
db := u.db.Updates(u.fields)
return db.RowsAffected, db.Error
}
// ===== END of query set PublicRecordQuerySet
// ===== BEGIN of PublicRecord modifiers
// PublicRecordDBSchemaField describes database schema field. It requires for method 'Update'
type PublicRecordDBSchemaField string
// String method returns string representation of field.
// nolint: dupl
func (f PublicRecordDBSchemaField) String() string {
return string(f)
}
// PublicRecordDBSchema stores db field names of PublicRecord
var PublicRecordDBSchema = struct {
ID PublicRecordDBSchemaField
CreatedAt PublicRecordDBSchemaField
UpdatedAt PublicRecordDBSchemaField
DeletedAt PublicRecordDBSchemaField
OpenId PublicRecordDBSchemaField
RedeemCodeId PublicRecordDBSchemaField
SerialCode PublicRecordDBSchemaField
FocusState PublicRecordDBSchemaField
RedeemCodeState PublicRecordDBSchemaField
}{
ID: PublicRecordDBSchemaField("id"),
CreatedAt: PublicRecordDBSchemaField("created_at"),
UpdatedAt: PublicRecordDBSchemaField("updated_at"),
DeletedAt: PublicRecordDBSchemaField("deleted_at"),
OpenId: PublicRecordDBSchemaField("open_id"),
RedeemCodeId: PublicRecordDBSchemaField("redeem_code_id"),
SerialCode: PublicRecordDBSchemaField("serial_code"),
FocusState: PublicRecordDBSchemaField("focus_state"),
RedeemCodeState: PublicRecordDBSchemaField("redeem_code_state"),
}
// Update updates PublicRecord fields by primary key
// nolint: dupl
func (o *PublicRecord) Update(db *gorm.DB, fields ...PublicRecordDBSchemaField) error {
dbNameToFieldName := map[string]interface{}{
"id": o.ID,
"created_at": o.CreatedAt,
"updated_at": o.UpdatedAt,
"deleted_at": o.DeletedAt,
"open_id": o.OpenId,
"redeem_code_id": o.RedeemCodeId,
"serial_code": o.SerialCode,
"focus_state": o.FocusState,
"redeem_code_state": o.RedeemCodeState,
}
u := map[string]interface{}{}
for _, f := range fields {
fs := f.String()
u[fs] = dbNameToFieldName[fs]
}
if err := db.Model(o).Updates(u).Error; err != nil {
if err == gorm.ErrRecordNotFound {
return err
}
return fmt.Errorf("can't update PublicRecord %v fields %v: %s",
o, fields, err)
}
return nil
}
// PublicRecordUpdater is an PublicRecord updates manager
type PublicRecordUpdater struct {
fields map[string]interface{}
db *gorm.DB
}
// NewPublicRecordUpdater creates new PublicRecord updater
// nolint: dupl
func NewPublicRecordUpdater(db *gorm.DB) PublicRecordUpdater {
return PublicRecordUpdater{
fields: map[string]interface{}{},
db: db.Model(&PublicRecord{}),
}
}
// ===== END of PublicRecord modifiers
// ===== END of all query sets

View File

@ -25,7 +25,7 @@ type Coupon struct {
Name string `json:"name"`
Describe string `json:"describe" gorm:"type:text;"` // 描述
CouponType string `json:"coupon_type"`
ActivityType uint32 `json:"activity_type"` // 活动类型 1-会员续费
ActivityType uint32 `json:"activity_type"` // 活动类型 1-会员续费 2-关注公众号
ActivityId uint32 `json:"activity_id" gorm:"index"`
Value uint32 `json:"value"`
OutCount uint32 `json:"out_count"` // 用户已领取数量
@ -59,7 +59,7 @@ type Activity struct {
Model
Name string `json:"name" gorm:"column:name;comment:'活动名称'"` // 活动名称
ActivityType uint32 `json:"activity_type" gorm:"column:activity_type;comment:'活动类型'"` // 活动类型 1-会员续费
ActivityType uint32 `json:"activity_type" gorm:"column:activity_type;comment:'活动类型'"` // 活动类型 1-会员续费 2-关注公众号
State uint32 `json:"state" gorm:"column:state;comment:'状态'"` // 1-未开启 2-进行中 3-已结束
StartTime time.Time `json:"start_time" gorm:"column:start_time;comment:'开始时间'"` // 开始时间
EndTime time.Time `json:"end_time" gorm:"column:end_time;comment:'结束时间'"` // 结束时间 零值永不结束

View File

@ -6,6 +6,7 @@ import (
"fmt"
"mh-server/lib/auth"
"mh-server/lib/utils"
"os"
"sort"
"strconv"
@ -82,7 +83,6 @@ func InitTestDB() {
//&User{},
//&UserAttendance{},
//&UserAttendanceRecord{},
// 合作商
//&Store{},
//&GameCard{},
@ -104,7 +104,6 @@ func InitTestDB() {
//&InviteMemberReport{},
//&CooperativeDeductSettle{},
//&XcxRole{},
// 商城
//&Goods{},
//&GoodsCat{},
@ -116,7 +115,6 @@ func InitTestDB() {
//&OperationLog{},
//&DeliverTask{},
//&DeliverTaskSub{},
// 优惠券
//&GameCard{},
//&ActivityMemberRenewal{},
@ -126,7 +124,7 @@ func InitTestDB() {
//&UserOpenMemberRecord{},
//&HomeCarousel{},
//&UserRenewalLog{},
// 续费会员
//&User{},
//&UserOpenMemberRecord{},
//&CooperativeMemberDeduct{},
@ -144,7 +142,10 @@ func InitTestDB() {
//&UserInvite{},
//&UserInviteRecord{},
//&CooperativeMemberPromotionStore{},
&RecycleCardOrder{},
&RedeemCode{},
&PublicRecord{},
)
fmt.Println("DB init success")
@ -180,98 +181,9 @@ func InitDBProd() {
DBProd.LogMode(false)
DBProd.SingularTable(true)
DBProd.AutoMigrate(
//&RedeemCode{},
//&UserRedeemCode{},
//&GameCardGoods{},
//&UserShareCardBill{},
//&ShareCardBillGame{},
//&UserShareCard{},
//&ShareCardVmRecord{},
//&UserShareCardVm{},
//&ShareCardDateVm{},
//&ShareCardGameVm{},
//&ShareCardRetrieve{},
//&ShareCardRetrieveCard{},
//&GameCardLabel{},
//&CardIssueFeedback{},
//&GameCard{},
//&FundRecord{},
//&User{},
//&GameCard{},
//&FundRecord{},
//&User{},
//&UserAttendance{},
//&UserAttendanceRecord{},
//&Store{},
//&GameCard{},
//&GameCardGoods{},
//&GameCardGoodsStock{},
//&User{},
//&Order{},
//&OrderCard{},
//
//&OperationLog{},
//&CooperativeBusiness{},
//&CooperativeMemberDeduct{},
//&CooperativeAssistantMemberDeduct{},
//
//&CooperativeMemberPromotion{},
//&CooperativeMemberPromotionStore{},
//&CooperativeMemberPromotionDay{},
//&CooperativeMemberPromotionStoreDay{},
//&InviteMemberReport{},
//&CooperativeDeductSettle{},
//&XcxRole{},
// 商城
//&Goods{},
//&GoodsCat{},
//&GoodsAttribute{},
//&GoodsAttributeCombo{},
//&Spec{},
//&SpecValue{},
//&GoodsOrder{},
//&OperationLog{},
//&DeliverTask{},
//&DeliverTaskSub{},
// 优惠券
//&GameCard{},
//&ActivityMemberRenewal{},
//&Activity{},
//&UserCoupon{},
//&Coupon{},
//&UserOpenMemberRecord{},
//&HomeCarousel{},
//&UserRenewalLog{},
//&GameCard{},
//&CooperativeMemberPromotion{},
//&CooperativeMemberPromotionStore{},
//&CooperativeMemberPromotionDay{},
//&CooperativeMemberPromotionStoreDay{},
//&User{},
//&UserOpenMemberRecord{},
//&CooperativeMemberDeduct{},
//&CooperativeAssistantMemberDeduct{},
//&UserMemberRecord{},
//&CooperativeDeductSettle{},
//&CooperativeMemberPromotionStore{},
//&CooperativeMemberPromotionDay{},
//&InviteMemberReport{},
//&MemberStatisticDaily{},
//&CooperativeMemberPromotion{},
//&GameCard{},
//&CooperativeMemberPromotionStoreDay{},
//
//&UserInvite{},
//&UserInviteRecord{},
//&CooperativeMemberPromotionStore{},
&RecycleCardOrder{},
&RedeemCode{},
&PublicRecord{},
)
if err := DBProd.DB().Ping(); err != nil {
@ -596,7 +508,7 @@ func RedeemCodeCreate() {
InitDBProd()
for i := 0; i < 7; i++ {
redeem := NewRedeemCode()
redeem := NewRedeemCode("MC30")
fmt.Println("redeemCode:", redeem)
@ -624,11 +536,51 @@ func RedeemCodeCreate() {
}
// 生成会员兑换码
func TestDeductionCoupon5Create(t *testing.T) {
RedeemCodeDeductionCoupon5Create()
}
func RedeemCodeDeductionCoupon5Create() {
InitTestDB()
//InitDBProd()
for i := 0; i < 9950; i++ {
redeem := NewRedeemCode("DC5")
fmt.Println("redeemCode:", redeem)
secretCode := RedeemSecretCode(redeem)
fmt.Println("secretCode:", secretCode)
if !IsRedeemCodeExist(redeem) { // 数据库 TODO
redeemCode := &RedeemCode{
SerialCode: redeem,
CodeType: CodeTypeDeductionCoupon5,
Status: RedeemCodeStatusStock,
StoreId: 0,
CodeSecret: secretCode,
EffectiveTime: time.Now(),
ExpirationTime: time.Now().AddDate(1, 0, 0),
CouponId: 4,
}
err := DBDev.Create(redeemCode).Error
//err := DBProd.Create(redeemCode).Error
if err != nil {
fmt.Println("err:", err)
}
}
}
}
func IsRedeemCodeExist(code string) bool {
var isExist uint32
sql := fmt.Sprintf("SELECT EXISTS (SELECT * FROM redeem_code WHERE serial_code = '%s') AS code_exsit;", code)
//err := DBDev.Raw(sql).Row().Scan(&isExist)
err := DBProd.Raw(sql).Row().Scan(&isExist)
err := DBDev.Raw(sql).Row().Scan(&isExist)
//err := DBProd.Raw(sql).Row().Scan(&isExist)
if err != nil {
fmt.Println("err:", err)
return true
@ -636,7 +588,7 @@ func IsRedeemCodeExist(code string) bool {
return isExist == 1
}
func NewRedeemCode() string {
func NewRedeemCode(prefix string) string {
semen := fmt.Sprintf("MemberCard30%d", time.Now().UnixNano())
shaer := sha512.New()
shaer.Write([]byte(semen))
@ -644,7 +596,7 @@ func NewRedeemCode() string {
hs := fmt.Sprintf("%x", r)
hs = strings.ToUpper(hs)
return "MC30" + hs[:19]
return prefix + hs[:19]
}
func TestInitConfig(t *testing.T) {
@ -1662,3 +1614,49 @@ func MemberExport() {
}
}
func TestGetAccessToken(t *testing.T) {
InitTestDB()
DB = DBDev
GetAccessToken()
}
func TestExportGameList(t *testing.T) {
InitDBProd()
var games []GameCard
_ = NewGameCardQuerySet(DBProd).OrderDescByID().All(&games)
fileName := "游戏列表"
fileName = time.Now().Format(TimeFormat) + fileName + ".md"
// /www/server/images/export
//f, err := os.OpenFile(fmt.Sprintf("./")+fileName, os.O_CREATE|os.O_TRUNC|os.O_APPEND|os.O_RDWR, 0644)
f, err := os.OpenFile(fmt.Sprintf("./")+fileName, os.O_CREATE|os.O_TRUNC|os.O_APPEND|os.O_RDWR, 0644)
if err != nil {
fmt.Println(err)
}
defer f.Close()
//w := csv.NewWriter(f)
//os.WriteFile()
//headline := []string{"商品名称", "卡池总数", "在库数量", "玩家持有数量", "锁定数量", "借出总数", "商品编号", "所在门店", "状态"}
//if err := w.Write(headline); err != nil {
//}
for i, goods := range games {
//if i > 5 {
// break
//}
fmt.Println("第", i)
w := fmt.Sprintf("##### %s \n ", goods.Name) +
fmt.Sprintf(`<img src="%s" `, goods.CoverImg) + `style="zoom:50%;" />` + "\n" +
"游戏详情:\n" +
goods.DetailInfo + "\n\n\n"
f.WriteString(w)
}
if err := f.Close(); err != nil {
//log.Fatal(err)
logger.Error(" err:", err)
}
}

View File

@ -14,30 +14,32 @@ import (
type RecycleCardOrder struct {
Model
Uid uint32 `json:"uid" gorm:"index"`
GoodsId uint32 `json:"goods_id" gorm:"index"`
GoodsName string `json:"goods_name"`
GoodsImg string `json:"goods_img"`
Keyword string `json:"keyword"`
Price uint32 `json:"price"`
State uint32 `json:"state"` // 1-待回收 2-已完成 3-已被拒 4-已取消
StoreId uint32 `json:"store_id" gorm:"index"`
StoreName string `json:"store_name"`
Images string `json:"images" gorm:"type:text"` // 图片
SerialNumber string `json:"serial_number"`
EvaluationTime time.Time `json:"evaluation_time"`
Attribute string `json:"attribute" gorm:"type:text"` //
Number string `json:"number"` // 订单
CheckTime time.Time `json:"check_time"`
DepressionRate uint32 `json:"depression_rate"` //
User *User `json:"user" gorm:"-"`
Store *Store `json:"store" gorm:"-"`
Describe string `json:"describe"` // 描述
Remark string `json:"remark"` // 备注
AssistantName string `json:"assistant_name"` // 店员
RetrieveTime time.Time `json:"retrieve_time"` // 审核时间
RetrieveState uint32 `json:"retrieve_state"` // 回收卡状态 1-未确认 2-已确认
OriginalPrice uint32 `json:"original_price"` // 原价
Uid uint32 `json:"uid" gorm:"index"`
GoodsId uint32 `json:"goods_id" gorm:"index"`
GoodsName string `json:"goods_name"`
GoodsImg string `json:"goods_img"`
Keyword string `json:"keyword"`
Price uint32 `json:"price"`
State uint32 `json:"state"` // 1-待回收 2-已完成 3-已被拒 4-已取消
StoreId uint32 `json:"store_id" gorm:"index"`
StoreName string `json:"store_name"`
Images string `json:"images" gorm:"type:text"` // 图片
SerialNumber string `json:"serial_number"`
EvaluationTime time.Time `json:"evaluation_time"`
Attribute string `json:"attribute" gorm:"type:text"` //
Number string `json:"number"` // 订单
CheckTime time.Time `json:"check_time"`
DepressionRate uint32 `json:"depression_rate"` //
User *User `json:"user" gorm:"-"`
Store *Store `json:"store" gorm:"-"`
Describe string `json:"describe"` // 描述
Remark string `json:"remark"` // 备注
AssistantName string `json:"assistant_name"` // 店员
RetrieveTime time.Time `json:"retrieve_time"` // 审核时间
RetrieveState uint32 `json:"retrieve_state"` // 回收卡状态 1-未确认 2-已确认
OriginalPrice uint32 `json:"original_price"` // 原价
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"` // 合作商id
CooperativeName string `json:"cooperative_name"` // 合作商名称
// recycle_card_order
}
@ -130,6 +132,15 @@ func RecycleCardOrderCreate(uid uint32, req xianmai.GameEvaluationReq) (*Recycle
logger.Error("attributes marshal err:", err)
return order, err
}
store, err := GetStore(req.StoreId)
if err != nil {
logger.Error("store err:", err)
return order, err
}
order.CooperativeBusinessId = store.CooperativeBusinessId
order.CooperativeName = store.CooperativeName
order.Attribute = string(attributeByte)
err = DB.Create(order).Error
if err != nil {

View File

@ -19,6 +19,7 @@ const (
CodeTypeMemberGoldMember = "member-card-gold-member"
CodeTypeMemberPlatinumMember = "member-card-platinum-member"
CodeTypeMemberBlackGoldMember = "member-card-black-gold-member"
CodeTypeDeductionCoupon5 = "deduction-coupon-5"
)
const (
@ -48,6 +49,8 @@ type RedeemCode struct {
CodeSecret string `json:"code_secret"` // 兑换密码
EffectiveTime time.Time `json:"effective_time"` // 生效时间
ExpirationTime time.Time `json:"expiration_time"` // 过期时间
CouponId uint32 `json:"coupon_id" gorm:"index"`
//Remark string `json:"remark"`
}
// gen:qs

View File

@ -13,6 +13,11 @@ import (
"github.com/pkg/errors"
)
const (
WxPublicAppId = "wxfdb1c5654f681c7e"
WxPublicAppSecret = "6e1908a71f31a80849ef0e59d90b7147"
)
var mutexLock = new(sync.Mutex)
func AccessToken() (string, error) {
@ -22,10 +27,50 @@ func AccessToken() (string, error) {
Errcode uint32 `json:"errcode"`
Errmsg string `json:"errmsg"`
}{}
//"app_id": "wx806c079463b5b56c",
// "app_secret": "cb125688bf4e482f66e8c46062d568fc",
//config.AppConfig.WxAppId = "wxfdb1c5654f681c7e"
//config.AppConfig.WxAppSecret = "6e1908a71f31a80849ef0e59d90b7147"
//config.AppConfig.WxAppId = "wx806c079463b5b56c"
//config.AppConfig.WxAppSecret = "cb125688bf4e482f66e8c46062d568fc"
//fmt.Println("WxAppId:", config.AppConfig.WxAppId)
//fmt.Println("WxAppSecret:", config.AppConfig.WxAppSecret)
fmt.Println("WxAppId:", WxPublicAppId)
fmt.Println("WxAppSecret:", WxPublicAppSecret)
if err := requests.GetAndParseJson("https://api.weixin.qq.com/cgi-bin/token", map[string]string{
"grant_type": "client_credential",
"appId": WxPublicAppId,
"secret": WxPublicAppSecret,
}, &response); err != nil {
logger.Error(err)
return "", err
}
if response.Errcode != 0 {
logger.Error(response.Errcode, "===", response.Errmsg)
return "", errors.New(response.Errmsg)
}
logger.Infof("response=%+v", response)
return response.AccessToken, nil
}
func AppAccessToken() (string, error) {
response := struct {
AccessToken string `json:"access_token"`
ExpiresIn uint32 `json:"expires_in"`
Errcode uint32 `json:"errcode"`
Errmsg string `json:"errmsg"`
}{}
//config.AppConfig.WxAppId = "wxfdb1c5654f681c7e"
//config.AppConfig.WxAppSecret = "6e1908a71f31a80849ef0e59d90b7147"
config.AppConfig.WxAppId = "wx806c079463b5b56c"
config.AppConfig.WxAppSecret = "cb125688bf4e482f66e8c46062d568fc"
//fmt.Println("WxAppId:", config.AppConfig.WxAppId)
//fmt.Println("WxAppSecret:", config.AppConfig.WxAppSecret)
fmt.Println("WxAppId:", config.AppConfig.WxAppId)
fmt.Println("WxAppSecret:", config.AppConfig.WxAppSecret)
if err := requests.GetAndParseJson("https://api.weixin.qq.com/cgi-bin/token", map[string]string{
@ -74,6 +119,7 @@ func GetAccessToken() (string, error) {
time.Sleep(time.Second * 2 * time.Duration(i))
continue
}
fmt.Println("accessToken:", accessToken)
if accessToken != "" {
logger.Info(accessToken)
break
@ -95,6 +141,55 @@ func GetAccessToken() (string, error) {
return accessToken, nil
}
// 获取 AccessToken 统一使用该方法,避免各自获取导致AccessToken 失效
func AppGetAccessToken() (string, error) {
fmt.Println("获取AccessToken1:")
accessToken := ""
var (
err error
tokenConfig Config
)
//mutexLock.Lock()
//defer mutexLock.Unlock()
if err := NewConfigQuerySet(DB).NameEq(common.AppConfigAccessToken).One(&tokenConfig); err != nil && err != RecordNotFound {
logger.Error(err)
return "", nil
}
logger.Error("查询accessToken:", tokenConfig.Value)
accessToken = tokenConfig.Value
if tokenConfig.UpdatedAt.Before(time.Unix(time.Now().Unix()-int64(7200), 0)) || tokenConfig.Value == "" {
i := 0
tryTimes := 5
for ; i < tryTimes; i++ {
accessToken, err = AppAccessToken()
if err != nil {
logger.Error("GetAccessToken Fail...err=", err)
time.Sleep(time.Second * 2 * time.Duration(i))
continue
}
fmt.Println("accessToken:", accessToken)
if accessToken != "" {
logger.Info(accessToken)
break
}
}
if i >= tryTimes {
logger.Error("GetAccessToken Fail...")
return "", err
}
err = NewConfigQuerySet(DB).NameEq(common.AppConfigAccessToken).GetUpdater().SetValue(accessToken).Update()
if err != nil {
logger.Error(err)
return "", err
}
}
fmt.Println("获取AccessToken3:")
return accessToken, nil
}
// 获取 AccessToken 方法
func GenAccessToken() (string, error) {
accessToken := ""

View File

@ -895,10 +895,21 @@ func MemberExpireDelaying(uid uint32) (map[string]interface{}, error) {
}
var orderCard OrderCard
err = NewOrderCardQuerySet(DB).UidEq(uid).CardStatusIn([]uint32{1, 2, 3, 4}...).OrderDescByOrderId().One(&orderCard)
if err != nil {
if err != nil && err != RecordNotFound {
logger.Error("order card err:", err)
return ret, err
}
if err == RecordNotFound {
var order Order
err = NewOrderQuerySet(DB).UidEq(uint64(uid)).CardStatusIn([]uint8{1, 2, 3, 4}...).OrderDescByID().Limit(1).One(&order)
if err != nil && err != RecordNotFound {
logger.Error("order card err:", err)
return ret, err
}
orderCard.RevertTime = order.RevertTime
orderCard.CardStatus = uint32(order.CardStatus)
}
deadline := orderCard.RevertTime
if orderCard.CardStatus != 4 {
deadline = time.Now()

102
model/wx_msg.go Normal file
View File

@ -0,0 +1,102 @@
package model
import (
"bytes"
"encoding/json"
"encoding/xml"
"errors"
"fmt"
"github.com/codinl/go-logger"
"github.com/gin-gonic/gin"
"io/ioutil"
"net/http"
"strings"
)
//go:generate goqueryset -in wx_msg.go
// gen:qs
type PublicRecord struct {
Model
OpenId string `json:"open_id" gorm:"index"`
RedeemCodeId uint32 `json:"redeem_code_id" gorm:"index"`
SerialCode string `json:"serial_code" gorm:"index;comment:'兑换编码'"` // 兑换编码
FocusState uint32 `json:"focus_state"` // 关注状态:1-关注
RedeemCodeState uint32 `json:"redeem_code_state"` // 兑换码状态:1-未领取 2-已领取 3-已使用
// public_record
}
type WxReplyTextMsg struct {
XMLName xml.Name `xml:"xml"`
ToUserName string `xml:"ToUserName"`
FromUserName string `xml:"FromUserName"`
CreateTime uint32 `xml:"CreateTime"`
MsgType string `xml:"MsgType"`
Content string `xml:"Content"`
}
type WxReplyTextReceiveMsg struct {
XMLName xml.Name `xml:"xml"`
ToUserName string `xml:"ToUserName"`
FromUserName string `xml:"FromUserName"`
CreateTime uint32 `xml:"CreateTime"`
MsgType string `xml:"MsgType"`
Event string `xml:"Event"`
Content string `xml:"Content"`
MsgId uint64 `xml:"MsgId"`
}
func SendCustomerServiceMessage(data []byte, c *gin.Context, accessToken string) error {
client := http.Client{}
SendCustomerServiceMessageUrl := "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + accessToken
fmt.Println("客服消息 请求参数:", string(data))
req, err := http.NewRequest("POST", SendCustomerServiceMessageUrl, bytes.NewBuffer(data))
if err != nil {
logger.Error(err)
}
req.Header.Set("Content-Type", "application/json; charset=utf-8")
resp, err := client.Do(req)
if err != nil {
logger.Error(err)
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
logger.Error(err)
}
defer resp.Body.Close()
logger.Error("SendCustomerServiceMessage body:", string(body))
type CSResp struct {
ErrCode int `json:"err_code"`
ErrMsg string `json:"err_msg"`
}
var MsgResp CSResp
err = json.Unmarshal(body, &MsgResp)
if err != nil {
logger.Error(err)
}
if MsgResp.ErrCode != 0 {
logger.Error(MsgResp.ErrMsg)
return errors.New(MsgResp.ErrMsg)
//_, err := c.Writer.Write([]byte("success"))
//if err != nil {
// fmt.Println("响应失败")
// logger.Error("Signature 响应失败", err)
//}
//logger.Error("SUCCESS")
}
return nil
}
func WipeStringSpace(s string) string {
s = strings.Replace(s, " ", "", -1)
s = strings.Replace(s, "\n", "", -1)
return s
}

View File

@ -30,9 +30,12 @@ func ConfigAppRouter(r gin.IRouter) {
// //api.POST("sys/config", controller.SysConfig) // 配置
// api.POST("step/config", controller.StepConfig) // 步数配置
// //api.POST("upload_user_info", controller.UploadUserInfo) // 上传用户信息
api.POST("wxpay/notice", controller.PushWXPayNotice) // 微信推送支付通知
api.POST("wxpay_refund/notice", controller.PushWXPayRefundNotice) // 微信推送支付退款通知
api.POST("aliyun/sts_token", controller.AliyunStsTokenGet) // 阿里云上传图片token
api.POST("wxpay/notice", controller.PushWXPayNotice) // 微信推送支付通知
api.POST("wxpay_refund/notice", controller.PushWXPayRefundNotice) // 微信推送支付退款通知
api.POST("aliyun/sts_token", controller.AliyunStsTokenGet) // 阿里云上传图片token
api.POST("auto_reply/focus", controller.AutoReplyFocusMsg) // 自动回复
api.GET("auto_reply/focus", controller.CustomerServiceMessageCheck) // 客服校验
// api.GET("wx_cs/message", controller.CustomerServiceMessageCheck) // 客服校验
// api.POST("wx_cs/message", controller.CustomerServiceMessage) // 客服
}
@ -91,6 +94,7 @@ func ConfigAppRouter(r gin.IRouter) {
//user.POST("service/wechat_id", controller.GetCustomerServiceWechatId) // 获取客服微信号
user.POST("invite_applet_code", controller.UserInviteAppletQRCode) // 小程序分享二维码
user.POST("invite_list", controller.UserInviteList) // 小程序分享二维码
user.POST("use_code_to_coupon", controller.UserCodeToCoupon) // 兑换5券
}
store := api.Group("store")