This commit is contained in:
2026-05-13 14:43:10 +08:00
parent 2312f54e1e
commit 3399de0dc5
49 changed files with 1637 additions and 287 deletions

View File

@@ -2,6 +2,7 @@ package admin_order
import (
"context"
"fmt"
"sync"
"qnc-server/app/main/api/internal/svc"
@@ -54,6 +55,24 @@ func (l *AdminGetOrderListLogic) AdminGetOrderList(req *types.AdminGetOrderListR
if req.Status != "" {
builder = builder.Where("status = ?", req.Status)
}
// 是否代理订单筛选
if req.IsAgentOrder != nil {
if *req.IsAgentOrder {
// 筛选代理订单订单ID在agent_order表中
builder = builder.Where("id IN (SELECT order_id FROM agent_order WHERE del_state = 0)")
} else {
// 筛选非代理订单订单ID不在agent_order表中
builder = builder.Where("id NOT IN (SELECT order_id FROM agent_order WHERE del_state = 0)")
}
}
// 代理编号筛选
if req.AgentCode != "" {
// 将字符串转换为int64进行查询
var agentCode int64
if _, err := fmt.Sscanf(req.AgentCode, "%d", &agentCode); err == nil {
builder = builder.Where("id IN (SELECT order_id FROM agent_order ao JOIN agent a ON ao.agent_id = a.id WHERE a.agent_code = ? AND ao.del_state = 0)", agentCode)
}
}
// 时间范围查询
if req.CreateTimeStart != "" {
builder = builder.Where("create_time >= ?", req.CreateTimeStart)
@@ -101,6 +120,7 @@ func (l *AdminGetOrderListLogic) AdminGetOrderList(req *types.AdminGetOrderListR
queryStateMap := make(map[string]string)
agentOrderMap := make(map[string]bool) // 代理订单映射
agentProcessStatusMap := make(map[string]string) // 代理处理状态映射
agentCodeMap := make(map[string]string) // 代理编号映射
var mu sync.Mutex
@@ -169,8 +189,32 @@ func (l *AdminGetOrderListLogic) AdminGetOrderList(req *types.AdminGetOrderListR
}
// 记录代理订单
agentIds := make([]string, 0, len(agentOrders))
for _, agentOrder := range agentOrders {
agentOrderMap[agentOrder.OrderId] = true
agentIds = append(agentIds, agentOrder.AgentId)
}
// 批量获取代理编号
if len(agentIds) > 0 {
agents, err := l.svcCtx.AgentModel.FindAll(l.ctx,
l.svcCtx.AgentModel.SelectBuilder().Where(squirrel.Eq{"id": agentIds}), "")
if err != nil && !errors.Is(err, model.ErrNotFound) {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetOrderList, 批量查询代理信息失败 err: %v", err)
}
// 构建代理ID到代理编号的映射
agentIdToCodeMap := make(map[string]string)
for _, agent := range agents {
agentIdToCodeMap[agent.Id] = fmt.Sprintf("%d", agent.AgentCode)
}
// 为每个代理订单设置代理编号
for _, agentOrder := range agentOrders {
if code, exists := agentIdToCodeMap[agentOrder.AgentId]; exists {
agentCodeMap[agentOrder.OrderId] = code
}
}
}
// 对于代理订单,查询代理处理状态
@@ -277,6 +321,7 @@ func (l *AdminGetOrderListLogic) AdminGetOrderList(req *types.AdminGetOrderListR
if agentOrderMap[order.Id] {
item.IsAgentOrder = true
item.AgentProcessStatus = agentProcessStatusMap[order.Id]
item.AgentCode = agentCodeMap[order.Id]
} else {
item.IsAgentOrder = false
item.AgentProcessStatus = "not_agent"

View File

@@ -156,6 +156,13 @@ func (l *AdminRefundOrderLogic) createRefundRecordAndUpdateOrder(order *model.Or
return fmt.Errorf("更新订单状态失败: %v", err)
}
// 退款成功落库后冲正代理佣金/返佣(部分退款与全额退款均全额冲回本单分账;仅已退款时执行,不含「退款中」)
if orderStatus == model.OrderStatusRefunded {
if revErr := l.svcCtx.AgentService.ReverseAgentSettlementOnOrderRefund(ctx, session, order.Id); revErr != nil {
return revErr
}
}
return nil
})
}