Browse Source

增加微信后选项接口

boweniac 2 months ago
parent
commit
98bc854d37

+ 28 - 0
desc/wechat/wx.api

@@ -129,6 +129,30 @@ type (
         Callback  *string `json:"callback,optional"`
     }
 
+    // Get wx list request params | Wx列表请求参数
+    WxSelectListReq {
+        // 租户id
+        OrganizationId  *uint64 `json:"organizationId,optional"`
+    }
+
+    // The response data of wx list | Wx列表数据
+    WxSelectListResp {
+        BaseDataInfo
+
+        // Wx list data | Wx列表数据
+        Data []WxSelectListInfo `json:"data"`
+    }
+
+    WxSelectListInfo {
+        BaseIDInfo
+
+        // 微信id
+        Wxid  *string `json:"wxid,optional"`
+
+        // 微信昵称
+        Nickname  *string `json:"nickname,optional"`
+    }
+
     // Wx information response | Wx信息返回体
     WxInfoResp {
         BaseDataInfo
@@ -201,6 +225,10 @@ service Wechat {
     @handler getWxList
     post /wx/list (WxListReq) returns (WxListResp)
 
+    // Get wx list | 获取Wx列表
+    @handler getSelectWxList
+    post /wx/selectList (WxSelectListReq) returns (WxSelectListResp)
+
     // Get wx allow and block list | 获取黑白名单列表
     @handler getWxAllowBlockList
     post /wx/getWxAllowBlockList (IDReq) returns (AllowBlockListResp)

+ 44 - 0
internal/handler/Wx/get_select_wx_list_handler.go

@@ -0,0 +1,44 @@
+package Wx
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+
+	"wechat-api/internal/logic/Wx"
+	"wechat-api/internal/svc"
+	"wechat-api/internal/types"
+)
+
+// swagger:route post /wx/selectList Wx GetSelectWxList
+//
+// Get wx list | 获取Wx列表
+//
+// Get wx list | 获取Wx列表
+//
+// Parameters:
+//  + name: body
+//    require: true
+//    in: body
+//    type: WxSelectListReq
+//
+// Responses:
+//  200: WxSelectListResp
+
+func GetSelectWxListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.WxSelectListReq
+		if err := httpx.Parse(r, &req, true); err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+			return
+		}
+
+		l := Wx.NewGetSelectWxListLogic(r.Context(), svcCtx)
+		resp, err := l.GetSelectWxList(&req)
+		if err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+		} else {
+			httpx.OkJsonCtx(r.Context(), w, resp)
+		}
+	}
+}

+ 5 - 0
internal/handler/routes.go

@@ -127,6 +127,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 				},
 				{
 					Method:  http.MethodPost,
+					Path:    "/wx/selectList",
+					Handler: Wx.GetSelectWxListHandler(serverCtx),
+				},
+				{
+					Method:  http.MethodPost,
 					Path:    "/wx/getWxAllowBlockList",
 					Handler: Wx.GetWxAllowBlockListHandler(serverCtx),
 				},

+ 65 - 0
internal/logic/Wx/get_select_wx_list_logic.go

@@ -0,0 +1,65 @@
+package Wx
+
+import (
+	"context"
+	"github.com/suyuan32/simple-admin-common/msg/errormsg"
+	"strings"
+	"wechat-api/ent"
+	"wechat-api/ent/predicate"
+	"wechat-api/ent/wx"
+	"wechat-api/internal/utils/dberrorhandler"
+
+	"wechat-api/internal/svc"
+	"wechat-api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type GetSelectWxListLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewGetSelectWxListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetSelectWxListLogic {
+	return &GetSelectWxListLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx}
+}
+
+func (l *GetSelectWxListLogic) GetSelectWxList(req *types.WxSelectListReq) (resp *types.WxSelectListResp, err error) {
+	organizationId := l.ctx.Value("organizationId").(uint64)
+	isAdmin := l.ctx.Value("isAdmin").(bool)
+	var predicates []predicate.Wx
+	if !isAdmin {
+		predicates = append(predicates, wx.OrganizationIDEQ(organizationId))
+	} else {
+		if req.OrganizationId != nil {
+			predicates = append(predicates, wx.OrganizationIDEQ(*req.OrganizationId))
+		}
+	}
+	data, err := l.svcCtx.DB.Wx.Query().Where(predicates...).Order(ent.Desc(wx.FieldOrganizationID)).All(l.ctx)
+	if err != nil {
+		return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
+	}
+
+	resp = &types.WxSelectListResp{}
+	resp.Msg = errormsg.Success
+
+	for _, v := range data {
+		wxid := v.Wxid
+		if !strings.HasPrefix(wxid, "temp-") {
+			resp.Data = append(resp.Data,
+				types.WxSelectListInfo{
+					BaseIDInfo: types.BaseIDInfo{
+						Id: &v.ID,
+					},
+					Wxid:     &wxid,
+					Nickname: &v.Nickname,
+				})
+		}
+	}
+
+	return resp, nil
+}

+ 1 - 1
internal/logic/Wxhook/logout_logic.go

@@ -48,7 +48,7 @@ func (l *LogoutLogic) Logout(req *types.IDReq) (resp *types.BaseMsgResp, err err
 	tmpWxid := rand.New(rand.NewSource(time.Now().UnixNano())).Intn(1000000)
 	l.svcCtx.DB.Wx.UpdateOne(wxInfo).
 		SetStatus(0).
-		SetWxid(strconv.Itoa(tmpWxid)).
+		SetWxid("temp-" + strconv.Itoa(tmpWxid)).
 		Save(l.ctx)
 
 	resp = &types.BaseMsgResp{

+ 24 - 0
internal/types/types.go

@@ -389,6 +389,30 @@ type WxListReq struct {
 	Callback *string `json:"callback,optional"`
 }
 
+// Get wx list request params | Wx列表请求参数
+// swagger:model WxSelectListReq
+type WxSelectListReq struct {
+	// 租户id
+	OrganizationId *uint64 `json:"organizationId,optional"`
+}
+
+// The response data of wx list | Wx列表数据
+// swagger:model WxSelectListResp
+type WxSelectListResp struct {
+	BaseDataInfo
+	// Wx list data | Wx列表数据
+	Data []WxSelectListInfo `json:"data"`
+}
+
+// swagger:model WxSelectListInfo
+type WxSelectListInfo struct {
+	BaseIDInfo
+	// 微信id
+	Wxid *string `json:"wxid,optional"`
+	// 微信昵称
+	Nickname *string `json:"nickname,optional"`
+}
+
 // Wx information response | Wx信息返回体
 // swagger:model WxInfoResp
 type WxInfoResp struct {