fix:回收卡

This commit is contained in:
li 2022-08-12 10:41:33 +08:00
parent d0b4f45d7b
commit 7beb572b61
11 changed files with 933 additions and 57 deletions

View File

@ -53,9 +53,10 @@ func CooperativeGameCardGoodsStockAdds(c *gin.Context) {
}
operationLog := &model.OperationLog{
Uid: assistant.Uid,
Description: "游戏卡入库",
OperationType: model.OperationTypeGameCardGoodsInStock,
Uid: assistant.Uid,
Description: "游戏卡入库",
OperationType: model.OperationTypeGameCardGoodsInStock,
//CorrelationId:
CorrelationName: model.LogCorrelationOrderId,
StoreId: uint32(assistant.StoreId),
StoreName: "",

View File

@ -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,32 +253,79 @@ 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
}
func RecycleCardOrderCheck(c *gin.Context) {
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 {
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
}

View File

@ -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
}

View File

@ -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

View File

@ -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 {

View File

@ -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
//}

View File

@ -271,6 +271,7 @@ func InitDBProd() {
&UserInvite{},
&UserInviteRecord{},
&CooperativeMemberPromotionStore{},
&RecycleCardOrder{},
)
if err := DBProd.DB().Ping(); err != nil {
@ -279,7 +280,7 @@ func InitDBProd() {
}
fmt.Println("DB init success")
}
func TestInitProdDBModel(t *testing.T) {
InitDBProd()
}
@ -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)
}
}

View File

@ -28,8 +28,14 @@ type RecycleCardOrder struct {
EvaluationTime time.Time `json:"evaluation_time"`
Attribute string `json:"attribute" gorm:"type:text"` //
Number string `json:"number"` // 订单
DepressionRate uint32 `json:"depression_rate"` //
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
}

View File

@ -146,7 +146,7 @@ const (
FundTypeBuyGoods = "buy_goods" // 购买商品
FundTypeBuyGoodsCancel = "buy_goods_cancel" // 购买商品取消订单
FundTypeBuyGoodsRefund = "buy_goods_refund" // 购买商品退货
FundTypeRecycleCard = "recycle_card" // 回收卡带
)
// gen:qs

View 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-----

View File

@ -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)
}
}