Просмотр исходного кода

增加租、联系人、户机构数据一致性检查

boweniac 16 часов назад
Родитель
Сommit
35d27a780b

+ 1 - 0
internal/logic/Wx/change_organization_logic.go

@@ -36,6 +36,7 @@ func (l *ChangeOrganizationLogic) ChangeOrganization(req *types.WxInfo) (resp *t
 	if err != nil {
 		return nil, err
 	}
+	defer tx.Rollback()
 
 	change := wechat.WxSafeChange{Ctx: l.ctx, Tx: tx, WxId: *req.Wxid, OrganizationId: *req.OrganizationId}
 	err = change.KeepAllSafe()

+ 4 - 2
internal/logic/contact/delete_contact_logic.go

@@ -27,8 +27,10 @@ func NewDeleteContactLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Del
 }
 
 func (l *DeleteContactLogic) DeleteContact(req *types.IDsReq) (*types.BaseMsgResp, error) {
-	organizationId := l.ctx.Value("organizationId").(uint64)
-	_, err := l.svcCtx.DB.Contact.Delete().Where(contact.IDIn(req.Ids...), contact.OrganizationIDEQ(organizationId)).Exec(l.ctx)
+	//organizationId := l.ctx.Value("organizationId").(uint64)
+	_, err := l.svcCtx.DB.Contact.Delete().Where(
+		contact.IDIn(req.Ids...),
+	).Exec(l.ctx)
 
 	if err != nil {
 		return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)

+ 4 - 6
internal/logic/contact/get_contact_by_id_logic.go

@@ -46,14 +46,12 @@ func (l *GetContactByIdLogic) GetContactById(req *types.IDReq) (*types.ContactIn
 
 	wxinfo, err := l.svcCtx.DB.Wx.Query().
 		Where(
-			wx.Wxid(data.WxWxid),
+			wx.WxidEQ(data.WxWxid),
+			wx.OrganizationIDEQ(organizationId),
 		).
 		Only(l.ctx)
-	if err != nil {
-		if ent.IsNotFound(err) {
-			return nil
-		}
-		return err
+	if err != nil || wxinfo == nil {
+		return nil, err
 	}
 
 	var custom_field []types.ContactFieldTemplate

+ 25 - 3
internal/logic/contact/get_contact_list_logic.go

@@ -53,11 +53,33 @@ func convertLabelToLabelInfo(label *ent.Label) types.LabelInfo {
 
 func (l *GetContactListLogic) GetContactList(req *types.ContactListReq) (*types.ContactListResp, error) {
 	organizationId := l.ctx.Value("organizationId").(uint64)
-	isAdmin := l.ctx.Value("isAdmin").(bool)
+	//isAdmin := l.ctx.Value("isAdmin").(bool)
+	wxslist := make([]string, 0)
+
 	var predicates []predicate.Contact
-	if req.WxWxid == nil || (req.WxWxid != nil && !isAdmin) {
-		predicates = append(predicates, contact.OrganizationIDEQ(organizationId))
+	if req.WxWxid == nil {
+		wxsInfo, err := l.svcCtx.DB.Wx.Query().
+			Where(
+				wx.OrganizationIDEQ(organizationId),
+			).All(l.ctx)
+		if err != nil {
+			return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
+		}
+		for _, w := range wxsInfo {
+			wxslist = append(wxslist, w.Wxid)
+		}
+	} else {
+		wxInfo, err := l.svcCtx.DB.Wx.Query().
+			Where(
+				wx.WxidEQ(*req.WxWxid),
+				wx.OrganizationIDEQ(organizationId),
+			).Only(l.ctx)
+		if err != nil {
+			return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
+		}
+		wxslist = append(wxslist, wxInfo.Wxid)
 	}
+	predicates = append(predicates, contact.WxWxidIn(wxslist...))
 	if req.Status != nil {
 		predicates = append(predicates, contact.StatusEQ(*req.Status))
 	}

+ 1 - 3
internal/logic/contact/update_contact_logic.go

@@ -3,7 +3,6 @@ package contact
 import (
 	"context"
 	"wechat-api/ent"
-	"wechat-api/ent/contact"
 	"wechat-api/ent/contactfield"
 	"wechat-api/internal/svc"
 	"wechat-api/internal/types"
@@ -32,13 +31,12 @@ func (l *UpdateContactLogic) UpdateContact(req *types.ContactInfo) (*types.BaseM
 	if err != nil {
 		return nil, err
 	}
-	organizationId := l.ctx.Value("organizationId").(uint64)
+	//organizationId := l.ctx.Value("organizationId").(uint64)
 	cage := 0
 	if req.Cage != nil && *req.Cage > 0 {
 		cage = *req.Cage
 	}
 	err = tx.Contact.UpdateOneID(*req.Id).
-		Where(contact.OrganizationID(organizationId)).
 		SetNotNilStatus(req.Status).
 		SetNotNilWxWxid(req.WxWxid).
 		SetNotNilType(req.Type).

+ 30 - 35
internal/service/wechat/sync_wx.go

@@ -9,11 +9,15 @@ import (
 	"time"
 	"wechat-api/ent"
 	"wechat-api/ent/wx"
-	"wechat-api/internal/svc"
 	"wechat-api/internal/types"
 )
 
-func SyncAllWx(svcCtx *svc.ServiceContext) {
+type SyncAllWx struct {
+	Ctx context.Context
+	DB  *ent.Client
+}
+
+func (s *SyncAllWx) SyncAll() {
 	// 获取微信列表
 	var result types.WorkPhoneGetWeChatsResp
 	client := req.C().DevMode()
@@ -35,19 +39,20 @@ func SyncAllWx(svcCtx *svc.ServiceContext) {
 		if account.Wechatid == nil || *account.Wechatid == "" {
 			continue
 		}
-		wxinfo, err := svcCtx.DB.Wx.Query().
+		wxinfo, err := s.DB.Wx.Query().
 			Where(
 				wx.And(
 					wx.WxidEQ(*account.Wechatid),
 					wx.CtypeEQ(1),
 				),
 			).
-			Only(context.TODO())
+			Only(s.Ctx)
 
 		if err != nil && !ent.IsNotFound(err) {
 			logx.Error("syncWx: ", err)
 			return
 		}
+
 		var status uint8
 		logx.Info(fmt.Printf("*account.Isonline: %d\n", *account.Isonline))
 		if *account.Isonline == 0 {
@@ -57,9 +62,20 @@ func SyncAllWx(svcCtx *svc.ServiceContext) {
 		}
 
 		if wxinfo != nil {
+			tx, err := s.DB.Tx(s.Ctx)
+			if err != nil {
+				continue
+			}
+			defer tx.Rollback()
+			change := WxSafeChange{Ctx: s.Ctx, Tx: tx, WxId: wxinfo.Wxid, OrganizationId: wxinfo.OrganizationID}
+			err = change.KeepAllSafe()
+			if err != nil {
+				_ = tx.Rollback()
+				continue
+			}
 			logx.Info(fmt.Printf("wxinfo is not nil, account: %s\n", *account.Wechatid))
 			logx.Info(fmt.Printf("wxinfo is not nil, account: %s\n", *account.Wechatnick))
-			err = svcCtx.DB.Wx.UpdateOneID(wxinfo.ID).
+			err = tx.Wx.UpdateOneID(wxinfo.ID).
 				SetServerID(0).
 				SetPort(*account.Deviceid).
 				SetProcessID(strconv.FormatInt(account.Cid, 10)).
@@ -67,14 +83,20 @@ func SyncAllWx(svcCtx *svc.ServiceContext) {
 				SetNotNilNickname(account.Wechatnick).
 				SetNotNilHeadBig(account.Avatar).
 				SetStatus(status).
-				Exec(context.TODO())
+				Exec(s.Ctx)
+			if err != nil {
+				_ = tx.Rollback()
+				logx.Error("syncWx: ", err)
+				continue
+			}
+			err = tx.Commit()
 			if err != nil {
 				logx.Error("syncWx: ", err)
 				continue
 			}
 		} else {
 			logx.Error(fmt.Printf("wxinfo is nil, account: %+v\n", account))
-			_, err := svcCtx.DB.Wx.Create().
+			_, err := s.DB.Wx.Create().
 				SetServerID(0).
 				SetPort(*account.Deviceid).
 				SetProcessID(strconv.FormatInt(account.Cid, 10)).
@@ -84,38 +106,11 @@ func SyncAllWx(svcCtx *svc.ServiceContext) {
 				SetNotNilNickname(account.Wechatnick).
 				SetStatus(status).
 				SetAllowList([]string{}).SetBlockList([]string{}).SetGroupAllowList([]string{}).SetGroupBlockList([]string{}).
-				Save(context.TODO())
+				Save(s.Ctx)
 			if err != nil {
 				logx.Error("syncWx: ", err)
 				continue
 			}
 		}
-
-		//data := map[string]interface{}{
-		//	"MsgType": "TriggerFriendPushTask",
-		//	"Content": map[string]interface{}{
-		//		"WeChatId": *account.Wechatid,
-		//	},
-		//}
-		//jsonStr, err := json.Marshal(data)
-		//err = svcCtx.WechatWs["default"].SendMsg([]byte(jsonStr))
-		//if err != nil {
-		//	logx.Error("syncWx: ", err)
-		//	continue
-		//}
-		//
-		//dataChatroom := map[string]interface{}{
-		//	"MsgType": "TriggerChatroomPushTask",
-		//	"Content": map[string]interface{}{
-		//		"WeChatId": *account.Wechatid,
-		//		"Flag":     1,
-		//	},
-		//}
-		//jsonStrChatroom, err := json.Marshal(dataChatroom)
-		//err = svcCtx.WechatWs["default"].SendMsg([]byte(jsonStrChatroom))
-		//if err != nil {
-		//	logx.Error("syncWx: ", err)
-		//	continue
-		//}
 	}
 }