temp
This commit is contained in:
parent
ca66cc91d4
commit
79e1ba2616
186
.cursor/rules/api.mdc
Normal file
186
.cursor/rules/api.mdc
Normal file
@ -0,0 +1,186 @@
|
||||
# Cursor 工作流程和规范
|
||||
|
||||
## 目录结构说明
|
||||
|
||||
### API 定义目录 (`app/main/api/desc/`)
|
||||
```
|
||||
desc/
|
||||
├── admin/ # 后台管理接口
|
||||
│ ├── admin_user.api # 管理员用户相关接口
|
||||
│ ├── platform_user.api # 平台用户相关接口
|
||||
│ ├── order.api # 订单管理接口
|
||||
│ ├── promotion.api # 促销活动接口
|
||||
│ ├── menu.api # 菜单管理接口
|
||||
│ ├── role.api # 角色权限接口
|
||||
│ └── auth.api # 后台认证接口
|
||||
│
|
||||
├── front/ # 前台业务接口
|
||||
│ ├── user.api # 用户相关接口
|
||||
│ ├── product.api # 产品相关接口
|
||||
│ ├── pay.api # 支付相关接口
|
||||
│ ├── query.api # 查询相关接口
|
||||
│ ├── auth/ # 前台认证相关子模块
|
||||
│ ├── product/ # 产品相关子模块
|
||||
│ ├── query/ # 查询相关子模块
|
||||
│ ├── user/ # 用户相关子模块
|
||||
│ └── pay/ # 支付相关子模块
|
||||
│
|
||||
└── main.api # API 主入口文件,用于引入所有子模块
|
||||
```
|
||||
|
||||
### 目录规范
|
||||
1. 后台管理接口统一放在 `admin/` 目录下
|
||||
- 所有后台管理相关的 API 定义文件都放在此目录
|
||||
- 文件名应清晰表明模块功能,如 `order.api`、`user.api` 等
|
||||
- 后台接口统一使用 `/api/v1/admin/` 前缀
|
||||
|
||||
2. 前台业务接口统一放在 `front/` 目录下
|
||||
- 所有面向用户的 API 定义文件都放在此目录
|
||||
- 可以根据业务模块创建子目录,如 `user/`、`product/` 等
|
||||
- 前台接口统一使用 `/api/v1/` 前缀
|
||||
|
||||
3. 主入口文件 `main.api`
|
||||
- 用于引入所有子模块的 API 定义
|
||||
- 保持清晰的模块分类和注释
|
||||
|
||||
## API 开发流程
|
||||
|
||||
### 1. API 定义
|
||||
- 根据业务类型选择正确的目录:
|
||||
- 后台管理接口:`app/main/api/desc/admin/` 目录
|
||||
- 前台业务接口:`app/main/api/desc/front/` 目录
|
||||
- 创建新的 `.api` 文件,遵循以下命名规范:
|
||||
- 后台接口:`[模块名].api`,如 `order.api`、`user.api`
|
||||
- 前台接口:`[模块名].api`,如 `product.api`、`pay.api`
|
||||
- API 定义规范:
|
||||
- 使用 RESTful 风格
|
||||
- 请求/响应结构体命名规范:`[模块名][操作名][Req/Resp]`
|
||||
- 字段类型使用 string 而不是 int64 来存储枚举值
|
||||
- 添加必要的注释说明
|
||||
- 请求/响应参数定义规范:
|
||||
```go
|
||||
type (
|
||||
// 创建类请求(必填字段)
|
||||
AdminCreateXXXReq {
|
||||
Field1 string `json:"field1"` // 字段1说明
|
||||
Field2 int64 `json:"field2"` // 字段2说明
|
||||
Field3 string `json:"field3"` // 字段3说明
|
||||
}
|
||||
|
||||
// 更新类请求(可选字段使用指针类型)
|
||||
AdminUpdateXXXReq {
|
||||
Id int64 `path:"id"` // ID(路径参数)
|
||||
Field1 *string `json:"field1,optional"` // 字段1说明(可选)
|
||||
Field2 *int64 `json:"field2,optional"` // 字段2说明(可选)
|
||||
Field3 *string `json:"field3,optional"` // 字段3说明(可选)
|
||||
}
|
||||
|
||||
// 查询列表请求(分页参数 + 可选查询条件)
|
||||
AdminGetXXXListReq {
|
||||
Page int64 `form:"page"` // 页码
|
||||
PageSize int64 `form:"pageSize"` // 每页数量
|
||||
Field1 *string `form:"field1,optional"` // 查询条件1(可选)
|
||||
Field2 *int64 `form:"field2,optional"` // 查询条件2(可选)
|
||||
Field3 *string `form:"field3,optional"` // 查询条件3(可选)
|
||||
}
|
||||
|
||||
// 列表项结构体(用于列表响应)
|
||||
XXXListItem {
|
||||
Id int64 `json:"id"` // ID
|
||||
Field1 string `json:"field1"` // 字段1
|
||||
Field2 string `json:"field2"` // 字段2
|
||||
Field3 string `json:"field3"` // 字段3
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
// 列表响应
|
||||
AdminGetXXXListResp {
|
||||
Total int64 `json:"total"` // 总数
|
||||
Items []XXXListItem `json:"items"` // 列表数据
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
- 参数定义注意事项:
|
||||
1. 创建类请求(Create):
|
||||
- 所有字段都是必填的,使用普通类型(非指针)
|
||||
- 使用 `json` 标签,不需要 `optional` 标记
|
||||
- 必须添加字段说明注释
|
||||
|
||||
2. 更新类请求(Update):
|
||||
- 除 ID 外的所有字段都是可选的,使用指针类型(如 `*string`、`*int64`)
|
||||
- 使用 `json` 标签,并添加 `optional` 标记
|
||||
- ID 字段使用 `path` 标签,因为是路径参数
|
||||
- 必须添加字段说明注释
|
||||
|
||||
3. 查询列表请求(GetList):
|
||||
- 分页参数(page、pageSize)使用普通类型
|
||||
- 查询条件字段都是可选的,使用指针类型
|
||||
- 使用 `form` 标签,并添加 `optional` 标记
|
||||
- 必须添加字段说明注释
|
||||
|
||||
4. 响应结构体:
|
||||
- 列表响应使用 `Total` 和 `Items` 字段
|
||||
- 列表项使用单独的结构体定义
|
||||
- 时间字段统一使用 string 类型
|
||||
- 必须添加字段说明注释
|
||||
|
||||
5. 标签使用规范:
|
||||
- 路径参数:`path:"id"`
|
||||
- JSON 参数:`json:"field_name"`
|
||||
- 表单参数:`form:"field_name"`
|
||||
- 可选字段:添加 `optional` 标记
|
||||
- 所有字段必须添加说明注释
|
||||
|
||||
- 示例:
|
||||
```go
|
||||
// 通知管理接口
|
||||
@server(
|
||||
prefix: /api/v1/admin/notification
|
||||
group: admin_notification
|
||||
)
|
||||
service main {
|
||||
// 创建通知
|
||||
@handler AdminCreateNotification
|
||||
post /create (AdminCreateNotificationReq) returns (AdminCreateNotificationResp)
|
||||
|
||||
// 更新通知
|
||||
@handler AdminUpdateNotification
|
||||
put /update/:id (AdminUpdateNotificationReq) returns (AdminUpdateNotificationResp)
|
||||
|
||||
// 获取通知列表
|
||||
@handler AdminGetNotificationList
|
||||
get /list (AdminGetNotificationListReq) returns (AdminGetNotificationListResp)
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 引入 API
|
||||
- 在 `app/main/api/main.api` 中引入新定义的 API 文件:
|
||||
```go
|
||||
import "desc/order.api"
|
||||
```
|
||||
|
||||
### 3. 生成代码
|
||||
- 在项目根目录运行 `gen_api.ps1` 脚本生成相关代码:
|
||||
```powershell
|
||||
./gen_api.ps1
|
||||
```
|
||||
- 生成的文件包括:
|
||||
- `app/main/api/internal/handler/` - 处理器
|
||||
- `app/main/api/internal/logic/` - 业务逻辑
|
||||
- `app/main/api/internal/svc/` - 服务上下文
|
||||
- `app/main/api/internal/types/` - 类型定义
|
||||
|
||||
### 4. 实现业务逻辑
|
||||
- 在 `app/main/api/internal/logic/` 目录下实现各个接口的业务逻辑
|
||||
- 具体实现规范请参考 `logic.mdc` 文件
|
||||
|
||||
## 注意事项
|
||||
1. 所有枚举类型使用 string 而不是 int64
|
||||
2. 错误处理必须使用 errors.Wrapf 和 xerr 包
|
||||
3. 涉及多表操作时使用事务
|
||||
4. 并发操作时注意使用互斥锁保护共享资源
|
||||
5. 时间类型统一使用 "2006-01-02 15:04:05" 格式
|
||||
6. 代码生成后需要检查并完善业务逻辑实现
|
||||
7. 保持代码风格统一,添加必要的注释
|
270
.cursor/rules/logic.mdc
Normal file
270
.cursor/rules/logic.mdc
Normal file
@ -0,0 +1,270 @@
|
||||
# Your rule content
|
||||
|
||||
- You can @ files here
|
||||
- You can use markdown but dont have to
|
||||
|
||||
# Logic 实现规范
|
||||
|
||||
## 目录结构
|
||||
```
|
||||
app/main/api/internal/logic/
|
||||
├── admin_notification/ # 通知管理模块
|
||||
│ ├── admincreatenotificationlogic.go # 创建通知
|
||||
│ ├── admindeletnotificationlogic.go # 删除通知
|
||||
│ ├── admingetnotificationdetaillogic.go # 获取通知详情
|
||||
│ ├── admingetnotificationlistlogic.go # 获取通知列表
|
||||
│ └── adminupdatenotificationlogic.go # 更新通知
|
||||
└── [其他模块]/
|
||||
```
|
||||
|
||||
## Logic 实现规范
|
||||
|
||||
### 1. 基础结构
|
||||
每个 Logic 文件都应包含以下基础结构:
|
||||
```go
|
||||
package [模块名]
|
||||
|
||||
import (
|
||||
"context"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/xerr"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type [操作名]Logic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func New[操作名]Logic(ctx context.Context, svcCtx *svc.ServiceContext) *[操作名]Logic {
|
||||
return &[操作名]Logic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 增删改查实现规范
|
||||
|
||||
#### 2.1 创建操作(Create)
|
||||
```go
|
||||
func (l *[操作名]Logic) [操作名](req *types.[操作名]Req) (resp *types.[操作名]Resp, err error) {
|
||||
// 1. 数据转换和验证
|
||||
data := &model.[表名]{
|
||||
Field1: req.Field1,
|
||||
Field2: req.Field2,
|
||||
// ... 其他字段映射
|
||||
}
|
||||
|
||||
// 2. 数据库操作
|
||||
result, err := l.svcCtx.[表名]Model.Insert(l.ctx, nil, data)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"创建[操作对象]失败, err: %v, req: %+v", err, req)
|
||||
}
|
||||
|
||||
// 3. 返回结果
|
||||
id, _ := result.LastInsertId()
|
||||
return &types.[操作名]Resp{Id: id}, nil
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.2 删除操作(Delete)
|
||||
```go
|
||||
func (l *[操作名]Logic) [操作名](req *types.[操作名]Req) (resp *types.[操作名]Resp, err error) {
|
||||
// 1. 查询记录是否存在
|
||||
record, err := l.svcCtx.[表名]Model.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"查找[操作对象]失败, err: %v, id: %d", err, req.Id)
|
||||
}
|
||||
|
||||
// 2. 执行删除操作(软删除)
|
||||
err = l.svcCtx.[表名]Model.DeleteSoft(l.ctx, nil, record)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"删除[操作对象]失败, err: %v, id: %d", err, req.Id)
|
||||
}
|
||||
|
||||
// 3. 返回结果
|
||||
return &types.[操作名]Resp{Success: true}, nil
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.3 更新操作(Update)
|
||||
```go
|
||||
func (l *[操作名]Logic) [操作名](req *types.[操作名]Req) (resp *types.[操作名]Resp, err error) {
|
||||
// 1. 查询记录是否存在
|
||||
record, err := l.svcCtx.[表名]Model.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"查找[操作对象]失败, err: %v, id: %d", err, req.Id)
|
||||
}
|
||||
|
||||
// 2. 更新字段(使用指针判断是否更新)
|
||||
if req.Field1 != nil {
|
||||
record.Field1 = *req.Field1
|
||||
}
|
||||
if req.Field2 != nil {
|
||||
record.Field2 = *req.Field2
|
||||
}
|
||||
// ... 其他字段更新
|
||||
|
||||
// 3. 执行更新操作
|
||||
_, err = l.svcCtx.[表名]Model.Update(l.ctx, nil, record)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"更新[操作对象]失败, err: %v, req: %+v", err, req)
|
||||
}
|
||||
|
||||
// 4. 返回结果
|
||||
return &types.[操作名]Resp{Success: true}, nil
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.4 查询详情(GetDetail)
|
||||
```go
|
||||
func (l *[操作名]Logic) [操作名](req *types.[操作名]Req) (resp *types.[操作名]Resp, err error) {
|
||||
// 1. 查询记录
|
||||
record, err := l.svcCtx.[表名]Model.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"查找[操作对象]失败, err: %v, id: %d", err, req.Id)
|
||||
}
|
||||
|
||||
// 2. 构建响应
|
||||
resp = &types.[操作名]Resp{
|
||||
Id: record.Id,
|
||||
Field1: record.Field1,
|
||||
Field2: record.Field2,
|
||||
CreateTime: record.CreateTime.Format("2006-01-02 15:04:05"),
|
||||
UpdateTime: record.UpdateTime.Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
|
||||
// 3. 处理可选字段(如时间字段)
|
||||
if record.OptionalField.Valid {
|
||||
resp.OptionalField = record.OptionalField.Time.Format("2006-01-02")
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.5 查询列表(GetList)
|
||||
```go
|
||||
func (l *[操作名]Logic) [操作名](req *types.[操作名]Req) (resp *types.[操作名]Resp, err error) {
|
||||
// 1. 构建查询条件
|
||||
builder := l.svcCtx.[表名]Model.SelectBuilder()
|
||||
|
||||
// 2. 添加查询条件(使用指针判断是否添加条件)
|
||||
if req.Field1 != nil {
|
||||
builder = builder.Where("field1 LIKE ?", "%"+*req.Field1+"%")
|
||||
}
|
||||
if req.Field2 != nil {
|
||||
builder = builder.Where("field2 = ?", *req.Field2)
|
||||
}
|
||||
// ... 其他查询条件
|
||||
|
||||
// 3. 执行分页查询
|
||||
list, total, err := l.svcCtx.[表名]Model.FindPageListByPageWithTotal(
|
||||
l.ctx, builder, req.Page, req.PageSize, "id DESC")
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"查询[操作对象]列表失败, err: %v, req: %+v", err, req)
|
||||
}
|
||||
|
||||
// 4. 构建响应列表
|
||||
items := make([]types.[列表项类型], 0, len(list))
|
||||
for _, item := range list {
|
||||
listItem := types.[列表项类型]{
|
||||
Id: item.Id,
|
||||
Field1: item.Field1,
|
||||
Field2: item.Field2,
|
||||
CreateTime: item.CreateTime.Format("2006-01-02 15:04:05"),
|
||||
UpdateTime: item.UpdateTime.Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
// 处理可选字段
|
||||
if item.OptionalField.Valid {
|
||||
listItem.OptionalField = item.OptionalField.Time.Format("2006-01-02")
|
||||
}
|
||||
items = append(items, listItem)
|
||||
}
|
||||
|
||||
// 5. 返回结果
|
||||
return &types.[操作名]Resp{
|
||||
Total: total,
|
||||
Items: items,
|
||||
}, nil
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 错误处理规范
|
||||
1. 使用 `errors.Wrapf` 包装错误
|
||||
2. 使用 `xerr.NewErrCode` 创建业务错误
|
||||
3. 错误信息应包含:
|
||||
- 操作类型(创建/更新/删除/查询)
|
||||
- 具体错误描述
|
||||
- 相关参数信息(ID、请求参数等)
|
||||
|
||||
### 4. 时间处理规范
|
||||
1. 时间格式化:
|
||||
- 日期时间:`"2006-01-02 15:04:05"`
|
||||
- 仅日期:`"2006-01-02"`
|
||||
2. 可选时间字段处理:
|
||||
```go
|
||||
if field.Valid {
|
||||
resp.Field = field.Time.Format("2006-01-02")
|
||||
}
|
||||
```
|
||||
|
||||
### 5. 数据库操作规范
|
||||
1. 查询条件构建:
|
||||
```go
|
||||
builder := l.svcCtx.[表名]Model.SelectBuilder()
|
||||
builder = builder.Where("field = ?", value)
|
||||
```
|
||||
2. 分页查询:
|
||||
```go
|
||||
list, total, err := l.svcCtx.[表名]Model.FindPageListByPageWithTotal(
|
||||
ctx, builder, page, pageSize, "id DESC")
|
||||
```
|
||||
3. 事务处理:
|
||||
```go
|
||||
err = l.svcCtx.[表名]Model.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error {
|
||||
// 事务操作
|
||||
return nil
|
||||
})
|
||||
```
|
||||
|
||||
### 6. 并发处理规范
|
||||
```go
|
||||
var mu sync.Mutex
|
||||
err = mr.MapReduceVoid(func(source chan<- interface{}) {
|
||||
// 并发处理
|
||||
}, func(item interface{}, writer mr.Writer[struct{}], cancel func(error)) {
|
||||
// 处理单个项目
|
||||
}, func(pipe <-chan struct{}, cancel func(error)) {
|
||||
// 完成处理
|
||||
})
|
||||
```
|
||||
|
||||
### 7. 注意事项
|
||||
1. 所有数据库操作必须进行错误处理
|
||||
2. 更新操作必须使用指针类型判断字段是否更新
|
||||
3. 查询列表必须支持分页
|
||||
4. 时间字段必须统一格式化
|
||||
5. 可选字段必须进行空值判断
|
||||
6. 保持代码风格统一,添加必要的注释
|
||||
7. 涉及多表操作时使用事务
|
||||
8. 并发操作时注意使用互斥锁保护共享资源
|
||||
9. 错误处理必须使用 errors.Wrapf 和 xerr 包
|
||||
10. 时间类型统一使用 "2006-01-02 15:04:05" 格式
|
||||
|
||||
# Your rule content
|
||||
|
||||
- You can @ files here
|
||||
- You can use markdown but dont have to
|
BIN
app/main/api/__debug_bin1457748911.exe
Normal file
BIN
app/main/api/__debug_bin1457748911.exe
Normal file
Binary file not shown.
75
app/main/api/desc/admin/admin.md
Normal file
75
app/main/api/desc/admin/admin.md
Normal file
@ -0,0 +1,75 @@
|
||||
# 后台管理面板功能说明
|
||||
|
||||
## 1. 统计中心
|
||||
|
||||
- **数据概览**
|
||||
展示平台核心数据指标,包括用户数、订单数、收入等关键指标的实时统计。
|
||||
- **趋势分析**
|
||||
提供各项数据的趋势图表,支持按日、周、月、年等维度查看数据变化。
|
||||
- **转化分析**
|
||||
分析用户行为路径和转化率,帮助优化业务流程。
|
||||
- **地域分布**
|
||||
展示用户和订单的地域分布情况,支持地图可视化。
|
||||
|
||||
## 2. 系统管理
|
||||
|
||||
- **用户管理**
|
||||
管理平台所有用户信息,包括用户的基本资料、状态、权限等。
|
||||
- **角色管理**
|
||||
管理系统角色,分配不同角色的权限,支持角色的增删改查。
|
||||
- **菜单管理**
|
||||
配置后台左侧菜单栏的结构和显示内容,支持菜单的自定义和排序。
|
||||
|
||||
## 3. 推广管理
|
||||
|
||||
- **推广数据分析**
|
||||
查看和分析推广相关的数据报表,支持多维度统计和导出。
|
||||
- **推广链接管理**
|
||||
管理推广渠道和推广链接,支持生成、分发和统计推广链接的效果。
|
||||
|
||||
## 4. 订单管理
|
||||
|
||||
- 管理平台所有订单,支持订单的查询、退款、导出等操作。
|
||||
|
||||
## 5. 平台用户管理
|
||||
|
||||
- **用户信息管理**
|
||||
基于 user 表,管理平台所有注册用户的详细信息。
|
||||
- **用户认证管理**
|
||||
基于 userAuth 表,管理用户的认证信息(如第三方登录、手机号、邮箱等)。
|
||||
|
||||
## 6. 通知管理
|
||||
|
||||
- 管理平台的系统通知,包括通知的发布、编辑、删除和推送历史。
|
||||
|
||||
## 7. 产品与功能管理
|
||||
|
||||
- **产品管理**
|
||||
管理平台所有产品的信息,包括产品的价格、介绍、上下架等。
|
||||
- **功能管理**
|
||||
管理平台所有功能点,支持功能的增删改查。
|
||||
- **产品功能配置**
|
||||
支持为每个产品配置可用的功能,实现产品与功能的灵活绑定。
|
||||
|
||||
## 8. 示例管理
|
||||
|
||||
- 管理产品的示例内容,支持为不同产品配置不同的示例,便于用户参考和体验。
|
||||
|
||||
## 9. 平台配置管理
|
||||
|
||||
- 用于管理平台的全局配置项,如站点信息、支付配置、第三方集成等。
|
||||
|
||||
## 10. 版本更新管理
|
||||
|
||||
- **版本发布**
|
||||
管理平台版本更新,包括版本号、更新内容、发布时间等。
|
||||
- **更新记录**
|
||||
维护版本更新历史,支持查看历史版本信息和回滚操作。
|
||||
- **强制更新**
|
||||
配置版本强制更新策略,确保用户使用最新版本。
|
||||
- **灰度发布**
|
||||
支持新版本灰度发布,可控制更新推送比例和范围。
|
||||
|
||||
---
|
||||
|
||||
> 以上为后台管理面板的主要功能模块规划,后续可根据业务发展持续扩展和优化。
|
108
app/main/api/desc/admin/admin_feature.api
Normal file
108
app/main/api/desc/admin/admin_feature.api
Normal file
@ -0,0 +1,108 @@
|
||||
syntax = "v1"
|
||||
|
||||
info (
|
||||
title: "后台功能管理服务"
|
||||
desc: "后台功能管理相关接口"
|
||||
author: "Liangzai"
|
||||
email: "2440983361@qq.com"
|
||||
version: "v1"
|
||||
)
|
||||
|
||||
// 功能管理接口
|
||||
@server(
|
||||
prefix: /api/v1/admin/feature
|
||||
group: admin_feature
|
||||
)
|
||||
service main {
|
||||
// 创建功能
|
||||
@handler AdminCreateFeature
|
||||
post /create (AdminCreateFeatureReq) returns (AdminCreateFeatureResp)
|
||||
|
||||
// 更新功能
|
||||
@handler AdminUpdateFeature
|
||||
put /update/:id (AdminUpdateFeatureReq) returns (AdminUpdateFeatureResp)
|
||||
|
||||
// 删除功能
|
||||
@handler AdminDeleteFeature
|
||||
delete /delete/:id (AdminDeleteFeatureReq) returns (AdminDeleteFeatureResp)
|
||||
|
||||
// 获取功能列表
|
||||
@handler AdminGetFeatureList
|
||||
get /list (AdminGetFeatureListReq) returns (AdminGetFeatureListResp)
|
||||
|
||||
// 获取功能详情
|
||||
@handler AdminGetFeatureDetail
|
||||
get /detail/:id (AdminGetFeatureDetailReq) returns (AdminGetFeatureDetailResp)
|
||||
}
|
||||
|
||||
type (
|
||||
// 创建功能请求
|
||||
AdminCreateFeatureReq {
|
||||
ApiId string `json:"api_id"` // API标识
|
||||
Name string `json:"name"` // 描述
|
||||
}
|
||||
|
||||
// 创建功能响应
|
||||
AdminCreateFeatureResp {
|
||||
Id int64 `json:"id"` // 功能ID
|
||||
}
|
||||
|
||||
// 更新功能请求
|
||||
AdminUpdateFeatureReq {
|
||||
Id int64 `path:"id"` // 功能ID
|
||||
ApiId *string `json:"api_id,optional"` // API标识
|
||||
Name *string `json:"name,optional"` // 描述
|
||||
}
|
||||
|
||||
// 更新功能响应
|
||||
AdminUpdateFeatureResp {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
// 删除功能请求
|
||||
AdminDeleteFeatureReq {
|
||||
Id int64 `path:"id"` // 功能ID
|
||||
}
|
||||
|
||||
// 删除功能响应
|
||||
AdminDeleteFeatureResp {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
// 获取功能列表请求
|
||||
AdminGetFeatureListReq {
|
||||
Page int64 `form:"page"` // 页码
|
||||
PageSize int64 `form:"pageSize"` // 每页数量
|
||||
ApiId *string `form:"api_id,optional"` // API标识
|
||||
Name *string `form:"name,optional"` // 描述
|
||||
}
|
||||
|
||||
// 功能列表项
|
||||
FeatureListItem {
|
||||
Id int64 `json:"id"` // 功能ID
|
||||
ApiId string `json:"api_id"` // API标识
|
||||
Name string `json:"name"` // 描述
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
// 获取功能列表响应
|
||||
AdminGetFeatureListResp {
|
||||
Total int64 `json:"total"` // 总数
|
||||
Items []FeatureListItem `json:"items"` // 列表数据
|
||||
}
|
||||
|
||||
// 获取功能详情请求
|
||||
AdminGetFeatureDetailReq {
|
||||
Id int64 `path:"id"` // 功能ID
|
||||
}
|
||||
|
||||
// 获取功能详情响应
|
||||
AdminGetFeatureDetailResp {
|
||||
Id int64 `json:"id"` // 功能ID
|
||||
ApiId string `json:"api_id"` // API标识
|
||||
Name string `json:"name"` // 描述
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
)
|
175
app/main/api/desc/admin/admin_product.api
Normal file
175
app/main/api/desc/admin/admin_product.api
Normal file
@ -0,0 +1,175 @@
|
||||
syntax = "v1"
|
||||
|
||||
info (
|
||||
title: "后台产品管理服务"
|
||||
desc: "后台产品管理相关接口"
|
||||
author: "Liangzai"
|
||||
email: "2440983361@qq.com"
|
||||
version: "v1"
|
||||
)
|
||||
|
||||
// 产品管理接口
|
||||
@server(
|
||||
prefix: /api/v1/admin/product
|
||||
group: admin_product
|
||||
)
|
||||
service main {
|
||||
// 创建产品
|
||||
@handler AdminCreateProduct
|
||||
post /create (AdminCreateProductReq) returns (AdminCreateProductResp)
|
||||
|
||||
// 更新产品
|
||||
@handler AdminUpdateProduct
|
||||
put /update/:id (AdminUpdateProductReq) returns (AdminUpdateProductResp)
|
||||
|
||||
// 删除产品
|
||||
@handler AdminDeleteProduct
|
||||
delete /delete/:id (AdminDeleteProductReq) returns (AdminDeleteProductResp)
|
||||
|
||||
// 获取产品列表
|
||||
@handler AdminGetProductList
|
||||
get /list (AdminGetProductListReq) returns (AdminGetProductListResp)
|
||||
|
||||
// 获取产品详情
|
||||
@handler AdminGetProductDetail
|
||||
get /detail/:id (AdminGetProductDetailReq) returns (AdminGetProductDetailResp)
|
||||
|
||||
// 获取产品功能列表
|
||||
@handler AdminGetProductFeatureList
|
||||
get /feature/list/:product_id (AdminGetProductFeatureListReq) returns ([]AdminGetProductFeatureListResp)
|
||||
|
||||
// 更新产品功能关联(批量)
|
||||
@handler AdminUpdateProductFeatures
|
||||
put /feature/update/:product_id (AdminUpdateProductFeaturesReq) returns (AdminUpdateProductFeaturesResp)
|
||||
}
|
||||
|
||||
type (
|
||||
// 创建产品请求
|
||||
AdminCreateProductReq {
|
||||
ProductName string `json:"product_name"` // 服务名
|
||||
ProductEn string `json:"product_en"` // 英文名
|
||||
Description string `json:"description"` // 描述
|
||||
Notes string `json:"notes,optional"` // 备注
|
||||
CostPrice float64 `json:"cost_price"` // 成本
|
||||
SellPrice float64 `json:"sell_price"` // 售价
|
||||
}
|
||||
|
||||
// 创建产品响应
|
||||
AdminCreateProductResp {
|
||||
Id int64 `json:"id"` // 产品ID
|
||||
}
|
||||
|
||||
// 更新产品请求
|
||||
AdminUpdateProductReq {
|
||||
Id int64 `path:"id"` // 产品ID
|
||||
ProductName *string `json:"product_name,optional"` // 服务名
|
||||
ProductEn *string `json:"product_en,optional"` // 英文名
|
||||
Description *string `json:"description,optional"` // 描述
|
||||
Notes *string `json:"notes,optional"` // 备注
|
||||
CostPrice *float64 `json:"cost_price,optional"` // 成本
|
||||
SellPrice *float64 `json:"sell_price,optional"` // 售价
|
||||
}
|
||||
|
||||
// 更新产品响应
|
||||
AdminUpdateProductResp {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
// 删除产品请求
|
||||
AdminDeleteProductReq {
|
||||
Id int64 `path:"id"` // 产品ID
|
||||
}
|
||||
|
||||
// 删除产品响应
|
||||
AdminDeleteProductResp {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
// 获取产品列表请求
|
||||
AdminGetProductListReq {
|
||||
Page int64 `form:"page"` // 页码
|
||||
PageSize int64 `form:"pageSize"` // 每页数量
|
||||
ProductName *string `form:"product_name,optional"` // 服务名
|
||||
ProductEn *string `form:"product_en,optional"` // 英文名
|
||||
}
|
||||
|
||||
// 产品列表项
|
||||
ProductListItem {
|
||||
Id int64 `json:"id"` // 产品ID
|
||||
ProductName string `json:"product_name"` // 服务名
|
||||
ProductEn string `json:"product_en"` // 英文名
|
||||
Description string `json:"description"` // 描述
|
||||
Notes string `json:"notes"` // 备注
|
||||
CostPrice float64 `json:"cost_price"` // 成本
|
||||
SellPrice float64 `json:"sell_price"` // 售价
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
// 获取产品列表响应
|
||||
AdminGetProductListResp {
|
||||
Total int64 `json:"total"` // 总数
|
||||
Items []ProductListItem `json:"items"` // 列表数据
|
||||
}
|
||||
|
||||
// 获取产品详情请求
|
||||
AdminGetProductDetailReq {
|
||||
Id int64 `path:"id"` // 产品ID
|
||||
}
|
||||
|
||||
// 获取产品详情响应
|
||||
AdminGetProductDetailResp {
|
||||
Id int64 `json:"id"` // 产品ID
|
||||
ProductName string `json:"product_name"` // 服务名
|
||||
ProductEn string `json:"product_en"` // 英文名
|
||||
Description string `json:"description"` // 描述
|
||||
Notes string `json:"notes"` // 备注
|
||||
CostPrice float64 `json:"cost_price"` // 成本
|
||||
SellPrice float64 `json:"sell_price"` // 售价
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
// 获取产品功能列表请求
|
||||
AdminGetProductFeatureListReq {
|
||||
ProductId int64 `path:"product_id"` // 产品ID
|
||||
}
|
||||
|
||||
// 获取产品功能列表响应Item
|
||||
AdminGetProductFeatureListResp {
|
||||
Id int64 `json:"id"` // 关联ID
|
||||
ProductId int64 `json:"product_id"` // 产品ID
|
||||
FeatureId int64 `json:"feature_id"` // 功能ID
|
||||
ApiId string `json:"api_id"` // API标识
|
||||
Name string `json:"name"` // 功能描述
|
||||
Sort int64 `json:"sort"` // 排序
|
||||
Enable int64 `json:"enable"` // 是否启用
|
||||
IsImportant int64 `json:"is_important"` // 是否重要
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
// // 获取产品功能列表响应
|
||||
// AdminGetProductFeatureListResp {
|
||||
// Items []ProductFeatureListItem `json:"items"` // 列表数据
|
||||
// }
|
||||
|
||||
// 产品功能关联项
|
||||
ProductFeatureItem {
|
||||
FeatureId int64 `json:"feature_id"` // 功能ID
|
||||
Sort int64 `json:"sort"` // 排序
|
||||
Enable int64 `json:"enable"` // 是否启用
|
||||
IsImportant int64 `json:"is_important"` // 是否重要
|
||||
}
|
||||
|
||||
// 更新产品功能关联请求(批量)
|
||||
AdminUpdateProductFeaturesReq {
|
||||
ProductId int64 `path:"product_id"` // 产品ID
|
||||
Features []ProductFeatureItem `json:"features"` // 功能列表
|
||||
}
|
||||
|
||||
// 更新产品功能关联响应
|
||||
AdminUpdateProductFeaturesResp {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
)
|
@ -1,8 +1,8 @@
|
||||
syntax = "v1"
|
||||
|
||||
info (
|
||||
title: "用户中心服务"
|
||||
desc: "用户中心服务"
|
||||
title: "后台用户中心服务"
|
||||
desc: "后台用户中心服务"
|
||||
author: "Liangzai"
|
||||
email: "2440983361@qq.com"
|
||||
version: "v1"
|
||||
@ -51,12 +51,12 @@ type (
|
||||
|
||||
// 列表响应
|
||||
AdminGetUserListResp {
|
||||
Total int64 `json:"total"` // 总数
|
||||
Items []UserListItem `json:"items"` // 列表
|
||||
Total int64 `json:"total"` // 总数
|
||||
Items []AdminUserListItem `json:"items"` // 列表
|
||||
}
|
||||
|
||||
// 列表项
|
||||
UserListItem {
|
||||
AdminUserListItem {
|
||||
Id int64 `json:"id"` // 用户ID
|
||||
Username string `json:"username"` // 用户名
|
||||
RealName string `json:"real_name"` // 真实姓名
|
127
app/main/api/desc/admin/notification.api
Normal file
127
app/main/api/desc/admin/notification.api
Normal file
@ -0,0 +1,127 @@
|
||||
syntax = "v1"
|
||||
|
||||
type (
|
||||
// 创建通知请求
|
||||
AdminCreateNotificationReq {
|
||||
Title string `json:"title"` // 通知标题
|
||||
NotificationPage string `json:"notification_page"` // 通知页面
|
||||
Content string `json:"content"` // 通知内容
|
||||
StartDate string `json:"start_date"` // 生效开始日期(yyyy-MM-dd)
|
||||
StartTime string `json:"start_time"` // 生效开始时间(HH:mm:ss)
|
||||
EndDate string `json:"end_date"` // 生效结束日期(yyyy-MM-dd)
|
||||
EndTime string `json:"end_time"` // 生效结束时间(HH:mm:ss)
|
||||
Status int64 `json:"status"` // 状态:1-启用,0-禁用
|
||||
}
|
||||
|
||||
// 创建通知响应
|
||||
AdminCreateNotificationResp {
|
||||
Id int64 `json:"id"` // 通知ID
|
||||
}
|
||||
|
||||
// 更新通知请求
|
||||
AdminUpdateNotificationReq {
|
||||
Id int64 `path:"id"` // 通知ID
|
||||
Title *string `json:"title,optional"` // 通知标题
|
||||
Content *string `json:"content,optional"` // 通知内容
|
||||
NotificationPage *string `json:"notification_page,optional"` // 通知页面
|
||||
StartDate *string `json:"start_date,optional"` // 生效开始日期
|
||||
StartTime *string `json:"start_time,optional"` // 生效开始时间
|
||||
EndDate *string `json:"end_date,optional"` // 生效结束日期
|
||||
EndTime *string `json:"end_time,optional"` // 生效结束时间
|
||||
Status *int64 `json:"status,optional"` // 状态
|
||||
}
|
||||
|
||||
// 更新通知响应
|
||||
AdminUpdateNotificationResp {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
// 删除通知请求
|
||||
AdminDeleteNotificationReq {
|
||||
Id int64 `path:"id"` // 通知ID
|
||||
}
|
||||
|
||||
// 删除通知响应
|
||||
AdminDeleteNotificationResp {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
// 获取通知详情请求
|
||||
AdminGetNotificationDetailReq {
|
||||
Id int64 `path:"id"` // 通知ID
|
||||
}
|
||||
|
||||
// 获取通知详情响应
|
||||
AdminGetNotificationDetailResp {
|
||||
Id int64 `json:"id"` // 通知ID
|
||||
Title string `json:"title"` // 通知标题
|
||||
Content string `json:"content"` // 通知内容
|
||||
NotificationPage string `json:"notification_page"` // 通知页面
|
||||
StartDate string `json:"start_date"` // 生效开始日期
|
||||
StartTime string `json:"start_time"` // 生效开始时间
|
||||
EndDate string `json:"end_date"` // 生效结束日期
|
||||
EndTime string `json:"end_time"` // 生效结束时间
|
||||
Status int64 `json:"status"` // 状态
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
// 获取通知列表请求
|
||||
AdminGetNotificationListReq {
|
||||
Page int64 `form:"page"` // 页码
|
||||
PageSize int64 `form:"pageSize"` // 每页数量
|
||||
Title *string `form:"title,optional"` // 通知标题(可选)
|
||||
NotificationPage *string `form:"notification_page,optional"` // 通知页面(可选)
|
||||
Status *int64 `form:"status,optional"` // 状态(可选)
|
||||
StartDate *string `form:"start_date,optional"` // 开始日期范围(可选)
|
||||
EndDate *string `form:"end_date,optional"` // 结束日期范围(可选)
|
||||
}
|
||||
|
||||
// 通知列表项
|
||||
NotificationListItem {
|
||||
Id int64 `json:"id"` // 通知ID
|
||||
Title string `json:"title"` // 通知标题
|
||||
NotificationPage string `json:"notification_page"` // 通知页面
|
||||
Content string `json:"content"` // 通知内容
|
||||
StartDate string `json:"start_date"` // 生效开始日期
|
||||
StartTime string `json:"start_time"` // 生效开始时间
|
||||
EndDate string `json:"end_date"` // 生效结束日期
|
||||
EndTime string `json:"end_time"` // 生效结束时间
|
||||
Status int64 `json:"status"` // 状态
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
// 获取通知列表响应
|
||||
AdminGetNotificationListResp {
|
||||
Total int64 `json:"total"` // 总数
|
||||
Items []NotificationListItem `json:"items"` // 列表数据
|
||||
}
|
||||
)
|
||||
|
||||
// 通知管理接口
|
||||
@server(
|
||||
prefix: /api/v1/admin/notification
|
||||
group: admin_notification
|
||||
)
|
||||
service main {
|
||||
// 创建通知
|
||||
@handler AdminCreateNotification
|
||||
post /create (AdminCreateNotificationReq) returns (AdminCreateNotificationResp)
|
||||
|
||||
// 更新通知
|
||||
@handler AdminUpdateNotification
|
||||
put /update/:id (AdminUpdateNotificationReq) returns (AdminUpdateNotificationResp)
|
||||
|
||||
// 删除通知
|
||||
@handler AdminDeleteNotification
|
||||
delete /delete/:id (AdminDeleteNotificationReq) returns (AdminDeleteNotificationResp)
|
||||
|
||||
// 获取通知详情
|
||||
@handler AdminGetNotificationDetail
|
||||
get /detail/:id (AdminGetNotificationDetailReq) returns (AdminGetNotificationDetailResp)
|
||||
|
||||
// 获取通知列表
|
||||
@handler AdminGetNotificationList
|
||||
get /list (AdminGetNotificationListReq) returns (AdminGetNotificationListResp)
|
||||
}
|
167
app/main/api/desc/admin/order.api
Normal file
167
app/main/api/desc/admin/order.api
Normal file
@ -0,0 +1,167 @@
|
||||
syntax = "v1"
|
||||
|
||||
info (
|
||||
title: "订单服务"
|
||||
desc: "订单服务"
|
||||
author: "Liangzai"
|
||||
email: "2440983361@qq.com"
|
||||
version: "v1"
|
||||
)
|
||||
|
||||
@server (
|
||||
prefix: api/v1/admin/order
|
||||
group: admin_order
|
||||
jwt: JwtAuth
|
||||
)
|
||||
service main {
|
||||
@doc "获取订单列表"
|
||||
@handler AdminGetOrderList
|
||||
get /list (AdminGetOrderListReq) returns (AdminGetOrderListResp)
|
||||
|
||||
@doc "获取订单详情"
|
||||
@handler AdminGetOrderDetail
|
||||
get /detail/:id (AdminGetOrderDetailReq) returns (AdminGetOrderDetailResp)
|
||||
|
||||
@doc "创建订单"
|
||||
@handler AdminCreateOrder
|
||||
post /create (AdminCreateOrderReq) returns (AdminCreateOrderResp)
|
||||
|
||||
@doc "更新订单"
|
||||
@handler AdminUpdateOrder
|
||||
put /update/:id (AdminUpdateOrderReq) returns (AdminUpdateOrderResp)
|
||||
|
||||
@doc "删除订单"
|
||||
@handler AdminDeleteOrder
|
||||
delete /delete/:id (AdminDeleteOrderReq) returns (AdminDeleteOrderResp)
|
||||
|
||||
@doc "订单退款"
|
||||
@handler AdminRefundOrder
|
||||
post /refund/:id (AdminRefundOrderReq) returns (AdminRefundOrderResp)
|
||||
}
|
||||
|
||||
type (
|
||||
// 列表请求
|
||||
AdminGetOrderListReq {
|
||||
Page int64 `form:"page,default=1"` // 页码
|
||||
PageSize int64 `form:"pageSize,default=20"` // 每页数量
|
||||
OrderNo string `form:"order_no,optional"` // 商户订单号
|
||||
PlatformOrderId string `form:"platform_order_id,optional"` // 支付订单号
|
||||
ProductName string `form:"product_name,optional"` // 产品名称
|
||||
PaymentPlatform string `form:"payment_platform,optional"` // 支付方式
|
||||
PaymentScene string `form:"payment_scene,optional"` // 支付平台
|
||||
Amount float64 `form:"amount,optional"` // 金额
|
||||
Status string `form:"status,optional"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败
|
||||
IsPromotion int64 `form:"is_promotion,optional,default=-1"` // 是否推广订单:0-否,1-是
|
||||
CreateTimeStart string `form:"create_time_start,optional"` // 创建时间开始
|
||||
CreateTimeEnd string `form:"create_time_end,optional"` // 创建时间结束
|
||||
PayTimeStart string `form:"pay_time_start,optional"` // 支付时间开始
|
||||
PayTimeEnd string `form:"pay_time_end,optional"` // 支付时间结束
|
||||
RefundTimeStart string `form:"refund_time_start,optional"` // 退款时间开始
|
||||
RefundTimeEnd string `form:"refund_time_end,optional"` // 退款时间结束
|
||||
}
|
||||
|
||||
// 列表响应
|
||||
AdminGetOrderListResp {
|
||||
Total int64 `json:"total"` // 总数
|
||||
Items []OrderListItem `json:"items"` // 列表
|
||||
}
|
||||
|
||||
// 列表项
|
||||
OrderListItem {
|
||||
Id int64 `json:"id"` // 订单ID
|
||||
OrderNo string `json:"order_no"` // 商户订单号
|
||||
PlatformOrderId string `json:"platform_order_id"` // 支付订单号
|
||||
ProductName string `json:"product_name"` // 产品名称
|
||||
PaymentPlatform string `json:"payment_platform"` // 支付方式
|
||||
PaymentScene string `json:"payment_scene"` // 支付平台
|
||||
Amount float64 `json:"amount"` // 金额
|
||||
Status string `json:"status"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
PayTime string `json:"pay_time"` // 支付时间
|
||||
RefundTime string `json:"refund_time"` // 退款时间
|
||||
IsPromotion int64 `json:"is_promotion"` // 是否推广订单:0-否,1-是
|
||||
}
|
||||
|
||||
// 详情请求
|
||||
AdminGetOrderDetailReq {
|
||||
Id int64 `path:"id"` // 订单ID
|
||||
}
|
||||
|
||||
// 详情响应
|
||||
AdminGetOrderDetailResp {
|
||||
Id int64 `json:"id"` // 订单ID
|
||||
OrderNo string `json:"order_no"` // 商户订单号
|
||||
PlatformOrderId string `json:"platform_order_id"` // 支付订单号
|
||||
ProductName string `json:"product_name"` // 产品名称
|
||||
PaymentPlatform string `json:"payment_platform"` // 支付方式
|
||||
PaymentScene string `json:"payment_scene"` // 支付平台
|
||||
Amount float64 `json:"amount"` // 金额
|
||||
Status string `json:"status"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
PayTime string `json:"pay_time"` // 支付时间
|
||||
RefundTime string `json:"refund_time"` // 退款时间
|
||||
IsPromotion int64 `json:"is_promotion"` // 是否推广订单:0-否,1-是
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
// 创建请求
|
||||
AdminCreateOrderReq {
|
||||
OrderNo string `json:"order_no"` // 商户订单号
|
||||
PlatformOrderId string `json:"platform_order_id"` // 支付订单号
|
||||
ProductName string `json:"product_name"` // 产品名称
|
||||
PaymentPlatform string `json:"payment_platform"` // 支付方式
|
||||
PaymentScene string `json:"payment_scene"` // 支付平台
|
||||
Amount float64 `json:"amount"` // 金额
|
||||
Status string `json:"status,default=pending"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败
|
||||
IsPromotion int64 `json:"is_promotion,default=0"` // 是否推广订单:0-否,1-是
|
||||
}
|
||||
|
||||
// 创建响应
|
||||
AdminCreateOrderResp {
|
||||
Id int64 `json:"id"` // 订单ID
|
||||
}
|
||||
|
||||
// 更新请求
|
||||
AdminUpdateOrderReq {
|
||||
Id int64 `path:"id"` // 订单ID
|
||||
OrderNo *string `json:"order_no,optional"` // 商户订单号
|
||||
PlatformOrderId *string `json:"platform_order_id,optional"` // 支付订单号
|
||||
ProductName *string `json:"product_name,optional"` // 产品名称
|
||||
PaymentPlatform *string `json:"payment_platform,optional"` // 支付方式
|
||||
PaymentScene *string `json:"payment_scene,optional"` // 支付平台
|
||||
Amount *float64 `json:"amount,optional"` // 金额
|
||||
Status *string `json:"status,optional"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败
|
||||
PayTime *string `json:"pay_time,optional"` // 支付时间
|
||||
RefundTime *string `json:"refund_time,optional"` // 退款时间
|
||||
IsPromotion *int64 `json:"is_promotion,optional"` // 是否推广订单:0-否,1-是
|
||||
}
|
||||
|
||||
// 更新响应
|
||||
AdminUpdateOrderResp {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
// 删除请求
|
||||
AdminDeleteOrderReq {
|
||||
Id int64 `path:"id"` // 订单ID
|
||||
}
|
||||
|
||||
// 删除响应
|
||||
AdminDeleteOrderResp {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
// 退款请求
|
||||
AdminRefundOrderReq {
|
||||
Id int64 `path:"id"` // 订单ID
|
||||
RefundAmount float64 `json:"refund_amount"` // 退款金额
|
||||
RefundReason string `json:"refund_reason"` // 退款原因
|
||||
}
|
||||
|
||||
// 退款响应
|
||||
AdminRefundOrderResp {
|
||||
Status string `json:"status"` // 退款状态
|
||||
RefundNo string `json:"refund_no"` // 退款单号
|
||||
Amount float64 `json:"amount"` // 退款金额
|
||||
}
|
||||
)
|
124
app/main/api/desc/admin/platform_user.api
Normal file
124
app/main/api/desc/admin/platform_user.api
Normal file
@ -0,0 +1,124 @@
|
||||
syntax = "v1"
|
||||
|
||||
info (
|
||||
title: "平台用户管理"
|
||||
desc: "平台用户管理"
|
||||
author: "Liangzai"
|
||||
email: "2440983361@qq.com"
|
||||
version: "v1"
|
||||
)
|
||||
|
||||
// 平台用户管理接口
|
||||
@server(
|
||||
prefix: /api/v1/admin/platform_user
|
||||
group: admin_platform_user
|
||||
jwt: JwtAuth
|
||||
)
|
||||
service main {
|
||||
// 创建平台用户
|
||||
@handler AdminCreatePlatformUser
|
||||
post /create (AdminCreatePlatformUserReq) returns (AdminCreatePlatformUserResp)
|
||||
|
||||
// 更新平台用户
|
||||
@handler AdminUpdatePlatformUser
|
||||
put /update/:id (AdminUpdatePlatformUserReq) returns (AdminUpdatePlatformUserResp)
|
||||
|
||||
// 删除平台用户
|
||||
@handler AdminDeletePlatformUser
|
||||
delete /delete/:id (AdminDeletePlatformUserReq) returns (AdminDeletePlatformUserResp)
|
||||
|
||||
// 获取平台用户分页列表
|
||||
@handler AdminGetPlatformUserList
|
||||
get /list (AdminGetPlatformUserListReq) returns (AdminGetPlatformUserListResp)
|
||||
|
||||
// 获取平台用户详情
|
||||
@handler AdminGetPlatformUserDetail
|
||||
get /detail/:id (AdminGetPlatformUserDetailReq) returns (AdminGetPlatformUserDetailResp)
|
||||
}
|
||||
|
||||
type (
|
||||
// 分页列表请求
|
||||
AdminGetPlatformUserListReq {
|
||||
Page int64 `form:"page,default=1"` // 页码
|
||||
PageSize int64 `form:"pageSize,default=20"` // 每页数量
|
||||
Mobile string `form:"mobile,optional"` // 手机号
|
||||
Nickname string `form:"nickname,optional"` // 昵称
|
||||
Inside int64 `form:"inside,optional"` // 是否内部用户 1-是 0-否
|
||||
CreateTimeStart string `form:"create_time_start,optional"` // 创建时间开始
|
||||
CreateTimeEnd string `form:"create_time_end,optional"` // 创建时间结束
|
||||
OrderBy string `form:"order_by,optional"` // 排序字段
|
||||
OrderType string `form:"order_type,optional"` // 排序类型
|
||||
}
|
||||
|
||||
// 分页列表响应
|
||||
AdminGetPlatformUserListResp {
|
||||
Total int64 `json:"total"` // 总数
|
||||
Items []PlatformUserListItem `json:"items"` // 列表
|
||||
}
|
||||
|
||||
// 列表项
|
||||
PlatformUserListItem {
|
||||
Id int64 `json:"id"` // 用户ID
|
||||
Mobile string `json:"mobile"` // 手机号
|
||||
Nickname string `json:"nickname"` // 昵称
|
||||
Info string `json:"info"` // 备注信息
|
||||
Inside int64 `json:"inside"` // 是否内部用户 1-是 0-否
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
// 详情请求
|
||||
AdminGetPlatformUserDetailReq {
|
||||
Id int64 `path:"id"` // 用户ID
|
||||
}
|
||||
|
||||
// 详情响应
|
||||
AdminGetPlatformUserDetailResp {
|
||||
Id int64 `json:"id"` // 用户ID
|
||||
Mobile string `json:"mobile"` // 手机号
|
||||
Nickname string `json:"nickname"` // 昵称
|
||||
Info string `json:"info"` // 备注信息
|
||||
Inside int64 `json:"inside"` // 是否内部用户 1-是 0-否
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
// 创建请求
|
||||
AdminCreatePlatformUserReq {
|
||||
Mobile string `json:"mobile"` // 手机号
|
||||
Password string `json:"password"` // 密码
|
||||
Nickname string `json:"nickname"` // 昵称
|
||||
Info string `json:"info"` // 备注信息
|
||||
Inside int64 `json:"inside"` // 是否内部用户 1-是 0-否
|
||||
}
|
||||
|
||||
// 创建响应
|
||||
AdminCreatePlatformUserResp {
|
||||
Id int64 `json:"id"` // 用户ID
|
||||
}
|
||||
|
||||
// 更新请求
|
||||
AdminUpdatePlatformUserReq {
|
||||
Id int64 `path:"id"` // 用户ID
|
||||
Mobile *string `json:"mobile,optional"` // 手机号
|
||||
Password *string `json:"password,optional"` // 密码
|
||||
Nickname *string `json:"nickname,optional"` // 昵称
|
||||
Info *string `json:"info,optional"` // 备注信息
|
||||
Inside *int64 `json:"inside,optional"` // 是否内部用户 1-是 0-否
|
||||
}
|
||||
|
||||
// 更新响应
|
||||
AdminUpdatePlatformUserResp {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
// 删除请求
|
||||
AdminDeletePlatformUserReq {
|
||||
Id int64 `path:"id"` // 用户ID
|
||||
}
|
||||
|
||||
// 删除响应
|
||||
AdminDeletePlatformUserResp {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
)
|
@ -13,7 +13,12 @@ import "./front/query.api"
|
||||
import "./front/pay.api"
|
||||
import "./front/product.api"
|
||||
import "./admin/auth.api"
|
||||
import "./admin/user.api"
|
||||
import "./admin/menu.api"
|
||||
import "./admin/role.api"
|
||||
import "./admin/promotion.api"
|
||||
import "./admin/order.api"
|
||||
import "./admin/admin_user.api"
|
||||
import "./admin/platform_user.api"
|
||||
import "./admin/notification.api"
|
||||
import "./admin/admin_product.api"
|
||||
import "./admin/admin_feature.api"
|
||||
|
@ -32,6 +32,7 @@ TianjuConfig:
|
||||
ApiKey: "479bcac2a77b56e976d044ff2bd996f4"
|
||||
BaseURL: "https://apis.tianapi.com"
|
||||
Alipay:
|
||||
Enabled: true
|
||||
AppID: "2021004161631930"
|
||||
PrivateKey: "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCOh6r6Ce7ZgMf5mWqVsU8sYNdU0HRlZbgYUQ2wF65PzWU3vL52+LG89ATbtHeKUy6esuuaAyYhuDrqU9f6mUl5QJGsWCF6JqqyberVIMJfdsdOTbgooSSUBxIsMYfoRZPdsZ9dHomDxfi2oGWJdAnaruTxKw7W8EPJwqc9/vopzdxLsT8t/eMzr4jvHIBVHtkMbmgNJ8b05tqJ1FViK3Yt78YBkt3PLdyjLzqRuKlVpmNceBEhzNbg4menGBzpJHTWO4uGk0KzUgY7wCSfyjrA9IPyWnDqlhws+9LwFKgkNpqxmwGgMihLysDRFOD5D1VLfry/yYT22UrwAzXFQYUvAgMBAAECggEAfKGfXXMwG5sjwltnuyvHepvXzz9UeJHgz8qYeIHMl9WYC4wM1IWVDhAm62M8IIWqP3Ve1VapklTBl8PnGSfO+qr+dsC9zU1geBPrg6BYtxdrIkqNnWGDVbl1J5XMLMwih3nZS5j3UHXdjPxmrTH9p+7FHSm0mTiRXizLB0gdwk0E+H+btJKLpCvqqIoEucowzbjY/ch86ASojpQGZiWapbi+03Xke6/wlGCbNzgGmQQo/C6XAbxl2ZKJxS/yp0JxGfO6gPJYx3xkuf+Pwr0U3imN8yDB/xo0LVamoxQggWua+mQXt72J4zD2imIU7TB4JFJV3kUd+45KLOccOsOuCQKBgQDLfsBxU/LiNn+zW6yus+dCu7JzQSN2K57XF+PSXhQTSjIu4K4y8v4WZHdSwkAGQSU3MLq66QD7ELYHGDBakFFj3sX7z2CHshFlu2I/DYP+0LPVRlIblsSDFn6rYBLOPXc3VkuEFcA0PpO3vW6yF7h2d9OpGaiYmpTvXa/6oPLQfQKBgQCzTgxTTrzZjLXCv85fzX3aYu9ceP4N0jaOwveEMvKNClSomUIDfHLn4sUTmAvHBdJz4Xqy/7+v/YpI0ifC0KouX0t6h3+YA6n4hCvpBMlUVACtHUfx+mzjj+KLxEvmm6ZJCmV5DC3yYvaDTANafM3PzyQRs/jw5WPWywezFfooGwKBgQC4Fq9TFkWYHQNDJ0C9PqSL+y7BEwFYireED+maSl9Q4AMr4zfTgX0YlsRXSsEOp2paVivmoJixh3mUS26azwnCFir21LCXsSAJ7w0+yyRIpVa6LoZizO5zRCtNL3lzt6kcl2VzVRXubVnGk4kLdWf7TAVfaYXan6TyMcfcLDPdJQKBgCwtV6YS6T6kh4fjICLEi3SKGbVr7hRTrbOA3+EHeHE9kVw03mnjeKAfZDUOqiAwFAkPDd8aWg0vZ6nHdZpvNO7V9c/LoKlAhdlAH117G2uWgtAkPbyl2bw7kDKle5nm0ZJ/aD7pvExTC6+Pw+fAhijkPVvLPtODgRTD0zLRgF/vAoGBAMdxes5p7u+Eoa41c3Y39dGvY30QiiGPB4oWLTdmyh4VQfC7DU7ihUCRsk5w4i/BuTNNlJauWM2MMX7YeRBt6ncq59vBAU2OeLd6oRsOkE2ZkH7tNDnGxZuOZkiSFnYUQLMBPnVe4JkS7ZvRWSyuIi9SE8TDpTLbH1kfEmIMq4dR"
|
||||
AlipayPublicKey: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAomw6g4rBmCr/QoX3NI3DVLyDpkaUytZ2uFhdfQaegIDAuUfZfgpTCASlAtO82t8ISAbSOSyp9CUpwdGV4EYOiCBbLxMYB6taaHPiIjJ1zNT1EakJzWgU53hz1AVeABB9kdAvMqSvjH6KLoVupmqm4Li8ZwDW9M2ANAmyDfKgiF0Lt4aUUnaZktoCrTWTkpmtfRZCHNACj851IllvN2wyC4OL7dJq5UzOFxmn07Dy/2z4UAhaaSAyRVawpOui5AIYJTXZERLYL3KMyRnMuZoFq3xltzVTzRPM06nRa9RfeVNVwWVtGBIe/r8tcg5wyhI57KUszGNOmUIm/se6G2lnAQIDAQAB"
|
||||
@ -39,6 +40,7 @@ Alipay:
|
||||
NotifyUrl: "https://6m4685017o.goho.co/api/v1/pay/alipay/callback"
|
||||
ReturnURL: "http://localhost:5678/inquire"
|
||||
Wxpay:
|
||||
Enabled: false
|
||||
AppID: "wxba8424db4771cc18"
|
||||
AppSecret: "89646203d7f76eb7aef0d926b9efffaa"
|
||||
MchID: "1682635136"
|
||||
@ -48,6 +50,7 @@ Wxpay:
|
||||
NotifyUrl: "https://6m4685017o.goho.co/api/v1/pay/wechat/callback"
|
||||
RefundNotifyUrl: "https://6m4685017o.goho.co/api/v1/wechat/refund_callback"
|
||||
Applepay:
|
||||
Enabled: false
|
||||
ProductionVerifyURL: "https://api.storekit.itunes.apple.com/inApps/v1/transactions/receipt"
|
||||
SandboxVerifyURL: "https://api.storekit-sandbox.itunes.apple.com/inApps/v1/transactions/receipt"
|
||||
Sandbox: false
|
||||
@ -65,3 +68,22 @@ AdminConfig:
|
||||
RefreshAfter: 302400
|
||||
AdminPromotion:
|
||||
URLDomain: "https://tianyuancha.cn/p"
|
||||
CleanTask:
|
||||
Enabled: true
|
||||
Time: "0 3 * * *"
|
||||
Days: 15
|
||||
Log:
|
||||
ServiceName: "tyc-server"
|
||||
Mode: "console"
|
||||
Level: "info"
|
||||
Encoding: "json"
|
||||
Rotation: "daily"
|
||||
TimeFormat: "2006-01-02T15:04:05.000Z07:00"
|
||||
MaxSize: 3
|
||||
Categories:
|
||||
- "system" # 系统日志
|
||||
- "access" # 访问日志
|
||||
- "error" # 错误日志
|
||||
- "stat" # 统计日志
|
||||
- "business" # 业务日志
|
||||
- "security" # 安全日志
|
||||
|
@ -34,6 +34,7 @@ TianjuConfig:
|
||||
ApiKey: "479bcac2a77b56e976d044ff2bd996f4"
|
||||
BaseURL: "https://apis.tianapi.com"
|
||||
Alipay:
|
||||
Enabled: true
|
||||
AppID: "2021004161631930"
|
||||
PrivateKey: "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCOh6r6Ce7ZgMf5mWqVsU8sYNdU0HRlZbgYUQ2wF65PzWU3vL52+LG89ATbtHeKUy6esuuaAyYhuDrqU9f6mUl5QJGsWCF6JqqyberVIMJfdsdOTbgooSSUBxIsMYfoRZPdsZ9dHomDxfi2oGWJdAnaruTxKw7W8EPJwqc9/vopzdxLsT8t/eMzr4jvHIBVHtkMbmgNJ8b05tqJ1FViK3Yt78YBkt3PLdyjLzqRuKlVpmNceBEhzNbg4menGBzpJHTWO4uGk0KzUgY7wCSfyjrA9IPyWnDqlhws+9LwFKgkNpqxmwGgMihLysDRFOD5D1VLfry/yYT22UrwAzXFQYUvAgMBAAECggEAfKGfXXMwG5sjwltnuyvHepvXzz9UeJHgz8qYeIHMl9WYC4wM1IWVDhAm62M8IIWqP3Ve1VapklTBl8PnGSfO+qr+dsC9zU1geBPrg6BYtxdrIkqNnWGDVbl1J5XMLMwih3nZS5j3UHXdjPxmrTH9p+7FHSm0mTiRXizLB0gdwk0E+H+btJKLpCvqqIoEucowzbjY/ch86ASojpQGZiWapbi+03Xke6/wlGCbNzgGmQQo/C6XAbxl2ZKJxS/yp0JxGfO6gPJYx3xkuf+Pwr0U3imN8yDB/xo0LVamoxQggWua+mQXt72J4zD2imIU7TB4JFJV3kUd+45KLOccOsOuCQKBgQDLfsBxU/LiNn+zW6yus+dCu7JzQSN2K57XF+PSXhQTSjIu4K4y8v4WZHdSwkAGQSU3MLq66QD7ELYHGDBakFFj3sX7z2CHshFlu2I/DYP+0LPVRlIblsSDFn6rYBLOPXc3VkuEFcA0PpO3vW6yF7h2d9OpGaiYmpTvXa/6oPLQfQKBgQCzTgxTTrzZjLXCv85fzX3aYu9ceP4N0jaOwveEMvKNClSomUIDfHLn4sUTmAvHBdJz4Xqy/7+v/YpI0ifC0KouX0t6h3+YA6n4hCvpBMlUVACtHUfx+mzjj+KLxEvmm6ZJCmV5DC3yYvaDTANafM3PzyQRs/jw5WPWywezFfooGwKBgQC4Fq9TFkWYHQNDJ0C9PqSL+y7BEwFYireED+maSl9Q4AMr4zfTgX0YlsRXSsEOp2paVivmoJixh3mUS26azwnCFir21LCXsSAJ7w0+yyRIpVa6LoZizO5zRCtNL3lzt6kcl2VzVRXubVnGk4kLdWf7TAVfaYXan6TyMcfcLDPdJQKBgCwtV6YS6T6kh4fjICLEi3SKGbVr7hRTrbOA3+EHeHE9kVw03mnjeKAfZDUOqiAwFAkPDd8aWg0vZ6nHdZpvNO7V9c/LoKlAhdlAH117G2uWgtAkPbyl2bw7kDKle5nm0ZJ/aD7pvExTC6+Pw+fAhijkPVvLPtODgRTD0zLRgF/vAoGBAMdxes5p7u+Eoa41c3Y39dGvY30QiiGPB4oWLTdmyh4VQfC7DU7ihUCRsk5w4i/BuTNNlJauWM2MMX7YeRBt6ncq59vBAU2OeLd6oRsOkE2ZkH7tNDnGxZuOZkiSFnYUQLMBPnVe4JkS7ZvRWSyuIi9SE8TDpTLbH1kfEmIMq4dR"
|
||||
AlipayPublicKey: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAomw6g4rBmCr/QoX3NI3DVLyDpkaUytZ2uFhdfQaegIDAuUfZfgpTCASlAtO82t8ISAbSOSyp9CUpwdGV4EYOiCBbLxMYB6taaHPiIjJ1zNT1EakJzWgU53hz1AVeABB9kdAvMqSvjH6KLoVupmqm4Li8ZwDW9M2ANAmyDfKgiF0Lt4aUUnaZktoCrTWTkpmtfRZCHNACj851IllvN2wyC4OL7dJq5UzOFxmn07Dy/2z4UAhaaSAyRVawpOui5AIYJTXZERLYL3KMyRnMuZoFq3xltzVTzRPM06nRa9RfeVNVwWVtGBIe/r8tcg5wyhI57KUszGNOmUIm/se6G2lnAQIDAQAB"
|
||||
@ -41,6 +42,7 @@ Alipay:
|
||||
NotifyUrl: "https://www.tianyuancha.cn/api/v1/pay/alipay/callback"
|
||||
ReturnURL: "https://www.tianyuancha.cn/report"
|
||||
Wxpay:
|
||||
Enabled: true
|
||||
AppID: "wxba8424db4771cc18"
|
||||
AppSecret: "89646203d7f76eb7aef0d926b9efffaa"
|
||||
MchID: "1682635136"
|
||||
@ -50,9 +52,10 @@ Wxpay:
|
||||
NotifyUrl: "https://www.tianyuancha.cn/api/v1/pay/wechat/callback"
|
||||
RefundNotifyUrl: "https://www.tianyuancha.cn/api/v1/wechat/refund_callback"
|
||||
Applepay:
|
||||
Enabled: false
|
||||
ProductionVerifyURL: "https://api.storekit.itunes.apple.com/inApps/v1/transactions/receipt"
|
||||
SandboxVerifyURL: "https://api.storekit-sandbox.itunes.apple.com/inApps/v1/transactions/receipt"
|
||||
Sandbox: true
|
||||
Sandbox: false
|
||||
BundleID: "com.allinone.check"
|
||||
IssuerID: "bf828d85-5269-4914-9660-c066e09cd6ef"
|
||||
KeyID: "LAY65829DQ"
|
||||
@ -67,3 +70,25 @@ AdminConfig:
|
||||
RefreshAfter: 302400
|
||||
AdminPromotion:
|
||||
URLDomain: "https://tianyuancha.cn/p"
|
||||
CleanTask:
|
||||
Enabled: true
|
||||
Time: "0 3 * * *"
|
||||
Days: 15
|
||||
|
||||
Log:
|
||||
ServiceName: "tyc-server"
|
||||
Mode: "file"
|
||||
Path: "logs"
|
||||
Level: "info"
|
||||
Encoding: "json"
|
||||
Rotation: "daily"
|
||||
TimeFormat: "2006-01-02T15:04:05.000Z07:00"
|
||||
MaxSize: 3
|
||||
Categories:
|
||||
- "system" # 系统日志
|
||||
- "access" # 访问日志
|
||||
- "error" # 错误日志
|
||||
- "stat" # 统计日志
|
||||
- "business" # 业务日志
|
||||
- "security" # 安全日志
|
||||
|
||||
|
@ -22,6 +22,7 @@ type Config struct {
|
||||
SystemConfig SystemConfig
|
||||
AdminConfig AdminConfig
|
||||
AdminPromotion AdminPromotion
|
||||
CleanTask CleanTask
|
||||
}
|
||||
|
||||
// JwtAuth 用于 JWT 鉴权配置
|
||||
@ -43,6 +44,7 @@ type Encrypt struct {
|
||||
}
|
||||
|
||||
type AlipayConfig struct {
|
||||
Enabled bool
|
||||
AppID string
|
||||
PrivateKey string
|
||||
AlipayPublicKey string
|
||||
@ -51,6 +53,7 @@ type AlipayConfig struct {
|
||||
ReturnURL string
|
||||
}
|
||||
type WxpayConfig struct {
|
||||
Enabled bool
|
||||
AppID string
|
||||
AppSecret string
|
||||
MchID string
|
||||
@ -64,6 +67,7 @@ type AliConfig struct {
|
||||
Code string
|
||||
}
|
||||
type ApplepayConfig struct {
|
||||
Enabled bool
|
||||
ProductionVerifyURL string
|
||||
SandboxVerifyURL string // 沙盒环境的验证 URL
|
||||
Sandbox bool
|
||||
@ -100,3 +104,8 @@ type AdminConfig struct {
|
||||
type AdminPromotion struct {
|
||||
URLDomain string
|
||||
}
|
||||
type CleanTask struct {
|
||||
Enabled bool
|
||||
Time string
|
||||
Days int
|
||||
}
|
||||
|
@ -0,0 +1,29 @@
|
||||
package admin_feature
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_feature"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminCreateFeatureHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminCreateFeatureReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_feature.NewAdminCreateFeatureLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminCreateFeature(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_feature
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_feature"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminDeleteFeatureHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminDeleteFeatureReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_feature.NewAdminDeleteFeatureLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminDeleteFeature(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_feature
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_feature"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminGetFeatureDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminGetFeatureDetailReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_feature.NewAdminGetFeatureDetailLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminGetFeatureDetail(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_feature
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_feature"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminGetFeatureListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminGetFeatureListReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_feature.NewAdminGetFeatureListLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminGetFeatureList(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_feature
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_feature"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminUpdateFeatureHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminUpdateFeatureReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_feature.NewAdminUpdateFeatureLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminUpdateFeature(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_notification
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_notification"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminCreateNotificationHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminCreateNotificationReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_notification.NewAdminCreateNotificationLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminCreateNotification(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_notification
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_notification"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminDeleteNotificationHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminDeleteNotificationReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_notification.NewAdminDeleteNotificationLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminDeleteNotification(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_notification
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_notification"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminGetNotificationDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminGetNotificationDetailReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_notification.NewAdminGetNotificationDetailLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminGetNotificationDetail(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_notification
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_notification"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminGetNotificationListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminGetNotificationListReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_notification.NewAdminGetNotificationListLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminGetNotificationList(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_notification
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_notification"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminUpdateNotificationHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminUpdateNotificationReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_notification.NewAdminUpdateNotificationLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminUpdateNotification(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_order
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_order"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminCreateOrderHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminCreateOrderReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_order.NewAdminCreateOrderLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminCreateOrder(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_order
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_order"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminDeleteOrderHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminDeleteOrderReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_order.NewAdminDeleteOrderLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminDeleteOrder(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_order
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_order"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminGetOrderDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminGetOrderDetailReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_order.NewAdminGetOrderDetailLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminGetOrderDetail(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_order
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_order"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminGetOrderListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminGetOrderListReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_order.NewAdminGetOrderListLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminGetOrderList(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_order
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_order"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminRefundOrderHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminRefundOrderReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_order.NewAdminRefundOrderLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminRefundOrder(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_order
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_order"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminUpdateOrderHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminUpdateOrderReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_order.NewAdminUpdateOrderLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminUpdateOrder(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_platform_user
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_platform_user"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminCreatePlatformUserHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminCreatePlatformUserReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_platform_user.NewAdminCreatePlatformUserLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminCreatePlatformUser(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_platform_user
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_platform_user"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminDeletePlatformUserHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminDeletePlatformUserReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_platform_user.NewAdminDeletePlatformUserLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminDeletePlatformUser(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_platform_user
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_platform_user"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminGetPlatformUserDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminGetPlatformUserDetailReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_platform_user.NewAdminGetPlatformUserDetailLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminGetPlatformUserDetail(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_platform_user
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_platform_user"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminGetPlatformUserListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminGetPlatformUserListReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_platform_user.NewAdminGetPlatformUserListLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminGetPlatformUserList(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_platform_user
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_platform_user"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminUpdatePlatformUserHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminUpdatePlatformUserReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_platform_user.NewAdminUpdatePlatformUserLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminUpdatePlatformUser(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_product
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_product"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminCreateProductHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminCreateProductReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_product.NewAdminCreateProductLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminCreateProduct(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_product
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_product"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminDeleteProductHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminDeleteProductReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_product.NewAdminDeleteProductLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminDeleteProduct(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_product
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_product"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminGetProductDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminGetProductDetailReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_product.NewAdminGetProductDetailLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminGetProductDetail(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_product
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_product"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminGetProductFeatureListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminGetProductFeatureListReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_product.NewAdminGetProductFeatureListLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminGetProductFeatureList(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_product
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_product"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminGetProductListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminGetProductListReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_product.NewAdminGetProductListLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminGetProductList(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_product
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_product"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminUpdateProductFeaturesHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminUpdateProductFeaturesReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_product.NewAdminUpdateProductFeaturesLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminUpdateProductFeatures(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package admin_product
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tyc-server/app/main/api/internal/logic/admin_product"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/result"
|
||||
"tyc-server/pkg/lzkit/validator"
|
||||
)
|
||||
|
||||
func AdminUpdateProductHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.AdminUpdateProductReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
result.ParamErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
if err := validator.Validate(req); err != nil {
|
||||
result.ParamValidateErrorResult(r, w, err)
|
||||
return
|
||||
}
|
||||
l := admin_product.NewAdminUpdateProductLogic(r.Context(), svcCtx)
|
||||
resp, err := l.AdminUpdateProduct(&req)
|
||||
result.HttpResult(r, w, resp, err)
|
||||
}
|
||||
}
|
@ -5,7 +5,12 @@ import (
|
||||
"net/http"
|
||||
|
||||
admin_auth "tyc-server/app/main/api/internal/handler/admin_auth"
|
||||
admin_feature "tyc-server/app/main/api/internal/handler/admin_feature"
|
||||
admin_menu "tyc-server/app/main/api/internal/handler/admin_menu"
|
||||
admin_notification "tyc-server/app/main/api/internal/handler/admin_notification"
|
||||
admin_order "tyc-server/app/main/api/internal/handler/admin_order"
|
||||
admin_platform_user "tyc-server/app/main/api/internal/handler/admin_platform_user"
|
||||
admin_product "tyc-server/app/main/api/internal/handler/admin_product"
|
||||
admin_promotion "tyc-server/app/main/api/internal/handler/admin_promotion"
|
||||
admin_role "tyc-server/app/main/api/internal/handler/admin_role"
|
||||
admin_user "tyc-server/app/main/api/internal/handler/admin_user"
|
||||
@ -33,6 +38,37 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
|
||||
rest.WithPrefix("/api/v1/admin/auth"),
|
||||
)
|
||||
|
||||
server.AddRoutes(
|
||||
[]rest.Route{
|
||||
{
|
||||
Method: http.MethodPost,
|
||||
Path: "/create",
|
||||
Handler: admin_feature.AdminCreateFeatureHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodDelete,
|
||||
Path: "/delete/:id",
|
||||
Handler: admin_feature.AdminDeleteFeatureHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodGet,
|
||||
Path: "/detail/:id",
|
||||
Handler: admin_feature.AdminGetFeatureDetailHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodGet,
|
||||
Path: "/list",
|
||||
Handler: admin_feature.AdminGetFeatureListHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodPut,
|
||||
Path: "/update/:id",
|
||||
Handler: admin_feature.AdminUpdateFeatureHandler(serverCtx),
|
||||
},
|
||||
},
|
||||
rest.WithPrefix("/api/v1/admin/feature"),
|
||||
)
|
||||
|
||||
server.AddRoutes(
|
||||
[]rest.Route{
|
||||
{
|
||||
@ -76,6 +112,153 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
|
||||
rest.WithPrefix("/api/v1/admin/menu"),
|
||||
)
|
||||
|
||||
server.AddRoutes(
|
||||
[]rest.Route{
|
||||
{
|
||||
Method: http.MethodPost,
|
||||
Path: "/create",
|
||||
Handler: admin_notification.AdminCreateNotificationHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodDelete,
|
||||
Path: "/delete/:id",
|
||||
Handler: admin_notification.AdminDeleteNotificationHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodGet,
|
||||
Path: "/detail/:id",
|
||||
Handler: admin_notification.AdminGetNotificationDetailHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodGet,
|
||||
Path: "/list",
|
||||
Handler: admin_notification.AdminGetNotificationListHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodPut,
|
||||
Path: "/update/:id",
|
||||
Handler: admin_notification.AdminUpdateNotificationHandler(serverCtx),
|
||||
},
|
||||
},
|
||||
rest.WithPrefix("/api/v1/admin/notification"),
|
||||
)
|
||||
|
||||
server.AddRoutes(
|
||||
[]rest.Route{
|
||||
{
|
||||
// 创建订单
|
||||
Method: http.MethodPost,
|
||||
Path: "/create",
|
||||
Handler: admin_order.AdminCreateOrderHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
// 删除订单
|
||||
Method: http.MethodDelete,
|
||||
Path: "/delete/:id",
|
||||
Handler: admin_order.AdminDeleteOrderHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
// 获取订单详情
|
||||
Method: http.MethodGet,
|
||||
Path: "/detail/:id",
|
||||
Handler: admin_order.AdminGetOrderDetailHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
// 获取订单列表
|
||||
Method: http.MethodGet,
|
||||
Path: "/list",
|
||||
Handler: admin_order.AdminGetOrderListHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
// 订单退款
|
||||
Method: http.MethodPost,
|
||||
Path: "/refund/:id",
|
||||
Handler: admin_order.AdminRefundOrderHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
// 更新订单
|
||||
Method: http.MethodPut,
|
||||
Path: "/update/:id",
|
||||
Handler: admin_order.AdminUpdateOrderHandler(serverCtx),
|
||||
},
|
||||
},
|
||||
rest.WithJwt(serverCtx.Config.JwtAuth.AccessSecret),
|
||||
rest.WithPrefix("/api/v1/admin/order"),
|
||||
)
|
||||
|
||||
server.AddRoutes(
|
||||
[]rest.Route{
|
||||
{
|
||||
Method: http.MethodPost,
|
||||
Path: "/create",
|
||||
Handler: admin_platform_user.AdminCreatePlatformUserHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodDelete,
|
||||
Path: "/delete/:id",
|
||||
Handler: admin_platform_user.AdminDeletePlatformUserHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodGet,
|
||||
Path: "/detail/:id",
|
||||
Handler: admin_platform_user.AdminGetPlatformUserDetailHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodGet,
|
||||
Path: "/list",
|
||||
Handler: admin_platform_user.AdminGetPlatformUserListHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodPut,
|
||||
Path: "/update/:id",
|
||||
Handler: admin_platform_user.AdminUpdatePlatformUserHandler(serverCtx),
|
||||
},
|
||||
},
|
||||
rest.WithJwt(serverCtx.Config.JwtAuth.AccessSecret),
|
||||
rest.WithPrefix("/api/v1/admin/platform_user"),
|
||||
)
|
||||
|
||||
server.AddRoutes(
|
||||
[]rest.Route{
|
||||
{
|
||||
Method: http.MethodPost,
|
||||
Path: "/create",
|
||||
Handler: admin_product.AdminCreateProductHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodDelete,
|
||||
Path: "/delete/:id",
|
||||
Handler: admin_product.AdminDeleteProductHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodGet,
|
||||
Path: "/detail/:id",
|
||||
Handler: admin_product.AdminGetProductDetailHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodGet,
|
||||
Path: "/feature/list/:product_id",
|
||||
Handler: admin_product.AdminGetProductFeatureListHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodPut,
|
||||
Path: "/feature/update/:product_id",
|
||||
Handler: admin_product.AdminUpdateProductFeaturesHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodGet,
|
||||
Path: "/list",
|
||||
Handler: admin_product.AdminGetProductListHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodPut,
|
||||
Path: "/update/:id",
|
||||
Handler: admin_product.AdminUpdateProductHandler(serverCtx),
|
||||
},
|
||||
},
|
||||
rest.WithPrefix("/api/v1/admin/product"),
|
||||
)
|
||||
|
||||
server.AddRoutes(
|
||||
[]rest.Route{
|
||||
{
|
||||
|
@ -0,0 +1,45 @@
|
||||
package admin_feature
|
||||
|
||||
import (
|
||||
"context"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/app/main/model"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminCreateFeatureLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminCreateFeatureLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminCreateFeatureLogic {
|
||||
return &AdminCreateFeatureLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminCreateFeatureLogic) AdminCreateFeature(req *types.AdminCreateFeatureReq) (resp *types.AdminCreateFeatureResp, err error) {
|
||||
// 1. 数据转换
|
||||
data := &model.Feature{
|
||||
ApiId: req.ApiId,
|
||||
Name: req.Name,
|
||||
}
|
||||
|
||||
// 2. 数据库操作
|
||||
result, err := l.svcCtx.FeatureModel.Insert(l.ctx, nil, data)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"创建功能失败, err: %v, req: %+v", err, req)
|
||||
}
|
||||
|
||||
// 3. 返回结果
|
||||
id, _ := result.LastInsertId()
|
||||
return &types.AdminCreateFeatureResp{Id: id}, nil
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package admin_feature
|
||||
|
||||
import (
|
||||
"context"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminDeleteFeatureLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminDeleteFeatureLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminDeleteFeatureLogic {
|
||||
return &AdminDeleteFeatureLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminDeleteFeatureLogic) AdminDeleteFeature(req *types.AdminDeleteFeatureReq) (resp *types.AdminDeleteFeatureResp, err error) {
|
||||
// 1. 查询记录是否存在
|
||||
record, err := l.svcCtx.FeatureModel.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"查找功能失败, err: %v, id: %d", err, req.Id)
|
||||
}
|
||||
|
||||
// 2. 执行软删除
|
||||
err = l.svcCtx.FeatureModel.DeleteSoft(l.ctx, nil, record)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"删除功能失败, err: %v, id: %d", err, req.Id)
|
||||
}
|
||||
|
||||
// 3. 返回结果
|
||||
return &types.AdminDeleteFeatureResp{Success: true}, nil
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package admin_feature
|
||||
|
||||
import (
|
||||
"context"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminGetFeatureDetailLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminGetFeatureDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetFeatureDetailLogic {
|
||||
return &AdminGetFeatureDetailLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminGetFeatureDetailLogic) AdminGetFeatureDetail(req *types.AdminGetFeatureDetailReq) (resp *types.AdminGetFeatureDetailResp, err error) {
|
||||
// 1. 查询记录
|
||||
record, err := l.svcCtx.FeatureModel.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"查找功能失败, err: %v, id: %d", err, req.Id)
|
||||
}
|
||||
|
||||
// 2. 构建响应
|
||||
resp = &types.AdminGetFeatureDetailResp{
|
||||
Id: record.Id,
|
||||
ApiId: record.ApiId,
|
||||
Name: record.Name,
|
||||
CreateTime: record.CreateTime.Format("2006-01-02 15:04:05"),
|
||||
UpdateTime: record.UpdateTime.Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
package admin_feature
|
||||
|
||||
import (
|
||||
"context"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminGetFeatureListLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminGetFeatureListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetFeatureListLogic {
|
||||
return &AdminGetFeatureListLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminGetFeatureListLogic) AdminGetFeatureList(req *types.AdminGetFeatureListReq) (resp *types.AdminGetFeatureListResp, err error) {
|
||||
// 1. 构建查询条件
|
||||
builder := l.svcCtx.FeatureModel.SelectBuilder()
|
||||
|
||||
// 2. 添加查询条件
|
||||
if req.ApiId != nil && *req.ApiId != "" {
|
||||
builder = builder.Where("api_id LIKE ?", "%"+*req.ApiId+"%")
|
||||
}
|
||||
if req.Name != nil && *req.Name != "" {
|
||||
builder = builder.Where("name LIKE ?", "%"+*req.Name+"%")
|
||||
}
|
||||
|
||||
// 3. 执行分页查询
|
||||
list, total, err := l.svcCtx.FeatureModel.FindPageListByPageWithTotal(
|
||||
l.ctx, builder, req.Page, req.PageSize, "id DESC")
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"查询功能列表失败, err: %v, req: %+v", err, req)
|
||||
}
|
||||
|
||||
// 4. 构建响应列表
|
||||
items := make([]types.FeatureListItem, 0, len(list))
|
||||
for _, item := range list {
|
||||
listItem := types.FeatureListItem{
|
||||
Id: item.Id,
|
||||
ApiId: item.ApiId,
|
||||
Name: item.Name,
|
||||
CreateTime: item.CreateTime.Format("2006-01-02 15:04:05"),
|
||||
UpdateTime: item.UpdateTime.Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
items = append(items, listItem)
|
||||
}
|
||||
|
||||
// 5. 返回结果
|
||||
return &types.AdminGetFeatureListResp{
|
||||
Total: total,
|
||||
Items: items,
|
||||
}, nil
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package admin_feature
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminUpdateFeatureLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminUpdateFeatureLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUpdateFeatureLogic {
|
||||
return &AdminUpdateFeatureLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminUpdateFeatureLogic) AdminUpdateFeature(req *types.AdminUpdateFeatureReq) (resp *types.AdminUpdateFeatureResp, err error) {
|
||||
// todo: add your logic here and delete this line
|
||||
|
||||
return
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package admin_notification
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"time"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/app/main/model"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminCreateNotificationLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminCreateNotificationLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminCreateNotificationLogic {
|
||||
return &AdminCreateNotificationLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminCreateNotificationLogic) AdminCreateNotification(req *types.AdminCreateNotificationReq) (resp *types.AdminCreateNotificationResp, err error) {
|
||||
startDate, _ := time.Parse("2006-01-02", req.StartDate)
|
||||
endDate, _ := time.Parse("2006-01-02", req.EndDate)
|
||||
data := &model.GlobalNotifications{
|
||||
Title: req.Title,
|
||||
Content: req.Content,
|
||||
NotificationPage: req.NotificationPage,
|
||||
StartDate: sql.NullTime{Time: startDate, Valid: req.StartDate != ""},
|
||||
EndDate: sql.NullTime{Time: endDate, Valid: req.EndDate != ""},
|
||||
StartTime: req.StartTime,
|
||||
EndTime: req.EndTime,
|
||||
Status: req.Status,
|
||||
}
|
||||
result, err := l.svcCtx.GlobalNotificationsModel.Insert(l.ctx, nil, data)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "创建通知失败, err: %v, req: %+v", err, req)
|
||||
}
|
||||
id, _ := result.LastInsertId()
|
||||
return &types.AdminCreateNotificationResp{Id: id}, nil
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package admin_notification
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminDeleteNotificationLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminDeleteNotificationLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminDeleteNotificationLogic {
|
||||
return &AdminDeleteNotificationLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminDeleteNotificationLogic) AdminDeleteNotification(req *types.AdminDeleteNotificationReq) (resp *types.AdminDeleteNotificationResp, err error) {
|
||||
notification, err := l.svcCtx.GlobalNotificationsModel.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查找通知失败, err: %v, id: %d", err, req.Id)
|
||||
}
|
||||
err = l.svcCtx.GlobalNotificationsModel.DeleteSoft(l.ctx, nil, notification)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "删除通知失败, err: %v, id: %d", err, req.Id)
|
||||
}
|
||||
return &types.AdminDeleteNotificationResp{Success: true}, nil
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
package admin_notification
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminGetNotificationDetailLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminGetNotificationDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetNotificationDetailLogic {
|
||||
return &AdminGetNotificationDetailLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminGetNotificationDetailLogic) AdminGetNotificationDetail(req *types.AdminGetNotificationDetailReq) (resp *types.AdminGetNotificationDetailResp, err error) {
|
||||
notification, err := l.svcCtx.GlobalNotificationsModel.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查找通知失败, err: %v, id: %d", err, req.Id)
|
||||
}
|
||||
resp = &types.AdminGetNotificationDetailResp{
|
||||
Id: notification.Id,
|
||||
Title: notification.Title,
|
||||
Content: notification.Content,
|
||||
NotificationPage: notification.NotificationPage,
|
||||
StartDate: "",
|
||||
StartTime: notification.StartTime,
|
||||
EndDate: "",
|
||||
EndTime: notification.EndTime,
|
||||
Status: notification.Status,
|
||||
CreateTime: notification.CreateTime.Format("2006-01-02 15:04:05"),
|
||||
UpdateTime: notification.UpdateTime.Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
if notification.StartDate.Valid {
|
||||
resp.StartDate = notification.StartDate.Time.Format("2006-01-02")
|
||||
}
|
||||
if notification.EndDate.Valid {
|
||||
resp.EndDate = notification.EndDate.Time.Format("2006-01-02")
|
||||
}
|
||||
return resp, nil
|
||||
}
|
@ -0,0 +1,83 @@
|
||||
package admin_notification
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"time"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminGetNotificationListLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminGetNotificationListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetNotificationListLogic {
|
||||
return &AdminGetNotificationListLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminGetNotificationListLogic) AdminGetNotificationList(req *types.AdminGetNotificationListReq) (resp *types.AdminGetNotificationListResp, err error) {
|
||||
builder := l.svcCtx.GlobalNotificationsModel.SelectBuilder()
|
||||
if req.Title != nil {
|
||||
builder = builder.Where("title LIKE ?", "%"+*req.Title+"%")
|
||||
}
|
||||
if req.NotificationPage != nil {
|
||||
builder = builder.Where("notification_page = ?", *req.NotificationPage)
|
||||
}
|
||||
if req.Status != nil {
|
||||
builder = builder.Where("status = ?", *req.Status)
|
||||
}
|
||||
if req.StartDate != nil {
|
||||
if t, err := time.Parse("2006-01-02", *req.StartDate); err == nil {
|
||||
builder = builder.Where("start_date >= ?", t)
|
||||
}
|
||||
}
|
||||
if req.EndDate != nil {
|
||||
if t, err := time.Parse("2006-01-02", *req.EndDate); err == nil {
|
||||
builder = builder.Where("end_date <= ?", t)
|
||||
}
|
||||
}
|
||||
list, total, err := l.svcCtx.GlobalNotificationsModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, "id DESC")
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询通知列表失败, err: %v, req: %+v", err, req)
|
||||
}
|
||||
items := make([]types.NotificationListItem, 0, len(list))
|
||||
for _, n := range list {
|
||||
item := types.NotificationListItem{
|
||||
Id: n.Id,
|
||||
Title: n.Title,
|
||||
NotificationPage: n.NotificationPage,
|
||||
Content: n.Content,
|
||||
StartDate: "",
|
||||
StartTime: n.StartTime,
|
||||
EndDate: "",
|
||||
EndTime: n.EndTime,
|
||||
Status: n.Status,
|
||||
CreateTime: n.CreateTime.Format("2006-01-02 15:04:05"),
|
||||
UpdateTime: n.UpdateTime.Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
if n.StartDate.Valid {
|
||||
item.StartDate = n.StartDate.Time.Format("2006-01-02")
|
||||
}
|
||||
if n.EndDate.Valid {
|
||||
item.EndDate = n.EndDate.Time.Format("2006-01-02")
|
||||
}
|
||||
items = append(items, item)
|
||||
}
|
||||
resp = &types.AdminGetNotificationListResp{
|
||||
Total: total,
|
||||
Items: items,
|
||||
}
|
||||
return resp, nil
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
package admin_notification
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"time"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminUpdateNotificationLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminUpdateNotificationLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUpdateNotificationLogic {
|
||||
return &AdminUpdateNotificationLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminUpdateNotificationLogic) AdminUpdateNotification(req *types.AdminUpdateNotificationReq) (resp *types.AdminUpdateNotificationResp, err error) {
|
||||
notification, err := l.svcCtx.GlobalNotificationsModel.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查找通知失败, err: %v, id: %d", err, req.Id)
|
||||
}
|
||||
if req.StartDate != nil {
|
||||
startDate, _ := time.Parse("2006-01-02", *req.StartDate)
|
||||
notification.StartDate = sql.NullTime{Time: startDate, Valid: true}
|
||||
}
|
||||
if req.EndDate != nil {
|
||||
endDate, _ := time.Parse("2006-01-02", *req.EndDate)
|
||||
notification.EndDate = sql.NullTime{Time: endDate, Valid: true}
|
||||
}
|
||||
if req.Title != nil {
|
||||
notification.Title = *req.Title
|
||||
}
|
||||
if req.Content != nil {
|
||||
notification.Content = *req.Content
|
||||
}
|
||||
if req.NotificationPage != nil {
|
||||
notification.NotificationPage = *req.NotificationPage
|
||||
}
|
||||
if req.StartTime != nil {
|
||||
notification.StartTime = *req.StartTime
|
||||
}
|
||||
if req.EndTime != nil {
|
||||
notification.EndTime = *req.EndTime
|
||||
}
|
||||
if req.Status != nil {
|
||||
notification.Status = *req.Status
|
||||
}
|
||||
_, err = l.svcCtx.GlobalNotificationsModel.Update(l.ctx, nil, notification)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新通知失败, err: %v, req: %+v", err, req)
|
||||
}
|
||||
return &types.AdminUpdateNotificationResp{Success: true}, nil
|
||||
}
|
@ -0,0 +1,99 @@
|
||||
package admin_order
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/app/main/model"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
)
|
||||
|
||||
type AdminCreateOrderLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminCreateOrderLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminCreateOrderLogic {
|
||||
return &AdminCreateOrderLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminCreateOrderLogic) AdminCreateOrder(req *types.AdminCreateOrderReq) (resp *types.AdminCreateOrderResp, err error) {
|
||||
// 生成订单号
|
||||
orderNo := fmt.Sprintf("%dADMIN", time.Now().UnixNano())
|
||||
|
||||
// 根据产品名称查询产品ID
|
||||
builder := l.svcCtx.ProductModel.SelectBuilder()
|
||||
builder = builder.Where("product_name = ? AND del_state = ?", req.ProductName, 0)
|
||||
products, err := l.svcCtx.ProductModel.FindAll(l.ctx, builder, "")
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminCreateOrder, 查询产品失败 err: %v", err)
|
||||
}
|
||||
if len(products) == 0 {
|
||||
return nil, errors.Wrapf(xerr.NewErrMsg(fmt.Sprintf("产品不存在: %s", req.ProductName)), "AdminCreateOrder, 查询产品失败 err: %v", err)
|
||||
}
|
||||
product := products[0]
|
||||
|
||||
// 创建订单对象
|
||||
order := &model.Order{
|
||||
OrderNo: orderNo,
|
||||
PlatformOrderId: sql.NullString{String: req.PlatformOrderId, Valid: req.PlatformOrderId != ""},
|
||||
ProductId: product.Id,
|
||||
PaymentPlatform: req.PaymentPlatform,
|
||||
PaymentScene: req.PaymentScene,
|
||||
Amount: req.Amount,
|
||||
Status: req.Status,
|
||||
}
|
||||
|
||||
// 使用事务处理订单创建
|
||||
var orderId int64
|
||||
err = l.svcCtx.OrderModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error {
|
||||
// 插入订单
|
||||
result, err := l.svcCtx.OrderModel.Insert(ctx, session, order)
|
||||
if err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminCreateOrder, 创建订单失败 err: %v", err)
|
||||
}
|
||||
|
||||
// 获取订单ID
|
||||
orderId, err = result.LastInsertId()
|
||||
if err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminCreateOrder, 获取订单ID失败 err: %v", err)
|
||||
}
|
||||
|
||||
// 如果是推广订单,创建推广订单记录
|
||||
if req.IsPromotion == 1 {
|
||||
promotionOrder := &model.AdminPromotionOrder{
|
||||
OrderId: orderId,
|
||||
Version: 1,
|
||||
CreateTime: time.Now(),
|
||||
UpdateTime: time.Now(),
|
||||
}
|
||||
_, err = l.svcCtx.AdminPromotionOrderModel.Insert(ctx, session, promotionOrder)
|
||||
if err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminCreateOrder, 创建推广订单失败 err: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &types.AdminCreateOrderResp{
|
||||
Id: orderId,
|
||||
}, nil
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
package admin_order
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
)
|
||||
|
||||
type AdminDeleteOrderLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminDeleteOrderLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminDeleteOrderLogic {
|
||||
return &AdminDeleteOrderLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminDeleteOrderLogic) AdminDeleteOrder(req *types.AdminDeleteOrderReq) (resp *types.AdminDeleteOrderResp, err error) {
|
||||
// 获取订单信息
|
||||
order, err := l.svcCtx.OrderModel.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminDeleteOrder, 查询订单失败 err: %v", err)
|
||||
}
|
||||
|
||||
// 使用事务删除订单
|
||||
err = l.svcCtx.OrderModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error {
|
||||
// 软删除订单
|
||||
err := l.svcCtx.OrderModel.DeleteSoft(ctx, session, order)
|
||||
if err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminDeleteOrder, 删除订单失败 err: %v", err)
|
||||
}
|
||||
|
||||
// 删除关联的推广订单记录
|
||||
promotionOrder, err := l.svcCtx.AdminPromotionOrderModel.FindOneByOrderId(ctx, order.Id)
|
||||
if err == nil && promotionOrder != nil {
|
||||
err = l.svcCtx.AdminPromotionOrderModel.DeleteSoft(ctx, session, promotionOrder)
|
||||
if err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminDeleteOrder, 删除推广订单失败 err: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &types.AdminDeleteOrderResp{
|
||||
Success: true,
|
||||
}, nil
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
package admin_order
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminGetOrderDetailLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminGetOrderDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetOrderDetailLogic {
|
||||
return &AdminGetOrderDetailLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminGetOrderDetailLogic) AdminGetOrderDetail(req *types.AdminGetOrderDetailReq) (resp *types.AdminGetOrderDetailResp, err error) {
|
||||
// 获取订单信息
|
||||
order, err := l.svcCtx.OrderModel.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetOrderDetail, 查询订单失败 err: %v", err)
|
||||
}
|
||||
|
||||
// 获取产品信息
|
||||
product, err := l.svcCtx.ProductModel.FindOne(l.ctx, order.ProductId)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetOrderDetail, 查询产品失败 err: %v", err)
|
||||
}
|
||||
|
||||
// 判断是否为推广订单
|
||||
var isPromotion int64
|
||||
promotionOrder, err := l.svcCtx.AdminPromotionOrderModel.FindOneByOrderId(l.ctx, order.Id)
|
||||
if err == nil && promotionOrder != nil {
|
||||
isPromotion = 1
|
||||
}
|
||||
|
||||
// 构建响应
|
||||
resp = &types.AdminGetOrderDetailResp{
|
||||
Id: order.Id,
|
||||
OrderNo: order.OrderNo,
|
||||
PlatformOrderId: order.PlatformOrderId.String,
|
||||
ProductName: product.ProductName,
|
||||
PaymentPlatform: order.PaymentPlatform,
|
||||
PaymentScene: order.PaymentScene,
|
||||
Amount: order.Amount,
|
||||
Status: order.Status,
|
||||
CreateTime: order.CreateTime.Format("2006-01-02 15:04:05"),
|
||||
UpdateTime: order.UpdateTime.Format("2006-01-02 15:04:05"),
|
||||
IsPromotion: isPromotion,
|
||||
}
|
||||
|
||||
// 处理可选字段
|
||||
if order.PayTime.Valid {
|
||||
resp.PayTime = order.PayTime.Time.Format("2006-01-02 15:04:05")
|
||||
}
|
||||
if order.RefundTime.Valid {
|
||||
resp.RefundTime = order.RefundTime.Time.Format("2006-01-02 15:04:05")
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
}
|
@ -0,0 +1,159 @@
|
||||
package admin_order
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/app/main/model"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
"github.com/zeromicro/go-zero/core/mr"
|
||||
)
|
||||
|
||||
type AdminGetOrderListLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminGetOrderListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetOrderListLogic {
|
||||
return &AdminGetOrderListLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminGetOrderListLogic) AdminGetOrderList(req *types.AdminGetOrderListReq) (resp *types.AdminGetOrderListResp, err error) {
|
||||
// 构建查询条件
|
||||
builder := l.svcCtx.OrderModel.SelectBuilder()
|
||||
if req.OrderNo != "" {
|
||||
builder = builder.Where("order_no = ?", req.OrderNo)
|
||||
}
|
||||
if req.PlatformOrderId != "" {
|
||||
builder = builder.Where("platform_order_id = ?", req.PlatformOrderId)
|
||||
}
|
||||
if req.ProductName != "" {
|
||||
builder = builder.Where("product_id IN (SELECT id FROM product WHERE product_name LIKE ?)", "%"+req.ProductName+"%")
|
||||
}
|
||||
if req.PaymentPlatform != "" {
|
||||
builder = builder.Where("payment_platform = ?", req.PaymentPlatform)
|
||||
}
|
||||
if req.PaymentScene != "" {
|
||||
builder = builder.Where("payment_scene = ?", req.PaymentScene)
|
||||
}
|
||||
if req.Amount > 0 {
|
||||
builder = builder.Where("amount = ?", req.Amount)
|
||||
}
|
||||
if req.Status != "" {
|
||||
builder = builder.Where("status = ?", req.Status)
|
||||
}
|
||||
if req.IsPromotion != -1 {
|
||||
builder = builder.Where("id IN (SELECT order_id FROM admin_promotion_order WHERE del_state = 0)")
|
||||
}
|
||||
// 时间范围查询
|
||||
if req.CreateTimeStart != "" {
|
||||
builder = builder.Where("create_time >= ?", req.CreateTimeStart)
|
||||
}
|
||||
if req.CreateTimeEnd != "" {
|
||||
builder = builder.Where("create_time <= ?", req.CreateTimeEnd)
|
||||
}
|
||||
if req.PayTimeStart != "" {
|
||||
builder = builder.Where("pay_time >= ?", req.PayTimeStart)
|
||||
}
|
||||
if req.PayTimeEnd != "" {
|
||||
builder = builder.Where("pay_time <= ?", req.PayTimeEnd)
|
||||
}
|
||||
if req.RefundTimeStart != "" {
|
||||
builder = builder.Where("refund_time >= ?", req.RefundTimeStart)
|
||||
}
|
||||
if req.RefundTimeEnd != "" {
|
||||
builder = builder.Where("refund_time <= ?", req.RefundTimeEnd)
|
||||
}
|
||||
|
||||
// 并发获取总数和列表
|
||||
var total int64
|
||||
var orders []*model.Order
|
||||
err = mr.Finish(func() error {
|
||||
var err error
|
||||
total, err = l.svcCtx.OrderModel.FindCount(l.ctx, builder, "id")
|
||||
if err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetOrderList, 查询订单总数失败 err: %v", err)
|
||||
}
|
||||
return nil
|
||||
}, func() error {
|
||||
var err error
|
||||
orders, err = l.svcCtx.OrderModel.FindPageListByPage(l.ctx, builder, req.Page, req.PageSize, "id DESC")
|
||||
if err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetOrderList, 查询订单列表失败 err: %v", err)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 并发获取产品信息
|
||||
productMap := make(map[int64]string)
|
||||
var mu sync.Mutex
|
||||
err = mr.MapReduceVoid(func(source chan<- interface{}) {
|
||||
for _, order := range orders {
|
||||
source <- order.ProductId
|
||||
}
|
||||
}, func(item interface{}, writer mr.Writer[struct{}], cancel func(error)) {
|
||||
productId := item.(int64)
|
||||
product, err := l.svcCtx.ProductModel.FindOne(l.ctx, productId)
|
||||
if err != nil {
|
||||
cancel(errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetOrderList, 查询产品信息失败 err: %v", err))
|
||||
return
|
||||
}
|
||||
mu.Lock()
|
||||
productMap[product.Id] = product.ProductName
|
||||
mu.Unlock()
|
||||
writer.Write(struct{}{})
|
||||
}, func(pipe <-chan struct{}, cancel func(error)) {
|
||||
for range pipe {
|
||||
}
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 构建响应
|
||||
resp = &types.AdminGetOrderListResp{
|
||||
Total: total,
|
||||
Items: make([]types.OrderListItem, 0, len(orders)),
|
||||
}
|
||||
|
||||
for _, order := range orders {
|
||||
item := types.OrderListItem{
|
||||
Id: order.Id,
|
||||
OrderNo: order.OrderNo,
|
||||
PlatformOrderId: order.PlatformOrderId.String,
|
||||
ProductName: productMap[order.ProductId],
|
||||
PaymentPlatform: order.PaymentPlatform,
|
||||
PaymentScene: order.PaymentScene,
|
||||
Amount: order.Amount,
|
||||
Status: order.Status,
|
||||
CreateTime: order.CreateTime.Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
if order.PayTime.Valid {
|
||||
item.PayTime = order.PayTime.Time.Format("2006-01-02 15:04:05")
|
||||
}
|
||||
if order.RefundTime.Valid {
|
||||
item.RefundTime = order.RefundTime.Time.Format("2006-01-02 15:04:05")
|
||||
}
|
||||
// 判断是否为推广订单
|
||||
promotionOrder, err := l.svcCtx.AdminPromotionOrderModel.FindOneByOrderId(l.ctx, order.Id)
|
||||
if err == nil && promotionOrder != nil {
|
||||
item.IsPromotion = 1
|
||||
}
|
||||
resp.Items = append(resp.Items, item)
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
package admin_order
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"tyc-server/app/main/api/internal/service"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminRefundOrderLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminRefundOrderLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminRefundOrderLogic {
|
||||
return &AdminRefundOrderLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminRefundOrderLogic) AdminRefundOrder(req *types.AdminRefundOrderReq) (resp *types.AdminRefundOrderResp, err error) {
|
||||
// 获取订单信息
|
||||
order, err := l.svcCtx.OrderModel.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminRefundOrder, 查询订单失败 err: %v", err)
|
||||
}
|
||||
|
||||
// 检查订单状态
|
||||
if order.Status != "paid" {
|
||||
return nil, errors.Wrapf(xerr.NewErrMsg("订单状态不正确,无法退款"), "AdminRefundOrder, 订单状态不正确,无法退款 err: %v", err)
|
||||
}
|
||||
|
||||
// 检查退款金额
|
||||
if req.RefundAmount > order.Amount {
|
||||
return nil, errors.Wrapf(xerr.NewErrMsg("退款金额不能大于订单金额"), "AdminRefundOrder, 退款金额不能大于订单金额 err: %v", err)
|
||||
}
|
||||
|
||||
refundResp, err := l.svcCtx.PayService.Refund(l.ctx, &service.RefundRequest{
|
||||
OrderId: order.Id,
|
||||
RefundAmount: req.RefundAmount,
|
||||
Reason: req.RefundReason,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "AdminRefundOrder, 退款失败 err: %v", err)
|
||||
}
|
||||
|
||||
return &types.AdminRefundOrderResp{
|
||||
Status: refundResp.Status,
|
||||
RefundNo: refundResp.RefundNo,
|
||||
Amount: refundResp.Amount,
|
||||
}, nil
|
||||
}
|
113
app/main/api/internal/logic/admin_order/adminupdateorderlogic.go
Normal file
113
app/main/api/internal/logic/admin_order/adminupdateorderlogic.go
Normal file
@ -0,0 +1,113 @@
|
||||
package admin_order
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"time"
|
||||
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/app/main/model"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
)
|
||||
|
||||
type AdminUpdateOrderLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminUpdateOrderLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUpdateOrderLogic {
|
||||
return &AdminUpdateOrderLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminUpdateOrderLogic) AdminUpdateOrder(req *types.AdminUpdateOrderReq) (resp *types.AdminUpdateOrderResp, err error) {
|
||||
// 获取原订单信息
|
||||
order, err := l.svcCtx.OrderModel.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminUpdateOrder, 查询订单失败 err: %v", err)
|
||||
}
|
||||
|
||||
// 更新订单字段
|
||||
if req.OrderNo != nil {
|
||||
order.OrderNo = *req.OrderNo
|
||||
}
|
||||
if req.PlatformOrderId != nil {
|
||||
order.PlatformOrderId = sql.NullString{String: *req.PlatformOrderId, Valid: true}
|
||||
}
|
||||
if req.PaymentPlatform != nil {
|
||||
order.PaymentPlatform = *req.PaymentPlatform
|
||||
}
|
||||
if req.PaymentScene != nil {
|
||||
order.PaymentScene = *req.PaymentScene
|
||||
}
|
||||
if req.Amount != nil {
|
||||
order.Amount = *req.Amount
|
||||
}
|
||||
if req.Status != nil {
|
||||
order.Status = *req.Status
|
||||
}
|
||||
if req.PayTime != nil {
|
||||
payTime, err := time.Parse("2006-01-02 15:04:05", *req.PayTime)
|
||||
if err == nil {
|
||||
order.PayTime = sql.NullTime{Time: payTime, Valid: true}
|
||||
}
|
||||
}
|
||||
if req.RefundTime != nil {
|
||||
refundTime, err := time.Parse("2006-01-02 15:04:05", *req.RefundTime)
|
||||
if err == nil {
|
||||
order.RefundTime = sql.NullTime{Time: refundTime, Valid: true}
|
||||
}
|
||||
}
|
||||
|
||||
// 使用事务更新订单
|
||||
err = l.svcCtx.OrderModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error {
|
||||
// 更新订单
|
||||
_, err := l.svcCtx.OrderModel.Update(ctx, session, order)
|
||||
if err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminUpdateOrder, 更新订单失败 err: %v", err)
|
||||
}
|
||||
|
||||
// 处理推广订单状态
|
||||
if req.IsPromotion != nil {
|
||||
promotionOrder, err := l.svcCtx.AdminPromotionOrderModel.FindOneByOrderId(ctx, order.Id)
|
||||
if err == nil && promotionOrder != nil {
|
||||
// 如果存在推广订单记录但不需要推广,则删除
|
||||
if *req.IsPromotion == 0 {
|
||||
err = l.svcCtx.AdminPromotionOrderModel.DeleteSoft(ctx, session, promotionOrder)
|
||||
if err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminUpdateOrder, 删除推广订单失败 err: %v", err)
|
||||
}
|
||||
}
|
||||
} else if *req.IsPromotion == 1 {
|
||||
// 如果需要推广但不存在记录,则创建
|
||||
newPromotionOrder := &model.AdminPromotionOrder{
|
||||
OrderId: order.Id,
|
||||
Version: 1,
|
||||
}
|
||||
_, err = l.svcCtx.AdminPromotionOrderModel.Insert(ctx, session, newPromotionOrder)
|
||||
if err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminUpdateOrder, 创建推广订单失败 err: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &types.AdminUpdateOrderResp{
|
||||
Success: true,
|
||||
}, nil
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package admin_platform_user
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/app/main/model"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminCreatePlatformUserLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminCreatePlatformUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminCreatePlatformUserLogic {
|
||||
return &AdminCreatePlatformUserLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminCreatePlatformUserLogic) AdminCreatePlatformUser(req *types.AdminCreatePlatformUserReq) (resp *types.AdminCreatePlatformUserResp, err error) {
|
||||
// 校验手机号唯一性
|
||||
_, err = l.svcCtx.UserModel.FindOneByMobile(l.ctx, req.Mobile)
|
||||
if err == nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "手机号已存在: %s", req.Mobile)
|
||||
}
|
||||
if err != model.ErrNotFound {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询手机号失败: %v", err)
|
||||
}
|
||||
|
||||
user := &model.User{
|
||||
Mobile: req.Mobile,
|
||||
Password: sql.NullString{String: req.Password, Valid: req.Password != ""},
|
||||
Nickname: sql.NullString{String: req.Nickname, Valid: req.Nickname != ""},
|
||||
Info: req.Info,
|
||||
Inside: req.Inside,
|
||||
}
|
||||
result, err := l.svcCtx.UserModel.Insert(l.ctx, nil, user)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "创建用户失败: %v", err)
|
||||
}
|
||||
id, err := result.LastInsertId()
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "获取用户ID失败: %v", err)
|
||||
}
|
||||
resp = &types.AdminCreatePlatformUserResp{Id: id}
|
||||
return resp, nil
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package admin_platform_user
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
|
||||
"time"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminDeletePlatformUserLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminDeletePlatformUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminDeletePlatformUserLogic {
|
||||
return &AdminDeletePlatformUserLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminDeletePlatformUserLogic) AdminDeletePlatformUser(req *types.AdminDeletePlatformUserReq) (resp *types.AdminDeletePlatformUserResp, err error) {
|
||||
user, err := l.svcCtx.UserModel.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "用户不存在: %d, err: %v", req.Id, err)
|
||||
}
|
||||
user.DelState = 1
|
||||
user.DeleteTime.Time = time.Now()
|
||||
user.DeleteTime.Valid = true
|
||||
err = l.svcCtx.UserModel.DeleteSoft(l.ctx, nil, user)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "软删除用户失败: %v", err)
|
||||
}
|
||||
resp = &types.AdminDeletePlatformUserResp{Success: true}
|
||||
return resp, nil
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
package admin_platform_user
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/pkg/lzkit/crypto"
|
||||
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminGetPlatformUserDetailLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminGetPlatformUserDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetPlatformUserDetailLogic {
|
||||
return &AdminGetPlatformUserDetailLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminGetPlatformUserDetailLogic) AdminGetPlatformUserDetail(req *types.AdminGetPlatformUserDetailReq) (resp *types.AdminGetPlatformUserDetailResp, err error) {
|
||||
user, err := l.svcCtx.UserModel.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "用户不存在: %d, err: %v", req.Id, err)
|
||||
}
|
||||
key := l.svcCtx.Config.Encrypt.SecretKey
|
||||
DecryptMobile, err := crypto.DecryptMobile(user.Mobile, key)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "解密手机号失败: %v", err)
|
||||
}
|
||||
// 查询平台类型(取第一个user_auth)
|
||||
resp = &types.AdminGetPlatformUserDetailResp{
|
||||
Id: user.Id,
|
||||
Mobile: DecryptMobile,
|
||||
Nickname: "",
|
||||
Info: user.Info,
|
||||
Inside: user.Inside,
|
||||
CreateTime: user.CreateTime.Format("2006-01-02 15:04:05"),
|
||||
UpdateTime: user.UpdateTime.Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
if user.Nickname.Valid {
|
||||
resp.Nickname = user.Nickname.String
|
||||
}
|
||||
return resp, nil
|
||||
}
|
@ -0,0 +1,88 @@
|
||||
package admin_platform_user
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/pkg/lzkit/crypto"
|
||||
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminGetPlatformUserListLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminGetPlatformUserListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetPlatformUserListLogic {
|
||||
return &AdminGetPlatformUserListLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminGetPlatformUserListLogic) AdminGetPlatformUserList(req *types.AdminGetPlatformUserListReq) (resp *types.AdminGetPlatformUserListResp, err error) {
|
||||
builder := l.svcCtx.UserModel.SelectBuilder()
|
||||
if req.Mobile != "" {
|
||||
builder = builder.Where("mobile = ?", req.Mobile)
|
||||
}
|
||||
if req.Nickname != "" {
|
||||
builder = builder.Where("nickname = ?", req.Nickname)
|
||||
}
|
||||
if req.Inside != 0 {
|
||||
builder = builder.Where("inside = ?", req.Inside)
|
||||
}
|
||||
if req.CreateTimeStart != "" {
|
||||
builder = builder.Where("create_time >= ?", req.CreateTimeStart)
|
||||
}
|
||||
if req.CreateTimeEnd != "" {
|
||||
builder = builder.Where("create_time <= ?", req.CreateTimeEnd)
|
||||
}
|
||||
|
||||
orderBy := "id DESC"
|
||||
if req.OrderBy != "" && req.OrderType != "" {
|
||||
orderBy = fmt.Sprintf("%s %s", req.OrderBy, req.OrderType)
|
||||
}
|
||||
users, total, err := l.svcCtx.UserModel.FindPageListByPageWithTotal(l.ctx, builder, req.Page, req.PageSize, orderBy)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询用户分页失败: %v", err)
|
||||
}
|
||||
var items []types.PlatformUserListItem
|
||||
secretKey := l.svcCtx.Config.Encrypt.SecretKey
|
||||
|
||||
for _, user := range users {
|
||||
mobile := user.Mobile
|
||||
if mobile != "" {
|
||||
encryptedMobile, err := crypto.DecryptMobile(mobile, secretKey)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "手机登录, 解密手机号失败: %+v", err)
|
||||
}
|
||||
mobile = encryptedMobile
|
||||
}
|
||||
itemData := types.PlatformUserListItem{
|
||||
Id: user.Id,
|
||||
Mobile: mobile,
|
||||
Nickname: "",
|
||||
Info: user.Info,
|
||||
Inside: user.Inside,
|
||||
CreateTime: user.CreateTime.Format("2006-01-02 15:04:05"),
|
||||
UpdateTime: user.UpdateTime.Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
if user.Nickname.Valid {
|
||||
itemData.Nickname = user.Nickname.String
|
||||
}
|
||||
items = append(items, itemData)
|
||||
}
|
||||
resp = &types.AdminGetPlatformUserListResp{
|
||||
Total: total,
|
||||
Items: items,
|
||||
}
|
||||
return resp, nil
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
package admin_platform_user
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/xerr"
|
||||
"tyc-server/pkg/lzkit/crypto"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminUpdatePlatformUserLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminUpdatePlatformUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUpdatePlatformUserLogic {
|
||||
return &AdminUpdatePlatformUserLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminUpdatePlatformUserLogic) AdminUpdatePlatformUser(req *types.AdminUpdatePlatformUserReq) (resp *types.AdminUpdatePlatformUserResp, err error) {
|
||||
user, err := l.svcCtx.UserModel.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "用户不存在: %d, err: %v", req.Id, err)
|
||||
}
|
||||
if req.Mobile != nil {
|
||||
key := l.svcCtx.Config.Encrypt.SecretKey
|
||||
EncryptMobile, err := crypto.EncryptMobile(*req.Mobile, key)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "加密手机号失败: %v", err)
|
||||
}
|
||||
user.Mobile = EncryptMobile
|
||||
}
|
||||
if req.Nickname != nil {
|
||||
user.Nickname = sql.NullString{String: *req.Nickname, Valid: *req.Nickname != ""}
|
||||
}
|
||||
if req.Info != nil {
|
||||
user.Info = *req.Info
|
||||
}
|
||||
if req.Inside != nil {
|
||||
if *req.Inside != 1 && *req.Inside != 0 {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "内部用户状态错误: %d", *req.Inside)
|
||||
}
|
||||
user.Inside = *req.Inside
|
||||
}
|
||||
if req.Password != nil {
|
||||
user.Password = sql.NullString{String: *req.Password, Valid: *req.Password != ""}
|
||||
}
|
||||
_, err = l.svcCtx.UserModel.Update(l.ctx, nil, user)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新用户失败: %v", err)
|
||||
}
|
||||
resp = &types.AdminUpdatePlatformUserResp{Success: true}
|
||||
return resp, nil
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
package admin_product
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/app/main/model"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminCreateProductLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminCreateProductLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminCreateProductLogic {
|
||||
return &AdminCreateProductLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminCreateProductLogic) AdminCreateProduct(req *types.AdminCreateProductReq) (resp *types.AdminCreateProductResp, err error) {
|
||||
// 1. 数据转换
|
||||
data := &model.Product{
|
||||
ProductName: req.ProductName,
|
||||
ProductEn: req.ProductEn,
|
||||
Description: req.Description,
|
||||
Notes: sql.NullString{String: req.Notes, Valid: req.Notes != ""},
|
||||
CostPrice: req.CostPrice,
|
||||
SellPrice: req.SellPrice,
|
||||
}
|
||||
|
||||
// 2. 数据库操作
|
||||
result, err := l.svcCtx.ProductModel.Insert(l.ctx, nil, data)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"创建产品失败, err: %v, req: %+v", err, req)
|
||||
}
|
||||
|
||||
// 3. 返回结果
|
||||
id, _ := result.LastInsertId()
|
||||
return &types.AdminCreateProductResp{Id: id}, nil
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package admin_product
|
||||
|
||||
import (
|
||||
"context"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminDeleteProductLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminDeleteProductLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminDeleteProductLogic {
|
||||
return &AdminDeleteProductLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminDeleteProductLogic) AdminDeleteProduct(req *types.AdminDeleteProductReq) (resp *types.AdminDeleteProductResp, err error) {
|
||||
// 1. 查询记录是否存在
|
||||
record, err := l.svcCtx.ProductModel.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"查找产品失败, err: %v, id: %d", err, req.Id)
|
||||
}
|
||||
|
||||
// 2. 执行软删除
|
||||
err = l.svcCtx.ProductModel.DeleteSoft(l.ctx, nil, record)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"删除产品失败, err: %v, id: %d", err, req.Id)
|
||||
}
|
||||
|
||||
// 3. 返回结果
|
||||
return &types.AdminDeleteProductResp{Success: true}, nil
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package admin_product
|
||||
|
||||
import (
|
||||
"context"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminGetProductDetailLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminGetProductDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetProductDetailLogic {
|
||||
return &AdminGetProductDetailLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminGetProductDetailLogic) AdminGetProductDetail(req *types.AdminGetProductDetailReq) (resp *types.AdminGetProductDetailResp, err error) {
|
||||
// 1. 查询记录
|
||||
record, err := l.svcCtx.ProductModel.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"查找产品失败, err: %v, id: %d", err, req.Id)
|
||||
}
|
||||
|
||||
// 2. 构建响应
|
||||
resp = &types.AdminGetProductDetailResp{
|
||||
Id: record.Id,
|
||||
ProductName: record.ProductName,
|
||||
ProductEn: record.ProductEn,
|
||||
Description: record.Description,
|
||||
Notes: record.Notes.String,
|
||||
CostPrice: record.CostPrice,
|
||||
SellPrice: record.SellPrice,
|
||||
CreateTime: record.CreateTime.Format("2006-01-02 15:04:05"),
|
||||
UpdateTime: record.UpdateTime.Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
}
|
@ -0,0 +1,119 @@
|
||||
package admin_product
|
||||
|
||||
import (
|
||||
"context"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/app/main/model"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
"github.com/zeromicro/go-zero/core/mr"
|
||||
)
|
||||
|
||||
type AdminGetProductFeatureListLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminGetProductFeatureListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetProductFeatureListLogic {
|
||||
return &AdminGetProductFeatureListLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminGetProductFeatureListLogic) AdminGetProductFeatureList(req *types.AdminGetProductFeatureListReq) (resp *[]types.AdminGetProductFeatureListResp, err error) {
|
||||
// 1. 构建查询条件
|
||||
builder := l.svcCtx.ProductFeatureModel.SelectBuilder().
|
||||
Where("product_id = ?", req.ProductId)
|
||||
|
||||
// 2. 执行查询
|
||||
list, err := l.svcCtx.ProductFeatureModel.FindAll(l.ctx, builder, "sort ASC")
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"查询产品功能列表失败, err: %v, product_id: %d", err, req.ProductId)
|
||||
}
|
||||
|
||||
// 3. 获取所有功能ID
|
||||
featureIds := make([]int64, 0, len(list))
|
||||
for _, item := range list {
|
||||
featureIds = append(featureIds, item.FeatureId)
|
||||
}
|
||||
|
||||
// 4. 并发查询功能详情
|
||||
type featureResult struct {
|
||||
feature *model.Feature
|
||||
err error
|
||||
}
|
||||
|
||||
results := make([]featureResult, len(featureIds))
|
||||
err = mr.MapReduceVoid(func(source chan<- interface{}) {
|
||||
for i, id := range featureIds {
|
||||
source <- struct {
|
||||
index int
|
||||
id int64
|
||||
}{i, id}
|
||||
}
|
||||
}, func(item interface{}, writer mr.Writer[featureResult], cancel func(error)) {
|
||||
data := item.(struct {
|
||||
index int
|
||||
id int64
|
||||
})
|
||||
feature, err := l.svcCtx.FeatureModel.FindOne(l.ctx, data.id)
|
||||
writer.Write(featureResult{
|
||||
feature: feature,
|
||||
err: err,
|
||||
})
|
||||
}, func(pipe <-chan featureResult, cancel func(error)) {
|
||||
for result := range pipe {
|
||||
if result.err != nil {
|
||||
l.Logger.Errorf("查询功能详情失败, feature_id: %d, err: %v", result.feature.Id, result.err)
|
||||
continue
|
||||
}
|
||||
results = append(results, result)
|
||||
}
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR),
|
||||
"并发查询功能详情失败, err: %v", err)
|
||||
}
|
||||
|
||||
// 5. 构建功能ID到详情的映射
|
||||
featureMap := make(map[int64]*model.Feature)
|
||||
for _, result := range results {
|
||||
if result.feature != nil {
|
||||
featureMap[result.feature.Id] = result.feature
|
||||
}
|
||||
}
|
||||
|
||||
// 6. 构建响应列表
|
||||
items := make([]types.AdminGetProductFeatureListResp, 0, len(list))
|
||||
for _, item := range list {
|
||||
feature, exists := featureMap[item.FeatureId]
|
||||
if !exists {
|
||||
continue // 跳过不存在的功能
|
||||
}
|
||||
|
||||
listItem := types.AdminGetProductFeatureListResp{
|
||||
Id: item.Id,
|
||||
ProductId: item.ProductId,
|
||||
FeatureId: item.FeatureId,
|
||||
ApiId: feature.ApiId,
|
||||
Name: feature.Name,
|
||||
Sort: item.Sort,
|
||||
Enable: item.Enable,
|
||||
IsImportant: item.IsImportant,
|
||||
CreateTime: item.CreateTime.Format("2006-01-02 15:04:05"),
|
||||
UpdateTime: item.UpdateTime.Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
items = append(items, listItem)
|
||||
}
|
||||
|
||||
// 7. 返回结果
|
||||
return &items, nil
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
package admin_product
|
||||
|
||||
import (
|
||||
"context"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminGetProductListLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminGetProductListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetProductListLogic {
|
||||
return &AdminGetProductListLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminGetProductListLogic) AdminGetProductList(req *types.AdminGetProductListReq) (resp *types.AdminGetProductListResp, err error) {
|
||||
// 1. 构建查询条件
|
||||
builder := l.svcCtx.ProductModel.SelectBuilder()
|
||||
|
||||
// 2. 添加查询条件
|
||||
if req.ProductName != nil && *req.ProductName != "" {
|
||||
builder = builder.Where("product_name LIKE ?", "%"+*req.ProductName+"%")
|
||||
}
|
||||
if req.ProductEn != nil && *req.ProductEn != "" {
|
||||
builder = builder.Where("product_en LIKE ?", "%"+*req.ProductEn+"%")
|
||||
}
|
||||
|
||||
// 3. 执行分页查询
|
||||
list, total, err := l.svcCtx.ProductModel.FindPageListByPageWithTotal(
|
||||
l.ctx, builder, req.Page, req.PageSize, "id DESC")
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"查询产品列表失败, err: %v, req: %+v", err, req)
|
||||
}
|
||||
|
||||
// 4. 构建响应列表
|
||||
items := make([]types.ProductListItem, 0, len(list))
|
||||
for _, item := range list {
|
||||
listItem := types.ProductListItem{
|
||||
Id: item.Id,
|
||||
ProductName: item.ProductName,
|
||||
ProductEn: item.ProductEn,
|
||||
Description: item.Description,
|
||||
Notes: item.Notes.String,
|
||||
CostPrice: item.CostPrice,
|
||||
SellPrice: item.SellPrice,
|
||||
CreateTime: item.CreateTime.Format("2006-01-02 15:04:05"),
|
||||
UpdateTime: item.UpdateTime.Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
items = append(items, listItem)
|
||||
}
|
||||
|
||||
// 5. 返回结果
|
||||
return &types.AdminGetProductListResp{
|
||||
Total: total,
|
||||
Items: items,
|
||||
}, nil
|
||||
}
|
@ -0,0 +1,159 @@
|
||||
package admin_product
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/app/main/model"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
"github.com/zeromicro/go-zero/core/mr"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
)
|
||||
|
||||
type AdminUpdateProductFeaturesLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminUpdateProductFeaturesLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUpdateProductFeaturesLogic {
|
||||
return &AdminUpdateProductFeaturesLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminUpdateProductFeaturesLogic) AdminUpdateProductFeatures(req *types.AdminUpdateProductFeaturesReq) (resp *types.AdminUpdateProductFeaturesResp, err error) {
|
||||
// 1. 查询现有关联
|
||||
builder := l.svcCtx.ProductFeatureModel.SelectBuilder().
|
||||
Where("product_id = ?", req.ProductId)
|
||||
existingList, err := l.svcCtx.ProductFeatureModel.FindAll(l.ctx, builder, "id ASC")
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"查询现有产品功能关联失败, err: %v, product_id: %d", err, req.ProductId)
|
||||
}
|
||||
|
||||
// 2. 构建现有关联的映射
|
||||
existingMap := make(map[int64]*model.ProductFeature)
|
||||
for _, item := range existingList {
|
||||
existingMap[item.FeatureId] = item
|
||||
}
|
||||
|
||||
// 3. 构建新关联的映射
|
||||
newMap := make(map[int64]*types.ProductFeatureItem)
|
||||
for _, item := range req.Features {
|
||||
newMap[item.FeatureId] = &item
|
||||
}
|
||||
|
||||
// 4. 在事务中执行更新操作
|
||||
err = l.svcCtx.ProductFeatureModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error {
|
||||
// 4.1 处理需要删除的关联
|
||||
var mu sync.Mutex
|
||||
var deleteIds []int64
|
||||
err = mr.MapReduceVoid(func(source chan<- interface{}) {
|
||||
for featureId, existing := range existingMap {
|
||||
if _, exists := newMap[featureId]; !exists {
|
||||
source <- existing.Id
|
||||
}
|
||||
}
|
||||
}, func(item interface{}, writer mr.Writer[struct{}], cancel func(error)) {
|
||||
id := item.(int64)
|
||||
mu.Lock()
|
||||
deleteIds = append(deleteIds, id)
|
||||
mu.Unlock()
|
||||
}, func(pipe <-chan struct{}, cancel func(error)) {
|
||||
// 等待所有ID收集完成
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "收集待删除ID失败")
|
||||
}
|
||||
|
||||
// 批量删除
|
||||
if len(deleteIds) > 0 {
|
||||
for _, id := range deleteIds {
|
||||
err = l.svcCtx.ProductFeatureModel.Delete(ctx, session, id)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "删除产品功能关联失败, product_id: %d, id: %d",
|
||||
req.ProductId, id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 4.2 并发处理需要新增或更新的关联
|
||||
var updateErr error
|
||||
err = mr.MapReduceVoid(func(source chan<- interface{}) {
|
||||
for featureId, newItem := range newMap {
|
||||
source <- struct {
|
||||
featureId int64
|
||||
newItem *types.ProductFeatureItem
|
||||
existing *model.ProductFeature
|
||||
}{
|
||||
featureId: featureId,
|
||||
newItem: newItem,
|
||||
existing: existingMap[featureId],
|
||||
}
|
||||
}
|
||||
}, func(item interface{}, writer mr.Writer[struct{}], cancel func(error)) {
|
||||
data := item.(struct {
|
||||
featureId int64
|
||||
newItem *types.ProductFeatureItem
|
||||
existing *model.ProductFeature
|
||||
})
|
||||
|
||||
if data.existing != nil {
|
||||
// 更新现有关联
|
||||
data.existing.Sort = data.newItem.Sort
|
||||
data.existing.Enable = data.newItem.Enable
|
||||
data.existing.IsImportant = data.newItem.IsImportant
|
||||
_, err = l.svcCtx.ProductFeatureModel.Update(ctx, session, data.existing)
|
||||
if err != nil {
|
||||
updateErr = errors.Wrapf(err, "更新产品功能关联失败, product_id: %d, feature_id: %d",
|
||||
req.ProductId, data.featureId)
|
||||
cancel(updateErr)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
// 新增关联
|
||||
newFeature := &model.ProductFeature{
|
||||
ProductId: req.ProductId,
|
||||
FeatureId: data.featureId,
|
||||
Sort: data.newItem.Sort,
|
||||
Enable: data.newItem.Enable,
|
||||
IsImportant: data.newItem.IsImportant,
|
||||
}
|
||||
_, err = l.svcCtx.ProductFeatureModel.Insert(ctx, session, newFeature)
|
||||
if err != nil {
|
||||
updateErr = errors.Wrapf(err, "新增产品功能关联失败, product_id: %d, feature_id: %d",
|
||||
req.ProductId, data.featureId)
|
||||
cancel(updateErr)
|
||||
return
|
||||
}
|
||||
}
|
||||
}, func(pipe <-chan struct{}, cancel func(error)) {
|
||||
// 等待所有更新完成
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "并发更新产品功能关联失败")
|
||||
}
|
||||
if updateErr != nil {
|
||||
return updateErr
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"更新产品功能关联失败, err: %v, req: %+v", err, req)
|
||||
}
|
||||
|
||||
// 5. 返回结果
|
||||
return &types.AdminUpdateProductFeaturesResp{Success: true}, nil
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
package admin_product
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type AdminUpdateProductLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewAdminUpdateProductLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminUpdateProductLogic {
|
||||
return &AdminUpdateProductLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *AdminUpdateProductLogic) AdminUpdateProduct(req *types.AdminUpdateProductReq) (resp *types.AdminUpdateProductResp, err error) {
|
||||
// 1. 查询记录是否存在
|
||||
record, err := l.svcCtx.ProductModel.FindOne(l.ctx, req.Id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"查找产品失败, err: %v, id: %d", err, req.Id)
|
||||
}
|
||||
|
||||
// 2. 更新字段
|
||||
if req.ProductName != nil {
|
||||
record.ProductName = *req.ProductName
|
||||
}
|
||||
if req.ProductEn != nil {
|
||||
record.ProductEn = *req.ProductEn
|
||||
}
|
||||
if req.Description != nil {
|
||||
record.Description = *req.Description
|
||||
}
|
||||
if req.Notes != nil {
|
||||
record.Notes = sql.NullString{String: *req.Notes, Valid: *req.Notes != ""}
|
||||
}
|
||||
if req.CostPrice != nil {
|
||||
record.CostPrice = *req.CostPrice
|
||||
}
|
||||
if req.SellPrice != nil {
|
||||
record.SellPrice = *req.SellPrice
|
||||
}
|
||||
|
||||
// 3. 执行更新操作
|
||||
_, err = l.svcCtx.ProductModel.Update(l.ctx, nil, record)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR),
|
||||
"更新产品失败, err: %v, req: %+v", err, req)
|
||||
}
|
||||
|
||||
// 4. 返回结果
|
||||
return &types.AdminUpdateProductResp{Success: true}, nil
|
||||
}
|
@ -29,7 +29,7 @@ func NewAdminGetUserListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *
|
||||
|
||||
func (l *AdminGetUserListLogic) AdminGetUserList(req *types.AdminGetUserListReq) (resp *types.AdminGetUserListResp, err error) {
|
||||
resp = &types.AdminGetUserListResp{
|
||||
Items: make([]types.UserListItem, 0),
|
||||
Items: make([]types.AdminUserListItem, 0),
|
||||
Total: 0,
|
||||
}
|
||||
|
||||
@ -102,7 +102,7 @@ func (l *AdminGetUserListLogic) AdminGetUserList(req *types.AdminGetUserListReq)
|
||||
wg.Wait()
|
||||
|
||||
// 并发获取每个用户的角色ID
|
||||
var userItems []types.UserListItem
|
||||
var userItems []types.AdminUserListItem
|
||||
var userItemsMutex sync.Mutex
|
||||
|
||||
mr.MapReduceVoid(func(source chan<- interface{}) {
|
||||
@ -128,7 +128,7 @@ func (l *AdminGetUserListLogic) AdminGetUserList(req *types.AdminGetUserListReq)
|
||||
}, func(pipe <-chan []int64, cancel func(error)) {
|
||||
for _, user := range users {
|
||||
roleIds := <-pipe
|
||||
item := types.UserListItem{
|
||||
item := types.AdminUserListItem{
|
||||
Id: user.Id,
|
||||
Username: user.Username,
|
||||
RealName: user.RealName,
|
||||
|
@ -38,7 +38,7 @@ func (l *GetNotificationsLogic) GetNotifications() (resp *types.GetNotifications
|
||||
|
||||
// 构建查询条件
|
||||
builder := l.svcCtx.GlobalNotificationsModel.SelectBuilder().
|
||||
Where("status = ?", "active").
|
||||
Where("status = ?", 1).
|
||||
Where("(start_date IS NULL OR start_date <= ?)", todayEnd). // start_date 是 NULL 或者小于等于今天结束时间
|
||||
Where("(end_date IS NULL OR end_date >= ?)", todayStart) // end_date 是 NULL 或者大于等于今天开始时间
|
||||
|
||||
|
@ -3,8 +3,6 @@ package pay
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"time"
|
||||
"tyc-server/pkg/lzkit/lzUtils"
|
||||
|
||||
"github.com/smartwalle/alipay/v3"
|
||||
|
||||
@ -28,49 +26,11 @@ func NewAlipayCallbackLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Al
|
||||
}
|
||||
|
||||
func (l *AlipayCallbackLogic) AlipayCallback(w http.ResponseWriter, r *http.Request) error {
|
||||
notification, err := l.svcCtx.AlipayService.HandleAliPaymentNotification(r)
|
||||
err := l.svcCtx.PayService.HandlePaymentCallback(l.ctx, "alipay", r)
|
||||
if err != nil {
|
||||
logx.Errorf("支付宝支付回调,%+v", err)
|
||||
return nil
|
||||
}
|
||||
order, findOrderErr := l.svcCtx.OrderModel.FindOneByOrderNo(l.ctx, notification.OutTradeNo)
|
||||
if findOrderErr != nil {
|
||||
logx.Errorf("支付宝支付回调,查找订单失败: %+v", findOrderErr)
|
||||
return nil
|
||||
}
|
||||
if order.Status != "pending" {
|
||||
alipay.ACKNotification(w)
|
||||
return nil
|
||||
}
|
||||
amount := lzUtils.ToAlipayAmount(order.Amount)
|
||||
// 确保订单金额和状态正确,防止重复更新
|
||||
if amount != notification.TotalAmount {
|
||||
logx.Errorf("支付宝支付回调,金额不一致")
|
||||
return nil
|
||||
}
|
||||
if order.Status != "pending" {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
_, _ = w.Write([]byte("success")) // 确保只写入一次响应
|
||||
return nil
|
||||
}
|
||||
switch notification.TradeStatus {
|
||||
case alipay.TradeStatusSuccess:
|
||||
order.Status = "paid"
|
||||
order.PayTime = lzUtils.TimeToNullTime(time.Now())
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
order.PlatformOrderId = lzUtils.StringToNullString(notification.TradeNo)
|
||||
if updateErr := l.svcCtx.OrderModel.UpdateWithVersion(l.ctx, nil, order); updateErr != nil {
|
||||
logx.Errorf("支付宝支付回调,修改订单信息失败: %+v", updateErr)
|
||||
return nil
|
||||
}
|
||||
if order.Status == "paid" {
|
||||
if asyncErr := l.svcCtx.AsynqService.SendQueryTask(order.Id); asyncErr != nil {
|
||||
logx.Errorf("异步任务调度失败: %v", asyncErr)
|
||||
return asyncErr
|
||||
}
|
||||
}
|
||||
alipay.ACKNotification(w)
|
||||
return nil
|
||||
}
|
||||
|
@ -4,15 +4,14 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"tyc-server/app/main/api/internal/service"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/app/main/model"
|
||||
"tyc-server/common/ctxdata"
|
||||
"tyc-server/common/xerr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
)
|
||||
|
||||
type PaymentLogic struct {
|
||||
@ -34,104 +33,45 @@ func (l *PaymentLogic) Payment(req *types.PaymentReq) (resp *types.PaymentResp,
|
||||
if getUidErr != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 获取用户信息失败, %+v", getUidErr)
|
||||
}
|
||||
|
||||
brand, ok := l.ctx.Value("brand").(string)
|
||||
if !ok {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 获取平台失败, %+v", getUidErr)
|
||||
}
|
||||
// 从缓存中获取订单信息
|
||||
outTradeNo := req.Id
|
||||
redisKey := fmt.Sprintf("%d:%s", userID, outTradeNo)
|
||||
cache, cacheErr := l.svcCtx.Redis.GetCtx(l.ctx, redisKey)
|
||||
if cacheErr != nil {
|
||||
return nil, cacheErr
|
||||
}
|
||||
|
||||
var data types.QueryCacheLoad
|
||||
err = json.Unmarshal([]byte(cache), &data)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 解析缓存内容失败, %+v", err)
|
||||
}
|
||||
|
||||
product, err := l.svcCtx.ProductModel.FindOneByProductEn(l.ctx, data.Product)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 查找产品错误: %+v", err)
|
||||
}
|
||||
var prepayData interface{}
|
||||
var amount float64
|
||||
user, err := l.svcCtx.UserModel.FindOne(l.ctx, userID)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "生成订单, 获取用户信息失败: %+v", err)
|
||||
}
|
||||
|
||||
if user.Inside == 1 {
|
||||
amount = 0.01
|
||||
} else {
|
||||
amount = product.SellPrice
|
||||
}
|
||||
|
||||
var createOrderErr error
|
||||
if req.PayMethod == "wechat" {
|
||||
prepayData, createOrderErr = l.svcCtx.WechatPayService.CreateWechatOrder(l.ctx, amount, product.ProductName, outTradeNo)
|
||||
} else if req.PayMethod == "alipay" {
|
||||
prepayData, createOrderErr = l.svcCtx.AlipayService.CreateAlipayOrder(l.ctx, amount, product.ProductName, outTradeNo, brand)
|
||||
} else if req.PayMethod == "appleiap" {
|
||||
prepayData = l.svcCtx.ApplePayService.GetIappayAppID(product.ProductEn)
|
||||
}
|
||||
if createOrderErr != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 创建支付订单失败: %+v", createOrderErr)
|
||||
}
|
||||
var orderID int64
|
||||
transErr := l.svcCtx.OrderModel.Trans(l.ctx, func(ctx context.Context, session sqlx.Session) error {
|
||||
order := model.Order{
|
||||
OrderNo: outTradeNo,
|
||||
UserId: userID,
|
||||
ProductId: product.Id,
|
||||
PaymentPlatform: req.PayMethod,
|
||||
PaymentScene: "tyc",
|
||||
Amount: amount,
|
||||
Status: "pending",
|
||||
}
|
||||
orderInsertResult, insertOrderErr := l.svcCtx.OrderModel.Insert(ctx, session, &order)
|
||||
if insertOrderErr != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 保存订单失败: %+v", insertOrderErr)
|
||||
}
|
||||
insertedOrderID, lastInsertIdErr := orderInsertResult.LastInsertId()
|
||||
if lastInsertIdErr != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 获取保存订单ID失败: %+v", lastInsertIdErr)
|
||||
}
|
||||
orderID = insertedOrderID
|
||||
|
||||
promoteKey, ok := l.ctx.Value("promoteKey").(string)
|
||||
if ok && promoteKey != "" {
|
||||
// TODO: 在这里添加处理 promoteKey 的逻辑
|
||||
url := fmt.Sprintf("%s/%s", l.svcCtx.Config.AdminPromotion.URLDomain, promoteKey)
|
||||
promoteLink, err := l.svcCtx.AdminPromotionLinkModel.FindOneByUrl(l.ctx, url)
|
||||
if err != nil && !errors.Is(err, model.ErrNotFound) {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 查找推广链接失败: %+v", err)
|
||||
}
|
||||
if promoteLink != nil {
|
||||
promoteOrder := &model.AdminPromotionOrder{
|
||||
OrderId: orderID,
|
||||
LinkId: promoteLink.Id,
|
||||
UserId: userID,
|
||||
AdminUserId: promoteLink.AdminUserId,
|
||||
}
|
||||
_, insertPromoteOrderErr := l.svcCtx.AdminPromotionOrderModel.Insert(ctx, session, promoteOrder)
|
||||
if insertPromoteOrderErr != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 保存推广订单失败: %+v", insertPromoteOrderErr)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
if transErr != nil {
|
||||
return nil, transErr
|
||||
}
|
||||
switch v := prepayData.(type) {
|
||||
case string:
|
||||
// 如果 prepayData 是字符串类型,直接返回
|
||||
return &types.PaymentResp{PrepayId: v, OrderID: orderID}, nil
|
||||
var payMethod service.PayMethod
|
||||
switch req.PayMethod {
|
||||
case "alipay":
|
||||
payMethod = service.PayMethodAlipay
|
||||
case "wechat":
|
||||
payMethod = service.PayMethodWechat
|
||||
// case "apple":
|
||||
// payMethod = service.PayMethodApple
|
||||
default:
|
||||
return &types.PaymentResp{PrepayData: prepayData, OrderID: orderID}, nil
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 不支持的支付方式: %+v", req.PayMethod)
|
||||
}
|
||||
|
||||
// 创建支付订单
|
||||
orderReq := &service.CreateOrderRequest{
|
||||
PayMethod: payMethod,
|
||||
ProductEn: data.Product,
|
||||
}
|
||||
|
||||
orderResp, err := l.svcCtx.PayService.CreateOrder(l.ctx, orderReq)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单失败: %+v", err)
|
||||
}
|
||||
|
||||
return &types.PaymentResp{
|
||||
PrepayData: orderResp.PayData,
|
||||
PrepayId: orderResp.OrderNo,
|
||||
OrderID: orderResp.OrderID,
|
||||
}, nil
|
||||
}
|
||||
|
@ -3,9 +3,6 @@ package pay
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"time"
|
||||
"tyc-server/app/main/api/internal/service"
|
||||
"tyc-server/pkg/lzkit/lzUtils"
|
||||
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
|
||||
@ -27,50 +24,11 @@ func NewWechatPayCallbackLogic(ctx context.Context, svcCtx *svc.ServiceContext)
|
||||
}
|
||||
|
||||
func (l *WechatPayCallbackLogic) WechatPayCallback(w http.ResponseWriter, r *http.Request) error {
|
||||
notification, err := l.svcCtx.WechatPayService.HandleWechatPayNotification(l.ctx, r)
|
||||
err := l.svcCtx.PayService.HandlePaymentCallback(l.ctx, "wechat", r)
|
||||
if err != nil {
|
||||
logx.Errorf("微信支付回调,%+v", err)
|
||||
return nil
|
||||
}
|
||||
order, findOrderErr := l.svcCtx.OrderModel.FindOneByOrderNo(l.ctx, *notification.OutTradeNo)
|
||||
if findOrderErr != nil {
|
||||
logx.Errorf("微信支付回调,查找订单信息失败: %+v", findOrderErr)
|
||||
return nil
|
||||
}
|
||||
|
||||
amount := lzUtils.ToWechatAmount(order.Amount)
|
||||
if amount != *notification.Amount.Total {
|
||||
logx.Errorf("微信支付回调,金额不一致")
|
||||
return nil
|
||||
}
|
||||
if order.Status != "pending" {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
_, _ = w.Write([]byte("success")) // 确保只写入一次响应
|
||||
return nil
|
||||
}
|
||||
switch *notification.TradeState {
|
||||
case service.TradeStateSuccess:
|
||||
order.Status = "paid"
|
||||
order.PayTime = lzUtils.TimeToNullTime(time.Now())
|
||||
case service.TradeStateClosed:
|
||||
order.Status = "closed"
|
||||
order.CloseTime = lzUtils.TimeToNullTime(time.Now())
|
||||
case service.TradeStateRevoked:
|
||||
order.Status = "failed"
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
order.PlatformOrderId = lzUtils.StringToNullString(*notification.TransactionId)
|
||||
if updateErr := l.svcCtx.OrderModel.UpdateWithVersion(l.ctx, nil, order); updateErr != nil {
|
||||
logx.Errorf("微信支付回调,更新订单失败%+v", updateErr)
|
||||
return nil
|
||||
}
|
||||
if order.Status == "paid" {
|
||||
if asyncErr := l.svcCtx.AsynqService.SendQueryTask(order.Id); asyncErr != nil {
|
||||
logx.Errorf("异步任务调度失败: %v", asyncErr)
|
||||
return asyncErr
|
||||
}
|
||||
}
|
||||
|
||||
// 响应微信回调成功
|
||||
w.WriteHeader(http.StatusOK)
|
||||
|
@ -5,7 +5,6 @@ import (
|
||||
"net/http"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
|
||||
"github.com/wechatpay-apiv3/wechatpay-go/services/refunddomestic"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
@ -24,32 +23,36 @@ func NewWechatPayRefundCallbackLogic(ctx context.Context, svcCtx *svc.ServiceCon
|
||||
}
|
||||
|
||||
func (l *WechatPayRefundCallbackLogic) WechatPayRefundCallback(w http.ResponseWriter, r *http.Request) error {
|
||||
notification, err := l.svcCtx.WechatPayService.HandleRefundNotification(l.ctx, r)
|
||||
if err != nil {
|
||||
logx.Errorf("微信退款回调,%+v", err)
|
||||
return nil
|
||||
}
|
||||
order, findOrderErr := l.svcCtx.OrderModel.FindOneByOrderNo(l.ctx, *notification.OutTradeNo)
|
||||
if findOrderErr != nil {
|
||||
logx.Errorf("微信退款回调,查找订单信息失败: %+v", findOrderErr)
|
||||
return nil
|
||||
}
|
||||
// notification, err := l.svcCtx.PayService.re(l.ctx, r)
|
||||
// if err != nil {
|
||||
// logx.Errorf("微信退款回调,%+v", err)
|
||||
// return nil
|
||||
// }
|
||||
// order, findOrderErr := l.svcCtx.OrderModel.FindOneByOrderNo(l.ctx, *notification.OutTradeNo)
|
||||
// if findOrderErr != nil {
|
||||
// logx.Errorf("微信退款回调,查找订单信息失败: %+v", findOrderErr)
|
||||
// return nil
|
||||
// }
|
||||
|
||||
switch *notification.Status {
|
||||
case refunddomestic.STATUS_SUCCESS:
|
||||
order.Status = "refunded"
|
||||
case refunddomestic.STATUS_ABNORMAL:
|
||||
// 异常
|
||||
return nil
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
if updateErr := l.svcCtx.OrderModel.UpdateWithVersion(l.ctx, nil, order); updateErr != nil {
|
||||
logx.Errorf("微信退款回调,更新订单失败%+v", updateErr)
|
||||
return nil
|
||||
}
|
||||
// 响应微信回调成功
|
||||
w.WriteHeader(http.StatusOK)
|
||||
_, _ = w.Write([]byte("success")) // 确保只写入一次响应
|
||||
// switch *notification.Status {
|
||||
// case refunddomestic.STATUS_SUCCESS:
|
||||
// order.Status = "refunded"
|
||||
// order.RefundTime = sql.NullTime{
|
||||
// Time: time.Now(),
|
||||
// Valid: true,
|
||||
// }
|
||||
// case refunddomestic.STATUS_ABNORMAL:
|
||||
// // 异常
|
||||
// return nil
|
||||
// default:
|
||||
// return nil
|
||||
// }
|
||||
// if updateErr := l.svcCtx.OrderModel.UpdateWithVersion(l.ctx, nil, order); updateErr != nil {
|
||||
// logx.Errorf("微信退款回调,更新订单失败%+v", updateErr)
|
||||
// return nil
|
||||
// }
|
||||
// // 响应微信回调成功
|
||||
// w.WriteHeader(http.StatusOK)
|
||||
// _, _ = w.Write([]byte("success")) // 确保只写入一次响应
|
||||
return nil
|
||||
}
|
||||
|
@ -2,9 +2,12 @@ package query
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/rand"
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
"tyc-server/app/main/api/internal/service"
|
||||
"tyc-server/common/ctxdata"
|
||||
@ -140,13 +143,13 @@ func (l *QueryServiceLogic) CacheData(params map[string]interface{}, Product str
|
||||
if marshalErr != nil {
|
||||
return "", errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 序列化参数失败: %+v", marshalErr)
|
||||
}
|
||||
outTradeNo := l.svcCtx.AlipayService.GenerateOutTradeNo()
|
||||
redisKey := fmt.Sprintf("%d:%s", userID, outTradeNo)
|
||||
cacheNo := l.GenerateCacheNo()
|
||||
redisKey := fmt.Sprintf("%d:%s", userID, cacheNo)
|
||||
cacheErr := l.svcCtx.Redis.SetexCtx(l.ctx, redisKey, string(jsonData), int(2*time.Hour))
|
||||
if cacheErr != nil {
|
||||
return "", cacheErr
|
||||
}
|
||||
return outTradeNo, nil
|
||||
return cacheNo, nil
|
||||
}
|
||||
|
||||
var productProcessors = map[string]func(*QueryServiceLogic, *types.QueryServiceReq) (*types.QueryServiceResp, error){
|
||||
@ -2067,3 +2070,27 @@ func (l *QueryServiceLogic) ProcessTocPersonEnterpriseProLogic(req *types.QueryS
|
||||
return &types.QueryServiceResp{Id: cacheNo}, nil
|
||||
|
||||
}
|
||||
|
||||
// 全局原子计数器
|
||||
var CacheNoCounter uint32 = 0
|
||||
|
||||
func (l *QueryServiceLogic) GenerateCacheNo() string {
|
||||
// 获取当前时间戳(秒级)
|
||||
timestamp := time.Now().Unix()
|
||||
timeStr := strconv.FormatInt(timestamp, 10)
|
||||
|
||||
// 原子递增计数器
|
||||
counter := atomic.AddUint32(&CacheNoCounter, 1)
|
||||
|
||||
// 生成4字节真随机数
|
||||
randomBytes := make([]byte, 4)
|
||||
_, err := rand.Read(randomBytes)
|
||||
if err != nil {
|
||||
// 如果随机数生成失败,回退到使用时间纳秒数据
|
||||
randomBytes = []byte(strconv.FormatInt(time.Now().UnixNano()%1000000, 16))
|
||||
}
|
||||
randomHex := hex.EncodeToString(randomBytes)
|
||||
|
||||
// 组合所有部分: 前缀 + 时间戳 + 计数器 + 随机数
|
||||
return fmt.Sprintf("query_%s%06x%s", timeStr, counter%0xFFFFFF, randomHex[:6])
|
||||
}
|
||||
|
@ -79,7 +79,7 @@ func (l *MobileCodeLoginLogic) MobileCodeLogin(req *types.MobileCodeLoginReq) (r
|
||||
userAuth := new(model.UserAuth)
|
||||
userAuth.UserId = lastId
|
||||
userAuth.AuthKey = encryptedMobile
|
||||
userAuth.AuthType = model.UserAuthTypeAppMobile
|
||||
userAuth.AuthType = model.UserAuthTypeMobile
|
||||
if _, userAuthInsertErr := l.svcCtx.UserAuthModel.Insert(ctx, session, userAuth); userAuthInsertErr != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "手机注册, 数据库插入用户认证失败, err:%+v", userAuthInsertErr)
|
||||
}
|
||||
|
@ -86,7 +86,7 @@ func (l *RegisterLogic) Register(req *types.RegisterReq) (resp *types.RegisterRe
|
||||
userAuth := new(model.UserAuth)
|
||||
userAuth.UserId = lastId
|
||||
userAuth.AuthKey = encryptedMobile
|
||||
userAuth.AuthType = model.UserAuthTypeAppMobile
|
||||
userAuth.AuthType = model.UserAuthTypeMobile
|
||||
if _, userAuthInsertErr := l.svcCtx.UserAuthModel.Insert(ctx, session, userAuth); userAuthInsertErr != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "手机注册, 数据库插入用户认证失败, err:%+v", userAuthInsertErr)
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ func (l *WxMiniAuthLogic) WxMiniAuth(req *types.WXMiniAuthReq) (resp *types.WXMi
|
||||
}
|
||||
|
||||
// 2. 根据 openid 查找用户
|
||||
userAuth, findErr := l.svcCtx.UserAuthModel.FindOneByAuthTypeAuthKey(l.ctx, model.UserAuthTypeWxMini, weChatResponse.OpenId)
|
||||
userAuth, findErr := l.svcCtx.UserAuthModel.FindOneByAuthTypeAuthKey(l.ctx, model.UserAuthTypeWechatMiniOpenID, weChatResponse.OpenId)
|
||||
if findErr != nil && findErr != model.ErrNotFound {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "微信登录, 读取用户认证信息失败, openid: %s, err: %+v", weChatResponse.OpenId, findErr)
|
||||
}
|
||||
@ -70,7 +70,7 @@ func (l *WxMiniAuthLogic) WxMiniAuth(req *types.WXMiniAuthReq) (resp *types.WXMi
|
||||
newUserAuth := &model.UserAuth{
|
||||
UserId: lastId,
|
||||
AuthKey: weChatResponse.OpenId,
|
||||
AuthType: model.UserAuthTypeWxMini,
|
||||
AuthType: model.UserAuthTypeWechatMiniOpenID,
|
||||
}
|
||||
if _, userAuthInsertErr := l.svcCtx.UserAuthModel.Insert(ctx, session, newUserAuth); userAuthInsertErr != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "微信登录, 数据库插入用户认证信息失败, err:%+v", userAuthInsertErr)
|
||||
|
@ -3,20 +3,21 @@ package queue
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
"tyc-server/app/main/api/internal/config"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
|
||||
"github.com/hibiken/asynq"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
const TASKTIME = "0 3 * * *"
|
||||
|
||||
type CleanQueryDataHandler struct {
|
||||
config *config.Config
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewCleanQueryDataHandler(svcCtx *svc.ServiceContext) *CleanQueryDataHandler {
|
||||
func NewCleanQueryDataHandler(config *config.Config, svcCtx *svc.ServiceContext) *CleanQueryDataHandler {
|
||||
return &CleanQueryDataHandler{
|
||||
config: config,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
@ -25,14 +26,10 @@ func (l *CleanQueryDataHandler) ProcessTask(ctx context.Context, t *asynq.Task)
|
||||
now := time.Now().Format("2006-01-02 15:04:05")
|
||||
logx.Infof("%s - 开始执行查询数据清理任务", now)
|
||||
|
||||
// 计算7天前的时间
|
||||
sevenDaysAgo := time.Now().AddDate(0, 0, -7)
|
||||
// 计算15天前的时间
|
||||
sevenDaysAgo := time.Now().AddDate(0, 0, -l.config.CleanTask.Days)
|
||||
|
||||
// 创建查询条件,排除product_id为4的记录
|
||||
conditions := l.svcCtx.QueryModel.SelectBuilder().Where("product_id != ?", 4)
|
||||
|
||||
// 调用QueryModel删除7天前的数据,排除product_id为4的记录
|
||||
result, err := l.svcCtx.QueryModel.DeleteBefore(ctx, sevenDaysAgo, conditions)
|
||||
result, err := l.svcCtx.QueryModel.DeleteBefore(ctx, sevenDaysAgo)
|
||||
if err != nil {
|
||||
logx.Errorf("%s - 清理查询数据失败: %v", time.Now().Format("2006-01-02 15:04:05"), err)
|
||||
return err
|
||||
|
@ -7,6 +7,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
"tyc-server/app/main/api/internal/service"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
"tyc-server/app/main/model"
|
||||
@ -159,33 +160,29 @@ func (l *PaySuccessNotifyUserHandler) handleError(ctx context.Context, err error
|
||||
return asynq.SkipRetry
|
||||
}
|
||||
|
||||
payRefundRequest := &service.RefundRequest{
|
||||
OrderId: order.Id,
|
||||
RefundAmount: order.Amount,
|
||||
Reason: "查询失败退款",
|
||||
}
|
||||
// 退款
|
||||
if order.PaymentPlatform == "wechat" {
|
||||
refundErr := l.svcCtx.WechatPayService.WeChatRefund(ctx, order.OrderNo, order.Amount, order.Amount)
|
||||
refundResp, refundErr := l.svcCtx.PayService.Refund(ctx, payRefundRequest)
|
||||
if refundErr != nil {
|
||||
logx.Error(refundErr)
|
||||
return asynq.SkipRetry
|
||||
}
|
||||
if refundResp.Status == "success" {
|
||||
// 直接成功
|
||||
} else {
|
||||
return asynq.SkipRetry
|
||||
}
|
||||
} else {
|
||||
refund, refundErr := l.svcCtx.AlipayService.AliRefund(ctx, order.OrderNo, order.Amount)
|
||||
_, refundErr := l.svcCtx.PayService.Refund(ctx, payRefundRequest)
|
||||
if refundErr != nil {
|
||||
logx.Error(refundErr)
|
||||
return asynq.SkipRetry
|
||||
}
|
||||
if refund.IsSuccess() {
|
||||
logx.Errorf("支付宝退款成功, orderID: %d", order.Id)
|
||||
// 更新订单状态为退款
|
||||
order.Status = "refunded"
|
||||
updateOrderErr := l.svcCtx.OrderModel.UpdateWithVersion(ctx, nil, order)
|
||||
if updateOrderErr != nil {
|
||||
logx.Errorf("更新订单状态失败,订单ID: %d, 错误: %v", order.Id, updateOrderErr)
|
||||
return fmt.Errorf("更新订单状态失败: %v", updateOrderErr)
|
||||
}
|
||||
return asynq.SkipRetry
|
||||
} else {
|
||||
logx.Errorf("支付宝退款失败:%v", refundErr)
|
||||
return asynq.SkipRetry
|
||||
}
|
||||
// 直接成功
|
||||
}
|
||||
|
||||
|
@ -3,19 +3,23 @@ package queue
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"tyc-server/app/main/api/internal/config"
|
||||
"tyc-server/app/main/api/internal/svc"
|
||||
"tyc-server/app/main/api/internal/types"
|
||||
|
||||
"github.com/hibiken/asynq"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type CronJob struct {
|
||||
config *config.Config
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewCronJob(ctx context.Context, svcCtx *svc.ServiceContext) *CronJob {
|
||||
func NewCronJob(config *config.Config, ctx context.Context, svcCtx *svc.ServiceContext) *CronJob {
|
||||
return &CronJob{
|
||||
config: config,
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
@ -24,17 +28,21 @@ func NewCronJob(ctx context.Context, svcCtx *svc.ServiceContext) *CronJob {
|
||||
func (l *CronJob) Register() *asynq.ServeMux {
|
||||
redisClientOpt := asynq.RedisClientOpt{Addr: l.svcCtx.Config.CacheRedis[0].Host, Password: l.svcCtx.Config.CacheRedis[0].Pass}
|
||||
scheduler := asynq.NewScheduler(redisClientOpt, nil)
|
||||
task := asynq.NewTask(types.MsgCleanQueryData, nil, nil)
|
||||
_, err := scheduler.Register(TASKTIME, task)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("定时任务注册失败:%v", err))
|
||||
|
||||
// 根据配置决定是否启动清理任务
|
||||
if l.config.CleanTask.Enabled {
|
||||
task := asynq.NewTask(types.MsgCleanQueryData, nil, nil)
|
||||
_, err := scheduler.Register(l.config.CleanTask.Time, task)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("定时任务注册失败:%v", err))
|
||||
}
|
||||
scheduler.Start()
|
||||
logx.Infof("清理数据定时任务已启动")
|
||||
}
|
||||
scheduler.Start()
|
||||
fmt.Println("定时任务启动!!!")
|
||||
|
||||
mux := asynq.NewServeMux()
|
||||
mux.Handle(types.MsgPaySuccessQuery, NewPaySuccessNotifyUserHandler(l.svcCtx))
|
||||
mux.Handle(types.MsgCleanQueryData, NewCleanQueryDataHandler(l.svcCtx))
|
||||
mux.Handle(types.MsgCleanQueryData, NewCleanQueryDataHandler(l.config, l.svcCtx))
|
||||
mux.Handle(types.MsgCarMaintenanceQuery, NewCarMaintenanceQueryHandler(l.svcCtx))
|
||||
|
||||
return mux
|
||||
|
@ -1,196 +0,0 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/rand"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
"tyc-server/app/main/api/internal/config"
|
||||
"tyc-server/pkg/lzkit/lzUtils"
|
||||
|
||||
"github.com/smartwalle/alipay/v3"
|
||||
)
|
||||
|
||||
type AliPayService struct {
|
||||
config config.AlipayConfig
|
||||
AlipayClient *alipay.Client
|
||||
}
|
||||
|
||||
// NewAliPayService 是一个构造函数,用于初始化 AliPayService
|
||||
func NewAliPayService(c config.Config) *AliPayService {
|
||||
client, err := alipay.New(c.Alipay.AppID, c.Alipay.PrivateKey, c.Alipay.IsProduction)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("创建支付宝客户端失败: %v", err))
|
||||
}
|
||||
|
||||
// 加载支付宝公钥
|
||||
err = client.LoadAliPayPublicKey(c.Alipay.AlipayPublicKey)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("加载支付宝公钥失败: %v", err))
|
||||
}
|
||||
return &AliPayService{
|
||||
config: c.Alipay,
|
||||
AlipayClient: client,
|
||||
}
|
||||
}
|
||||
|
||||
func (a *AliPayService) CreateAlipayAppOrder(amount float64, subject string, outTradeNo string) (string, error) {
|
||||
client := a.AlipayClient
|
||||
totalAmount := lzUtils.ToAlipayAmount(amount)
|
||||
// 构造移动支付请求
|
||||
p := alipay.TradeAppPay{
|
||||
Trade: alipay.Trade{
|
||||
Subject: subject,
|
||||
OutTradeNo: outTradeNo,
|
||||
TotalAmount: totalAmount,
|
||||
ProductCode: "QUICK_MSECURITY_PAY", // 移动端支付专用代码
|
||||
NotifyURL: a.config.NotifyUrl, // 异步回调通知地址
|
||||
},
|
||||
}
|
||||
|
||||
// 获取APP支付字符串,这里会签名
|
||||
payStr, err := client.TradeAppPay(p)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("创建支付宝订单失败: %v", err)
|
||||
}
|
||||
|
||||
return payStr, nil
|
||||
}
|
||||
|
||||
// CreateAlipayH5Order 创建支付宝H5支付订单
|
||||
func (a *AliPayService) CreateAlipayH5Order(amount float64, subject string, outTradeNo string, brand string) (string, error) {
|
||||
var returnURL string
|
||||
var notifyURL string
|
||||
if brand == "tyc" {
|
||||
returnURL = "https://www.tianyuancha.cn/report"
|
||||
notifyURL = "https://www.tianyuancha.cn/api/v1/pay/alipay/callback"
|
||||
} else {
|
||||
returnURL = a.config.ReturnURL
|
||||
notifyURL = a.config.NotifyUrl
|
||||
}
|
||||
client := a.AlipayClient
|
||||
totalAmount := lzUtils.ToAlipayAmount(amount)
|
||||
// 构造H5支付请求
|
||||
p := alipay.TradeWapPay{
|
||||
Trade: alipay.Trade{
|
||||
Subject: subject,
|
||||
OutTradeNo: outTradeNo,
|
||||
TotalAmount: totalAmount,
|
||||
ProductCode: "QUICK_WAP_PAY", // H5支付专用产品码
|
||||
NotifyURL: notifyURL, // 异步回调通知地址
|
||||
ReturnURL: returnURL,
|
||||
},
|
||||
}
|
||||
// 获取H5支付请求字符串,这里会签名
|
||||
payUrl, err := client.TradeWapPay(p)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("创建支付宝H5订单失败: %v", err)
|
||||
}
|
||||
|
||||
return payUrl.String(), nil
|
||||
}
|
||||
|
||||
// CreateAlipayOrder 根据平台类型创建支付宝支付订单
|
||||
func (a *AliPayService) CreateAlipayOrder(ctx context.Context, amount float64, subject string, outTradeNo string, brand string) (string, error) {
|
||||
// 根据 ctx 中的 platform 判断平台
|
||||
platform, platformOk := ctx.Value("platform").(string)
|
||||
if !platformOk {
|
||||
return "", fmt.Errorf("无的支付平台: %s", platform)
|
||||
}
|
||||
switch platform {
|
||||
case "app":
|
||||
// 调用App支付的创建方法
|
||||
return a.CreateAlipayAppOrder(amount, subject, outTradeNo)
|
||||
case "h5":
|
||||
// 调用H5支付的创建方法,并传入 returnUrl
|
||||
return a.CreateAlipayH5Order(amount, subject, outTradeNo, brand)
|
||||
default:
|
||||
return "", fmt.Errorf("不支持的支付平台: %s", platform)
|
||||
}
|
||||
}
|
||||
|
||||
// AliRefund 发起支付宝退款
|
||||
func (a *AliPayService) AliRefund(ctx context.Context, outTradeNo string, refundAmount float64) (*alipay.TradeRefundRsp, error) {
|
||||
refund := alipay.TradeRefund{
|
||||
OutTradeNo: outTradeNo,
|
||||
RefundAmount: lzUtils.ToAlipayAmount(refundAmount),
|
||||
OutRequestNo: fmt.Sprintf("%s-refund", outTradeNo),
|
||||
}
|
||||
|
||||
// 发起退款请求
|
||||
refundResp, err := a.AlipayClient.TradeRefund(ctx, refund)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("支付宝退款请求错误:%v", err)
|
||||
}
|
||||
return refundResp, nil
|
||||
}
|
||||
|
||||
// HandleAliPaymentNotification 支付宝支付回调
|
||||
func (a *AliPayService) HandleAliPaymentNotification(r *http.Request) (*alipay.Notification, error) {
|
||||
// 解析表单
|
||||
err := r.ParseForm()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("解析请求表单失败:%v", err)
|
||||
}
|
||||
// 解析并验证通知,DecodeNotification 会自动验证签名
|
||||
notification, err := a.AlipayClient.DecodeNotification(r.Form)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("验证签名失败: %v", err)
|
||||
}
|
||||
return notification, nil
|
||||
}
|
||||
func (a *AliPayService) QueryOrderStatus(ctx context.Context, outTradeNo string) (*alipay.TradeQueryRsp, error) {
|
||||
queryRequest := alipay.TradeQuery{
|
||||
OutTradeNo: outTradeNo,
|
||||
}
|
||||
|
||||
// 发起查询请求
|
||||
resp, err := a.AlipayClient.TradeQuery(ctx, queryRequest)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("查询支付宝订单失败: %v", err)
|
||||
}
|
||||
|
||||
// 返回交易状态
|
||||
if resp.IsSuccess() {
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("查询支付宝订单失败: %v", resp.SubMsg)
|
||||
}
|
||||
|
||||
// 添加全局原子计数器
|
||||
var alipayOrderCounter uint32 = 0
|
||||
|
||||
// GenerateOutTradeNo 生成唯一订单号的函数 - 优化版本
|
||||
func (a *AliPayService) GenerateOutTradeNo() string {
|
||||
|
||||
// 获取当前时间戳(毫秒级)
|
||||
timestamp := time.Now().UnixMilli()
|
||||
timeStr := strconv.FormatInt(timestamp, 10)
|
||||
|
||||
// 原子递增计数器
|
||||
counter := atomic.AddUint32(&alipayOrderCounter, 1)
|
||||
|
||||
// 生成4字节真随机数
|
||||
randomBytes := make([]byte, 4)
|
||||
_, err := rand.Read(randomBytes)
|
||||
if err != nil {
|
||||
// 如果随机数生成失败,回退到使用时间纳秒数据
|
||||
randomBytes = []byte(strconv.FormatInt(time.Now().UnixNano()%1000000, 16))
|
||||
}
|
||||
randomHex := hex.EncodeToString(randomBytes)
|
||||
|
||||
// 组合所有部分: 前缀 + 时间戳 + 计数器 + 随机数
|
||||
orderNo := fmt.Sprintf("%s%06x%s", timeStr[:10], counter%0xFFFFFF, randomHex[:6])
|
||||
|
||||
// 确保长度不超过32字符(大多数支付平台的限制)
|
||||
if len(orderNo) > 32 {
|
||||
orderNo = orderNo[:32]
|
||||
}
|
||||
|
||||
return orderNo
|
||||
}
|
@ -1,169 +0,0 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/ecdsa"
|
||||
"crypto/x509"
|
||||
"encoding/json"
|
||||
"encoding/pem"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
"tyc-server/app/main/api/internal/config"
|
||||
|
||||
"github.com/golang-jwt/jwt/v4"
|
||||
)
|
||||
|
||||
// ApplePayService 是 Apple IAP 支付服务的结构体
|
||||
type ApplePayService struct {
|
||||
config config.ApplepayConfig // 配置项
|
||||
}
|
||||
|
||||
// NewApplePayService 是一个构造函数,用于初始化 ApplePayService
|
||||
func NewApplePayService(c config.Config) *ApplePayService {
|
||||
return &ApplePayService{
|
||||
config: c.Applepay,
|
||||
}
|
||||
}
|
||||
func (a *ApplePayService) GetIappayAppID(productName string) string {
|
||||
return fmt.Sprintf("%s.%s", a.config.BundleID, productName)
|
||||
}
|
||||
|
||||
// VerifyReceipt 验证苹果支付凭证
|
||||
func (a *ApplePayService) VerifyReceipt(ctx context.Context, receipt string) (*AppleVerifyResponse, error) {
|
||||
var reqUrl string
|
||||
if a.config.Sandbox {
|
||||
reqUrl = a.config.SandboxVerifyURL
|
||||
} else {
|
||||
reqUrl = a.config.ProductionVerifyURL
|
||||
}
|
||||
|
||||
// 读取私钥
|
||||
privateKey, err := loadPrivateKey(a.config.LoadPrivateKeyPath)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("加载私钥失败:%v", err)
|
||||
}
|
||||
|
||||
// 生成 JWT
|
||||
token, err := generateJWT(privateKey, a.config.KeyID, a.config.IssuerID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("生成JWT失败:%v", err)
|
||||
}
|
||||
|
||||
// 构造查询参数
|
||||
queryParams := fmt.Sprintf("?receipt-data=%s", receipt)
|
||||
fullUrl := reqUrl + queryParams
|
||||
|
||||
// 构建 HTTP GET 请求
|
||||
req, err := http.NewRequestWithContext(ctx, http.MethodGet, fullUrl, nil)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("创建 HTTP 请求失败:%v", err)
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.Header.Set("Authorization", "Bearer "+token)
|
||||
|
||||
// 发送请求
|
||||
client := &http.Client{Timeout: 10 * time.Second}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("请求苹果验证接口失败:%v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
// 解析响应
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("读取响应体失败:%v", err)
|
||||
}
|
||||
|
||||
var verifyResponse AppleVerifyResponse
|
||||
err = json.Unmarshal(body, &verifyResponse)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("解析响应体失败:%v", err)
|
||||
}
|
||||
|
||||
// 根据实际响应处理逻辑
|
||||
if verifyResponse.Status != 0 {
|
||||
return nil, fmt.Errorf("验证失败,状态码:%d", verifyResponse.Status)
|
||||
}
|
||||
|
||||
return &verifyResponse, nil
|
||||
}
|
||||
|
||||
func loadPrivateKey(path string) (*ecdsa.PrivateKey, error) {
|
||||
data, err := ioutil.ReadFile(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
block, _ := pem.Decode(data)
|
||||
if block == nil || block.Type != "PRIVATE KEY" {
|
||||
return nil, fmt.Errorf("无效的私钥数据")
|
||||
}
|
||||
key, err := x509.ParsePKCS8PrivateKey(block.Bytes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ecdsaKey, ok := key.(*ecdsa.PrivateKey)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("私钥类型错误")
|
||||
}
|
||||
return ecdsaKey, nil
|
||||
}
|
||||
|
||||
func generateJWT(privateKey *ecdsa.PrivateKey, keyID, issuerID string) (string, error) {
|
||||
now := time.Now()
|
||||
claims := jwt.RegisteredClaims{
|
||||
Issuer: issuerID,
|
||||
IssuedAt: jwt.NewNumericDate(now),
|
||||
ExpiresAt: jwt.NewNumericDate(now.Add(1 * time.Hour)),
|
||||
Audience: jwt.ClaimStrings{"appstoreconnect-v1"},
|
||||
}
|
||||
token := jwt.NewWithClaims(jwt.SigningMethodES256, claims)
|
||||
token.Header["kid"] = keyID
|
||||
tokenString, err := token.SignedString(privateKey)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return tokenString, nil
|
||||
}
|
||||
|
||||
// GenerateOutTradeNo 生成唯一订单号
|
||||
func (a *ApplePayService) GenerateOutTradeNo() string {
|
||||
length := 16
|
||||
timestamp := time.Now().UnixNano()
|
||||
timeStr := strconv.FormatInt(timestamp, 10)
|
||||
randomPart := strconv.Itoa(int(timestamp % 1e6))
|
||||
combined := timeStr + randomPart
|
||||
|
||||
if len(combined) >= length {
|
||||
return combined[:length]
|
||||
}
|
||||
|
||||
for len(combined) < length {
|
||||
combined += strconv.Itoa(int(timestamp % 10))
|
||||
}
|
||||
|
||||
return combined
|
||||
}
|
||||
|
||||
// AppleVerifyResponse 定义苹果验证接口的响应结构
|
||||
type AppleVerifyResponse struct {
|
||||
Status int `json:"status"` // 验证状态码:0 表示收据有效
|
||||
Receipt *Receipt `json:"receipt"` // 收据信息
|
||||
}
|
||||
|
||||
// Receipt 定义收据的精简结构
|
||||
type Receipt struct {
|
||||
BundleID string `json:"bundle_id"` // 应用的 Bundle ID
|
||||
InApp []InAppItem `json:"in_app"` // 应用内购买记录
|
||||
}
|
||||
|
||||
// InAppItem 定义单条交易记录
|
||||
type InAppItem struct {
|
||||
ProductID string `json:"product_id"` // 商品 ID
|
||||
TransactionID string `json:"transaction_id"` // 交易 ID
|
||||
PurchaseDate string `json:"purchase_date"` // 购买日期 (ISO 8601)
|
||||
OriginalTransID string `json:"original_transaction_id"` // 原始交易 ID
|
||||
}
|
495
app/main/api/internal/service/payService.go
Normal file
495
app/main/api/internal/service/payService.go
Normal file
@ -0,0 +1,495 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"time"
|
||||
"tyc-server/app/main/api/internal/config"
|
||||
"tyc-server/app/main/model"
|
||||
"tyc-server/common/ctxdata"
|
||||
"tyc-server/pkg/core/payment"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
)
|
||||
|
||||
// PayService 支付服务
|
||||
type PayService struct {
|
||||
config config.Config
|
||||
orderModel model.OrderModel
|
||||
orderRefundModel model.OrderRefundModel
|
||||
productModel model.ProductModel
|
||||
userAuthModel model.UserAuthModel
|
||||
userModel model.UserModel
|
||||
alipayService *payment.AliPayService
|
||||
wechatService *payment.WechatPayService
|
||||
appleService *payment.ApplePayService
|
||||
}
|
||||
|
||||
// NewPayService 创建支付服务
|
||||
func NewPayService(c config.Config, orderModel model.OrderModel, orderRefundModel model.OrderRefundModel, productModel model.ProductModel, userAuthModel model.UserAuthModel) *PayService {
|
||||
ps := &PayService{
|
||||
config: c,
|
||||
orderModel: orderModel,
|
||||
orderRefundModel: orderRefundModel,
|
||||
productModel: productModel,
|
||||
userAuthModel: userAuthModel,
|
||||
}
|
||||
|
||||
// 根据配置选择性初始化支付服务
|
||||
if c.Alipay.Enabled {
|
||||
// 初始化支付宝服务
|
||||
alipayConfig := payment.AlipayConfig{
|
||||
AppID: c.Alipay.AppID,
|
||||
PrivateKey: c.Alipay.PrivateKey,
|
||||
AlipayPublicKey: c.Alipay.AlipayPublicKey,
|
||||
IsProduction: c.Alipay.IsProduction,
|
||||
NotifyURL: c.Alipay.NotifyUrl,
|
||||
ReturnURL: c.Alipay.ReturnURL,
|
||||
}
|
||||
alipayService, err := payment.NewAliPayService(alipayConfig)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("初始化支付宝服务失败: %v", err))
|
||||
}
|
||||
ps.alipayService = alipayService
|
||||
}
|
||||
|
||||
if c.Wxpay.Enabled {
|
||||
// 初始化微信支付服务
|
||||
wechatConfig := &payment.WechatPayConfig{
|
||||
AppID: c.Wxpay.AppID,
|
||||
MchID: c.Wxpay.MchID,
|
||||
SerialNo: c.Wxpay.MchCertificateSerialNumber,
|
||||
MchAPIv3Key: c.Wxpay.MchApiv3Key,
|
||||
PrivateKey: c.Wxpay.MchPrivateKeyPath,
|
||||
NotifyURL: c.Wxpay.NotifyUrl,
|
||||
RefundURL: c.Wxpay.RefundNotifyUrl,
|
||||
}
|
||||
wechatService, err := payment.NewWechatPayService(wechatConfig)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("初始化微信支付服务失败: %v", err))
|
||||
}
|
||||
ps.wechatService = wechatService
|
||||
}
|
||||
|
||||
if c.Applepay.Enabled {
|
||||
// 初始化苹果支付服务
|
||||
appleConfig := payment.ApplePayConfig{
|
||||
BundleID: c.Applepay.BundleID,
|
||||
KeyID: c.Applepay.KeyID,
|
||||
TeamID: c.Applepay.IssuerID,
|
||||
PrivateKey: c.Applepay.LoadPrivateKeyPath,
|
||||
IsProduction: !c.Applepay.Sandbox,
|
||||
NotifyURL: c.Applepay.ProductionVerifyURL,
|
||||
RefundNotifyURL: c.Applepay.SandboxVerifyURL,
|
||||
}
|
||||
appleService, err := payment.NewApplePayService(appleConfig)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("初始化苹果支付服务失败: %v", err))
|
||||
}
|
||||
ps.appleService = appleService
|
||||
}
|
||||
|
||||
return ps
|
||||
}
|
||||
|
||||
// CreateOrder 创建支付订单
|
||||
func (p *PayService) CreateOrder(ctx context.Context, req *CreateOrderRequest) (*CreateOrderResponse, error) {
|
||||
platform, ok := ctx.Value("platform").(string)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("获取平台失败")
|
||||
}
|
||||
userID, err := ctxdata.GetUidFromCtx(ctx)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("获取用户信息失败: %v", err)
|
||||
}
|
||||
product, err := p.productModel.FindOneByProductEn(ctx, req.ProductEn)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("获取商品失败: %v", err)
|
||||
}
|
||||
user, err := p.userModel.FindOne(ctx, userID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("获取用户失败: %v", err)
|
||||
}
|
||||
var outTradeNo string
|
||||
var orderID int64
|
||||
amount := product.SellPrice
|
||||
if user.Inside == 1 {
|
||||
amount = 0.01
|
||||
}
|
||||
// 使用事务创建订单
|
||||
var payData interface{}
|
||||
err = p.orderModel.Trans(ctx, func(ctx context.Context, session sqlx.Session) error {
|
||||
// 根据支付方式创建支付订单
|
||||
switch req.PayMethod {
|
||||
case "alipay":
|
||||
orderReq := &payment.AlipayCreateOrderRequest{
|
||||
Amount: amount,
|
||||
Subject: product.ProductName,
|
||||
Platform: payment.PlatformApp,
|
||||
}
|
||||
resp, err := p.alipayService.CreateOrder(ctx, orderReq)
|
||||
if err != nil {
|
||||
return fmt.Errorf("创建支付宝订单失败: %v", err)
|
||||
}
|
||||
payData = resp.PayParams
|
||||
case "wechat":
|
||||
orderReq := &payment.Order{
|
||||
OutTradeNo: outTradeNo,
|
||||
Subject: product.ProductName,
|
||||
Amount: amount,
|
||||
Platform: payment.PlatformApp,
|
||||
NotifyURL: p.config.Wxpay.NotifyUrl,
|
||||
}
|
||||
|
||||
// 如果是小程序支付,需要获取用户的 OpenID
|
||||
if platform == "mp-weixin" {
|
||||
userAuth, err := p.userAuthModel.FindOneByUserIdAuthType(ctx, userID, model.UserAuthTypeWechatMiniOpenID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("获取用户认证信息失败: %v", err)
|
||||
}
|
||||
|
||||
orderReq.OpenID = userAuth.AuthKey
|
||||
}
|
||||
|
||||
resp, err := p.wechatService.CreateOrder(orderReq)
|
||||
if err != nil {
|
||||
return fmt.Errorf("创建微信支付订单失败: %v", err)
|
||||
}
|
||||
payData = resp.PayParams
|
||||
outTradeNo = resp.OrderNo
|
||||
// case "apple":
|
||||
// orderReq := &payment.AppleCreateOrderRequest{
|
||||
// Amount: amount,
|
||||
// Subject: product.ProductName,
|
||||
// OutTradeNo: outTradeNo,
|
||||
// Platform: payment.PlatformApp,
|
||||
// NotifyURL: p.config.Applepay.ProductionVerifyURL,
|
||||
// }
|
||||
// resp, err := p.appleService.CreateOrder(ctx, orderReq)
|
||||
// if err != nil {
|
||||
// return fmt.Errorf("创建苹果支付订单失败: %v", err)
|
||||
// }
|
||||
// payData = resp.PayParams
|
||||
default:
|
||||
return fmt.Errorf("不支持的支付方式: %s", req.PayMethod)
|
||||
}
|
||||
// 创建订单记录
|
||||
order := &model.Order{
|
||||
OrderNo: outTradeNo,
|
||||
UserId: userID,
|
||||
ProductId: product.Id,
|
||||
PaymentPlatform: string(req.PayMethod),
|
||||
PaymentScene: platform,
|
||||
Amount: amount,
|
||||
Status: model.OrderStatusPending,
|
||||
}
|
||||
result, err := p.orderModel.Insert(ctx, session, order)
|
||||
if err != nil {
|
||||
return fmt.Errorf("创建订单记录失败: %v", err)
|
||||
}
|
||||
orderID, err = result.LastInsertId()
|
||||
if err != nil {
|
||||
return fmt.Errorf("获取订单ID失败: %v", err)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &CreateOrderResponse{
|
||||
OrderNo: outTradeNo,
|
||||
PayData: payData,
|
||||
PayMethod: req.PayMethod,
|
||||
OrderID: orderID,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// HandlePaymentCallback 处理支付回调
|
||||
func (p *PayService) HandlePaymentCallback(ctx context.Context, payType string, req *http.Request) error {
|
||||
return p.orderModel.Trans(ctx, func(ctx context.Context, session sqlx.Session) error {
|
||||
var payOrder *payment.QueryOrderResponse
|
||||
var err error
|
||||
switch payType {
|
||||
case "alipay":
|
||||
payOrder, err = p.handleAlipayCallback(ctx, req, session)
|
||||
case "wechat":
|
||||
payOrder, err = p.handleWechatCallback(ctx, req, session)
|
||||
case "apple":
|
||||
payOrder, err = p.handleAppleCallback(ctx, req, session)
|
||||
default:
|
||||
return fmt.Errorf("不支持的支付类型: %s", payType)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if payOrder == nil {
|
||||
return fmt.Errorf("支付订单信息为空")
|
||||
}
|
||||
|
||||
// 查询订单
|
||||
order, err := p.orderModel.FindOneByOrderNo(ctx, payOrder.OrderNo)
|
||||
if err != nil {
|
||||
return fmt.Errorf("查询订单失败: %v", err)
|
||||
}
|
||||
|
||||
// 验证订单金额
|
||||
if payOrder.Amount != order.Amount {
|
||||
return fmt.Errorf("订单金额不匹配")
|
||||
}
|
||||
|
||||
// 根据支付状态更新订单状态
|
||||
switch payOrder.Status {
|
||||
case payment.StatusSuccess:
|
||||
order.Status = model.OrderStatusPaid
|
||||
case payment.StatusFailed:
|
||||
order.Status = model.OrderStatusFailed
|
||||
case payment.StatusClosed:
|
||||
order.Status = model.OrderStatusClosed
|
||||
case payment.StatusRefunded:
|
||||
order.Status = model.OrderStatusRefunding
|
||||
default:
|
||||
return fmt.Errorf("不支持的支付状态: %s", payOrder.Status)
|
||||
}
|
||||
|
||||
// 更新订单状态
|
||||
order.PlatformOrderId = sql.NullString{String: payOrder.TransactionID, Valid: true}
|
||||
_, err = p.orderModel.Update(ctx, session, order)
|
||||
if err != nil {
|
||||
return fmt.Errorf("更新订单状态失败: %v", err)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
// handleAlipayCallback 处理支付宝回调
|
||||
func (p *PayService) handleAlipayCallback(ctx context.Context, req *http.Request, session sqlx.Session) (*payment.QueryOrderResponse, error) {
|
||||
return p.alipayService.HandlePaymentNotification(req)
|
||||
}
|
||||
|
||||
// handleWechatCallback 处理微信支付回调
|
||||
func (p *PayService) handleWechatCallback(ctx context.Context, req *http.Request, session sqlx.Session) (*payment.QueryOrderResponse, error) {
|
||||
notification, err := p.wechatService.HandlePaymentNotification(req)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("处理微信支付回调失败: %v", err)
|
||||
}
|
||||
|
||||
// 将微信支付通知转换为统一的查询订单响应格式
|
||||
return &payment.QueryOrderResponse{
|
||||
OrderNo: notification.OrderNo,
|
||||
TransactionID: notification.TransactionID,
|
||||
Status: notification.Status,
|
||||
Amount: notification.Amount,
|
||||
PayTime: notification.PayTime,
|
||||
PayMethod: payment.MethodWechat,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// handleAppleCallback 处理苹果支付回调
|
||||
func (p *PayService) handleAppleCallback(ctx context.Context, req *http.Request, session sqlx.Session) (*payment.QueryOrderResponse, error) {
|
||||
receipt := req.FormValue("receipt-data")
|
||||
if receipt == "" {
|
||||
return nil, fmt.Errorf("无效的苹果支付收据")
|
||||
}
|
||||
|
||||
verifyResp, err := p.appleService.VerifyReceipt(ctx, receipt)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("验证苹果支付收据失败: %v", err)
|
||||
}
|
||||
|
||||
if verifyResp.Status != payment.StatusSuccess {
|
||||
return nil, fmt.Errorf("苹果支付验证失败,状态码: %s", verifyResp.Status)
|
||||
}
|
||||
|
||||
// 将苹果支付验证响应转换为统一的查询订单响应格式
|
||||
return &payment.QueryOrderResponse{
|
||||
OrderNo: verifyResp.OrderNo,
|
||||
TransactionID: verifyResp.TransactionID,
|
||||
Status: verifyResp.Status,
|
||||
Amount: verifyResp.Amount,
|
||||
PayTime: time.Now(),
|
||||
PayMethod: payment.MethodApple,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Refund 申请退款
|
||||
func (p *PayService) Refund(ctx context.Context, req *RefundRequest) (*RefundResponse, error) {
|
||||
|
||||
// 查询订单信息
|
||||
order, err := p.orderModel.FindOne(ctx, req.OrderId)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("查询订单失败: %v", err)
|
||||
}
|
||||
|
||||
// 验证订单状态
|
||||
if order.Status != model.OrderStatusPaid {
|
||||
return nil, fmt.Errorf("订单状态为 %s,无法退款", order.Status)
|
||||
}
|
||||
if req.RefundAmount > order.Amount {
|
||||
return nil, fmt.Errorf("退款金额 %.2f 不能大于订单金额 %.2f", req.RefundAmount, order.Amount)
|
||||
}
|
||||
|
||||
var result refundResult
|
||||
result.status = model.OrderRefundStatusPending
|
||||
order.Status = model.OrderStatusRefunding
|
||||
// 使用事务处理退款流程
|
||||
err = p.orderModel.Trans(ctx, func(ctx context.Context, session sqlx.Session) error {
|
||||
// 根据支付方式申请退款
|
||||
switch order.PaymentPlatform {
|
||||
case string(PayMethodAlipay):
|
||||
refundReq := &payment.AlipayRefundRequest{
|
||||
OrderNo: order.OrderNo,
|
||||
RefundAmount: req.RefundAmount,
|
||||
}
|
||||
resp, err := p.alipayService.Refund(ctx, refundReq)
|
||||
if err != nil {
|
||||
return fmt.Errorf("支付宝退款申请失败: %v", err)
|
||||
}
|
||||
result = refundResult{
|
||||
refundNo: resp.RefundNo,
|
||||
status: model.OrderRefundStatusSuccess,
|
||||
refundTime: resp.RefundTime,
|
||||
refundAmount: resp.RefundAmount,
|
||||
platformRefundId: sql.NullString{String: resp.RefundID, Valid: true},
|
||||
}
|
||||
order.Status = model.OrderRefundStatusSuccess
|
||||
default:
|
||||
return fmt.Errorf("不支持的支付平台退款: %s", order.PaymentPlatform)
|
||||
}
|
||||
|
||||
// 创建退款记录
|
||||
refund := &model.OrderRefund{
|
||||
RefundNo: result.refundNo,
|
||||
PlatformRefundId: result.platformRefundId,
|
||||
OrderId: order.Id,
|
||||
UserId: order.UserId,
|
||||
ProductId: order.ProductId,
|
||||
RefundAmount: result.refundAmount,
|
||||
RefundReason: sql.NullString{String: req.Reason, Valid: true},
|
||||
Status: result.status,
|
||||
RefundTime: sql.NullTime{Time: result.refundTime, Valid: !result.refundTime.IsZero()},
|
||||
}
|
||||
|
||||
if _, err := p.orderRefundModel.Insert(ctx, session, refund); err != nil {
|
||||
return fmt.Errorf("创建退款记录失败: %v", err)
|
||||
}
|
||||
|
||||
// 更新订单状态
|
||||
order.Status = model.OrderStatusRefunding
|
||||
order.RefundTime = sql.NullTime{Time: result.refundTime, Valid: !result.refundTime.IsZero()}
|
||||
if _, err := p.orderModel.Update(ctx, session, order); err != nil {
|
||||
return fmt.Errorf("更新订单状态失败: %v", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &RefundResponse{
|
||||
RefundNo: result.refundNo,
|
||||
Amount: result.refundAmount,
|
||||
Status: result.status,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// QueryOrderStatus 查询订单状态
|
||||
func (p *PayService) QueryOrderStatus(ctx context.Context, orderNo string) (*OrderStatusResponse, error) {
|
||||
// 查询订单信息
|
||||
order, err := p.orderModel.FindOneByOrderNo(ctx, orderNo)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("查询订单失败: %v", err)
|
||||
}
|
||||
|
||||
// 根据支付方式查询支付状态
|
||||
var payStatus payment.PaymentStatus
|
||||
switch order.PaymentPlatform {
|
||||
case "alipay":
|
||||
queryReq := &payment.QueryOrderRequest{
|
||||
OrderNo: orderNo,
|
||||
}
|
||||
resp, err := p.alipayService.QueryOrder(ctx, queryReq)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("查询支付宝订单状态失败: %v", err)
|
||||
}
|
||||
payStatus = resp.Status
|
||||
// case "wechat":
|
||||
// queryReq := &payment.OrderQuery{
|
||||
// OrderNo: orderNo,
|
||||
// }
|
||||
// resp, err := p.wechatService.QueryOrder(queryReq)
|
||||
// if err != nil {
|
||||
// return nil, fmt.Errorf("查询微信支付订单状态失败: %v", err)
|
||||
// }
|
||||
// payStatus = resp.Status
|
||||
// case "apple":
|
||||
// return nil, fmt.Errorf("苹果支付暂不支持主动查询订单状态")
|
||||
default:
|
||||
return nil, fmt.Errorf("不支持的支付方式: %s", order.PaymentPlatform)
|
||||
}
|
||||
|
||||
return &OrderStatusResponse{
|
||||
OrderNo: orderNo,
|
||||
PayMethod: PayMethod(order.PaymentPlatform),
|
||||
PayStatus: string(payStatus),
|
||||
OrderStatus: order.Status,
|
||||
Amount: order.Amount,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type PayMethod string
|
||||
|
||||
const (
|
||||
PayMethodAlipay PayMethod = "alipay"
|
||||
PayMethodWechat PayMethod = "wechat"
|
||||
PayMethodApple PayMethod = "apple"
|
||||
)
|
||||
|
||||
// 请求和响应结构体定义
|
||||
type CreateOrderRequest struct {
|
||||
PayMethod PayMethod `json:"pay_method"` // 支付方式:alipay, wechat, apple
|
||||
ProductEn string `json:"product_en"` // 商品英文名
|
||||
}
|
||||
|
||||
type CreateOrderResponse struct {
|
||||
OrderNo string `json:"order_no"` // 订单号
|
||||
PayData interface{} `json:"pay_data"` // 支付数据
|
||||
PayMethod PayMethod `json:"pay_type"` // 支付方式
|
||||
OrderID int64 `json:"order_id"` // 订单ID
|
||||
}
|
||||
|
||||
type RefundRequest struct {
|
||||
OrderId int64 `json:"order_id"` // 订单ID
|
||||
RefundAmount float64 `json:"refund_amount"` // 退款金额
|
||||
Reason string `json:"reason"` // 退款原因
|
||||
}
|
||||
|
||||
// 定义退款结果结构
|
||||
type refundResult struct {
|
||||
refundNo string
|
||||
status string
|
||||
refundTime time.Time
|
||||
refundAmount float64
|
||||
platformRefundId sql.NullString
|
||||
}
|
||||
|
||||
type RefundResponse struct {
|
||||
RefundNo string `json:"refund_no"` // 退款单号
|
||||
Amount float64 `json:"amount"` // 退款金额
|
||||
Status string `json:"status"` // 退款状态
|
||||
}
|
||||
|
||||
type OrderStatusResponse struct {
|
||||
OrderNo string `json:"order_no"` // 订单号
|
||||
PayMethod PayMethod `json:"pay_type"` // 支付方式
|
||||
PayStatus string `json:"pay_status"` // 支付状态
|
||||
OrderStatus string `json:"order_status"` // 订单状态
|
||||
Amount float64 `json:"amount"` // 订单金额
|
||||
}
|
@ -1,260 +0,0 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
"tyc-server/app/main/api/internal/config"
|
||||
"tyc-server/app/main/model"
|
||||
"tyc-server/common/ctxdata"
|
||||
"tyc-server/pkg/lzkit/lzUtils"
|
||||
|
||||
"github.com/wechatpay-apiv3/wechatpay-go/core"
|
||||
"github.com/wechatpay-apiv3/wechatpay-go/core/auth/verifiers"
|
||||
"github.com/wechatpay-apiv3/wechatpay-go/core/downloader"
|
||||
"github.com/wechatpay-apiv3/wechatpay-go/core/notify"
|
||||
"github.com/wechatpay-apiv3/wechatpay-go/core/option"
|
||||
"github.com/wechatpay-apiv3/wechatpay-go/services/payments"
|
||||
"github.com/wechatpay-apiv3/wechatpay-go/services/payments/app"
|
||||
"github.com/wechatpay-apiv3/wechatpay-go/services/payments/jsapi"
|
||||
"github.com/wechatpay-apiv3/wechatpay-go/services/refunddomestic"
|
||||
"github.com/wechatpay-apiv3/wechatpay-go/utils"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
const (
|
||||
TradeStateSuccess = "SUCCESS" // 支付成功
|
||||
TradeStateRefund = "REFUND" // 转入退款
|
||||
TradeStateNotPay = "NOTPAY" // 未支付
|
||||
TradeStateClosed = "CLOSED" // 已关闭
|
||||
TradeStateRevoked = "REVOKED" // 已撤销(付款码支付)
|
||||
TradeStateUserPaying = "USERPAYING" // 用户支付中(付款码支付)
|
||||
TradeStatePayError = "PAYERROR" // 支付失败(其他原因,如银行返回失败)
|
||||
)
|
||||
|
||||
type WechatPayService struct {
|
||||
config config.WxpayConfig
|
||||
wechatClient *core.Client
|
||||
notifyHandler *notify.Handler
|
||||
userAuthModel model.UserAuthModel
|
||||
}
|
||||
|
||||
// NewWechatPayService 初始化微信支付服务
|
||||
func NewWechatPayService(c config.Config, userAuthModel model.UserAuthModel) *WechatPayService {
|
||||
// 从配置中加载商户信息
|
||||
mchID := c.Wxpay.MchID
|
||||
mchCertificateSerialNumber := c.Wxpay.MchCertificateSerialNumber
|
||||
mchAPIv3Key := c.Wxpay.MchApiv3Key
|
||||
|
||||
// 从文件中加载商户私钥
|
||||
mchPrivateKey, err := utils.LoadPrivateKeyWithPath(c.Wxpay.MchPrivateKeyPath)
|
||||
if err != nil {
|
||||
logx.Errorf("加载商户私钥失败: %v", err)
|
||||
panic(fmt.Sprintf("初始化失败,服务停止: %v", err)) // 记录错误并停止程序
|
||||
}
|
||||
|
||||
// 使用商户私钥和其他参数初始化微信支付客户端
|
||||
opts := []core.ClientOption{
|
||||
option.WithWechatPayAutoAuthCipher(mchID, mchCertificateSerialNumber, mchPrivateKey, mchAPIv3Key),
|
||||
}
|
||||
client, err := core.NewClient(context.Background(), opts...)
|
||||
if err != nil {
|
||||
logx.Errorf("创建微信支付客户端失败: %v", err)
|
||||
panic(fmt.Sprintf("初始化失败,服务停止: %v", err)) // 记录错误并停止程序
|
||||
}
|
||||
// 在初始化时获取证书访问器并创建 notifyHandler
|
||||
certificateVisitor := downloader.MgrInstance().GetCertificateVisitor(mchID)
|
||||
notifyHandler, err := notify.NewRSANotifyHandler(mchAPIv3Key, verifiers.NewSHA256WithRSAVerifier(certificateVisitor))
|
||||
if err != nil {
|
||||
logx.Errorf("获取证书访问器失败: %v", err)
|
||||
panic(fmt.Sprintf("初始化失败,服务停止: %v", err)) // 记录错误并停止程序
|
||||
}
|
||||
return &WechatPayService{
|
||||
config: c.Wxpay,
|
||||
wechatClient: client,
|
||||
notifyHandler: notifyHandler,
|
||||
userAuthModel: userAuthModel,
|
||||
}
|
||||
}
|
||||
|
||||
// CreateWechatAppOrder 创建微信APP支付订单
|
||||
func (w *WechatPayService) CreateWechatAppOrder(ctx context.Context, amount float64, description string, outTradeNo string) (string, error) {
|
||||
totalAmount := lzUtils.ToWechatAmount(amount)
|
||||
|
||||
// 构建支付请求参数
|
||||
payRequest := app.PrepayRequest{
|
||||
Appid: core.String(w.config.AppID),
|
||||
Mchid: core.String(w.config.MchID),
|
||||
Description: core.String(description),
|
||||
OutTradeNo: core.String(outTradeNo),
|
||||
NotifyUrl: core.String(w.config.NotifyUrl),
|
||||
Amount: &app.Amount{
|
||||
Total: core.Int64(totalAmount),
|
||||
},
|
||||
}
|
||||
|
||||
// 初始化 AppApiService
|
||||
svc := app.AppApiService{Client: w.wechatClient}
|
||||
|
||||
// 发起预支付请求
|
||||
resp, result, err := svc.Prepay(ctx, payRequest)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("微信支付订单创建失败: %v, 状态码: %d", err, result.Response.StatusCode)
|
||||
}
|
||||
|
||||
// 返回预支付交易会话标识
|
||||
return *resp.PrepayId, nil
|
||||
}
|
||||
|
||||
// CreateWechatMiniProgramOrder 创建微信小程序支付订单
|
||||
func (w *WechatPayService) CreateWechatMiniProgramOrder(ctx context.Context, amount float64, description string, outTradeNo string, openid string) (interface{}, error) {
|
||||
totalAmount := lzUtils.ToWechatAmount(amount)
|
||||
|
||||
// 构建支付请求参数
|
||||
payRequest := jsapi.PrepayRequest{
|
||||
Appid: core.String(w.config.AppID),
|
||||
Mchid: core.String(w.config.MchID),
|
||||
Description: core.String(description),
|
||||
OutTradeNo: core.String(outTradeNo),
|
||||
NotifyUrl: core.String(w.config.NotifyUrl),
|
||||
Amount: &jsapi.Amount{
|
||||
Total: core.Int64(totalAmount),
|
||||
},
|
||||
Payer: &jsapi.Payer{
|
||||
Openid: core.String(openid), // 用户的 OpenID,通过前端传入
|
||||
}}
|
||||
|
||||
// 初始化 AppApiService
|
||||
svc := jsapi.JsapiApiService{Client: w.wechatClient}
|
||||
|
||||
// 发起预支付请求
|
||||
resp, result, err := svc.PrepayWithRequestPayment(ctx, payRequest)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("微信支付订单创建失败: %v, 状态码: %d", err, result.Response.StatusCode)
|
||||
}
|
||||
|
||||
// 返回预支付交易会话标识
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
// CreateWechatOrder 创建微信支付订单(集成 APP、H5、小程序)
|
||||
func (w *WechatPayService) CreateWechatOrder(ctx context.Context, amount float64, description string, outTradeNo string) (interface{}, error) {
|
||||
// 根据 ctx 中的 platform 判断平台
|
||||
platform := ctx.Value("platform").(string)
|
||||
|
||||
var prepayData interface{}
|
||||
var err error
|
||||
|
||||
switch platform {
|
||||
case "mp-weixin":
|
||||
userID, getUidErr := ctxdata.GetUidFromCtx(ctx)
|
||||
if getUidErr != nil {
|
||||
return "", fmt.Errorf("获取用户信息失败: %s", getUidErr)
|
||||
}
|
||||
userAuthModel, findUserAuthErr := w.userAuthModel.FindOneByUserIdAuthType(ctx, userID, "wx_mini")
|
||||
if findUserAuthErr != nil {
|
||||
return "", fmt.Errorf("获取用户认证信息失败: %s", findUserAuthErr)
|
||||
}
|
||||
// 如果是小程序平台,调用小程序支付订单创建
|
||||
prepayData, err = w.CreateWechatMiniProgramOrder(ctx, amount, description, outTradeNo, userAuthModel.AuthKey)
|
||||
case "app":
|
||||
// 如果是 APP 平台,调用 APP 支付订单创建
|
||||
prepayData, err = w.CreateWechatAppOrder(ctx, amount, description, outTradeNo)
|
||||
default:
|
||||
return "", fmt.Errorf("不支持的支付平台: %s", platform)
|
||||
}
|
||||
|
||||
// 如果创建支付订单失败,返回错误
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("支付订单创建失败: %v", err)
|
||||
}
|
||||
|
||||
// 返回预支付ID
|
||||
return prepayData, nil
|
||||
}
|
||||
|
||||
// HandleWechatPayNotification 处理微信支付回调
|
||||
func (w *WechatPayService) HandleWechatPayNotification(ctx context.Context, req *http.Request) (*payments.Transaction, error) {
|
||||
transaction := new(payments.Transaction)
|
||||
_, err := w.notifyHandler.ParseNotifyRequest(ctx, req, transaction)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("微信支付通知处理失败: %v", err)
|
||||
}
|
||||
// 返回交易信息
|
||||
return transaction, nil
|
||||
}
|
||||
|
||||
// HandleRefundNotification 处理微信退款回调
|
||||
func (w *WechatPayService) HandleRefundNotification(ctx context.Context, req *http.Request) (*refunddomestic.Refund, error) {
|
||||
refund := new(refunddomestic.Refund)
|
||||
_, err := w.notifyHandler.ParseNotifyRequest(ctx, req, refund)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("微信退款回调通知处理失败: %v", err)
|
||||
}
|
||||
return refund, nil
|
||||
}
|
||||
|
||||
// QueryOrderStatus 主动查询订单状态
|
||||
func (w *WechatPayService) QueryOrderStatus(ctx context.Context, transactionID string) (*payments.Transaction, error) {
|
||||
svc := jsapi.JsapiApiService{Client: w.wechatClient}
|
||||
|
||||
// 调用 QueryOrderById 方法查询订单状态
|
||||
resp, result, err := svc.QueryOrderById(ctx, jsapi.QueryOrderByIdRequest{
|
||||
TransactionId: core.String(transactionID),
|
||||
Mchid: core.String(w.config.MchID),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("订单查询失败: %v, 状态码: %d", err, result.Response.StatusCode)
|
||||
}
|
||||
return resp, nil
|
||||
|
||||
}
|
||||
|
||||
// WeChatRefund 申请微信退款
|
||||
func (w *WechatPayService) WeChatRefund(ctx context.Context, outTradeNo string, refundAmount float64, totalAmount float64) error {
|
||||
|
||||
// 生成唯一的退款单号
|
||||
outRefundNo := fmt.Sprintf("%s-refund", outTradeNo)
|
||||
|
||||
// 初始化退款服务
|
||||
svc := refunddomestic.RefundsApiService{Client: w.wechatClient}
|
||||
|
||||
// 创建退款请求
|
||||
resp, result, err := svc.Create(ctx, refunddomestic.CreateRequest{
|
||||
OutTradeNo: core.String(outTradeNo),
|
||||
OutRefundNo: core.String(outRefundNo),
|
||||
NotifyUrl: core.String(w.config.RefundNotifyUrl),
|
||||
Amount: &refunddomestic.AmountReq{
|
||||
Currency: core.String("CNY"),
|
||||
Refund: core.Int64(lzUtils.ToWechatAmount(refundAmount)),
|
||||
Total: core.Int64(lzUtils.ToWechatAmount(totalAmount)),
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("微信订单申请退款错误: %v", err)
|
||||
}
|
||||
// 打印退款结果
|
||||
logx.Infof("退款申请成功,状态码=%d,退款单号=%s,微信退款单号=%s", result.Response.StatusCode, *resp.OutRefundNo, *resp.RefundId)
|
||||
return nil
|
||||
}
|
||||
|
||||
// GenerateOutTradeNo 生成唯一订单号
|
||||
func (w *WechatPayService) GenerateOutTradeNo() string {
|
||||
length := 16
|
||||
timestamp := time.Now().UnixNano()
|
||||
timeStr := strconv.FormatInt(timestamp, 10)
|
||||
randomPart := strconv.Itoa(int(timestamp % 1e6))
|
||||
combined := timeStr + randomPart
|
||||
|
||||
if len(combined) >= length {
|
||||
return combined[:length]
|
||||
}
|
||||
|
||||
for len(combined) < length {
|
||||
combined += strconv.Itoa(int(timestamp % 10))
|
||||
}
|
||||
|
||||
return combined
|
||||
}
|
@ -21,7 +21,19 @@ type ServiceContext struct {
|
||||
SourceInterceptor rest.Middleware
|
||||
AuthInterceptor rest.Middleware
|
||||
|
||||
// 模型
|
||||
// 服务
|
||||
PayService *service.PayService
|
||||
WestDexService *service.WestDexService
|
||||
YushanService *service.YushanService
|
||||
TianjuService *service.TianjuService
|
||||
ApiRequestService *service.ApiRequestService
|
||||
AsynqServer *asynq.Server
|
||||
AsynqService *service.AsynqService
|
||||
VerificationService *service.VerificationService
|
||||
DictService *service.DictService
|
||||
AdminPromotionLinkStatsService *service.AdminPromotionLinkStatsService
|
||||
|
||||
// 基础模型
|
||||
UserModel model.UserModel
|
||||
UserAuthModel model.UserAuthModel
|
||||
ProductModel model.ProductModel
|
||||
@ -29,26 +41,13 @@ type ServiceContext struct {
|
||||
ProductFeatureModel model.ProductFeatureModel
|
||||
ProductRenderModel model.ProductRenderModel
|
||||
OrderModel model.OrderModel
|
||||
OrderRefundModel model.OrderRefundModel
|
||||
QueryModel model.QueryModel
|
||||
GlobalNotificationsModel model.GlobalNotificationsModel
|
||||
ExampleModel model.ExampleModel
|
||||
ExampleParamsModel model.ExampleParamsModel
|
||||
|
||||
// 服务
|
||||
AlipayService *service.AliPayService
|
||||
WechatPayService *service.WechatPayService
|
||||
ApplePayService *service.ApplePayService
|
||||
WestDexService *service.WestDexService
|
||||
YushanService *service.YushanService
|
||||
TianjuService *service.TianjuService
|
||||
ApiRequestService *service.ApiRequestService
|
||||
AsynqServer *asynq.Server // 服务端
|
||||
AsynqService *service.AsynqService // 客户端
|
||||
VerificationService *service.VerificationService
|
||||
DictService *service.DictService
|
||||
AdminPromotionLinkStatsService *service.AdminPromotionLinkStatsService
|
||||
|
||||
// admin
|
||||
// 管理后台模型
|
||||
AdminApiModel model.AdminApiModel
|
||||
AdminMenuModel model.AdminMenuModel
|
||||
AdminRoleModel model.AdminRoleModel
|
||||
@ -59,20 +58,24 @@ type ServiceContext struct {
|
||||
AdminDictDataModel model.AdminDictDataModel
|
||||
AdminDictTypeModel model.AdminDictTypeModel
|
||||
|
||||
// admin promotion
|
||||
// 推广相关模型
|
||||
AdminPromotionLinkModel model.AdminPromotionLinkModel
|
||||
AdminPromotionLinkStatsTotalModel model.AdminPromotionLinkStatsTotalModel
|
||||
AdminPromotionLinkStatsHistoryModel model.AdminPromotionLinkStatsHistoryModel
|
||||
AdminPromotionOrderModel model.AdminPromotionOrderModel
|
||||
}
|
||||
|
||||
func NewServiceContext(c config.Config) *ServiceContext {
|
||||
db := sqlx.NewMysql(c.DataSource)
|
||||
// 初始化基础服务
|
||||
func initBaseServices(c config.Config) (*redis.Redis, *asynq.Server) {
|
||||
// 初始化Redis
|
||||
redisConf := redis.RedisConf{
|
||||
Host: c.CacheRedis[0].Host,
|
||||
Pass: c.CacheRedis[0].Pass,
|
||||
Type: c.CacheRedis[0].Type,
|
||||
}
|
||||
r := redis.MustNewRedis(redisConf)
|
||||
|
||||
// 初始化Asynq服务
|
||||
asynqServer := asynq.NewServer(
|
||||
asynq.RedisClientOpt{Addr: c.CacheRedis[0].Host, Password: c.CacheRedis[0].Pass},
|
||||
asynq.Config{
|
||||
@ -83,80 +86,203 @@ func NewServiceContext(c config.Config) *ServiceContext {
|
||||
Concurrency: 10,
|
||||
},
|
||||
)
|
||||
adminApiModel := model.NewAdminApiModel(db, c.CacheRedis)
|
||||
adminMenuModel := model.NewAdminMenuModel(db, c.CacheRedis)
|
||||
adminRoleModel := model.NewAdminRoleModel(db, c.CacheRedis)
|
||||
adminRoleApiModel := model.NewAdminRoleApiModel(db, c.CacheRedis)
|
||||
adminRoleMenuModel := model.NewAdminRoleMenuModel(db, c.CacheRedis)
|
||||
adminUserModel := model.NewAdminUserModel(db, c.CacheRedis)
|
||||
adminUserRoleModel := model.NewAdminUserRoleModel(db, c.CacheRedis)
|
||||
adminDictDataModel := model.NewAdminDictDataModel(db, c.CacheRedis)
|
||||
adminDictTypeModel := model.NewAdminDictTypeModel(db, c.CacheRedis)
|
||||
|
||||
// admin promotion
|
||||
adminPromotionLinkModel := model.NewAdminPromotionLinkModel(db, c.CacheRedis)
|
||||
adminPromotionLinkStatsTotalModel := model.NewAdminPromotionLinkStatsTotalModel(db, c.CacheRedis)
|
||||
adminPromotionLinkStatsHistoryModel := model.NewAdminPromotionLinkStatsHistoryModel(db, c.CacheRedis)
|
||||
adminPromotionOrderModel := model.NewAdminPromotionOrderModel(db, c.CacheRedis)
|
||||
return r, asynqServer
|
||||
}
|
||||
|
||||
// 初始化基础模型
|
||||
func initBaseModels(db sqlx.SqlConn, c config.Config) *BaseModels {
|
||||
return &BaseModels{
|
||||
UserModel: model.NewUserModel(db, c.CacheRedis),
|
||||
UserAuthModel: model.NewUserAuthModel(db, c.CacheRedis),
|
||||
ProductModel: model.NewProductModel(db, c.CacheRedis),
|
||||
FeatureModel: model.NewFeatureModel(db, c.CacheRedis),
|
||||
ProductFeatureModel: model.NewProductFeatureModel(db, c.CacheRedis),
|
||||
ProductRenderModel: model.NewProductRenderModel(db, c.CacheRedis),
|
||||
OrderModel: model.NewOrderModel(db, c.CacheRedis),
|
||||
OrderRefundModel: model.NewOrderRefundModel(db, c.CacheRedis),
|
||||
QueryModel: model.NewQueryModel(db, c.CacheRedis),
|
||||
GlobalNotificationsModel: model.NewGlobalNotificationsModel(db, c.CacheRedis),
|
||||
ExampleModel: model.NewExampleModel(db, c.CacheRedis),
|
||||
ExampleParamsModel: model.NewExampleParamsModel(db, c.CacheRedis),
|
||||
}
|
||||
}
|
||||
|
||||
// 初始化管理后台模型
|
||||
func initAdminModels(db sqlx.SqlConn, c config.Config) *AdminModels {
|
||||
return &AdminModels{
|
||||
AdminApiModel: model.NewAdminApiModel(db, c.CacheRedis),
|
||||
AdminMenuModel: model.NewAdminMenuModel(db, c.CacheRedis),
|
||||
AdminRoleModel: model.NewAdminRoleModel(db, c.CacheRedis),
|
||||
AdminRoleApiModel: model.NewAdminRoleApiModel(db, c.CacheRedis),
|
||||
AdminRoleMenuModel: model.NewAdminRoleMenuModel(db, c.CacheRedis),
|
||||
AdminUserModel: model.NewAdminUserModel(db, c.CacheRedis),
|
||||
AdminUserRoleModel: model.NewAdminUserRoleModel(db, c.CacheRedis),
|
||||
AdminDictDataModel: model.NewAdminDictDataModel(db, c.CacheRedis),
|
||||
AdminDictTypeModel: model.NewAdminDictTypeModel(db, c.CacheRedis),
|
||||
}
|
||||
}
|
||||
|
||||
// 初始化推广相关模型
|
||||
func initPromotionModels(db sqlx.SqlConn, c config.Config) *PromotionModels {
|
||||
return &PromotionModels{
|
||||
AdminPromotionLinkModel: model.NewAdminPromotionLinkModel(db, c.CacheRedis),
|
||||
AdminPromotionLinkStatsTotalModel: model.NewAdminPromotionLinkStatsTotalModel(db, c.CacheRedis),
|
||||
AdminPromotionLinkStatsHistoryModel: model.NewAdminPromotionLinkStatsHistoryModel(db, c.CacheRedis),
|
||||
AdminPromotionOrderModel: model.NewAdminPromotionOrderModel(db, c.CacheRedis),
|
||||
}
|
||||
}
|
||||
|
||||
// 初始化业务服务
|
||||
func initBusinessServices(c config.Config, models *BaseModels, adminModels *AdminModels, promotionModels *PromotionModels) *BusinessServices {
|
||||
// 初始化基础服务
|
||||
westDexService := service.NewWestDexService(c)
|
||||
yushanService := service.NewYushanService(c)
|
||||
tianjuService := service.NewTianjuService(c)
|
||||
productFeatureModel := model.NewProductFeatureModel(db, c.CacheRedis)
|
||||
featureModel := model.NewFeatureModel(db, c.CacheRedis)
|
||||
userAuthModel := model.NewUserAuthModel(db, c.CacheRedis)
|
||||
apiRequestService := service.NewApiRequestService(c, westDexService, yushanService, tianjuService, featureModel, productFeatureModel)
|
||||
|
||||
// 初始化API请求服务
|
||||
apiRequestService := service.NewApiRequestService(
|
||||
c,
|
||||
westDexService,
|
||||
yushanService,
|
||||
tianjuService,
|
||||
models.FeatureModel,
|
||||
models.ProductFeatureModel,
|
||||
)
|
||||
|
||||
// 初始化推广统计服务
|
||||
adminPromotionLinkStatsService := service.NewAdminPromotionLinkStatsService(&service.ServiceContext{
|
||||
AdminPromotionLinkModel: adminPromotionLinkModel,
|
||||
AdminPromotionLinkStatsTotalModel: adminPromotionLinkStatsTotalModel,
|
||||
AdminPromotionLinkStatsHistoryModel: adminPromotionLinkStatsHistoryModel,
|
||||
AdminPromotionLinkModel: promotionModels.AdminPromotionLinkModel,
|
||||
AdminPromotionLinkStatsTotalModel: promotionModels.AdminPromotionLinkStatsTotalModel,
|
||||
AdminPromotionLinkStatsHistoryModel: promotionModels.AdminPromotionLinkStatsHistoryModel,
|
||||
})
|
||||
dictService := service.NewDictService(adminDictTypeModel, adminDictDataModel)
|
||||
return &ServiceContext{
|
||||
Config: c,
|
||||
Redis: redis.MustNewRedis(redisConf),
|
||||
SourceInterceptor: middleware.NewSourceInterceptorMiddleware().Handle,
|
||||
AuthInterceptor: middleware.NewAuthInterceptorMiddleware(c).Handle,
|
||||
AlipayService: service.NewAliPayService(c),
|
||||
WechatPayService: service.NewWechatPayService(c, userAuthModel),
|
||||
ApplePayService: service.NewApplePayService(c),
|
||||
|
||||
return &BusinessServices{
|
||||
PayService: service.NewPayService(c, models.OrderModel, models.OrderRefundModel, models.ProductModel, models.UserAuthModel),
|
||||
WestDexService: westDexService,
|
||||
YushanService: yushanService,
|
||||
TianjuService: tianjuService,
|
||||
AdminPromotionLinkStatsService: adminPromotionLinkStatsService,
|
||||
VerificationService: service.NewVerificationService(c, westDexService, apiRequestService),
|
||||
AsynqServer: asynqServer,
|
||||
ApiRequestService: apiRequestService,
|
||||
AsynqService: service.NewAsynqService(c),
|
||||
DictService: dictService,
|
||||
UserModel: model.NewUserModel(db, c.CacheRedis),
|
||||
UserAuthModel: userAuthModel,
|
||||
ProductModel: model.NewProductModel(db, c.CacheRedis),
|
||||
ProductRenderModel: model.NewProductRenderModel(db, c.CacheRedis),
|
||||
OrderModel: model.NewOrderModel(db, c.CacheRedis),
|
||||
QueryModel: model.NewQueryModel(db, c.CacheRedis),
|
||||
ExampleModel: model.NewExampleModel(db, c.CacheRedis),
|
||||
ExampleParamsModel: model.NewExampleParamsModel(db, c.CacheRedis),
|
||||
GlobalNotificationsModel: model.NewGlobalNotificationsModel(db, c.CacheRedis),
|
||||
FeatureModel: featureModel,
|
||||
ProductFeatureModel: productFeatureModel,
|
||||
|
||||
AdminApiModel: adminApiModel,
|
||||
AdminMenuModel: adminMenuModel,
|
||||
AdminRoleModel: adminRoleModel,
|
||||
AdminRoleApiModel: adminRoleApiModel,
|
||||
AdminRoleMenuModel: adminRoleMenuModel,
|
||||
AdminUserModel: adminUserModel,
|
||||
AdminUserRoleModel: adminUserRoleModel,
|
||||
AdminDictDataModel: adminDictDataModel,
|
||||
AdminDictTypeModel: adminDictTypeModel,
|
||||
|
||||
AdminPromotionLinkModel: adminPromotionLinkModel,
|
||||
AdminPromotionLinkStatsTotalModel: adminPromotionLinkStatsTotalModel,
|
||||
AdminPromotionLinkStatsHistoryModel: adminPromotionLinkStatsHistoryModel,
|
||||
AdminPromotionOrderModel: adminPromotionOrderModel,
|
||||
VerificationService: service.NewVerificationService(c, westDexService, apiRequestService),
|
||||
DictService: service.NewDictService(adminModels.AdminDictTypeModel, adminModels.AdminDictDataModel),
|
||||
AdminPromotionLinkStatsService: adminPromotionLinkStatsService,
|
||||
}
|
||||
}
|
||||
|
||||
func NewServiceContext(c config.Config) *ServiceContext {
|
||||
// 初始化数据库连接
|
||||
db := sqlx.NewMysql(c.DataSource)
|
||||
|
||||
// 初始化基础服务
|
||||
redis, asynqServer := initBaseServices(c)
|
||||
|
||||
// 初始化各种模型
|
||||
baseModels := initBaseModels(db, c)
|
||||
adminModels := initAdminModels(db, c)
|
||||
promotionModels := initPromotionModels(db, c)
|
||||
|
||||
// 初始化业务服务
|
||||
businessServices := initBusinessServices(c, baseModels, adminModels, promotionModels)
|
||||
|
||||
return &ServiceContext{
|
||||
Config: c,
|
||||
Redis: redis,
|
||||
AsynqServer: asynqServer,
|
||||
SourceInterceptor: middleware.NewSourceInterceptorMiddleware().Handle,
|
||||
AuthInterceptor: middleware.NewAuthInterceptorMiddleware(c).Handle,
|
||||
|
||||
// 注入业务服务
|
||||
PayService: businessServices.PayService,
|
||||
WestDexService: businessServices.WestDexService,
|
||||
YushanService: businessServices.YushanService,
|
||||
TianjuService: businessServices.TianjuService,
|
||||
ApiRequestService: businessServices.ApiRequestService,
|
||||
AsynqService: businessServices.AsynqService,
|
||||
VerificationService: businessServices.VerificationService,
|
||||
DictService: businessServices.DictService,
|
||||
AdminPromotionLinkStatsService: businessServices.AdminPromotionLinkStatsService,
|
||||
|
||||
// 注入基础模型
|
||||
UserModel: baseModels.UserModel,
|
||||
UserAuthModel: baseModels.UserAuthModel,
|
||||
ProductModel: baseModels.ProductModel,
|
||||
FeatureModel: baseModels.FeatureModel,
|
||||
ProductFeatureModel: baseModels.ProductFeatureModel,
|
||||
ProductRenderModel: baseModels.ProductRenderModel,
|
||||
OrderModel: baseModels.OrderModel,
|
||||
OrderRefundModel: baseModels.OrderRefundModel,
|
||||
QueryModel: baseModels.QueryModel,
|
||||
GlobalNotificationsModel: baseModels.GlobalNotificationsModel,
|
||||
ExampleModel: baseModels.ExampleModel,
|
||||
ExampleParamsModel: baseModels.ExampleParamsModel,
|
||||
|
||||
// 注入管理后台模型
|
||||
AdminApiModel: adminModels.AdminApiModel,
|
||||
AdminMenuModel: adminModels.AdminMenuModel,
|
||||
AdminRoleModel: adminModels.AdminRoleModel,
|
||||
AdminRoleApiModel: adminModels.AdminRoleApiModel,
|
||||
AdminRoleMenuModel: adminModels.AdminRoleMenuModel,
|
||||
AdminUserModel: adminModels.AdminUserModel,
|
||||
AdminUserRoleModel: adminModels.AdminUserRoleModel,
|
||||
AdminDictDataModel: adminModels.AdminDictDataModel,
|
||||
AdminDictTypeModel: adminModels.AdminDictTypeModel,
|
||||
|
||||
// 注入推广相关模型
|
||||
AdminPromotionLinkModel: promotionModels.AdminPromotionLinkModel,
|
||||
AdminPromotionLinkStatsTotalModel: promotionModels.AdminPromotionLinkStatsTotalModel,
|
||||
AdminPromotionLinkStatsHistoryModel: promotionModels.AdminPromotionLinkStatsHistoryModel,
|
||||
AdminPromotionOrderModel: promotionModels.AdminPromotionOrderModel,
|
||||
}
|
||||
}
|
||||
|
||||
// 辅助结构体,用于分组初始化
|
||||
type BaseModels struct {
|
||||
UserModel model.UserModel
|
||||
UserAuthModel model.UserAuthModel
|
||||
ProductModel model.ProductModel
|
||||
FeatureModel model.FeatureModel
|
||||
ProductFeatureModel model.ProductFeatureModel
|
||||
ProductRenderModel model.ProductRenderModel
|
||||
OrderModel model.OrderModel
|
||||
OrderRefundModel model.OrderRefundModel
|
||||
QueryModel model.QueryModel
|
||||
GlobalNotificationsModel model.GlobalNotificationsModel
|
||||
ExampleModel model.ExampleModel
|
||||
ExampleParamsModel model.ExampleParamsModel
|
||||
}
|
||||
|
||||
type AdminModels struct {
|
||||
AdminApiModel model.AdminApiModel
|
||||
AdminMenuModel model.AdminMenuModel
|
||||
AdminRoleModel model.AdminRoleModel
|
||||
AdminRoleApiModel model.AdminRoleApiModel
|
||||
AdminRoleMenuModel model.AdminRoleMenuModel
|
||||
AdminUserModel model.AdminUserModel
|
||||
AdminUserRoleModel model.AdminUserRoleModel
|
||||
AdminDictDataModel model.AdminDictDataModel
|
||||
AdminDictTypeModel model.AdminDictTypeModel
|
||||
}
|
||||
|
||||
type PromotionModels struct {
|
||||
AdminPromotionLinkModel model.AdminPromotionLinkModel
|
||||
AdminPromotionLinkStatsTotalModel model.AdminPromotionLinkStatsTotalModel
|
||||
AdminPromotionLinkStatsHistoryModel model.AdminPromotionLinkStatsHistoryModel
|
||||
AdminPromotionOrderModel model.AdminPromotionOrderModel
|
||||
}
|
||||
|
||||
type BusinessServices struct {
|
||||
PayService *service.PayService
|
||||
WestDexService *service.WestDexService
|
||||
YushanService *service.YushanService
|
||||
TianjuService *service.TianjuService
|
||||
ApiRequestService *service.ApiRequestService
|
||||
AsynqService *service.AsynqService
|
||||
VerificationService *service.VerificationService
|
||||
DictService *service.DictService
|
||||
AdminPromotionLinkStatsService *service.AdminPromotionLinkStatsService
|
||||
}
|
||||
|
||||
func (s *ServiceContext) Close() {
|
||||
if s.AsynqService != nil {
|
||||
s.AsynqService.Close()
|
||||
|
@ -1,6 +1,70 @@
|
||||
// Code generated by goctl. DO NOT EDIT.
|
||||
package types
|
||||
|
||||
type AdminCreateFeatureReq struct {
|
||||
ApiId string `json:"api_id"` // API标识
|
||||
Name string `json:"name"` // 描述
|
||||
}
|
||||
|
||||
type AdminCreateFeatureResp struct {
|
||||
Id int64 `json:"id"` // 功能ID
|
||||
}
|
||||
|
||||
type AdminCreateNotificationReq struct {
|
||||
Title string `json:"title"` // 通知标题
|
||||
NotificationPage string `json:"notification_page"` // 通知页面
|
||||
Content string `json:"content"` // 通知内容
|
||||
StartDate string `json:"start_date"` // 生效开始日期(yyyy-MM-dd)
|
||||
StartTime string `json:"start_time"` // 生效开始时间(HH:mm:ss)
|
||||
EndDate string `json:"end_date"` // 生效结束日期(yyyy-MM-dd)
|
||||
EndTime string `json:"end_time"` // 生效结束时间(HH:mm:ss)
|
||||
Status int64 `json:"status"` // 状态:1-启用,0-禁用
|
||||
}
|
||||
|
||||
type AdminCreateNotificationResp struct {
|
||||
Id int64 `json:"id"` // 通知ID
|
||||
}
|
||||
|
||||
type AdminCreateOrderReq struct {
|
||||
OrderNo string `json:"order_no"` // 商户订单号
|
||||
PlatformOrderId string `json:"platform_order_id"` // 支付订单号
|
||||
ProductName string `json:"product_name"` // 产品名称
|
||||
PaymentPlatform string `json:"payment_platform"` // 支付方式
|
||||
PaymentScene string `json:"payment_scene"` // 支付平台
|
||||
Amount float64 `json:"amount"` // 金额
|
||||
Status string `json:"status,default=pending"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败
|
||||
IsPromotion int64 `json:"is_promotion,default=0"` // 是否推广订单:0-否,1-是
|
||||
}
|
||||
|
||||
type AdminCreateOrderResp struct {
|
||||
Id int64 `json:"id"` // 订单ID
|
||||
}
|
||||
|
||||
type AdminCreatePlatformUserReq struct {
|
||||
Mobile string `json:"mobile"` // 手机号
|
||||
Password string `json:"password"` // 密码
|
||||
Nickname string `json:"nickname"` // 昵称
|
||||
Info string `json:"info"` // 备注信息
|
||||
Inside int64 `json:"inside"` // 是否内部用户 1-是 0-否
|
||||
}
|
||||
|
||||
type AdminCreatePlatformUserResp struct {
|
||||
Id int64 `json:"id"` // 用户ID
|
||||
}
|
||||
|
||||
type AdminCreateProductReq struct {
|
||||
ProductName string `json:"product_name"` // 服务名
|
||||
ProductEn string `json:"product_en"` // 英文名
|
||||
Description string `json:"description"` // 描述
|
||||
Notes string `json:"notes,optional"` // 备注
|
||||
CostPrice float64 `json:"cost_price"` // 成本
|
||||
SellPrice float64 `json:"sell_price"` // 售价
|
||||
}
|
||||
|
||||
type AdminCreateProductResp struct {
|
||||
Id int64 `json:"id"` // 产品ID
|
||||
}
|
||||
|
||||
type AdminCreateUserReq struct {
|
||||
Username string `json:"username"` // 用户名
|
||||
RealName string `json:"real_name"` // 真实姓名
|
||||
@ -12,6 +76,46 @@ type AdminCreateUserResp struct {
|
||||
Id int64 `json:"id"` // 用户ID
|
||||
}
|
||||
|
||||
type AdminDeleteFeatureReq struct {
|
||||
Id int64 `path:"id"` // 功能ID
|
||||
}
|
||||
|
||||
type AdminDeleteFeatureResp struct {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
type AdminDeleteNotificationReq struct {
|
||||
Id int64 `path:"id"` // 通知ID
|
||||
}
|
||||
|
||||
type AdminDeleteNotificationResp struct {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
type AdminDeleteOrderReq struct {
|
||||
Id int64 `path:"id"` // 订单ID
|
||||
}
|
||||
|
||||
type AdminDeleteOrderResp struct {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
type AdminDeletePlatformUserReq struct {
|
||||
Id int64 `path:"id"` // 用户ID
|
||||
}
|
||||
|
||||
type AdminDeletePlatformUserResp struct {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
type AdminDeleteProductReq struct {
|
||||
Id int64 `path:"id"` // 产品ID
|
||||
}
|
||||
|
||||
type AdminDeleteProductResp struct {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
type AdminDeleteUserReq struct {
|
||||
Id int64 `path:"id"` // 用户ID
|
||||
}
|
||||
@ -20,6 +124,183 @@ type AdminDeleteUserResp struct {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
type AdminGetFeatureDetailReq struct {
|
||||
Id int64 `path:"id"` // 功能ID
|
||||
}
|
||||
|
||||
type AdminGetFeatureDetailResp struct {
|
||||
Id int64 `json:"id"` // 功能ID
|
||||
ApiId string `json:"api_id"` // API标识
|
||||
Name string `json:"name"` // 描述
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
type AdminGetFeatureListReq struct {
|
||||
Page int64 `form:"page"` // 页码
|
||||
PageSize int64 `form:"pageSize"` // 每页数量
|
||||
ApiId *string `form:"api_id,optional"` // API标识
|
||||
Name *string `form:"name,optional"` // 描述
|
||||
}
|
||||
|
||||
type AdminGetFeatureListResp struct {
|
||||
Total int64 `json:"total"` // 总数
|
||||
Items []FeatureListItem `json:"items"` // 列表数据
|
||||
}
|
||||
|
||||
type AdminGetNotificationDetailReq struct {
|
||||
Id int64 `path:"id"` // 通知ID
|
||||
}
|
||||
|
||||
type AdminGetNotificationDetailResp struct {
|
||||
Id int64 `json:"id"` // 通知ID
|
||||
Title string `json:"title"` // 通知标题
|
||||
Content string `json:"content"` // 通知内容
|
||||
NotificationPage string `json:"notification_page"` // 通知页面
|
||||
StartDate string `json:"start_date"` // 生效开始日期
|
||||
StartTime string `json:"start_time"` // 生效开始时间
|
||||
EndDate string `json:"end_date"` // 生效结束日期
|
||||
EndTime string `json:"end_time"` // 生效结束时间
|
||||
Status int64 `json:"status"` // 状态
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
type AdminGetNotificationListReq struct {
|
||||
Page int64 `form:"page"` // 页码
|
||||
PageSize int64 `form:"pageSize"` // 每页数量
|
||||
Title *string `form:"title,optional"` // 通知标题(可选)
|
||||
NotificationPage *string `form:"notification_page,optional"` // 通知页面(可选)
|
||||
Status *int64 `form:"status,optional"` // 状态(可选)
|
||||
StartDate *string `form:"start_date,optional"` // 开始日期范围(可选)
|
||||
EndDate *string `form:"end_date,optional"` // 结束日期范围(可选)
|
||||
}
|
||||
|
||||
type AdminGetNotificationListResp struct {
|
||||
Total int64 `json:"total"` // 总数
|
||||
Items []NotificationListItem `json:"items"` // 列表数据
|
||||
}
|
||||
|
||||
type AdminGetOrderDetailReq struct {
|
||||
Id int64 `path:"id"` // 订单ID
|
||||
}
|
||||
|
||||
type AdminGetOrderDetailResp struct {
|
||||
Id int64 `json:"id"` // 订单ID
|
||||
OrderNo string `json:"order_no"` // 商户订单号
|
||||
PlatformOrderId string `json:"platform_order_id"` // 支付订单号
|
||||
ProductName string `json:"product_name"` // 产品名称
|
||||
PaymentPlatform string `json:"payment_platform"` // 支付方式
|
||||
PaymentScene string `json:"payment_scene"` // 支付平台
|
||||
Amount float64 `json:"amount"` // 金额
|
||||
Status string `json:"status"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
PayTime string `json:"pay_time"` // 支付时间
|
||||
RefundTime string `json:"refund_time"` // 退款时间
|
||||
IsPromotion int64 `json:"is_promotion"` // 是否推广订单:0-否,1-是
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
type AdminGetOrderListReq struct {
|
||||
Page int64 `form:"page,default=1"` // 页码
|
||||
PageSize int64 `form:"pageSize,default=20"` // 每页数量
|
||||
OrderNo string `form:"order_no,optional"` // 商户订单号
|
||||
PlatformOrderId string `form:"platform_order_id,optional"` // 支付订单号
|
||||
ProductName string `form:"product_name,optional"` // 产品名称
|
||||
PaymentPlatform string `form:"payment_platform,optional"` // 支付方式
|
||||
PaymentScene string `form:"payment_scene,optional"` // 支付平台
|
||||
Amount float64 `form:"amount,optional"` // 金额
|
||||
Status string `form:"status,optional"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败
|
||||
IsPromotion int64 `form:"is_promotion,optional,default=-1"` // 是否推广订单:0-否,1-是
|
||||
CreateTimeStart string `form:"create_time_start,optional"` // 创建时间开始
|
||||
CreateTimeEnd string `form:"create_time_end,optional"` // 创建时间结束
|
||||
PayTimeStart string `form:"pay_time_start,optional"` // 支付时间开始
|
||||
PayTimeEnd string `form:"pay_time_end,optional"` // 支付时间结束
|
||||
RefundTimeStart string `form:"refund_time_start,optional"` // 退款时间开始
|
||||
RefundTimeEnd string `form:"refund_time_end,optional"` // 退款时间结束
|
||||
}
|
||||
|
||||
type AdminGetOrderListResp struct {
|
||||
Total int64 `json:"total"` // 总数
|
||||
Items []OrderListItem `json:"items"` // 列表
|
||||
}
|
||||
|
||||
type AdminGetPlatformUserDetailReq struct {
|
||||
Id int64 `path:"id"` // 用户ID
|
||||
}
|
||||
|
||||
type AdminGetPlatformUserDetailResp struct {
|
||||
Id int64 `json:"id"` // 用户ID
|
||||
Mobile string `json:"mobile"` // 手机号
|
||||
Nickname string `json:"nickname"` // 昵称
|
||||
Info string `json:"info"` // 备注信息
|
||||
Inside int64 `json:"inside"` // 是否内部用户 1-是 0-否
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
type AdminGetPlatformUserListReq struct {
|
||||
Page int64 `form:"page,default=1"` // 页码
|
||||
PageSize int64 `form:"pageSize,default=20"` // 每页数量
|
||||
Mobile string `form:"mobile,optional"` // 手机号
|
||||
Nickname string `form:"nickname,optional"` // 昵称
|
||||
Inside int64 `form:"inside,optional"` // 是否内部用户 1-是 0-否
|
||||
CreateTimeStart string `form:"create_time_start,optional"` // 创建时间开始
|
||||
CreateTimeEnd string `form:"create_time_end,optional"` // 创建时间结束
|
||||
OrderBy string `form:"order_by,optional"` // 排序字段
|
||||
OrderType string `form:"order_type,optional"` // 排序类型
|
||||
}
|
||||
|
||||
type AdminGetPlatformUserListResp struct {
|
||||
Total int64 `json:"total"` // 总数
|
||||
Items []PlatformUserListItem `json:"items"` // 列表
|
||||
}
|
||||
|
||||
type AdminGetProductDetailReq struct {
|
||||
Id int64 `path:"id"` // 产品ID
|
||||
}
|
||||
|
||||
type AdminGetProductDetailResp struct {
|
||||
Id int64 `json:"id"` // 产品ID
|
||||
ProductName string `json:"product_name"` // 服务名
|
||||
ProductEn string `json:"product_en"` // 英文名
|
||||
Description string `json:"description"` // 描述
|
||||
Notes string `json:"notes"` // 备注
|
||||
CostPrice float64 `json:"cost_price"` // 成本
|
||||
SellPrice float64 `json:"sell_price"` // 售价
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
type AdminGetProductFeatureListReq struct {
|
||||
ProductId int64 `path:"product_id"` // 产品ID
|
||||
}
|
||||
|
||||
type AdminGetProductFeatureListResp struct {
|
||||
Id int64 `json:"id"` // 关联ID
|
||||
ProductId int64 `json:"product_id"` // 产品ID
|
||||
FeatureId int64 `json:"feature_id"` // 功能ID
|
||||
ApiId string `json:"api_id"` // API标识
|
||||
Name string `json:"name"` // 功能描述
|
||||
Sort int64 `json:"sort"` // 排序
|
||||
Enable int64 `json:"enable"` // 是否启用
|
||||
IsImportant int64 `json:"is_important"` // 是否重要
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
type AdminGetProductListReq struct {
|
||||
Page int64 `form:"page"` // 页码
|
||||
PageSize int64 `form:"pageSize"` // 每页数量
|
||||
ProductName *string `form:"product_name,optional"` // 服务名
|
||||
ProductEn *string `form:"product_en,optional"` // 英文名
|
||||
}
|
||||
|
||||
type AdminGetProductListResp struct {
|
||||
Total int64 `json:"total"` // 总数
|
||||
Items []ProductListItem `json:"items"` // 列表数据
|
||||
}
|
||||
|
||||
type AdminGetUserDetailReq struct {
|
||||
Id int64 `path:"id"` // 用户ID
|
||||
}
|
||||
@ -43,8 +324,8 @@ type AdminGetUserListReq struct {
|
||||
}
|
||||
|
||||
type AdminGetUserListResp struct {
|
||||
Total int64 `json:"total"` // 总数
|
||||
Items []UserListItem `json:"items"` // 列表
|
||||
Total int64 `json:"total"` // 总数
|
||||
Items []AdminUserListItem `json:"items"` // 列表
|
||||
}
|
||||
|
||||
type AdminLoginReq struct {
|
||||
@ -60,6 +341,98 @@ type AdminLoginResp struct {
|
||||
Roles []string `json:"roles"`
|
||||
}
|
||||
|
||||
type AdminRefundOrderReq struct {
|
||||
Id int64 `path:"id"` // 订单ID
|
||||
RefundAmount float64 `json:"refund_amount"` // 退款金额
|
||||
RefundReason string `json:"refund_reason"` // 退款原因
|
||||
}
|
||||
|
||||
type AdminRefundOrderResp struct {
|
||||
Status string `json:"status"` // 退款状态
|
||||
RefundNo string `json:"refund_no"` // 退款单号
|
||||
Amount float64 `json:"amount"` // 退款金额
|
||||
}
|
||||
|
||||
type AdminUpdateFeatureReq struct {
|
||||
Id int64 `path:"id"` // 功能ID
|
||||
ApiId *string `json:"api_id,optional"` // API标识
|
||||
Name *string `json:"name,optional"` // 描述
|
||||
}
|
||||
|
||||
type AdminUpdateFeatureResp struct {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
type AdminUpdateNotificationReq struct {
|
||||
Id int64 `path:"id"` // 通知ID
|
||||
Title *string `json:"title,optional"` // 通知标题
|
||||
Content *string `json:"content,optional"` // 通知内容
|
||||
NotificationPage *string `json:"notification_page,optional"` // 通知页面
|
||||
StartDate *string `json:"start_date,optional"` // 生效开始日期
|
||||
StartTime *string `json:"start_time,optional"` // 生效开始时间
|
||||
EndDate *string `json:"end_date,optional"` // 生效结束日期
|
||||
EndTime *string `json:"end_time,optional"` // 生效结束时间
|
||||
Status *int64 `json:"status,optional"` // 状态
|
||||
}
|
||||
|
||||
type AdminUpdateNotificationResp struct {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
type AdminUpdateOrderReq struct {
|
||||
Id int64 `path:"id"` // 订单ID
|
||||
OrderNo *string `json:"order_no,optional"` // 商户订单号
|
||||
PlatformOrderId *string `json:"platform_order_id,optional"` // 支付订单号
|
||||
ProductName *string `json:"product_name,optional"` // 产品名称
|
||||
PaymentPlatform *string `json:"payment_platform,optional"` // 支付方式
|
||||
PaymentScene *string `json:"payment_scene,optional"` // 支付平台
|
||||
Amount *float64 `json:"amount,optional"` // 金额
|
||||
Status *string `json:"status,optional"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败
|
||||
PayTime *string `json:"pay_time,optional"` // 支付时间
|
||||
RefundTime *string `json:"refund_time,optional"` // 退款时间
|
||||
IsPromotion *int64 `json:"is_promotion,optional"` // 是否推广订单:0-否,1-是
|
||||
}
|
||||
|
||||
type AdminUpdateOrderResp struct {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
type AdminUpdatePlatformUserReq struct {
|
||||
Id int64 `path:"id"` // 用户ID
|
||||
Mobile *string `json:"mobile,optional"` // 手机号
|
||||
Password *string `json:"password,optional"` // 密码
|
||||
Nickname *string `json:"nickname,optional"` // 昵称
|
||||
Info *string `json:"info,optional"` // 备注信息
|
||||
Inside *int64 `json:"inside,optional"` // 是否内部用户 1-是 0-否
|
||||
}
|
||||
|
||||
type AdminUpdatePlatformUserResp struct {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
type AdminUpdateProductFeaturesReq struct {
|
||||
ProductId int64 `path:"product_id"` // 产品ID
|
||||
Features []ProductFeatureItem `json:"features"` // 功能列表
|
||||
}
|
||||
|
||||
type AdminUpdateProductFeaturesResp struct {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
type AdminUpdateProductReq struct {
|
||||
Id int64 `path:"id"` // 产品ID
|
||||
ProductName *string `json:"product_name,optional"` // 服务名
|
||||
ProductEn *string `json:"product_en,optional"` // 英文名
|
||||
Description *string `json:"description,optional"` // 描述
|
||||
Notes *string `json:"notes,optional"` // 备注
|
||||
CostPrice *float64 `json:"cost_price,optional"` // 成本
|
||||
SellPrice *float64 `json:"sell_price,optional"` // 售价
|
||||
}
|
||||
|
||||
type AdminUpdateProductResp struct {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
type AdminUpdateUserReq struct {
|
||||
Id int64 `path:"id"` // 用户ID
|
||||
Username *string `json:"username,optional"` // 用户名
|
||||
@ -81,6 +454,15 @@ type AdminUserInfoResp struct {
|
||||
Roles []string `json:"roles"` // 角色编码列表
|
||||
}
|
||||
|
||||
type AdminUserListItem struct {
|
||||
Id int64 `json:"id"` // 用户ID
|
||||
Username string `json:"username"` // 用户名
|
||||
RealName string `json:"real_name"` // 真实姓名
|
||||
Status int64 `json:"status"` // 状态:0-禁用,1-启用
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
RoleIds []int64 `json:"role_ids"` // 关联的角色ID列表
|
||||
}
|
||||
|
||||
type CreateMenuReq struct {
|
||||
Pid int64 `json:"pid,optional"` // 父菜单ID
|
||||
Name string `json:"name"` // 路由名称
|
||||
@ -149,6 +531,14 @@ type Feature struct {
|
||||
Name string `json:"name"` // 功能描述
|
||||
}
|
||||
|
||||
type FeatureListItem struct {
|
||||
Id int64 `json:"id"` // 功能ID
|
||||
ApiId string `json:"api_id"` // API标识
|
||||
Name string `json:"name"` // 描述
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
type GetMenuAllReq struct {
|
||||
}
|
||||
|
||||
@ -335,6 +725,35 @@ type Notification struct {
|
||||
EndTime string `json:"endTime"` // 每天通知结束时间,格式 "HH:MM:SS"
|
||||
}
|
||||
|
||||
type NotificationListItem struct {
|
||||
Id int64 `json:"id"` // 通知ID
|
||||
Title string `json:"title"` // 通知标题
|
||||
NotificationPage string `json:"notification_page"` // 通知页面
|
||||
Content string `json:"content"` // 通知内容
|
||||
StartDate string `json:"start_date"` // 生效开始日期
|
||||
StartTime string `json:"start_time"` // 生效开始时间
|
||||
EndDate string `json:"end_date"` // 生效结束日期
|
||||
EndTime string `json:"end_time"` // 生效结束时间
|
||||
Status int64 `json:"status"` // 状态
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
type OrderListItem struct {
|
||||
Id int64 `json:"id"` // 订单ID
|
||||
OrderNo string `json:"order_no"` // 商户订单号
|
||||
PlatformOrderId string `json:"platform_order_id"` // 支付订单号
|
||||
ProductName string `json:"product_name"` // 产品名称
|
||||
PaymentPlatform string `json:"payment_platform"` // 支付方式
|
||||
PaymentScene string `json:"payment_scene"` // 支付平台
|
||||
Amount float64 `json:"amount"` // 金额
|
||||
Status string `json:"status"` // 支付状态:pending-待支付,paid-已支付,refunded-已退款,closed-已关闭,failed-支付失败
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
PayTime string `json:"pay_time"` // 支付时间
|
||||
RefundTime string `json:"refund_time"` // 退款时间
|
||||
IsPromotion int64 `json:"is_promotion"` // 是否推广订单:0-否,1-是
|
||||
}
|
||||
|
||||
type PaymentReq struct {
|
||||
Id string `json:"id"`
|
||||
PayMethod string `json:"pay_method"`
|
||||
@ -346,6 +765,16 @@ type PaymentResp struct {
|
||||
OrderID int64 `json:"order_id"`
|
||||
}
|
||||
|
||||
type PlatformUserListItem struct {
|
||||
Id int64 `json:"id"` // 用户ID
|
||||
Mobile string `json:"mobile"` // 手机号
|
||||
Nickname string `json:"nickname"` // 昵称
|
||||
Info string `json:"info"` // 备注信息
|
||||
Inside int64 `json:"inside"` // 是否内部用户 1-是 0-否
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
type Product struct {
|
||||
ProductName string `json:"product_name"`
|
||||
ProductEn string `json:"product_en"`
|
||||
@ -355,6 +784,25 @@ type Product struct {
|
||||
Features []Feature `json:"features"` // 关联功能列表
|
||||
}
|
||||
|
||||
type ProductFeatureItem struct {
|
||||
FeatureId int64 `json:"feature_id"` // 功能ID
|
||||
Sort int64 `json:"sort"` // 排序
|
||||
Enable int64 `json:"enable"` // 是否启用
|
||||
IsImportant int64 `json:"is_important"` // 是否重要
|
||||
}
|
||||
|
||||
type ProductListItem struct {
|
||||
Id int64 `json:"id"` // 产品ID
|
||||
ProductName string `json:"product_name"` // 服务名
|
||||
ProductEn string `json:"product_en"` // 英文名
|
||||
Description string `json:"description"` // 描述
|
||||
Notes string `json:"notes"` // 备注
|
||||
CostPrice float64 `json:"cost_price"` // 成本
|
||||
SellPrice float64 `json:"sell_price"` // 售价
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
UpdateTime string `json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
type ProductResponse struct {
|
||||
Product
|
||||
}
|
||||
@ -573,15 +1021,6 @@ type UserInfoResp struct {
|
||||
UserInfo User `json:"userInfo"`
|
||||
}
|
||||
|
||||
type UserListItem struct {
|
||||
Id int64 `json:"id"` // 用户ID
|
||||
Username string `json:"username"` // 用户名
|
||||
RealName string `json:"real_name"` // 真实姓名
|
||||
Status int64 `json:"status"` // 状态:0-禁用,1-启用
|
||||
CreateTime string `json:"create_time"` // 创建时间
|
||||
RoleIds []int64 `json:"role_ids"` // 关联的角色ID列表
|
||||
}
|
||||
|
||||
type WXH5AuthReq struct {
|
||||
Code string `json:"code"`
|
||||
}
|
||||
|
500
app/main/api/logs/access.log
Normal file
500
app/main/api/logs/access.log
Normal file
@ -0,0 +1,500 @@
|
||||
{"@timestamp":"2025-05-15T12:02:14.955+08:00","caller":"queue/cleanQueryData.go:27","content":"2025-05-15 12:02:14 - 开始执行查询数据清理任务","level":"info"}
|
||||
{"@timestamp":"2025-05-15T12:02:15.289+08:00","caller":"sqlx/stmt.go:274","content":"sql exec: DELETE FROM `query` WHERE create_time < '2025-04-30 12:02:14' AND del_state = 0","duration":"185.2ms","level":"info","span":"0d49fc3e22a92cd4","trace":"a6f957b8d18da08b3f126bc0f4c3ed38"}
|
||||
{"@timestamp":"2025-05-15T12:02:15.292+08:00","caller":"queue/cleanQueryData.go:38","content":"2025-05-15 12:02:15 - 查询数据清理完成,共删除 0 条记录","level":"info"}
|
||||
{"@timestamp":"2025-05-15T12:29:12.198+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"6.8ms","level":"info","span":"8ca64668d965c260","trace":"11ef7b36aae246eddb343cabb66820fb"}
|
||||
{"@timestamp":"2025-05-15T12:29:12.200+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:63674 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"13.3ms","level":"info","span":"12870a71d69da520","trace":"11ef7b36aae246eddb343cabb66820fb"}
|
||||
{"@timestamp":"2025-05-15T12:29:12.237+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.7ms","level":"info","span":"eec1dc49fa661362","trace":"58941b0752becf1c9eb3297b8079f5a1"}
|
||||
{"@timestamp":"2025-05-15T12:29:12.239+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.6ms","level":"info","span":"4a7d5702c8c456a1","trace":"58941b0752becf1c9eb3297b8079f5a1"}
|
||||
{"@timestamp":"2025-05-15T12:29:12.241+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.6ms","level":"info","span":"22531e662411c163","trace":"58941b0752becf1c9eb3297b8079f5a1"}
|
||||
{"@timestamp":"2025-05-15T12:29:12.241+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:63686 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.4ms","level":"info","span":"2007efb430e437b1","trace":"58941b0752becf1c9eb3297b8079f5a1"}
|
||||
{"@timestamp":"2025-05-15T12:29:12.776+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"2.7ms","level":"info","span":"57cd6b032185150f","trace":"6d1ba081877c06b07fed6c5439dfc14b"}
|
||||
{"@timestamp":"2025-05-15T12:29:12.777+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"4e98bbd3f892f5da","trace":"6d1ba081877c06b07fed6c5439dfc14b"}
|
||||
{"@timestamp":"2025-05-15T12:29:12.777+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:63730 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.8ms","level":"info","span":"cbe6ed0de3a5281d","trace":"6d1ba081877c06b07fed6c5439dfc14b"}
|
||||
{"@timestamp":"2025-05-15T12:30:28.216+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"5.8ms","level":"info","span":"5f202c05e6888420","trace":"d773f26e96ed95cb1f5d2f188cc6fb67"}
|
||||
{"@timestamp":"2025-05-15T12:30:28.217+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:64196 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"8.1ms","level":"info","span":"e0640376ad9543a6","trace":"d773f26e96ed95cb1f5d2f188cc6fb67"}
|
||||
{"@timestamp":"2025-05-15T12:30:28.251+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.6ms","level":"info","span":"31668d24847d4a55","trace":"34be1906fc9946a2c18303edb717045c"}
|
||||
{"@timestamp":"2025-05-15T12:30:28.254+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.6ms","level":"info","span":"deacab86a8c6f3af","trace":"34be1906fc9946a2c18303edb717045c"}
|
||||
{"@timestamp":"2025-05-15T12:30:28.256+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"2.1ms","level":"info","span":"24bcd4d4edbf1863","trace":"34be1906fc9946a2c18303edb717045c"}
|
||||
{"@timestamp":"2025-05-15T12:30:28.256+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:64198 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.9ms","level":"info","span":"0801e367f8e82654","trace":"34be1906fc9946a2c18303edb717045c"}
|
||||
{"@timestamp":"2025-05-15T12:30:28.778+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.6ms","level":"info","span":"7c291ce1e7608356","trace":"363d5e0a0b2944b68698f3b2800c9a54"}
|
||||
{"@timestamp":"2025-05-15T12:30:28.780+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"0bae4ffec2264d24","trace":"363d5e0a0b2944b68698f3b2800c9a54"}
|
||||
{"@timestamp":"2025-05-15T12:30:28.780+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:64201 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.8ms","level":"info","span":"a3067ff21c4873be","trace":"363d5e0a0b2944b68698f3b2800c9a54"}
|
||||
{"@timestamp":"2025-05-15T12:34:37.469+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"5.2ms","level":"info","span":"104d6265c41f8393","trace":"066ef0a26466f966539804cff6c6b93b"}
|
||||
{"@timestamp":"2025-05-15T12:34:37.470+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:50549 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"8.2ms","level":"info","span":"37fa3ff3d2243544","trace":"066ef0a26466f966539804cff6c6b93b"}
|
||||
{"@timestamp":"2025-05-15T12:34:37.505+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.6ms","level":"info","span":"fa7d1ba3681f3672","trace":"978b546fb46fce630eab81853839e18e"}
|
||||
{"@timestamp":"2025-05-15T12:34:37.507+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.6ms","level":"info","span":"533455b338510a98","trace":"978b546fb46fce630eab81853839e18e"}
|
||||
{"@timestamp":"2025-05-15T12:34:37.509+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.6ms","level":"info","span":"9bcf35de9c8d8624","trace":"978b546fb46fce630eab81853839e18e"}
|
||||
{"@timestamp":"2025-05-15T12:34:37.509+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:50551 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.3ms","level":"info","span":"1d3714f4fb3e7153","trace":"978b546fb46fce630eab81853839e18e"}
|
||||
{"@timestamp":"2025-05-15T12:34:38.016+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.9ms","level":"info","span":"51ecc3c40d427b4e","trace":"6855849b4e06d3cf536d0f329db6ed73"}
|
||||
{"@timestamp":"2025-05-15T12:34:38.017+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"e741138a4f766791","trace":"6855849b4e06d3cf536d0f329db6ed73"}
|
||||
{"@timestamp":"2025-05-15T12:34:38.017+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:50565 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.0ms","level":"info","span":"2b94f0ebb589f629","trace":"6855849b4e06d3cf536d0f329db6ed73"}
|
||||
{"@timestamp":"2025-05-15T13:35:27.818+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"4.7ms","level":"info","span":"e6728d297b5f57bb","trace":"98301b471e6c921f296a0e17f7d85f1b"}
|
||||
{"@timestamp":"2025-05-15T13:35:27.819+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:56569 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"11.6ms","level":"info","span":"d691f1bfd4cff953","trace":"98301b471e6c921f296a0e17f7d85f1b"}
|
||||
{"@timestamp":"2025-05-15T13:35:27.854+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.6ms","level":"info","span":"576a10f9b828f894","trace":"2edf86399993708401e03c3055424946"}
|
||||
{"@timestamp":"2025-05-15T13:35:27.855+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.6ms","level":"info","span":"1fc6cfb58028dfe0","trace":"2edf86399993708401e03c3055424946"}
|
||||
{"@timestamp":"2025-05-15T13:35:27.857+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.6ms","level":"info","span":"c7434151b7f8f203","trace":"2edf86399993708401e03c3055424946"}
|
||||
{"@timestamp":"2025-05-15T13:35:27.857+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:56580 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"5.3ms","level":"info","span":"31e70730f129be78","trace":"2edf86399993708401e03c3055424946"}
|
||||
{"@timestamp":"2025-05-15T13:35:28.353+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.7ms","level":"info","span":"abe035f3e9dcd2ba","trace":"748b4ea725800142e49d5e8391e02525"}
|
||||
{"@timestamp":"2025-05-15T13:35:28.355+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.1ms","level":"info","span":"6917737a9ea9d8a9","trace":"748b4ea725800142e49d5e8391e02525"}
|
||||
{"@timestamp":"2025-05-15T13:35:28.355+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:56618 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.9ms","level":"info","span":"eb49668bec8dcefd","trace":"748b4ea725800142e49d5e8391e02525"}
|
||||
{"@timestamp":"2025-05-15T13:40:24.560+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 404 - PUT /api/v1/admin/notification/update - [::1]:58634 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"0.0ms","level":"info","span":"b8243375f2658aa7","trace":"48716f3fc08c6f9d9f3db87ffa6d9fe0"}
|
||||
{"@timestamp":"2025-05-15T13:40:40.169+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 404 - PUT /api/v1/admin/notification/update - [::1]:58752 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"0.0ms","level":"info","span":"800b5a86361a5da9","trace":"89c9a006f09537fc246c427f9996435f"}
|
||||
{"@timestamp":"2025-05-15T13:40:46.468+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"6.3ms","level":"info","span":"e0a2fbecd7e0c1e3","trace":"ea94a22ef86298fa3bb8799a56953385"}
|
||||
{"@timestamp":"2025-05-15T13:40:46.470+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:58803 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"8.6ms","level":"info","span":"d50943d18c4e2f01","trace":"ea94a22ef86298fa3bb8799a56953385"}
|
||||
{"@timestamp":"2025-05-15T13:40:46.510+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.2ms","level":"info","span":"4a4a2e4be24d494c","trace":"eabc4cedaada6d816e99cfb617f6406a"}
|
||||
{"@timestamp":"2025-05-15T13:40:46.513+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"2.5ms","level":"info","span":"312399ffabb89b03","trace":"eabc4cedaada6d816e99cfb617f6406a"}
|
||||
{"@timestamp":"2025-05-15T13:40:46.514+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.1ms","level":"info","span":"916dc73d1bea74d6","trace":"eabc4cedaada6d816e99cfb617f6406a"}
|
||||
{"@timestamp":"2025-05-15T13:40:46.515+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:58806 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.8ms","level":"info","span":"1060fa212c425b13","trace":"eabc4cedaada6d816e99cfb617f6406a"}
|
||||
{"@timestamp":"2025-05-15T13:40:46.987+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.7ms","level":"info","span":"466cb21ca7aaff98","trace":"abb328cce5e86de23894f8ef0d1e2199"}
|
||||
{"@timestamp":"2025-05-15T13:40:46.989+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"5e850943266c5877","trace":"abb328cce5e86de23894f8ef0d1e2199"}
|
||||
{"@timestamp":"2025-05-15T13:40:46.989+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:58811 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.3ms","level":"info","span":"73e04aa2cb80b072","trace":"abb328cce5e86de23894f8ef0d1e2199"}
|
||||
{"@timestamp":"2025-05-15T14:10:41.951+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"10.2ms","level":"info","span":"02c3a2d822d58e9a","trace":"00d8b27025522757c6887400e6c37df7"}
|
||||
{"@timestamp":"2025-05-15T14:10:41.952+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:56062 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"12.5ms","level":"info","span":"7a203230dfd73521","trace":"00d8b27025522757c6887400e6c37df7"}
|
||||
{"@timestamp":"2025-05-15T14:10:41.987+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.5ms","level":"info","span":"06dd2b87d05318d0","trace":"fae28007b6acb15952e35752997d2893"}
|
||||
{"@timestamp":"2025-05-15T14:10:41.988+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.1ms","level":"info","span":"42e02c4d469cacae","trace":"fae28007b6acb15952e35752997d2893"}
|
||||
{"@timestamp":"2025-05-15T14:10:41.990+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.6ms","level":"info","span":"73fe2b586c9f9aa8","trace":"fae28007b6acb15952e35752997d2893"}
|
||||
{"@timestamp":"2025-05-15T14:10:41.991+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:56064 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.2ms","level":"info","span":"5f109eb8817db8c6","trace":"fae28007b6acb15952e35752997d2893"}
|
||||
{"@timestamp":"2025-05-15T14:10:42.473+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"2.2ms","level":"info","span":"923388fc556580d2","trace":"07e1888e32b17db897faa164c0a1a2d6"}
|
||||
{"@timestamp":"2025-05-15T14:10:42.474+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"c067f5577e35c71e","trace":"07e1888e32b17db897faa164c0a1a2d6"}
|
||||
{"@timestamp":"2025-05-15T14:10:42.474+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:56068 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.8ms","level":"info","span":"c6b0301667195a86","trace":"07e1888e32b17db897faa164c0a1a2d6"}
|
||||
{"@timestamp":"2025-05-15T14:10:48.804+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.1ms","level":"info","span":"55bbd5460497d9b5","trace":"30aaa5be606f3c2e9865badf11da70e3"}
|
||||
{"@timestamp":"2025-05-15T14:10:48.805+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:56191 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.3ms","level":"info","span":"92f729ab64b9b79f","trace":"30aaa5be606f3c2e9865badf11da70e3"}
|
||||
{"@timestamp":"2025-05-15T14:10:48.842+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"3.6ms","level":"info","span":"48d42e44b82fa76b","trace":"fc48b4f703ad692539f0c99ca64c8cff"}
|
||||
{"@timestamp":"2025-05-15T14:10:48.844+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"2.1ms","level":"info","span":"cf5d059660b99a14","trace":"fc48b4f703ad692539f0c99ca64c8cff"}
|
||||
{"@timestamp":"2025-05-15T14:10:48.845+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.6ms","level":"info","span":"b1183e002babbcf8","trace":"fc48b4f703ad692539f0c99ca64c8cff"}
|
||||
{"@timestamp":"2025-05-15T14:10:48.846+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:56192 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"7.8ms","level":"info","span":"64cc813fa7fad6cf","trace":"fc48b4f703ad692539f0c99ca64c8cff"}
|
||||
{"@timestamp":"2025-05-15T14:10:49.495+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.0ms","level":"info","span":"78694fb4b9617597","trace":"eca6b430e71f9d953fbf9b86dd79d455"}
|
||||
{"@timestamp":"2025-05-15T14:10:49.496+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.1ms","level":"info","span":"9fc7803da2e4e804","trace":"eca6b430e71f9d953fbf9b86dd79d455"}
|
||||
{"@timestamp":"2025-05-15T14:10:49.496+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:56220 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.6ms","level":"info","span":"8625e8cc793450fb","trace":"eca6b430e71f9d953fbf9b86dd79d455"}
|
||||
{"@timestamp":"2025-05-15T14:11:05.455+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 404 - PUT /api/v1/admin/notification/update - [::1]:56274 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"0.0ms","level":"info","span":"039f673094e4e7f5","trace":"a55ab549f123fae67065bfb16a03ee64"}
|
||||
{"@timestamp":"2025-05-15T14:11:12.932+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 404 - PUT /api/v1/admin/notification/update - [::1]:56280 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"0.0ms","level":"info","span":"8e2566faee2ebb8f","trace":"83145cc4845f981e10758253a9a99850"}
|
||||
{"@timestamp":"2025-05-15T14:11:17.127+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 404 - PUT /api/v1/admin/notification/update - [::1]:56296 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"0.0ms","level":"info","span":"a454ee24c185706a","trace":"04615cf6029935e3cbb35a14593ebbe6"}
|
||||
{"@timestamp":"2025-05-15T14:11:30.153+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 404 - PUT /api/v1/admin/notification/update - [::1]:56385 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"0.0ms","level":"info","span":"aade698241597d28","trace":"e2e78b0aa38c6b0bade11aad223b8433"}
|
||||
{"@timestamp":"2025-05-15T14:11:53.328+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"3.6ms","level":"info","span":"e6e6b4cc9ea17e63","trace":"e1700f33c08a9583c24e85c7bb0d5b7f"}
|
||||
{"@timestamp":"2025-05-15T14:11:53.330+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"115ada147940abaf","trace":"e1700f33c08a9583c24e85c7bb0d5b7f"}
|
||||
{"@timestamp":"2025-05-15T14:11:53.330+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:56554 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"5.2ms","level":"info","span":"810f71ffc138fe14","trace":"e1700f33c08a9583c24e85c7bb0d5b7f"}
|
||||
{"@timestamp":"2025-05-15T14:12:14.692+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.6ms","level":"info","span":"a1df2accbbac379d","trace":"9c0d7efbc29cdeae6f0aa0527da715d0"}
|
||||
{"@timestamp":"2025-05-15T14:12:14.692+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:56686 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.7ms","level":"info","span":"4d40c108407189ea","trace":"9c0d7efbc29cdeae6f0aa0527da715d0"}
|
||||
{"@timestamp":"2025-05-15T14:12:14.725+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.1ms","level":"info","span":"eadc8a599db35d2d","trace":"9d08509c540a2e46e44ba76e59c591a3"}
|
||||
{"@timestamp":"2025-05-15T14:12:14.727+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.6ms","level":"info","span":"0dc12e080d474d80","trace":"9d08509c540a2e46e44ba76e59c591a3"}
|
||||
{"@timestamp":"2025-05-15T14:12:14.729+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.6ms","level":"info","span":"bd05a48e3307e92c","trace":"9d08509c540a2e46e44ba76e59c591a3"}
|
||||
{"@timestamp":"2025-05-15T14:12:14.729+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:56687 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.2ms","level":"info","span":"cac74c8a02c49bc8","trace":"9d08509c540a2e46e44ba76e59c591a3"}
|
||||
{"@timestamp":"2025-05-15T14:12:15.249+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.6ms","level":"info","span":"056b322ba9103a5e","trace":"82c3e0ac1044dabec24947ef34d8dc2e"}
|
||||
{"@timestamp":"2025-05-15T14:12:15.250+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"4188860ddbe41ab4","trace":"82c3e0ac1044dabec24947ef34d8dc2e"}
|
||||
{"@timestamp":"2025-05-15T14:12:15.250+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:56690 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.1ms","level":"info","span":"9942b5cf558a6b24","trace":"82c3e0ac1044dabec24947ef34d8dc2e"}
|
||||
{"@timestamp":"2025-05-15T14:12:16.316+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.4ms","level":"info","span":"adec157742ea969c","trace":"d6ef08e1ddd4eefca026f28e46553fab"}
|
||||
{"@timestamp":"2025-05-15T14:12:16.316+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"0.5ms","level":"info","span":"c8d6e5bfd1ec6695","trace":"d6ef08e1ddd4eefca026f28e46553fab"}
|
||||
{"@timestamp":"2025-05-15T14:12:16.316+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:56702 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"1.9ms","level":"info","span":"4bb3674eb57b6a68","trace":"d6ef08e1ddd4eefca026f28e46553fab"}
|
||||
{"@timestamp":"2025-05-15T14:34:11.838+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"6.0ms","level":"info","span":"329ad4d02a6f47c0","trace":"31d0f27a43f2be235e41cb5af67c3b46"}
|
||||
{"@timestamp":"2025-05-15T14:34:11.839+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"ed78cfb7d56ccb50","trace":"31d0f27a43f2be235e41cb5af67c3b46"}
|
||||
{"@timestamp":"2025-05-15T14:34:11.840+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:49329 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"8.1ms","level":"info","span":"d86c0a899cdf1e28","trace":"31d0f27a43f2be235e41cb5af67c3b46"}
|
||||
{"@timestamp":"2025-05-15T14:36:29.422+08:00","caller":"api/main.go:65","content":"Starting server at %s:%d...0.0.0.08888","level":"info"}
|
||||
{"@timestamp":"2025-05-15T14:36:36.021+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.6ms","level":"info","span":"02b860a7784d87fc","trace":"09b1a7612816a23b0202e5df025d0c85"}
|
||||
{"@timestamp":"2025-05-15T14:36:36.022+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:51104 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"9.4ms","level":"info","span":"09842a55abb438b2","trace":"09b1a7612816a23b0202e5df025d0c85"}
|
||||
{"@timestamp":"2025-05-15T14:36:36.067+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.3ms","level":"info","span":"367328ceede93394","trace":"8e1e639f64109952b1249fa52984e9d2"}
|
||||
{"@timestamp":"2025-05-15T14:36:36.070+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"2.7ms","level":"info","span":"f6147ac7214913ee","trace":"8e1e639f64109952b1249fa52984e9d2"}
|
||||
{"@timestamp":"2025-05-15T14:36:36.072+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"2.1ms","level":"info","span":"38cf6632f9f15157","trace":"8e1e639f64109952b1249fa52984e9d2"}
|
||||
{"@timestamp":"2025-05-15T14:36:36.075+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:51106 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"9.8ms","level":"info","span":"e6ffec7d48832677","trace":"8e1e639f64109952b1249fa52984e9d2"}
|
||||
{"@timestamp":"2025-05-15T14:36:36.554+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"2.2ms","level":"info","span":"52cfd395f4520841","trace":"a91ade174968687554c1659eaf139c3f"}
|
||||
{"@timestamp":"2025-05-15T14:36:36.556+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.1ms","level":"info","span":"2e796fb8a1fef002","trace":"a91ade174968687554c1659eaf139c3f"}
|
||||
{"@timestamp":"2025-05-15T14:36:36.556+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:51134 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.3ms","level":"info","span":"f06c72a6edc8e1ec","trace":"a91ade174968687554c1659eaf139c3f"}
|
||||
{"@timestamp":"2025-05-15T14:37:20.699+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.8ms","level":"info","span":"5cbafb76d32a3316","trace":"9a86b7624efb38430743f89bb302a2e6"}
|
||||
{"@timestamp":"2025-05-15T14:37:20.700+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:51773 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"5.5ms","level":"info","span":"85e6569ac49c9039","trace":"9a86b7624efb38430743f89bb302a2e6"}
|
||||
{"@timestamp":"2025-05-15T14:37:20.746+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.6ms","level":"info","span":"3121b41081b5ee67","trace":"41ce9124a90b31b12de3094fa5241f9c"}
|
||||
{"@timestamp":"2025-05-15T14:37:20.748+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.0ms","level":"info","span":"30718ed01ca20ce6","trace":"41ce9124a90b31b12de3094fa5241f9c"}
|
||||
{"@timestamp":"2025-05-15T14:37:20.749+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.0ms","level":"info","span":"f26061bc88d0f7d3","trace":"41ce9124a90b31b12de3094fa5241f9c"}
|
||||
{"@timestamp":"2025-05-15T14:37:20.750+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:51774 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"5.3ms","level":"info","span":"7ebccdc548c2a1da","trace":"41ce9124a90b31b12de3094fa5241f9c"}
|
||||
{"@timestamp":"2025-05-15T14:37:21.412+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.4ms","level":"info","span":"117a8da02525a148","trace":"d5033d5a8c9f33c73eab96beb10911af"}
|
||||
{"@timestamp":"2025-05-15T14:37:21.415+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"3ee7003c30a530e7","trace":"d5033d5a8c9f33c73eab96beb10911af"}
|
||||
{"@timestamp":"2025-05-15T14:37:21.415+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:51778 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.6ms","level":"info","span":"213b7725aacff851","trace":"d5033d5a8c9f33c73eab96beb10911af"}
|
||||
{"@timestamp":"2025-05-15T14:37:59.903+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"32.9ms","level":"info","span":"ea933fe923c408d2","trace":"5eaf6ecb9755a83a2710bd58d51b0e4f"}
|
||||
{"@timestamp":"2025-05-15T14:37:59.905+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"2.1ms","level":"info","span":"4a9ee516c38a9977","trace":"5eaf6ecb9755a83a2710bd58d51b0e4f"}
|
||||
{"@timestamp":"2025-05-15T14:37:59.906+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:52182 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"35.5ms","level":"info","span":"276577acd478b2c1","trace":"5eaf6ecb9755a83a2710bd58d51b0e4f"}
|
||||
{"@timestamp":"2025-05-15T14:38:01.205+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.6ms","level":"info","span":"3246508a9f1affd6","trace":"1d29999a61f4dc2c9c8ff16c48d2b443"}
|
||||
{"@timestamp":"2025-05-15T14:38:01.206+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:52209 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.1ms","level":"info","span":"2ed0f6709ce65423","trace":"1d29999a61f4dc2c9c8ff16c48d2b443"}
|
||||
{"@timestamp":"2025-05-15T14:38:01.243+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.2ms","level":"info","span":"5cee985e2c66feb6","trace":"d7933e4284b4b8be810197d3cc5ca877"}
|
||||
{"@timestamp":"2025-05-15T14:38:01.245+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.6ms","level":"info","span":"af70b0193d38c1b7","trace":"d7933e4284b4b8be810197d3cc5ca877"}
|
||||
{"@timestamp":"2025-05-15T14:38:01.247+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.6ms","level":"info","span":"d08f42fbc0a75301","trace":"d7933e4284b4b8be810197d3cc5ca877"}
|
||||
{"@timestamp":"2025-05-15T14:38:01.247+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:52210 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.9ms","level":"info","span":"739e80ace5ff5c5b","trace":"d7933e4284b4b8be810197d3cc5ca877"}
|
||||
{"@timestamp":"2025-05-15T14:38:01.709+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.6ms","level":"info","span":"9db8bca863205add","trace":"43bc1cff3266da2924b3ebea1d4e39e8"}
|
||||
{"@timestamp":"2025-05-15T14:38:01.710+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"654355085967869c","trace":"43bc1cff3266da2924b3ebea1d4e39e8"}
|
||||
{"@timestamp":"2025-05-15T14:38:01.710+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:52214 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.6ms","level":"info","span":"f912167ca80e8ea5","trace":"43bc1cff3266da2924b3ebea1d4e39e8"}
|
||||
{"@timestamp":"2025-05-15T14:38:10.061+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.4ms","level":"info","span":"6c3cad14ef7bd056","trace":"81c1eb756c107d355624646a2dee5447"}
|
||||
{"@timestamp":"2025-05-15T14:38:10.062+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"b07a34215e8e39a3","trace":"81c1eb756c107d355624646a2dee5447"}
|
||||
{"@timestamp":"2025-05-15T14:38:10.063+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:52221 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.0ms","level":"info","span":"aa6f8cdc22adf180","trace":"81c1eb756c107d355624646a2dee5447"}
|
||||
{"@timestamp":"2025-05-15T14:46:51.386+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"5.6ms","level":"info","span":"c8d3228cf9fa05a5","trace":"a8d13878237dada367e262d975226129"}
|
||||
{"@timestamp":"2025-05-15T14:46:51.386+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:55516 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"7.2ms","level":"info","span":"749f972fd651c2bf","trace":"a8d13878237dada367e262d975226129"}
|
||||
{"@timestamp":"2025-05-15T14:46:51.421+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.4ms","level":"info","span":"29dde8366bf6e7bd","trace":"36e6f2c9b1e2c81a83e140f212171d0f"}
|
||||
{"@timestamp":"2025-05-15T14:46:51.423+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.1ms","level":"info","span":"19eefcd585974557","trace":"36e6f2c9b1e2c81a83e140f212171d0f"}
|
||||
{"@timestamp":"2025-05-15T14:46:51.425+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.1ms","level":"info","span":"9d724f4157f32b67","trace":"36e6f2c9b1e2c81a83e140f212171d0f"}
|
||||
{"@timestamp":"2025-05-15T14:46:51.425+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:55518 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"5.6ms","level":"info","span":"ff071f22abb6ac2f","trace":"36e6f2c9b1e2c81a83e140f212171d0f"}
|
||||
{"@timestamp":"2025-05-15T14:46:51.876+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.7ms","level":"info","span":"322003c98d78374c","trace":"f1e3edb5be8b7a9e9eb1e9e6d0dd01e2"}
|
||||
{"@timestamp":"2025-05-15T14:46:51.878+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.1ms","level":"info","span":"92492cc55685435d","trace":"f1e3edb5be8b7a9e9eb1e9e6d0dd01e2"}
|
||||
{"@timestamp":"2025-05-15T14:46:51.878+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:55522 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.3ms","level":"info","span":"22ad0ea8b65f9224","trace":"f1e3edb5be8b7a9e9eb1e9e6d0dd01e2"}
|
||||
{"@timestamp":"2025-05-15T14:47:05.899+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.6ms","level":"info","span":"c1fc378e35262f18","trace":"1c5824dfd526abac1b04b14a48b54d4c"}
|
||||
{"@timestamp":"2025-05-15T14:47:05.900+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:55610 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.1ms","level":"info","span":"5b8287dd4d22b785","trace":"1c5824dfd526abac1b04b14a48b54d4c"}
|
||||
{"@timestamp":"2025-05-15T14:47:05.936+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.2ms","level":"info","span":"c2507b9080433a60","trace":"c615b6624f7967a2baeeec2a3c73a812"}
|
||||
{"@timestamp":"2025-05-15T14:47:05.938+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.6ms","level":"info","span":"82c8e6a2c171531b","trace":"c615b6624f7967a2baeeec2a3c73a812"}
|
||||
{"@timestamp":"2025-05-15T14:47:05.940+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.0ms","level":"info","span":"bdad564b894d6aa2","trace":"c615b6624f7967a2baeeec2a3c73a812"}
|
||||
{"@timestamp":"2025-05-15T14:47:05.940+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:55611 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.5ms","level":"info","span":"3c870716793d17ab","trace":"c615b6624f7967a2baeeec2a3c73a812"}
|
||||
{"@timestamp":"2025-05-15T14:47:06.445+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.8ms","level":"info","span":"96223791735101f9","trace":"17179835a8e900af42ede648747f9b62"}
|
||||
{"@timestamp":"2025-05-15T14:47:06.446+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"0613db40a49c6c20","trace":"17179835a8e900af42ede648747f9b62"}
|
||||
{"@timestamp":"2025-05-15T14:47:06.447+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:55636 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.3ms","level":"info","span":"e6b6d4fd062236e6","trace":"17179835a8e900af42ede648747f9b62"}
|
||||
{"@timestamp":"2025-05-15T14:47:47.113+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.6ms","level":"info","span":"b6780f83d0b3bc58","trace":"62f52a2f96c9dad0c6556316c430ab1f"}
|
||||
{"@timestamp":"2025-05-15T14:47:47.114+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:55937 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.0ms","level":"info","span":"6a799e956c85e344","trace":"62f52a2f96c9dad0c6556316c430ab1f"}
|
||||
{"@timestamp":"2025-05-15T14:47:47.155+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.6ms","level":"info","span":"68f2979a21178462","trace":"5a69f88efe709b96f9177f9d07f270de"}
|
||||
{"@timestamp":"2025-05-15T14:47:47.157+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.6ms","level":"info","span":"2de51a527817100d","trace":"5a69f88efe709b96f9177f9d07f270de"}
|
||||
{"@timestamp":"2025-05-15T14:47:47.158+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.1ms","level":"info","span":"af9c410327fc4d61","trace":"5a69f88efe709b96f9177f9d07f270de"}
|
||||
{"@timestamp":"2025-05-15T14:47:47.159+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:55938 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"5.3ms","level":"info","span":"58a9583b8bda70ec","trace":"5a69f88efe709b96f9177f9d07f270de"}
|
||||
{"@timestamp":"2025-05-15T14:47:47.602+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.4ms","level":"info","span":"ba1723500fa8b751","trace":"0db2d664df4dfea90a04dbc004ddd33a"}
|
||||
{"@timestamp":"2025-05-15T14:47:47.603+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.1ms","level":"info","span":"6d59620647fdea2f","trace":"0db2d664df4dfea90a04dbc004ddd33a"}
|
||||
{"@timestamp":"2025-05-15T14:47:47.603+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:55942 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.4ms","level":"info","span":"fd412abc23960474","trace":"0db2d664df4dfea90a04dbc004ddd33a"}
|
||||
{"@timestamp":"2025-05-15T14:49:45.830+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"5.2ms","level":"info","span":"2dc7ad3162482f5e","trace":"c30034b52fec293016b4e3131edd5134"}
|
||||
{"@timestamp":"2025-05-15T14:49:45.832+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:56726 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"7.5ms","level":"info","span":"bac4f1805d61a1f7","trace":"c30034b52fec293016b4e3131edd5134"}
|
||||
{"@timestamp":"2025-05-15T14:49:45.865+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.5ms","level":"info","span":"5bca461727211e78","trace":"9c9b4a25fcbdd3fae88f9783109241bc"}
|
||||
{"@timestamp":"2025-05-15T14:49:45.866+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.1ms","level":"info","span":"2a6e48ac966ef9cd","trace":"9c9b4a25fcbdd3fae88f9783109241bc"}
|
||||
{"@timestamp":"2025-05-15T14:49:45.867+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.1ms","level":"info","span":"0ab286416bf4ca5a","trace":"9c9b4a25fcbdd3fae88f9783109241bc"}
|
||||
{"@timestamp":"2025-05-15T14:49:45.868+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:56728 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.1ms","level":"info","span":"864a2c0c08325bb3","trace":"9c9b4a25fcbdd3fae88f9783109241bc"}
|
||||
{"@timestamp":"2025-05-15T14:49:46.419+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.8ms","level":"info","span":"306257bcd4b673a7","trace":"13e976fa3dba1a9a3f75324433c765d1"}
|
||||
{"@timestamp":"2025-05-15T14:49:46.421+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.1ms","level":"info","span":"1e9da66981803518","trace":"13e976fa3dba1a9a3f75324433c765d1"}
|
||||
{"@timestamp":"2025-05-15T14:49:46.421+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:56732 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.9ms","level":"info","span":"b6a51bbe4e127897","trace":"13e976fa3dba1a9a3f75324433c765d1"}
|
||||
{"@timestamp":"2025-05-15T14:50:19.534+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.1ms","level":"info","span":"3121093847d0095c","trace":"69b5c3b6d229aa50d35919ebb6b5c380"}
|
||||
{"@timestamp":"2025-05-15T14:50:19.535+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:57034 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.4ms","level":"info","span":"05af50357546fac3","trace":"69b5c3b6d229aa50d35919ebb6b5c380"}
|
||||
{"@timestamp":"2025-05-15T14:50:19.573+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.6ms","level":"info","span":"e1a81b0b2e5c1b7a","trace":"de776769053cda6ecf8bb705325d08ea"}
|
||||
{"@timestamp":"2025-05-15T14:50:19.574+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.6ms","level":"info","span":"3edd0c42b4d12cef","trace":"de776769053cda6ecf8bb705325d08ea"}
|
||||
{"@timestamp":"2025-05-15T14:50:19.575+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.0ms","level":"info","span":"d1dbd5baeefb1f6a","trace":"de776769053cda6ecf8bb705325d08ea"}
|
||||
{"@timestamp":"2025-05-15T14:50:19.576+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:57035 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.8ms","level":"info","span":"6f529eb949ef4927","trace":"de776769053cda6ecf8bb705325d08ea"}
|
||||
{"@timestamp":"2025-05-15T14:50:20.079+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.5ms","level":"info","span":"d9979ae2c055847a","trace":"168aac9359d21272307ee97557046f0a"}
|
||||
{"@timestamp":"2025-05-15T14:50:20.081+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"ffe7ac22d3e4bf3a","trace":"168aac9359d21272307ee97557046f0a"}
|
||||
{"@timestamp":"2025-05-15T14:50:20.081+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:57038 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.0ms","level":"info","span":"fa3d48e269d1e6f9","trace":"168aac9359d21272307ee97557046f0a"}
|
||||
{"@timestamp":"2025-05-15T14:50:36.551+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.1ms","level":"info","span":"8d159499574611af","trace":"7fae16e5e9675b707090134925291723"}
|
||||
{"@timestamp":"2025-05-15T14:50:36.552+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:57120 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.2ms","level":"info","span":"2d9908111f81c513","trace":"7fae16e5e9675b707090134925291723"}
|
||||
{"@timestamp":"2025-05-15T14:50:36.589+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.6ms","level":"info","span":"ce215969e67b05ec","trace":"1b4e973a6e8a385a9ff7b5f79c1d2580"}
|
||||
{"@timestamp":"2025-05-15T14:50:36.590+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.0ms","level":"info","span":"8b8f605a988505f4","trace":"1b4e973a6e8a385a9ff7b5f79c1d2580"}
|
||||
{"@timestamp":"2025-05-15T14:50:36.591+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.0ms","level":"info","span":"c2d9bdd0572a5699","trace":"1b4e973a6e8a385a9ff7b5f79c1d2580"}
|
||||
{"@timestamp":"2025-05-15T14:50:36.592+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:57121 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.7ms","level":"info","span":"4696e7391831fac0","trace":"1b4e973a6e8a385a9ff7b5f79c1d2580"}
|
||||
{"@timestamp":"2025-05-15T14:50:37.022+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.6ms","level":"info","span":"ef56d4020e7dcc98","trace":"f2f944f84cb7e103939e608d322384d8"}
|
||||
{"@timestamp":"2025-05-15T14:50:37.024+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.7ms","level":"info","span":"59c5d2471a7ebb00","trace":"f2f944f84cb7e103939e608d322384d8"}
|
||||
{"@timestamp":"2025-05-15T14:50:37.025+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:57124 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.3ms","level":"info","span":"d531f53eb3c1f5d5","trace":"f2f944f84cb7e103939e608d322384d8"}
|
||||
{"@timestamp":"2025-05-15T14:52:43.992+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"5.7ms","level":"info","span":"d2f3bc24a1f02fd1","trace":"e14bbc45a4b44810bfe5a70d3581c879"}
|
||||
{"@timestamp":"2025-05-15T14:52:43.992+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:58616 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"7.7ms","level":"info","span":"be236e905468b6f0","trace":"e14bbc45a4b44810bfe5a70d3581c879"}
|
||||
{"@timestamp":"2025-05-15T14:52:44.032+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.6ms","level":"info","span":"7c21a768b0f7ba70","trace":"ef0e96841a35be6d35465a912f02a3d0"}
|
||||
{"@timestamp":"2025-05-15T14:52:44.034+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"2.1ms","level":"info","span":"647bfbbb9dfce28a","trace":"ef0e96841a35be6d35465a912f02a3d0"}
|
||||
{"@timestamp":"2025-05-15T14:52:44.037+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"2.7ms","level":"info","span":"ca1be1c2101dab25","trace":"ef0e96841a35be6d35465a912f02a3d0"}
|
||||
{"@timestamp":"2025-05-15T14:52:44.037+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:58618 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"7.9ms","level":"info","span":"d7ab4d1aba8c354c","trace":"ef0e96841a35be6d35465a912f02a3d0"}
|
||||
{"@timestamp":"2025-05-15T14:52:44.502+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.5ms","level":"info","span":"0a912b0f4af1ecc4","trace":"d3f570110e7d2180ac96894017974240"}
|
||||
{"@timestamp":"2025-05-15T14:52:44.504+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"69acc2c6cd201c33","trace":"d3f570110e7d2180ac96894017974240"}
|
||||
{"@timestamp":"2025-05-15T14:52:44.504+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:58621 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.1ms","level":"info","span":"8b393656bf7371b8","trace":"d3f570110e7d2180ac96894017974240"}
|
||||
{"@timestamp":"2025-05-15T14:56:07.812+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"5.3ms","level":"info","span":"738969102ce199aa","trace":"3fedf5b34e91421354a5bcb571eb18df"}
|
||||
{"@timestamp":"2025-05-15T14:56:07.813+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:59605 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"7.6ms","level":"info","span":"c3f756b35286d1d5","trace":"3fedf5b34e91421354a5bcb571eb18df"}
|
||||
{"@timestamp":"2025-05-15T14:56:07.843+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.4ms","level":"info","span":"54907b8d73c73478","trace":"dfea0bf08c72afdeffa3cd925743847d"}
|
||||
{"@timestamp":"2025-05-15T14:56:07.846+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.6ms","level":"info","span":"c2366261f7115108","trace":"dfea0bf08c72afdeffa3cd925743847d"}
|
||||
{"@timestamp":"2025-05-15T14:56:07.848+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"2.1ms","level":"info","span":"7f89cdd36e985e5a","trace":"dfea0bf08c72afdeffa3cd925743847d"}
|
||||
{"@timestamp":"2025-05-15T14:56:07.848+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:59607 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.7ms","level":"info","span":"393935998a4b938a","trace":"dfea0bf08c72afdeffa3cd925743847d"}
|
||||
{"@timestamp":"2025-05-15T14:56:08.262+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.8ms","level":"info","span":"48a0b6d249ed6bca","trace":"79dc50dc26463b6b0634b12811e465df"}
|
||||
{"@timestamp":"2025-05-15T14:56:08.264+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.7ms","level":"info","span":"109134c91a58872e","trace":"79dc50dc26463b6b0634b12811e465df"}
|
||||
{"@timestamp":"2025-05-15T14:56:08.264+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:59610 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.5ms","level":"info","span":"0cbc4ac81a1e7854","trace":"79dc50dc26463b6b0634b12811e465df"}
|
||||
{"@timestamp":"2025-05-15T14:57:02.542+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.5ms","level":"info","span":"a829f00ee488e8a5","trace":"aec08f2114a43d2889836496c66b1293"}
|
||||
{"@timestamp":"2025-05-15T14:57:02.543+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:59963 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.1ms","level":"info","span":"9768981705b4bb59","trace":"aec08f2114a43d2889836496c66b1293"}
|
||||
{"@timestamp":"2025-05-15T14:57:02.604+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.9ms","level":"info","span":"f4eedbd9b8b206a9","trace":"b7bac1975c311c4f08d5b4e1d984697a"}
|
||||
{"@timestamp":"2025-05-15T14:57:02.605+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.1ms","level":"info","span":"e3b12e9d07d1861c","trace":"b7bac1975c311c4f08d5b4e1d984697a"}
|
||||
{"@timestamp":"2025-05-15T14:57:02.606+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.0ms","level":"info","span":"433298e800350425","trace":"b7bac1975c311c4f08d5b4e1d984697a"}
|
||||
{"@timestamp":"2025-05-15T14:57:02.607+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:59964 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"5.1ms","level":"info","span":"d8c212db0e70a1d4","trace":"b7bac1975c311c4f08d5b4e1d984697a"}
|
||||
{"@timestamp":"2025-05-15T14:57:03.144+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.5ms","level":"info","span":"f80e15cecfdc9f67","trace":"01aa1e74b907e53914f35a7a6e19b7ef"}
|
||||
{"@timestamp":"2025-05-15T14:57:03.145+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"9879d38742428091","trace":"01aa1e74b907e53914f35a7a6e19b7ef"}
|
||||
{"@timestamp":"2025-05-15T14:57:03.145+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:59967 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.5ms","level":"info","span":"6ccc5b8c26315181","trace":"01aa1e74b907e53914f35a7a6e19b7ef"}
|
||||
{"@timestamp":"2025-05-15T15:04:29.603+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"4.7ms","level":"info","span":"dd66ee5f1a4f309f","trace":"7a6c441a32058ae72fcf5f5665b98369"}
|
||||
{"@timestamp":"2025-05-15T15:04:29.604+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:63985 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"7.2ms","level":"info","span":"5577c99cf72bcc45","trace":"7a6c441a32058ae72fcf5f5665b98369"}
|
||||
{"@timestamp":"2025-05-15T15:04:29.628+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.4ms","level":"info","span":"5b6363effad691aa","trace":"c47851afdafa93fd6e2750fb66d91659"}
|
||||
{"@timestamp":"2025-05-15T15:04:29.629+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.6ms","level":"info","span":"f65cd5c563939187","trace":"c47851afdafa93fd6e2750fb66d91659"}
|
||||
{"@timestamp":"2025-05-15T15:04:29.631+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.6ms","level":"info","span":"3d476b0acb4b7203","trace":"c47851afdafa93fd6e2750fb66d91659"}
|
||||
{"@timestamp":"2025-05-15T15:04:29.632+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:63987 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.6ms","level":"info","span":"80f0108cb0d32ad2","trace":"c47851afdafa93fd6e2750fb66d91659"}
|
||||
{"@timestamp":"2025-05-15T15:04:30.050+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.6ms","level":"info","span":"9a1da969cbf59565","trace":"532b4de5d96cce140b34c743aee0bc98"}
|
||||
{"@timestamp":"2025-05-15T15:04:30.051+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"d4314e1fb26954f1","trace":"532b4de5d96cce140b34c743aee0bc98"}
|
||||
{"@timestamp":"2025-05-15T15:04:30.051+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:63991 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.2ms","level":"info","span":"be6bb17d2a70030f","trace":"532b4de5d96cce140b34c743aee0bc98"}
|
||||
{"@timestamp":"2025-05-15T15:04:48.898+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.6ms","level":"info","span":"58fe0a509fa23cda","trace":"7af8ccd62def3cefdced7fa0150dd379"}
|
||||
{"@timestamp":"2025-05-15T15:04:48.898+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:64176 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.0ms","level":"info","span":"f75dba73c31de568","trace":"7af8ccd62def3cefdced7fa0150dd379"}
|
||||
{"@timestamp":"2025-05-15T15:04:48.918+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.7ms","level":"info","span":"9834896b337b094c","trace":"a2bbc112f378629bc1fecae6ddea1f2d"}
|
||||
{"@timestamp":"2025-05-15T15:04:48.920+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.1ms","level":"info","span":"f69641820f2f450d","trace":"a2bbc112f378629bc1fecae6ddea1f2d"}
|
||||
{"@timestamp":"2025-05-15T15:04:48.922+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.0ms","level":"info","span":"533574de9ec9523d","trace":"a2bbc112f378629bc1fecae6ddea1f2d"}
|
||||
{"@timestamp":"2025-05-15T15:04:48.922+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:64177 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.1ms","level":"info","span":"f2b5f0423e158a20","trace":"a2bbc112f378629bc1fecae6ddea1f2d"}
|
||||
{"@timestamp":"2025-05-15T15:04:49.212+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.6ms","level":"info","span":"aa26e0e7b7474d4b","trace":"7701c13dfc4150790c70a87763785022"}
|
||||
{"@timestamp":"2025-05-15T15:04:49.213+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"dcdf4eb0ee90b2e8","trace":"7701c13dfc4150790c70a87763785022"}
|
||||
{"@timestamp":"2025-05-15T15:04:49.213+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:64225 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.2ms","level":"info","span":"f107ef73923e9a31","trace":"7701c13dfc4150790c70a87763785022"}
|
||||
{"@timestamp":"2025-05-15T15:05:01.460+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 404 - PUT /api/v1/admin/notification/update - [::1]:64281 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"0.0ms","level":"info","span":"39d72f553dcf5c18","trace":"5ee6b9fa0ef2970dcfaf00204fd60086"}
|
||||
{"@timestamp":"2025-05-15T15:05:37.034+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"5.3ms","level":"info","span":"5caf4d2cab410f38","trace":"b8d7aa54734da6219ad86adb77f44543"}
|
||||
{"@timestamp":"2025-05-15T15:05:37.035+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:64440 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"7.9ms","level":"info","span":"d103a6bbd6d48c79","trace":"b8d7aa54734da6219ad86adb77f44543"}
|
||||
{"@timestamp":"2025-05-15T15:05:37.072+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.6ms","level":"info","span":"e1403f9ea0584b84","trace":"7dad9d05d8f36b6f79e9770c60590513"}
|
||||
{"@timestamp":"2025-05-15T15:05:37.073+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.0ms","level":"info","span":"aac168e9fc05c1f8","trace":"7dad9d05d8f36b6f79e9770c60590513"}
|
||||
{"@timestamp":"2025-05-15T15:05:37.075+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.6ms","level":"info","span":"886dc5ebc1ff1433","trace":"7dad9d05d8f36b6f79e9770c60590513"}
|
||||
{"@timestamp":"2025-05-15T15:05:37.075+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:64442 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"5.2ms","level":"info","span":"4afee86089048416","trace":"7dad9d05d8f36b6f79e9770c60590513"}
|
||||
{"@timestamp":"2025-05-15T15:05:37.589+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.6ms","level":"info","span":"703d0502d09e7539","trace":"12b1d24506394a4d80ab284b3fd33c0c"}
|
||||
{"@timestamp":"2025-05-15T15:05:37.590+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"9fad59166d3d21d4","trace":"12b1d24506394a4d80ab284b3fd33c0c"}
|
||||
{"@timestamp":"2025-05-15T15:05:37.590+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:64445 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.6ms","level":"info","span":"6ead144f8ff4e655","trace":"12b1d24506394a4d80ab284b3fd33c0c"}
|
||||
{"@timestamp":"2025-05-15T15:05:52.145+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 404 - PUT /api/v1/admin/notification/update - [::1]:64573 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"0.0ms","level":"info","span":"70132d0863400bae","trace":"0384e8daa2e388f85983ee8395d749d8"}
|
||||
{"@timestamp":"2025-05-15T15:05:59.336+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 404 - PUT /api/v1/admin/notification/update - [::1]:64579 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"0.0ms","level":"info","span":"be712e2d37b93dd2","trace":"10984f46912bb19b7ce2a27eb48b4f6a"}
|
||||
{"@timestamp":"2025-05-15T15:11:17.138+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE status = 'inactive' AND del_state = 0","duration":"15.5ms","level":"info","span":"394c1e4ccb0e19d2","trace":"def45a31f2a193856597cd7dc34fdaaa"}
|
||||
{"@timestamp":"2025-05-15T15:11:17.140+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE status = 'inactive' AND del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"10881db0c5ba6904","trace":"def45a31f2a193856597cd7dc34fdaaa"}
|
||||
{"@timestamp":"2025-05-15T15:11:17.140+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20&status=inactive - [::1]:50499 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"18.0ms","level":"info","span":"ec1429b4375f9220","trace":"def45a31f2a193856597cd7dc34fdaaa"}
|
||||
{"@timestamp":"2025-05-15T15:11:17.475+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE status = 'inactive' AND del_state = 0","duration":"1.5ms","level":"info","span":"08754e77eb48d6c5","trace":"d7f6ff2faea733a5d80d1787088ff77d"}
|
||||
{"@timestamp":"2025-05-15T15:11:17.476+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE status = 'inactive' AND del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"22658b788fc1271b","trace":"d7f6ff2faea733a5d80d1787088ff77d"}
|
||||
{"@timestamp":"2025-05-15T15:11:17.476+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20&status=inactive - [::1]:50504 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.0ms","level":"info","span":"cd8ee9caec48b76b","trace":"d7f6ff2faea733a5d80d1787088ff77d"}
|
||||
{"@timestamp":"2025-05-15T15:11:18.693+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE status = 'active' AND del_state = 0","duration":"1.5ms","level":"info","span":"a69debf9a6f29e8d","trace":"876eb1b3fdb783fbf137ca7b1b91856b"}
|
||||
{"@timestamp":"2025-05-15T15:11:18.694+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE status = 'active' AND del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"0.5ms","level":"info","span":"a837255f2fb0d7db","trace":"876eb1b3fdb783fbf137ca7b1b91856b"}
|
||||
{"@timestamp":"2025-05-15T15:11:18.694+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20&status=active - [::1]:50508 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.0ms","level":"info","span":"b26edcf575237191","trace":"876eb1b3fdb783fbf137ca7b1b91856b"}
|
||||
{"@timestamp":"2025-05-15T15:11:19.569+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.6ms","level":"info","span":"c2c10bb04dbd5daa","trace":"3cf87cb2ca8febd3f72178ae8ded68bb"}
|
||||
{"@timestamp":"2025-05-15T15:11:19.570+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"66d8afc7a2ef2dee","trace":"3cf87cb2ca8febd3f72178ae8ded68bb"}
|
||||
{"@timestamp":"2025-05-15T15:11:19.570+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:50511 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.2ms","level":"info","span":"26958c2a0c497387","trace":"3cf87cb2ca8febd3f72178ae8ded68bb"}
|
||||
{"@timestamp":"2025-05-15T15:12:24.499+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` from `global_notifications` where `id` = 4 and del_state = 0 limit 1","duration":"3.7ms","level":"info","span":"ee910b8fc47ee4a8","trace":"86a49825f320f9d6735b58d19188c942"}
|
||||
{"@timestamp":"2025-05-15T15:12:24.500+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - DELETE /api/v1/admin/notification/delete/4 - [::1]:50919 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.3ms","level":"info","span":"bce16c7987c89bb9","trace":"86a49825f320f9d6735b58d19188c942"}
|
||||
{"@timestamp":"2025-05-15T15:13:49.635+08:00","caller":"api/main.go:65","content":"Starting server at %s:%d...0.0.0.08888","level":"info"}
|
||||
{"@timestamp":"2025-05-15T15:13:56.002+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.6ms","level":"info","span":"8efea0d4edfff728","trace":"355f7c8707389d8650a07bbf270df793"}
|
||||
{"@timestamp":"2025-05-15T15:13:56.003+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:51954 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"9.2ms","level":"info","span":"7597f0f5fcdaf390","trace":"355f7c8707389d8650a07bbf270df793"}
|
||||
{"@timestamp":"2025-05-15T15:13:56.053+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.7ms","level":"info","span":"648cf2880d6a8d9e","trace":"5e1646f2a90b291b63e17328b27608fa"}
|
||||
{"@timestamp":"2025-05-15T15:13:56.055+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.6ms","level":"info","span":"479c3a0e4e06b5cf","trace":"5e1646f2a90b291b63e17328b27608fa"}
|
||||
{"@timestamp":"2025-05-15T15:13:56.058+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"2.6ms","level":"info","span":"28f7c99701284705","trace":"5e1646f2a90b291b63e17328b27608fa"}
|
||||
{"@timestamp":"2025-05-15T15:13:56.061+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:51956 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"12.2ms","level":"info","span":"794b329f85603258","trace":"5e1646f2a90b291b63e17328b27608fa"}
|
||||
{"@timestamp":"2025-05-15T15:13:56.597+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"2.4ms","level":"info","span":"06d0600539d5e981","trace":"f516882af69315fc50db1ef3f0550580"}
|
||||
{"@timestamp":"2025-05-15T15:13:56.599+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"2.1ms","level":"info","span":"9aab2cb930c09dfc","trace":"f516882af69315fc50db1ef3f0550580"}
|
||||
{"@timestamp":"2025-05-15T15:13:56.600+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:51959 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"5.0ms","level":"info","span":"894651eb02d6b289","trace":"f516882af69315fc50db1ef3f0550580"}
|
||||
{"@timestamp":"2025-05-15T15:13:58.686+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `user` WHERE del_state = 0","duration":"48.9ms","level":"info","span":"c1f62a93c788ccc3","trace":"ed213b263c1a5506e8bbed5a6c1d70a5"}
|
||||
{"@timestamp":"2025-05-15T15:13:58.688+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`mobile`,`password`,`nickname`,`info`,`inside` FROM `user` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.5ms","level":"info","span":"dd7bb76200c5ef1e","trace":"ed213b263c1a5506e8bbed5a6c1d70a5"}
|
||||
{"@timestamp":"2025-05-15T15:13:58.688+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/platform_user/list?page=1&pageSize=20 - [::1]:51961 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"51.0ms","level":"info","span":"466ac6e949eee534","trace":"ed213b263c1a5506e8bbed5a6c1d70a5"}
|
||||
{"@timestamp":"2025-05-15T15:14:04.233+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `user` WHERE del_state = 0","duration":"2.1ms","level":"info","span":"78852dd33e44813b","trace":"4ecd52cc180c1ed53fd17828bdd84d37"}
|
||||
{"@timestamp":"2025-05-15T15:14:04.235+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`mobile`,`password`,`nickname`,`info`,`inside` FROM `user` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 4380","duration":"2.1ms","level":"info","span":"38658f914c9e5a03","trace":"4ecd52cc180c1ed53fd17828bdd84d37"}
|
||||
{"@timestamp":"2025-05-15T15:14:04.235+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/platform_user/list?page=220&pageSize=20 - [::1]:51971 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.7ms","level":"info","span":"26e953fbc147ff2b","trace":"4ecd52cc180c1ed53fd17828bdd84d37"}
|
||||
{"@timestamp":"2025-05-15T15:14:08.771+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 404 - PUT /api/v1/admin/platform_user/update/1 - [::1]:51975 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"0.0ms","level":"info","span":"b4982519124a68cf","trace":"fbe27a5c174f35a30f999f5e509de8ca"}
|
||||
{"@timestamp":"2025-05-15T15:15:43.715+08:00","caller":"api/main.go:65","content":"Starting server at %s:%d...0.0.0.08888","level":"info"}
|
||||
{"@timestamp":"2025-05-15T15:16:22.004+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.6ms","level":"info","span":"7fab3149e19aa0a8","trace":"5dbc5a1e574c55c3cb0f84e30f0a6eec"}
|
||||
{"@timestamp":"2025-05-15T15:16:22.006+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:53211 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"8.9ms","level":"info","span":"5dc8e518e5e56edb","trace":"5dbc5a1e574c55c3cb0f84e30f0a6eec"}
|
||||
{"@timestamp":"2025-05-15T15:16:22.055+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.8ms","level":"info","span":"17a7e2124852bb82","trace":"f8893cea346e39bc41c6f61ef556f9c7"}
|
||||
{"@timestamp":"2025-05-15T15:16:22.057+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.1ms","level":"info","span":"37559e55a012d489","trace":"f8893cea346e39bc41c6f61ef556f9c7"}
|
||||
{"@timestamp":"2025-05-15T15:16:22.059+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.1ms","level":"info","span":"329634aee4e66ab0","trace":"f8893cea346e39bc41c6f61ef556f9c7"}
|
||||
{"@timestamp":"2025-05-15T15:16:22.061+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:53213 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"8.2ms","level":"info","span":"b1cf209141c2c6be","trace":"f8893cea346e39bc41c6f61ef556f9c7"}
|
||||
{"@timestamp":"2025-05-15T15:16:23.147+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `user` WHERE del_state = 0","duration":"2.7ms","level":"info","span":"2913f7f4e14eaf58","trace":"cb19a5304befb7321dd24f16b8f279b1"}
|
||||
{"@timestamp":"2025-05-15T15:16:23.147+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`mobile`,`password`,`nickname`,`info`,`inside` FROM `user` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"0.5ms","level":"info","span":"9cfa58d4e7f9add6","trace":"cb19a5304befb7321dd24f16b8f279b1"}
|
||||
{"@timestamp":"2025-05-15T15:16:23.148+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/platform_user/list?page=1&pageSize=20 - [::1]:53219 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.8ms","level":"info","span":"e027d1f11eb08fd7","trace":"cb19a5304befb7321dd24f16b8f279b1"}
|
||||
{"@timestamp":"2025-05-15T15:16:33.305+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"2.3ms","level":"info","span":"257085f958a8e3ec","trace":"a847a5bee6826a3d7b7dda6cd42ac01b"}
|
||||
{"@timestamp":"2025-05-15T15:16:33.307+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"33f464c278eeede6","trace":"a847a5bee6826a3d7b7dda6cd42ac01b"}
|
||||
{"@timestamp":"2025-05-15T15:16:33.307+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:53338 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.4ms","level":"info","span":"70a798c8cc05a396","trace":"a847a5bee6826a3d7b7dda6cd42ac01b"}
|
||||
{"@timestamp":"2025-05-15T15:16:40.907+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` from `global_notifications` where `id` = 3 and del_state = 0 limit 1","duration":"1.0ms","level":"info","span":"d7196b561f6bc984","trace":"41f2a4d6ffade6e2b0523212b71d6c8e"}
|
||||
{"@timestamp":"2025-05-15T15:16:40.911+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - PUT /api/v1/admin/notification/update/3 - [::1]:53388 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"5.3ms","level":"info","span":"1787695655594302","trace":"41f2a4d6ffade6e2b0523212b71d6c8e"}
|
||||
{"@timestamp":"2025-05-15T15:28:23.920+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - PUT /api/v1/admin/notification/update/3 - [::1]:57473 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"1.1ms","level":"info","span":"690bc5b4ab2fc543","trace":"8a6ea2e1ee3add71fe988caf55916061"}
|
||||
{"@timestamp":"2025-05-15T15:29:51.042+08:00","caller":"api/main.go:65","content":"Starting server at %s:%d...0.0.0.08888","level":"info"}
|
||||
{"@timestamp":"2025-05-15T15:29:56.036+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - PUT /api/v1/admin/notification/update/3 - [::1]:58053 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"7.5ms","level":"info","span":"d9f4e055384cc73f","trace":"c14d7c4e38a84e333f31d899ce3df99a"}
|
||||
{"@timestamp":"2025-05-15T15:30:33.437+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `user` WHERE del_state = 0","duration":"2.1ms","level":"info","span":"f20b77281e1dca2f","trace":"e1bd06cea4ba10543e875677ed458716"}
|
||||
{"@timestamp":"2025-05-15T15:30:33.439+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`mobile`,`password`,`nickname`,`info`,`inside` FROM `user` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"c0e603b75e031380","trace":"e1bd06cea4ba10543e875677ed458716"}
|
||||
{"@timestamp":"2025-05-15T15:30:33.439+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/platform_user/list?page=1&pageSize=20 - [::1]:58175 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.7ms","level":"info","span":"fe8a6af518294aee","trace":"e1bd06cea4ba10543e875677ed458716"}
|
||||
{"@timestamp":"2025-05-15T15:30:34.294+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `user` WHERE del_state = 0","duration":"2.2ms","level":"info","span":"ff1ba0bdec4f4ff7","trace":"248e4b4225b12e3a0a6b512b501411c3"}
|
||||
{"@timestamp":"2025-05-15T15:30:34.297+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`mobile`,`password`,`nickname`,`info`,`inside` FROM `user` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 4380","duration":"2.2ms","level":"info","span":"1bc720e5c5c1b1c0","trace":"248e4b4225b12e3a0a6b512b501411c3"}
|
||||
{"@timestamp":"2025-05-15T15:30:34.297+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/platform_user/list?page=220&pageSize=20 - [::1]:58179 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.4ms","level":"info","span":"c6837522bffb496a","trace":"248e4b4225b12e3a0a6b512b501411c3"}
|
||||
{"@timestamp":"2025-05-15T15:30:37.540+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`mobile`,`password`,`nickname`,`info`,`inside` from `user` where `id` = 1 and del_state = 0 limit 1","duration":"1.2ms","level":"info","span":"bb76c7931fe479c8","trace":"5adbb30f9c63e6c3d981bfd3203bb665"}
|
||||
{"@timestamp":"2025-05-15T15:30:37.576+08:00","caller":"sqlx/stmt.go:274","content":"sql exec: update `user` set `delete_time`={0001-01-01 00:00:00 +0000 UTC false},`del_state`=0,`version`=0,`mobile`='6YOGOyDLWF8EfQlf+wBeSQ==',`password`={7305e58de264a489e59c223bb4ff29f8 true},`nickname`={十分靓仔 true},`info`='',`inside`=0 where `id` = 1","duration":"35.0ms","level":"info","span":"4c7fd4c33d57da78","trace":"5adbb30f9c63e6c3d981bfd3203bb665"}
|
||||
{"@timestamp":"2025-05-15T15:30:37.577+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - PUT /api/v1/admin/platform_user/update/1 - [::1]:58183 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"39.2ms","level":"info","span":"6bffbc4286c21112","trace":"5adbb30f9c63e6c3d981bfd3203bb665"}
|
||||
{"@timestamp":"2025-05-15T15:30:37.601+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `user` WHERE del_state = 0","duration":"2.2ms","level":"info","span":"690e2b9af8b3c4bb","trace":"31b35590c30ff715bac4035c09079c2a"}
|
||||
{"@timestamp":"2025-05-15T15:30:37.604+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`mobile`,`password`,`nickname`,`info`,`inside` FROM `user` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 4380","duration":"2.7ms","level":"info","span":"53ef46e42229741a","trace":"31b35590c30ff715bac4035c09079c2a"}
|
||||
{"@timestamp":"2025-05-15T15:30:37.604+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/platform_user/list?page=220&pageSize=20 - [::1]:58185 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.8ms","level":"info","span":"e414b5550a4d0a66","trace":"31b35590c30ff715bac4035c09079c2a"}
|
||||
{"@timestamp":"2025-05-15T15:30:41.529+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`mobile`,`password`,`nickname`,`info`,`inside` from `user` where `id` = 1 and del_state = 0 limit 1","duration":"2.2ms","level":"info","span":"8c90ad9eabc9f30d","trace":"7867042e672c83a0c9bb3dc3b6419bb9"}
|
||||
{"@timestamp":"2025-05-15T15:30:41.547+08:00","caller":"sqlx/stmt.go:274","content":"sql exec: update `user` set `delete_time`={0001-01-01 00:00:00 +0000 UTC false},`del_state`=0,`version`=0,`mobile`='6YOGOyDLWF8EfQlf+wBeSQ==',`password`={7305e58de264a489e59c223bb4ff29f8 true},`nickname`={十分靓仔 true},`info`='',`inside`=1 where `id` = 1","duration":"14.4ms","level":"info","span":"5288d07ff3af5237","trace":"7867042e672c83a0c9bb3dc3b6419bb9"}
|
||||
{"@timestamp":"2025-05-15T15:30:41.549+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - PUT /api/v1/admin/platform_user/update/1 - [::1]:58265 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"23.6ms","level":"info","span":"714e27156b2e0f44","trace":"7867042e672c83a0c9bb3dc3b6419bb9"}
|
||||
{"@timestamp":"2025-05-15T15:30:41.577+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `user` WHERE del_state = 0","duration":"2.1ms","level":"info","span":"21511879f4670b9e","trace":"d465228fcdadcf61b0a4991ed001ae02"}
|
||||
{"@timestamp":"2025-05-15T15:30:41.579+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`mobile`,`password`,`nickname`,`info`,`inside` FROM `user` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 4380","duration":"2.1ms","level":"info","span":"94617cab3129f807","trace":"d465228fcdadcf61b0a4991ed001ae02"}
|
||||
{"@timestamp":"2025-05-15T15:30:41.579+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/platform_user/list?page=220&pageSize=20 - [::1]:58267 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.2ms","level":"info","span":"dd18f8625b27fade","trace":"d465228fcdadcf61b0a4991ed001ae02"}
|
||||
{"@timestamp":"2025-05-15T15:30:43.570+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"2.5ms","level":"info","span":"4b7177b4d28f5dad","trace":"f4e7078954702a1fe53db0a01f36e5dd"}
|
||||
{"@timestamp":"2025-05-15T15:30:43.572+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_at`,`updated_at`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"8a23cabc5d06ff99","trace":"f4e7078954702a1fe53db0a01f36e5dd"}
|
||||
{"@timestamp":"2025-05-15T15:30:43.572+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:58292 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"5.1ms","level":"info","span":"85c5693779dcc283","trace":"f4e7078954702a1fe53db0a01f36e5dd"}
|
||||
{"@timestamp":"2025-05-15T15:41:44.549+08:00","caller":"api/main.go:65","content":"Starting server at %s:%d...0.0.0.08888","level":"info"}
|
||||
{"@timestamp":"2025-05-15T15:42:08.935+08:00","caller":"sqlx/stmt.go:274","content":"sql exec: update `global_notifications` set `title`='元旦节日惠客通知',`content`='<p>🎉元旦感恩特惠活动公告🎉 尊敬的用户,您好!为庆祝元旦节日,我们特别推出限时优惠活动: 活动时间: 2025年1月1日12:00 至 2025年1月2日12:00 活动内容: 活动期间内,所有功能无限次数通通 2折 优惠! 参与方式: 在活动时间内登录系统,即可享受所有服务 2 折优惠,机会难得,不容错过! 温馨提示: 为了方便您参与未来更多优惠活动,请将我们的网站收藏到您的浏览器书签中,或在百度搜索随时访问我们的最新动态和活动信息! 活动解释权归平台所有。 感谢您的支持,祝您元旦快乐!🎊</p>',`notification_page`='/',`start_date`={2025-01-01 00:00:00 +0000 UTC true},`end_date`={2025-01-02 00:00:00 +0000 UTC true},`start_time`='',`end_time`='',`created_time`='0001-01-01 00:00:00 +0000 UTC',`updated_time`='0001-01-01 00:00:00 +0000 UTC',`status`='inactive',`del_state`=0,`version`=1,`delete_time`={0001-01-01 00:00:00 +0000 UTC false} where `id` = 3","duration":"3.7ms","level":"info","span":"94463b3d515ade48","trace":"28ca068539c01ebd5e93b87b2f4db8c7"}
|
||||
{"@timestamp":"2025-05-15T15:42:08.935+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - PUT /api/v1/admin/notification/update/3 - [::1]:63609 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"8.1ms","level":"info","span":"09470cfafab12cfc","trace":"28ca068539c01ebd5e93b87b2f4db8c7"}
|
||||
{"@timestamp":"2025-05-15T15:43:50.516+08:00","caller":"api/main.go:65","content":"Starting server at %s:%d...0.0.0.08888","level":"info"}
|
||||
{"@timestamp":"2025-05-15T15:43:59.434+08:00","caller":"sqlx/stmt.go:274","content":"sql exec: update `global_notifications` set `title`='元旦节日惠客通知',`content`='<p>🎉元旦感恩特惠活动公告🎉 尊敬的用户,您好!为庆祝元旦节日,我们特别推出限时优惠活动: 活动时间: 2025年1月1日12:00 至 2025年1月2日12:00 活动内容: 活动期间内,所有功能无限次数通通 2折 优惠! 参与方式: 在活动时间内登录系统,即可享受所有服务 2 折优惠,机会难得,不容错过! 温馨提示: 为了方便您参与未来更多优惠活动,请将我们的网站收藏到您的浏览器书签中,或在百度搜索随时访问我们的最新动态和活动信息! 活动解释权归平台所有。 感谢您的支持,祝您元旦快乐!🎊</p>',`notification_page`='/',`start_date`={2025-01-01 00:00:00 +0000 UTC true},`end_date`={2025-01-02 00:00:00 +0000 UTC true},`start_time`='',`end_time`='',`created_time`='0001-01-01 00:00:00 +0000 UTC',`updated_time`='0001-01-01 00:00:00 +0000 UTC',`status`='inactive',`del_state`=0,`version`=1,`delete_time`={0001-01-01 00:00:00 +0000 UTC false} where `id` = 3","duration":"2.7ms","level":"info","span":"05dda203e991ed65","trace":"0628633c2e124a03269789a41c9f0be5"}
|
||||
{"@timestamp":"2025-05-15T15:43:59.435+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - PUT /api/v1/admin/notification/update/3 - [::1]:64238 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"8.5ms","level":"info","span":"5e7c558378b89b9b","trace":"0628633c2e124a03269789a41c9f0be5"}
|
||||
{"@timestamp":"2025-05-15T15:45:03.689+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_time`,`updated_time`,`status`,`del_state`,`version`,`delete_time` from `global_notifications` where `id` = 1 and del_state = 0 limit 1","duration":"3.7ms","level":"info","span":"28f862bd16ef8897","trace":"3f79274580eaf8984bd9f7877044bcb1"}
|
||||
{"@timestamp":"2025-05-15T15:45:03.697+08:00","caller":"sqlx/stmt.go:274","content":"sql exec: update `global_notifications` set `title`='通知',`content`='<div class=\\\"font-2xl font-bold mb-2\\\">通知</div>\\n<p class=\\\"mb-4\\\">\\n 尊敬的用户,您好!由于民政部门的系统升级,近期婚姻报告服务将在每晚凌晨0点至2点30分进行维护,期间停止查询。\\n 我们深感抱歉,给您带来的不便敬请谅解。\\n</p>\\n<p class=\\\"text-base text-gray-500 mb-4\\\">\\n 请您在维护完成后再尝试查询。感谢您的理解与支持!\\n</p>\\n',`notification_page`='/inquire/toc_Marriage',`start_date`={0001-01-01 00:00:00 +0000 UTC false},`end_date`={0001-01-01 00:00:00 +0000 UTC false},`start_time`='00:00:00',`end_time`='02:30:00',`created_time`='2024-12-31 21:51:54 +0800 CST',`updated_time`='2025-01-14 11:34:22 +0800 CST',`status`='inactive',`del_state`=1,`version`=1,`delete_time`={2025-05-15 15:45:03.6900656 +0800 CST m=+73.196598201 true} where `id` = 1 and version = 0 ","duration":"7.3ms","level":"info","span":"57e9e50454c90162","trace":"3f79274580eaf8984bd9f7877044bcb1"}
|
||||
{"@timestamp":"2025-05-15T15:45:03.697+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - DELETE /api/v1/admin/notification/delete/1 - [::1]:64772 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"14.2ms","level":"info","span":"63849fc74c7f2b04","trace":"3f79274580eaf8984bd9f7877044bcb1"}
|
||||
{"@timestamp":"2025-05-15T15:45:03.732+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.7ms","level":"info","span":"dd535183b6bf23e6","trace":"cd941ff6f0ae3362cbf0c6c26ab2ad6c"}
|
||||
{"@timestamp":"2025-05-15T15:45:03.733+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_time`,`updated_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.1ms","level":"info","span":"b7d6d1bc4c1e2ac4","trace":"cd941ff6f0ae3362cbf0c6c26ab2ad6c"}
|
||||
{"@timestamp":"2025-05-15T15:45:03.733+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:64780 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.8ms","level":"info","span":"e579bcd76c1dc810","trace":"cd941ff6f0ae3362cbf0c6c26ab2ad6c"}
|
||||
{"@timestamp":"2025-05-15T15:45:08.357+08:00","caller":"sqlx/stmt.go:274","content":"sql exec: update `global_notifications` set `title`='通知',`content`='<div class=\\\"font-2xl font-bold mb-2\\\">升级通知</div> \\r\\n<p class=\\\"mb-4\\\">\\r\\n 尊敬的用户,您好!由于平台进行全面功能升级,今日12点至下午15点期间,所有功能将暂时不可用。 \\r\\n 我们深感抱歉,给您带来的不便敬请谅解。\\r\\n</p>\\r\\n<p class=\\\"text-base text-gray-500 mb-4\\\">\\r\\n 请您在升级完成后再尝试使用相关功能。感谢您的理解与支持!\\r\\n</p>\\r\\n',`notification_page`='/',`start_date`={0001-01-01 00:00:00 +0000 UTC false},`end_date`={0001-01-01 00:00:00 +0000 UTC false},`start_time`='12:00:00',`end_time`='15:00:00',`created_time`='0001-01-01 00:00:00 +0000 UTC',`updated_time`='0001-01-01 00:00:00 +0000 UTC',`status`='inactive',`del_state`=1,`version`=1,`delete_time`={2025-05-15 15:45:08.3562001 +0800 CST m=+77.862732701 true} where `id` = 4 and version = 0 ","duration":"1.0ms","level":"info","span":"099ec10c8fcaa297","trace":"01027e3fb1f1d7700eeb0467712590b4"}
|
||||
{"@timestamp":"2025-05-15T15:45:08.357+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - DELETE /api/v1/admin/notification/delete/4 - [::1]:64828 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"1.9ms","level":"info","span":"6099296888d29cb1","trace":"01027e3fb1f1d7700eeb0467712590b4"}
|
||||
{"@timestamp":"2025-05-15T15:45:18.242+08:00","caller":"sqlx/stmt.go:274","content":"sql exec: update `global_notifications` set `title`='通知',`content`='<div class=\\\"font-2xl font-bold mb-2\\\">升级通知</div> \\r\\n<p class=\\\"mb-4\\\">\\r\\n 尊敬的用户,您好!由于平台进行全面功能升级,今日12点至下午15点期间,所有功能将暂时不可用。 \\r\\n 我们深感抱歉,给您带来的不便敬请谅解。\\r\\n</p>\\r\\n<p class=\\\"text-base text-gray-500 mb-4\\\">\\r\\n 请您在升级完成后再尝试使用相关功能。感谢您的理解与支持!\\r\\n</p>\\r\\n',`notification_page`='/',`start_date`={0001-01-01 00:00:00 +0000 UTC false},`end_date`={0001-01-01 00:00:00 +0000 UTC false},`start_time`='12:00:00',`end_time`='15:00:00',`created_time`='0001-01-01 00:00:00 +0000 UTC',`updated_time`='0001-01-01 00:00:00 +0000 UTC',`status`='inactive',`del_state`=1,`version`=1,`delete_time`={2025-05-15 15:45:18.2411283 +0800 CST m=+87.747660901 true} where `id` = 4 and version = 0 ","duration":"1.1ms","level":"info","span":"27a568bb7c17df60","trace":"3fa21f5f87161092d428e62480cdea7a"}
|
||||
{"@timestamp":"2025-05-15T15:45:18.242+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - DELETE /api/v1/admin/notification/delete/4 - [::1]:64871 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.6ms","level":"info","span":"8475cb20edf83232","trace":"3fa21f5f87161092d428e62480cdea7a"}
|
||||
{"@timestamp":"2025-05-15T15:45:19.566+08:00","caller":"sqlx/stmt.go:274","content":"sql exec: update `global_notifications` set `title`='元旦节日惠客通知',`content`='<div style=\\\"font-family: Arial, sans-serif; line-height: 1.3; color: #333;\\\">\\n <h2 style=\\\"text-align: center; color: #d9534f; font-size: 24px; margin-bottom: 20px;\\\">🎉元旦感恩特惠活动公告🎉</h2>\\n \\n <p style=\\\"font-size: 18px; margin-bottom: 10px;\\\">\\n 尊敬的用户,您好!为庆祝元旦节日,我们特别推出限时优惠活动:\\n </p>\\n \\n <p style=\\\"font-size: 16px; margin-bottom: 10px;\\\">\\n <strong style=\\\"color: #d9534f;\\\">活动时间:</strong> \\n <span style=\\\"color: #0275d8;\\\">2025年1月1日12:00 至 2025年1月2日12:00</span>\\n </p>\\n \\n <p style=\\\"font-size: 16px; margin-bottom: 10px;\\\">\\n <strong style=\\\"color: #d9534f;\\\">活动内容:</strong> \\n 活动期间内,所有功能无限次数通通 \\n <span style=\\\"color: #d9534f; font-weight: bold; font-size: 20px;\\\">2折</span> 优惠!\\n </p>\\n \\n <p style=\\\"font-size: 16px; margin-bottom: 10px;\\\">\\n <strong style=\\\"color: #d9534f;\\\">参与方式:</strong> \\n 在活动时间内登录系统,即可享受所有服务 2 折优惠,机会难得,不容错过!\\n </p>\\n \\n <p style=\\\"font-size: 16px; margin-bottom: 10px; color: #333;\\\">\\n <strong style=\\\"color: #5cb85c;\\\">温馨提示:</strong>\\n 为了方便您参与未来更多优惠活动,请将我们的网站收藏到您的浏览器书签中,或在百度搜索随时访问我们的最新动态和活动信息!\\n </p>\\n \\n <p style=\\\"font-size: 14px; margin-bottom: 10px; color: #888;\\\">\\n 活动解释权归平台所有。\\n </p>\\n \\n <p style=\\\"text-align: center; margin-top: 20px; font-size: 16px; color: #5cb85c;\\\">\\n 感谢您的支持,祝您元旦快乐!🎊\\n </p>\\n </div>',`notification_page`='/',`start_date`={2025-01-01 00:00:00 +0800 CST true},`end_date`={2025-01-02 00:00:00 +0800 CST true},`start_time`='00:00:00',`end_time`='12:00:00',`created_time`='0001-01-01 00:00:00 +0000 UTC',`updated_time`='0001-01-01 00:00:00 +0000 UTC',`status`='inactive',`del_state`=1,`version`=2,`delete_time`={2025-05-15 15:45:19.5655646 +0800 CST m=+89.072097201 true} where `id` = 3 and version = 1 ","duration":"1.1ms","level":"info","span":"ebef4569c7d11958","trace":"60a60432285c02bea2c0187441f06503"}
|
||||
{"@timestamp":"2025-05-15T15:45:19.567+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - DELETE /api/v1/admin/notification/delete/3 - [::1]:64876 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.6ms","level":"info","span":"61b3b0137f0a6c33","trace":"60a60432285c02bea2c0187441f06503"}
|
||||
{"@timestamp":"2025-05-15T15:45:37.302+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.1ms","level":"info","span":"97c0ec61fb52e5c9","trace":"f7a8a5c212816e34e08fc435e7910668"}
|
||||
{"@timestamp":"2025-05-15T15:45:37.302+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:64926 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.7ms","level":"info","span":"92cd6c392bf7cc35","trace":"f7a8a5c212816e34e08fc435e7910668"}
|
||||
{"@timestamp":"2025-05-15T15:45:37.338+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.9ms","level":"info","span":"2c590d7aff01ba55","trace":"1c2f52d026282c13857581889907a795"}
|
||||
{"@timestamp":"2025-05-15T15:45:37.339+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.0ms","level":"info","span":"6c365b896abff53f","trace":"1c2f52d026282c13857581889907a795"}
|
||||
{"@timestamp":"2025-05-15T15:45:37.340+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"0.5ms","level":"info","span":"d7358a40c5d7e95c","trace":"1c2f52d026282c13857581889907a795"}
|
||||
{"@timestamp":"2025-05-15T15:45:37.343+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:64927 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.5ms","level":"info","span":"c59111fd6d330eef","trace":"1c2f52d026282c13857581889907a795"}
|
||||
{"@timestamp":"2025-05-15T15:45:37.758+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.4ms","level":"info","span":"e6b92fb905d3d3e6","trace":"e2bb2ce56433421a11bb833908b13fbb"}
|
||||
{"@timestamp":"2025-05-15T15:45:37.759+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_time`,`updated_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"0.5ms","level":"info","span":"5b76114753fdbfbf","trace":"e2bb2ce56433421a11bb833908b13fbb"}
|
||||
{"@timestamp":"2025-05-15T15:45:37.759+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:64930 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.4ms","level":"info","span":"d815d0a99c8c8490","trace":"e2bb2ce56433421a11bb833908b13fbb"}
|
||||
{"@timestamp":"2025-05-15T15:45:59.204+08:00","caller":"sqlx/stmt.go:274","content":"sql exec: insert into `global_notifications` (`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_time`,`updated_time`,`status`,`del_state`,`version`,`delete_time`) values ('节日特惠', '<p style=\\\"text-align: start;\\\">尊敬的顾客朋友:</p><p style=\\\"text-align: start;\\\">感谢您一直以来对【店铺/品牌名称】的支持!为回馈新老客户,我们特推出以下超值优惠活动:</p><p style=\\\"text-align: start;\\\"><strong>📅 活动时间</strong><br><br>2023年X月X日 - X月X日</p><p style=\\\"text-align: start;\\\"><strong>🎉 促销内容</strong><br><br>1️⃣ <strong>全场商品低至5折</strong>:指定商品享折上折,部分爆款限时秒杀!<br><br>2️⃣ <strong>满减狂欢</strong>:单笔消费满【金额】立减【金额】,多买多省!<br><br>3️⃣ <strong>赠品福利</strong>:消费满【金额】即赠【赠品名称】,数量有限,先到先得!<br><br>4️⃣ <strong>会员专享</strong>:注册成为会员,额外领【XX元无门槛优惠券】!</p><p style=\\\"text-align: start;\\\"><strong>📍 参与方式</strong><br><br>线下:到店选购,地址:【门店地址】<br><br>线上:进入【小程序/APP/网店名称】,搜索活动专区即可参与!</p><p style=\\\"text-align: start;\\\"><strong>📞 咨询方式</strong><br><br>电话:【XXX-XXXXXXX】<br><br>客服微信:【微信号/二维码】</p><p style=\\\"text-align: start;\\\">**❗ 温馨提示**<br><br>• 活动仅限指定商品,不与其他优惠叠加。<br><br>• 赠品/优惠券数量有限,先到先得,用完即止。</p><p style=\\\"text-align: start;\\\"><strong>👉 速来抢购,错过再等一年!</strong></p><p style=\\\"text-align: start;\\\">【店铺/品牌名称】<br><br>2023年X月X日</p>', '/', {2025-05-23 00:00:00 +0000 UTC true}, {2025-05-23 00:00:00 +0000 UTC true}, '', '', '0001-01-01 00:00:00 +0000 UTC', '0001-01-01 00:00:00 +0000 UTC', 'active', 0, 0, {0001-01-01 00:00:00 +0000 UTC false})","duration":"2.8ms","level":"info","span":"9aed83c75afe42a9","trace":"4497c3cfbb931fdfb0d03cab2ea5b665"}
|
||||
{"@timestamp":"2025-05-15T15:45:59.205+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - POST /api/v1/admin/notification/create - [::1]:65061 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.3ms","level":"info","span":"0404912b66efc809","trace":"4497c3cfbb931fdfb0d03cab2ea5b665"}
|
||||
{"@timestamp":"2025-05-15T15:51:14.009+08:00","caller":"api/main.go:65","content":"Starting server at %s:%d...0.0.0.08888","level":"info"}
|
||||
{"@timestamp":"2025-05-15T15:51:19.821+08:00","caller":"sqlx/stmt.go:274","content":"sql exec: insert into `global_notifications` (`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`status`,`del_state`,`version`,`delete_time`) values ('节日特惠', '<p style=\\\"text-align: start;\\\">尊敬的顾客朋友:</p><p style=\\\"text-align: start;\\\">感谢您一直以来对【店铺/品牌名称】的支持!为回馈新老客户,我们特推出以下超值优惠活动:</p><p style=\\\"text-align: start;\\\"><strong>📅 活动时间</strong><br><br>2023年X月X日 - X月X日</p><p style=\\\"text-align: start;\\\"><strong>🎉 促销内容</strong><br><br>1️⃣ <strong>全场商品低至5折</strong>:指定商品享折上折,部分爆款限时秒杀!<br><br>2️⃣ <strong>满减狂欢</strong>:单笔消费满【金额】立减【金额】,多买多省!<br><br>3️⃣ <strong>赠品福利</strong>:消费满【金额】即赠【赠品名称】,数量有限,先到先得!<br><br>4️⃣ <strong>会员专享</strong>:注册成为会员,额外领【XX元无门槛优惠券】!</p><p style=\\\"text-align: start;\\\"><strong>📍 参与方式</strong><br><br>线下:到店选购,地址:【门店地址】<br><br>线上:进入【小程序/APP/网店名称】,搜索活动专区即可参与!</p><p style=\\\"text-align: start;\\\"><strong>📞 咨询方式</strong><br><br>电话:【XXX-XXXXXXX】<br><br>客服微信:【微信号/二维码】</p><p style=\\\"text-align: start;\\\">**❗ 温馨提示**<br><br>• 活动仅限指定商品,不与其他优惠叠加。<br><br>• 赠品/优惠券数量有限,先到先得,用完即止。</p><p style=\\\"text-align: start;\\\"><strong>👉 速来抢购,错过再等一年!</strong></p><p style=\\\"text-align: start;\\\">【店铺/品牌名称】<br><br>2023年X月X日</p>', '/', {2025-05-23 00:00:00 +0000 UTC true}, {2025-05-23 00:00:00 +0000 UTC true}, '', '', 'active', 0, 0, {0001-01-01 00:00:00 +0000 UTC false})","duration":"7.4ms","level":"info","span":"0c30083bedbf2f0b","trace":"59023bcab2ddb15e574a8dc559c9dca9"}
|
||||
{"@timestamp":"2025-05-15T15:51:19.822+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - POST /api/v1/admin/notification/create - [::1]:51134 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"11.7ms","level":"info","span":"900da2b1b6c7617e","trace":"59023bcab2ddb15e574a8dc559c9dca9"}
|
||||
{"@timestamp":"2025-05-15T15:51:19.868+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"2.1ms","level":"info","span":"15fcf84068a523d9","trace":"fec7a513d21119c428f15dd76635fd06"}
|
||||
{"@timestamp":"2025-05-15T15:51:19.869+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"1ccaff281e302a9d","trace":"fec7a513d21119c428f15dd76635fd06"}
|
||||
{"@timestamp":"2025-05-15T15:51:19.870+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:51137 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.8ms","level":"info","span":"64ab5373fa283e77","trace":"fec7a513d21119c428f15dd76635fd06"}
|
||||
{"@timestamp":"2025-05-15T15:56:23.262+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"3.8ms","level":"info","span":"2cb0a240d871f383","trace":"110834811f402edc0468a3d22b1a8dbb"}
|
||||
{"@timestamp":"2025-05-15T15:56:23.263+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"0403d241d6266577","trace":"110834811f402edc0468a3d22b1a8dbb"}
|
||||
{"@timestamp":"2025-05-15T15:56:23.263+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:52965 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.8ms","level":"info","span":"dedb5a6388accef9","trace":"110834811f402edc0468a3d22b1a8dbb"}
|
||||
{"@timestamp":"2025-05-15T15:56:45.406+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.7ms","level":"info","span":"b15722c33ee0046b","trace":"feccc69d6ba25fcb99164ee90e163b87"}
|
||||
{"@timestamp":"2025-05-15T15:56:45.407+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:53128 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.6ms","level":"info","span":"9b8e69a428734275","trace":"feccc69d6ba25fcb99164ee90e163b87"}
|
||||
{"@timestamp":"2025-05-15T15:56:45.447+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.5ms","level":"info","span":"bce802235dfb2754","trace":"5ecddcfc284ced62a3c5e44f47013140"}
|
||||
{"@timestamp":"2025-05-15T15:56:45.449+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"2.1ms","level":"info","span":"947470098f63cef8","trace":"5ecddcfc284ced62a3c5e44f47013140"}
|
||||
{"@timestamp":"2025-05-15T15:56:45.451+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.6ms","level":"info","span":"e99544b794c34f0f","trace":"5ecddcfc284ced62a3c5e44f47013140"}
|
||||
{"@timestamp":"2025-05-15T15:56:45.454+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:53129 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"8.4ms","level":"info","span":"919fe26a6b0d4659","trace":"5ecddcfc284ced62a3c5e44f47013140"}
|
||||
{"@timestamp":"2025-05-15T15:56:45.945+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.5ms","level":"info","span":"86c646ae2604a423","trace":"83047513a1c1c6da0cc61b23d4ceaa3d"}
|
||||
{"@timestamp":"2025-05-15T15:56:45.946+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.1ms","level":"info","span":"fc83eb7c32010938","trace":"83047513a1c1c6da0cc61b23d4ceaa3d"}
|
||||
{"@timestamp":"2025-05-15T15:56:45.946+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:53155 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.7ms","level":"info","span":"0089f76e95de9679","trace":"83047513a1c1c6da0cc61b23d4ceaa3d"}
|
||||
{"@timestamp":"2025-05-15T15:57:53.934+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"3.3ms","level":"info","span":"9c7377b249d07c93","trace":"c4045a6dd4e8440dc68ff05d308eef2b"}
|
||||
{"@timestamp":"2025-05-15T15:57:53.935+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"a81091937ceff016","trace":"c4045a6dd4e8440dc68ff05d308eef2b"}
|
||||
{"@timestamp":"2025-05-15T15:57:53.935+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:53625 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.3ms","level":"info","span":"56d7ac8213359221","trace":"c4045a6dd4e8440dc68ff05d308eef2b"}
|
||||
{"@timestamp":"2025-05-15T15:57:57.101+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.1ms","level":"info","span":"96bcce3617298017","trace":"21905a4a484f4c9e1d56a8803cbe7fe0"}
|
||||
{"@timestamp":"2025-05-15T15:57:57.102+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:53635 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.1ms","level":"info","span":"dade54b1366294bc","trace":"21905a4a484f4c9e1d56a8803cbe7fe0"}
|
||||
{"@timestamp":"2025-05-15T15:57:57.133+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.7ms","level":"info","span":"5d2f93b7523f2ef3","trace":"073c6691099054ecafb964d641c9c3f0"}
|
||||
{"@timestamp":"2025-05-15T15:57:57.135+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.0ms","level":"info","span":"b07d97ce7faf9293","trace":"073c6691099054ecafb964d641c9c3f0"}
|
||||
{"@timestamp":"2025-05-15T15:57:57.136+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.1ms","level":"info","span":"af199ebcdd714594","trace":"073c6691099054ecafb964d641c9c3f0"}
|
||||
{"@timestamp":"2025-05-15T15:57:57.137+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:53636 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"5.4ms","level":"info","span":"e3a34df18e8081fc","trace":"073c6691099054ecafb964d641c9c3f0"}
|
||||
{"@timestamp":"2025-05-15T15:57:57.695+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.4ms","level":"info","span":"16820e404248ec0d","trace":"6188ac04b8e96f8e843dd45e4a932979"}
|
||||
{"@timestamp":"2025-05-15T15:57:57.696+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"b085a6021f97d156","trace":"6188ac04b8e96f8e843dd45e4a932979"}
|
||||
{"@timestamp":"2025-05-15T15:57:57.696+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:53637 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.4ms","level":"info","span":"f264f5e262ac3ccf","trace":"6188ac04b8e96f8e843dd45e4a932979"}
|
||||
{"@timestamp":"2025-05-15T15:59:52.530+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"4.1ms","level":"info","span":"ceb818f25e7f09e1","trace":"b3033cf79b5319997a2c9126755fd64a"}
|
||||
{"@timestamp":"2025-05-15T15:59:52.531+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:54520 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.1ms","level":"info","span":"04a40baf449abd04","trace":"b3033cf79b5319997a2c9126755fd64a"}
|
||||
{"@timestamp":"2025-05-15T15:59:52.598+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.4ms","level":"info","span":"af721c608ae26e6b","trace":"82e6e6ab7f938548fe9db5f79de61c37"}
|
||||
{"@timestamp":"2025-05-15T15:59:52.599+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.6ms","level":"info","span":"69ce609bb5e9db7e","trace":"82e6e6ab7f938548fe9db5f79de61c37"}
|
||||
{"@timestamp":"2025-05-15T15:59:52.600+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"0.5ms","level":"info","span":"aac0d47d15500ec9","trace":"82e6e6ab7f938548fe9db5f79de61c37"}
|
||||
{"@timestamp":"2025-05-15T15:59:52.601+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:54522 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.5ms","level":"info","span":"27cb62767047d9af","trace":"82e6e6ab7f938548fe9db5f79de61c37"}
|
||||
{"@timestamp":"2025-05-15T15:59:53.117+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.9ms","level":"info","span":"d1cae9eaed71fac2","trace":"e59069802150ea95615d3c6f8604eda6"}
|
||||
{"@timestamp":"2025-05-15T15:59:53.118+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"cf59754ded643a59","trace":"e59069802150ea95615d3c6f8604eda6"}
|
||||
{"@timestamp":"2025-05-15T15:59:53.118+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:54525 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.4ms","level":"info","span":"4bec7bc89afe006c","trace":"e59069802150ea95615d3c6f8604eda6"}
|
||||
{"@timestamp":"2025-05-15T16:00:39.212+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.7ms","level":"info","span":"2a9ea88cbf2343db","trace":"a119a42f8129c7f935c82daa0b89f7ff"}
|
||||
{"@timestamp":"2025-05-15T16:00:39.214+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"cb367d9eb6a68eb6","trace":"a119a42f8129c7f935c82daa0b89f7ff"}
|
||||
{"@timestamp":"2025-05-15T16:00:39.214+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:54849 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.8ms","level":"info","span":"be78d60e78fdd82e","trace":"a119a42f8129c7f935c82daa0b89f7ff"}
|
||||
{"@timestamp":"2025-05-15T16:00:40.139+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.6ms","level":"info","span":"1c9cb665259b8ef6","trace":"3e41026c00888fcf90c095ef0b078e00"}
|
||||
{"@timestamp":"2025-05-15T16:00:40.140+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:54876 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.7ms","level":"info","span":"1ad1f1c7a0386ccd","trace":"3e41026c00888fcf90c095ef0b078e00"}
|
||||
{"@timestamp":"2025-05-15T16:00:40.169+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"1.6ms","level":"info","span":"de17cec7f33e8d2a","trace":"916ffe03befbf0dd1487cf7f1a8d49a6"}
|
||||
{"@timestamp":"2025-05-15T16:00:40.171+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.0ms","level":"info","span":"da4cc9cad02ff3ee","trace":"916ffe03befbf0dd1487cf7f1a8d49a6"}
|
||||
{"@timestamp":"2025-05-15T16:00:40.174+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.5ms","level":"info","span":"a22c825d3c1fbdd9","trace":"916ffe03befbf0dd1487cf7f1a8d49a6"}
|
||||
{"@timestamp":"2025-05-15T16:00:40.174+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:54877 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"5.8ms","level":"info","span":"f44a9cb6382ecb84","trace":"916ffe03befbf0dd1487cf7f1a8d49a6"}
|
||||
{"@timestamp":"2025-05-15T16:00:40.539+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.4ms","level":"info","span":"b69e2b20bdfa2c96","trace":"cd338799084e109de154548d7c269998"}
|
||||
{"@timestamp":"2025-05-15T16:00:40.541+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"65aef82cad642afb","trace":"cd338799084e109de154548d7c269998"}
|
||||
{"@timestamp":"2025-05-15T16:00:40.541+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:54880 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.9ms","level":"info","span":"e42e58413d519242","trace":"cd338799084e109de154548d7c269998"}
|
||||
{"@timestamp":"2025-05-15T16:01:12.980+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"3.3ms","level":"info","span":"4641df82cb3d0589","trace":"330ae1115c22b9626128aba0950f5628"}
|
||||
{"@timestamp":"2025-05-15T16:01:12.981+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"f86023f1704d7400","trace":"330ae1115c22b9626128aba0950f5628"}
|
||||
{"@timestamp":"2025-05-15T16:01:12.981+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:54981 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.8ms","level":"info","span":"43d6b17f4acf519e","trace":"330ae1115c22b9626128aba0950f5628"}
|
||||
{"@timestamp":"2025-05-15T16:03:01.329+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"3.2ms","level":"info","span":"37de58686f8c39bd","trace":"1ec71391e6e8ebac58db7bcd71bad8de"}
|
||||
{"@timestamp":"2025-05-15T16:03:01.330+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"0df9fb9d1b0c83a1","trace":"1ec71391e6e8ebac58db7bcd71bad8de"}
|
||||
{"@timestamp":"2025-05-15T16:03:01.330+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:56208 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.2ms","level":"info","span":"124209c1bccaf156","trace":"1ec71391e6e8ebac58db7bcd71bad8de"}
|
||||
{"@timestamp":"2025-05-15T16:03:06.384+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.7ms","level":"info","span":"dedce9c645ff8928","trace":"5099e916e705e83105da78a97a6d47c5"}
|
||||
{"@timestamp":"2025-05-15T16:03:06.385+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"ce1d3edf456c02a8","trace":"5099e916e705e83105da78a97a6d47c5"}
|
||||
{"@timestamp":"2025-05-15T16:03:06.385+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:56271 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.7ms","level":"info","span":"95f029018dd77644","trace":"5099e916e705e83105da78a97a6d47c5"}
|
||||
{"@timestamp":"2025-05-15T16:03:11.800+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"2.5ms","level":"info","span":"1805a5d4a94e38db","trace":"3c2da3ca1198b39185eae978b15bb2e0"}
|
||||
{"@timestamp":"2025-05-15T16:03:11.802+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"1b100cd18c6b7da9","trace":"3c2da3ca1198b39185eae978b15bb2e0"}
|
||||
{"@timestamp":"2025-05-15T16:03:11.802+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:56295 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.7ms","level":"info","span":"3e24035bfe2ff274","trace":"3c2da3ca1198b39185eae978b15bb2e0"}
|
||||
{"@timestamp":"2025-05-15T16:03:14.519+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.7ms","level":"info","span":"53fbd76e17e6ecf3","trace":"1501e547d9e7ca05174847bcce9354da"}
|
||||
{"@timestamp":"2025-05-15T16:03:14.520+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:56303 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"5.0ms","level":"info","span":"0a34f6b7afb4fb03","trace":"1501e547d9e7ca05174847bcce9354da"}
|
||||
{"@timestamp":"2025-05-15T16:03:14.566+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.0ms","level":"info","span":"650b02fd71b8aa3a","trace":"1cbbc504bc854f39cc11107854d6618d"}
|
||||
{"@timestamp":"2025-05-15T16:03:14.568+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.6ms","level":"info","span":"c9a35d05e8607a72","trace":"1cbbc504bc854f39cc11107854d6618d"}
|
||||
{"@timestamp":"2025-05-15T16:03:14.571+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"2.1ms","level":"info","span":"6f1ccf610aee79bd","trace":"1cbbc504bc854f39cc11107854d6618d"}
|
||||
{"@timestamp":"2025-05-15T16:03:14.571+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:56304 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.7ms","level":"info","span":"4de262c77eeb3b65","trace":"1cbbc504bc854f39cc11107854d6618d"}
|
||||
{"@timestamp":"2025-05-15T16:03:15.096+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.6ms","level":"info","span":"7e651a476d5d5928","trace":"ecf713d4addaf89168cc7230a81479be"}
|
||||
{"@timestamp":"2025-05-15T16:03:15.098+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"13c53cc5cfa62a36","trace":"ecf713d4addaf89168cc7230a81479be"}
|
||||
{"@timestamp":"2025-05-15T16:03:15.099+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:56307 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.2ms","level":"info","span":"0f623304cdbc456d","trace":"ecf713d4addaf89168cc7230a81479be"}
|
||||
{"@timestamp":"2025-05-15T16:03:48.053+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.4ms","level":"info","span":"e826107623f9de42","trace":"79cb88479c1c01603e8817888beb588f"}
|
||||
{"@timestamp":"2025-05-15T16:03:48.054+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.1ms","level":"info","span":"b9df25e609c9a027","trace":"79cb88479c1c01603e8817888beb588f"}
|
||||
{"@timestamp":"2025-05-15T16:03:48.054+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:56495 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.5ms","level":"info","span":"7bad0dc38480f107","trace":"79cb88479c1c01603e8817888beb588f"}
|
||||
{"@timestamp":"2025-05-15T16:03:56.076+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.4ms","level":"info","span":"d2c8076e17e0c676","trace":"debffd548d7c125843c2d1045899d877"}
|
||||
{"@timestamp":"2025-05-15T16:03:56.077+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.1ms","level":"info","span":"3b5cc2c2e0710886","trace":"debffd548d7c125843c2d1045899d877"}
|
||||
{"@timestamp":"2025-05-15T16:03:56.078+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:56588 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.0ms","level":"info","span":"eac42231c9271c75","trace":"debffd548d7c125843c2d1045899d877"}
|
||||
{"@timestamp":"2025-05-15T16:05:28.917+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"5.2ms","level":"info","span":"6aad97b0490a605a","trace":"88fa0882429fbcd1bf12e1f81e5b63ca"}
|
||||
{"@timestamp":"2025-05-15T16:05:28.918+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:57168 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"10.0ms","level":"info","span":"b077c2a8682a18e2","trace":"88fa0882429fbcd1bf12e1f81e5b63ca"}
|
||||
{"@timestamp":"2025-05-15T16:05:28.956+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.1ms","level":"info","span":"12e07b4ce5937cb7","trace":"54980d6fbeafa0a0e9b71a7234f0d7e2"}
|
||||
{"@timestamp":"2025-05-15T16:05:28.957+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.6ms","level":"info","span":"99838a8ff8e4abd5","trace":"54980d6fbeafa0a0e9b71a7234f0d7e2"}
|
||||
{"@timestamp":"2025-05-15T16:05:28.959+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"2.1ms","level":"info","span":"cb4ca6cf07a89624","trace":"54980d6fbeafa0a0e9b71a7234f0d7e2"}
|
||||
{"@timestamp":"2025-05-15T16:05:28.960+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:57170 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.8ms","level":"info","span":"7fd2fc365ee7ec66","trace":"54980d6fbeafa0a0e9b71a7234f0d7e2"}
|
||||
{"@timestamp":"2025-05-15T16:05:29.462+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.6ms","level":"info","span":"214584c8fc6e3441","trace":"7a6f591be540ccca9998056e016eae3c"}
|
||||
{"@timestamp":"2025-05-15T16:05:29.463+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"58ecbd57611ba8cc","trace":"7a6f591be540ccca9998056e016eae3c"}
|
||||
{"@timestamp":"2025-05-15T16:05:29.463+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:57174 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.2ms","level":"info","span":"b4d34d3edef7fc2a","trace":"7a6f591be540ccca9998056e016eae3c"}
|
||||
{"@timestamp":"2025-05-15T16:05:54.999+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.1ms","level":"info","span":"ecdd8e485bdd8788","trace":"66f2e2ba79aca8110be6d61e13f6e2af"}
|
||||
{"@timestamp":"2025-05-15T16:05:55.000+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"8b031b8468a1f2e8","trace":"66f2e2ba79aca8110be6d61e13f6e2af"}
|
||||
{"@timestamp":"2025-05-15T16:05:55.000+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:57312 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.6ms","level":"info","span":"4e355dccaf2389d2","trace":"66f2e2ba79aca8110be6d61e13f6e2af"}
|
||||
{"@timestamp":"2025-05-15T16:06:34.330+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `admin_user` WHERE del_state = 0 AND del_state = 0","duration":"3.7ms","level":"info","span":"4d4551e25fe65b11","trace":"49c59fd555c3706476a13852fa90e0c6"}
|
||||
{"@timestamp":"2025-05-15T16:06:34.330+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`username`,`password`,`real_name`,`status` FROM `admin_user` WHERE del_state = 0 AND del_state = 0 ORDER BY id DESC, id DESC LIMIT 20 OFFSET 0","duration":"4.2ms","level":"info","span":"f63f93130b52220f","trace":"49c59fd555c3706476a13852fa90e0c6"}
|
||||
{"@timestamp":"2025-05-15T16:06:34.333+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 2 AND del_state = 0 ORDER BY id ASC","duration":"1.7ms","level":"info","span":"baf43504b0f117de","trace":"49c59fd555c3706476a13852fa90e0c6"}
|
||||
{"@timestamp":"2025-05-15T16:06:34.333+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY id ASC","duration":"1.7ms","level":"info","span":"7c0a2851fb168653","trace":"49c59fd555c3706476a13852fa90e0c6"}
|
||||
{"@timestamp":"2025-05-15T16:06:34.342+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/list?page=1&pageSize=20 - [::1]:57467 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"24.3ms","level":"info","span":"2043a882a5cc3e1a","trace":"49c59fd555c3706476a13852fa90e0c6"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.456+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`order_no`,`user_id`,`product_id`,`payment_platform`,`payment_scene`,`platform_order_id`,`amount`,`status`,`del_state`,`version`,`create_time`,`update_time`,`pay_time`,`refund_time`,`close_time`,`delete_time` FROM `order` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"5.4ms","level":"info","span":"cc60b7e851b1636d","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.457+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `order` WHERE del_state = 0","duration":"5.9ms","level":"info","span":"a1885afa7c45d34c","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.483+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2357 and del_state = 0 limit 1","duration":"17.4ms","level":"info","span":"b6967fc9bdd77ab8","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.488+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2356 and del_state = 0 limit 1","duration":"2.1ms","level":"info","span":"bf2df7f568d20a64","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.490+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2355 and del_state = 0 limit 1","duration":"0.5ms","level":"info","span":"b36d851874327b32","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.494+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2354 and del_state = 0 limit 1","duration":"2.1ms","level":"info","span":"332fd68bd3a5edac","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.496+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2353 and del_state = 0 limit 1","duration":"1.0ms","level":"info","span":"fee9f794d147cc21","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.499+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2352 and del_state = 0 limit 1","duration":"1.6ms","level":"info","span":"7dcc998b4810c65a","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.502+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2351 and del_state = 0 limit 1","duration":"1.6ms","level":"info","span":"4c0ff2bc27ae2675","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.505+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2350 and del_state = 0 limit 1","duration":"1.6ms","level":"info","span":"bc0fab08aae84e0a","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.507+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2349 and del_state = 0 limit 1","duration":"1.0ms","level":"info","span":"7781e93d8e32f131","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.510+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2348 and del_state = 0 limit 1","duration":"1.6ms","level":"info","span":"68b583b893685496","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.513+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2347 and del_state = 0 limit 1","duration":"1.1ms","level":"info","span":"f906c6eb15f7f94a","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.515+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2346 and del_state = 0 limit 1","duration":"1.0ms","level":"info","span":"ba049bdcbf30404f","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.517+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2345 and del_state = 0 limit 1","duration":"1.6ms","level":"info","span":"7030653ff2578ba3","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.520+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2344 and del_state = 0 limit 1","duration":"1.0ms","level":"info","span":"70f94459c8eb1673","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.522+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2343 and del_state = 0 limit 1","duration":"1.0ms","level":"info","span":"7397f52483e4d4db","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.525+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2342 and del_state = 0 limit 1","duration":"1.6ms","level":"info","span":"5e50d3d642181a5a","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.529+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2341 and del_state = 0 limit 1","duration":"2.1ms","level":"info","span":"35ea82dadc32cd5f","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.531+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2340 and del_state = 0 limit 1","duration":"1.0ms","level":"info","span":"efb98bc214655ddf","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.535+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2339 and del_state = 0 limit 1","duration":"2.0ms","level":"info","span":"d2199a0d1e7d7e4c","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.538+08:00","caller":"sqlx/stmt.go:274","content":"sql query: select `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`link_id`,`order_id`,`user_id`,`admin_user_id` from `admin_promotion_order` where `order_id` = 2338 and del_state = 0 limit 1","duration":"1.0ms","level":"info","span":"50c8581c03d3afb2","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:17.539+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/order/list?page=1&pageSize=20 - [::1]:58197 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"91.1ms","level":"info","span":"7051d606d787f004","trace":"7e7c2d332d3504bd33c531f21b06f797"}
|
||||
{"@timestamp":"2025-05-15T16:08:18.983+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.5ms","level":"info","span":"9e64ee31225556b3","trace":"a4b54f23f377d8dfd7ebdd500b4c6c38"}
|
||||
{"@timestamp":"2025-05-15T16:08:18.984+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"e006bd1f57e3c15b","trace":"a4b54f23f377d8dfd7ebdd500b4c6c38"}
|
||||
{"@timestamp":"2025-05-15T16:08:18.984+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:58219 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.6ms","level":"info","span":"53cdcff76bdfacaf","trace":"a4b54f23f377d8dfd7ebdd500b4c6c38"}
|
||||
{"@timestamp":"2025-05-15T16:08:19.345+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `user` WHERE del_state = 0","duration":"3.3ms","level":"info","span":"6c3e71b00d0431a6","trace":"2425d912f7720cd31ce01332ae95e0fd"}
|
||||
{"@timestamp":"2025-05-15T16:08:19.346+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`mobile`,`password`,`nickname`,`info`,`inside` FROM `user` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.0ms","level":"info","span":"6350ad8ada1febd3","trace":"2425d912f7720cd31ce01332ae95e0fd"}
|
||||
{"@timestamp":"2025-05-15T16:08:19.347+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/platform_user/list?page=1&pageSize=20 - [::1]:58222 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.5ms","level":"info","span":"d4858334d494aa30","trace":"2425d912f7720cd31ce01332ae95e0fd"}
|
||||
{"@timestamp":"2025-05-15T16:08:19.827+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.6ms","level":"info","span":"45db096f6544f0ba","trace":"b3d6f4eaa5d3e536299cf2f2d42cfe44"}
|
||||
{"@timestamp":"2025-05-15T16:08:19.828+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.1ms","level":"info","span":"fa7116818269c1cb","trace":"b3d6f4eaa5d3e536299cf2f2d42cfe44"}
|
||||
{"@timestamp":"2025-05-15T16:08:19.828+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:58223 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"2.6ms","level":"info","span":"e1a2d3d4cf15ad44","trace":"b3d6f4eaa5d3e536299cf2f2d42cfe44"}
|
||||
{"@timestamp":"2025-05-15T16:08:26.016+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.6ms","level":"info","span":"cd86d32470373935","trace":"29551173f42c358eb8bd7be1413fb685"}
|
||||
{"@timestamp":"2025-05-15T16:08:26.017+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"fdfa8ec7afe283fb","trace":"29551173f42c358eb8bd7be1413fb685"}
|
||||
{"@timestamp":"2025-05-15T16:08:26.017+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:58233 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.2ms","level":"info","span":"1c2d46079ff9e390","trace":"29551173f42c358eb8bd7be1413fb685"}
|
||||
{"@timestamp":"2025-05-15T16:08:47.951+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"2.1ms","level":"info","span":"8cad625c659e7e66","trace":"65bf359d33253d552dc74197fb71a0e3"}
|
||||
{"@timestamp":"2025-05-15T16:08:47.952+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"d2d40da04bc00dd4","trace":"65bf359d33253d552dc74197fb71a0e3"}
|
||||
{"@timestamp":"2025-05-15T16:08:47.952+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:58341 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.7ms","level":"info","span":"68dc57de0f3f13ac","trace":"65bf359d33253d552dc74197fb71a0e3"}
|
||||
{"@timestamp":"2025-05-15T16:12:10.412+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"5.1ms","level":"info","span":"e4abcf04e957fae0","trace":"3037602403968c67d085d86e4b8b814a"}
|
||||
{"@timestamp":"2025-05-15T16:12:10.414+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"f81800691775e862","trace":"3037602403968c67d085d86e4b8b814a"}
|
||||
{"@timestamp":"2025-05-15T16:12:10.414+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:59586 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"7.3ms","level":"info","span":"ec4cc4e440a2c013","trace":"3037602403968c67d085d86e4b8b814a"}
|
||||
{"@timestamp":"2025-05-15T16:12:30.913+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.1ms","level":"info","span":"5043e35c87acbee4","trace":"5274749c8f58f5e32b652458b0462cbc"}
|
||||
{"@timestamp":"2025-05-15T16:12:30.914+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:59777 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.7ms","level":"info","span":"48f9fbd795fcf6dc","trace":"5274749c8f58f5e32b652458b0462cbc"}
|
||||
{"@timestamp":"2025-05-15T16:12:30.952+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.2ms","level":"info","span":"3813d21c8dd8b21b","trace":"6caa17041d4938d45eee2bdb158fc103"}
|
||||
{"@timestamp":"2025-05-15T16:12:30.955+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"2.1ms","level":"info","span":"60c128a9c90ab7e0","trace":"6caa17041d4938d45eee2bdb158fc103"}
|
||||
{"@timestamp":"2025-05-15T16:12:30.957+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"2.1ms","level":"info","span":"7515956b8d1752a0","trace":"6caa17041d4938d45eee2bdb158fc103"}
|
||||
{"@timestamp":"2025-05-15T16:12:30.957+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:59778 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"7.6ms","level":"info","span":"45b7c3e05167b77c","trace":"6caa17041d4938d45eee2bdb158fc103"}
|
||||
{"@timestamp":"2025-05-15T16:12:31.436+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.1ms","level":"info","span":"625395de6d84c0eb","trace":"6e27561ad6cf96e2e532fe5c8357bff2"}
|
||||
{"@timestamp":"2025-05-15T16:12:31.438+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"a08d079e66e5c207","trace":"6e27561ad6cf96e2e532fe5c8357bff2"}
|
||||
{"@timestamp":"2025-05-15T16:12:31.438+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:59781 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.8ms","level":"info","span":"a3d3d370be67c298","trace":"6e27561ad6cf96e2e532fe5c8357bff2"}
|
||||
{"@timestamp":"2025-05-15T16:13:19.953+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"3.2ms","level":"info","span":"c827bcd53bc0bea6","trace":"f08d30a9eea935cc690ada9dfd640570"}
|
||||
{"@timestamp":"2025-05-15T16:13:19.954+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.5ms","level":"info","span":"650e5baec41d9c95","trace":"f08d30a9eea935cc690ada9dfd640570"}
|
||||
{"@timestamp":"2025-05-15T16:13:19.954+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:60136 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.8ms","level":"info","span":"59b0f05f8b8427fd","trace":"f08d30a9eea935cc690ada9dfd640570"}
|
||||
{"@timestamp":"2025-05-15T16:13:57.722+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.1ms","level":"info","span":"cc194629768021fc","trace":"5091388764b4388d3dddd014000f9587"}
|
||||
{"@timestamp":"2025-05-15T16:13:57.723+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:60861 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"4.4ms","level":"info","span":"defb5a86fb9f3ebf","trace":"5091388764b4388d3dddd014000f9587"}
|
||||
{"@timestamp":"2025-05-15T16:13:57.758+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.4ms","level":"info","span":"2fe1621e39b0560c","trace":"8a45bebeaff8eda8b0748384ff6c03a8"}
|
||||
{"@timestamp":"2025-05-15T16:13:57.760+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"2.2ms","level":"info","span":"0a43e32d23906dd6","trace":"8a45bebeaff8eda8b0748384ff6c03a8"}
|
||||
{"@timestamp":"2025-05-15T16:13:57.762+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.6ms","level":"info","span":"626a5cf6d48ce53c","trace":"8a45bebeaff8eda8b0748384ff6c03a8"}
|
||||
{"@timestamp":"2025-05-15T16:13:57.763+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:60862 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.7ms","level":"info","span":"133465a927cd3b8f","trace":"8a45bebeaff8eda8b0748384ff6c03a8"}
|
||||
{"@timestamp":"2025-05-15T16:13:58.309+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.5ms","level":"info","span":"2a550eb9f1d7cf9f","trace":"e04d07516e69c70297eaa310abd5d3f2"}
|
||||
{"@timestamp":"2025-05-15T16:13:58.310+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"5e2aafe5ac9263aa","trace":"e04d07516e69c70297eaa310abd5d3f2"}
|
||||
{"@timestamp":"2025-05-15T16:13:58.310+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:60865 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.1ms","level":"info","span":"e6d8decf5585eef6","trace":"e04d07516e69c70297eaa310abd5d3f2"}
|
||||
{"@timestamp":"2025-05-15T16:16:36.208+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"5.3ms","level":"info","span":"6e6522599db2cae2","trace":"67eee62ad7cd9c25d3bb7801fa9008c2"}
|
||||
{"@timestamp":"2025-05-15T16:16:36.209+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/user/info - [::1]:61376 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"7.6ms","level":"info","span":"d6e4687002d4e145","trace":"67eee62ad7cd9c25d3bb7801fa9008c2"}
|
||||
{"@timestamp":"2025-05-15T16:16:36.252+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`user_id`,`role_id` FROM `admin_user_role` WHERE user_id = 1 AND del_state = 0 ORDER BY role_id DESC","duration":"2.1ms","level":"info","span":"12c1514fc576acb4","trace":"b9d99590e1a5ceca1bf866d681ceb1c9"}
|
||||
{"@timestamp":"2025-05-15T16:16:36.254+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`role_id`,`menu_id` FROM `admin_role_menu` WHERE role_id IN (1) AND del_state = 0 ORDER BY id DESC","duration":"1.0ms","level":"info","span":"188320d397d4262a","trace":"b9d99590e1a5ceca1bf866d681ceb1c9"}
|
||||
{"@timestamp":"2025-05-15T16:16:36.256+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`create_time`,`update_time`,`delete_time`,`del_state`,`version`,`pid`,`name`,`path`,`component`,`redirect`,`meta`,`status`,`type`,`sort` FROM `admin_menu` WHERE id IN (19,18,17,16,15,14,13,12,11,10,6,3,2,1) AND del_state = 0 ORDER BY sort ASC","duration":"1.6ms","level":"info","span":"a510fa7802e42400","trace":"b9d99590e1a5ceca1bf866d681ceb1c9"}
|
||||
{"@timestamp":"2025-05-15T16:16:36.257+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/menu/all - [::1]:61378 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"6.8ms","level":"info","span":"6932d9a937e81f75","trace":"b9d99590e1a5ceca1bf866d681ceb1c9"}
|
||||
{"@timestamp":"2025-05-15T16:16:36.808+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT COUNT(id) FROM `global_notifications` WHERE del_state = 0","duration":"1.6ms","level":"info","span":"4dc27a167e125e7a","trace":"e29f0797983d2a4353fdeb6d9fc0c9ed"}
|
||||
{"@timestamp":"2025-05-15T16:16:36.811+08:00","caller":"sqlx/stmt.go:274","content":"sql query: SELECT `id`,`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`create_time`,`update_time`,`status`,`del_state`,`version`,`delete_time` FROM `global_notifications` WHERE del_state = 0 ORDER BY id DESC LIMIT 20 OFFSET 0","duration":"1.6ms","level":"info","span":"22ac5061e0e92271","trace":"e29f0797983d2a4353fdeb6d9fc0c9ed"}
|
||||
{"@timestamp":"2025-05-15T16:16:36.811+08:00","caller":"handler/loghandler.go:147","content":"[HTTP] 200 - GET /api/v1/admin/notification/list?page=1&pageSize=20 - [::1]:61381 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36","duration":"3.6ms","level":"info","span":"09f844e5e505a313","trace":"e29f0797983d2a4353fdeb6d9fc0c9ed"}
|
7213
app/main/api/logs/access.log-2025-05-13
Normal file
7213
app/main/api/logs/access.log-2025-05-13
Normal file
File diff suppressed because it is too large
Load Diff
1537
app/main/api/logs/access.log-2025-05-14
Normal file
1537
app/main/api/logs/access.log-2025-05-14
Normal file
File diff suppressed because it is too large
Load Diff
32
app/main/api/logs/error.log
Normal file
32
app/main/api/logs/error.log
Normal file
@ -0,0 +1,32 @@
|
||||
{"@timestamp":"2025-05-13T14:31:55.084+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100001,ErrMsg:服务器开小差啦,稍后再来试一试\nAdminRefundOrder, 退款失败 err: 支付宝退款申请失败: 申请支付宝退款失败: 交易不存在\ntyc-server/app/main/api/internal/logic/admin_order.(*AdminRefundOrderLogic).AdminRefundOrder\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_order/adminrefundorderlogic.go:52\ntyc-server/app/main/api/internal/handler/admin_order.AdminRefundOrderHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_order/adminrefundorderhandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.Authorize.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/authhandler.go:81\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"9a72009ad3e58f79","trace":"8b13d8216f560059f537fdc6220acfaa"}
|
||||
{"@timestamp":"2025-05-13T14:34:08.712+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100001,ErrMsg:服务器开小差啦,稍后再来试一试\nAdminRefundOrder, 退款失败 err: 支付宝退款申请失败: 申请支付宝退款失败: 交易不存在\ntyc-server/app/main/api/internal/logic/admin_order.(*AdminRefundOrderLogic).AdminRefundOrder\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_order/adminrefundorderlogic.go:52\ntyc-server/app/main/api/internal/handler/admin_order.AdminRefundOrderHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_order/adminrefundorderhandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.Authorize.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/authhandler.go:81\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"391e7f42b7a93512","trace":"729f4d10c6e8e7a9c6f4d8b66926dbf4"}
|
||||
{"@timestamp":"2025-05-13T14:44:55.104+08:00","caller":"sqlx/utils.go:147","content":"stmt: insert into `order_refund` (`refund_no`,`order_id`,`user_id`,`product_id`,`platform_refund_id`,`refund_amount`,`refund_reason`,`status`,`del_state`,`version`,`refund_time`,`close_time`,`delete_time`) values ('REF_ALI_1747118693000005007826_1747118693000006946574', 71, 1, 26, {2025051122001432531452878279 true}, 0.01, {用户不满意要求退款 true}, 'success', 0, 0, {2025-05-13 14:44:55.0942351 +0800 CST m=+3511.628886201 true}, {0001-01-01 00:00:00 +0000 UTC false}, {0001-01-01 00:00:00 +0000 UTC false}), error: Error 1406 (22001): Data too long for column 'refund_no' at row 1","level":"error","span":"e152d57fbdb0ee1e","trace":"39dba17b09053137576465344d148d8c"}
|
||||
{"@timestamp":"2025-05-13T14:44:55.105+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100001,ErrMsg:服务器开小差啦,稍后再来试一试\nAdminRefundOrder, 退款失败 err: 创建退款记录失败: Error 1406 (22001): Data too long for column 'refund_no' at row 1\ntyc-server/app/main/api/internal/logic/admin_order.(*AdminRefundOrderLogic).AdminRefundOrder\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_order/adminrefundorderlogic.go:52\ntyc-server/app/main/api/internal/handler/admin_order.AdminRefundOrderHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_order/adminrefundorderhandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.Authorize.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/authhandler.go:81\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"e2f43b44d0c7e18c","trace":"39dba17b09053137576465344d148d8c"}
|
||||
{"@timestamp":"2025-05-13T14:48:32.908+08:00","caller":"sqlx/utils.go:147","content":"stmt: insert into `order_refund` (`refund_no`,`order_id`,`user_id`,`product_id`,`platform_refund_id`,`refund_amount`,`refund_reason`,`status`,`del_state`,`version`,`refund_time`,`close_time`,`delete_time`) values ('REF_ALI_1747118911000007eb05b5_17471189110000084cd63f', 72, 1, 26, {2025051222001432531454850724 true}, 0.01, {重复下单退款 true}, 'success', 0, 0, {2025-05-13 14:48:32.9070915 +0800 CST m=+3729.441742601 true}, {0001-01-01 00:00:00 +0000 UTC false}, {0001-01-01 00:00:00 +0000 UTC false}), error: Error 1406 (22001): Data too long for column 'refund_no' at row 1","level":"error","span":"63425cd2009c2e2a","trace":"6175ff3a33388b09d8f8ac904f3f8735"}
|
||||
{"@timestamp":"2025-05-13T14:48:32.909+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100001,ErrMsg:服务器开小差啦,稍后再来试一试\nAdminRefundOrder, 退款失败 err: 创建退款记录失败: Error 1406 (22001): Data too long for column 'refund_no' at row 1\ntyc-server/app/main/api/internal/logic/admin_order.(*AdminRefundOrderLogic).AdminRefundOrder\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_order/adminrefundorderlogic.go:52\ntyc-server/app/main/api/internal/handler/admin_order.AdminRefundOrderHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_order/adminrefundorderhandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.Authorize.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/authhandler.go:81\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"8852637ff26e229c","trace":"6175ff3a33388b09d8f8ac904f3f8735"}
|
||||
{"@timestamp":"2025-05-13T14:54:54.729+08:00","caller":"handler/loghandler.go:149","content":"[HTTP] 503 - POST /api/v1/admin/order/refund/73 - [::1]:65232 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36\nPOST /api/v1/admin/order/refund/73 HTTP/1.1\r\nHost: localhost:8888\r\nAccept: application/json, text/plain, */*\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nAccept-Language: zh-CN\r\nAuthorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NDkzOTExMTYsImlhdCI6MTc0Njc5OTExNiwidXNlcklkIjoxfQ.4gJXQZbU6_n6RLlX5l1S5Zk2dsRtFNGJ2CIrqmn4_dw\r\nConnection: close\r\nContent-Length: 59\r\nContent-Type: application/json;charset=UTF-8\r\nCookie: pma_lang=zh_CN; phpMyAdmin=b6eb658324c8a60061e566b86986d8f9\r\nOrigin: http://localhost:5666\r\nReferer: http://localhost:5666/order\r\nSec-Ch-Ua: \"Chromium\";v=\"136\", \"Google Chrome\";v=\"136\", \"Not.A/Brand\";v=\"99\"\r\nSec-Ch-Ua-Mobile: ?0\r\nSec-Ch-Ua-Platform: \"Windows\"\r\nSec-Fetch-Dest: empty\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: same-origin\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36\r\n\r\n{\"refund_amount\":0.01,\"refund_reason\":\"重复下单退款\"}","duration":"22225.1ms","level":"error","span":"56f994acf11f4947","trace":"ec66934967ca81a2c4f22b64f4f8daa8"}
|
||||
{"@timestamp":"2025-05-13T23:39:56.028+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100001,ErrMsg:服务器开小差啦,稍后再来试一试\n手机登录, 加密手机号失败: 手机号不能为空\ntyc-server/app/main/api/internal/logic/admin_platform_user.(*AdminGetPlatformUserListLogic).AdminGetPlatformUserList\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_platform_user/admingetplatformuserlistlogic.go:63\ntyc-server/app/main/api/internal/handler/admin_platform_user.AdminGetPlatformUserListHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_platform_user/admingetplatformuserlisthandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.Authorize.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/authhandler.go:81\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"eb333127d6028ccb","trace":"e13c0a77bdadf2dc2cb726c960aa9116"}
|
||||
{"@timestamp":"2025-05-13T23:39:56.564+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100001,ErrMsg:服务器开小差啦,稍后再来试一试\n手机登录, 加密手机号失败: 手机号不能为空\ntyc-server/app/main/api/internal/logic/admin_platform_user.(*AdminGetPlatformUserListLogic).AdminGetPlatformUserList\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_platform_user/admingetplatformuserlistlogic.go:63\ntyc-server/app/main/api/internal/handler/admin_platform_user.AdminGetPlatformUserListHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_platform_user/admingetplatformuserlisthandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.Authorize.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/authhandler.go:81\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"2830c780ed5513c3","trace":"e77e9596bba88f2fe0a91936f25d3c3c"}
|
||||
{"@timestamp":"2025-05-13T23:40:16.227+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100001,ErrMsg:服务器开小差啦,稍后再来试一试\n手机登录, 解密手机号失败: 加密手机号不能为空\ntyc-server/app/main/api/internal/logic/admin_platform_user.(*AdminGetPlatformUserListLogic).AdminGetPlatformUserList\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_platform_user/admingetplatformuserlistlogic.go:63\ntyc-server/app/main/api/internal/handler/admin_platform_user.AdminGetPlatformUserListHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_platform_user/admingetplatformuserlisthandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.Authorize.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/authhandler.go:81\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"e404839cd4553c5f","trace":"3efab040c893cbef1b76285862bc1ace"}
|
||||
{"@timestamp":"2025-05-13T23:40:16.724+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100001,ErrMsg:服务器开小差啦,稍后再来试一试\n手机登录, 解密手机号失败: 加密手机号不能为空\ntyc-server/app/main/api/internal/logic/admin_platform_user.(*AdminGetPlatformUserListLogic).AdminGetPlatformUserList\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_platform_user/admingetplatformuserlistlogic.go:63\ntyc-server/app/main/api/internal/handler/admin_platform_user.AdminGetPlatformUserListHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_platform_user/admingetplatformuserlisthandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.Authorize.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/authhandler.go:81\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"cc3490bd557e95f9","trace":"8da8bc102fc7c7162de764fad338da99"}
|
||||
{"@timestamp":"2025-05-13T23:40:17.176+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100001,ErrMsg:服务器开小差啦,稍后再来试一试\n手机登录, 解密手机号失败: 加密手机号不能为空\ntyc-server/app/main/api/internal/logic/admin_platform_user.(*AdminGetPlatformUserListLogic).AdminGetPlatformUserList\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_platform_user/admingetplatformuserlistlogic.go:63\ntyc-server/app/main/api/internal/handler/admin_platform_user.AdminGetPlatformUserListHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_platform_user/admingetplatformuserlisthandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.Authorize.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/authhandler.go:81\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"f95074f00c45a9c8","trace":"1904b03d7d27ee682b61847c16e7533d"}
|
||||
{"@timestamp":"2025-05-15T15:12:24.500+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100005,ErrMsg:数据库繁忙,请稍后再试\n删除通知失败, err: GlobalNotificationsModel delete err : 14 ? in sql, but only 13 arguments provided: delete soft failed , id: 4\ntyc-server/app/main/api/internal/logic/admin_notification.(*AdminDeleteNotificationLogic).AdminDeleteNotification\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_notification/admindeletenotificationlogic.go:35\ntyc-server/app/main/api/internal/handler/admin_notification.AdminDeleteNotificationHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_notification/admindeletenotificationhandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"bce16c7987c89bb9","trace":"86a49825f320f9d6735b58d19188c942"}
|
||||
{"@timestamp":"2025-05-15T15:16:40.910+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100005,ErrMsg:数据库繁忙,请稍后再试\n更新通知失败, err: 13 ? in sql, but only 12 arguments provided, req: &{Id:3 Title:元旦节日惠客通知 Content:<p>🎉元旦感恩特惠活动公告🎉 尊敬的用户,您好!为庆祝元旦节日,我们特别推出限时优惠活动: 活动时间: 2025年1月1日12:00 至 2025年1月2日12:00 活动内容: 活动期间内,所有功能无限次数通通 2折 优惠! 参与方式: 在活动时间内登录系统,即可享受所有服务 2 折优惠,机会难得,不容错过! 温馨提示: 为了方便您参与未来更多优惠活动,请将我们的网站收藏到您的浏览器书签中,或在百度搜索随时访问我们的最新动态和活动信息! 活动解释权归平台所有。 感谢您的支持,祝您元旦快乐!🎊</p> NotificationPage:/ StartDate:2025-01-01 StartTime: EndDate:2025-01-02 EndTime: Status:inactive}\ntyc-server/app/main/api/internal/logic/admin_notification.(*AdminUpdateNotificationLogic).AdminUpdateNotification\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_notification/adminupdatenotificationlogic.go:46\ntyc-server/app/main/api/internal/handler/admin_notification.AdminUpdateNotificationHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_notification/adminupdatenotificationhandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"1787695655594302","trace":"41f2a4d6ffade6e2b0523212b71d6c8e"}
|
||||
{"@timestamp":"2025-05-15T15:28:19.393+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100005,ErrMsg:数据库繁忙,请稍后再试\n更新通知失败, err: context deadline exceeded, req: &{Id:3 Title:元旦节日惠客通知 Content:<p>🎉元旦感恩特惠活动公告🎉 尊敬的用户,您好!为庆祝元旦节日,我们特别推出限时优惠活动: 活动时间: 2025年1月1日12:00 至 2025年1月2日12:00 活动内容: 活动期间内,所有功能无限次数通通 2折 优惠! 参与方式: 在活动时间内登录系统,即可享受所有服务 2 折优惠,机会难得,不容错过! 温馨提示: 为了方便您参与未来更多优惠活动,请将我们的网站收藏到您的浏览器书签中,或在百度搜索随时访问我们的最新动态和活动信息! 活动解释权归平台所有。 感谢您的支持,祝您元旦快乐!🎊</p> NotificationPage:/ StartDate:2025-01-01 StartTime: EndDate:2025-01-02 EndTime: Status:inactive}\ntyc-server/app/main/api/internal/logic/admin_notification.(*AdminUpdateNotificationLogic).AdminUpdateNotification\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_notification/adminupdatenotificationlogic.go:46\ntyc-server/app/main/api/internal/handler/admin_notification.AdminUpdateNotificationHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_notification/adminupdatenotificationhandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"a3d736f56bf9b9e0","trace":"5f7d45910180fc01355d02ccef655bb8"}
|
||||
{"@timestamp":"2025-05-15T15:28:19.393+08:00","caller":"handler/loghandler.go:149","content":"[HTTP] 503 - PUT /api/v1/admin/notification/update/3 - [::1]:56840 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36\nPUT /api/v1/admin/notification/update/3 HTTP/1.1\r\nHost: localhost:8888\r\nAccept: application/json, text/plain, */*\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nAccept-Language: zh-CN\r\nAuthorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NDkzOTExMTYsImlhdCI6MTc0Njc5OTExNiwidXNlcklkIjoxfQ.4gJXQZbU6_n6RLlX5l1S5Zk2dsRtFNGJ2CIrqmn4_dw\r\nConnection: close\r\nContent-Length: 842\r\nContent-Type: application/json;charset=UTF-8\r\nCookie: pma_lang=zh_CN; phpMyAdmin=b6eb658324c8a60061e566b86986d8f9\r\nOrigin: http://localhost:5666\r\nReferer: http://localhost:5666/notification\r\nSec-Ch-Ua: \"Chromium\";v=\"136\", \"Google Chrome\";v=\"136\", \"Not.A/Brand\";v=\"99\"\r\nSec-Ch-Ua-Mobile: ?0\r\nSec-Ch-Ua-Platform: \"Windows\"\r\nSec-Fetch-Dest: empty\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: same-origin\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36\r\n\r\n{\"status\":\"inactive\",\"title\":\"元旦节日惠客通知\",\"notification_page\":\"/\",\"content\":\"<p>🎉元旦感恩特惠活动公告🎉 尊敬的用户,您好!为庆祝元旦节日,我们特别推出限时优惠活动: 活动时间: 2025年1月1日12:00 至 2025年1月2日12:00 活动内容: 活动期间内,所有功能无限次数通通 2折 优惠! 参与方式: 在活动时间内登录系统,即可享受所有服务 2 折优惠,机会难得,不容错过! 温馨提示: 为了方便您参与未来更多优惠活动,请将我们的网站收藏到您的浏览器书签中,或在百度搜索随时访问我们的最新动态和活动信息! 活动解释权归平台所有。 感谢您的支持,祝您元旦快乐!🎊</p>\",\"start_time\":\"\",\"end_time\":\"\",\"start_date\":\"2025-01-01\",\"end_date\":\"2025-01-02\"}","duration":"125335.6ms","level":"error","span":"a3d736f56bf9b9e0","trace":"5f7d45910180fc01355d02ccef655bb8"}
|
||||
{"@timestamp":"2025-05-15T15:28:23.920+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100005,ErrMsg:数据库繁忙,请稍后再试\n更新通知失败, err: 13 ? in sql, but only 12 arguments provided, req: &{Id:3 Title:元旦节日惠客通知 Content:<p>🎉元旦感恩特惠活动公告🎉 尊敬的用户,您好!为庆祝元旦节日,我们特别推出限时优惠活动: 活动时间: 2025年1月1日12:00 至 2025年1月2日12:00 活动内容: 活动期间内,所有功能无限次数通通 2折 优惠! 参与方式: 在活动时间内登录系统,即可享受所有服务 2 折优惠,机会难得,不容错过! 温馨提示: 为了方便您参与未来更多优惠活动,请将我们的网站收藏到您的浏览器书签中,或在百度搜索随时访问我们的最新动态和活动信息! 活动解释权归平台所有。 感谢您的支持,祝您元旦快乐!🎊</p> NotificationPage:/ StartDate:2025-01-01 StartTime: EndDate:2025-01-02 EndTime: Status:inactive}\ntyc-server/app/main/api/internal/logic/admin_notification.(*AdminUpdateNotificationLogic).AdminUpdateNotification\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_notification/adminupdatenotificationlogic.go:46\ntyc-server/app/main/api/internal/handler/admin_notification.AdminUpdateNotificationHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_notification/adminupdatenotificationhandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"690bc5b4ab2fc543","trace":"8a6ea2e1ee3add71fe988caf55916061"}
|
||||
{"@timestamp":"2025-05-15T15:29:56.035+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100005,ErrMsg:数据库繁忙,请稍后再试\n更新通知失败, err: 13 ? in sql, but only 12 arguments provided, req: &{Id:3 Title:元旦节日惠客通知 Content:<p>🎉元旦感恩特惠活动公告🎉 尊敬的用户,您好!为庆祝元旦节日,我们特别推出限时优惠活动: 活动时间: 2025年1月1日12:00 至 2025年1月2日12:00 活动内容: 活动期间内,所有功能无限次数通通 2折 优惠! 参与方式: 在活动时间内登录系统,即可享受所有服务 2 折优惠,机会难得,不容错过! 温馨提示: 为了方便您参与未来更多优惠活动,请将我们的网站收藏到您的浏览器书签中,或在百度搜索随时访问我们的最新动态和活动信息! 活动解释权归平台所有。 感谢您的支持,祝您元旦快乐!🎊</p> NotificationPage:/ StartDate:2025-01-01 StartTime: EndDate:2025-01-02 EndTime: Status:inactive}\ntyc-server/app/main/api/internal/logic/admin_notification.(*AdminUpdateNotificationLogic).AdminUpdateNotification\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_notification/adminupdatenotificationlogic.go:46\ntyc-server/app/main/api/internal/handler/admin_notification.AdminUpdateNotificationHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_notification/adminupdatenotificationhandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"d9f4e055384cc73f","trace":"c14d7c4e38a84e333f31d899ce3df99a"}
|
||||
{"@timestamp":"2025-05-15T15:42:08.935+08:00","caller":"sqlx/utils.go:147","content":"stmt: update `global_notifications` set `title`='元旦节日惠客通知',`content`='<p>🎉元旦感恩特惠活动公告🎉 尊敬的用户,您好!为庆祝元旦节日,我们特别推出限时优惠活动: 活动时间: 2025年1月1日12:00 至 2025年1月2日12:00 活动内容: 活动期间内,所有功能无限次数通通 2折 优惠! 参与方式: 在活动时间内登录系统,即可享受所有服务 2 折优惠,机会难得,不容错过! 温馨提示: 为了方便您参与未来更多优惠活动,请将我们的网站收藏到您的浏览器书签中,或在百度搜索随时访问我们的最新动态和活动信息! 活动解释权归平台所有。 感谢您的支持,祝您元旦快乐!🎊</p>',`notification_page`='/',`start_date`={2025-01-01 00:00:00 +0000 UTC true},`end_date`={2025-01-02 00:00:00 +0000 UTC true},`start_time`='',`end_time`='',`created_time`='0001-01-01 00:00:00 +0000 UTC',`updated_time`='0001-01-01 00:00:00 +0000 UTC',`status`='inactive',`del_state`=0,`version`=1,`delete_time`={0001-01-01 00:00:00 +0000 UTC false} where `id` = 3, error: Error 1292 (22007): Incorrect datetime value: '0000-00-00' for column 'created_time' at row 1","level":"error","span":"94463b3d515ade48","trace":"28ca068539c01ebd5e93b87b2f4db8c7"}
|
||||
{"@timestamp":"2025-05-15T15:42:08.935+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100005,ErrMsg:数据库繁忙,请稍后再试\n更新通知失败, err: Error 1292 (22007): Incorrect datetime value: '0000-00-00' for column 'created_time' at row 1, req: &{Id:3 Title:元旦节日惠客通知 Content:<p>🎉元旦感恩特惠活动公告🎉 尊敬的用户,您好!为庆祝元旦节日,我们特别推出限时优惠活动: 活动时间: 2025年1月1日12:00 至 2025年1月2日12:00 活动内容: 活动期间内,所有功能无限次数通通 2折 优惠! 参与方式: 在活动时间内登录系统,即可享受所有服务 2 折优惠,机会难得,不容错过! 温馨提示: 为了方便您参与未来更多优惠活动,请将我们的网站收藏到您的浏览器书签中,或在百度搜索随时访问我们的最新动态和活动信息! 活动解释权归平台所有。 感谢您的支持,祝您元旦快乐!🎊</p> NotificationPage:/ StartDate:2025-01-01 StartTime: EndDate:2025-01-02 EndTime: Status:inactive}\ntyc-server/app/main/api/internal/logic/admin_notification.(*AdminUpdateNotificationLogic).AdminUpdateNotification\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_notification/adminupdatenotificationlogic.go:46\ntyc-server/app/main/api/internal/handler/admin_notification.AdminUpdateNotificationHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_notification/adminupdatenotificationhandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"09470cfafab12cfc","trace":"28ca068539c01ebd5e93b87b2f4db8c7"}
|
||||
{"@timestamp":"2025-05-15T15:43:59.434+08:00","caller":"sqlx/utils.go:147","content":"stmt: update `global_notifications` set `title`='元旦节日惠客通知',`content`='<p>🎉元旦感恩特惠活动公告🎉 尊敬的用户,您好!为庆祝元旦节日,我们特别推出限时优惠活动: 活动时间: 2025年1月1日12:00 至 2025年1月2日12:00 活动内容: 活动期间内,所有功能无限次数通通 2折 优惠! 参与方式: 在活动时间内登录系统,即可享受所有服务 2 折优惠,机会难得,不容错过! 温馨提示: 为了方便您参与未来更多优惠活动,请将我们的网站收藏到您的浏览器书签中,或在百度搜索随时访问我们的最新动态和活动信息! 活动解释权归平台所有。 感谢您的支持,祝您元旦快乐!🎊</p>',`notification_page`='/',`start_date`={2025-01-01 00:00:00 +0000 UTC true},`end_date`={2025-01-02 00:00:00 +0000 UTC true},`start_time`='',`end_time`='',`created_time`='0001-01-01 00:00:00 +0000 UTC',`updated_time`='0001-01-01 00:00:00 +0000 UTC',`status`='inactive',`del_state`=0,`version`=1,`delete_time`={0001-01-01 00:00:00 +0000 UTC false} where `id` = 3, error: Error 1292 (22007): Incorrect datetime value: '0000-00-00' for column 'created_time' at row 1","level":"error","span":"05dda203e991ed65","trace":"0628633c2e124a03269789a41c9f0be5"}
|
||||
{"@timestamp":"2025-05-15T15:43:59.435+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100005,ErrMsg:数据库繁忙,请稍后再试\n更新通知失败, err: Error 1292 (22007): Incorrect datetime value: '0000-00-00' for column 'created_time' at row 1, req: &{Id:3 Title:元旦节日惠客通知 Content:<p>🎉元旦感恩特惠活动公告🎉 尊敬的用户,您好!为庆祝元旦节日,我们特别推出限时优惠活动: 活动时间: 2025年1月1日12:00 至 2025年1月2日12:00 活动内容: 活动期间内,所有功能无限次数通通 2折 优惠! 参与方式: 在活动时间内登录系统,即可享受所有服务 2 折优惠,机会难得,不容错过! 温馨提示: 为了方便您参与未来更多优惠活动,请将我们的网站收藏到您的浏览器书签中,或在百度搜索随时访问我们的最新动态和活动信息! 活动解释权归平台所有。 感谢您的支持,祝您元旦快乐!🎊</p> NotificationPage:/ StartDate:2025-01-01 StartTime: EndDate:2025-01-02 EndTime: Status:inactive}\ntyc-server/app/main/api/internal/logic/admin_notification.(*AdminUpdateNotificationLogic).AdminUpdateNotification\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_notification/adminupdatenotificationlogic.go:46\ntyc-server/app/main/api/internal/handler/admin_notification.AdminUpdateNotificationHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_notification/adminupdatenotificationhandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"5e7c558378b89b9b","trace":"0628633c2e124a03269789a41c9f0be5"}
|
||||
{"@timestamp":"2025-05-15T15:45:03.683+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100005,ErrMsg:数据库繁忙,请稍后再试\n更新通知失败, err: context deadline exceeded, req: &{Id:3 Title:元旦节日惠客通知 Content:<p>🎉元旦感恩特惠活动公告🎉 尊敬的用户,您好!为庆祝元旦节日,我们特别推出限时优惠活动: 活动时间: 2025年1月1日12:00 至 2025年1月2日12:00 活动内容: 活动期间内,所有功能无限次数通通 2折 优惠! 参与方式: 在活动时间内登录系统,即可享受所有服务 2 折优惠,机会难得,不容错过! 温馨提示: 为了方便您参与未来更多优惠活动,请将我们的网站收藏到您的浏览器书签中,或在百度搜索随时访问我们的最新动态和活动信息! 活动解释权归平台所有。 感谢您的支持,祝您元旦快乐!🎊</p> NotificationPage:/ StartDate:2025-01-01 StartTime: EndDate:2025-01-02 EndTime: Status:inactive}\ntyc-server/app/main/api/internal/logic/admin_notification.(*AdminUpdateNotificationLogic).AdminUpdateNotification\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_notification/adminupdatenotificationlogic.go:46\ntyc-server/app/main/api/internal/handler/admin_notification.AdminUpdateNotificationHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_notification/adminupdatenotificationhandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"65102f377c6dbb0b","trace":"3b9ed793f0302dc36de6a96d7f269ec3"}
|
||||
{"@timestamp":"2025-05-15T15:45:03.683+08:00","caller":"handler/loghandler.go:149","content":"[HTTP] 503 - PUT /api/v1/admin/notification/update/3 - [::1]:64584 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36\nPUT /api/v1/admin/notification/update/3 HTTP/1.1\r\nHost: localhost:8888\r\nAccept: application/json, text/plain, */*\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nAccept-Language: zh-CN\r\nAuthorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NDkzOTExMTYsImlhdCI6MTc0Njc5OTExNiwidXNlcklkIjoxfQ.4gJXQZbU6_n6RLlX5l1S5Zk2dsRtFNGJ2CIrqmn4_dw\r\nConnection: close\r\nContent-Length: 842\r\nContent-Type: application/json;charset=UTF-8\r\nCookie: pma_lang=zh_CN; phpMyAdmin=b6eb658324c8a60061e566b86986d8f9\r\nOrigin: http://localhost:5666\r\nReferer: http://localhost:5666/notification\r\nSec-Ch-Ua: \"Chromium\";v=\"136\", \"Google Chrome\";v=\"136\", \"Not.A/Brand\";v=\"99\"\r\nSec-Ch-Ua-Mobile: ?0\r\nSec-Ch-Ua-Platform: \"Windows\"\r\nSec-Fetch-Dest: empty\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: same-origin\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36\r\n\r\n{\"status\":\"inactive\",\"title\":\"元旦节日惠客通知\",\"notification_page\":\"/\",\"content\":\"<p>🎉元旦感恩特惠活动公告🎉 尊敬的用户,您好!为庆祝元旦节日,我们特别推出限时优惠活动: 活动时间: 2025年1月1日12:00 至 2025年1月2日12:00 活动内容: 活动期间内,所有功能无限次数通通 2折 优惠! 参与方式: 在活动时间内登录系统,即可享受所有服务 2 折优惠,机会难得,不容错过! 温馨提示: 为了方便您参与未来更多优惠活动,请将我们的网站收藏到您的浏览器书签中,或在百度搜索随时访问我们的最新动态和活动信息! 活动解释权归平台所有。 感谢您的支持,祝您元旦快乐!🎊</p>\",\"start_time\":\"\",\"end_time\":\"\",\"start_date\":\"2025-01-01\",\"end_date\":\"2025-01-02\"}","duration":"26595.8ms","level":"error","span":"65102f377c6dbb0b","trace":"3b9ed793f0302dc36de6a96d7f269ec3"}
|
||||
{"@timestamp":"2025-05-15T15:45:08.357+08:00","caller":"sqlx/utils.go:147","content":"stmt: update `global_notifications` set `title`='通知',`content`='<div class=\\\"font-2xl font-bold mb-2\\\">升级通知</div> \\r\\n<p class=\\\"mb-4\\\">\\r\\n 尊敬的用户,您好!由于平台进行全面功能升级,今日12点至下午15点期间,所有功能将暂时不可用。 \\r\\n 我们深感抱歉,给您带来的不便敬请谅解。\\r\\n</p>\\r\\n<p class=\\\"text-base text-gray-500 mb-4\\\">\\r\\n 请您在升级完成后再尝试使用相关功能。感谢您的理解与支持!\\r\\n</p>\\r\\n',`notification_page`='/',`start_date`={0001-01-01 00:00:00 +0000 UTC false},`end_date`={0001-01-01 00:00:00 +0000 UTC false},`start_time`='12:00:00',`end_time`='15:00:00',`created_time`='0001-01-01 00:00:00 +0000 UTC',`updated_time`='0001-01-01 00:00:00 +0000 UTC',`status`='inactive',`del_state`=1,`version`=1,`delete_time`={2025-05-15 15:45:08.3562001 +0800 CST m=+77.862732701 true} where `id` = 4 and version = 0 , error: Error 1292 (22007): Incorrect datetime value: '0000-00-00' for column 'created_time' at row 1","level":"error","span":"099ec10c8fcaa297","trace":"01027e3fb1f1d7700eeb0467712590b4"}
|
||||
{"@timestamp":"2025-05-15T15:45:08.357+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100005,ErrMsg:数据库繁忙,请稍后再试\n删除通知失败, err: GlobalNotificationsModel delete err : Error 1292 (22007): Incorrect datetime value: '0000-00-00' for column 'created_time' at row 1: delete soft failed , id: 4\ntyc-server/app/main/api/internal/logic/admin_notification.(*AdminDeleteNotificationLogic).AdminDeleteNotification\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_notification/admindeletenotificationlogic.go:35\ntyc-server/app/main/api/internal/handler/admin_notification.AdminDeleteNotificationHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_notification/admindeletenotificationhandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"6099296888d29cb1","trace":"01027e3fb1f1d7700eeb0467712590b4"}
|
||||
{"@timestamp":"2025-05-15T15:45:18.242+08:00","caller":"sqlx/utils.go:147","content":"stmt: update `global_notifications` set `title`='通知',`content`='<div class=\\\"font-2xl font-bold mb-2\\\">升级通知</div> \\r\\n<p class=\\\"mb-4\\\">\\r\\n 尊敬的用户,您好!由于平台进行全面功能升级,今日12点至下午15点期间,所有功能将暂时不可用。 \\r\\n 我们深感抱歉,给您带来的不便敬请谅解。\\r\\n</p>\\r\\n<p class=\\\"text-base text-gray-500 mb-4\\\">\\r\\n 请您在升级完成后再尝试使用相关功能。感谢您的理解与支持!\\r\\n</p>\\r\\n',`notification_page`='/',`start_date`={0001-01-01 00:00:00 +0000 UTC false},`end_date`={0001-01-01 00:00:00 +0000 UTC false},`start_time`='12:00:00',`end_time`='15:00:00',`created_time`='0001-01-01 00:00:00 +0000 UTC',`updated_time`='0001-01-01 00:00:00 +0000 UTC',`status`='inactive',`del_state`=1,`version`=1,`delete_time`={2025-05-15 15:45:18.2411283 +0800 CST m=+87.747660901 true} where `id` = 4 and version = 0 , error: Error 1292 (22007): Incorrect datetime value: '0000-00-00' for column 'created_time' at row 1","level":"error","span":"27a568bb7c17df60","trace":"3fa21f5f87161092d428e62480cdea7a"}
|
||||
{"@timestamp":"2025-05-15T15:45:18.242+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100005,ErrMsg:数据库繁忙,请稍后再试\n删除通知失败, err: GlobalNotificationsModel delete err : Error 1292 (22007): Incorrect datetime value: '0000-00-00' for column 'created_time' at row 1: delete soft failed , id: 4\ntyc-server/app/main/api/internal/logic/admin_notification.(*AdminDeleteNotificationLogic).AdminDeleteNotification\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_notification/admindeletenotificationlogic.go:35\ntyc-server/app/main/api/internal/handler/admin_notification.AdminDeleteNotificationHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_notification/admindeletenotificationhandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"8475cb20edf83232","trace":"3fa21f5f87161092d428e62480cdea7a"}
|
||||
{"@timestamp":"2025-05-15T15:45:19.567+08:00","caller":"sqlx/utils.go:147","content":"stmt: update `global_notifications` set `title`='元旦节日惠客通知',`content`='<div style=\\\"font-family: Arial, sans-serif; line-height: 1.3; color: #333;\\\">\\n <h2 style=\\\"text-align: center; color: #d9534f; font-size: 24px; margin-bottom: 20px;\\\">🎉元旦感恩特惠活动公告🎉</h2>\\n \\n <p style=\\\"font-size: 18px; margin-bottom: 10px;\\\">\\n 尊敬的用户,您好!为庆祝元旦节日,我们特别推出限时优惠活动:\\n </p>\\n \\n <p style=\\\"font-size: 16px; margin-bottom: 10px;\\\">\\n <strong style=\\\"color: #d9534f;\\\">活动时间:</strong> \\n <span style=\\\"color: #0275d8;\\\">2025年1月1日12:00 至 2025年1月2日12:00</span>\\n </p>\\n \\n <p style=\\\"font-size: 16px; margin-bottom: 10px;\\\">\\n <strong style=\\\"color: #d9534f;\\\">活动内容:</strong> \\n 活动期间内,所有功能无限次数通通 \\n <span style=\\\"color: #d9534f; font-weight: bold; font-size: 20px;\\\">2折</span> 优惠!\\n </p>\\n \\n <p style=\\\"font-size: 16px; margin-bottom: 10px;\\\">\\n <strong style=\\\"color: #d9534f;\\\">参与方式:</strong> \\n 在活动时间内登录系统,即可享受所有服务 2 折优惠,机会难得,不容错过!\\n </p>\\n \\n <p style=\\\"font-size: 16px; margin-bottom: 10px; color: #333;\\\">\\n <strong style=\\\"color: #5cb85c;\\\">温馨提示:</strong>\\n 为了方便您参与未来更多优惠活动,请将我们的网站收藏到您的浏览器书签中,或在百度搜索随时访问我们的最新动态和活动信息!\\n </p>\\n \\n <p style=\\\"font-size: 14px; margin-bottom: 10px; color: #888;\\\">\\n 活动解释权归平台所有。\\n </p>\\n \\n <p style=\\\"text-align: center; margin-top: 20px; font-size: 16px; color: #5cb85c;\\\">\\n 感谢您的支持,祝您元旦快乐!🎊\\n </p>\\n </div>',`notification_page`='/',`start_date`={2025-01-01 00:00:00 +0800 CST true},`end_date`={2025-01-02 00:00:00 +0800 CST true},`start_time`='00:00:00',`end_time`='12:00:00',`created_time`='0001-01-01 00:00:00 +0000 UTC',`updated_time`='0001-01-01 00:00:00 +0000 UTC',`status`='inactive',`del_state`=1,`version`=2,`delete_time`={2025-05-15 15:45:19.5655646 +0800 CST m=+89.072097201 true} where `id` = 3 and version = 1 , error: Error 1292 (22007): Incorrect datetime value: '0000-00-00' for column 'created_time' at row 1","level":"error","span":"ebef4569c7d11958","trace":"60a60432285c02bea2c0187441f06503"}
|
||||
{"@timestamp":"2025-05-15T15:45:19.567+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100005,ErrMsg:数据库繁忙,请稍后再试\n删除通知失败, err: GlobalNotificationsModel delete err : Error 1292 (22007): Incorrect datetime value: '0000-00-00' for column 'created_time' at row 1: delete soft failed , id: 3\ntyc-server/app/main/api/internal/logic/admin_notification.(*AdminDeleteNotificationLogic).AdminDeleteNotification\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_notification/admindeletenotificationlogic.go:35\ntyc-server/app/main/api/internal/handler/admin_notification.AdminDeleteNotificationHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_notification/admindeletenotificationhandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"61b3b0137f0a6c33","trace":"60a60432285c02bea2c0187441f06503"}
|
||||
{"@timestamp":"2025-05-15T15:45:59.204+08:00","caller":"sqlx/utils.go:147","content":"stmt: insert into `global_notifications` (`title`,`content`,`notification_page`,`start_date`,`end_date`,`start_time`,`end_time`,`created_time`,`updated_time`,`status`,`del_state`,`version`,`delete_time`) values ('节日特惠', '<p style=\\\"text-align: start;\\\">尊敬的顾客朋友:</p><p style=\\\"text-align: start;\\\">感谢您一直以来对【店铺/品牌名称】的支持!为回馈新老客户,我们特推出以下超值优惠活动:</p><p style=\\\"text-align: start;\\\"><strong>📅 活动时间</strong><br><br>2023年X月X日 - X月X日</p><p style=\\\"text-align: start;\\\"><strong>🎉 促销内容</strong><br><br>1️⃣ <strong>全场商品低至5折</strong>:指定商品享折上折,部分爆款限时秒杀!<br><br>2️⃣ <strong>满减狂欢</strong>:单笔消费满【金额】立减【金额】,多买多省!<br><br>3️⃣ <strong>赠品福利</strong>:消费满【金额】即赠【赠品名称】,数量有限,先到先得!<br><br>4️⃣ <strong>会员专享</strong>:注册成为会员,额外领【XX元无门槛优惠券】!</p><p style=\\\"text-align: start;\\\"><strong>📍 参与方式</strong><br><br>线下:到店选购,地址:【门店地址】<br><br>线上:进入【小程序/APP/网店名称】,搜索活动专区即可参与!</p><p style=\\\"text-align: start;\\\"><strong>📞 咨询方式</strong><br><br>电话:【XXX-XXXXXXX】<br><br>客服微信:【微信号/二维码】</p><p style=\\\"text-align: start;\\\">**❗ 温馨提示**<br><br>• 活动仅限指定商品,不与其他优惠叠加。<br><br>• 赠品/优惠券数量有限,先到先得,用完即止。</p><p style=\\\"text-align: start;\\\"><strong>👉 速来抢购,错过再等一年!</strong></p><p style=\\\"text-align: start;\\\">【店铺/品牌名称】<br><br>2023年X月X日</p>', '/', {2025-05-23 00:00:00 +0000 UTC true}, {2025-05-23 00:00:00 +0000 UTC true}, '', '', '0001-01-01 00:00:00 +0000 UTC', '0001-01-01 00:00:00 +0000 UTC', 'active', 0, 0, {0001-01-01 00:00:00 +0000 UTC false}), error: Error 1292 (22007): Incorrect datetime value: '0000-00-00' for column 'created_time' at row 1","level":"error","span":"9aed83c75afe42a9","trace":"4497c3cfbb931fdfb0d03cab2ea5b665"}
|
||||
{"@timestamp":"2025-05-15T15:45:59.205+08:00","caller":"result/httpResult.go:40","content":"【API-ERR】 : ErrCode:100005,ErrMsg:数据库繁忙,请稍后再试\n创建通知失败, err: Error 1292 (22007): Incorrect datetime value: '0000-00-00' for column 'created_time' at row 1, req: &{Title:节日特惠 NotificationPage:/ Content:<p style=\"text-align: start;\">尊敬的顾客朋友:</p><p style=\"text-align: start;\">感谢您一直以来对【店铺/品牌名称】的支持!为回馈新老客户,我们特推出以下超值优惠活动:</p><p style=\"text-align: start;\"><strong>📅 活动时间</strong><br><br>2023年X月X日 - X月X日</p><p style=\"text-align: start;\"><strong>🎉 促销内容</strong><br><br>1️⃣ <strong>全场商品低至5折</strong>:指定商品享折上折,部分爆款限时秒杀!<br><br>2️⃣ <strong>满减狂欢</strong>:单笔消费满【金额】立减【金额】,多买多省!<br><br>3️⃣ <strong>赠品福利</strong>:消费满【金额】即赠【赠品名称】,数量有限,先到先得!<br><br>4️⃣ <strong>会员专享</strong>:注册成为会员,额外领【XX元无门槛优惠券】!</p><p style=\"text-align: start;\"><strong>📍 参与方式</strong><br><br>线下:到店选购,地址:【门店地址】<br><br>线上:进入【小程序/APP/网店名称】,搜索活动专区即可参与!</p><p style=\"text-align: start;\"><strong>📞 咨询方式</strong><br><br>电话:【XXX-XXXXXXX】<br><br>客服微信:【微信号/二维码】</p><p style=\"text-align: start;\">**❗ 温馨提示**<br><br>• 活动仅限指定商品,不与其他优惠叠加。<br><br>• 赠品/优惠券数量有限,先到先得,用完即止。</p><p style=\"text-align: start;\"><strong>👉 速来抢购,错过再等一年!</strong></p><p style=\"text-align: start;\">【店铺/品牌名称】<br><br>2023年X月X日</p> StartDate:2025-05-23 StartTime: EndDate:2025-05-23 EndTime: Status:active}\ntyc-server/app/main/api/internal/logic/admin_notification.(*AdminCreateNotificationLogic).AdminCreateNotification\n\tD:/Code/tyc-server/app/main/api/internal/logic/admin_notification/admincreatenotificationlogic.go:45\ntyc-server/app/main/api/internal/handler/admin_notification.AdminCreateNotificationHandler.func1\n\tD:/Code/tyc-server/app/main/api/internal/handler/admin_notification/admincreatenotificationhandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ntyc-server/app/main/api/internal/middleware/global.ReqHeaderCtxMiddleware.func1\n\tD:/Code/tyc-server/app/main/api/internal/middleware/global/reqHeaderCtxMiddleware.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.GunzipHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/gunziphandler.go:26\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MaxBytesHandler.func2.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/maxbyteshandler.go:24\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.MetricHandler.func1.1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/metrichandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.RecoverHandler.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/recoverhandler.go:21\nnet/http.HandlerFunc.ServeHTTP\n\tD:/Go/src/net/http/server.go:2220\ngithub.com/zeromicro/go-zero/rest/handler.(*timeoutHandler).ServeHTTP.func1\n\tD:/GoPath/pkg/mod/github.com/zeromicro/go-zero@v1.7.3/rest/handler/timeouthandler.go:86\nruntime.goexit\n\tD:/Go/src/runtime/asm_amd64.s:1700 ","level":"error","span":"0404912b66efc809","trace":"4497c3cfbb931fdfb0d03cab2ea5b665"}
|
0
app/main/api/logs/severe.log
Normal file
0
app/main/api/logs/severe.log
Normal file
7
app/main/api/logs/slow.log
Normal file
7
app/main/api/logs/slow.log
Normal file
@ -0,0 +1,7 @@
|
||||
{"@timestamp":"2025-05-13T14:31:55.084+08:00","caller":"handler/loghandler.go:131","content":"[HTTP] 200 - POST /api/v1/admin/order/refund/71 - [::1]:61204 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 - slowcall(500.6ms)","duration":"500.6ms","level":"slow","span":"9a72009ad3e58f79","trace":"8b13d8216f560059f537fdc6220acfaa"}
|
||||
{"@timestamp":"2025-05-13T14:44:55.105+08:00","caller":"handler/loghandler.go:131","content":"[HTTP] 200 - POST /api/v1/admin/order/refund/71 - [::1]:63669 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 - slowcall(1216.3ms)","duration":"1216.3ms","level":"slow","span":"e2f43b44d0c7e18c","trace":"39dba17b09053137576465344d148d8c"}
|
||||
{"@timestamp":"2025-05-13T14:48:32.909+08:00","caller":"handler/loghandler.go:131","content":"[HTTP] 200 - POST /api/v1/admin/order/refund/72 - [::1]:64320 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 - slowcall(1367.8ms)","duration":"1367.8ms","level":"slow","span":"8852637ff26e229c","trace":"6175ff3a33388b09d8f8ac904f3f8735"}
|
||||
{"@timestamp":"2025-05-13T14:54:47.148+08:00","caller":"handler/loghandler.go:131","content":"[HTTP] 503 - POST /api/v1/admin/order/refund/73 - [::1]:65232 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 - slowcall(22225.1ms)","duration":"22225.1ms","level":"slow","span":"56f994acf11f4947","trace":"ec66934967ca81a2c4f22b64f4f8daa8"}
|
||||
{"@timestamp":"2025-05-13T14:59:26.548+08:00","caller":"handler/loghandler.go:131","content":"[HTTP] 200 - POST /api/v1/admin/order/refund/74 - [::1]:50813 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 - slowcall(1326.7ms)","duration":"1326.7ms","level":"slow","span":"760e1882583f08e6","trace":"bb4ad1ceac0185e5b7004c66f3e876d6"}
|
||||
{"@timestamp":"2025-05-15T15:28:19.393+08:00","caller":"handler/loghandler.go:131","content":"[HTTP] 503 - PUT /api/v1/admin/notification/update/3 - [::1]:56840 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 - slowcall(125335.6ms)","duration":"125335.6ms","level":"slow","span":"a3d736f56bf9b9e0","trace":"5f7d45910180fc01355d02ccef655bb8"}
|
||||
{"@timestamp":"2025-05-15T15:45:03.683+08:00","caller":"handler/loghandler.go:131","content":"[HTTP] 503 - PUT /api/v1/admin/notification/update/3 - [::1]:64584 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 - slowcall(26595.8ms)","duration":"26595.8ms","level":"slow","span":"65102f377c6dbb0b","trace":"3b9ed793f0302dc36de6a96d7f269ec3"}
|
1061
app/main/api/logs/stat.log
Normal file
1061
app/main/api/logs/stat.log
Normal file
File diff suppressed because it is too large
Load Diff
1795
app/main/api/logs/stat.log-2025-05-13
Normal file
1795
app/main/api/logs/stat.log-2025-05-13
Normal file
File diff suppressed because it is too large
Load Diff
2298
app/main/api/logs/stat.log-2025-05-14
Normal file
2298
app/main/api/logs/stat.log-2025-05-14
Normal file
File diff suppressed because it is too large
Load Diff
1
app/main/api/main.api
Normal file
1
app/main/api/main.api
Normal file
@ -0,0 +1 @@
|
||||
import "desc/admin/notification.api"
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user