123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- package label_relationship
- import (
- "context"
- "github.com/suyuan32/simple-admin-common/msg/errormsg"
- "wechat-api/ent/contact"
- "wechat-api/ent/labelrelationship"
- "wechat-api/internal/utils/dberrorhandler"
- "wechat-api/internal/svc"
- "wechat-api/internal/types"
- "github.com/zeromicro/go-zero/core/logx"
- )
- type SetWhatsappContactBatchLabelLogic struct {
- logx.Logger
- ctx context.Context
- svcCtx *svc.ServiceContext
- }
- func NewSetWhatsappContactBatchLabelLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SetWhatsappContactBatchLabelLogic {
- return &SetWhatsappContactBatchLabelLogic{
- Logger: logx.WithContext(ctx),
- ctx: ctx,
- svcCtx: svcCtx}
- }
- func (l *SetWhatsappContactBatchLabelLogic) SetWhatsappContactBatchLabel(req *types.BatchLabelRelationshipsInfo) (*types.BaseMsgResp, error) {
- organizationId := l.ctx.Value("organizationId").(uint64)
- l.Logger.Errorf("contactIds=%v labelIds=%v updateType=%v\n", req.ContactIds, req.LabelIds, req.UpdateType)
- // 遍历所有联系人
- for _, contactId := range req.ContactIds {
- // 开始事务
- tx, err := l.svcCtx.DB.Tx(context.Background())
- if err != nil {
- return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
- }
- // 获取联系人信息
- _, 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,找出需要新增和移除的标签
- changeLabelIds, _ := compareLabelIdsForIncrement(req.LabelIds, currentLabelIds, req.UpdateType)
- l.Logger.Errorf("contactId=%v req.LabelIds=%v \n", contactId, req.LabelIds)
- l.Logger.Errorf("req.LabelIds=%v currentLabelIds=%v \n", req.LabelIds, currentLabelIds)
- l.Logger.Errorf("changeLabelIds=%v \n", changeLabelIds)
- // 如果 req.UpdateType 为空,或 req.UpdateType 的值为 “all” 时
- if req.UpdateType == -1 {
- // 删除需要移除的标签关系
- for _, id := range changeLabelIds {
- _, err := tx.LabelRelationship.
- Delete().
- Where(
- labelrelationship.ContactID(contactId),
- labelrelationship.LabelID(id),
- ).
- Exec(l.ctx)
- if err != nil {
- _ = tx.Rollback()
- return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
- }
- }
- } else {
- // 创建需要新增的标签关系
- for _, id := range changeLabelIds {
- _, _ = tx.LabelRelationship.Create().
- SetLabelID(id).
- SetContactID(contactId).
- SetOrganizationID(organizationId).
- Save(l.ctx)
- //if err != nil {
- // return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
- //}
- }
- }
- // 所有操作成功,提交事务
- _ = tx.Commit()
- }
- return &types.BaseMsgResp{Msg: errormsg.UpdateSuccess}, nil
- }
|