kobe6258 4 місяців тому
батько
коміт
ea3e9fbcc0

+ 22 - 3
api/ht_account_api.go

@@ -79,9 +79,23 @@ func (f *HTAccountApi) EnCodeData(req CustomerRiskReq) (token string, err error)
 	fmt.Printf("解密后的请求: %v", string(decodeData))
 	return
 }
+
+type EncodeReq struct {
+	Param string `json:"param"`
+}
+
 func (f *HTAccountApi) GetCustomerRiskLevelInfo(req ClientSuitInfoReq) (info CustomerAccountInfo, err error) {
 	url := f.htConfig.GetAccountApiUrl() + clientSuitInfoUrl
-	resp, err := f.client.Post(url, nil)
+	publicKey, err := auth.ParsePublicKey(f.htConfig.GetWebhookPublicKey())
+	if err != nil {
+		logger.Error("解析公钥失败:%v", err)
+	}
+	reqStr, err := json.Marshal(req)
+	encodeData, _ := auth.EncryptWithRSA(publicKey, reqStr)
+	resp, err := f.client.Post(url, EncodeReq{
+		Param: base64.StdEncoding.EncodeToString(encodeData),
+	})
+	err = nil
 	if err != nil {
 		logger.Error("调用CAP customerRiskInfo接口失败:[%v]", err)
 		return
@@ -92,8 +106,13 @@ func (f *HTAccountApi) GetCustomerRiskLevelInfo(req ClientSuitInfoReq) (info Cus
 			logger.Error("关闭Response失败:%v", closeErr)
 		}
 	}(resp.Body)
-	body, _ := io.ReadAll(resp.Body)
-	return decodeResponse(body)
+
+	//body, _ := io.ReadAll(resp.Body)
+	ss := WebhookRequest{
+		Data: "Zta5UfBQpvZSQPMo41CGda6/MnMKvz4cTiBptQ/KPiBTiyDDnqE7remZfKzPqYkuzcMDTN7lrr5W2by2gsTd2JjTlg3NzfotoorqHbdjP6FyVCRBCbkSM1OOnkuldtbWaP1b0APh1QhT40zdOvDqwnYcSa7z3zEG0EKh6kYGCcd+ugSmXxrZzZR8uguYZniFQFc+Or2dDFAuQfOhmN9kScQ90iHhlJ6g9pqlSB4sJxA8S2q3MR1qkW1MOA/9Z/Mgj2fy2m2AjP18hlzKMP71A/EezBbusXVNo5occ9xV2L7tfbDqnpk77NJL+YnoIoPhj7WjFC3pDXfD3phHuov8CQ==",
+	}
+	jsonstr, _ := json.Marshal(ss)
+	return decodeResponse(jsonstr)
 }
 
 type AccessTokenReq struct {

+ 9 - 0
common/exception/exc_enums.go

@@ -125,6 +125,11 @@ const (
 	GetCapTokenFailed
 	GenerateRiskTestTokenFailed
 )
+const (
+	OrderErrorCode int = iota + 90000
+	IllegalOrderStatus
+	OrderPayTimeoutError
+)
 
 // ErrorMap 用于存储错误码和错误信息的映射
 var ErrorMap = map[int]string{
@@ -211,6 +216,10 @@ var ErrorMap = map[int]string{
 	SyncRiskError:               "同步风险等级失败",
 	GetCapTokenFailed:           "获取cap token失败",
 	GenerateRiskTestTokenFailed: "生成风险测评token失败",
+
+	//order
+	IllegalOrderStatus:   "非法的订单状态",
+	OrderPayTimeoutError: "订单支付超时",
 }
 
 func Equals(code int, message string) bool {

+ 2 - 1
controllers/order/order_controller.go

@@ -24,9 +24,10 @@ func (o *OrderController) CreateProductOrder() {
 		err = exception.New(exception.IllegalProductId)
 		o.FailedResult("获取商品详情失败", result)
 		//客戶是否开户,是否有风险等级,是否风险等级过期
+
 		//报告的风险等级 套餐的风险等级
 		//创单
-
+		//facade.CheckUserRiskLevel()
 		//productInfo, err := productService.GetProductInfoById(productId)
 		//if err != nil {
 		//	o.FailedResult("获取商品详情失败", result)

+ 13 - 0
controllers/payment/payment_controller.go

@@ -0,0 +1,13 @@
+package payment
+
+import "eta/eta_mini_ht_api/controllers"
+
+type PaymentController struct {
+	controllers.BaseController
+}
+
+//支付
+
+//退款
+
+//

+ 5 - 2
controllers/user/account_controller.go

@@ -4,6 +4,7 @@ import (
 	logger "eta/eta_mini_ht_api/common/component/log"
 	"eta/eta_mini_ht_api/controllers"
 	"eta/eta_mini_ht_api/service/facade"
+	"eta/eta_mini_ht_api/service/user"
 	"github.com/google/uuid"
 	"net/url"
 	"strings"
@@ -46,12 +47,14 @@ func (a *AccountController) Prepare() {
 // @Description 获取风险测评问卷请求Token
 // @Success 200 {object} controllers.BaseResponse
 // @router /v1/riskTestToken/ [get]
-func (a *AccountController) GetRiskInfoToken(mobile string) {
+func (a *AccountController) GetRiskInfoToken() {
 	controllers.Wrap(&a.BaseController, func() (result *controllers.WrapData, err error) {
 		result = a.InitWrapData("获取风险测评问卷请求Token失败")
-		token, err := facade.GetRiskTestToken(mobile)
+		userInfo := a.Data["user"].(user.User)
+		token, err := facade.GetRiskTestToken(userInfo.Mobile)
 		if err != nil {
 			logger.InfoWithTraceId(a.Ctx, err.Error())
+
 			a.FailedResult("风险测评问卷请求token生成失败", result)
 			return
 		}

+ 10 - 5
controllers/user/subscribe_controller.go

@@ -76,6 +76,11 @@ const (
 	RiskNotMatch   = 433
 	RiskExpired    = 434
 	AccountOpening = 435
+
+	orderPending = "pending"
+	orderPaid    = "paid"
+	orderRefund  = "refund"
+	orderClosed  = "closed"
 )
 
 // GetOrderNo  获取订单号
@@ -127,7 +132,7 @@ func (sc *SubscribeController) GetOrderDetail(orderId int) {
 // @Description   获取用户订单号列表
 // @Success 200 {object} controllers.BaseResponse
 // @router /subscribe/orderList [get]
-func (sc *SubscribeController) GetOrderList() {
+func (sc *SubscribeController) GetOrderList(orderStatus string) {
 	controllers.Wrap(&sc.BaseController, func() (result *controllers.WrapData, err error) {
 		result = sc.InitWrapData("分页查询订单列表失败")
 		userInfo := sc.Data["user"].(user.User)
@@ -135,8 +140,7 @@ func (sc *SubscribeController) GetOrderList() {
 			Current:  sc.PageInfo.Current,
 			PageSize: sc.PageInfo.PageSize,
 		}
-
-		pageRes.Total, pageRes.LatestId = order.GetTotalPageCountByUserId(userInfo.Id)
+		pageRes.Total, pageRes.LatestId = order.GetTotalPageCountByUserId(userInfo.Id, orderStatus)
 		if sc.PageInfo.LatestId == 0 {
 			sc.PageInfo.LatestId = pageRes.LatestId
 		} else {
@@ -144,9 +148,10 @@ func (sc *SubscribeController) GetOrderList() {
 			pageRes.Total = sc.PageInfo.Total
 		}
 		pageRes.TotalPage = page.TotalPages(pageRes.Total, pageRes.PageSize)
-		list, err := order.GetOrderPage(sc.PageInfo, userInfo.Id)
+
+		list, err := order.GetOrderPage(sc.PageInfo, userInfo.Id, orderStatus)
 		if err != nil {
-			sc.FailedResult("分页查询报告列表失败", result)
+			sc.FailedResult("分页查询订单列表失败", result)
 			return
 		}
 		orders := new(page.PageResult)

+ 70 - 24
domian/order/product_order.go

@@ -2,6 +2,7 @@ package order
 
 import (
 	logger "eta/eta_mini_ht_api/common/component/log"
+	"eta/eta_mini_ht_api/common/exception"
 	"eta/eta_mini_ht_api/common/utils/page"
 	orderDao "eta/eta_mini_ht_api/models/order"
 	"fmt"
@@ -10,16 +11,17 @@ import (
 )
 
 type ProductOrderDTO struct {
-	ID           int
-	OrderID      string
-	UserID       int
-	ProductID    int
-	TotalAmount  string
-	ProductPrice string
-	ProductName  string
-	PaymentWay   string
-	Status       string
-	CreatedTime  string
+	ID                int
+	OrderID           string
+	UserID            int
+	ProductID         int
+	TotalAmount       string
+	ProductPrice      string
+	ProductName       string
+	PaymentWay        string
+	PaymentTimeRemain int64
+	Status            string
+	CreatedTime       string
 }
 
 type ProductOrderDetailDTO struct {
@@ -31,11 +33,25 @@ type ProductOrderDetailDTO struct {
 }
 
 var (
-	transProductOrderStatus = map[orderDao.OrderStatus]string{
-		orderDao.OrderStatusClosed:   "已关闭",
-		orderDao.OrderStatusPaid:     "已支付",
-		orderDao.OrderStatusPending:  "待支付",
-		orderDao.OrderStatusRefunded: "已退款",
+	transProductOrderStatusMap = map[orderDao.OrderStatus]string{
+		orderDao.OrderStatusClosed:  "已关闭",
+		orderDao.OrderStatusPaid:    "已支付",
+		orderDao.OrderStatusPending: "待支付",
+		orderDao.OrderStatusRefund:  "售后",
+	}
+
+	transRefundStatusMap = map[orderDao.RefundStatus]string{
+		orderDao.RefundStatusPending:    "待退款",
+		orderDao.RefundStatusFailed:     "退款失败",
+		orderDao.RefundStatusProcessing: "退款中",
+		orderDao.RefundStatusSuccess:    "退款成功",
+	}
+
+	productOrderStatusMap = map[string]orderDao.OrderStatus{
+		"closed":  orderDao.OrderStatusClosed,
+		"paid":    orderDao.OrderStatusPaid,
+		"pending": orderDao.OrderStatusPending,
+		"refund":  orderDao.OrderStatusRefund,
 	}
 )
 
@@ -55,17 +71,31 @@ func CreateProductOrder(orderDTO ProductOrderDTO) (orderNo string, err error) {
 	return
 }
 
-func convertProductOrderDTO(order orderDao.ProductOrder) ProductOrderDTO {
-	return ProductOrderDTO{
+func convertProductOrderDTO(order orderDao.ProductOrder) (orderDTO ProductOrderDTO) {
+	orderDTO = ProductOrderDTO{
 		ID:          order.ID,
 		OrderID:     order.OrderID,
 		UserID:      order.UserID,
 		ProductID:   order.ProductID,
 		TotalAmount: order.TotalAmount,
 		PaymentWay:  string(order.PaymentWay),
-		Status:      transProductOrderStatus[order.Status],
+		Status:      transProductOrderStatusMap[order.Status],
 		CreatedTime: order.CreatedTime.Format(time.DateTime),
 	}
+	if order.Status == orderDao.OrderStatusRefund {
+		orderDTO.Status = transRefundStatusMap[order.RefundStatus]
+	}
+	if order.Status == orderDao.OrderStatusPending {
+		duration := time.Now().Sub(order.CreatedTime)
+		timeout := duration - 15*time.Minute
+		if timeout > 0 {
+			logger.Info("订单已超时:%v", order.OrderID)
+			orderDTO.Status = transProductOrderStatusMap[orderDao.OrderStatusClosed]
+		} else {
+			orderDTO.PaymentTimeRemain = int64(duration.Seconds())
+		}
+	}
+	return
 }
 func convertProductOrderDetailDTO(order orderDao.ProductOrder) ProductOrderDetailDTO {
 	return ProductOrderDetailDTO{
@@ -76,7 +106,7 @@ func convertProductOrderDetailDTO(order orderDao.ProductOrder) ProductOrderDetai
 			ProductID:   order.ProductID,
 			TotalAmount: order.TotalAmount,
 			PaymentWay:  string(order.PaymentWay),
-			Status:      transProductOrderStatus[order.Status],
+			Status:      transProductOrderStatusMap[order.Status],
 			CreatedTime: order.CreatedTime.Format(time.DateTime),
 		},
 		TransactionID: order.TransactionID,
@@ -96,13 +126,29 @@ func convertProductOrder(order ProductOrderDTO) orderDao.ProductOrder {
 	}
 }
 
-func GetTotalPageCountByUserId(userId int) (total int64, latestId int64) {
-	return orderDao.GetTotalPageCountByUserId(userId)
+func GetTotalPageCountByUserId(userId int, orderStatus string) (total int64, latestId int64) {
+	var orderStatusEnum orderDao.OrderStatus
+	if orderStatus != "" {
+		orderStatusEnum = productOrderStatusMap[orderStatus]
+		if string(orderStatusEnum) == "" {
+			//err := exception.New(exception.IllegalOrderStatus)
+			logger.Error("订单状态不合法:%v", orderStatus)
+			return
+		}
+	}
+	return orderDao.GetTotalPageCountByUserId(userId, orderStatusEnum)
 }
-
-func GetOrderPage(pageInfo page.PageInfo, userId int) (orderDTOS []ProductOrderDTO, err error) {
+func GetOrderPage(pageInfo page.PageInfo, userId int, orderStatus string) (orderDTOS []ProductOrderDTO, err error) {
+	var orderStatusEnum orderDao.OrderStatus
+	if orderStatus != "" {
+		orderStatusEnum = productOrderStatusMap[orderStatus]
+		if string(orderStatusEnum) == "" {
+			err = exception.New(exception.IllegalOrderStatus)
+			return
+		}
+	}
 	offset := page.StartIndex(pageInfo.Current, pageInfo.PageSize)
-	orderList, err := orderDao.GetOrderPage(pageInfo.LatestId, offset, pageInfo.PageSize, userId)
+	orderList, err := orderDao.GetOrderPage(pageInfo.LatestId, offset, pageInfo.PageSize, userId, orderStatusEnum)
 	if err != nil {
 		logger.Error("分页查询订单列表失败:%v", err)
 		return

+ 24 - 11
models/order/product_order.go

@@ -19,12 +19,12 @@ const (
 	OrderStatusProcessing OrderStatus = "processing"
 	OrderStatusPaid       OrderStatus = "paid"
 	OrderStatusClosed     OrderStatus = "closed"
-	OrderStatusRefunded   OrderStatus = "refunded"
+	OrderStatusRefund     OrderStatus = "refund"
 	//退款状态
-	RefundStatusSuccess   RefundStatus = "success"
-	RefundStatusPending   RefundStatus = "pending"
-	RefundStatusFailed    RefundStatus = "failed"
-	RefundtatusProcessing RefundStatus = "processing"
+	RefundStatusSuccess    RefundStatus = "success"
+	RefundStatusPending    RefundStatus = "pending"
+	RefundStatusFailed     RefundStatus = "failed"
+	RefundStatusProcessing RefundStatus = "processing"
 
 	WechatPayWay PaymentStatus = "wechat"
 	AliPayWay    PaymentStatus = "alipay"
@@ -40,7 +40,7 @@ type ProductOrder struct {
 	RefundAmount  string        `gorm:"column:refund_amount;size:255;default:null;comment:'退款金额'" json:"refund_amount"`
 	PaymentWay    PaymentStatus `gorm:"column:payment_way;enum('wechat','alipay');default:null;comment:'支付渠道'"`
 	PaymentTime   time.Time     `gorm:"column:payment_time;default:null;comment:'支付时间'" json:"payment_time"`
-	Status        OrderStatus   `gorm:"column:status;type:enum('pending','processing','paid','closed','refunded');default:'pending';comment:'订单状态'" json:"status"`
+	Status        OrderStatus   `gorm:"column:status;type:enum('pending','processing','paid','closed','refund');default:'pending';comment:'订单状态'" json:"status"`
 	RefundStatus  RefundStatus  `gorm:"column:refund_status;type:enum('pending','processing','failed','success');default:null;comment:'退款状态'" json:"refund_status"`
 	Remark        string        `gorm:"column:remark;size:255;default:null;comment:'备注'" json:"remark"`
 	IsDeleted     int           `gorm:"column:is_deleted;size:1;default:0;comment:'是否删除'" json:"is_deleted"`
@@ -65,14 +65,22 @@ func CreateProductOrder(order ProductOrder) (orderNo string, err error) {
 	return
 }
 
-func GetTotalPageCountByUserId(userId int) (total int64, latestId int64) {
+func GetTotalPageCountByUserId(userId int, status OrderStatus) (total int64, latestId int64) {
 	db := models.Main()
-	err := db.Model(&ProductOrder{}).Select("count(*)").Where("user_id = ? and is_deleted=0 ", userId).Scan(&total).Error
+	query := db.Model(&ProductOrder{}).Select("count(*)").Where("user_id = ? and is_deleted=0 ", userId)
+	if string(status) != "" {
+		query.Where("  status=?", status)
+	}
+	err := query.Scan(&total).Error
 	if err != nil {
 		logger.Error("查询订单总数失败:%v", err)
 		return 0, 0
 	}
-	err = db.Model(&ProductOrder{}).Select("MAX(id)").Where("user_id = ? and is_deleted=0", userId).Scan(&latestId).Error
+	queryLatestId := db.Model(&ProductOrder{}).Select("MAX(id)").Where("user_id = ? and is_deleted=0", userId)
+	if string(status) != "" {
+		query.Where("  status=?", status)
+	}
+	err = queryLatestId.Scan(&latestId).Error
 	if err != nil {
 		logger.Error("查询订单最新订单失败:%v", err)
 		return 0, 0
@@ -80,9 +88,14 @@ func GetTotalPageCountByUserId(userId int) (total int64, latestId int64) {
 	return
 }
 
-func GetOrderPage(latestId int64, offset int, size int, userId int) (orderList []ProductOrder, err error) {
+func GetOrderPage(latestId int64, offset int, size int, userId int, status OrderStatus) (orderList []ProductOrder, err error) {
 	db := models.Main()
-	err = db.Model(&ProductOrder{}).Select("*").Where("id<=? and user_id = ? and is_deleted=0 order by created_time desc", latestId, userId).Offset(offset).Limit(size).Find(&orderList).Error
+	query := db.Model(&ProductOrder{}).Select("*")
+	if string(status) != "" {
+		query.Where("  status=?", status)
+	}
+	query.Where("id<=? and user_id = ? and is_deleted=0 ", latestId, userId)
+	err = query.Order("created_time desc").Offset(offset).Limit(size).Find(&orderList).Error
 	if err != nil {
 		logger.Error("查询订单总数失败:%v", err)
 	}

+ 4 - 4
routers/commentsRouter.go

@@ -153,9 +153,7 @@ func init() {
             Method: "GetRiskInfoToken",
             Router: `/v1/riskTestToken/`,
             AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(
-				param.New("mobile"),
-			),
+            MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
@@ -301,7 +299,9 @@ func init() {
             Method: "GetOrderList",
             Router: `/subscribe/orderList`,
             AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
+            MethodParams: param.Make(
+				param.New("orderStatus"),
+			),
             Filters: nil,
             Params: nil})
 

+ 0 - 1
service/facade/ht_account_service.go

@@ -60,7 +60,6 @@ func CheckUserRiskLevel(templateUserId int, productId int, officialUser userServ
 		IdKind:     officialUser.IdKind,
 		IdNo:       officialUser.IdNo,
 	})
-
 	if err != nil {
 		logger.Error("api获取客户风险信息失败:%v", err)
 		if userInfo.RiskLevelStatus == user.RiskUnTest {

+ 4 - 4
service/order/order_service.go

@@ -99,12 +99,12 @@ func CreateProductOrder(templateUser user.User, productId int, orderNo string) (
 	return
 }
 
-func GetTotalPageCountByUserId(userId int) (total int64, latestId int64) {
-	return orderService.GetTotalPageCountByUserId(userId)
+func GetTotalPageCountByUserId(userId int, orderStatus string) (total int64, latestId int64) {
+	return orderService.GetTotalPageCountByUserId(userId, orderStatus)
 }
 
-func GetOrderPage(pageInfo page.PageInfo, userId int) (orderList []orderService.ProductOrderDTO, err error) {
-	orderList, err = orderService.GetOrderPage(pageInfo, userId)
+func GetOrderPage(pageInfo page.PageInfo, userId int, orderStatus string) (orderList []orderService.ProductOrderDTO, err error) {
+	orderList, err = orderService.GetOrderPage(pageInfo, userId, orderStatus)
 	if err != nil {
 		err = exception.NewWithException(exception.GetOrderListFailed, err.Error())
 	}