Compare commits

...

3 Commits

Author SHA1 Message Date
sugarBecomer 49f4475991 🐛 干掉global id 2025-11-10 22:53:05 +08:00
sugarBecomer 76bfdd03dd 🐛 cookie更新 2025-11-10 22:20:34 +08:00
sugarBecomer c18f2fdcf7 🐛 细节问题 2025-11-10 21:51:08 +08:00
9 changed files with 62 additions and 91 deletions
+14 -1
View File
@@ -14,7 +14,20 @@ func Run() {
IDType: &field.TypeInfo{
Type: field.TypeInt64,
},
Features: gen.AllFeatures,
Features: []gen.Feature{
gen.FeaturePrivacy,
gen.FeatureIntercept,
gen.FeatureEntQL,
gen.FeatureNamedEdges,
gen.FeatureBidiEdgeRefs,
gen.FeatureSnapshot,
gen.FeatureSchemaConfig,
gen.FeatureLock,
gen.FeatureModifier,
gen.FeatureExecQuery,
gen.FeatureUpsert,
gen.FeatureVersionedMigration,
},
})
utils.OkOrPanic(err)
+26 -26
View File
@@ -13,7 +13,7 @@ import (
)
func CheckHasData() bool {
count, err := Global.SysUser.Query().Count(context.Background())
count, err := Global.Debug().SysUser.Query().Count(context.Background())
utils.OkOrPanic(err, func(err error) error {
return err
})
@@ -36,7 +36,7 @@ func GenerateData() {
// 生成用户
func generateUser() {
ctx := gctx.New()
Global.SysUser.Create().
Global.Debug().SysUser.Create().
SetUsername("admin").
SetPassword(utils.PasswordBcryptHash("123456")).
SetEmail("admin@qq.com").
@@ -50,15 +50,15 @@ func generateUser() {
// 生成角色
func generateRoles() {
ctx := gctx.New()
Global.SysRole.Create().SetName("管理员").SetLabel(cst.KeyRoleAdmin).SetDescription("超级管理员角色").SetOrder(1).ExecX(ctx)
Global.SysRole.Create().SetName("代理").SetLabel(cst.KeyRoleAgent).SetDescription("代理角色").SetOrder(2).ExecX(ctx)
Global.SysRole.Create().SetName("普通用户").SetLabel(cst.KeyRoleUser).SetDescription("普通用户角色").SetOrder(3).ExecX(ctx)
Global.Debug().SysRole.Create().SetName("管理员").SetLabel(cst.KeyRoleAdmin).SetDescription("超级管理员角色").SetOrder(1).ExecX(ctx)
Global.Debug().SysRole.Create().SetName("代理").SetLabel(cst.KeyRoleAgent).SetDescription("代理角色").SetOrder(2).ExecX(ctx)
Global.Debug().SysRole.Create().SetName("普通用户").SetLabel(cst.KeyRoleUser).SetDescription("普通用户角色").SetOrder(3).ExecX(ctx)
}
// 生成菜单
func generateMenus() {
ctx := gctx.New()
sysM := Global.SysMenu.Create().
sysM := Global.Debug().SysMenu.Create().
SetName("系统管理").
SetLabel("system").
SetType(sysmenu.TypeGroup).
@@ -66,7 +66,7 @@ func generateMenus() {
SetRoute("/system").
SetOrder(1).
SaveX(ctx)
userM := Global.SysMenu.Create().
userM := Global.Debug().SysMenu.Create().
SetName("用户管理").
SetLabel("user").
SetType(sysmenu.TypeMenu).
@@ -77,7 +77,7 @@ func generateMenus() {
SetParent(sysM).
SaveX(ctx)
// 新增 编辑 删除按钮
Global.SysMenu.Create().
Global.Debug().SysMenu.Create().
SetName("新增").
SetLabel("add").
SetType(sysmenu.TypeButton).
@@ -85,7 +85,7 @@ func generateMenus() {
SetOrder(1).
SetParent(userM).
SaveX(ctx)
Global.SysMenu.Create().
Global.Debug().SysMenu.Create().
SetName("编辑").
SetLabel("edit").
SetType(sysmenu.TypeButton).
@@ -94,7 +94,7 @@ func generateMenus() {
SetParent(userM).
SaveX(ctx)
// 删除按钮
Global.SysMenu.Create().
Global.Debug().SysMenu.Create().
SetName("删除").
SetLabel("delete").
SetType(sysmenu.TypeButton).
@@ -103,7 +103,7 @@ func generateMenus() {
SetParent(userM).
SaveX(ctx)
// 列表
Global.SysMenu.Create().
Global.Debug().SysMenu.Create().
SetName("列表").
SetLabel("list").
SetType(sysmenu.TypeButton).
@@ -111,7 +111,7 @@ func generateMenus() {
SetOrder(4).
SetParent(userM).
SaveX(ctx)
roleM := Global.SysMenu.Create().
roleM := Global.Debug().SysMenu.Create().
SetName("角色管理").
SetLabel("role").
SetType(sysmenu.TypeMenu).
@@ -122,7 +122,7 @@ func generateMenus() {
SetParent(sysM).
SaveX(ctx)
// 新增 编辑 删除按钮
Global.SysMenu.Create().
Global.Debug().SysMenu.Create().
SetName("新增").
SetLabel("add").
SetType(sysmenu.TypeButton).
@@ -130,7 +130,7 @@ func generateMenus() {
SetOrder(1).
SetParent(roleM).
SaveX(ctx)
Global.SysMenu.Create().
Global.Debug().SysMenu.Create().
SetName("编辑").
SetLabel("edit").
SetType(sysmenu.TypeButton).
@@ -139,7 +139,7 @@ func generateMenus() {
SetParent(roleM).
SaveX(ctx)
// 删除按钮
Global.SysMenu.Create().
Global.Debug().SysMenu.Create().
SetName("删除").
SetLabel("delete").
SetType(sysmenu.TypeButton).
@@ -147,7 +147,7 @@ func generateMenus() {
SetOrder(3).
SetParent(roleM).
SaveX(ctx)
Global.SysMenu.Create().
Global.Debug().SysMenu.Create().
SetName("列表").
SetLabel("list").
SetType(sysmenu.TypeButton).
@@ -155,7 +155,7 @@ func generateMenus() {
SetOrder(4).
SetParent(roleM).
SaveX(ctx)
menuM := Global.SysMenu.Create().
menuM := Global.Debug().SysMenu.Create().
SetName("菜单管理").
SetLabel("menu").
SetType(sysmenu.TypeMenu).
@@ -166,7 +166,7 @@ func generateMenus() {
SetParent(sysM).
SaveX(ctx)
// 新增 编辑 删除按钮
Global.SysMenu.Create().
Global.Debug().SysMenu.Create().
SetName("新增").
SetLabel("add").
SetType(sysmenu.TypeButton).
@@ -174,7 +174,7 @@ func generateMenus() {
SetOrder(1).
SetParent(menuM).
SaveX(ctx)
Global.SysMenu.Create().
Global.Debug().SysMenu.Create().
SetName("编辑").
SetLabel("edit").
SetType(sysmenu.TypeButton).
@@ -183,7 +183,7 @@ func generateMenus() {
SetParent(menuM).
SaveX(ctx)
// 删除按钮
Global.SysMenu.Create().
Global.Debug().SysMenu.Create().
SetName("删除").
SetLabel("delete").
SetType(sysmenu.TypeButton).
@@ -191,7 +191,7 @@ func generateMenus() {
SetOrder(3).
SetParent(menuM).
SaveX(ctx)
Global.SysMenu.Create().
Global.Debug().SysMenu.Create().
SetName("列表").
SetLabel("list").
SetType(sysmenu.TypeButton).
@@ -204,14 +204,14 @@ func generateMenus() {
// 关联角色
func relationRoles() {
ctx := gctx.New()
admin := Global.SysUser.Query().Where(sysuser.UsernameEQ("admin")).OnlyX(ctx)
role := Global.SysRole.Query().Where(sysrole.LabelEQ(cst.KeyRoleAdmin)).AllX(ctx)
Global.SysUser.UpdateOne(admin).AddRoles(role...).ExecX(ctx)
admin := Global.Debug().SysUser.Query().Where(sysuser.UsernameEQ("admin")).OnlyX(ctx)
role := Global.Debug().SysRole.Query().Where(sysrole.LabelEQ(cst.KeyRoleAdmin)).AllX(ctx)
Global.Debug().SysUser.UpdateOne(admin).AddRoles(role...).ExecX(ctx)
}
// 关联菜单
func relationMenus() {
ctx := gctx.New()
adminRole := Global.SysRole.Query().Where(sysrole.LabelEQ(cst.KeyRoleAdmin)).OnlyX(ctx)
Global.SysRole.UpdateOne(adminRole).AddMenus(Global.SysMenu.Query().AllX(ctx)...).ExecX(ctx)
adminRole := Global.Debug().SysRole.Query().Where(sysrole.LabelEQ(cst.KeyRoleAdmin)).OnlyX(ctx)
Global.Debug().SysRole.UpdateOne(adminRole).AddMenus(Global.Debug().SysMenu.Query().AllX(ctx)...).ExecX(ctx)
}
+1 -1
View File
@@ -23,7 +23,7 @@ func InitDB() {
client, err := ent.Open(dbType.String(), dbDsn.String())
utils.OkOrPanic(err)
// 自动迁移
if err := client.Schema.Create(context.Background()); err != nil {
if err := client.Debug().Schema.Create(context.Background()); err != nil {
logger.Logger.Fatal("failed creating schema resources: %v", zap.Error(err))
}
Global = client
-5
View File
@@ -1,5 +0,0 @@
// ENT数据库文件,请勿编辑。
package internal
const IncrementStarts = "{\"cp_image\":0,\"cp_schools\":4294967296,\"cp_task_logs\":12884901888,\"cp_tasks\":8589934592,\"cp_users\":17179869184,\"sys_agent\":21474836480,\"sys_card\":25769803776,\"sys_menu\":30064771072,\"sys_role\":34359738368,\"sys_user\":38654705664,\"sys_user_logs\":42949672960}"
File diff suppressed because one or more lines are too long
+6 -27
View File
@@ -380,56 +380,35 @@ var (
func init() {
CpImageTable.ForeignKeys[0].RefTable = SysUserTable
CpImageTable.Annotation = &entsql.Annotation{
Table: "cp_image",
IncrementStart: func(i int) *int { return &i }(0),
}
CpSchoolsTable.Annotation = &entsql.Annotation{
IncrementStart: func(i int) *int { return &i }(4294967296),
Table: "cp_image",
}
CpTasksTable.ForeignKeys[0].RefTable = CpUsersTable
CpTasksTable.ForeignKeys[1].RefTable = SysUserTable
CpTasksTable.Annotation = &entsql.Annotation{
IncrementStart: func(i int) *int { return &i }(8589934592),
}
CpTaskLogsTable.ForeignKeys[0].RefTable = CpTasksTable
CpTaskLogsTable.ForeignKeys[1].RefTable = CpUsersTable
CpTaskLogsTable.ForeignKeys[2].RefTable = SysUserTable
CpTaskLogsTable.Annotation = &entsql.Annotation{
IncrementStart: func(i int) *int { return &i }(12884901888),
}
CpUsersTable.ForeignKeys[0].RefTable = CpSchoolsTable
CpUsersTable.ForeignKeys[1].RefTable = SysUserTable
CpUsersTable.Annotation = &entsql.Annotation{
IncrementStart: func(i int) *int { return &i }(17179869184),
}
SysAgentTable.ForeignKeys[0].RefTable = SysUserTable
SysAgentTable.Annotation = &entsql.Annotation{
Table: "sys_agent",
IncrementStart: func(i int) *int { return &i }(21474836480),
Table: "sys_agent",
}
SysCardTable.ForeignKeys[0].RefTable = SysUserTable
SysCardTable.ForeignKeys[1].RefTable = SysUserTable
SysCardTable.ForeignKeys[2].RefTable = SysUserTable
SysCardTable.Annotation = &entsql.Annotation{
Table: "sys_card",
IncrementStart: func(i int) *int { return &i }(25769803776),
Table: "sys_card",
}
SysMenuTable.ForeignKeys[0].RefTable = SysMenuTable
SysMenuTable.Annotation = &entsql.Annotation{
Table: "sys_menu",
IncrementStart: func(i int) *int { return &i }(30064771072),
Table: "sys_menu",
}
SysRoleTable.Annotation = &entsql.Annotation{
Table: "sys_role",
IncrementStart: func(i int) *int { return &i }(34359738368),
Table: "sys_role",
}
SysUserTable.ForeignKeys[0].RefTable = SysUserTable
SysUserTable.Annotation = &entsql.Annotation{
Table: "sys_user",
IncrementStart: func(i int) *int { return &i }(38654705664),
}
SysUserLogsTable.Annotation = &entsql.Annotation{
IncrementStart: func(i int) *int { return &i }(42949672960),
Table: "sys_user",
}
SysRoleMenusTable.ForeignKeys[0].RefTable = SysRoleTable
SysRoleMenusTable.ForeignKeys[1].RefTable = SysMenuTable
@@ -90,16 +90,17 @@ func (c *CpdailyTaskHandler) ProcessTask(ctx context.Context, task *asynq.Task)
// 查询学校详情
schoolDetail := school.GetSchoolDetail(ctx, targetTask.Edges.CpUser.SchoolID)
restyClient := login.GetClient(ctx, targetTask.Edges.CpUser.Cookie)
cookie := targetTask.Edges.CpUser.Cookie
restyClient := login.GetClient(ctx, cookie)
if !login.CookieEnabled(ctx, schoolDetail.WecloudUrl, restyClient) {
loginExecutor := login.GetCpdailyLoginBySchoolInfo(ctx, &schoolDetail)
loginExecutor.Login(ctx, &schoolDetail, targetTask.Edges.CpUser.Username, targetTask.Edges.CpUser.Password)
cookie := loginExecutor.GetCookieString()
cookie = loginExecutor.GetCookieString()
db.Global.CpUser.UpdateOne(targetTask.Edges.CpUser).SetCookie(cookie).ExecX(ctx)
restyClient = login.GetClient(ctx, cookie)
}
// 获取任务执行handler
taskExecutor := task2.GetCpdailyTaskService(ctx, targetTask.TaskType, targetTask.Edges.CpUser.Cookie, targetTask.Edges.CpUser.SchoolID)
taskExecutor := task2.GetCpdailyTaskService(ctx, targetTask.TaskType, cookie, targetTask.Edges.CpUser.SchoolID)
cpdailyRealTask := taskExecutor.QueryFormByTitle(ctx, targetTask.Title)
+1 -1
View File
@@ -87,7 +87,7 @@ func (ts *TaskScanner) scanCpdailyTask() {
// 只查询30分钟以内的任务
minExecuteTime := currentTime.Add(-30 * time.Minute).Unix()
allTasks := db.Global.Debug().CpTask.Query().
allTasks := db.Global.CpTask.Query().
Where(
cptask.NextExecuteTimeLTE(currentTime.Unix()),
cptask.NextExecuteTimeNotNil(),
+9 -26
View File
@@ -178,9 +178,6 @@ func (v CpTaskServiceV1) PostExecute(ctx context.Context, req *v1.PostCpTaskExec
utils.OkOrPanic(errors2.NewBusinessError(400, "执行次数应不低于原有次数"))
}
// 记录原始任务状态,用于判断是否需要立即扫描
originalStatus := cpTask.TaskStatus
//扣积分
basePoint := decimal.NewFromInt(cst2.BasePointCpdaily)
if user.Edges.Agent != nil {
@@ -190,35 +187,20 @@ func (v CpTaskServiceV1) PostExecute(ctx context.Context, req *v1.PostCpTaskExec
balance.BalanceService.ChangeUserBalance(ctx, user.ID, needPoint.Neg())
// 更新任务
e := db2.WithTx(ctx, func(ctx context.Context, tx *ent.Tx) {
cpTask := db2.Global.CpTask.UpdateOne(cpTask).
update := db2.Global.CpTask.UpdateOne(cpTask).
SetStep(cptask.StepComplete).
SetFrequency(req.Frequency).
SetTaskStatus(cptask.TaskStatusNotStart).
SetNotificationType(req.NotificationType).
SetExecuteHour(req.ExecuteHour).
SetExecuteMinute(req.ExecuteMinute).
SaveX(ctx)
// 计算下次执行时间
var nextExecuteAt int64
// 只有在原始状态为未开始时,才考虑5分钟窗口立即扫描
if originalStatus == cptask.TaskStatusNotStart {
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 {
// 执行时间在当前时间前后5分钟内,设置为当前时间,让扫描器立即扫描到
nextExecuteAt = currentTime.Unix()
} else {
// 否则使用正常的计算逻辑
nextExecuteAt = utils.GetCpdailyNextExecuteTime(cpTask)
}
} else {
// 其他状态(暂停、失败等),使用正常的计算逻辑
nextExecuteAt = utils.GetCpdailyNextExecuteTime(cpTask)
SetExecuteMinute(req.ExecuteMinute)
if cpTask.Step == cptask.StepExecute {
update.SetTaskStatus(cptask.TaskStatusNotStart)
}
cpTask := update.SaveX(ctx)
// 其他状态(暂停、失败等),使用正常的计算逻辑
nextExecuteAt := utils.GetCpdailyNextExecuteTime(cpTask)
db2.Global.CpTask.UpdateOne(cpTask).SetNextExecuteTime(nextExecuteAt).ExecX(ctx)
}, &sql.TxOptions{})
@@ -283,6 +265,7 @@ func (v CpTaskServiceV1) ExecuteNow(ctx context.Context, req *v1.ExecuteNowReq)
asynq.Unique(5*time.Second),
asynq.MaxRetry(0),
asynq.Timeout(10*time.Minute),
asynq.Deadline(time.Now().Add(10*time.Minute)),
asynq.Queue(cst2.TaskQueueCpdaily),
)
// 更新未开始的任务状态为队列中