This commit is contained in:
2025-04-14 15:28:51 +08:00
parent f100427f8b
commit 371b89ee8d
93 changed files with 3757 additions and 1038 deletions

View File

@@ -0,0 +1,52 @@
package system
import (
"context"
"management/internal/db/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/repository"
)
type auditLogRepository struct {
store repository.Store
}
var _ system.AuditLogRepository = (*auditLogRepository)(nil)
func NewAuditLogRepository(store repository.Store) *auditLogRepository {
return &auditLogRepository{
store: store,
}
}
func (s *auditLogRepository) Create(ctx context.Context, obj *system.AuditLog) error {
return s.store.DB(ctx).Create(obj).Error
}
func (s *auditLogRepository) List(ctx context.Context, q dto.SearchDto) ([]*system.AuditLog, int64, error) {
query := s.store.DB(ctx).
Model(&system.AuditLog{}).
Where("created_at BETWEEN ? AND ?", q.SearchTimeBegin, q.SearchTimeEnd)
if q.SearchEmail != "" {
query = query.Where("email LIKE ?", "%"+q.SearchEmail+"%")
}
var count int64
err := query.Count(&count).Error
if err != nil {
return nil, 0, err
}
var logs []*system.AuditLog
err = query.
Order("id DESC").
Offset((q.Page - 1) * q.Rows).
Limit(q.Rows).
Find(&logs).
Error
if err != nil {
return nil, 0, err
}
return logs, count, nil
}

View File

@@ -0,0 +1,51 @@
package system
import (
"context"
"management/internal/db/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/repository"
)
type configRepository struct {
store repository.Store
}
var _ system.ConfigRepository = (*configRepository)(nil)
func NewConfigRepository(store repository.Store) *configRepository {
return &configRepository{
store: store,
}
}
func (r *configRepository) Create(ctx context.Context, obj *system.Config) error {
return r.store.DB(ctx).Create(obj).Error
}
func (r *configRepository) Update(ctx context.Context, obj *system.Config) error {
return r.store.DB(ctx).Save(obj).Error
}
func (r *configRepository) Get(ctx context.Context, id int32) (*system.Config, error) {
var obj system.Config
err := r.store.DB(ctx).First(&obj, id).Error
if err != nil {
return nil, err
}
return &obj, nil
}
func (r *configRepository) GetByKey(ctx context.Context, key string) (*system.Config, error) {
var obj system.Config
err := r.store.DB(ctx).Where("key = ?", key).First(&obj).Error
if err != nil {
return nil, err
}
return &obj, nil
}
func (r *configRepository) List(ctx context.Context, q dto.SearchDto) ([]*system.Config, int64, error) {
return nil, 0, nil
}

View File

