190 lines
4.6 KiB
Go
190 lines
4.6 KiB
Go
|
|
package trace
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"fmt"
|
||
|
|
v1 "leke/api/user/v1"
|
||
|
|
"leke/internal/dao"
|
||
|
|
"leke/internal/model/entity"
|
||
|
|
"leke/internal/service"
|
||
|
|
|
||
|
|
"github.com/gogf/gf/v2/database/gdb"
|
||
|
|
"github.com/gogf/gf/v2/os/gtime"
|
||
|
|
)
|
||
|
|
|
||
|
|
type sTrace struct{}
|
||
|
|
|
||
|
|
func NewTrace() *sTrace {
|
||
|
|
return &sTrace{}
|
||
|
|
}
|
||
|
|
|
||
|
|
func init() {
|
||
|
|
service.RegisterTrace(NewTrace())
|
||
|
|
}
|
||
|
|
|
||
|
|
// TraceList 获取轨迹列表
|
||
|
|
func (s *sTrace) TraceList(ctx context.Context, req *v1.TraceListReq) (res *v1.TraceListRes, err error) {
|
||
|
|
// 创建数据库查询模型
|
||
|
|
m := dao.RoleCards.Ctx(ctx)
|
||
|
|
|
||
|
|
// 根据角色ID查询
|
||
|
|
if req.RoleId != 0 {
|
||
|
|
m = m.Where(dao.RoleCards.Columns().Id, req.RoleId)
|
||
|
|
}
|
||
|
|
|
||
|
|
// 查询总数
|
||
|
|
total, err := m.Count()
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
// 分页处理
|
||
|
|
m = m.Page(req.Page, req.PageSize)
|
||
|
|
|
||
|
|
// 查询列表数据 (Scan 到实体)
|
||
|
|
var roleCards []*entity.RoleCards
|
||
|
|
err = m.Scan(&roleCards)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
// 转换为视图参数
|
||
|
|
traceList := make([]*v1.TraceViewParams, 0, len(roleCards))
|
||
|
|
for _, card := range roleCards {
|
||
|
|
traceList = append(traceList, &v1.TraceViewParams{
|
||
|
|
UserId: card.UserId,
|
||
|
|
RoleId: card.Id,
|
||
|
|
DepartmentId: card.DepartmentId,
|
||
|
|
RedTrace: int(card.RedTrack),
|
||
|
|
YellowTrace: int(card.YellowTrack),
|
||
|
|
BlueTrace: int(card.BlueTrack),
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
res = &v1.TraceListRes{
|
||
|
|
List: traceList,
|
||
|
|
}
|
||
|
|
|
||
|
|
// 设置分页信息
|
||
|
|
req.PageResult.Total = int(total)
|
||
|
|
req.PageResult.Page = req.Page
|
||
|
|
req.PageResult.PageSize = req.PageSize
|
||
|
|
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// TraceView 查看轨迹详情
|
||
|
|
func (s *sTrace) TraceView(ctx context.Context, req *v1.TraceViewReq) (res *v1.TraceViewRes, err error) {
|
||
|
|
// 创建数据库查询模型
|
||
|
|
m := dao.RoleCards.Ctx(ctx)
|
||
|
|
|
||
|
|
// 根据角色ID查询
|
||
|
|
var card entity.RoleCards
|
||
|
|
err = m.Where(dao.RoleCards.Columns().Id, req.RoleId).Scan(&card)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
res = &v1.TraceViewRes{
|
||
|
|
TraceViewParams: v1.TraceViewParams{
|
||
|
|
UserId: card.UserId,
|
||
|
|
RoleId: card.Id,
|
||
|
|
DepartmentId: card.DepartmentId,
|
||
|
|
RedTrace: int(card.RedTrack),
|
||
|
|
YellowTrace: int(card.YellowTrack),
|
||
|
|
BlueTrace: int(card.BlueTrack),
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// TraceUpdate 更新轨迹信息 (增加)
|
||
|
|
func (s *sTrace) TraceUpdate(ctx context.Context, req *v1.TraceUpdateReq) (res *v1.TraceUpdateRes, err error) {
|
||
|
|
// 创建数据库查询模型
|
||
|
|
m := dao.RoleCards.Ctx(ctx)
|
||
|
|
|
||
|
|
// 准备更新数据
|
||
|
|
data := make(map[string]interface{})
|
||
|
|
|
||
|
|
// 只有当数值不为0时才进行更新操作
|
||
|
|
if req.RedTrace != 0 {
|
||
|
|
data[dao.RoleCards.Columns().RedTrack] = gdb.Raw(fmt.Sprintf("%s + %d", dao.RoleCards.Columns().RedTrack, req.RedTrace))
|
||
|
|
}
|
||
|
|
|
||
|
|
if req.YellowTrace != 0 {
|
||
|
|
data[dao.RoleCards.Columns().YellowTrack] = gdb.Raw(fmt.Sprintf("%s + %d", dao.RoleCards.Columns().YellowTrack, req.YellowTrace))
|
||
|
|
}
|
||
|
|
|
||
|
|
if req.BlueTrace != 0 {
|
||
|
|
data[dao.RoleCards.Columns().BlueTrack] = gdb.Raw(fmt.Sprintf("%s + %d", dao.RoleCards.Columns().BlueTrack, req.BlueTrace))
|
||
|
|
}
|
||
|
|
|
||
|
|
// 如果没有需要更新的字段,直接返回
|
||
|
|
if len(data) == 0 {
|
||
|
|
return &v1.TraceUpdateRes{
|
||
|
|
RoleId: req.RoleId,
|
||
|
|
RedTrace: req.RedTrace,
|
||
|
|
YellowTrace: req.YellowTrace,
|
||
|
|
BlueTrace: req.BlueTrace,
|
||
|
|
}, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// 添加更新时间
|
||
|
|
data[dao.RoleCards.Columns().UpdatedAt] = gtime.Now()
|
||
|
|
|
||
|
|
// 执行更新
|
||
|
|
_, err = m.Data(data).Where(dao.RoleCards.Columns().Id, req.RoleId).Update()
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
res = &v1.TraceUpdateRes{
|
||
|
|
RoleId: req.RoleId,
|
||
|
|
RedTrace: req.RedTrace,
|
||
|
|
YellowTrace: req.YellowTrace,
|
||
|
|
BlueTrace: req.BlueTrace,
|
||
|
|
}
|
||
|
|
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// TraceReduce 减少轨迹数值
|
||
|
|
func (s *sTrace) TraceReduce(ctx context.Context, req *v1.TraceReduceReq) (res *v1.TraceReduceRes, err error) {
|
||
|
|
// 创建数据库查询模型
|
||
|
|
m := dao.RoleCards.Ctx(ctx)
|
||
|
|
|
||
|
|
// 准备更新数据
|
||
|
|
data := make(map[string]interface{})
|
||
|
|
|
||
|
|
// 只有当数值不为0时才进行减少操作
|
||
|
|
if req.RedTrace != 0 {
|
||
|
|
data[dao.RoleCards.Columns().RedTrack] = gdb.Raw(fmt.Sprintf("GREATEST(0, %s - %d)", dao.RoleCards.Columns().RedTrack, req.RedTrace))
|
||
|
|
}
|
||
|
|
|
||
|
|
if req.YellowTrace != 0 {
|
||
|
|
data[dao.RoleCards.Columns().YellowTrack] = gdb.Raw(fmt.Sprintf("GREATEST(0, %s - %d)", dao.RoleCards.Columns().YellowTrack, req.YellowTrace))
|
||
|
|
}
|
||
|
|
|
||
|
|
if req.BlueTrace != 0 {
|
||
|
|
data[dao.RoleCards.Columns().BlueTrack] = gdb.Raw(fmt.Sprintf("GREATEST(0, %s - %d)", dao.RoleCards.Columns().BlueTrack, req.BlueTrace))
|
||
|
|
}
|
||
|
|
|
||
|
|
// 如果没有需要更新的字段,直接返回
|
||
|
|
if len(data) == 0 {
|
||
|
|
return &v1.TraceReduceRes{}, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// 添加更新时间
|
||
|
|
data[dao.RoleCards.Columns().UpdatedAt] = gtime.Now()
|
||
|
|
|
||
|
|
// 执行更新
|
||
|
|
_, err = m.Data(data).Where(dao.RoleCards.Columns().Id, req.RoleId).Update()
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
res = &v1.TraceReduceRes{}
|
||
|
|
return
|
||
|
|
}
|