feat: scan graph
CI / changes (push) Successful in 1m31s
CI / ad (push) Successful in 0s
CI / admin (push) Successful in 0s
CI / aiserver (push) Successful in 0s
CI / analysis (push) Successful in 37s
CI / bff (push) Successful in 18s
CI / chore (push) Successful in 0s
CI / equipment (push) Successful in 0s
CI / express (push) Successful in 1s
CI / factory (push) Successful in 0s
CI / message (push) Successful in 0s
CI / order (push) Successful in 0s
CI / payment (push) Successful in 0s
CI / percutaneous (push) Successful in 0s
CI / product (push) Successful in 0s
CI / record (push) Successful in 1s
CI / sale (push) Successful in 0s
CI / store (push) Successful in 22s
CI / support (push) Successful in 0s
CI / task (push) Successful in 0s
CI / user (push) Successful in 21s
CI / water (push) Successful in 0s
CI / wecom (push) Successful in 0s
CI / ws (push) Successful in 0s
CI / changes (push) Successful in 1m31s
CI / ad (push) Successful in 0s
CI / admin (push) Successful in 0s
CI / aiserver (push) Successful in 0s
CI / analysis (push) Successful in 37s
CI / bff (push) Successful in 18s
CI / chore (push) Successful in 0s
CI / equipment (push) Successful in 0s
CI / express (push) Successful in 1s
CI / factory (push) Successful in 0s
CI / message (push) Successful in 0s
CI / order (push) Successful in 0s
CI / payment (push) Successful in 0s
CI / percutaneous (push) Successful in 0s
CI / product (push) Successful in 0s
CI / record (push) Successful in 1s
CI / sale (push) Successful in 0s
CI / store (push) Successful in 22s
CI / support (push) Successful in 0s
CI / task (push) Successful in 0s
CI / user (push) Successful in 21s
CI / water (push) Successful in 0s
CI / wecom (push) Successful in 0s
CI / ws (push) Successful in 0s
This commit is contained in:
@@ -1,17 +1,24 @@
|
||||
package analysisadminlogic
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"lone-services/pkg/modelbase"
|
||||
"lone-services/pkg/utils"
|
||||
analysis "lone-services/rpc/analysis/pb"
|
||||
storepb "lone-services/rpc/store/pb"
|
||||
"lone-services/services/analysis/internal/dao"
|
||||
"lone-services/services/analysis/internal/logic/common"
|
||||
"lone-services/services/analysis/internal/model"
|
||||
"lone-services/services/analysis/internal/svc"
|
||||
"lone-services/services/analysis/validator"
|
||||
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/metadata"
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
const adminImageTimeLayout = "2006-01-02 15:04"
|
||||
@@ -119,6 +126,125 @@ func buildImageDetail(detail *dao.Image) dao.ImageDetailResource {
|
||||
}
|
||||
}
|
||||
|
||||
func outgoingWithIncomingMD(ctx context.Context) context.Context {
|
||||
md, ok := metadata.FromIncomingContext(ctx)
|
||||
if !ok {
|
||||
return ctx
|
||||
}
|
||||
return metadata.NewOutgoingContext(ctx, md.Copy())
|
||||
}
|
||||
|
||||
type storePageRow struct {
|
||||
Id int64 `json:"id"`
|
||||
Name string `json:"name"`
|
||||
UserName string `json:"user_name"`
|
||||
UserMobile string `json:"user_mobile"`
|
||||
District string `json:"district"`
|
||||
Address string `json:"address"`
|
||||
ProvinceName string `json:"province_name"`
|
||||
CityName string `json:"city_name"`
|
||||
CountyName string `json:"county_name"`
|
||||
}
|
||||
|
||||
type storePageData struct {
|
||||
Count int64 `json:"count"`
|
||||
Items []storePageRow `json:"items"`
|
||||
}
|
||||
|
||||
func loadStorePage(ctx context.Context, name string, page, size, storeStatus int32) (storePageData, error) {
|
||||
out := storePageData{Items: []storePageRow{}}
|
||||
svcName := utils.GetConfigString("services.store")
|
||||
if svcName == utils.StringEmpty {
|
||||
return out, status.Error(codes.FailedPrecondition, "store service empty")
|
||||
}
|
||||
cli, err := svc.GetRpcClient(svcName)
|
||||
if err != nil {
|
||||
return out, err
|
||||
}
|
||||
res, err := storepb.NewStoreClient(cli.Conn()).Items(outgoingWithIncomingMD(ctx), &storepb.ItemsRequest{
|
||||
Name: name,
|
||||
Page: page,
|
||||
Size: size,
|
||||
Status: storeStatus,
|
||||
})
|
||||
if err != nil {
|
||||
return out, err
|
||||
}
|
||||
if res.GetCode() != utils.Ok.Code {
|
||||
return out, status.Error(codes.Internal, res.GetMsg())
|
||||
}
|
||||
if res.GetData() == utils.StringEmpty {
|
||||
return out, nil
|
||||
}
|
||||
if err = jsoniter.UnmarshalFromString(res.GetData(), &out); err != nil {
|
||||
return storePageData{}, err
|
||||
}
|
||||
if out.Items == nil {
|
||||
out.Items = []storePageRow{}
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func loadStoresByIds(ctx context.Context, ids []int64) (map[int64]*storepb.InfoResponse, error) {
|
||||
out := make(map[int64]*storepb.InfoResponse, len(ids))
|
||||
if len(ids) == utils.NumberZero {
|
||||
return out, nil
|
||||
}
|
||||
svcName := utils.GetConfigString("services.store")
|
||||
if svcName == utils.StringEmpty {
|
||||
return nil, status.Error(codes.FailedPrecondition, "store service empty")
|
||||
}
|
||||
cli, err := svc.GetRpcClient(svcName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res, err := storepb.NewStoreClient(cli.Conn()).GetInfoByIds(ctx, &storepb.IdsRequest{Ids: ids})
|
||||
if err != nil {
|
||||
if st, ok := status.FromError(err); ok && st.Message() == utils.ErrorNotFund.Msg {
|
||||
return out, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
for _, item := range res.GetItems() {
|
||||
out[item.GetId()] = item
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func storeDistrictTextFromInfo(info *storepb.InfoResponse) string {
|
||||
if info == nil {
|
||||
return utils.StringEmpty
|
||||
}
|
||||
parts := make([]string, 0, 3)
|
||||
for _, name := range []string{info.GetProvinceName(), info.GetCityName(), info.GetCountyName()} {
|
||||
if name != utils.StringEmpty {
|
||||
parts = append(parts, name)
|
||||
}
|
||||
}
|
||||
return strings.Join(parts, "")
|
||||
}
|
||||
|
||||
func pageSlice[T any](items []T, page, size int32) (int64, []T) {
|
||||
total := int64(len(items))
|
||||
p := int(page)
|
||||
s := int(size)
|
||||
if p < modelbase.DefaultPage {
|
||||
p = modelbase.DefaultPage
|
||||
}
|
||||
if s < utils.NumberOne {
|
||||
s = modelbase.DefaultSize
|
||||
}
|
||||
start := (p - 1) * s
|
||||
if start >= len(items) {
|
||||
return total, []T{}
|
||||
}
|
||||
end := start + s
|
||||
if end > len(items) {
|
||||
end = len(items)
|
||||
}
|
||||
return total, items[start:end]
|
||||
}
|
||||
|
||||
func queryAdminImageLogs(userId int64, page, size int32) ([]dao.ImageLogResource, error) {
|
||||
var rows []dao.Image
|
||||
_, err := model.ImageModel{}.Init().Page(modelbase.Params{
|
||||
@@ -158,3 +284,47 @@ func queryAdminImageLogs(userId int64, page, size int32) ([]dao.ImageLogResource
|
||||
}
|
||||
return list, nil
|
||||
}
|
||||
|
||||
func toAdminGraphTitles(items []*analysis.AdminGraphTitleItem) []validator.AdminGraphTitleItem {
|
||||
out := make([]validator.AdminGraphTitleItem, 0, len(items))
|
||||
for _, item := range items {
|
||||
if item == nil {
|
||||
continue
|
||||
}
|
||||
out = append(out, validator.AdminGraphTitleItem{
|
||||
Name: item.GetName(),
|
||||
Content: item.GetContent(),
|
||||
})
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func toAdminGraphImages(items []*analysis.AdminGraphImageItem) []validator.AdminGraphImageItem {
|
||||
out := make([]validator.AdminGraphImageItem, 0, len(items))
|
||||
for _, item := range items {
|
||||
if item == nil {
|
||||
continue
|
||||
}
|
||||
out = append(out, validator.AdminGraphImageItem{
|
||||
Url: item.GetUrl(),
|
||||
Text: item.GetText(),
|
||||
})
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func toDaoGraphTitles(items []validator.AdminGraphTitleItem) []dao.GraphTitleItem {
|
||||
out := make([]dao.GraphTitleItem, 0, len(items))
|
||||
for _, item := range items {
|
||||
out = append(out, dao.GraphTitleItem{Name: item.Name, Content: item.Content})
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func toDaoGraphImages(items []validator.AdminGraphImageItem) []dao.GraphImageItem {
|
||||
out := make([]dao.GraphImageItem, 0, len(items))
|
||||
for _, item := range items {
|
||||
out = append(out, dao.GraphImageItem{Url: item.Url, Text: item.Text})
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user