@@ -0,0 +1,100 @@
package system
import (
"context"
"management/internal/db/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/repository"
)
type departmentRepository struct {
store repository.Store
}
var _ system.DepartmentRepository = (*departmentRepository)(nil)
func NewDepartmentRepository(store repository.Store) *departmentRepository {
return &departmentRepository{
store: store,
}
}
func (r *departmentRepository) Create(ctx context.Context, obj *system.Department) error {
return r.store.DB(ctx).Create(obj).Error
}
func (r *departmentRepository) Update(ctx context.Context, obj *system.Department) error {
return r.store.DB(ctx).Save(obj).Error
}
func (r *departmentRepository) Get(ctx context.Context, id int32) (*system.Department, error) {
var obj system.Department
err := r.store.DB(ctx).First(&obj, id).Error
if err != nil {
return nil, err
}
return &obj, nil
}
func (r *departmentRepository) All(ctx context.Context) ([]*system.Department, error) {
var departs []*system.Department
err := r.store.DB(ctx).Find(&departs).Error
if err != nil {
return nil, err
}
return departs, nil
}
func (r *departmentRepository) List(ctx context.Context, q dto.SearchDto) ([]*system.Department, int64, error) {
query := r.store.DB(ctx).
Model(&system.Department{}).
Where("created_at BETWEEN ? AND ?", q.SearchTimeBegin, q.SearchTimeEnd)
if q.SearchID != 0 {
query = query.Where("id = ?", q.SearchID)
}
if q.SearchParentID != 0 && q.SearchParentID != 1 {
query = query.Where("parent_id = ?", q.SearchParentID)
}
if q.SearchName != "" {
query = query.Where("name LIKE ?", "%"+q.SearchName+"%")
}
if q.SearchStatus != 9999 {
query = query.Where("status = ?", q.SearchStatus)
}
var count int64
err := query.Count(&count).Error
if err != nil {
return nil, 0, err
}
var departs []*system.Department
err = query.
Order("id DESC").
Offset((q.Page - 1) * q.Rows).
Limit(q.Rows).
Find(&departs).Error
if err != nil {
return nil, 0, err
}
return departs, count, nil
}
func (r *departmentRepository) RebuildParentPath(ctx context.Context) error {
query := `UPDATE sys_department AS tm
SET parent_path = (SELECT ',' || string_agg(cast(t.parent_id AS VARCHAR), ',') || ','
FROM (WITH RECURSIVE temp (id, parent_id) AS (SELECT id, tm.parent_id
FROM sys_department
WHERE id = tm.id
UNION ALL
SELECT sys_department.id, sys_department.parent_id
FROM sys_department,
temp
WHERE sys_department.id = temp.parent_id)
SELECT id, parent_id
FROM temp
ORDER BY id) AS t)
WHERE tm.status = 0;`
return r.store.DB(ctx).Exec(query).Error
}

View File

@@ -0,0 +1,78 @@
package system
import (
"context"
"management/internal/db/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/repository"
)
type loginLogRepository struct {
store repository.Store
}
var _ system.LoginLogRepository = (*loginLogRepository)(nil)
func NewLoginLogRepository(store repository.Store) *loginLogRepository {
return &loginLogRepository{
store: store,
}
}
func (s *loginLogRepository) Create(ctx context.Context, obj *system.LoginLog) error {
return s.store.DB(ctx).Create(obj).Error
}
func (s *loginLogRepository) GetLatest(ctx context.Context, email string) (*system.LoginLog, error) {
var log system.LoginLog
err := s.store.DB(ctx).
Where("email = ?", email).
Order("id DESC").
First(&log).
Error
if err != nil {
return nil, err
}
return &log, nil
}
func (s *loginLogRepository) List(ctx context.Context, q dto.SearchDto) ([]*system.LoginLog, int64, error) {
query := s.store.DB(ctx).
Model(&system.LoginLog{}).
Where("created_at BETWEEN ? AND ?", q.SearchTimeBegin, q.SearchTimeEnd)
if q.SearchEmail != "" {
query = query.Where("email LIKE ?", "%"+q.SearchEmail+"%")
}
var count int64
err := query.Count(&count).Error
if err != nil {
return nil, 0, err
}
var logs []*system.LoginLog
err = query.
Order("id DESC").
Offset((q.Page - 1) * q.Rows).
Limit(q.Rows).
Find(&logs).
Error
if err != nil {
return nil, 0, err
}
return logs, count, nil
}
func (s *loginLogRepository) Count(ctx context.Context, email string) (int64, error) {
var count int64
err := s.store.DB(ctx).
Model(&system.LoginLog{}).
Where("email = ?", email).
Count(&count).
Error
if err != nil {
return 0, err
}
return count, nil
}

View File

