feat: analysis admin
This commit is contained in:
@@ -0,0 +1,160 @@
|
||||
package analysisadminlogic
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"lone-services/pkg/modelbase"
|
||||
"lone-services/pkg/utils"
|
||||
analysis "lone-services/rpc/analysis/pb"
|
||||
"lone-services/services/analysis/internal/dao"
|
||||
"lone-services/services/analysis/internal/logic/common"
|
||||
"lone-services/services/analysis/internal/model"
|
||||
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
)
|
||||
|
||||
const adminImageTimeLayout = "2006-01-02 15:04"
|
||||
|
||||
func outParams(msg string) *analysis.Response {
|
||||
return common.OutResponse(utils.ErrorParams, msg)
|
||||
}
|
||||
|
||||
func formatGender(gender uint32) string {
|
||||
switch gender {
|
||||
case 1:
|
||||
return "男"
|
||||
case 2:
|
||||
return "女"
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
func userStatus(row dao.User) int {
|
||||
status := utils.NumberOne
|
||||
if row.IsRegistered == uint8(utils.StatusOk) {
|
||||
status = utils.NumberTwo
|
||||
}
|
||||
if row.IsFaceVerified == uint8(utils.StatusOk) {
|
||||
status = utils.NumberThree
|
||||
}
|
||||
if row.IsProfileCompleted == uint8(utils.StatusOk) {
|
||||
status = utils.NumberFour
|
||||
}
|
||||
return status
|
||||
}
|
||||
|
||||
func idStrings(ids []int64) []string {
|
||||
out := make([]string, 0, len(ids))
|
||||
for _, id := range ids {
|
||||
if id < utils.NumberOne {
|
||||
continue
|
||||
}
|
||||
out = append(out, strconv.FormatInt(id, utils.NumberTen))
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func loadImageLogs(userIds []int64) (map[int64]dao.UserImageLog, error) {
|
||||
out := make(map[int64]dao.UserImageLog, len(userIds))
|
||||
if len(userIds) == utils.NumberZero {
|
||||
return out, nil
|
||||
}
|
||||
var rows []dao.UserImageLog
|
||||
err := model.UserImageLogModel{}.Init().Items(modelbase.Params{
|
||||
In: map[string][]string{"user_id": idStrings(userIds)},
|
||||
Order: "detection_time desc",
|
||||
}, &rows)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, row := range rows {
|
||||
if _, ok := out[row.UserId]; ok {
|
||||
continue
|
||||
}
|
||||
out[row.UserId] = row
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func formatImageContents(data map[string]string) map[string]string {
|
||||
result := make(map[string]string, len(data))
|
||||
for k, v := range data {
|
||||
switch k {
|
||||
case "health_score":
|
||||
parts := strings.Split(v, "/")
|
||||
result[k] = strings.TrimSpace(parts[0])
|
||||
default:
|
||||
result[k] = strings.TrimSuffix(v, "%")
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func buildImageDetail(detail *dao.Image) dao.ImageDetailResource {
|
||||
var images map[string]interface{}
|
||||
if detail.Images != utils.StringEmpty {
|
||||
_ = jsoniter.UnmarshalFromString(detail.Images, &images)
|
||||
}
|
||||
|
||||
var contents map[string]string
|
||||
if detail.Contents != utils.StringEmpty {
|
||||
var raw map[string]string
|
||||
if err := jsoniter.UnmarshalFromString(detail.Contents, &raw); err == nil {
|
||||
contents = formatImageContents(raw)
|
||||
} else {
|
||||
contents = map[string]string{}
|
||||
}
|
||||
}
|
||||
|
||||
return dao.ImageDetailResource{
|
||||
Id: detail.Id,
|
||||
UserId: detail.UserId,
|
||||
TaskId: detail.TaskId,
|
||||
Images: images,
|
||||
Contents: contents,
|
||||
Cover: detail.Cover,
|
||||
CreateTime: detail.CreateTime.Format(adminImageTimeLayout),
|
||||
}
|
||||
}
|
||||
|
||||
func queryAdminImageLogs(userId int64, page, size int32) ([]dao.ImageLogResource, error) {
|
||||
var rows []dao.Image
|
||||
_, err := model.ImageModel{}.Init().Page(modelbase.Params{
|
||||
Eq: map[string]string{
|
||||
"user_id": strconv.FormatInt(userId, utils.NumberTen),
|
||||
"status": strconv.Itoa(utils.StatusOk),
|
||||
},
|
||||
Order: "id desc",
|
||||
Page: int(page),
|
||||
Size: int(size),
|
||||
}, &rows)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(rows) == utils.NumberZero {
|
||||
return nil, nil
|
||||
}
|
||||
list := make([]dao.ImageLogResource, 0, len(rows))
|
||||
for _, row := range rows {
|
||||
contents := map[string]string{}
|
||||
if row.Contents != utils.StringEmpty {
|
||||
var raw map[string]string
|
||||
if err = jsoniter.UnmarshalFromString(row.Contents, &raw); err == nil {
|
||||
if formatted := formatImageContents(raw); formatted != nil {
|
||||
contents = formatted
|
||||
}
|
||||
}
|
||||
}
|
||||
list = append(list, dao.ImageLogResource{
|
||||
Id: row.Id,
|
||||
UserId: row.UserId,
|
||||
Cover: row.Cover,
|
||||
Contents: contents,
|
||||
TaskId: row.TaskId,
|
||||
CreateTime: row.CreateTime.Format(adminImageTimeLayout),
|
||||
})
|
||||
}
|
||||
return list, nil
|
||||
}
|
||||
Reference in New Issue
Block a user