package label_relationship import ( "context" "wechat-api/internal/svc" "wechat-api/internal/types" "github.com/zeromicro/go-zero/core/logx" ) type BatchUpdateLabelRelationshipsLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewBatchUpdateLabelRelationshipsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *BatchUpdateLabelRelationshipsLogic { return &BatchUpdateLabelRelationshipsLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx} } func (l *BatchUpdateLabelRelationshipsLogic) BatchUpdateLabelRelationships(req *types.BatchLabelRelationshipsInfo) (resp *types.BaseMsgResp, err error) { //organizationId := l.ctx.Value("organizationId").(uint64) //// 开始事务 //tx, err := l.svcCtx.DB.Tx(context.Background()) //if err != nil { // return nil, dberrorhandler.DefaultEntError(l.Logger, err, req) //} // //// 遍历所有联系人 //for _, contactId := range req.ContactIds { // // 获取联系人信息 // c, err := tx.Contact.Query().Where(contact.ID(contactId), contact.OrganizationIDEQ(organizationId)).Only(l.ctx) // // 获取联系人当前已关联的标签 // currentLabelRelationships, err := tx.LabelRelationship.Query().Where(labelrelationship.ContactID(contactId)).All(l.ctx) // if err != nil { // _ = tx.Rollback() // return nil, dberrorhandler.DefaultEntError(l.Logger, err, req) // } // // // 提取当前标签ID // var currentLabelIds []uint64 // for _, relationship := range currentLabelRelationships { // currentLabelIds = append(currentLabelIds, relationship.LabelID) // } // // // 对比新旧标签ID,找出需要新增和移除的标签 // addLabelIds, removeLabelIds := compareLabelIds(req.LabelIds, currentLabelIds) // // // 如果 req.UpdateType 为空,或 req.UpdateType 的值为 “all” 时 // if req.UpdateType == nil || *req.UpdateType == "all" { // // 删除需要移除的标签关系 // for _, id := range removeLabelIds { // _, err := tx.LabelRelationship. // Delete(). // Where( // labelrelationship.ContactID(*req.ContactId), // labelrelationship.LabelID(id), // ). // Exec(l.ctx) // if err != nil { // _ = tx.Rollback() // return nil, dberrorhandler.DefaultEntError(l.Logger, err, req) // } // } // } // // // 创建需要新增的标签关系 // for _, id := range addLabelIds { // _, _ = tx.LabelRelationship.Create(). // SetLabelID(id). // SetContactID(*req.ContactId). // SetOrganizationID(organizationId). // Save(l.ctx) // //if err != nil { // // return nil, dberrorhandler.DefaultEntError(l.Logger, err, req) // //} // } // // // 获取所有 status 为 3 且 bot_wxid_list 包含 c.wx_wxid 的 sop_task // sopTasks, err := tx.SopTask.Query().Where(soptask.Status(3), soptask.OrganizationIDEQ(organizationId)).All(l.ctx) // if err != nil { // _ = tx.Rollback() // return nil, dberrorhandler.DefaultEntError(l.Logger, err, req) // } // // var filteredSopTasks []*ent.SopTask // for _, task := range sopTasks { // for _, botWxid := range task.BotWxidList { // if botWxid == c.WxWxid { // filteredSopTasks = append(filteredSopTasks, task) // break // } // } // } // // // 获取所有 filteredSopTasks 的 sop_stages // var sopStages []*ent.SopStage // for _, task := range filteredSopTasks { // stages, err := task.QueryTaskStages().All(l.ctx) // if err != nil { // _ = tx.Rollback() // return nil, dberrorhandler.DefaultEntError(l.Logger, err, req) // } // sopStages = append(sopStages, stages...) // } // err = l.AddLabelRelationships(sopStages, *c, req.LabelIds, organizationId) // // if err != nil { // _ = tx.Rollback() // return nil, err // } // // 所有操作成功,提交事务 // err = tx.Commit() // if err != nil { // return nil, dberrorhandler.DefaultEntError(l.Logger, err, req) // } //} // //return &types.BaseMsgResp{Msg: errormsg.UpdateSuccess}, nil return nil, nil }