@@ -0,0 +1,73 @@
package system
import (
"context"
"management/internal/erpserver/model/system"
"management/internal/erpserver/repository"
)
type menuRepository struct {
store repository.Store
}
var _ system.MenuRepository = (*menuRepository)(nil)
func NewMenuRepository(store repository.Store) *menuRepository {
return &menuRepository{
store: store,
}
}
func (r *menuRepository) Create(ctx context.Context, obj *system.Menu) error {
return r.store.DB(ctx).Create(obj).Error
}
func (r *menuRepository) Update(ctx context.Context, obj *system.Menu) error {
return r.store.DB(ctx).Save(obj).Error
}
func (r *menuRepository) Get(ctx context.Context, id int32) (*system.Menu, error) {
var menu system.Menu
err := r.store.DB(ctx).Where("id = ?", id).First(&menu).Error
if err != nil {
return nil, err
}
return &menu, nil
}
func (r *menuRepository) GetByUrl(ctx context.Context, url string) (*system.Menu, error) {
var menu system.Menu
err := r.store.DB(ctx).Where("url = ?", url).First(&menu).Error
if err != nil {
return nil, err
}
return &menu, nil
}
func (r *menuRepository) All(ctx context.Context) ([]*system.Menu, error) {
var menus []*system.Menu
err := r.store.DB(ctx).Find(&menus).Error
if err != nil {
return nil, err
}
return menus, nil
}
func (r *menuRepository) RebuildParentPath(ctx context.Context) error {
query := `UPDATE sys_menu AS tm
SET parent_path = (SELECT ',' || string_agg(cast(t.parent_id AS VARCHAR), ',') || ','
FROM (WITH RECURSIVE temp (id, parent_id) AS (SELECT id, tm.parent_id
FROM sys_menu
WHERE id = tm.id
UNION ALL
SELECT sys_menu.id, sys_menu.parent_id
FROM sys_menu,
temp
WHERE sys_menu.id = temp.parent_id)
SELECT id, parent_id
FROM temp
ORDER BY id) AS t)
WHERE tm.status = 0;`
return r.store.DB(ctx).Exec(query).Error
}

View File

@@ -0,0 +1,100 @@
package system
import (
"context"
"management/internal/db/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/repository"
)
type roleRepository struct {
store repository.Store
}
var _ system.RoleRepository = (*roleRepository)(nil)
func NewRoleRepository(store repository.Store) *roleRepository {
return &roleRepository{
store: store,
}
}
func (r *roleRepository) Create(ctx context.Context, obj *system.Role) error {
return r.store.DB(ctx).Create(obj).Error
}
func (r *roleRepository) Update(ctx context.Context, obj *system.Role) error {
return r.store.DB(ctx).Save(obj).Error
}
func (r *roleRepository) Get(ctx context.Context, id int32) (*system.Role, error) {
var role system.Role
err := r.store.DB(ctx).Where("id = ?", id).First(&role).Error
if err != nil {
return nil, err
}
return &role, nil
}
func (r *roleRepository) All(ctx context.Context) ([]*system.Role, error) {
var roles []*system.Role
err := r.store.DB(ctx).Find(&roles).Error
if err != nil {
return nil, err
}
return roles, nil
}
func (r *roleRepository) List(ctx context.Context, q dto.SearchDto) ([]*system.Role, int64, error) {
query := r.store.DB(ctx).
Model(&system.Role{}).
Where("created_at BETWEEN ? AND ?", q.SearchTimeBegin, q.SearchTimeEnd)
if q.SearchID != 0 {
query = query.Where("id = ?", q.SearchID)
}
if q.SearchParentID != 0 && q.SearchParentID != 1 {
query = query.Where("parent_id = ?", q.SearchParentID)
}
if q.SearchName != "" {
query = query.Where("name LIKE ?", "%"+q.SearchName+"%")
}
if q.SearchStatus != 9999 {
query = query.Where("status = ?", q.SearchStatus)
}
var count int64
err := query.Count(&count).Error
if err != nil {
return nil, 0, err
}
var departs []*system.Role
err = query.
Order("id DESC").
Offset((q.Page - 1) * q.Rows).
Limit(q.Rows).
Find(&departs).Error
if err != nil {
return nil, 0, err
}
return departs, count, nil
}
func (r *roleRepository) RebuildParentPath(ctx context.Context) error {
query := `UPDATE sys_role AS tm
SET parent_path = (SELECT ',' || string_agg(cast(t.parent_id AS VARCHAR), ',') || ','
FROM (WITH RECURSIVE temp (id, parent_id) AS (SELECT id, tm.parent_id
FROM sys_role
WHERE id = tm.id
UNION ALL
SELECT sys_role.id, sys_role.parent_id
FROM sys_role,
temp
WHERE sys_role.id = temp.parent_id)
SELECT id, parent_id
FROM temp
ORDER BY id) AS t)
WHERE tm.status = 0;`
return r.store.DB(ctx).Exec(query).Error
}

