feat: update order s
This commit is contained in:
@@ -12,6 +12,7 @@ import (
|
|||||||
|
|
||||||
. "github.com/go-jet/jet/v2/postgres"
|
. "github.com/go-jet/jet/v2/postgres"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
"github.com/samber/lo"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -100,20 +101,56 @@ func (m *ordersModel) List(ctx context.Context, pagination *requests.Pagination,
|
|||||||
m.log.Infof("sql: %s", stmt.DebugSql())
|
m.log.Infof("sql: %s", stmt.DebugSql())
|
||||||
|
|
||||||
var orders []model.Orders = make([]model.Orders, 0)
|
var orders []model.Orders = make([]model.Orders, 0)
|
||||||
err := stmt.QueryContext(ctx, db, &orders)
|
if err := stmt.QueryContext(ctx, db, &orders); err != nil {
|
||||||
if err != nil {
|
|
||||||
m.log.Errorf("error querying orders: %v", err)
|
m.log.Errorf("error querying orders: %v", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
postsMap, err := Posts.GetPostsMapByIDs(ctx, lo.Map(orders, func(order model.Orders, _ int) int64 {
|
||||||
|
return order.PostID
|
||||||
|
}))
|
||||||
|
if err != nil {
|
||||||
|
m.log.Errorf("error getting posts map: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
userMap, err := Users.GetUsersMapByIDs(ctx, lo.Map(orders, func(order model.Orders, _ int) int64 {
|
||||||
|
return order.UserID
|
||||||
|
}))
|
||||||
|
if err != nil {
|
||||||
|
m.log.Errorf("error getting users map: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
count, err := m.countByCondition(ctx, cond)
|
count, err := m.countByCondition(ctx, cond)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
m.log.Errorf("error getting order count: %v", err)
|
m.log.Errorf("error getting order count: %v", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type orderItem struct {
|
||||||
|
model.Orders
|
||||||
|
|
||||||
|
PostTitle string `json:"post_title"`
|
||||||
|
Username string `json:"username"`
|
||||||
|
}
|
||||||
|
|
||||||
return &requests.Pager{
|
return &requests.Pager{
|
||||||
Items: orders,
|
Items: lo.Map(orders, func(order model.Orders, _ int) *orderItem {
|
||||||
|
item := &orderItem{
|
||||||
|
Orders: order,
|
||||||
|
}
|
||||||
|
|
||||||
|
if post, ok := postsMap[order.PostID]; ok {
|
||||||
|
item.PostTitle = post.Title
|
||||||
|
}
|
||||||
|
|
||||||
|
if user, ok := userMap[order.UserID]; ok {
|
||||||
|
item.Username = user.Username
|
||||||
|
}
|
||||||
|
|
||||||
|
return item
|
||||||
|
}),
|
||||||
Total: count,
|
Total: count,
|
||||||
Pagination: *pagination,
|
Pagination: *pagination,
|
||||||
}, nil
|
}, nil
|
||||||
|
|||||||
@@ -343,3 +343,30 @@ func (m *postsModel) Bought(ctx context.Context, userId int64, pagination *reque
|
|||||||
Pagination: *pagination,
|
Pagination: *pagination,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetPostsMapByIDs
|
||||||
|
func (m *postsModel) GetPostsMapByIDs(ctx context.Context, ids []int64) (map[int64]model.Posts, error) {
|
||||||
|
if len(ids) == 0 {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
tbl := table.Posts
|
||||||
|
stmt := tbl.
|
||||||
|
SELECT(tbl.AllColumns).
|
||||||
|
WHERE(
|
||||||
|
tbl.ID.IN(lo.Map(ids, func(id int64, _ int) Expression { return Int64(id) })...),
|
||||||
|
)
|
||||||
|
|
||||||
|
m.log.Infof("sql: %s", stmt.DebugSql())
|
||||||
|
|
||||||
|
var posts []model.Posts = make([]model.Posts, 0)
|
||||||
|
err := stmt.QueryContext(ctx, db, &posts)
|
||||||
|
if err != nil {
|
||||||
|
m.log.Errorf("error querying posts: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return lo.SliceToMap(posts, func(item model.Posts) (int64, model.Posts) {
|
||||||
|
return item.ID, item
|
||||||
|
}), nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -256,3 +256,30 @@ func (m *usersModel) GetUserByOpenID(ctx context.Context, openID string) (*model
|
|||||||
|
|
||||||
return &user, nil
|
return &user, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetUsersMapByIDs
|
||||||
|
func (m *usersModel) GetUsersMapByIDs(ctx context.Context, ids []int64) (map[int64]model.Users, error) {
|
||||||
|
if len(ids) == 0 {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
tbl := table.Users
|
||||||
|
stmt := tbl.
|
||||||
|
SELECT(tbl.AllColumns).
|
||||||
|
WHERE(
|
||||||
|
tbl.ID.IN(lo.Map(ids, func(id int64, _ int) Expression { return Int64(id) })...),
|
||||||
|
)
|
||||||
|
|
||||||
|
m.log.Infof("sql: %s", stmt.DebugSql())
|
||||||
|
|
||||||
|
var users []model.Users = make([]model.Users, 0)
|
||||||
|
err := stmt.QueryContext(ctx, db, &users)
|
||||||
|
if err != nil {
|
||||||
|
m.log.Errorf("error querying users: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return lo.SliceToMap(users, func(item model.Users) (int64, model.Users) {
|
||||||
|
return item.ID, item
|
||||||
|
}), nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
import { orderService } from '@/api/orderService';
|
import { orderService } from '@/api/orderService';
|
||||||
import { formatDate } from '@/utils/date';
|
import { formatDate } from '@/utils/date';
|
||||||
import Badge from 'primevue/badge';
|
import Badge from 'primevue/badge';
|
||||||
import Button from 'primevue/button';
|
|
||||||
import Column from 'primevue/column';
|
import Column from 'primevue/column';
|
||||||
import ConfirmDialog from 'primevue/confirmdialog';
|
import ConfirmDialog from 'primevue/confirmdialog';
|
||||||
import DataTable from 'primevue/datatable';
|
import DataTable from 'primevue/datatable';
|
||||||
@@ -161,8 +160,22 @@ onMounted(() => {
|
|||||||
:severity="orderStatusMap[data.status]?.severity" />
|
:severity="orderStatusMap[data.status]?.severity" />
|
||||||
</template>
|
</template>
|
||||||
</Column>
|
</Column>
|
||||||
<Column field="user_id" header="用户ID" sortable></Column>
|
<Column field="user_id" header="用户ID" sortable>
|
||||||
<Column field="post_id" header="文章ID" sortable></Column>
|
<template #body="{ data }">
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<span class="text-gray-700">用户名: {{ data.username }}</span>
|
||||||
|
<span class="text-gray-500">ID: {{ data.user_id || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</Column>
|
||||||
|
<Column field="post_id" header="文章ID" sortable>
|
||||||
|
<template #body="{ data }">
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<span class="text-gray-700"> 标题: {{ data.post_title }}</span>
|
||||||
|
<span class="text-gray-500">ID: {{ data.post_id || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</Column>
|
||||||
<Column field="price" header="价格信息" sortable>
|
<Column field="price" header="价格信息" sortable>
|
||||||
<template #body="{ data }">
|
<template #body="{ data }">
|
||||||
<div class="flex flex-col">
|
<div class="flex flex-col">
|
||||||
@@ -170,7 +183,7 @@ onMounted(() => {
|
|||||||
<span class="text-orange-500">优惠: -¥{{ formatPrice(getDiscountAmount(data.price,
|
<span class="text-orange-500">优惠: -¥{{ formatPrice(getDiscountAmount(data.price,
|
||||||
data.discount)) }}</span>
|
data.discount)) }}</span>
|
||||||
<span class="font-bold">实付: ¥{{ formatPrice(getFinalPrice(data.price, data.discount))
|
<span class="font-bold">实付: ¥{{ formatPrice(getFinalPrice(data.price, data.discount))
|
||||||
}}</span>
|
}}</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</Column>
|
</Column>
|
||||||
@@ -183,15 +196,6 @@ onMounted(() => {
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</Column>
|
</Column>
|
||||||
|
|
||||||
<Column header="操作" :exportable="false" style="min-width:8rem">
|
|
||||||
<template #body="{ data }">
|
|
||||||
<div class="flex justify-center space-x-2">
|
|
||||||
<Button icon="pi pi-trash" rounded text severity="danger" @click="handleDelete(data)"
|
|
||||||
aria-label="删除" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</Column>
|
|
||||||
</DataTable>
|
</DataTable>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user