f
This commit is contained in:
@@ -2,6 +2,7 @@ package admin_agent
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"bdrp-server/app/main/api/internal/svc"
|
||||
"bdrp-server/app/main/api/internal/types"
|
||||
@@ -38,11 +39,19 @@ func (l *AdminGetAgentCommissionDeductionListLogic) AdminGetAgentCommissionDeduc
|
||||
}
|
||||
// 产品名筛选需先查product_id
|
||||
if req.ProductName != nil && *req.ProductName != "" {
|
||||
products, err := l.svcCtx.ProductModel.FindAll(l.ctx, l.svcCtx.ProductModel.SelectBuilder().Where(squirrel.Eq{"product_name": *req.ProductName}), "")
|
||||
products, err := l.svcCtx.ProductModel.FindAll(
|
||||
l.ctx,
|
||||
l.svcCtx.ProductModel.SelectBuilder().Where(squirrel.Like{"product_name": "%" + strings.TrimSpace(*req.ProductName) + "%"}),
|
||||
"",
|
||||
)
|
||||
if err != nil || len(products) == 0 {
|
||||
return &types.AdminGetAgentCommissionDeductionListResp{Total: 0, Items: []types.AgentCommissionDeductionListItem{}}, nil
|
||||
}
|
||||
builder = builder.Where("product_id = ?", products[0].Id)
|
||||
productIds := make([]int64, 0, len(products))
|
||||
for _, product := range products {
|
||||
productIds = append(productIds, product.Id)
|
||||
}
|
||||
builder = builder.Where(squirrel.Eq{"product_id": productIds})
|
||||
}
|
||||
|
||||
list, total, err := l.svcCtx.AgentCommissionDeductionModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, "create_time DESC")
|
||||
|
||||
@@ -2,6 +2,7 @@ package admin_agent
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"bdrp-server/app/main/api/internal/svc"
|
||||
"bdrp-server/app/main/api/internal/types"
|
||||
@@ -30,19 +31,25 @@ func (l *AdminGetAgentLinkListLogic) AdminGetAgentLinkList(req *types.AdminGetAg
|
||||
builder = builder.Where("agent_id = ?", *req.AgentId)
|
||||
}
|
||||
if req.LinkIdentifier != nil && *req.LinkIdentifier != "" {
|
||||
builder = builder.Where("link_identifier = ?", *req.LinkIdentifier)
|
||||
builder = builder.Where("link_identifier LIKE ?", "%"+strings.TrimSpace(*req.LinkIdentifier)+"%")
|
||||
}
|
||||
|
||||
// 先查出所有product_id对应的product_name(如有product_name筛选,需反查id)
|
||||
var productIdFilter int64
|
||||
if req.ProductName != nil && *req.ProductName != "" {
|
||||
// 只支持精确匹配,如需模糊可扩展
|
||||
products, err := l.svcCtx.ProductModel.FindAll(l.ctx, l.svcCtx.ProductModel.SelectBuilder().Where(squirrel.Eq{"product_name": *req.ProductName}), "")
|
||||
products, err := l.svcCtx.ProductModel.FindAll(
|
||||
l.ctx,
|
||||
l.svcCtx.ProductModel.SelectBuilder().Where("product_name LIKE ?", "%"+strings.TrimSpace(*req.ProductName)+"%"),
|
||||
"",
|
||||
)
|
||||
if err != nil || len(products) == 0 {
|
||||
return &types.AdminGetAgentLinkListResp{Total: 0, Items: []types.AgentLinkListItem{}}, nil
|
||||
}
|
||||
productIdFilter = products[0].Id
|
||||
builder = builder.Where("product_id = ?", productIdFilter)
|
||||
|
||||
productIds := make([]int64, 0, len(products))
|
||||
for _, product := range products {
|
||||
productIds = append(productIds, product.Id)
|
||||
}
|
||||
builder = builder.Where(squirrel.Eq{"product_id": productIds})
|
||||
}
|
||||
|
||||
links, total, err := l.svcCtx.AgentLinkModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, "id DESC")
|
||||
|
||||
@@ -2,15 +2,14 @@ package admin_agent
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"bdrp-server/app/main/api/internal/svc"
|
||||
"bdrp-server/app/main/api/internal/types"
|
||||
"bdrp-server/app/main/model"
|
||||
"bdrp-server/common/tool"
|
||||
"bdrp-server/common/xerr"
|
||||
"bdrp-server/pkg/lzkit/crypto"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
@@ -30,13 +29,20 @@ func NewAdminGetAgentListLogic(ctx context.Context, svcCtx *svc.ServiceContext)
|
||||
|
||||
func (l *AdminGetAgentListLogic) AdminGetAgentList(req *types.AdminGetAgentListReq) (resp *types.AdminGetAgentListResp, err error) {
|
||||
builder := l.svcCtx.AgentModel.SelectBuilder()
|
||||
if req.Mobile != nil && *req.Mobile != "" {
|
||||
builder = builder.Where("mobile = ?", *req.Mobile)
|
||||
secretKey := l.svcCtx.Config.Encrypt.SecretKey
|
||||
mobileKeyword := ""
|
||||
if req.Mobile != nil {
|
||||
mobileKeyword = strings.TrimSpace(*req.Mobile)
|
||||
}
|
||||
if req.Region != nil && *req.Region != "" {
|
||||
builder = builder.Where("region = ?", *req.Region)
|
||||
builder = builder.Where("region LIKE ?", "%"+strings.TrimSpace(*req.Region)+"%")
|
||||
}
|
||||
if req.CreateTimeStart != nil && *req.CreateTimeStart != "" {
|
||||
builder = builder.Where("create_time >= ?", *req.CreateTimeStart)
|
||||
}
|
||||
if req.CreateTimeEnd != nil && *req.CreateTimeEnd != "" {
|
||||
builder = builder.Where("create_time <= ?", *req.CreateTimeEnd)
|
||||
}
|
||||
|
||||
// 新增:如果传入ParentAgentId,则查找其所有1级下级代理
|
||||
if req.ParentAgentId != nil {
|
||||
closureBuilder := l.svcCtx.AgentClosureModel.SelectBuilder().Where("ancestor_id = ? AND depth = 1", *req.ParentAgentId)
|
||||
@@ -61,9 +67,49 @@ func (l *AdminGetAgentListLogic) AdminGetAgentList(req *types.AdminGetAgentListR
|
||||
builder = builder.Where("id IN ("+tool.InPlaceholders(len(interfaceIds))+")", interfaceIds...)
|
||||
}
|
||||
|
||||
agents, total, err := l.svcCtx.AgentModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, "id DESC")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
var (
|
||||
agents []*model.Agent
|
||||
total int64
|
||||
)
|
||||
if mobileKeyword == "" {
|
||||
agents, total, err = l.svcCtx.AgentModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, "id DESC")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
allAgents, findErr := l.svcCtx.AgentModel.FindAll(l.ctx, builder, "id DESC")
|
||||
if findErr != nil {
|
||||
return nil, findErr
|
||||
}
|
||||
|
||||
filteredAgents := make([]*model.Agent, 0, len(allAgents))
|
||||
for _, agent := range allAgents {
|
||||
decryptedMobile, decryptErr := crypto.DecryptMobile(agent.Mobile, secretKey)
|
||||
if decryptErr != nil {
|
||||
// 单条手机号异常时忽略该条匹配,避免影响整页结果
|
||||
continue
|
||||
}
|
||||
if strings.Contains(decryptedMobile, mobileKeyword) {
|
||||
agent.Mobile = decryptedMobile
|
||||
filteredAgents = append(filteredAgents, agent)
|
||||
}
|
||||
}
|
||||
|
||||
total = int64(len(filteredAgents))
|
||||
if total > 0 && req.PageSize > 0 {
|
||||
page := req.Page
|
||||
if page < 1 {
|
||||
page = 1
|
||||
}
|
||||
offset := (page - 1) * req.PageSize
|
||||
if offset < total {
|
||||
end := offset + req.PageSize
|
||||
if end > total {
|
||||
end = total
|
||||
}
|
||||
agents = filteredAgents[offset:end]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
items := make([]types.AgentListItem, 0, len(agents))
|
||||
@@ -79,9 +125,13 @@ func (l *AdminGetAgentListLogic) AdminGetAgentList(req *types.AdminGetAgentListR
|
||||
if req.ParentAgentId != nil {
|
||||
item.ParentAgentId = *req.ParentAgentId
|
||||
}
|
||||
agent.Mobile, err = crypto.DecryptMobile(agent.Mobile, l.svcCtx.Config.Encrypt.SecretKey)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取代理信息, 解密手机号失败: %v", err)
|
||||
if mobileKeyword == "" {
|
||||
decryptedMobile, decryptErr := crypto.DecryptMobile(agent.Mobile, secretKey)
|
||||
if decryptErr != nil {
|
||||
agent.Mobile = "-"
|
||||
} else {
|
||||
agent.Mobile = decryptedMobile
|
||||
}
|
||||
}
|
||||
item.Mobile = agent.Mobile
|
||||
if agent.MembershipExpiryTime.Valid {
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
package admin_agent
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"regexp"
|
||||
"time"
|
||||
|
||||
"bdrp-server/app/main/api/internal/svc"
|
||||
"bdrp-server/app/main/api/internal/types"
|
||||
"bdrp-server/common/xerr"
|
||||
"bdrp-server/pkg/lzkit/crypto"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminUpdateAgentLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminUpdateAgentLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUpdateAgentLogic {
|
||||
return &AdminUpdateAgentLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminUpdateAgentLogic) AdminUpdateAgent(req *types.AdminUpdateAgentReq) (resp *types.AdminUpdateAgentResp, err error) {
|
||||
agent, err := l.svcCtx.AgentModel.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询代理失败 err: %v", err)
|
||||
}
|
||||
|
||||
if ok, _ := regexp.MatchString(`^1[3-9]\d{9}$`, req.Mobile); !ok {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.REUQEST_PARAM_ERROR), "手机号格式错误: %s", req.Mobile)
|
||||
}
|
||||
|
||||
encryptedMobile, err := crypto.EncryptMobile(req.Mobile, l.svcCtx.Config.Encrypt.SecretKey)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "加密手机号失败: %v", err)
|
||||
}
|
||||
|
||||
expiryTime, err := time.ParseInLocation("2006-01-02 15:04:05", req.MembershipExpiryTime, time.Local)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.REUQEST_PARAM_ERROR), "会员到期时间格式错误: %v", err)
|
||||
}
|
||||
|
||||
agent.Mobile = encryptedMobile
|
||||
agent.LevelName = req.LevelName
|
||||
agent.Region = req.Region
|
||||
agent.MembershipExpiryTime = sql.NullTime{
|
||||
Time: expiryTime,
|
||||
Valid: true,
|
||||
}
|
||||
|
||||
if _, err = l.svcCtx.AgentModel.Update(l.ctx, nil, agent); err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新代理失败 err: %v", err)
|
||||
}
|
||||
|
||||
return &types.AdminUpdateAgentResp{Success: true}, nil
|
||||
}
|
||||
@@ -72,20 +72,6 @@ func (l *AdminCreateOrderLogic) AdminCreateOrder(req *types.AdminCreateOrderReq)
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminCreateOrder, 获取订单ID失败 err: %v", err)
|
||||
}
|
||||
|
||||
// 如果是推广订单,创建推广订单记录
|
||||
if req.IsPromotion == 1 {
|
||||
promotionOrder := &model.AdminPromotionOrder{
|
||||
OrderId: orderId,
|
||||
Version: 1,
|
||||
CreateTime: time.Now(),
|
||||
UpdateTime: time.Now(),
|
||||
}
|
||||
_, err = l.svcCtx.AdminPromotionOrderModel.Insert(ctx, session, promotionOrder)
|
||||
if err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminCreateOrder, 创建推广订单失败 err: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
|
||||
@@ -41,15 +41,6 @@ func (l *AdminDeleteOrderLogic) AdminDeleteOrder(req *types.AdminDeleteOrderReq)
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminDeleteOrder, 删除订单失败 err: %v", err)
|
||||
}
|
||||
|
||||
// 删除关联的推广订单记录
|
||||
promotionOrder, err := l.svcCtx.AdminPromotionOrderModel.FindOneByOrderId(ctx, order.Id)
|
||||
if err == nil && promotionOrder != nil {
|
||||
err = l.svcCtx.AdminPromotionOrderModel.DeleteSoft(ctx, session, promotionOrder)
|
||||
if err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminDeleteOrder, 删除推广订单失败 err: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
|
||||
@@ -40,13 +40,6 @@ func (l *AdminGetOrderDetailLogic) AdminGetOrderDetail(req *types.AdminGetOrderD
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetOrderDetail, 查询产品失败 err: %v", err)
|
||||
}
|
||||
|
||||
// 判断是否为推广订单
|
||||
var isPromotion int64
|
||||
promotionOrder, err := l.svcCtx.AdminPromotionOrderModel.FindOneByOrderId(l.ctx, order.Id)
|
||||
if err == nil && promotionOrder != nil {
|
||||
isPromotion = 1
|
||||
}
|
||||
|
||||
// 判断是否为代理订单并获取代理处理状态
|
||||
var isAgentOrder bool
|
||||
var agentProcessStatus string
|
||||
@@ -119,7 +112,6 @@ func (l *AdminGetOrderDetailLogic) AdminGetOrderDetail(req *types.AdminGetOrderD
|
||||
Status: order.Status,
|
||||
CreateTime: order.CreateTime.Format("2006-01-02 15:04:05"),
|
||||
UpdateTime: order.UpdateTime.Format("2006-01-02 15:04:05"),
|
||||
IsPromotion: isPromotion,
|
||||
QueryState: queryState,
|
||||
IsAgentOrder: isAgentOrder,
|
||||
AgentProcessStatus: agentProcessStatus,
|
||||
|
||||
@@ -36,11 +36,11 @@ func NewAdminGetOrderListLogic(ctx context.Context, svcCtx *svc.ServiceContext)
|
||||
func (l *AdminGetOrderListLogic) AdminGetOrderList(req *types.AdminGetOrderListReq) (resp *types.AdminGetOrderListResp, err error) {
|
||||
// 构建查询条件
|
||||
builder := l.svcCtx.OrderModel.SelectBuilder()
|
||||
if req.OrderNo != "" {
|
||||
builder = builder.Where("order_no = ?", req.OrderNo)
|
||||
if keyword := strings.ToLower(strings.TrimSpace(req.OrderNo)); keyword != "" {
|
||||
builder = builder.Where("LOWER(order_no) LIKE ?", "%"+keyword+"%")
|
||||
}
|
||||
if req.PlatformOrderId != "" {
|
||||
builder = builder.Where("platform_order_id = ?", req.PlatformOrderId)
|
||||
if keyword := strings.ToLower(strings.TrimSpace(req.PlatformOrderId)); keyword != "" {
|
||||
builder = builder.Where("LOWER(COALESCE(platform_order_id, '')) LIKE ?", "%"+keyword+"%")
|
||||
}
|
||||
if req.ProductName != "" {
|
||||
builder = builder.Where("product_id IN (SELECT id FROM product WHERE product_name LIKE ?)", "%"+req.ProductName+"%")
|
||||
@@ -57,9 +57,6 @@ func (l *AdminGetOrderListLogic) AdminGetOrderList(req *types.AdminGetOrderListR
|
||||
if req.Status != "" {
|
||||
builder = builder.Where("status = ?", req.Status)
|
||||
}
|
||||
if req.IsPromotion != -1 {
|
||||
builder = builder.Where("id IN (SELECT order_id FROM admin_promotion_order WHERE del_state = 0)")
|
||||
}
|
||||
// 时间范围查询
|
||||
if req.CreateTimeStart != "" {
|
||||
builder = builder.Where("create_time >= ?", req.CreateTimeStart)
|
||||
@@ -291,12 +288,6 @@ func (l *AdminGetOrderListLogic) AdminGetOrderList(req *types.AdminGetOrderListR
|
||||
if order.RefundTime.Valid {
|
||||
item.RefundTime = order.RefundTime.Time.Format("2006-01-02 15:04:05")
|
||||
}
|
||||
// 判断是否为推广订单
|
||||
promotionOrder, err := l.svcCtx.AdminPromotionOrderModel.FindOneByOrderId(l.ctx, order.Id)
|
||||
if err == nil && promotionOrder != nil {
|
||||
item.IsPromotion = 1
|
||||
}
|
||||
|
||||
// 设置代理订单相关字段
|
||||
if agentOrderMap[order.Id] {
|
||||
item.IsAgentOrder = true
|
||||
@@ -353,7 +344,7 @@ func (l *AdminGetOrderListLogic) filterOrderIdsByQueryUserRecord(queryName, quer
|
||||
match = false
|
||||
}
|
||||
}
|
||||
if match && decIdCard != queryIdCard {
|
||||
if match && !strings.Contains(decIdCard, strings.TrimSpace(queryIdCard)) {
|
||||
match = false
|
||||
}
|
||||
}
|
||||
@@ -367,7 +358,7 @@ func (l *AdminGetOrderListLogic) filterOrderIdsByQueryUserRecord(queryName, quer
|
||||
match = false
|
||||
}
|
||||
}
|
||||
if match && decMobile != queryMobile {
|
||||
if match && !strings.Contains(decMobile, strings.TrimSpace(queryMobile)) {
|
||||
match = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
|
||||
"bdrp-server/app/main/api/internal/svc"
|
||||
"bdrp-server/app/main/api/internal/types"
|
||||
"bdrp-server/app/main/model"
|
||||
"bdrp-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
@@ -76,30 +75,6 @@ func (l *AdminUpdateOrderLogic) AdminUpdateOrder(req *types.AdminUpdateOrderReq)
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminUpdateOrder, 更新订单失败 err: %v", err)
|
||||
}
|
||||
|
||||
// 处理推广订单状态
|
||||
if req.IsPromotion != nil {
|
||||
promotionOrder, err := l.svcCtx.AdminPromotionOrderModel.FindOneByOrderId(ctx, order.Id)
|
||||
if err == nil && promotionOrder != nil {
|
||||
// 如果存在推广订单记录但不需要推广,则删除
|
||||
if *req.IsPromotion == 0 {
|
||||
err = l.svcCtx.AdminPromotionOrderModel.DeleteSoft(ctx, session, promotionOrder)
|
||||
if err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminUpdateOrder, 删除推广订单失败 err: %v", err)
|
||||
}
|
||||
}
|
||||
} else if *req.IsPromotion == 1 {
|
||||
// 如果需要推广但不存在记录,则创建
|
||||
newPromotionOrder := &model.AdminPromotionOrder{
|
||||
OrderId: order.Id,
|
||||
Version: 1,
|
||||
}
|
||||
_, err = l.svcCtx.AdminPromotionOrderModel.Insert(ctx, session, newPromotionOrder)
|
||||
if err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminUpdateOrder, 创建推广订单失败 err: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
|
||||
@@ -164,7 +164,13 @@ func (l *AlipayCallbackLogic) handleAgentVipOrderPayment(w http.ResponseWriter,
|
||||
} else {
|
||||
logx.Infof("代理会员新购、升级或重新激活成功,会员ID:%d,等级:%s", agentModel.Id, agentModel.LevelName)
|
||||
}
|
||||
agentModel.MembershipExpiryTime = lzUtils.RenewMembership(agentModel.MembershipExpiryTime)
|
||||
// VIP 升级到 SVIP 按支付时间重新计算有效期,不叠加旧 VIP 剩余时长。
|
||||
isVipUpgradeToSvip := oldLevel == model.AgentLeveNameVIP && agentOrder.LevelName == model.AgentLeveNameSVIP
|
||||
if isVipUpgradeToSvip {
|
||||
agentModel.MembershipExpiryTime = lzUtils.RenewMembership(lzUtils.TimeToNullTime(time.Now()))
|
||||
} else {
|
||||
agentModel.MembershipExpiryTime = lzUtils.RenewMembership(agentModel.MembershipExpiryTime)
|
||||
}
|
||||
|
||||
if updateErr := l.svcCtx.AgentModel.UpdateWithVersion(l.ctx, nil, agentModel); updateErr != nil {
|
||||
return fmt.Errorf("修改代理信息失败: %+v", updateErr)
|
||||
|
||||
@@ -34,6 +34,24 @@ type PaymentTypeResp struct {
|
||||
orderID int64 // 仅 query 类型有值;agent_vip 为 0
|
||||
}
|
||||
|
||||
func (l *PaymentLogic) resolvePaymentScene() string {
|
||||
platform, _ := l.ctx.Value("platform").(string)
|
||||
switch platform {
|
||||
case model.PlatformApp:
|
||||
return "app"
|
||||
case model.PlatformH5:
|
||||
return "h5"
|
||||
case model.PlatformWxMini:
|
||||
return "mini_program"
|
||||
case model.PlatformWxH5:
|
||||
return "public_account"
|
||||
default:
|
||||
// 兜底为 app,避免脏值写入 enum 字段导致下单失败。
|
||||
logx.Infof("支付场景识别失败,使用默认场景 app,platform=%s", platform)
|
||||
return "app"
|
||||
}
|
||||
}
|
||||
|
||||
func NewPaymentLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PaymentLogic {
|
||||
return &PaymentLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
@@ -192,48 +210,13 @@ func (l *PaymentLogic) QueryOrderPayment(req *types.PaymentReq, session sqlx.Ses
|
||||
amount = 0.01
|
||||
}
|
||||
|
||||
// 检查72小时内身份证查询次数限制
|
||||
secretKey := l.svcCtx.Config.Encrypt.SecretKey
|
||||
key, decodeErr := hex.DecodeString(secretKey)
|
||||
if decodeErr != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 获取AES密钥失败: %+v", decodeErr)
|
||||
}
|
||||
// 解密缓存中的参数
|
||||
decryptedParams, decryptErr := crypto.AesDecrypt(data.Params, key)
|
||||
if decryptErr != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 解密缓存参数失败: %v", decryptErr)
|
||||
}
|
||||
var params map[string]interface{}
|
||||
if unmarshalErr := json.Unmarshal(decryptedParams, ¶ms); unmarshalErr != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 解析解密参数失败: %v", unmarshalErr)
|
||||
}
|
||||
// 获取身份证号
|
||||
idCard, ok := params["id_card"].(string)
|
||||
if !ok || idCard == "" {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 获取身份证号失败")
|
||||
}
|
||||
// 加密身份证号用于查询
|
||||
encryptedIdCard, encryptErr := crypto.EncryptIDCard(idCard, key)
|
||||
if encryptErr != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 加密身份证号失败: %v", encryptErr)
|
||||
}
|
||||
// 查询72小时内的查询次数
|
||||
queryCount, countErr := l.svcCtx.QueryUserRecordModel.CountByEncryptedIdCardIn72Hours(l.ctx, encryptedIdCard)
|
||||
if countErr != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "生成订单, 查询记录失败: %v", countErr)
|
||||
}
|
||||
// 如果72小时内查询次数大于等于2次,禁止支付(当前这次是第3次)
|
||||
if queryCount >= 2 {
|
||||
return nil, errors.Wrapf(xerr.NewErrMsg("查询受限通知:检测到您72小时内已完成2次报告查询,系统已自动暂停服务。如需紧急查询,请联系客服申请临时额度。"), "生成订单, 查询次数超限: %d", queryCount)
|
||||
}
|
||||
|
||||
var orderID int64
|
||||
order := model.Order{
|
||||
OrderNo: outTradeNo,
|
||||
UserId: userID,
|
||||
ProductId: product.Id,
|
||||
PaymentPlatform: req.PayMethod,
|
||||
PaymentScene: "app",
|
||||
PaymentScene: l.resolvePaymentScene(),
|
||||
Amount: amount,
|
||||
Status: "pending",
|
||||
}
|
||||
|
||||
@@ -169,7 +169,13 @@ func (l *WechatPayCallbackLogic) handleAgentVipOrderPayment(w http.ResponseWrite
|
||||
} else {
|
||||
logx.Infof("代理会员新购、升级或重新激活成功,会员ID:%d,等级:%s", agentModel.Id, agentModel.LevelName)
|
||||
}
|
||||
agentModel.MembershipExpiryTime = lzUtils.RenewMembership(agentModel.MembershipExpiryTime)
|
||||
// VIP 升级到 SVIP 按支付时间重新计算有效期,不叠加旧 VIP 剩余时长。
|
||||
isVipUpgradeToSvip := oldLevel == model.AgentLeveNameVIP && agentOrder.LevelName == model.AgentLeveNameSVIP
|
||||
if isVipUpgradeToSvip {
|
||||
agentModel.MembershipExpiryTime = lzUtils.RenewMembership(lzUtils.TimeToNullTime(time.Now()))
|
||||
} else {
|
||||
agentModel.MembershipExpiryTime = lzUtils.RenewMembership(agentModel.MembershipExpiryTime)
|
||||
}
|
||||
|
||||
if updateErr := l.svcCtx.AgentModel.UpdateWithVersion(l.ctx, nil, agentModel); updateErr != nil {
|
||||
return fmt.Errorf("修改代理信息失败: %+v", updateErr)
|
||||
|
||||
Reference in New Issue
Block a user