View File

@@ -0,0 +1,37 @@
package system
import (
"context"
"management/internal/erpserver/model/system"
"management/internal/erpserver/repository"
)
type roleMenuRepository struct {
store repository.Store
}
var _ system.RoleMenuRepository = (*roleMenuRepository)(nil)
func NewRoleMenuRepository(store repository.Store) *roleMenuRepository {
return &roleMenuRepository{
store: store,
}
}
func (r *roleMenuRepository) Create(ctx context.Context, obj []*system.RoleMenu) error {
return r.store.DB(ctx).Create(obj).Error
}
func (r *roleMenuRepository) DeleteByRoleID(ctx context.Context, roleID int32) error {
return r.store.DB(ctx).Where("role_id = ?", roleID).Delete(&system.RoleMenu{}).Error
}
func (r *roleMenuRepository) ListByRoleID(ctx context.Context, roleID int32) ([]*system.RoleMenu, error) {
var roleMenus []*system.RoleMenu
err := r.store.DB(ctx).Where("role_id = ?", roleID).Find(&roleMenus).Error
if err != nil {
return nil, err
}
return roleMenus, nil
}

View File

@@ -0,0 +1,93 @@
package system
import (
"context"
"management/internal/db/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/repository"
)
type userRepository struct {
store repository.Store
}
var _ system.UserRepository = (*userRepository)(nil)
func NewUserRepository(store repository.Store) *userRepository {
return &userRepository{
store: store,
}
}
func (s *userRepository) Create(ctx context.Context, obj *system.User) error {
return s.store.DB(ctx).Create(obj).Error
}
func (s *userRepository) Update(ctx context.Context, obj *system.User) error {
return s.store.DB(ctx).Save(obj).Error
}
func (s *userRepository) Get(ctx context.Context, id int32) (*system.User, error) {
var user system.User
err := s.store.DB(ctx).Where("id = ?", id).First(&user).Error
if err != nil {
return nil, err
}
return &user, nil
}
func (s *userRepository) GetByEmail(ctx context.Context, email string) (*system.User, error) {
var user system.User
err := s.store.DB(ctx).Where("email = ?", email).First(&user).Error
if err != nil {
return nil, err
}
return &user, nil
}
func (s *userRepository) All(ctx context.Context) ([]*system.User, error) {
var users []*system.User
err := s.store.DB(ctx).Find(&users).Error
if err != nil {
return nil, err
}
return users, nil
}
func (s *userRepository) List(ctx context.Context, q dto.SearchDto) ([]*system.User, int64, error) {
query := s.store.DB(ctx).
Model(&system.User{}).
Preload("Role").
Preload("Department").
Where("created_at BETWEEN ? AND ?", q.SearchTimeBegin, q.SearchTimeEnd)
if q.SearchID != 0 {
query = query.Where("id = ?", q.SearchID)
}
if q.SearchName != "" {
query = query.Where("username LIKE ?", "%"+q.SearchName+"%")
}
if q.SearchEmail != "" {
query = query.Where("email LIKE ?", "%"+q.SearchEmail+"%")
}
if q.SearchStatus != 9999 {
query = query.Where("status = ?", q.SearchStatus)
}
var count int64
err := query.Count(&count).Error
if err != nil {
return nil, 0, err
}
var users []*system.User
err = query.
Order("id DESC").
Offset((q.Page - 1) * q.Rows).
Limit(q.Rows).
Find(&users).Error
if err != nil {
return nil, 0, err
}
return users, count, nil
}