From 7beb572b61e892d465ec3ba018b38fea0226b7e9 Mon Sep 17 00:00:00 2001 From: li Date: Fri, 12 Aug 2022 10:41:33 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=9B=9E=E6=94=B6=E5=8D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controller/cb_goods_stock.go | 7 +- controller/recycle_card.go | 181 ++++++++++--- lib/wxpay/wx_pay.go | 228 ++++++++++++++++ lib/xianmai/xian_http.go | 6 +- model/autogenerated_recycle_card.go | 328 +++++++++++++++++++++++ model/config.go | 23 ++ model/model_test.go | 61 ++++- model/recycle_card.go | 119 ++++++-- model/user.go | 2 +- pack/configs/merchant/apiclient_cert.pem | 23 ++ router/router_app.go | 12 +- 11 files changed, 933 insertions(+), 57 deletions(-) create mode 100644 pack/configs/merchant/apiclient_cert.pem diff --git a/controller/cb_goods_stock.go b/controller/cb_goods_stock.go index b4700c9..fab27fa 100644 --- a/controller/cb_goods_stock.go +++ b/controller/cb_goods_stock.go @@ -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: "", diff --git a/controller/recycle_card.go b/controller/recycle_card.go index e7415dd..72982de 100644 --- a/controller/recycle_card.go +++ b/controller/recycle_card.go @@ -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 +} diff --git a/lib/wxpay/wx_pay.go b/lib/wxpay/wx_pay.go index 2306ff5..31b0d33 100644 --- a/lib/wxpay/wx_pay.go +++ b/lib/wxpay/wx_pay.go @@ -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 +} diff --git a/lib/xianmai/xian_http.go b/lib/xianmai/xian_http.go index a8c924c..ebf9947 100644 --- a/lib/xianmai/xian_http.go +++ b/lib/xianmai/xian_http.go @@ -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 diff --git a/model/autogenerated_recycle_card.go b/model/autogenerated_recycle_card.go index f52705c..55540a5 100644 --- a/model/autogenerated_recycle_card.go +++ b/model/autogenerated_recycle_card.go @@ -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 { diff --git a/model/config.go b/model/config.go index 71b2ca9..6e36578 100644 --- a/model/config.go +++ b/model/config.go @@ -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 //} diff --git a/model/model_test.go b/model/model_test.go index cebf877..c9f3bbb 100644 --- a/model/model_test.go +++ b/model/model_test.go @@ -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 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 } diff --git a/model/user.go b/model/user.go index fd8e481..c230307 100644 --- a/model/user.go +++ b/model/user.go @@ -146,7 +146,7 @@ const ( FundTypeBuyGoods = "buy_goods" // 购买商品 FundTypeBuyGoodsCancel = "buy_goods_cancel" // 购买商品取消订单 FundTypeBuyGoodsRefund = "buy_goods_refund" // 购买商品退货 - + FundTypeRecycleCard = "recycle_card" // 回收卡带 ) // gen:qs diff --git a/pack/configs/merchant/apiclient_cert.pem b/pack/configs/merchant/apiclient_cert.pem new file mode 100644 index 0000000..0db00b0 --- /dev/null +++ b/pack/configs/merchant/apiclient_cert.pem @@ -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----- diff --git a/router/router_app.go b/router/router_app.go index 547c9e9..17c5cc9 100644 --- a/router/router_app.go +++ b/router/router_app.go @@ -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) } }