diff --git a/common/report/api.go b/common/report/api.go index 74ef945..25ce1d4 100644 --- a/common/report/api.go +++ b/common/report/api.go @@ -362,6 +362,20 @@ func (s *ReportService) SaveField(ctx context.Context, req *model.SaveFieldReq) field.FilterOperators = []string{"=", "!=", ">", "<", ">=", "<=", "IN", "LIKE", "BETWEEN"} } + // 新增时校验字段编码唯一性 + if req.ID == nil || *req.ID == 0 { + existing, err := s.configLoader.GetReportFields(ctx, req.BusinessCode, req.ReportCode) + if err != nil { + return nil, fmt.Errorf("校验字段编码失败: %w", err) + } + allFields := append(append(existing.Dimensions, existing.Indicators...), existing.Filters...) + for _, f := range allFields { + if f.FieldCode == req.FieldCode && f.Status == model.StatusActive { + return nil, fmt.Errorf("字段编码 %s 已存在(业务: %s, 报表: %s)", req.FieldCode, req.BusinessCode, req.ReportCode) + } + } + } + if req.ID != nil && *req.ID > 0 { field.Id = *req.ID if err := s.configLoader.UpdateField(ctx, field); err != nil {