✨ 调整文件结构

This commit is contained in:
sugarBecomer
2025-11-10 14:46:01 +08:00
parent 7262023382
commit b031157f98
44 changed files with 114 additions and 110 deletions
+4 -4
View File
@@ -4,7 +4,7 @@ import (
"context"
"likedream-goframe/internal/api"
"likedream-goframe/internal/application/filestorage"
"likedream-goframe/internal/db"
db2 "likedream-goframe/internal/common/db"
_ "likedream-goframe/internal/ent/runtime"
"likedream-goframe/internal/framework/redis"
"likedream-goframe/internal/framework/schedule"
@@ -17,10 +17,10 @@ import (
)
func Run() {
db.InitDB()
db2.InitDB()
// 如果没有数据,进行数据初始化
if !db.CheckHasData() {
db.GenerateData()
if !db2.CheckHasData() {
db2.GenerateData()
}
ctx, cancel := context.WithCancel(gctx.GetInitCtx())
+1 -1
View File
@@ -2,6 +2,7 @@ package api
import (
"context"
"likedream-goframe/internal/common/cst"
"likedream-goframe/internal/controller/agent"
"likedream-goframe/internal/controller/card"
"likedream-goframe/internal/controller/common"
@@ -11,7 +12,6 @@ import (
"likedream-goframe/internal/controller/role"
"likedream-goframe/internal/controller/user"
"likedream-goframe/internal/controller/user_login"
"likedream-goframe/internal/cst"
"likedream-goframe/internal/middleware"
"likedream-goframe/internal/utils"
@@ -5,8 +5,8 @@ import (
"encoding/json"
"likedream-goframe/internal/application/cpdaily/types"
"likedream-goframe/internal/application/filestorage"
"likedream-goframe/internal/common/db"
"likedream-goframe/internal/common/errors"
"likedream-goframe/internal/db"
"likedream-goframe/internal/ent"
"likedream-goframe/internal/ent/cpimage"
"likedream-goframe/internal/utils"
+2 -1
View File
@@ -2,8 +2,9 @@ package cpdaily
import (
"context"
"likedream-goframe/internal/common/cst"
"github.com/gogf/gf/v2/frame/g"
"likedream-goframe/internal/cst"
)
type Info struct {
+1 -1
View File
@@ -9,8 +9,8 @@ import (
"likedream-goframe/internal/application/cookiejar"
"likedream-goframe/internal/application/cpdaily/school"
"likedream-goframe/internal/application/httpclient"
"likedream-goframe/internal/common/cst"
"likedream-goframe/internal/common/errors"
"likedream-goframe/internal/cst"
"likedream-goframe/internal/framework/redis"
"likedream-goframe/internal/utils"
"net/http"
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"context"
"io"
"likedream-goframe/internal/application/httpclient"
"likedream-goframe/internal/cst"
"likedream-goframe/internal/common/cst"
"likedream-goframe/internal/utils"
"github.com/gogf/gf/v2/frame/g"
@@ -5,8 +5,8 @@ import (
"encoding/json"
"fmt"
"likedream-goframe/internal/application/cpdaily/types"
"likedream-goframe/internal/common/cst"
"likedream-goframe/internal/common/errors"
"likedream-goframe/internal/cst"
"likedream-goframe/internal/utils"
"strings"
@@ -10,8 +10,8 @@ import (
"likedream-goframe/internal/application/cpdaily/task/formtype"
"likedream-goframe/internal/application/cpdaily/taskhelper"
"likedream-goframe/internal/application/cpdaily/types"
"likedream-goframe/internal/common/cst"
"likedream-goframe/internal/common/errors"
"likedream-goframe/internal/cst"
"likedream-goframe/internal/utils"
"math/rand/v2"
"strconv"
+2 -1
View File
@@ -2,8 +2,9 @@ package filestorage
import (
"context"
"likedream-goframe/internal/common/cst"
"github.com/gogf/gf/v2/frame/g"
"likedream-goframe/internal/cst"
)
var GlobalS3 *S3
@@ -2,13 +2,14 @@ package db
import (
"context"
"github.com/gogf/gf/v2/os/gctx"
"github.com/shopspring/decimal"
"likedream-goframe/internal/cst"
"likedream-goframe/internal/common/cst"
"likedream-goframe/internal/ent/sysmenu"
"likedream-goframe/internal/ent/sysrole"
"likedream-goframe/internal/ent/sysuser"
"likedream-goframe/internal/utils"
"github.com/gogf/gf/v2/os/gctx"
"github.com/shopspring/decimal"
)
func CheckHasData() bool {
@@ -2,7 +2,7 @@ package db
import (
"context"
"likedream-goframe/internal/cst"
"likedream-goframe/internal/common/cst"
"likedream-goframe/internal/ent"
"likedream-goframe/internal/framework/logger"
"likedream-goframe/internal/utils"
+1 -1
View File
@@ -2,7 +2,7 @@ package redis
import (
"context"
"likedream-goframe/internal/cst"
"likedream-goframe/internal/common/cst"
"likedream-goframe/internal/utils"
"time"
@@ -8,8 +8,8 @@ import (
"likedream-goframe/internal/application/cpdaily/school"
task2 "likedream-goframe/internal/application/cpdaily/task"
"likedream-goframe/internal/application/cpdaily/task/formtype"
"likedream-goframe/internal/common/db"
errors2 "likedream-goframe/internal/common/errors"
"likedream-goframe/internal/db"
"likedream-goframe/internal/ent"
"likedream-goframe/internal/ent/cptask"
"likedream-goframe/internal/ent/cpuser"
+1 -1
View File
@@ -2,7 +2,7 @@ package schedule
import (
"context"
"likedream-goframe/internal/cst"
"likedream-goframe/internal/common/cst"
"likedream-goframe/internal/framework/redis"
"likedream-goframe/internal/utils"
+1 -1
View File
@@ -2,7 +2,7 @@ package schedule
import (
"context"
"likedream-goframe/internal/db"
"likedream-goframe/internal/common/db"
"likedream-goframe/internal/ent/cptask"
"likedream-goframe/internal/utils"
+7 -7
View File
@@ -6,8 +6,8 @@ import (
"encoding/gob"
"errors"
"fmt"
"likedream-goframe/internal/cst"
"likedream-goframe/internal/db"
cst2 "likedream-goframe/internal/common/cst"
"likedream-goframe/internal/common/db"
"likedream-goframe/internal/ent"
"likedream-goframe/internal/ent/cptask"
"likedream-goframe/internal/framework/queue"
@@ -82,7 +82,7 @@ func (ts *TaskScanner) StopScan() {
func (ts *TaskScanner) scanCpdailyTask() {
currentTime := time.Now().In(cst.TimeZoneShangHai)
currentTime := time.Now().In(cst2.TimeZoneShangHai)
// 只查询30分钟以内的任务
minExecuteTime := currentTime.Add(-30 * time.Minute).Unix()
@@ -97,7 +97,7 @@ func (ts *TaskScanner) scanCpdailyTask() {
for _, task := range allTasks {
// 30分钟之前的任务不再执行,但是要重置下次执行时间
if *task.NextExecuteTime < minExecuteTime {
originExecuteTime := time.Unix(*task.NextExecuteTime, 0).In(cst.TimeZoneShangHai).Format("2006-01-02 15:04:05")
originExecuteTime := time.Unix(*task.NextExecuteTime, 0).In(cst2.TimeZoneShangHai).Format("2006-01-02 15:04:05")
g.Log().Debugf(ts.ctx, "任务ID %d 已过期,原来预计执行时间:%s,跳过执行", task.ID, originExecuteTime)
continue
}
@@ -112,16 +112,16 @@ func (ts *TaskScanner) scanCpdailyTask() {
utils.OkOrPanic(e, oops.WithContext(ts.ctx).With("payload", payload).In("CpdailyTaskScanner.scanCpdailyTask").Wrap)
year, month, day := currentTime.Date()
execTime := time.Date(year, month, day, *task.ExecuteHour, *task.ExecuteMinute, 0, 0, cst.TimeZoneShangHai)
execTime := time.Date(year, month, day, *task.ExecuteHour, *task.ExecuteMinute, 0, 0, cst2.TimeZoneShangHai)
e = utils.Catch(func() {
queue.AddTask(ts.ctx, asynq.NewTask(cst.TaskCpdaily, payloadWriter.Bytes()),
queue.AddTask(ts.ctx, asynq.NewTask(cst2.TaskCpdaily, payloadWriter.Bytes()),
asynq.TaskID(fmt.Sprintf("cpdaily:task:schedule:%d", task.ID)),
asynq.MaxRetry(3),
asynq.Unique(10*time.Second),
asynq.ProcessAt(execTime),
asynq.Deadline(execTime.Add(12*time.Minute)),
asynq.Queue(cst.TaskQueueCpdaily),
asynq.Queue(cst2.TaskQueueCpdaily),
)
// 更新未开始的任务状态为队列中
db.Global.CpTask.Update().Where(cptask.ID(task.ID), cptask.TaskStatusEQ(cptask.TaskStatusNotStart)).SetTaskStatus(cptask.TaskStatusQueue).Exec(ts.ctx)
+9 -9
View File
@@ -2,7 +2,7 @@ package schedule
import (
"context"
"likedream-goframe/internal/cst"
cst2 "likedream-goframe/internal/common/cst"
"likedream-goframe/internal/framework/redis"
"likedream-goframe/internal/utils"
"time"
@@ -17,7 +17,7 @@ var globalServer *asynq.Server
func initServer(ctx context.Context) {
cfg := g.Cfg()
taskConcurrency := cfg.MustGetWithEnv(ctx, cst.ConfigTaskConcurrency).Int()
taskConcurrency := cfg.MustGetWithEnv(ctx, cst2.ConfigTaskConcurrency).Int()
globalServer = asynq.NewServerFromRedisClient(redis.GetClient(), asynq.Config{
Concurrency: taskConcurrency,
@@ -29,17 +29,17 @@ func initServer(ctx context.Context) {
DelayedTaskCheckInterval: 10 * time.Second,
ErrorHandler: taskErrorHandler{},
Queues: map[string]int{
cst.TaskQueueEmail: 2,
cst.TaskQueueCpdaily: 10,
cst.TaskQueueDefault: 1,
cst2.TaskQueueEmail: 2,
cst2.TaskQueueCpdaily: 10,
cst2.TaskQueueDefault: 1,
},
})
mux := asynq.NewServeMux()
mux.Handle(cst.TaskCpdaily, &CpdailyTaskHandler{})
mux.Handle(cst.TaskEmail, &EmailTaskHandler{})
mux.Handle(cst.TaskResetDaily, &ResetTaskHandler{})
mux.Handle(cst2.TaskCpdaily, &CpdailyTaskHandler{})
mux.Handle(cst2.TaskEmail, &EmailTaskHandler{})
mux.Handle(cst2.TaskResetDaily, &ResetTaskHandler{})
e := globalServer.Start(mux)
utils.OkOrPanic(e)
@@ -49,7 +49,7 @@ type taskErrorHandler struct {
}
func (t taskErrorHandler) HandleError(ctx context.Context, task *asynq.Task, err error) {
if task.Type() == cst.TaskCpdaily {
if task.Type() == cst2.TaskCpdaily {
g.Log().Errorf(ctx, "今日校园任务执行失败: %+v", err)
}
}
+7 -7
View File
@@ -3,7 +3,7 @@ package middleware
import (
"context"
"errors"
"likedream-goframe/internal/cst"
cst2 "likedream-goframe/internal/common/cst"
"likedream-goframe/internal/ent"
"likedream-goframe/internal/framework/redis"
"likedream-goframe/internal/service"
@@ -28,7 +28,7 @@ func AuthHandler(r *ghttp.Request) {
r.Middleware.Next()
return
}
token := r.Request.Header.Get(cst.AuthorizationKey)
token := r.Request.Header.Get(cst2.AuthorizationKey)
if token == "" || !strings.HasPrefix(token, "Bearer ") {
r.Response.ClearBuffer()
r.Response.WriteJson(utils.NotLogin())
@@ -46,7 +46,7 @@ func AuthHandler(r *ghttp.Request) {
userIdF64 := claims["userId"].(float64)
userId := int64(userIdF64)
userIdStr := strconv.FormatInt(userId, 10)
infoCmd := redis.GetClient().Get(r.GetCtx(), cst.RedisUserInfo+userIdStr)
infoCmd := redis.GetClient().Get(r.GetCtx(), cst2.RedisUserInfo+userIdStr)
if infoCmd.Err() != nil && !errors.Is(infoCmd.Err(), redis.Nil) {
r.Response.ClearBuffer()
r.Response.WriteJson(utils.FailBusiness("验证服务异常"))
@@ -58,7 +58,7 @@ func AuthHandler(r *ghttp.Request) {
var userInfo *ent.SysUser
if errors.Is(infoCmd.Err(), redis.Nil) {
userInfo = service.Global.UserLogin.UserInfo(userId, r.GetCtx())
redis.GetClient().SetEx(r.GetCtx(), cst.RedisUserInfo+userIdStr, userInfo, time.Duration(cst.RedisUserInfoExpire)*time.Second)
redis.GetClient().SetEx(r.GetCtx(), cst2.RedisUserInfo+userIdStr, userInfo, time.Duration(cst2.RedisUserInfoExpire)*time.Second)
} else {
e := sonic.UnmarshalString(info, &userInfo)
if e != nil {
@@ -68,7 +68,7 @@ func AuthHandler(r *ghttp.Request) {
return
}
}
ctx := context.WithValue(r.GetCtx(), cst.CtxUserInfo, userInfo)
ctx := context.WithValue(r.GetCtx(), cst2.CtxUserInfo, userInfo)
// 存储权限信息
roles := userInfo.Edges.Roles
@@ -76,7 +76,7 @@ func AuthHandler(r *ghttp.Request) {
if len(roles) > 0 {
for _, role := range roles {
// admin 拥有所有的权限
if role.Label == cst.KeyRoleAdmin {
if role.Label == cst2.KeyRoleAdmin {
permissionList = append(permissionList, "*")
}
for _, menu := range role.Edges.Menus {
@@ -84,7 +84,7 @@ func AuthHandler(r *ghttp.Request) {
}
}
}
ctx = context.WithValue(ctx, cst.CtxPermissionList, permissionList)
ctx = context.WithValue(ctx, cst2.CtxPermissionList, permissionList)
r.SetCtx(ctx)
r.Middleware.Next()
}
+1 -1
View File
@@ -1,7 +1,7 @@
package middleware
import (
"likedream-goframe/internal/cst"
"likedream-goframe/internal/common/cst"
"likedream-goframe/internal/utils"
"github.com/gogf/gf/v2/net/ghttp"
+2 -2
View File
@@ -3,8 +3,8 @@ package agent
import (
"context"
v1 "likedream-goframe/internal/api/v1"
"likedream-goframe/internal/cst"
"likedream-goframe/internal/db"
"likedream-goframe/internal/common/cst"
"likedream-goframe/internal/common/db"
"likedream-goframe/internal/ent"
"likedream-goframe/internal/ent/sysrole"
"likedream-goframe/internal/ent/sysuser"
+1 -1
View File
@@ -2,8 +2,8 @@ package balance
import (
"context"
"likedream-goframe/internal/common/db"
"likedream-goframe/internal/common/errors"
"likedream-goframe/internal/db"
"likedream-goframe/internal/ent"
"likedream-goframe/internal/ent/sysuser"
"likedream-goframe/internal/utils"
+1 -1
View File
@@ -3,7 +3,7 @@ package card
import (
"context"
v1 "likedream-goframe/internal/api/v1"
"likedream-goframe/internal/db"
"likedream-goframe/internal/common/db"
"likedream-goframe/internal/ent"
"likedream-goframe/internal/ent/syscard"
"likedream-goframe/internal/ent/sysuser"
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"io"
v1 "likedream-goframe/internal/api/v1"
"likedream-goframe/internal/application/filestorage"
"likedream-goframe/internal/db"
"likedream-goframe/internal/common/db"
"likedream-goframe/internal/ent/cpimage"
"likedream-goframe/internal/utils"
+28 -28
View File
@@ -11,9 +11,9 @@ import (
"likedream-goframe/internal/application/cpdaily/school"
"likedream-goframe/internal/application/cpdaily/task"
"likedream-goframe/internal/application/cpdaily/task/formtype"
cst2 "likedream-goframe/internal/common/cst"
db2 "likedream-goframe/internal/common/db"
errors2 "likedream-goframe/internal/common/errors"
"likedream-goframe/internal/cst"
"likedream-goframe/internal/db"
"likedream-goframe/internal/ent"
"likedream-goframe/internal/ent/cptask"
"likedream-goframe/internal/ent/cpuser"
@@ -37,7 +37,7 @@ type CpTaskServiceV1 struct {
func (v CpTaskServiceV1) GetRecentTasks(ctx context.Context, req *v1.GetRecentTasksReq) *utils.Response[[]string] {
user := utils.GetUserInfoFromCtx(ctx)
// 检测是否属于自己的cpuser
cpUser := db.Global.CpUser.Query().Where(cpuser.ID(req.UserId), cpuser.HasSysuserWith(sysuser.ID(user.ID))).WithSysuser().WithSchool().OnlyX(ctx)
cpUser := db2.Global.CpUser.Query().Where(cpuser.ID(req.UserId), cpuser.HasSysuserWith(sysuser.ID(user.ID))).WithSysuser().WithSchool().OnlyX(ctx)
if cpUser.Edges.Sysuser == nil {
utils.OkOrPanic(errors2.NewBusinessError(400, "非法的今日校园账号"))
}
@@ -47,7 +47,7 @@ func (v CpTaskServiceV1) GetRecentTasks(ctx context.Context, req *v1.GetRecentTa
loginExecutor := login.GetCpdailyLoginBySchoolInfo(ctx, &schoolDetail)
loginExecutor.Login(ctx, &schoolDetail, cpUser.Username, cpUser.Password)
cookie := loginExecutor.GetCookieString()
db.Global.CpUser.UpdateOne(cpUser).SetCookie(cookie).ExecX(ctx)
db2.Global.CpUser.UpdateOne(cpUser).SetCookie(cookie).ExecX(ctx)
client = login.GetClient(ctx, cookie)
}
taskService := task.GetCpdailyTaskService(ctx, req.Type, cpUser.Cookie, cpUser.SchoolID)
@@ -58,11 +58,11 @@ func (v CpTaskServiceV1) GetRecentTasks(ctx context.Context, req *v1.GetRecentTa
func (v CpTaskServiceV1) AddTask(ctx context.Context, req *v1.AddTaskReq) *utils.Response[any] {
user := utils.GetUserInfoFromCtx(ctx)
// 检测是否属于自己的cpuser
cpUser := db.Global.CpUser.Query().Where(cpuser.ID(req.UserId), cpuser.HasSysuserWith(sysuser.ID(user.ID))).WithSysuser().OnlyX(ctx)
cpUser := db2.Global.CpUser.Query().Where(cpuser.ID(req.UserId), cpuser.HasSysuserWith(sysuser.ID(user.ID))).WithSysuser().OnlyX(ctx)
if cpUser.Edges.Sysuser == nil {
utils.OkOrPanic(errors2.NewBusinessError(400, "非法的今日校园账号"))
}
db.Global.CpTask.Create().
db2.Global.CpTask.Create().
SetCpUserID(req.UserId).
SetTaskType(cptask.TaskType(req.Type)).
SetTitle(req.Title).
@@ -76,7 +76,7 @@ func (v CpTaskServiceV1) AddTask(ctx context.Context, req *v1.AddTaskReq) *utils
func (v CpTaskServiceV1) List(ctx context.Context, req *v1.CpTaskListReq) *utils.Response[[]*ent.CpTask] {
user := utils.GetUserInfoFromCtx(ctx)
query := db.Global.CpTask.Query().Where(cptask.HasSysUserWith(sysuser.ID(user.ID))).WithCpUser().Order(ent.Desc(cptask.FieldCreateTime))
query := db2.Global.CpTask.Query().Where(cptask.HasSysUserWith(sysuser.ID(user.ID))).WithCpUser().Order(ent.Desc(cptask.FieldCreateTime))
if req.TaskType != "" {
query.Where(cptask.TaskTypeEQ(req.TaskType))
}
@@ -102,7 +102,7 @@ func (v CpTaskServiceV1) List(ctx context.Context, req *v1.CpTaskListReq) *utils
func (v CpTaskServiceV1) TaskFormData(ctx context.Context, req *v1.GetCpTaskFormReq) *utils.Response[any] {
user := utils.GetUserInfoFromCtx(ctx)
// 检测是否属于自己的cpTask
cpTask := db.Global.CpTask.Query().Where(cptask.ID(req.Id),
cpTask := db2.Global.CpTask.Query().Where(cptask.ID(req.Id),
cptask.HasSysUserWith(sysuser.ID(user.ID))).
WithCpUser().WithSysUser().OnlyX(ctx)
cpUser := cpTask.Edges.CpUser
@@ -121,7 +121,7 @@ func (v CpTaskServiceV1) TaskFormData(ctx context.Context, req *v1.GetCpTaskForm
loginExecutor := login.GetCpdailyLoginBySchoolInfo(ctx, &schoolDetail)
loginExecutor.Login(ctx, &schoolDetail, cpUser.Username, cpUser.Password)
cpUser.Cookie = loginExecutor.GetCookieString()
db.Global.CpUser.UpdateOne(cpUser).SetCookie(cpUser.Cookie).ExecX(ctx)
db2.Global.CpUser.UpdateOne(cpUser).SetCookie(cpUser.Cookie).ExecX(ctx)
client = login.GetClient(ctx, cpUser.Cookie)
}
taskService := task.GetCpdailyTaskService(ctx, cpTask.TaskType, cpUser.Cookie, cpUser.SchoolID)
@@ -133,14 +133,14 @@ func (v CpTaskServiceV1) TaskFormData(ctx context.Context, req *v1.GetCpTaskForm
func (v CpTaskServiceV1) PutTaskFormData(ctx context.Context, req *v1.PutCpTaskFormReq) *utils.Response[any] {
user := utils.GetUserInfoFromCtx(ctx)
// 检测是否属于自己的cpTask
cpTask := db.Global.CpTask.Query().Where(cptask.ID(req.Id),
cpTask := db2.Global.CpTask.Query().Where(cptask.ID(req.Id),
cptask.HasSysUserWith(sysuser.ID(user.ID))).
WithCpUser().WithSysUser().OnlyX(ctx)
cpUser := cpTask.Edges.CpUser
if cpUser == nil {
utils.OkOrPanic(errors2.NewBusinessError(400, "非法的今日校园账号"))
}
update := db.Global.CpTask.UpdateOne(cpTask)
update := db2.Global.CpTask.UpdateOne(cpTask)
marshal, _ := json.Marshal(req.Forms)
update.SetFormData(string(marshal))
if cpTask.Step == cptask.StepForm {
@@ -153,7 +153,7 @@ func (v CpTaskServiceV1) PutTaskFormData(ctx context.Context, req *v1.PutCpTaskF
func (v CpTaskServiceV1) TaskExecute(ctx context.Context, req *v1.GetCpTaskExecuteReq) *utils.Response[any] {
user := utils.GetUserInfoFromCtx(ctx)
// 检测是否属于自己的cpTask
cpTask := db.Global.CpTask.Query().Where(cptask.ID(req.Id),
cpTask := db2.Global.CpTask.Query().Where(cptask.ID(req.Id),
cptask.HasSysUserWith(sysuser.ID(user.ID))).OnlyX(ctx)
if cpTask == nil {
utils.OkOrPanic(errors2.NewBusinessError(400, "非法的今日校园账号"))
@@ -164,7 +164,7 @@ func (v CpTaskServiceV1) TaskExecute(ctx context.Context, req *v1.GetCpTaskExecu
func (v CpTaskServiceV1) PostExecute(ctx context.Context, req *v1.PostCpTaskExecuteReq) *utils.Response[any] {
user := utils.GetUserInfoFromCtx(ctx)
// 检测是否属于自己的cpTask
cpTask := db.Global.CpTask.Query().Where(cptask.ID(req.Id),
cpTask := db2.Global.CpTask.Query().Where(cptask.ID(req.Id),
cptask.HasSysUserWith(sysuser.ID(user.ID))).
WithCpUser().WithSysUser().OnlyX(ctx)
if cpTask == nil {
@@ -182,15 +182,15 @@ func (v CpTaskServiceV1) PostExecute(ctx context.Context, req *v1.PostCpTaskExec
originalStatus := cpTask.TaskStatus
//扣积分
basePoint := decimal.NewFromInt(cst.BasePointCpdaily)
basePoint := decimal.NewFromInt(cst2.BasePointCpdaily)
if user.Edges.Agent != nil {
basePoint = basePoint.Mul(user.Edges.Agent.Rate)
}
needPoint := basePoint.Mul(decimal.NewFromInt(int64(consume)))
balance.BalanceService.ChangeUserBalance(ctx, user.ID, needPoint.Neg())
// 更新任务
e := db.WithTx(ctx, func(ctx context.Context, tx *ent.Tx) {
cpTask := db.Global.CpTask.UpdateOne(cpTask).
e := db2.WithTx(ctx, func(ctx context.Context, tx *ent.Tx) {
cpTask := db2.Global.CpTask.UpdateOne(cpTask).
SetStep(cptask.StepComplete).
SetFrequency(req.Frequency).
SetTaskStatus(cptask.TaskStatusNotStart).
@@ -204,8 +204,8 @@ func (v CpTaskServiceV1) PostExecute(ctx context.Context, req *v1.PostCpTaskExec
// 只有在原始状态为未开始时,才考虑5分钟窗口立即扫描
if originalStatus == cptask.TaskStatusNotStart {
currentTime := time.Now().In(cst.TimeZoneShangHai)
executeTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), req.ExecuteHour, req.ExecuteMinute, 0, 0, cst.TimeZoneShangHai)
currentTime := time.Now().In(cst2.TimeZoneShangHai)
executeTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), req.ExecuteHour, req.ExecuteMinute, 0, 0, cst2.TimeZoneShangHai)
timeDiff := executeTime.Sub(currentTime)
if timeDiff >= -5*time.Minute && timeDiff <= 5*time.Minute {
@@ -220,7 +220,7 @@ func (v CpTaskServiceV1) PostExecute(ctx context.Context, req *v1.PostCpTaskExec
nextExecuteAt = utils.GetCpdailyNextExecuteTime(cpTask)
}
db.Global.CpTask.UpdateOne(cpTask).SetNextExecuteTime(nextExecuteAt).ExecX(ctx)
db2.Global.CpTask.UpdateOne(cpTask).SetNextExecuteTime(nextExecuteAt).ExecX(ctx)
}, &sql.TxOptions{})
utils.OkOrPanic(e)
@@ -230,13 +230,13 @@ func (v CpTaskServiceV1) PostExecute(ctx context.Context, req *v1.PostCpTaskExec
func (v CpTaskServiceV1) Delete(ctx context.Context, req *v1.DeleteTaskReq) *utils.Response[any] {
user := utils.GetUserInfoFromCtx(ctx)
// 检测是否属于自己的cpTask
cpTask := db.Global.CpTask.Query().Where(cptask.ID(req.Id),
cpTask := db2.Global.CpTask.Query().Where(cptask.ID(req.Id),
cptask.HasSysUserWith(sysuser.ID(user.ID))).
WithCpUser().WithSysUser().OnlyX(ctx)
if cpTask == nil {
utils.OkOrPanic(errors2.NewBusinessError(400, "非法的今日校园账号"))
}
db.Global.CpTask.DeleteOne(cpTask).ExecX(ctx)
db2.Global.CpTask.DeleteOne(cpTask).ExecX(ctx)
return utils.SuccessWithMsg("删除成功")
}
@@ -245,7 +245,7 @@ func (v CpTaskServiceV1) ExecuteNow(ctx context.Context, req *v1.ExecuteNowReq)
user := utils.GetUserInfoFromCtx(ctx)
// 查询任务并检查状态
cpTask := db.Global.CpTask.Query().
cpTask := db2.Global.CpTask.Query().
Where(cptask.ID(req.Id), cptask.UserID(user.ID)).
Select(cptask.FieldTaskStatus, cptask.FieldFrequency, cptask.FieldSuccessCount).
FirstX(ctx)
@@ -276,15 +276,15 @@ func (v CpTaskServiceV1) ExecuteNow(ctx context.Context, req *v1.ExecuteNowReq)
// 由于已经检查了任务状态,不需要使用 Unique 来防重复
taskID := fmt.Sprintf("cpdaily:task:manual:%d:%d", req.Id, time.Now().UnixNano())
e = utils.Catch(func() {
queue.AddTask(ctx, asynq.NewTask(cst.TaskCpdaily, payloadWriter.Bytes()),
queue.AddTask(ctx, asynq.NewTask(cst2.TaskCpdaily, payloadWriter.Bytes()),
asynq.TaskID(taskID),
asynq.Unique(5*time.Second),
asynq.MaxRetry(0),
asynq.Timeout(10*time.Minute),
asynq.Queue(cst.TaskQueueCpdaily),
asynq.Queue(cst2.TaskQueueCpdaily),
)
// 更新未开始的任务状态为队列中
db.Global.CpTask.Update().Where(cptask.ID(cpTask.ID), cptask.TaskStatusEQ(cptask.TaskStatusNotStart)).SetTaskStatus(cptask.TaskStatusQueue).Exec(ctx)
db2.Global.CpTask.Update().Where(cptask.ID(cpTask.ID), cptask.TaskStatusEQ(cptask.TaskStatusNotStart)).SetTaskStatus(cptask.TaskStatusQueue).Exec(ctx)
})
if e != nil {
g.Log().Errorf(ctx, "立即执行任务入列失败: %+v", e)
@@ -295,7 +295,7 @@ func (v CpTaskServiceV1) ExecuteNow(ctx context.Context, req *v1.ExecuteNowReq)
func (v CpTaskServiceV1) PauseTask(ctx context.Context, req *v1.PauseTaskReq) *utils.Response[any] {
user := utils.GetUserInfoFromCtx(ctx)
cpTask := db.Global.CpTask.Query().Where(cptask.ID(req.Id),
cpTask := db2.Global.CpTask.Query().Where(cptask.ID(req.Id),
cptask.HasSysUserWith(sysuser.ID(user.ID))).
WithCpUser().WithSysUser().OnlyX(ctx)
if cpTask == nil {
@@ -303,11 +303,11 @@ func (v CpTaskServiceV1) PauseTask(ctx context.Context, req *v1.PauseTaskReq) *u
}
if cpTask.TaskStatus == cptask.TaskStatusPause {
nextExecuteAt := utils.GetCpdailyNextExecuteTime(cpTask)
db.Global.CpTask.UpdateOne(cpTask).SetTaskStatus(cptask.TaskStatusNotStart).SetNextExecuteTime(nextExecuteAt).ExecX(ctx)
db2.Global.CpTask.UpdateOne(cpTask).SetTaskStatus(cptask.TaskStatusNotStart).SetNextExecuteTime(nextExecuteAt).ExecX(ctx)
return utils.SuccessWithMsg("恢复成功")
} else {
db.Global.CpTask.UpdateOne(cpTask).SetTaskStatus(cptask.TaskStatusPause).SetNextExecuteTime(-1).ExecX(ctx)
db2.Global.CpTask.UpdateOne(cpTask).SetTaskStatus(cptask.TaskStatusPause).SetNextExecuteTime(-1).ExecX(ctx)
return utils.SuccessWithMsg("暂停成功")
}
}
+1 -1
View File
@@ -3,7 +3,7 @@ package cpdaily
import (
"context"
v1 "likedream-goframe/internal/api/v1"
"likedream-goframe/internal/db"
"likedream-goframe/internal/common/db"
"likedream-goframe/internal/ent"
"likedream-goframe/internal/ent/cptasklog"
"likedream-goframe/internal/ent/sysuser"
+2 -2
View File
@@ -6,8 +6,8 @@ import (
v1 "likedream-goframe/internal/api/v1"
"likedream-goframe/internal/application/cpdaily/login"
"likedream-goframe/internal/application/cpdaily/school"
"likedream-goframe/internal/cst"
"likedream-goframe/internal/db"
"likedream-goframe/internal/common/cst"
"likedream-goframe/internal/common/db"
"likedream-goframe/internal/ent"
"likedream-goframe/internal/ent/cpschool"
"likedream-goframe/internal/ent/cpuser"
+12 -12
View File
@@ -7,7 +7,7 @@ import (
"encoding/gob"
"fmt"
"html/template"
"likedream-goframe/internal/cst"
cst2 "likedream-goframe/internal/common/cst"
"likedream-goframe/internal/framework/logger"
email2 "likedream-goframe/internal/framework/model/email"
"likedream-goframe/internal/framework/queue"
@@ -45,12 +45,12 @@ func NewV1() *EmailServiceV1 {
cfg := g.Cfg()
config := EmailConfig{
SMTPHost: cfg.MustGetWithEnv(ctx, cst.ConfigEmailSMTPHost).String(),
SMTPPort: cfg.MustGetWithEnv(ctx, cst.ConfigEmailSMTPPort).Int(),
SMTPUsername: cfg.MustGetWithEnv(ctx, cst.ConfigEmailSMTPUsername).String(),
SMTPPassword: cfg.MustGetWithEnv(ctx, cst.ConfigEmailSMTPPassword).String(),
FromEmail: cfg.MustGetWithEnv(ctx, cst.ConfigEmailFromEmail).String(),
FromName: cfg.MustGetWithEnv(ctx, cst.ConfigEmailFromName).String(),
SMTPHost: cfg.MustGetWithEnv(ctx, cst2.ConfigEmailSMTPHost).String(),
SMTPPort: cfg.MustGetWithEnv(ctx, cst2.ConfigEmailSMTPPort).Int(),
SMTPUsername: cfg.MustGetWithEnv(ctx, cst2.ConfigEmailSMTPUsername).String(),
SMTPPassword: cfg.MustGetWithEnv(ctx, cst2.ConfigEmailSMTPPassword).String(),
FromEmail: cfg.MustGetWithEnv(ctx, cst2.ConfigEmailFromEmail).String(),
FromName: cfg.MustGetWithEnv(ctx, cst2.ConfigEmailFromName).String(),
}
return &EmailServiceV1{
@@ -65,7 +65,7 @@ func (s *EmailServiceV1) SendSignupEmail(ctx context.Context, toEmail, username
return utils.FailBusiness("邮件服务未配置")
}
subject := fmt.Sprintf("欢迎注册%s", cst.AppName)
subject := fmt.Sprintf("欢迎注册%s", cst2.AppName)
body, err := s.renderSignupEmailTemplate(username, token)
if err != nil {
logger.Logger.Error("邮件模板渲染失败")
@@ -119,7 +119,7 @@ func (s *EmailServiceV1) sendEmail(ctx context.Context, to, subject, body string
})
utils.OkOrPanic(e, oops.WithContext(ctx).Wrap)
task := queue.AddTask(ctx, asynq.NewTask(cst.TaskEmail, payload.Bytes()), asynq.Queue(cst.TaskQueueEmail),
task := queue.AddTask(ctx, asynq.NewTask(cst2.TaskEmail, payload.Bytes()), asynq.Queue(cst2.TaskQueueEmail),
asynq.MaxRetry(3),
asynq.Timeout(10*time.Minute),
)
@@ -157,11 +157,11 @@ func (s *EmailServiceV1) renderSignupEmailTemplate(username string, token string
return "", fmt.Errorf("解析注册邮件模板失败: %v", err)
}
get, err := g.Cfg().Get(gctx.New(), cst.ConfigEmailConfirmBaseUrl)
get, err := g.Cfg().Get(gctx.New(), cst2.ConfigEmailConfirmBaseUrl)
if err != nil {
return "", err
}
data := NewSignupTemplateData(username, cst.AppName, cst.AppCopyright, get.String()+token)
data := NewSignupTemplateData(username, cst2.AppName, cst2.AppCopyright, get.String()+token)
var buf bytes.Buffer
err = tmpl.ExecuteTemplate(&buf, "signup_confirm.gohtml", data)
@@ -180,7 +180,7 @@ func (s *EmailServiceV1) renderTaskNotificationTemplate(taskName string, status
return "", fmt.Errorf("解析任务通知邮件模板失败: %v", err)
}
data := NewTaskNotificationTemplateData(taskName, status, details, cst.AppName, cst.AppCopyright)
data := NewTaskNotificationTemplateData(taskName, status, details, cst2.AppName, cst2.AppCopyright)
var buf bytes.Buffer
err = tmpl.ExecuteTemplate(&buf, "task_notification.gohtml", data)
+1 -1
View File
@@ -3,7 +3,7 @@ package email
import (
"context"
"fmt"
"likedream-goframe/internal/cst"
"likedream-goframe/internal/common/cst"
"testing"
)
+1 -1
View File
@@ -3,7 +3,7 @@ package menu
import (
"context"
v1 "likedream-goframe/internal/api/v1"
"likedream-goframe/internal/db"
"likedream-goframe/internal/common/db"
"likedream-goframe/internal/ent"
"likedream-goframe/internal/ent/sysmenu"
"likedream-goframe/internal/utils"
+1 -1
View File
@@ -3,7 +3,7 @@ package role
import (
"context"
"likedream-goframe/internal/api/v1"
"likedream-goframe/internal/db"
"likedream-goframe/internal/common/db"
"likedream-goframe/internal/ent"
"likedream-goframe/internal/ent/sysmenu"
"likedream-goframe/internal/ent/sysrole"
+1 -1
View File
@@ -3,7 +3,7 @@ package user
import (
"context"
v1 "likedream-goframe/internal/api/v1"
"likedream-goframe/internal/db"
"likedream-goframe/internal/common/db"
"likedream-goframe/internal/ent"
"likedream-goframe/internal/ent/sysuser"
"likedream-goframe/internal/utils"
@@ -4,8 +4,8 @@ import (
"context"
"fmt"
v1 "likedream-goframe/internal/api/v1"
"likedream-goframe/internal/cst"
"likedream-goframe/internal/db"
"likedream-goframe/internal/common/cst"
"likedream-goframe/internal/common/db"
"likedream-goframe/internal/ent"
"likedream-goframe/internal/ent/syscard"
"likedream-goframe/internal/ent/sysmenu"
@@ -5,8 +5,8 @@ import (
"crypto/rand"
"encoding/base64"
"likedream-goframe/internal/api/v1"
"likedream-goframe/internal/cst"
"likedream-goframe/internal/db"
cst2 "likedream-goframe/internal/common/cst"
"likedream-goframe/internal/common/db"
"likedream-goframe/internal/ent"
"likedream-goframe/internal/ent/sysrole"
"likedream-goframe/internal/ent/sysuser"
@@ -42,7 +42,7 @@ func (s *UserLoginServiceV1) Login(ctx context.Context, req *v1.UserLoginReq) *u
return utils.FailParam("当前用户被封禁")
}
r := ghttp.RequestFromCtx(ctx)
r.Response.Header().Set(cst.AuthorizationKey, utils.GenerateToken(user.ID))
r.Response.Header().Set(cst2.AuthorizationKey, utils.GenerateToken(user.ID))
return utils.SuccessWithMsg("登录成功")
}
@@ -72,7 +72,7 @@ func (s *UserLoginServiceV1) Register(ctx context.Context, req *v1.UserRegisterR
}
save := tmp.SaveX(ctx)
// 绑定角色 查询出用户角色添加当前用户
role := tx.SysRole.Query().Where(sysrole.LabelEQ(cst.KeyRoleUser)).AllX(ctx)
role := tx.SysRole.Query().Where(sysrole.LabelEQ(cst2.KeyRoleUser)).AllX(ctx)
tx.SysUser.UpdateOne(save).AddRoles(role...).ExecX(ctx)
err = tx.Commit()
utils.OkOrPanic(err, func(err error) error {
@@ -87,7 +87,7 @@ func (s *UserLoginServiceV1) Register(ctx context.Context, req *v1.UserRegisterR
token := make([]byte, 32)
_, _ = rand.Read(token)
tokenStr := base64.URLEncoding.EncodeToString(token)
err2 := redis.GetClient().SetEx(ctx2, cst.RedisVerifyCode+tokenStr, req.Email, time.Duration(cst.RedisVerifyCodeExpire)*time.Second).Err()
err2 := redis.GetClient().SetEx(ctx2, cst2.RedisVerifyCode+tokenStr, req.Email, time.Duration(cst2.RedisVerifyCodeExpire)*time.Second).Err()
utils.OkOrPanic(err2, oops.WithContext(ctx2).Wrap)
// 创建新的context避免原context被取消
emailService := email.NewV1()
@@ -106,7 +106,7 @@ func (s *UserLoginServiceV1) UserInfo(id int64, ctx context.Context) *ent.SysUse
func (s *UserLoginServiceV1) Confirm(ctx context.Context, req *v1.UserConfirmReq) *utils.Response[any] {
client := redis.GetClient()
emailStr := client.GetDel(ctx, cst.RedisVerifyCode+req.Token).Val()
emailStr := client.GetDel(ctx, cst2.RedisVerifyCode+req.Token).Val()
if emailStr == "" {
return utils.FailParam("非法的验证")
}
@@ -115,6 +115,6 @@ func (s *UserLoginServiceV1) Confirm(ctx context.Context, req *v1.UserConfirmReq
db.Global.SysUser.UpdateOne(user).SetVerify(true).SaveX(ctx)
// 自动登录
r := ghttp.RequestFromCtx(ctx)
r.Response.Header().Set(cst.AuthorizationKey, utils.GenerateToken(user.ID))
r.Response.Header().Set(cst2.AuthorizationKey, utils.GenerateToken(user.ID))
return utils.SuccessWithMsg("验证成功")
}
+3 -2
View File
@@ -1,12 +1,13 @@
package utils
import (
"likedream-goframe/internal/common/cst"
"time"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
"github.com/golang-jwt/jwt/v5"
"github.com/samber/oops"
"likedream-goframe/internal/cst"
"time"
)
type CustomClaims struct {
+1 -1
View File
@@ -1,7 +1,7 @@
package utils
import (
"likedream-goframe/internal/cst"
"likedream-goframe/internal/common/cst"
"likedream-goframe/internal/ent"
"math"
"time"
+1 -1
View File
@@ -2,7 +2,7 @@ package utils
import (
"context"
"likedream-goframe/internal/cst"
"likedream-goframe/internal/common/cst"
"likedream-goframe/internal/ent"
"likedream-goframe/internal/framework/errors"
"math/rand"
+1 -1
View File
@@ -3,7 +3,7 @@ package main
import (
"likedream-goframe/cmd/entc"
"likedream-goframe/cmd/server"
"likedream-goframe/internal/cst"
"likedream-goframe/internal/common/cst"
"log"
"os"
"time"