fix:回收卡
This commit is contained in:
parent
d0b4f45d7b
commit
7beb572b61
|
@ -56,6 +56,7 @@ func CooperativeGameCardGoodsStockAdds(c *gin.Context) {
|
||||||
Uid: assistant.Uid,
|
Uid: assistant.Uid,
|
||||||
Description: "游戏卡入库",
|
Description: "游戏卡入库",
|
||||||
OperationType: model.OperationTypeGameCardGoodsInStock,
|
OperationType: model.OperationTypeGameCardGoodsInStock,
|
||||||
|
//CorrelationId:
|
||||||
CorrelationName: model.LogCorrelationOrderId,
|
CorrelationName: model.LogCorrelationOrderId,
|
||||||
StoreId: uint32(assistant.StoreId),
|
StoreId: uint32(assistant.StoreId),
|
||||||
StoreName: "",
|
StoreName: "",
|
||||||
|
|
|
@ -5,8 +5,10 @@ import (
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"mh-server/lib/auth"
|
"mh-server/lib/auth"
|
||||||
"mh-server/lib/status"
|
"mh-server/lib/status"
|
||||||
|
"mh-server/lib/wxpay"
|
||||||
"mh-server/lib/xianmai"
|
"mh-server/lib/xianmai"
|
||||||
"mh-server/model"
|
"mh-server/model"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GameCassetteList(c *gin.Context) {
|
func GameCassetteList(c *gin.Context) {
|
||||||
|
@ -26,12 +28,15 @@ func GameCassetteList(c *gin.Context) {
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.InternalServerError, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if count == 0 {
|
||||||
|
count = 1
|
||||||
|
}
|
||||||
ret := map[string]interface{}{
|
ret := map[string]interface{}{
|
||||||
"count": count,
|
//"count": count,
|
||||||
"list": cassettes,
|
"list": cassettes,
|
||||||
"pageIndex": req.PageNum,
|
"pageIndex": req.PageNum,
|
||||||
"total_page": req.PageSize,
|
"pageSize": req.PageSize,
|
||||||
|
"total_page": count,
|
||||||
}
|
}
|
||||||
|
|
||||||
RespOK(c, ret)
|
RespOK(c, ret)
|
||||||
|
@ -69,7 +74,25 @@ func GameEvaluation(c *gin.Context) {
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.InternalServerError, nil)
|
||||||
return
|
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{}{
|
ret := map[string]interface{}{
|
||||||
"price": price,
|
"price": price,
|
||||||
}
|
}
|
||||||
|
@ -143,14 +166,14 @@ func RecycleCardOrderDetail(c *gin.Context) {
|
||||||
RespJson(c, status.BadRequest, nil)
|
RespJson(c, status.BadRequest, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
uc := auth.GetCurrentUser(c)
|
//uc := auth.GetCurrentUser(c)
|
||||||
if uc == nil {
|
//if uc == nil {
|
||||||
logger.Error("uc is nil")
|
// logger.Error("uc is nil")
|
||||||
RespJson(c, status.Unauthorized, nil)
|
// RespJson(c, status.Unauthorized, nil)
|
||||||
return
|
// return
|
||||||
}
|
//}
|
||||||
//uc = &auth.UserClaims{Uid: 8588420}
|
//uc = &auth.UserClaims{Uid: 8588420}
|
||||||
user := model.GetUserByUid(uc.Uid)
|
|
||||||
var order model.RecycleCardOrder
|
var order model.RecycleCardOrder
|
||||||
err := model.NewRecycleCardOrderQuerySet(model.DB).IDEq(req.OrderId).One(&order)
|
err := model.NewRecycleCardOrderQuerySet(model.DB).IDEq(req.OrderId).One(&order)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -158,8 +181,15 @@ func RecycleCardOrderDetail(c *gin.Context) {
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.InternalServerError, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
user := model.GetUserByUid(order.Uid)
|
||||||
order.User = user
|
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)
|
RespOK(c, order)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -223,25 +253,71 @@ func RecycleCardOrderImageUpdate(c *gin.Context) {
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.InternalServerError, nil)
|
||||||
return
|
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().
|
transfer, err := wxpay.Transfer(order.Price, userInfo.WxOpenID, "回收卡带")
|
||||||
SetImages(req.Images).Update()
|
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 {
|
if err != nil {
|
||||||
logger.Error("game cassette err", err)
|
logger.Error("game cassette err", err)
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.InternalServerError, nil)
|
||||||
return
|
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{
|
operationLog := &model.OperationLog{
|
||||||
Uid: assistant.Uid,
|
Uid: assistant.Uid,
|
||||||
Description: "回收卡上传图片",
|
Description: "回收卡带转款",
|
||||||
OperationType: model.OperationTypeRecycleCardOrderImageUpdate,
|
OperationType: model.OperationTypeRecycleCardOrderImageUpdate,
|
||||||
|
CorrelationId: order.ID,
|
||||||
CorrelationName: model.LogCorrelationRecycleCardOrderId,
|
CorrelationName: model.LogCorrelationRecycleCardOrderId,
|
||||||
StoreId: uint32(assistant.StoreId),
|
StoreId: uint32(assistant.StoreId),
|
||||||
StoreName: "",
|
StoreName: "",
|
||||||
CooperativeName: assistant.CooperativeName,
|
CooperativeName: assistant.CooperativeName,
|
||||||
CooperativeBusinessId: assistant.CooperativeBusinessId,
|
CooperativeBusinessId: assistant.CooperativeBusinessId,
|
||||||
|
Detail: "",
|
||||||
}
|
}
|
||||||
operationLog.AddLog()
|
operationLog.AddLog()
|
||||||
|
|
||||||
RespOK(c, nil)
|
RespOK(c, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -249,6 +325,7 @@ func RecycleCardOrderImageUpdate(c *gin.Context) {
|
||||||
func RecycleCardOrderCheck(c *gin.Context) {
|
func RecycleCardOrderCheck(c *gin.Context) {
|
||||||
req := struct {
|
req := struct {
|
||||||
OrderId uint32 `json:"order_id" binding:"required"`
|
OrderId uint32 `json:"order_id" binding:"required"`
|
||||||
|
CheckType uint32 `json:"check_type" binding:"required"` // 1-拒绝
|
||||||
}{}
|
}{}
|
||||||
if c.ShouldBindJSON(&req) != nil {
|
if c.ShouldBindJSON(&req) != nil {
|
||||||
logger.Error("ShouldBindJSON err")
|
logger.Error("ShouldBindJSON err")
|
||||||
|
@ -262,7 +339,17 @@ func RecycleCardOrderCheck(c *gin.Context) {
|
||||||
RespJson(c, status.Unauthorized, nil)
|
RespJson(c, status.Unauthorized, nil)
|
||||||
return
|
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}
|
//uc = &auth.UserClaims{Uid: 8588420}
|
||||||
assistant := model.GetUserByUid(uc.Uid)
|
assistant := model.GetUserByUid(uc.Uid)
|
||||||
if assistant.UserType != 2 {
|
if assistant.UserType != 2 {
|
||||||
|
@ -271,24 +358,52 @@ func RecycleCardOrderCheck(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
//err := model.NewRecycleCardOrderQuerySet(model.DB).IDEq(req.OrderId).GetUpdater().
|
if req.CheckType == 1 {
|
||||||
// SetImages(req.Images).Update()
|
err := model.NewRecycleCardOrderQuerySet(model.DB).IDEq(req.OrderId).GetUpdater().
|
||||||
//if err != nil {
|
SetState(3).SetCheckTime(time.Now()).SetAssistantName(assistant.ShopAssistantName).Update()
|
||||||
// logger.Error("game cassette err", err)
|
if err != nil {
|
||||||
// RespJson(c, status.InternalServerError, nil)
|
logger.Error("update recycle card order err:", err)
|
||||||
// return
|
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,
|
|
||||||
}
|
}
|
||||||
operationLog.AddLog()
|
}
|
||||||
|
|
||||||
RespOK(c, nil)
|
RespOK(c, nil)
|
||||||
return
|
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"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
|
"crypto/tls"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"errors"
|
"errors"
|
||||||
|
@ -17,6 +18,7 @@ import (
|
||||||
wechatpayutils "github.com/wechatpay-apiv3/wechatpay-go/utils"
|
wechatpayutils "github.com/wechatpay-apiv3/wechatpay-go/utils"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
|
mathrand "math/rand"
|
||||||
"mh-server/config"
|
"mh-server/config"
|
||||||
"mh-server/lib/utils"
|
"mh-server/lib/utils"
|
||||||
//"mh-server/model"
|
//"mh-server/model"
|
||||||
|
@ -710,3 +712,229 @@ type OrderRefundAmount struct {
|
||||||
Total uint32 `json:"total"`
|
Total uint32 `json:"total"`
|
||||||
Currency string `json:"currency"`
|
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 {
|
if xian == nil {
|
||||||
xian = &XianMaiClient{
|
xian = &XianMaiClient{
|
||||||
CustomPhone: "17080320980",
|
CustomPhone: "17080320980",
|
||||||
//BaseURL:"https://oam.xianmai.net.cn",
|
BaseURL: "https://oam.xianmai.net.cn/",
|
||||||
BaseURL: "https://test.oam.xianmai.net.cn/",
|
//BaseURL: "https://test.oam.xianmai.net.cn/",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return xian
|
return xian
|
||||||
|
@ -52,6 +52,8 @@ func (m *XianMaiClient) post(xmApi string, params map[string]interface{}, resp i
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Println("dataRsp:", string(dataRsp))
|
||||||
if err = json.Unmarshal(dataRsp, resp); err != nil {
|
if err = json.Unmarshal(dataRsp, resp); err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -57,6 +57,74 @@ func (qs RecycleCardOrderQuerySet) All(ret *[]RecycleCardOrder) error {
|
||||||
return qs.db.Find(ret).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
|
// AttributeEq is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (qs RecycleCardOrderQuerySet) AttributeEq(attribute string) RecycleCardOrderQuerySet {
|
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))
|
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
|
// Count is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (qs RecycleCardOrderQuerySet) Count() (int, error) {
|
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))
|
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
|
// EvaluationTimeEq is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (qs RecycleCardOrderQuerySet) EvaluationTimeEq(evaluationTime time.Time) RecycleCardOrderQuerySet {
|
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
|
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
|
// OrderAscByAttribute is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (qs RecycleCardOrderQuerySet) OrderAscByAttribute() RecycleCardOrderQuerySet {
|
func (qs RecycleCardOrderQuerySet) OrderAscByAttribute() RecycleCardOrderQuerySet {
|
||||||
return qs.w(qs.db.Order("attribute ASC"))
|
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
|
// OrderAscByCreatedAt is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (qs RecycleCardOrderQuerySet) OrderAscByCreatedAt() RecycleCardOrderQuerySet {
|
func (qs RecycleCardOrderQuerySet) OrderAscByCreatedAt() RecycleCardOrderQuerySet {
|
||||||
|
@ -835,6 +1019,12 @@ func (qs RecycleCardOrderQuerySet) OrderAscByDepressionRate() RecycleCardOrderQu
|
||||||
return qs.w(qs.db.Order("depression_rate ASC"))
|
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
|
// OrderAscByEvaluationTime is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (qs RecycleCardOrderQuerySet) OrderAscByEvaluationTime() RecycleCardOrderQuerySet {
|
func (qs RecycleCardOrderQuerySet) OrderAscByEvaluationTime() RecycleCardOrderQuerySet {
|
||||||
|
@ -889,6 +1079,12 @@ func (qs RecycleCardOrderQuerySet) OrderAscByPrice() RecycleCardOrderQuerySet {
|
||||||
return qs.w(qs.db.Order("price ASC"))
|
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
|
// OrderAscBySerialNumber is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (qs RecycleCardOrderQuerySet) OrderAscBySerialNumber() RecycleCardOrderQuerySet {
|
func (qs RecycleCardOrderQuerySet) OrderAscBySerialNumber() RecycleCardOrderQuerySet {
|
||||||
|
@ -925,12 +1121,24 @@ func (qs RecycleCardOrderQuerySet) OrderAscByUpdatedAt() RecycleCardOrderQuerySe
|
||||||
return qs.w(qs.db.Order("updated_at ASC"))
|
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
|
// OrderDescByAttribute is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (qs RecycleCardOrderQuerySet) OrderDescByAttribute() RecycleCardOrderQuerySet {
|
func (qs RecycleCardOrderQuerySet) OrderDescByAttribute() RecycleCardOrderQuerySet {
|
||||||
return qs.w(qs.db.Order("attribute DESC"))
|
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
|
// OrderDescByCreatedAt is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (qs RecycleCardOrderQuerySet) OrderDescByCreatedAt() RecycleCardOrderQuerySet {
|
func (qs RecycleCardOrderQuerySet) OrderDescByCreatedAt() RecycleCardOrderQuerySet {
|
||||||
|
@ -949,6 +1157,12 @@ func (qs RecycleCardOrderQuerySet) OrderDescByDepressionRate() RecycleCardOrderQ
|
||||||
return qs.w(qs.db.Order("depression_rate DESC"))
|
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
|
// OrderDescByEvaluationTime is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (qs RecycleCardOrderQuerySet) OrderDescByEvaluationTime() RecycleCardOrderQuerySet {
|
func (qs RecycleCardOrderQuerySet) OrderDescByEvaluationTime() RecycleCardOrderQuerySet {
|
||||||
|
@ -1003,6 +1217,12 @@ func (qs RecycleCardOrderQuerySet) OrderDescByPrice() RecycleCardOrderQuerySet {
|
||||||
return qs.w(qs.db.Order("price DESC"))
|
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
|
// OrderDescBySerialNumber is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (qs RecycleCardOrderQuerySet) OrderDescBySerialNumber() RecycleCardOrderQuerySet {
|
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))
|
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
|
// SerialNumberEq is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (qs RecycleCardOrderQuerySet) SerialNumberEq(serialNumber string) RecycleCardOrderQuerySet {
|
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))
|
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
|
// SetAttribute is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (u RecycleCardOrderUpdater) SetAttribute(attribute string) RecycleCardOrderUpdater {
|
func (u RecycleCardOrderUpdater) SetAttribute(attribute string) RecycleCardOrderUpdater {
|
||||||
|
@ -1442,6 +1737,13 @@ func (u RecycleCardOrderUpdater) SetAttribute(attribute string) RecycleCardOrder
|
||||||
return u
|
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
|
// SetCreatedAt is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (u RecycleCardOrderUpdater) SetCreatedAt(createdAt time.Time) RecycleCardOrderUpdater {
|
func (u RecycleCardOrderUpdater) SetCreatedAt(createdAt time.Time) RecycleCardOrderUpdater {
|
||||||
|
@ -1463,6 +1765,13 @@ func (u RecycleCardOrderUpdater) SetDepressionRate(depressionRate uint32) Recycl
|
||||||
return u
|
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
|
// SetEvaluationTime is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (u RecycleCardOrderUpdater) SetEvaluationTime(evaluationTime time.Time) RecycleCardOrderUpdater {
|
func (u RecycleCardOrderUpdater) SetEvaluationTime(evaluationTime time.Time) RecycleCardOrderUpdater {
|
||||||
|
@ -1526,6 +1835,13 @@ func (u RecycleCardOrderUpdater) SetPrice(price uint32) RecycleCardOrderUpdater
|
||||||
return u
|
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
|
// SetSerialNumber is an autogenerated method
|
||||||
// nolint: dupl
|
// nolint: dupl
|
||||||
func (u RecycleCardOrderUpdater) SetSerialNumber(serialNumber string) RecycleCardOrderUpdater {
|
func (u RecycleCardOrderUpdater) SetSerialNumber(serialNumber string) RecycleCardOrderUpdater {
|
||||||
|
@ -1614,7 +1930,11 @@ var RecycleCardOrderDBSchema = struct {
|
||||||
EvaluationTime RecycleCardOrderDBSchemaField
|
EvaluationTime RecycleCardOrderDBSchemaField
|
||||||
Attribute RecycleCardOrderDBSchemaField
|
Attribute RecycleCardOrderDBSchemaField
|
||||||
Number RecycleCardOrderDBSchemaField
|
Number RecycleCardOrderDBSchemaField
|
||||||
|
CheckTime RecycleCardOrderDBSchemaField
|
||||||
DepressionRate RecycleCardOrderDBSchemaField
|
DepressionRate RecycleCardOrderDBSchemaField
|
||||||
|
Describe RecycleCardOrderDBSchemaField
|
||||||
|
Remark RecycleCardOrderDBSchemaField
|
||||||
|
AssistantName RecycleCardOrderDBSchemaField
|
||||||
}{
|
}{
|
||||||
|
|
||||||
ID: RecycleCardOrderDBSchemaField("id"),
|
ID: RecycleCardOrderDBSchemaField("id"),
|
||||||
|
@ -1635,7 +1955,11 @@ var RecycleCardOrderDBSchema = struct {
|
||||||
EvaluationTime: RecycleCardOrderDBSchemaField("evaluation_time"),
|
EvaluationTime: RecycleCardOrderDBSchemaField("evaluation_time"),
|
||||||
Attribute: RecycleCardOrderDBSchemaField("attribute"),
|
Attribute: RecycleCardOrderDBSchemaField("attribute"),
|
||||||
Number: RecycleCardOrderDBSchemaField("number"),
|
Number: RecycleCardOrderDBSchemaField("number"),
|
||||||
|
CheckTime: RecycleCardOrderDBSchemaField("check_time"),
|
||||||
DepressionRate: RecycleCardOrderDBSchemaField("depression_rate"),
|
DepressionRate: RecycleCardOrderDBSchemaField("depression_rate"),
|
||||||
|
Describe: RecycleCardOrderDBSchemaField("describe"),
|
||||||
|
Remark: RecycleCardOrderDBSchemaField("remark"),
|
||||||
|
AssistantName: RecycleCardOrderDBSchemaField("assistant_name"),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update updates RecycleCardOrder fields by primary key
|
// Update updates RecycleCardOrder fields by primary key
|
||||||
|
@ -1660,7 +1984,11 @@ func (o *RecycleCardOrder) Update(db *gorm.DB, fields ...RecycleCardOrderDBSchem
|
||||||
"evaluation_time": o.EvaluationTime,
|
"evaluation_time": o.EvaluationTime,
|
||||||
"attribute": o.Attribute,
|
"attribute": o.Attribute,
|
||||||
"number": o.Number,
|
"number": o.Number,
|
||||||
|
"check_time": o.CheckTime,
|
||||||
"depression_rate": o.DepressionRate,
|
"depression_rate": o.DepressionRate,
|
||||||
|
"describe": o.Describe,
|
||||||
|
"remark": o.Remark,
|
||||||
|
"assistant_name": o.AssistantName,
|
||||||
}
|
}
|
||||||
u := map[string]interface{}{}
|
u := map[string]interface{}{}
|
||||||
for _, f := range fields {
|
for _, f := range fields {
|
||||||
|
|
|
@ -32,6 +32,7 @@ const (
|
||||||
ConfigNameMemberVm = "member_vm_config" // 会员积分配置
|
ConfigNameMemberVm = "member_vm_config" // 会员积分配置
|
||||||
ConfigNameAttendanceVm = "attendance_vm_config" // 签到积分配置
|
ConfigNameAttendanceVm = "attendance_vm_config" // 签到积分配置
|
||||||
ConfigActivityRenewal = "activity_renewal_config" // 活动配置
|
ConfigActivityRenewal = "activity_renewal_config" // 活动配置
|
||||||
|
ConfigRecycleCard = "recycle_card_config" // 回收卡配置
|
||||||
)
|
)
|
||||||
|
|
||||||
func PayConfigInfo() (*PayConfig, error) {
|
func PayConfigInfo() (*PayConfig, error) {
|
||||||
|
@ -220,6 +221,28 @@ func GetActivityRenewalConfig() ActivityRenewalConfig {
|
||||||
return info
|
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 {
|
//type ConfigInterface interface {
|
||||||
// Encode() string
|
// Encode() string
|
||||||
//}
|
//}
|
||||||
|
|
|
@ -271,6 +271,7 @@ func InitDBProd() {
|
||||||
&UserInvite{},
|
&UserInvite{},
|
||||||
&UserInviteRecord{},
|
&UserInviteRecord{},
|
||||||
&CooperativeMemberPromotionStore{},
|
&CooperativeMemberPromotionStore{},
|
||||||
|
&RecycleCardOrder{},
|
||||||
)
|
)
|
||||||
|
|
||||||
if err := DBProd.DB().Ping(); err != nil {
|
if err := DBProd.DB().Ping(); err != nil {
|
||||||
|
@ -1603,3 +1604,61 @@ func TestActivityRenewalConfig(t *testing.T) {
|
||||||
}
|
}
|
||||||
fmt.Println("marshal:", string(marshal))
|
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"`
|
EvaluationTime time.Time `json:"evaluation_time"`
|
||||||
Attribute string `json:"attribute" gorm:"type:text"` //
|
Attribute string `json:"attribute" gorm:"type:text"` //
|
||||||
Number string `json:"number"` // 订单
|
Number string `json:"number"` // 订单
|
||||||
|
CheckTime time.Time `json:"check_time"`
|
||||||
DepressionRate uint32 `json:"depression_rate"` //
|
DepressionRate uint32 `json:"depression_rate"` //
|
||||||
User *User `json:"user" gorm:"-"`
|
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 {
|
type RecycleAttribute struct {
|
||||||
|
@ -53,7 +59,6 @@ type RecycleAttribute struct {
|
||||||
//}
|
//}
|
||||||
|
|
||||||
func RecycleCardOrderCreate(uid uint32, req xianmai.GameEvaluationReq) (*RecycleCardOrder, error) {
|
func RecycleCardOrderCreate(uid uint32, req xianmai.GameEvaluationReq) (*RecycleCardOrder, error) {
|
||||||
|
|
||||||
order := &RecycleCardOrder{
|
order := &RecycleCardOrder{
|
||||||
Uid: uid,
|
Uid: uid,
|
||||||
GoodsId: uint32(req.GoodsId),
|
GoodsId: uint32(req.GoodsId),
|
||||||
|
@ -73,21 +78,27 @@ func RecycleCardOrderCreate(uid uint32, req xianmai.GameEvaluationReq) (*Recycle
|
||||||
logger.Error("evaluation err:", err)
|
logger.Error("evaluation err:", err)
|
||||||
return order, 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)
|
order.Price = uint32(evaluation)
|
||||||
attributes := make([]RecycleAttribute, 0, len(req.ProblemAttrList)+len(req.SkuList))
|
attributes := make([]RecycleAttribute, 0, len(req.ProblemAttrList)+len(req.SkuList))
|
||||||
rand.Seed(time.Now().UnixNano())
|
rand.Seed(time.Now().UnixNano())
|
||||||
order.Number = fmt.Sprintf("%d%s", rand.Int31n(899999)+100000, time.Now().Format("06-01-02"))
|
order.Number = fmt.Sprintf("%d%s", rand.Int31n(899999)+100000, time.Now().Format("060102"))
|
||||||
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)
|
|
||||||
}
|
|
||||||
for i, _ := range req.SkuList {
|
for i, _ := range req.SkuList {
|
||||||
attribute := RecycleAttribute{
|
attribute := RecycleAttribute{
|
||||||
Id: uint32(req.SkuList[i].ProblemAttrId),
|
Id: uint32(req.SkuList[i].ProblemAttrId),
|
||||||
|
@ -98,6 +109,17 @@ func RecycleCardOrderCreate(uid uint32, req xianmai.GameEvaluationReq) (*Recycle
|
||||||
}
|
}
|
||||||
attributes = append(attributes, attribute)
|
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)
|
attributeByte, err := json.Marshal(&attributes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("attributes marshal err:", err)
|
logger.Error("attributes marshal err:", err)
|
||||||
|
@ -143,6 +165,73 @@ func (m *RecycleCardOrderListReq) List() ([]RecycleCardOrder, int, error) {
|
||||||
logger.Error("err:", err)
|
logger.Error("err:", err)
|
||||||
return nil, 0, 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
|
return list, totalPage, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -146,7 +146,7 @@ const (
|
||||||
FundTypeBuyGoods = "buy_goods" // 购买商品
|
FundTypeBuyGoods = "buy_goods" // 购买商品
|
||||||
FundTypeBuyGoodsCancel = "buy_goods_cancel" // 购买商品取消订单
|
FundTypeBuyGoodsCancel = "buy_goods_cancel" // 购买商品取消订单
|
||||||
FundTypeBuyGoodsRefund = "buy_goods_refund" // 购买商品退货
|
FundTypeBuyGoodsRefund = "buy_goods_refund" // 购买商品退货
|
||||||
|
FundTypeRecycleCard = "recycle_card" // 回收卡带
|
||||||
)
|
)
|
||||||
|
|
||||||
// gen:qs
|
// 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/list", controller.RecycleCardOrderList)
|
||||||
recycle.POST("order/detail", controller.RecycleCardOrderDetail)
|
recycle.POST("order/detail", controller.RecycleCardOrderDetail)
|
||||||
recycle.POST("order/cancel", controller.RecycleCardOrderCancel)
|
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