fix:回收卡
This commit is contained in:
parent
d0b4f45d7b
commit
7beb572b61
|
@ -56,6 +56,7 @@ func CooperativeGameCardGoodsStockAdds(c *gin.Context) {
|
|||
Uid: assistant.Uid,
|
||||
Description: "游戏卡入库",
|
||||
OperationType: model.OperationTypeGameCardGoodsInStock,
|
||||
//CorrelationId:
|
||||
CorrelationName: model.LogCorrelationOrderId,
|
||||
StoreId: uint32(assistant.StoreId),
|
||||
StoreName: "",
|
||||
|
|
|
@ -5,8 +5,10 @@ import (
|
|||
"github.com/gin-gonic/gin"
|
||||
"mh-server/lib/auth"
|
||||
"mh-server/lib/status"
|
||||
"mh-server/lib/wxpay"
|
||||
"mh-server/lib/xianmai"
|
||||
"mh-server/model"
|
||||
"time"
|
||||
)
|
||||
|
||||
func GameCassetteList(c *gin.Context) {
|
||||
|
@ -26,12 +28,15 @@ func GameCassetteList(c *gin.Context) {
|
|||
RespJson(c, status.InternalServerError, nil)
|
||||
return
|
||||
}
|
||||
|
||||
if count == 0 {
|
||||
count = 1
|
||||
}
|
||||
ret := map[string]interface{}{
|
||||
"count": count,
|
||||
//"count": count,
|
||||
"list": cassettes,
|
||||
"pageIndex": req.PageNum,
|
||||
"total_page": req.PageSize,
|
||||
"pageSize": req.PageSize,
|
||||
"total_page": count,
|
||||
}
|
||||
|
||||
RespOK(c, ret)
|
||||
|
@ -69,7 +74,25 @@ func GameEvaluation(c *gin.Context) {
|
|||
RespJson(c, status.InternalServerError, nil)
|
||||
return
|
||||
}
|
||||
info, err := model.RecycleCardConfigInfo()
|
||||
if err != nil {
|
||||
logger.Error("config err:", err)
|
||||
RespJson(c, status.InternalServerError, nil)
|
||||
return
|
||||
}
|
||||
|
||||
if info.RebateRate > 0 && info.RebateRate < 10000 {
|
||||
price = (price * int(10000-info.RebateRate)) / 100
|
||||
} else {
|
||||
price = price * 100
|
||||
}
|
||||
if price > 70000 {
|
||||
logger.Error("price err")
|
||||
RespJson(c, status.InternalServerError, nil)
|
||||
return
|
||||
}
|
||||
price = (price / 100) * 100
|
||||
//price = 40 // TODO
|
||||
ret := map[string]interface{}{
|
||||
"price": price,
|
||||
}
|
||||
|
@ -143,14 +166,14 @@ func RecycleCardOrderDetail(c *gin.Context) {
|
|||
RespJson(c, status.BadRequest, nil)
|
||||
return
|
||||
}
|
||||
uc := auth.GetCurrentUser(c)
|
||||
if uc == nil {
|
||||
logger.Error("uc is nil")
|
||||
RespJson(c, status.Unauthorized, nil)
|
||||
return
|
||||
}
|
||||
//uc := auth.GetCurrentUser(c)
|
||||
//if uc == nil {
|
||||
// logger.Error("uc is nil")
|
||||
// RespJson(c, status.Unauthorized, nil)
|
||||
// return
|
||||
//}
|
||||
//uc = &auth.UserClaims{Uid: 8588420}
|
||||
user := model.GetUserByUid(uc.Uid)
|
||||
|
||||
var order model.RecycleCardOrder
|
||||
err := model.NewRecycleCardOrderQuerySet(model.DB).IDEq(req.OrderId).One(&order)
|
||||
if err != nil {
|
||||
|
@ -158,8 +181,15 @@ func RecycleCardOrderDetail(c *gin.Context) {
|
|||
RespJson(c, status.InternalServerError, nil)
|
||||
return
|
||||
}
|
||||
user := model.GetUserByUid(order.Uid)
|
||||
order.User = user
|
||||
|
||||
store, err := model.GetStore(order.StoreId)
|
||||
if err != nil {
|
||||
logger.Error("order store err:", err)
|
||||
RespJson(c, status.InternalServerError, nil)
|
||||
return
|
||||
}
|
||||
order.Store = store
|
||||
RespOK(c, order)
|
||||
return
|
||||
}
|
||||
|
@ -223,25 +253,71 @@ func RecycleCardOrderImageUpdate(c *gin.Context) {
|
|||
RespJson(c, status.InternalServerError, nil)
|
||||
return
|
||||
}
|
||||
var order model.RecycleCardOrder
|
||||
err := model.NewRecycleCardOrderQuerySet(model.DB).IDEq(req.OrderId).One(&order)
|
||||
if err != nil {
|
||||
logger.Error("order err:%#v", err)
|
||||
RespJson(c, status.InternalServerError, nil)
|
||||
return
|
||||
}
|
||||
if order.State != 1 {
|
||||
logger.Error("order state err")
|
||||
RespJson(c, status.InternalServerError, nil)
|
||||
return
|
||||
}
|
||||
userInfo := model.GetUserByUid(order.Uid)
|
||||
if userInfo == nil {
|
||||
logger.Error("user info err:", err)
|
||||
RespJson(c, status.InternalServerError, nil)
|
||||
return
|
||||
}
|
||||
//order.Price = 40 // TODO
|
||||
|
||||
err := model.NewRecycleCardOrderQuerySet(model.DB).IDEq(req.OrderId).GetUpdater().
|
||||
SetImages(req.Images).Update()
|
||||
transfer, err := wxpay.Transfer(order.Price, userInfo.WxOpenID, "回收卡带")
|
||||
if err != nil {
|
||||
logger.Error("err:", err)
|
||||
RespJson(c, status.InternalServerError, nil)
|
||||
return
|
||||
}
|
||||
|
||||
err = model.NewRecycleCardOrderQuerySet(model.DB).IDEq(req.OrderId).GetUpdater().
|
||||
SetImages(req.Images).SetState(2).SetCheckTime(time.Now()).
|
||||
SetAssistantName(assistant.ShopAssistantName).Update()
|
||||
if err != nil {
|
||||
logger.Error("game cassette err", err)
|
||||
RespJson(c, status.InternalServerError, nil)
|
||||
return
|
||||
}
|
||||
|
||||
fundRecord := &model.FundRecord{
|
||||
Uid: order.Uid,
|
||||
FundType: model.FundTypeRecycleCard,
|
||||
Amount: int64(order.Price) * (-1),
|
||||
OutTradeNo: transfer.PartnerTradeNo,
|
||||
PaymentNo: transfer.PaymentNo,
|
||||
Status: 2,
|
||||
Remark: "回收卡带",
|
||||
//TransactionId: ,
|
||||
}
|
||||
err = model.DB.Create(fundRecord).Error
|
||||
if err != nil {
|
||||
logger.Error("create fund record err:", err)
|
||||
}
|
||||
|
||||
operationLog := &model.OperationLog{
|
||||
Uid: assistant.Uid,
|
||||
Description: "回收卡上传图片",
|
||||
Description: "回收卡带转款",
|
||||
OperationType: model.OperationTypeRecycleCardOrderImageUpdate,
|
||||
CorrelationId: order.ID,
|
||||
CorrelationName: model.LogCorrelationRecycleCardOrderId,
|
||||
StoreId: uint32(assistant.StoreId),
|
||||
StoreName: "",
|
||||
CooperativeName: assistant.CooperativeName,
|
||||
CooperativeBusinessId: assistant.CooperativeBusinessId,
|
||||
Detail: "",
|
||||
}
|
||||
operationLog.AddLog()
|
||||
|
||||
RespOK(c, nil)
|
||||
return
|
||||
}
|
||||
|
@ -249,6 +325,7 @@ func RecycleCardOrderImageUpdate(c *gin.Context) {
|
|||
func RecycleCardOrderCheck(c *gin.Context) {
|
||||
req := struct {
|
||||
OrderId uint32 `json:"order_id" binding:"required"`
|
||||
CheckType uint32 `json:"check_type" binding:"required"` // 1-拒绝
|
||||
}{}
|
||||
if c.ShouldBindJSON(&req) != nil {
|
||||
logger.Error("ShouldBindJSON err")
|
||||
|
@ -262,7 +339,17 @@ func RecycleCardOrderCheck(c *gin.Context) {
|
|||
RespJson(c, status.Unauthorized, nil)
|
||||
return
|
||||
}
|
||||
|
||||
var order model.RecycleCardOrder
|
||||
err := model.NewRecycleCardOrderQuerySet(model.DB).IDEq(req.OrderId).One(&order)
|
||||
if err != nil {
|
||||
logger.Error("recycle card order err:", err)
|
||||
return
|
||||
}
|
||||
if order.State != 1 {
|
||||
logger.Error("order state err")
|
||||
RespJson(c, status.InternalServerError, nil)
|
||||
return
|
||||
}
|
||||
//uc = &auth.UserClaims{Uid: 8588420}
|
||||
assistant := model.GetUserByUid(uc.Uid)
|
||||
if assistant.UserType != 2 {
|
||||
|
@ -271,24 +358,52 @@ func RecycleCardOrderCheck(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
//err := model.NewRecycleCardOrderQuerySet(model.DB).IDEq(req.OrderId).GetUpdater().
|
||||
// SetImages(req.Images).Update()
|
||||
//if err != nil {
|
||||
// logger.Error("game cassette err", err)
|
||||
// RespJson(c, status.InternalServerError, nil)
|
||||
// return
|
||||
//}
|
||||
operationLog := &model.OperationLog{
|
||||
Uid: assistant.Uid,
|
||||
Description: "回收卡上传图片",
|
||||
OperationType: model.OperationTypeRecycleCardOrderImageUpdate,
|
||||
CorrelationName: model.LogCorrelationRecycleCardOrderId,
|
||||
StoreId: uint32(assistant.StoreId),
|
||||
StoreName: "",
|
||||
CooperativeName: assistant.CooperativeName,
|
||||
CooperativeBusinessId: assistant.CooperativeBusinessId,
|
||||
if req.CheckType == 1 {
|
||||
err := model.NewRecycleCardOrderQuerySet(model.DB).IDEq(req.OrderId).GetUpdater().
|
||||
SetState(3).SetCheckTime(time.Now()).SetAssistantName(assistant.ShopAssistantName).Update()
|
||||
if err != nil {
|
||||
logger.Error("update recycle card order err:", err)
|
||||
return
|
||||
}
|
||||
operationLog.AddLog()
|
||||
}
|
||||
|
||||
RespOK(c, nil)
|
||||
return
|
||||
}
|
||||
|
||||
func ConsoleRecycleCardOrderList(c *gin.Context) {
|
||||
req := model.ConsoleRecycleCardOrderListReq{}
|
||||
if c.ShouldBindJSON(&req) != nil {
|
||||
logger.Error("ShouldBindJSON err")
|
||||
RespJson(c, status.BadRequest, nil)
|
||||
return
|
||||
}
|
||||
uc := auth.GetCurrentUser(c)
|
||||
if uc == nil {
|
||||
logger.Error("uc is nil")
|
||||
RespJson(c, status.Unauthorized, nil)
|
||||
return
|
||||
}
|
||||
//uc = &auth.UserClaims{Uid: 8588420}
|
||||
|
||||
user := model.GetUserByUid(uc.Uid)
|
||||
if user != nil {
|
||||
req.StoreId = uint32(user.StoreId)
|
||||
}
|
||||
|
||||
orders, totalPage, err := req.List()
|
||||
if err != nil {
|
||||
logger.Error("game cassette err", err)
|
||||
RespJson(c, status.InternalServerError, nil)
|
||||
return
|
||||
}
|
||||
|
||||
ret := map[string]interface{}{
|
||||
"list": orders,
|
||||
"cur_page": req.PageIdx,
|
||||
"total_page": totalPage,
|
||||
}
|
||||
|
||||
RespOK(c, ret)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"bytes"
|
||||
"context"
|
||||
"crypto/md5"
|
||||
"crypto/tls"
|
||||
"encoding/json"
|
||||
"encoding/xml"
|
||||
"errors"
|
||||
|
@ -17,6 +18,7 @@ import (
|
|||
wechatpayutils "github.com/wechatpay-apiv3/wechatpay-go/utils"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
mathrand "math/rand"
|
||||
"mh-server/config"
|
||||
"mh-server/lib/utils"
|
||||
//"mh-server/model"
|
||||
|
@ -710,3 +712,229 @@ type OrderRefundAmount struct {
|
|||
Total uint32 `json:"total"`
|
||||
Currency string `json:"currency"`
|
||||
}
|
||||
|
||||
func RandomNum(min int64, max int64) int64 {
|
||||
r := mathrand.New(mathrand.NewSource(time.Now().UnixNano()))
|
||||
num := min + r.Int63n(max-min+1)
|
||||
return num
|
||||
}
|
||||
|
||||
func RandomNumString(min int64, max int64) string {
|
||||
num := RandomNum(min, max)
|
||||
return strconv.FormatInt(num, 10)
|
||||
}
|
||||
|
||||
func GenTradeNo() string {
|
||||
now := time.Now().Local()
|
||||
strTime := fmt.Sprintf("%04d%02d%02d%02d%02d%02d", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
|
||||
tradeNO := strTime + RandomNumString(100000, 999999)
|
||||
return tradeNO
|
||||
}
|
||||
|
||||
const (
|
||||
KC_RAND_KIND_NUM = 0 // 纯数字
|
||||
KC_RAND_KIND_LOWER = 1 // 小写字母
|
||||
KC_RAND_KIND_UPPER = 2 // 大写字母
|
||||
KC_RAND_KIND_ALL = 3 // 数字、大小写字母
|
||||
)
|
||||
|
||||
// 随机字符串
|
||||
func randStr(size int, kind int) string {
|
||||
ikind, kinds, result := kind, [][]int{[]int{10, 48}, []int{26, 97}, []int{26, 65}}, make([]byte, size)
|
||||
isAll := kind > 2 || kind < 0
|
||||
mathrand.Seed(time.Now().UnixNano())
|
||||
for i := 0; i < size; i++ {
|
||||
if isAll {
|
||||
ikind = mathrand.Intn(3)
|
||||
}
|
||||
scope, base := kinds[ikind][0], kinds[ikind][1]
|
||||
result[i] = uint8(base + mathrand.Intn(scope))
|
||||
}
|
||||
return string(result)
|
||||
}
|
||||
|
||||
func GenRandStr(size int) string {
|
||||
if size <= 0 {
|
||||
return ""
|
||||
}
|
||||
return randStr(size, KC_RAND_KIND_ALL)
|
||||
}
|
||||
|
||||
func GenWechatPaySign(m map[string]string, payKey string) (string, error) {
|
||||
delete(m, "sign")
|
||||
var signData []string
|
||||
for k, v := range m {
|
||||
if v != "" && v != "0" {
|
||||
signData = append(signData, fmt.Sprintf("%s=%s", k, v))
|
||||
}
|
||||
}
|
||||
|
||||
sort.Strings(signData)
|
||||
signStr := strings.Join(signData, "&")
|
||||
signStr = signStr + "&key=" + payKey
|
||||
|
||||
logger.Info("签字符串1 :", signStr)
|
||||
c := md5.New()
|
||||
_, err := c.Write([]byte(signStr))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
signByte := c.Sum(nil)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%x", signByte), nil
|
||||
}
|
||||
|
||||
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"
|
||||
)
|
||||
|
||||
//https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2
|
||||
type WxTransferReq struct {
|
||||
XMLName xml.Name `xml:"xml"` //xml标签
|
||||
MchAppid string `xml:"mch_appid" json:"mch_appid"` //微信分配的小程序ID,必须
|
||||
MchId string `xml:"mchid" json:"mchid"` //微信支付分配的商户号,必须
|
||||
DeviceInfo string `xml:"device_info" json:"device_info"`
|
||||
NonceStr string `xml:"nonce_str" json:"nonce_str"` //随机字符串,必须
|
||||
Sign string `xml:"sign" json:"sign"` //签名,必须 //"HMAC-SHA256"或者"MD5",非必须,默认MD5
|
||||
PartnerTradeNo string `xml:"partner_trade_no" json:"partner_trade_no"` //CRS订单号,必须
|
||||
OpenId string `xml:"openid" json:"openid"` //微信用户唯一标识,必须
|
||||
CheckName string `xml:"check_name" json:"check_name"`
|
||||
ReUserName string `xml:"re_user_name" json:"re_user_name"`
|
||||
Amount string `xml:"amount" json:"amount"`
|
||||
Desc string `xml:"desc" json:"desc"`
|
||||
SpbillCreateIp string `xml:"spbill_create_ip" json:"spbill_create_ip"`
|
||||
//SignType string `xml:"sign_type" json:"sign_type"` //"HMAC-SHA256"或者"MD5",非必须,默认MD5
|
||||
}
|
||||
|
||||
type WxTransferResp struct {
|
||||
ReturnCode string `xml:"return_code,CDATA"`
|
||||
ReturnMsg string `xml:"return_msg,CDATA"`
|
||||
ResultCode string `xml:"result_code,CDATA"`
|
||||
ErrCodeDes string `xml:"err_code_des,CDATA"`
|
||||
PartnerTradeNo string `xml:"partner_trade_no,CDATA"`
|
||||
PaymentNo string `xml:"payment_no,CDATA"`
|
||||
}
|
||||
|
||||
//给用户打款
|
||||
func Transfer(amount uint32, openId, desc string) (*WxTransferResp, error) {
|
||||
tradeNO := GenTradeNo()
|
||||
nonce := GenRandStr(NonceStringLength)
|
||||
|
||||
req := WxTransferReq{
|
||||
MchAppid: WxAppId,
|
||||
MchId: WxAppMchId,
|
||||
NonceStr: nonce,
|
||||
Sign: "",
|
||||
//SignType: "MD5",
|
||||
PartnerTradeNo: tradeNO,
|
||||
OpenId: openId,
|
||||
CheckName: WxCheckName,
|
||||
Amount: fmt.Sprintf("%d", amount),
|
||||
Desc: desc,
|
||||
SpbillCreateIp: SpbilCreateIp,
|
||||
}
|
||||
|
||||
wxResp := WxTransferResp{}
|
||||
|
||||
//生成签名
|
||||
m, err := struct2Map(req)
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
sign, err := GenWechatPaySign(m, WxAppMchSecret)
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
return nil, err
|
||||
}
|
||||
req.Sign = strings.ToUpper(sign)
|
||||
|
||||
payload, err := xml.Marshal(&req)
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
request, err := newPostRequest(WxTransferUrl, string(payload))
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
return nil, err
|
||||
}
|
||||
defer request.Body.Close()
|
||||
logger.Info("证书路径:", WxRootCaFile)
|
||||
logger.Info("证书路径:", WxKeyFile)
|
||||
client, err := newHttpClient(WxRootCaFile, WxKeyFile)
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := client.Do(request)
|
||||
defer resp.Body.Close()
|
||||
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
return nil, err
|
||||
}
|
||||
//logger.Info("Transfer resp = ", string(body))
|
||||
logger.Info("Transfer resp = ", string(body))
|
||||
err = xml.Unmarshal(body, &wxResp)
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if wxResp.ReturnCode != "SUCCESS" || wxResp.ResultCode != "SUCCESS" {
|
||||
return nil, errors.New("Transfer fail")
|
||||
}
|
||||
|
||||
return &wxResp, nil
|
||||
}
|
||||
|
||||
func newPostRequest(url string, content string) (*http.Request, error) {
|
||||
request, err := http.NewRequest("POST", url, strings.NewReader(content))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
request.Header.Set("Content-Type", "application/xml")
|
||||
|
||||
return request, nil
|
||||
}
|
||||
|
||||
func newHttpClient(certFile, keyFile string) (*http.Client, error) {
|
||||
tlsCert, err := tls.LoadX509KeyPair(certFile, keyFile)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
conf := &tls.Config{
|
||||
Certificates: []tls.Certificate{tlsCert},
|
||||
}
|
||||
trans := &http.Transport{
|
||||
TLSClientConfig: conf,
|
||||
}
|
||||
client := &http.Client{
|
||||
Transport: trans,
|
||||
}
|
||||
|
||||
return client, nil
|
||||
}
|
||||
|
|
|
@ -19,8 +19,8 @@ func GetXianClient() *XianMaiClient {
|
|||
if xian == nil {
|
||||
xian = &XianMaiClient{
|
||||
CustomPhone: "17080320980",
|
||||
//BaseURL:"https://oam.xianmai.net.cn",
|
||||
BaseURL: "https://test.oam.xianmai.net.cn/",
|
||||
BaseURL: "https://oam.xianmai.net.cn/",
|
||||
//BaseURL: "https://test.oam.xianmai.net.cn/",
|
||||
}
|
||||
}
|
||||
return xian
|
||||
|
@ -52,6 +52,8 @@ func (m *XianMaiClient) post(xmApi string, params map[string]interface{}, resp i
|
|||
fmt.Println(err)
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Println("dataRsp:", string(dataRsp))
|
||||
if err = json.Unmarshal(dataRsp, resp); err != nil {
|
||||
fmt.Println(err)
|
||||
return err
|
||||
|
|
|
@ -57,6 +57,74 @@ func (qs RecycleCardOrderQuerySet) All(ret *[]RecycleCardOrder) error {
|
|||
return qs.db.Find(ret).Error
|
||||
}
|
||||
|
||||
// AssistantNameEq is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) AssistantNameEq(assistantName string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("assistant_name = ?", assistantName))
|
||||
}
|
||||
|
||||
// AssistantNameGt is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) AssistantNameGt(assistantName string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("assistant_name > ?", assistantName))
|
||||
}
|
||||
|
||||
// AssistantNameGte is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) AssistantNameGte(assistantName string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("assistant_name >= ?", assistantName))
|
||||
}
|
||||
|
||||
// AssistantNameIn is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) AssistantNameIn(assistantName ...string) RecycleCardOrderQuerySet {
|
||||
if len(assistantName) == 0 {
|
||||
qs.db.AddError(errors.New("must at least pass one assistantName in AssistantNameIn"))
|
||||
return qs.w(qs.db)
|
||||
}
|
||||
return qs.w(qs.db.Where("assistant_name IN (?)", assistantName))
|
||||
}
|
||||
|
||||
// AssistantNameLike is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) AssistantNameLike(assistantName string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("assistant_name LIKE ?", assistantName))
|
||||
}
|
||||
|
||||
// AssistantNameLt is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) AssistantNameLt(assistantName string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("assistant_name < ?", assistantName))
|
||||
}
|
||||
|
||||
// AssistantNameLte is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) AssistantNameLte(assistantName string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("assistant_name <= ?", assistantName))
|
||||
}
|
||||
|
||||
// AssistantNameNe is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) AssistantNameNe(assistantName string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("assistant_name != ?", assistantName))
|
||||
}
|
||||
|
||||
// AssistantNameNotIn is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) AssistantNameNotIn(assistantName ...string) RecycleCardOrderQuerySet {
|
||||
if len(assistantName) == 0 {
|
||||
qs.db.AddError(errors.New("must at least pass one assistantName in AssistantNameNotIn"))
|
||||
return qs.w(qs.db)
|
||||
}
|
||||
return qs.w(qs.db.Where("assistant_name NOT IN (?)", assistantName))
|
||||
}
|
||||
|
||||
// AssistantNameNotlike is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) AssistantNameNotlike(assistantName string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("assistant_name NOT LIKE ?", assistantName))
|
||||
}
|
||||
|
||||
// AttributeEq is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) AttributeEq(attribute string) RecycleCardOrderQuerySet {
|
||||
|
@ -125,6 +193,42 @@ func (qs RecycleCardOrderQuerySet) AttributeNotlike(attribute string) RecycleCar
|
|||
return qs.w(qs.db.Where("attribute NOT LIKE ?", attribute))
|
||||
}
|
||||
|
||||
// CheckTimeEq is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) CheckTimeEq(checkTime time.Time) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("check_time = ?", checkTime))
|
||||
}
|
||||
|
||||
// CheckTimeGt is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) CheckTimeGt(checkTime time.Time) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("check_time > ?", checkTime))
|
||||
}
|
||||
|
||||
// CheckTimeGte is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) CheckTimeGte(checkTime time.Time) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("check_time >= ?", checkTime))
|
||||
}
|
||||
|
||||
// CheckTimeLt is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) CheckTimeLt(checkTime time.Time) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("check_time < ?", checkTime))
|
||||
}
|
||||
|
||||
// CheckTimeLte is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) CheckTimeLte(checkTime time.Time) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("check_time <= ?", checkTime))
|
||||
}
|
||||
|
||||
// CheckTimeNe is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) CheckTimeNe(checkTime time.Time) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("check_time != ?", checkTime))
|
||||
}
|
||||
|
||||
// Count is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) Count() (int, error) {
|
||||
|
@ -293,6 +397,74 @@ func (qs RecycleCardOrderQuerySet) DepressionRateNotIn(depressionRate ...uint32)
|
|||
return qs.w(qs.db.Where("depression_rate NOT IN (?)", depressionRate))
|
||||
}
|
||||
|
||||
// DescribeEq is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) DescribeEq(describe string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("describe = ?", describe))
|
||||
}
|
||||
|
||||
// DescribeGt is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) DescribeGt(describe string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("describe > ?", describe))
|
||||
}
|
||||
|
||||
// DescribeGte is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) DescribeGte(describe string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("describe >= ?", describe))
|
||||
}
|
||||
|
||||
// DescribeIn is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) DescribeIn(describe ...string) RecycleCardOrderQuerySet {
|
||||
if len(describe) == 0 {
|
||||
qs.db.AddError(errors.New("must at least pass one describe in DescribeIn"))
|
||||
return qs.w(qs.db)
|
||||
}
|
||||
return qs.w(qs.db.Where("describe IN (?)", describe))
|
||||
}
|
||||
|
||||
// DescribeLike is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) DescribeLike(describe string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("describe LIKE ?", describe))
|
||||
}
|
||||
|
||||
// DescribeLt is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) DescribeLt(describe string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("describe < ?", describe))
|
||||
}
|
||||
|
||||
// DescribeLte is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) DescribeLte(describe string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("describe <= ?", describe))
|
||||
}
|
||||
|
||||
// DescribeNe is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) DescribeNe(describe string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("describe != ?", describe))
|
||||
}
|
||||
|
||||
// DescribeNotIn is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) DescribeNotIn(describe ...string) RecycleCardOrderQuerySet {
|
||||
if len(describe) == 0 {
|
||||
qs.db.AddError(errors.New("must at least pass one describe in DescribeNotIn"))
|
||||
return qs.w(qs.db)
|
||||
}
|
||||
return qs.w(qs.db.Where("describe NOT IN (?)", describe))
|
||||
}
|
||||
|
||||
// DescribeNotlike is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) DescribeNotlike(describe string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("describe NOT LIKE ?", describe))
|
||||
}
|
||||
|
||||
// EvaluationTimeEq is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) EvaluationTimeEq(evaluationTime time.Time) RecycleCardOrderQuerySet {
|
||||
|
@ -811,12 +983,24 @@ func (qs RecycleCardOrderQuerySet) One(ret *RecycleCardOrder) error {
|
|||
return qs.db.First(ret).Error
|
||||
}
|
||||
|
||||
// OrderAscByAssistantName is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) OrderAscByAssistantName() RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Order("assistant_name ASC"))
|
||||
}
|
||||
|
||||
// OrderAscByAttribute is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) OrderAscByAttribute() RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Order("attribute ASC"))
|
||||
}
|
||||
|
||||
// OrderAscByCheckTime is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) OrderAscByCheckTime() RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Order("check_time ASC"))
|
||||
}
|
||||
|
||||
// OrderAscByCreatedAt is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) OrderAscByCreatedAt() RecycleCardOrderQuerySet {
|
||||
|
@ -835,6 +1019,12 @@ func (qs RecycleCardOrderQuerySet) OrderAscByDepressionRate() RecycleCardOrderQu
|
|||
return qs.w(qs.db.Order("depression_rate ASC"))
|
||||
}
|
||||
|
||||
// OrderAscByDescribe is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) OrderAscByDescribe() RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Order("describe ASC"))
|
||||
}
|
||||
|
||||
// OrderAscByEvaluationTime is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) OrderAscByEvaluationTime() RecycleCardOrderQuerySet {
|
||||
|
@ -889,6 +1079,12 @@ func (qs RecycleCardOrderQuerySet) OrderAscByPrice() RecycleCardOrderQuerySet {
|
|||
return qs.w(qs.db.Order("price ASC"))
|
||||
}
|
||||
|
||||
// OrderAscByRemark is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) OrderAscByRemark() RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Order("remark ASC"))
|
||||
}
|
||||
|
||||
// OrderAscBySerialNumber is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) OrderAscBySerialNumber() RecycleCardOrderQuerySet {
|
||||
|
@ -925,12 +1121,24 @@ func (qs RecycleCardOrderQuerySet) OrderAscByUpdatedAt() RecycleCardOrderQuerySe
|
|||
return qs.w(qs.db.Order("updated_at ASC"))
|
||||
}
|
||||
|
||||
// OrderDescByAssistantName is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) OrderDescByAssistantName() RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Order("assistant_name DESC"))
|
||||
}
|
||||
|
||||
// OrderDescByAttribute is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) OrderDescByAttribute() RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Order("attribute DESC"))
|
||||
}
|
||||
|
||||
// OrderDescByCheckTime is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) OrderDescByCheckTime() RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Order("check_time DESC"))
|
||||
}
|
||||
|
||||
// OrderDescByCreatedAt is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) OrderDescByCreatedAt() RecycleCardOrderQuerySet {
|
||||
|
@ -949,6 +1157,12 @@ func (qs RecycleCardOrderQuerySet) OrderDescByDepressionRate() RecycleCardOrderQ
|
|||
return qs.w(qs.db.Order("depression_rate DESC"))
|
||||
}
|
||||
|
||||
// OrderDescByDescribe is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) OrderDescByDescribe() RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Order("describe DESC"))
|
||||
}
|
||||
|
||||
// OrderDescByEvaluationTime is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) OrderDescByEvaluationTime() RecycleCardOrderQuerySet {
|
||||
|
@ -1003,6 +1217,12 @@ func (qs RecycleCardOrderQuerySet) OrderDescByPrice() RecycleCardOrderQuerySet {
|
|||
return qs.w(qs.db.Order("price DESC"))
|
||||
}
|
||||
|
||||
// OrderDescByRemark is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) OrderDescByRemark() RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Order("remark DESC"))
|
||||
}
|
||||
|
||||
// OrderDescBySerialNumber is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) OrderDescBySerialNumber() RecycleCardOrderQuerySet {
|
||||
|
@ -1095,6 +1315,74 @@ func (qs RecycleCardOrderQuerySet) PriceNotIn(price ...uint32) RecycleCardOrderQ
|
|||
return qs.w(qs.db.Where("price NOT IN (?)", price))
|
||||
}
|
||||
|
||||
// RemarkEq is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) RemarkEq(remark string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("remark = ?", remark))
|
||||
}
|
||||
|
||||
// RemarkGt is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) RemarkGt(remark string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("remark > ?", remark))
|
||||
}
|
||||
|
||||
// RemarkGte is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) RemarkGte(remark string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("remark >= ?", remark))
|
||||
}
|
||||
|
||||
// RemarkIn is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) RemarkIn(remark ...string) RecycleCardOrderQuerySet {
|
||||
if len(remark) == 0 {
|
||||
qs.db.AddError(errors.New("must at least pass one remark in RemarkIn"))
|
||||
return qs.w(qs.db)
|
||||
}
|
||||
return qs.w(qs.db.Where("remark IN (?)", remark))
|
||||
}
|
||||
|
||||
// RemarkLike is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) RemarkLike(remark string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("remark LIKE ?", remark))
|
||||
}
|
||||
|
||||
// RemarkLt is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) RemarkLt(remark string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("remark < ?", remark))
|
||||
}
|
||||
|
||||
// RemarkLte is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) RemarkLte(remark string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("remark <= ?", remark))
|
||||
}
|
||||
|
||||
// RemarkNe is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) RemarkNe(remark string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("remark != ?", remark))
|
||||
}
|
||||
|
||||
// RemarkNotIn is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) RemarkNotIn(remark ...string) RecycleCardOrderQuerySet {
|
||||
if len(remark) == 0 {
|
||||
qs.db.AddError(errors.New("must at least pass one remark in RemarkNotIn"))
|
||||
return qs.w(qs.db)
|
||||
}
|
||||
return qs.w(qs.db.Where("remark NOT IN (?)", remark))
|
||||
}
|
||||
|
||||
// RemarkNotlike is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) RemarkNotlike(remark string) RecycleCardOrderQuerySet {
|
||||
return qs.w(qs.db.Where("remark NOT LIKE ?", remark))
|
||||
}
|
||||
|
||||
// SerialNumberEq is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (qs RecycleCardOrderQuerySet) SerialNumberEq(serialNumber string) RecycleCardOrderQuerySet {
|
||||
|
@ -1435,6 +1723,13 @@ func (qs RecycleCardOrderQuerySet) UpdatedAtNe(updatedAt time.Time) RecycleCardO
|
|||
return qs.w(qs.db.Where("updated_at != ?", updatedAt))
|
||||
}
|
||||
|
||||
// SetAssistantName is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (u RecycleCardOrderUpdater) SetAssistantName(assistantName string) RecycleCardOrderUpdater {
|
||||
u.fields[string(RecycleCardOrderDBSchema.AssistantName)] = assistantName
|
||||
return u
|
||||
}
|
||||
|
||||
// SetAttribute is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (u RecycleCardOrderUpdater) SetAttribute(attribute string) RecycleCardOrderUpdater {
|
||||
|
@ -1442,6 +1737,13 @@ func (u RecycleCardOrderUpdater) SetAttribute(attribute string) RecycleCardOrder
|
|||
return u
|
||||
}
|
||||
|
||||
// SetCheckTime is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (u RecycleCardOrderUpdater) SetCheckTime(checkTime time.Time) RecycleCardOrderUpdater {
|
||||
u.fields[string(RecycleCardOrderDBSchema.CheckTime)] = checkTime
|
||||
return u
|
||||
}
|
||||
|
||||
// SetCreatedAt is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (u RecycleCardOrderUpdater) SetCreatedAt(createdAt time.Time) RecycleCardOrderUpdater {
|
||||
|
@ -1463,6 +1765,13 @@ func (u RecycleCardOrderUpdater) SetDepressionRate(depressionRate uint32) Recycl
|
|||
return u
|
||||
}
|
||||
|
||||
// SetDescribe is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (u RecycleCardOrderUpdater) SetDescribe(describe string) RecycleCardOrderUpdater {
|
||||
u.fields[string(RecycleCardOrderDBSchema.Describe)] = describe
|
||||
return u
|
||||
}
|
||||
|
||||
// SetEvaluationTime is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (u RecycleCardOrderUpdater) SetEvaluationTime(evaluationTime time.Time) RecycleCardOrderUpdater {
|
||||
|
@ -1526,6 +1835,13 @@ func (u RecycleCardOrderUpdater) SetPrice(price uint32) RecycleCardOrderUpdater
|
|||
return u
|
||||
}
|
||||
|
||||
// SetRemark is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (u RecycleCardOrderUpdater) SetRemark(remark string) RecycleCardOrderUpdater {
|
||||
u.fields[string(RecycleCardOrderDBSchema.Remark)] = remark
|
||||
return u
|
||||
}
|
||||
|
||||
// SetSerialNumber is an autogenerated method
|
||||
// nolint: dupl
|
||||
func (u RecycleCardOrderUpdater) SetSerialNumber(serialNumber string) RecycleCardOrderUpdater {
|
||||
|
@ -1614,7 +1930,11 @@ var RecycleCardOrderDBSchema = struct {
|
|||
EvaluationTime RecycleCardOrderDBSchemaField
|
||||
Attribute RecycleCardOrderDBSchemaField
|
||||
Number RecycleCardOrderDBSchemaField
|
||||
CheckTime RecycleCardOrderDBSchemaField
|
||||
DepressionRate RecycleCardOrderDBSchemaField
|
||||
Describe RecycleCardOrderDBSchemaField
|
||||
Remark RecycleCardOrderDBSchemaField
|
||||
AssistantName RecycleCardOrderDBSchemaField
|
||||
}{
|
||||
|
||||
ID: RecycleCardOrderDBSchemaField("id"),
|
||||
|
@ -1635,7 +1955,11 @@ var RecycleCardOrderDBSchema = struct {
|
|||
EvaluationTime: RecycleCardOrderDBSchemaField("evaluation_time"),
|
||||
Attribute: RecycleCardOrderDBSchemaField("attribute"),
|
||||
Number: RecycleCardOrderDBSchemaField("number"),
|
||||
CheckTime: RecycleCardOrderDBSchemaField("check_time"),
|
||||
DepressionRate: RecycleCardOrderDBSchemaField("depression_rate"),
|
||||
Describe: RecycleCardOrderDBSchemaField("describe"),
|
||||
Remark: RecycleCardOrderDBSchemaField("remark"),
|
||||
AssistantName: RecycleCardOrderDBSchemaField("assistant_name"),
|
||||
}
|
||||
|
||||
// Update updates RecycleCardOrder fields by primary key
|
||||
|
@ -1660,7 +1984,11 @@ func (o *RecycleCardOrder) Update(db *gorm.DB, fields ...RecycleCardOrderDBSchem
|
|||
"evaluation_time": o.EvaluationTime,
|
||||
"attribute": o.Attribute,
|
||||
"number": o.Number,
|
||||
"check_time": o.CheckTime,
|
||||
"depression_rate": o.DepressionRate,
|
||||
"describe": o.Describe,
|
||||
"remark": o.Remark,
|
||||
"assistant_name": o.AssistantName,
|
||||
}
|
||||
u := map[string]interface{}{}
|
||||
for _, f := range fields {
|
||||
|
|
|
@ -32,6 +32,7 @@ const (
|
|||
ConfigNameMemberVm = "member_vm_config" // 会员积分配置
|
||||
ConfigNameAttendanceVm = "attendance_vm_config" // 签到积分配置
|
||||
ConfigActivityRenewal = "activity_renewal_config" // 活动配置
|
||||
ConfigRecycleCard = "recycle_card_config" // 回收卡配置
|
||||
)
|
||||
|
||||
func PayConfigInfo() (*PayConfig, error) {
|
||||
|
@ -220,6 +221,28 @@ func GetActivityRenewalConfig() ActivityRenewalConfig {
|
|||
return info
|
||||
}
|
||||
|
||||
type RecycleCardConfig struct {
|
||||
RebateRate uint32 `json:"rebate_rate"`
|
||||
}
|
||||
|
||||
func RecycleCardConfigInfo() (RecycleCardConfig, error) {
|
||||
var recycleConfig RecycleCardConfig
|
||||
var configAllocation Config
|
||||
err := NewConfigQuerySet(DB).NameEq(ConfigRecycleCard).One(&configAllocation)
|
||||
if err != nil {
|
||||
logger.Error("err:", err)
|
||||
return recycleConfig, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(configAllocation.Value), &recycleConfig)
|
||||
if err != nil {
|
||||
logger.Error("err:", err)
|
||||
return recycleConfig, err
|
||||
}
|
||||
|
||||
return recycleConfig, nil
|
||||
}
|
||||
|
||||
//type ConfigInterface interface {
|
||||
// Encode() string
|
||||
//}
|
||||
|
|
|
@ -271,6 +271,7 @@ func InitDBProd() {
|
|||
&UserInvite{},
|
||||
&UserInviteRecord{},
|
||||
&CooperativeMemberPromotionStore{},
|
||||
&RecycleCardOrder{},
|
||||
)
|
||||
|
||||
if err := DBProd.DB().Ping(); err != nil {
|
||||
|
@ -1603,3 +1604,61 @@ func TestActivityRenewalConfig(t *testing.T) {
|
|||
}
|
||||
fmt.Println("marshal:", string(marshal))
|
||||
}
|
||||
|
||||
type MemberData struct {
|
||||
Date string `json:"date"`
|
||||
MemberCount uint32 `json:"member_count"`
|
||||
}
|
||||
|
||||
func TestMemberExport(t *testing.T) {
|
||||
MemberExport()
|
||||
}
|
||||
|
||||
func MemberExport() {
|
||||
InitDBProd()
|
||||
date, _ := time.Parse(utils.DateFormat, "2022-08-01")
|
||||
list := make([]*MemberData, 0, 7)
|
||||
for i := 0; i < 7; i++ {
|
||||
end := date.AddDate(0, -1*i, 0)
|
||||
start := end.AddDate(0, -1, 0)
|
||||
fmt.Println("start:", start.Format(utils.DateFormat))
|
||||
fmt.Println("end:", end.Format(utils.DateFormat))
|
||||
member := new(MemberData)
|
||||
member.Date = start.Format("2006-01")
|
||||
err := DBProd.Raw(
|
||||
"SELECT COUNT(id) AS member_count FROM `user` WHERE member_level IN (2,4,5) AND cooperative_business_id=1 AND open_member_time>? AND open_member_time<? ", start, end).Scan(member).Error
|
||||
if err != nil {
|
||||
fmt.Println("member err:", err)
|
||||
}
|
||||
list = append(list, member)
|
||||
}
|
||||
|
||||
file := excelize.NewFile()
|
||||
streamWriter, err := file.NewStreamWriter("Sheet1")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
fileName := time.Now().Format("2006-01-02 15:04:05") + "迪为会员统计" + ".xlsx"
|
||||
|
||||
title := []interface{}{"时间", "累计会员数"}
|
||||
cell, _ := excelize.CoordinatesToCellName(1, 1)
|
||||
if err = streamWriter.SetRow(cell, title); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
var row []interface{}
|
||||
for rowId := 0; rowId < len(list); rowId++ {
|
||||
row = []interface{}{list[rowId].Date, list[rowId].MemberCount}
|
||||
cell, _ := excelize.CoordinatesToCellName(1, rowId+2)
|
||||
if err := streamWriter.SetRow(cell, row); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
}
|
||||
if err := streamWriter.Flush(); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
if err := file.SaveAs("./" + fileName); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -28,8 +28,14 @@ type RecycleCardOrder struct {
|
|||
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"` // 店员
|
||||
// recycle_card_order
|
||||
}
|
||||
|
||||
type RecycleAttribute struct {
|
||||
|
@ -53,7 +59,6 @@ type RecycleAttribute struct {
|
|||
//}
|
||||
|
||||
func RecycleCardOrderCreate(uid uint32, req xianmai.GameEvaluationReq) (*RecycleCardOrder, error) {
|
||||
|
||||
order := &RecycleCardOrder{
|
||||
Uid: uid,
|
||||
GoodsId: uint32(req.GoodsId),
|
||||
|
@ -73,21 +78,27 @@ func RecycleCardOrderCreate(uid uint32, req xianmai.GameEvaluationReq) (*Recycle
|
|||
logger.Error("evaluation err:", err)
|
||||
return order, err
|
||||
}
|
||||
evaluation = (evaluation * 1) / 100
|
||||
//evaluation = (evaluation * 1) / 100
|
||||
info, err := RecycleCardConfigInfo()
|
||||
if err != nil {
|
||||
logger.Error("config err:", err)
|
||||
return order, err
|
||||
}
|
||||
if info.RebateRate > 0 && info.RebateRate < 10000 {
|
||||
evaluation = (evaluation * int(10000-info.RebateRate)) / 100
|
||||
} else {
|
||||
evaluation = evaluation * 100
|
||||
}
|
||||
if evaluation > 70000 {
|
||||
logger.Error("price err")
|
||||
return order, err
|
||||
}
|
||||
evaluation = (evaluation / 100) * 100
|
||||
//evaluation = 40 // TODO
|
||||
order.Price = uint32(evaluation)
|
||||
attributes := make([]RecycleAttribute, 0, len(req.ProblemAttrList)+len(req.SkuList))
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
order.Number = fmt.Sprintf("%d%s", rand.Int31n(899999)+100000, time.Now().Format("06-01-02"))
|
||||
for i, _ := range req.ProblemAttrList {
|
||||
attribute := RecycleAttribute{
|
||||
Id: uint32(req.ProblemAttrList[i].ProblemAttrId),
|
||||
Name: req.ProblemAttrList[i].ProblemAttrName,
|
||||
ValueId: uint32(req.ProblemAttrList[i].ProblemAttrValueId),
|
||||
ValueName: req.ProblemAttrList[i].ProblemAttrValueName,
|
||||
Type: 2,
|
||||
}
|
||||
attributes = append(attributes, attribute)
|
||||
}
|
||||
order.Number = fmt.Sprintf("%d%s", rand.Int31n(899999)+100000, time.Now().Format("060102"))
|
||||
for i, _ := range req.SkuList {
|
||||
attribute := RecycleAttribute{
|
||||
Id: uint32(req.SkuList[i].ProblemAttrId),
|
||||
|
@ -98,6 +109,17 @@ func RecycleCardOrderCreate(uid uint32, req xianmai.GameEvaluationReq) (*Recycle
|
|||
}
|
||||
attributes = append(attributes, attribute)
|
||||
}
|
||||
for i, _ := range req.ProblemAttrList {
|
||||
attribute := RecycleAttribute{
|
||||
Id: uint32(req.ProblemAttrList[i].ProblemAttrId),
|
||||
Name: req.ProblemAttrList[i].ProblemAttrName,
|
||||
ValueId: uint32(req.ProblemAttrList[i].ProblemAttrValueId),
|
||||
ValueName: req.ProblemAttrList[i].ProblemAttrValueName,
|
||||
Type: 2,
|
||||
}
|
||||
attributes = append(attributes, attribute)
|
||||
}
|
||||
|
||||
attributeByte, err := json.Marshal(&attributes)
|
||||
if err != nil {
|
||||
logger.Error("attributes marshal err:", err)
|
||||
|
@ -143,6 +165,73 @@ func (m *RecycleCardOrderListReq) List() ([]RecycleCardOrder, int, error) {
|
|||
logger.Error("err:", err)
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
RecycleCardOrderListSetStore(list)
|
||||
return list, totalPage, nil
|
||||
}
|
||||
|
||||
func RecycleCardOrderListSetStore(orders []RecycleCardOrder) {
|
||||
ids := make([]uint32, 0, len(orders))
|
||||
for i, _ := range orders {
|
||||
ids = append(ids, orders[i].StoreId)
|
||||
}
|
||||
|
||||
storeMap, err := GetStoreMap(ids)
|
||||
if err != nil {
|
||||
logger.Error("store map err:", err)
|
||||
return
|
||||
}
|
||||
for i, _ := range orders {
|
||||
v, ok := storeMap[orders[i].StoreId]
|
||||
if ok {
|
||||
orders[i].Store = &v
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type ConsoleRecycleCardOrderListReq struct {
|
||||
PageIdx int `json:"page_idx"`
|
||||
PageSize int `json:"page_size"`
|
||||
Uid uint32 `json:"uid"`
|
||||
StoreId uint32 `json:"store_id"`
|
||||
Number string `json:"number"`
|
||||
State uint32 `json:"state"`
|
||||
}
|
||||
|
||||
func (m *ConsoleRecycleCardOrderListReq) List() ([]RecycleCardOrder, int, error) {
|
||||
page := m.PageIdx - 1
|
||||
if page < 0 {
|
||||
page = 0
|
||||
}
|
||||
if m.PageSize == 0 {
|
||||
m.PageSize = 10
|
||||
}
|
||||
|
||||
var list []RecycleCardOrder
|
||||
qs := NewRecycleCardOrderQuerySet(DB)
|
||||
if m.Uid != 0 {
|
||||
qs = qs.UidEq(m.Uid)
|
||||
}
|
||||
if m.StoreId != 0 {
|
||||
qs = qs.StoreIdEq(m.StoreId)
|
||||
}
|
||||
if m.Number != "" {
|
||||
qs = qs.NumberEq(m.Number)
|
||||
}
|
||||
if m.State != 0 {
|
||||
qs = qs.StateEq(m.State)
|
||||
}
|
||||
count, err := qs.Count()
|
||||
if err != nil {
|
||||
logger.Error("err:", err)
|
||||
return nil, 0, err
|
||||
}
|
||||
totalPage := count/m.PageSize + 1
|
||||
|
||||
err = qs.OrderDescByID().Offset(page * m.PageSize).Limit(m.PageSize).All(&list)
|
||||
if err != nil {
|
||||
logger.Error("err:", err)
|
||||
return nil, 0, err
|
||||
}
|
||||
RecycleCardOrderListSetStore(list)
|
||||
return list, totalPage, nil
|
||||
}
|
||||
|
|
|
@ -146,7 +146,7 @@ const (
|
|||
FundTypeBuyGoods = "buy_goods" // 购买商品
|
||||
FundTypeBuyGoodsCancel = "buy_goods_cancel" // 购买商品取消订单
|
||||
FundTypeBuyGoodsRefund = "buy_goods_refund" // 购买商品退货
|
||||
|
||||
FundTypeRecycleCard = "recycle_card" // 回收卡带
|
||||
)
|
||||
|
||||
// gen:qs
|
||||
|
|
23
pack/configs/merchant/apiclient_cert.pem
Normal file
23
pack/configs/merchant/apiclient_cert.pem
Normal file
|
@ -0,0 +1,23 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIID7DCCAtSgAwIBAgIUHAcyBucUtKSXoBDQI0eLC2fxzxUwDQYJKoZIhvcNAQEL
|
||||
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
|
||||
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
|
||||
Q0EwHhcNMjExMTIwMTAyNjI2WhcNMjYxMTE5MTAyNjI2WjB+MRMwEQYDVQQDDAox
|
||||
NjA5ODc3Mzg5MRswGQYDVQQKDBLlvq7kv6HllYbmiLfns7vnu58xKjAoBgNVBAsM
|
||||
Iea3seWcs+W4guaYjuaFp+enkeaKgOaciemZkOWFrOWPuDELMAkGA1UEBgwCQ04x
|
||||
ETAPBgNVBAcMCFNoZW5aaGVuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
||||
AQEA6BNdHwPQzH7zICj47GEVVv53ABuaeC6+WawSAbqMcoPDbI+ZABpQKQW3yo6s
|
||||
RThpKC2qP+WABxmXh4NbpukUysy7AynIdMafmsy/dbo8+hGfHxg+umHN4IldBu/8
|
||||
Gni2xQFcxJmUwhrZ3LOMX7zQFcQ2LEDxN0dpDXHh0ZKR3yJi83Sah+GugrXY1uM7
|
||||
b0Hiwz60uDkAAPdNZZsal9JyY8dMI1L2ESjJvQnKjq/TArIJ/AeuX4IIgU2DJFvo
|
||||
jUmtGQC2xaBdWLswTJrfRbnEVVfGpmJg9qJoioHGF7zekyhE/t0Minn539mU+wdv
|
||||
hLijakvWicjHhKAbuMnltMZA3QIDAQABo4GBMH8wCQYDVR0TBAIwADALBgNVHQ8E
|
||||
BAMCBPAwZQYDVR0fBF4wXDBaoFigVoZUaHR0cDovL2V2Y2EuaXRydXMuY29tLmNu
|
||||
L3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0
|
||||
NkMwMUMzRThFQkQyMA0GCSqGSIb3DQEBCwUAA4IBAQCXBBXwZU1dqM4aYt95Y6D7
|
||||
3CZ7H1H3evNRZypvuos30P9gy6Y8hkukE///p2EZaE/a3xfBjPe9W9DEgYw/83LW
|
||||
f3wP+ot5xhbA2W5fWXiRH66a35JsYfY75uNnIl7aD2L1v3p7pEOF7Hi6YcrRHcOu
|
||||
gGU4DompCPqKzNtHtf4PRYdbJsZAc/vLErrgD2x/9ZYxBW5VbNjymwxtWS4wFdZw
|
||||
BRbEQyoc4XZqnOEhwwoncitkcBjELcZHYFU33rlJCyd5X5bDwnmzKShJEa/uLcNJ
|
||||
udU4Gqwc5gENpGpwcsmh8jwGx+v6BcmKQh4NoByUdWHOBvdhJ5ffASkoaPU+oF09
|
||||
-----END CERTIFICATE-----
|
|
@ -259,8 +259,16 @@ func ConfigAppRouter(r gin.IRouter) {
|
|||
recycle.POST("order/list", controller.RecycleCardOrderList)
|
||||
recycle.POST("order/detail", controller.RecycleCardOrderDetail)
|
||||
recycle.POST("order/cancel", controller.RecycleCardOrderCancel)
|
||||
recycle.POST("cassette_image/update", controller.RecycleCardOrderImageUpdate) // 管理端
|
||||
recycle.POST("order/check", controller.RecycleCardOrderCheck) // 管理端
|
||||
|
||||
}
|
||||
|
||||
console := api.Group("console")
|
||||
recycleConsole := console.Group("recycle_card")
|
||||
{
|
||||
recycleConsole.Use(auth.UserAccessAuth)
|
||||
recycleConsole.POST("cassette_image/update", controller.RecycleCardOrderImageUpdate) // 管理端
|
||||
recycleConsole.POST("order/check", controller.RecycleCardOrderCheck) // 管理端
|
||||
recycleConsole.POST("order/list", controller.ConsoleRecycleCardOrderList)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user