package logic import ( "context" "lone-services/pkg/modelbase" "lone-services/pkg/utils" "lone-services/services/equipment/internal/dao" "lone-services/services/equipment/internal/model" "strconv" "lone-services/rpc/equipment/pb" "lone-services/services/equipment/internal/svc" "github.com/zeromicro/go-zero/core/logx" ) type AuthorizationItemsLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger BaseLogic } func NewAuthorizationItemsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AuthorizationItemsLogic { return &AuthorizationItemsLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } // AuthorizationItems 用户端获取授权列表 func (l *AuthorizationItemsLogic) AuthorizationItems(in *equipment.EmptyRequest) (*equipment.Response, error) { adminInfo := utils.GetUserFromCtx(l.ctx) if adminInfo.ID < utils.NumberOne { return l.fail(utils.ErrorNoLoginInfo) } w := modelbase.Params{Eq: map[string]string{ "user_id": strconv.Itoa(int(adminInfo.ID))}} var info []dao.AuthorizationRecordInfo err := model.AuthorizationRecordModel{}.Init().Items(w, &info) if err != nil { l.Logger.Error(err) return l.fail(utils.Fail) } ids := make(map[int64]int64) for _, v := range info { ids[v.StoreId] = v.StoreId } var items []dao.AuthorizationRecordItems if len(ids) < utils.NumberOne { return l.ok(items) } idsSlice := make([]int64, 0, len(ids)) for k := range ids { idsSlice = append(idsSlice, k) } storeItems := svc.GetStores(idsSlice, l.svcCtx.StoreSvcName) storeIdItems := make(map[int64]dao.AuthorizationRecordItems) for _, val := range storeItems { arr := utils.StrToStrArr(val.DistrictIds, utils.DecollatorComma) districtIds := []int64{} for _, arrItem := range arr { num, _ := strconv.Atoi(arrItem) districtIds = append(districtIds, int64(num)) } ww := modelbase.Params{Eq: map[string]string{ "store_id": strconv.Itoa(int(val.Id)), "user_id": strconv.Itoa(int(adminInfo.ID))}} storeNumber, err := model.AuthorizationRecordModel{}.Init().CountNumber(ww) if err != nil { l.Logger.Error(err) } storeIdItems[val.Id] = dao.AuthorizationRecordItems{ Address: val.Address, StoreName: val.Name, District: val.ProvinceName + val.CityName + val.CountyName, DistrictArr: districtIds, UsageCount: int32(storeNumber), } } for _, v := range info { item, ok := storeIdItems[v.StoreId] if !ok { continue } item.Id = v.Id item.Open = v.Open item.Status = v.Status item.StoreId = v.StoreId items = append(items, item) } return l.ok(items) }