package service import ( "github.com/tcs-iptv/tcs/internal/chain" "github.com/tcs-iptv/tcs/internal/model" ) // ---- 多维度标识查询(方案第一阶段标识查询接口补足)---- // QueryByHash 根据内容哈希反查标识信息及映射关系。 func (s *Service) QueryByHash(fileHash string) (model.ContentQueryResult, error) { return s.chain.QueryByHash(fileHash) } // QueryByProvincialCode 根据省级内容编码(CP MediaID)反查标识信息。 func (s *Service) QueryByProvincialCode(provincialCode string) (model.ContentQueryResult, error) { return s.chain.QueryByProvincialCode(provincialCode) } // QueryByLibraryFileID 根据片库文件 ID(媒资库 ID)反查标识信息。 func (s *Service) QueryByLibraryFileID(libraryFileID string) (model.ContentQueryResult, error) { return s.chain.QueryByLibraryFileID(libraryFileID) } // ---- MA 合并/拆分(方案 MA 管理模块补足)---- // MergeCCCodes 将多个 MA 码合并为一个主 MA 码(仅监管主体)。 // 被合并的 MA 码的哈希绑定和映射迁移至主 MA 码,原 MA 码状态标记为 merged。 // 全链路存证记录合并操作。 func (s *Service) MergeCCCodes(role chain.Role, req model.MergeRequest) (model.MergeResult, error) { res, err := s.chain.MergeMA(role, req) if err != nil { return res, err } // 记录存证 s.prov.Record(model.ProvenanceEvent{ CCCode: req.PrimaryCCCode, Node: model.NodeIssue, Operator: req.Operator, Detail: "MA 码合并:将 " + joinCCCodes(req.SecondaryCCCodes) + " 合并入 " + req.PrimaryCCCode + ",原因:" + req.Reason, }) return res, nil } // SplitCCCode 将一个 MA 码拆分为多个独立 MA 码(仅监管主体)。 // 按集号将哈希绑定和映射迁移至新 MA 码,源 MA 码状态标记为 split。 // 全链路存证记录拆分操作。 func (s *Service) SplitCCCode(role chain.Role, req model.SplitRequest) (model.SplitResult, error) { res, err := s.chain.SplitMA(role, req) if err != nil { return res, err } // 记录存证 s.prov.Record(model.ProvenanceEvent{ CCCode: req.SourceCCCode, Node: model.NodeIssue, Operator: req.Operator, Detail: "MA 码拆分:将 " + req.SourceCCCode + " 拆分为 " + joinCCCodes(res.NewCCCodes) + ",原因:" + req.Reason, }) return res, nil } // joinCCCodes 将 MA 码列表拼接为逗号分隔的字符串。 func joinCCCodes(codes []string) string { if len(codes) == 0 { return "" } out := codes[0] for i := 1; i < len(codes); i++ { out += ", " + codes[i] } return out }