f
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user