Merge remote-tracking branch 'origin/master'
# Conflicts: # internal/dao/internal/store_desktop_settings.go # internal/dao/internal/store_roles.go # internal/dao/store_desktop_settings.go # internal/dao/store_roles.go
This commit is contained in:
@ -12,4 +12,9 @@ import (
|
||||
|
||||
type IStoreAdminV1 interface {
|
||||
Info(ctx context.Context, req *v1.InfoReq) (res *v1.InfoRes, err error)
|
||||
List(ctx context.Context, req *v1.ListReq) (res *v1.ListRes, err error)
|
||||
Create(ctx context.Context, req *v1.CreateReq) (res *v1.CreateRes, err error)
|
||||
Update(ctx context.Context, req *v1.UpdateReq) (res *v1.UpdateRes, err error)
|
||||
EditPassword(ctx context.Context, req *v1.EditPasswordReq) (res *v1.EditPasswordRes, err error)
|
||||
Delete(ctx context.Context, req *v1.DeleteReq) (res *v1.DeleteRes, err error)
|
||||
}
|
||||
|
||||
@ -3,10 +3,61 @@ package v1
|
||||
import "github.com/gogf/gf/v2/frame/g"
|
||||
|
||||
type InfoReq struct {
|
||||
g.Meta `path:"/store/info" method:"get" tags:"StoreAdmin" summary:"(系统、商户门店后台)获取门店管理员信息"`
|
||||
g.Meta `path:"/store/admin/info" method:"get" tags:"StoreAdmin" summary:"(系统、商户门店后台)获取门店管理员信息"`
|
||||
}
|
||||
|
||||
type InfoRes struct {
|
||||
Id int64 `json:"id"`
|
||||
Username string `json:"username"`
|
||||
}
|
||||
type ListReq struct {
|
||||
g.Meta `path:"/store/admin" method:"get" tags:"StoreAdmin" summary:"(系统、商户门店后台)门店管理员列表"`
|
||||
Page int `json:"page" v:"required#页数不能为空"`
|
||||
Size int `json:"size" v:"required#页大小不能为空"`
|
||||
StoreId int64 `json:"storeId" v:"required#门店ID不能为空"`
|
||||
}
|
||||
type ListRes struct {
|
||||
List interface{} `json:"list"`
|
||||
Total int `json:"total"`
|
||||
}
|
||||
|
||||
type CreateReq struct {
|
||||
g.Meta `path:"/store/admin" method:"post" tags:"StoreAdmin" summary:"(系统、商户门店后台)创建门店管理员"`
|
||||
Realname string `json:"realname" v:"required#真实姓名不能为空"`
|
||||
StoreId int64 `json:"storeId" v:"required#门店ID不能为空"`
|
||||
Username string `json:"username" v:"required#用户名不能为空"`
|
||||
Password string `json:"password" v:"required#密码不能为空"`
|
||||
Password2 string `json:"password2" v:"required#确认密码不能为空|same:password"`
|
||||
Phone string `json:"phone" v:"required#手机号不能为空"`
|
||||
StoreRoleId int `json:"storeRoleId" v:"required#角色ID不能为空"`
|
||||
}
|
||||
type CreateRes struct {
|
||||
Id int64 `json:"id"`
|
||||
}
|
||||
|
||||
type UpdateReq struct {
|
||||
g.Meta `path:"/store/admin" method:"put" tags:"StoreAdmin" summary:"(系统、商户门店后台)更新门店管理员"`
|
||||
Id int64 `json:"id" v:"required#门店管理员ID不能为空"`
|
||||
Realname string `json:"realname" v:"required#真实姓名不能为空"`
|
||||
StoreRoleId int `json:"storeRoleId" v:"required#角色ID不能为空"`
|
||||
Phone string `json:"phone" v:"required#手机号不能为空"`
|
||||
}
|
||||
type UpdateRes struct {
|
||||
Success bool `json:"success"`
|
||||
}
|
||||
type EditPasswordReq struct {
|
||||
g.Meta `path:"/store/admin/password" method:"post" tags:"StoreAdmin" summary:"(系统、商户门店后台)修改门店管理员密码"`
|
||||
Id int64 `json:"id" v:"required#门店管理员ID不能为空"`
|
||||
OldPass string `json:"oldPass" v:"required#旧密码不能为空"`
|
||||
NewPass string `json:"newPass" v:"required#新密码不能为空"`
|
||||
}
|
||||
type EditPasswordRes struct {
|
||||
Success bool `json:"success"`
|
||||
}
|
||||
type DeleteReq struct {
|
||||
g.Meta `path:"/store/admin/{id}" method:"delete" tags:"StoreAdmin" summary:"(系统、商户门店后台)删除门店管理员"`
|
||||
Id int64 `in:"path" json:"id" v:"required#门店管理员ID不能为空"`
|
||||
}
|
||||
type DeleteRes struct {
|
||||
Success bool `json:"success"`
|
||||
}
|
||||
|
||||
18
api/storeRole/storeRole.go
Normal file
18
api/storeRole/storeRole.go
Normal file
@ -0,0 +1,18 @@
|
||||
// =================================================================================
|
||||
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||
// =================================================================================
|
||||
|
||||
package storeRole
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"server/api/storeRole/v1"
|
||||
)
|
||||
|
||||
type IStoreRoleV1 interface {
|
||||
List(ctx context.Context, req *v1.ListReq) (res *v1.ListRes, err error)
|
||||
Create(ctx context.Context, req *v1.CreateReq) (res *v1.CreateRes, err error)
|
||||
Update(ctx context.Context, req *v1.UpdateReq) (res *v1.UpdateRes, err error)
|
||||
Delete(ctx context.Context, req *v1.DeleteReq) (res *v1.DeleteRes, err error)
|
||||
}
|
||||
37
api/storeRole/v1/storeRole.go
Normal file
37
api/storeRole/v1/storeRole.go
Normal file
@ -0,0 +1,37 @@
|
||||
package v1
|
||||
|
||||
import "github.com/gogf/gf/v2/frame/g"
|
||||
|
||||
type ListReq struct {
|
||||
g.Meta `path:"/store/role" method:"get" tags:"StoreRole" summary:"(系统、商户门店后台)获取门店角色列表"`
|
||||
StoreId int64 `json:"storeId" v:"required#门店ID不能为空" dc:"门店ID"`
|
||||
Page int `json:"page" dc:"页数"`
|
||||
Size int `json:"size" dc:"页大小"`
|
||||
}
|
||||
type ListRes struct {
|
||||
List interface{} `json:"list"`
|
||||
Total int `json:"total"`
|
||||
}
|
||||
type CreateReq struct {
|
||||
g.Meta `path:"/store/role" method:"post" tags:"StoreRole" summary:"(系统、商户门店后台)创建门店角色"`
|
||||
StoreId int64 `json:"storeId" v:"required#门店ID不能为空" dc:"门店ID"`
|
||||
Name string `json:"name" v:"required#角色名称不能为空" dc:"角色名称"`
|
||||
}
|
||||
type CreateRes struct {
|
||||
Id int64 `json:"id"`
|
||||
}
|
||||
type UpdateReq struct {
|
||||
g.Meta `path:"/store/role" method:"put" tags:"StoreRole" summary:"(系统、商户门店后台)更新门店角色"`
|
||||
Id int64 `json:"id" v:"required#角色ID不能为空" dc:"角色ID"`
|
||||
Name string `json:"name" v:"required#角色名称不能为空" dc:"角色名称"`
|
||||
}
|
||||
type UpdateRes struct {
|
||||
Success bool `json:"success" dc:"是否成功"`
|
||||
}
|
||||
type DeleteReq struct {
|
||||
g.Meta `path:"/store/role/{id}" method:"delete" tags:"StoreRole" summary:"(系统、商户门店后台)删除门店角色"`
|
||||
Id int64 `in:"path" json:"id" v:"required#角色ID不能为空" dc:"角色ID"`
|
||||
}
|
||||
type DeleteRes struct {
|
||||
Success bool `json:"success" dc:"是否成功"`
|
||||
}
|
||||
@ -15,6 +15,8 @@ import (
|
||||
"server/internal/controller/rewardType"
|
||||
"server/internal/controller/role"
|
||||
"server/internal/controller/store"
|
||||
"server/internal/controller/storeAdmin"
|
||||
"server/internal/controller/storeRole"
|
||||
"server/internal/controller/task"
|
||||
"server/internal/controller/upload"
|
||||
"server/internal/controller/user"
|
||||
@ -46,6 +48,8 @@ var (
|
||||
role.NewV1(),
|
||||
merchant.NewV1(),
|
||||
store.NewV1(),
|
||||
storeRole.NewV1(),
|
||||
storeAdmin.NewV1(),
|
||||
rewardType.NewV1(),
|
||||
feedback.NewV1(),
|
||||
user.NewV1(),
|
||||
|
||||
17
internal/controller/storeAdmin/storeAdmin_v1_create.go
Normal file
17
internal/controller/storeAdmin/storeAdmin_v1_create.go
Normal file
@ -0,0 +1,17 @@
|
||||
package storeAdmin
|
||||
|
||||
import (
|
||||
"context"
|
||||
"server/internal/model"
|
||||
"server/internal/service"
|
||||
|
||||
"server/api/storeAdmin/v1"
|
||||
)
|
||||
|
||||
func (c *ControllerV1) Create(ctx context.Context, req *v1.CreateReq) (res *v1.CreateRes, err error) {
|
||||
out, err := service.StoreAdmin().Create(ctx, &model.StoreAdminCreateIn{StoreId: req.StoreId, Username: req.Username, Password: req.Password, StoreRoleId: req.StoreRoleId, Phone: req.Phone, RealName: req.Realname})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &v1.CreateRes{Id: out.Id}, nil
|
||||
}
|
||||
21
internal/controller/storeAdmin/storeAdmin_v1_delete.go
Normal file
21
internal/controller/storeAdmin/storeAdmin_v1_delete.go
Normal file
@ -0,0 +1,21 @@
|
||||
package storeAdmin
|
||||
|
||||
import (
|
||||
"context"
|
||||
"server/internal/model"
|
||||
"server/internal/service"
|
||||
|
||||
"server/api/storeAdmin/v1"
|
||||
)
|
||||
|
||||
func (c *ControllerV1) Delete(ctx context.Context, req *v1.DeleteReq) (res *v1.DeleteRes, err error) {
|
||||
out, err := service.StoreAdmin().Delete(ctx, &model.StoreAdminDeleteIn{
|
||||
StoreAdminId: req.Id,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &v1.DeleteRes{
|
||||
Success: out.Success,
|
||||
}, nil
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
package storeAdmin
|
||||
|
||||
import (
|
||||
"context"
|
||||
"server/internal/model"
|
||||
"server/internal/service"
|
||||
|
||||
"server/api/storeAdmin/v1"
|
||||
)
|
||||
|
||||
func (c *ControllerV1) EditPassword(ctx context.Context, req *v1.EditPasswordReq) (res *v1.EditPasswordRes, err error) {
|
||||
out, err := service.StoreAdmin().EditPassword(ctx, &model.StoreAdminEditPasswordIn{
|
||||
Password: req.OldPass,
|
||||
Password2: req.NewPass,
|
||||
StoreAdminId: req.Id,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &v1.EditPasswordRes{Success: out.Success}, nil
|
||||
}
|
||||
20
internal/controller/storeAdmin/storeAdmin_v1_list.go
Normal file
20
internal/controller/storeAdmin/storeAdmin_v1_list.go
Normal file
@ -0,0 +1,20 @@
|
||||
package storeAdmin
|
||||
|
||||
import (
|
||||
"context"
|
||||
"server/internal/model"
|
||||
"server/internal/service"
|
||||
|
||||
"server/api/storeAdmin/v1"
|
||||
)
|
||||
|
||||
func (c *ControllerV1) List(ctx context.Context, req *v1.ListReq) (res *v1.ListRes, err error) {
|
||||
out, err := service.StoreAdmin().List(ctx, &model.StoreAdminListIn{Page: req.Page, Size: req.Size, StoreId: req.StoreId})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &v1.ListRes{
|
||||
List: out.List,
|
||||
Total: out.Total,
|
||||
}, nil
|
||||
}
|
||||
22
internal/controller/storeAdmin/storeAdmin_v1_update.go
Normal file
22
internal/controller/storeAdmin/storeAdmin_v1_update.go
Normal file
@ -0,0 +1,22 @@
|
||||
package storeAdmin
|
||||
|
||||
import (
|
||||
"context"
|
||||
"server/internal/model"
|
||||
"server/internal/service"
|
||||
|
||||
"server/api/storeAdmin/v1"
|
||||
)
|
||||
|
||||
func (c *ControllerV1) Update(ctx context.Context, req *v1.UpdateReq) (res *v1.UpdateRes, err error) {
|
||||
out, err := service.StoreAdmin().Update(ctx, &model.StoreAdminUpdateIn{
|
||||
StoreAdminId: req.Id,
|
||||
Phone: req.Phone,
|
||||
RealName: req.Realname,
|
||||
StoreRoleId: req.StoreRoleId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &v1.UpdateRes{Success: out.Success}, nil
|
||||
}
|
||||
5
internal/controller/storeRole/storeRole.go
Normal file
5
internal/controller/storeRole/storeRole.go
Normal file
@ -0,0 +1,5 @@
|
||||
// =================================================================================
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package storeRole
|
||||
15
internal/controller/storeRole/storeRole_new.go
Normal file
15
internal/controller/storeRole/storeRole_new.go
Normal file
@ -0,0 +1,15 @@
|
||||
// =================================================================================
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package storeRole
|
||||
|
||||
import (
|
||||
"server/api/storeRole"
|
||||
)
|
||||
|
||||
type ControllerV1 struct{}
|
||||
|
||||
func NewV1() storeRole.IStoreRoleV1 {
|
||||
return &ControllerV1{}
|
||||
}
|
||||
17
internal/controller/storeRole/storeRole_v1_create.go
Normal file
17
internal/controller/storeRole/storeRole_v1_create.go
Normal file
@ -0,0 +1,17 @@
|
||||
package storeRole
|
||||
|
||||
import (
|
||||
"context"
|
||||
"server/internal/model"
|
||||
"server/internal/service"
|
||||
|
||||
"server/api/storeRole/v1"
|
||||
)
|
||||
|
||||
func (c *ControllerV1) Create(ctx context.Context, req *v1.CreateReq) (res *v1.CreateRes, err error) {
|
||||
out, err := service.StoreRole().Create(ctx, &model.StoreRoleCreateIn{Name: req.Name, StoreId: req.StoreId})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &v1.CreateRes{Id: out.Id}, nil
|
||||
}
|
||||
17
internal/controller/storeRole/storeRole_v1_delete.go
Normal file
17
internal/controller/storeRole/storeRole_v1_delete.go
Normal file
@ -0,0 +1,17 @@
|
||||
package storeRole
|
||||
|
||||
import (
|
||||
"context"
|
||||
"server/internal/model"
|
||||
"server/internal/service"
|
||||
|
||||
"server/api/storeRole/v1"
|
||||
)
|
||||
|
||||
func (c *ControllerV1) Delete(ctx context.Context, req *v1.DeleteReq) (res *v1.DeleteRes, err error) {
|
||||
out, err := service.StoreRole().Delete(ctx, &model.StoreRoleDeleteIn{Id: req.Id})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &v1.DeleteRes{Success: out.Success}, nil
|
||||
}
|
||||
20
internal/controller/storeRole/storeRole_v1_list.go
Normal file
20
internal/controller/storeRole/storeRole_v1_list.go
Normal file
@ -0,0 +1,20 @@
|
||||
package storeRole
|
||||
|
||||
import (
|
||||
"context"
|
||||
"server/internal/model"
|
||||
"server/internal/service"
|
||||
|
||||
"server/api/storeRole/v1"
|
||||
)
|
||||
|
||||
func (c *ControllerV1) List(ctx context.Context, req *v1.ListReq) (res *v1.ListRes, err error) {
|
||||
out, err := service.StoreRole().List(ctx, &model.StoreRoleListIn{Page: req.Page, Size: req.Size, StoreId: req.StoreId})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &v1.ListRes{
|
||||
List: out.List,
|
||||
Total: out.Total,
|
||||
}, nil
|
||||
}
|
||||
19
internal/controller/storeRole/storeRole_v1_update.go
Normal file
19
internal/controller/storeRole/storeRole_v1_update.go
Normal file
@ -0,0 +1,19 @@
|
||||
package storeRole
|
||||
|
||||
import (
|
||||
"context"
|
||||
"server/internal/model"
|
||||
"server/internal/service"
|
||||
|
||||
"server/api/storeRole/v1"
|
||||
)
|
||||
|
||||
func (c *ControllerV1) Update(ctx context.Context, req *v1.UpdateReq) (res *v1.UpdateRes, err error) {
|
||||
out, err := service.StoreRole().Update(ctx, &model.StoreRoleUpdateIn{Id: req.Id, Name: req.Name})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &v1.UpdateRes{
|
||||
Success: out.Success,
|
||||
}, nil
|
||||
}
|
||||
@ -13,10 +13,9 @@ import (
|
||||
|
||||
// StoreDesktopSettingsDao is the data access object for the table store_desktop_settings.
|
||||
type StoreDesktopSettingsDao struct {
|
||||
table string // table is the underlying table name of the DAO.
|
||||
group string // group is the database configuration group name of the current DAO.
|
||||
columns StoreDesktopSettingsColumns // columns contains all the column names of Table for convenient usage.
|
||||
handlers []gdb.ModelHandler // handlers for customized model modification.
|
||||
table string // table is the underlying table name of the DAO.
|
||||
group string // group is the database configuration group name of the current DAO.
|
||||
columns StoreDesktopSettingsColumns // columns contains all the column names of Table for convenient usage.
|
||||
}
|
||||
|
||||
// StoreDesktopSettingsColumns defines and stores column names for the table store_desktop_settings.
|
||||
@ -46,12 +45,11 @@ var storeDesktopSettingsColumns = StoreDesktopSettingsColumns{
|
||||
}
|
||||
|
||||
// NewStoreDesktopSettingsDao creates and returns a new DAO object for table data access.
|
||||
func NewStoreDesktopSettingsDao(handlers ...gdb.ModelHandler) *StoreDesktopSettingsDao {
|
||||
func NewStoreDesktopSettingsDao() *StoreDesktopSettingsDao {
|
||||
return &StoreDesktopSettingsDao{
|
||||
group: "default",
|
||||
table: "store_desktop_settings",
|
||||
columns: storeDesktopSettingsColumns,
|
||||
handlers: handlers,
|
||||
group: "default",
|
||||
table: "store_desktop_settings",
|
||||
columns: storeDesktopSettingsColumns,
|
||||
}
|
||||
}
|
||||
|
||||
@ -77,11 +75,7 @@ func (dao *StoreDesktopSettingsDao) Group() string {
|
||||
|
||||
// Ctx creates and returns a Model for the current DAO. It automatically sets the context for the current operation.
|
||||
func (dao *StoreDesktopSettingsDao) Ctx(ctx context.Context) *gdb.Model {
|
||||
model := dao.DB().Model(dao.table)
|
||||
for _, handler := range dao.handlers {
|
||||
model = handler(model)
|
||||
}
|
||||
return model.Safe().Ctx(ctx)
|
||||
return dao.DB().Model(dao.table).Safe().Ctx(ctx)
|
||||
}
|
||||
|
||||
// Transaction wraps the transaction logic using function f.
|
||||
|
||||
@ -13,10 +13,9 @@ import (
|
||||
|
||||
// StoreRolesDao is the data access object for the table store_roles.
|
||||
type StoreRolesDao struct {
|
||||
table string // table is the underlying table name of the DAO.
|
||||
group string // group is the database configuration group name of the current DAO.
|
||||
columns StoreRolesColumns // columns contains all the column names of Table for convenient usage.
|
||||
handlers []gdb.ModelHandler // handlers for customized model modification.
|
||||
table string // table is the underlying table name of the DAO.
|
||||
group string // group is the database configuration group name of the current DAO.
|
||||
columns StoreRolesColumns // columns contains all the column names of Table for convenient usage.
|
||||
}
|
||||
|
||||
// StoreRolesColumns defines and stores column names for the table store_roles.
|
||||
@ -40,12 +39,11 @@ var storeRolesColumns = StoreRolesColumns{
|
||||
}
|
||||
|
||||
// NewStoreRolesDao creates and returns a new DAO object for table data access.
|
||||
func NewStoreRolesDao(handlers ...gdb.ModelHandler) *StoreRolesDao {
|
||||
func NewStoreRolesDao() *StoreRolesDao {
|
||||
return &StoreRolesDao{
|
||||
group: "default",
|
||||
table: "store_roles",
|
||||
columns: storeRolesColumns,
|
||||
handlers: handlers,
|
||||
group: "default",
|
||||
table: "store_roles",
|
||||
columns: storeRolesColumns,
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,11 +69,7 @@ func (dao *StoreRolesDao) Group() string {
|
||||
|
||||
// Ctx creates and returns a Model for the current DAO. It automatically sets the context for the current operation.
|
||||
func (dao *StoreRolesDao) Ctx(ctx context.Context) *gdb.Model {
|
||||
model := dao.DB().Model(dao.table)
|
||||
for _, handler := range dao.handlers {
|
||||
model = handler(model)
|
||||
}
|
||||
return model.Safe().Ctx(ctx)
|
||||
return dao.DB().Model(dao.table).Safe().Ctx(ctx)
|
||||
}
|
||||
|
||||
// Transaction wraps the transaction logic using function f.
|
||||
|
||||
@ -8,15 +8,20 @@ import (
|
||||
"server/internal/dao/internal"
|
||||
)
|
||||
|
||||
// internalStoreDesktopSettingsDao is an internal type for wrapping the internal DAO implementation.
|
||||
type internalStoreDesktopSettingsDao = *internal.StoreDesktopSettingsDao
|
||||
|
||||
// storeDesktopSettingsDao is the data access object for the table store_desktop_settings.
|
||||
// You can define custom methods on it to extend its functionality as needed.
|
||||
type storeDesktopSettingsDao struct {
|
||||
*internal.StoreDesktopSettingsDao
|
||||
internalStoreDesktopSettingsDao
|
||||
}
|
||||
|
||||
var (
|
||||
// StoreDesktopSettings is a globally accessible object for table store_desktop_settings operations.
|
||||
StoreDesktopSettings = storeDesktopSettingsDao{internal.NewStoreDesktopSettingsDao()}
|
||||
StoreDesktopSettings = storeDesktopSettingsDao{
|
||||
internal.NewStoreDesktopSettingsDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
|
||||
@ -8,15 +8,20 @@ import (
|
||||
"server/internal/dao/internal"
|
||||
)
|
||||
|
||||
// internalStoreRolesDao is an internal type for wrapping the internal DAO implementation.
|
||||
type internalStoreRolesDao = *internal.StoreRolesDao
|
||||
|
||||
// storeRolesDao is the data access object for the table store_roles.
|
||||
// You can define custom methods on it to extend its functionality as needed.
|
||||
type storeRolesDao struct {
|
||||
*internal.StoreRolesDao
|
||||
internalStoreRolesDao
|
||||
}
|
||||
|
||||
var (
|
||||
// StoreRoles is a globally accessible object for table store_roles operations.
|
||||
StoreRoles = storeRolesDao{internal.NewStoreRolesDao()}
|
||||
StoreRoles = storeRolesDao{
|
||||
internal.NewStoreRolesDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
|
||||
@ -15,6 +15,7 @@ import (
|
||||
_ "server/internal/logic/role"
|
||||
_ "server/internal/logic/store"
|
||||
_ "server/internal/logic/storeAdmin"
|
||||
_ "server/internal/logic/storeRole"
|
||||
_ "server/internal/logic/task"
|
||||
_ "server/internal/logic/upload"
|
||||
_ "server/internal/logic/user"
|
||||
|
||||
@ -5,8 +5,6 @@ import (
|
||||
"fmt"
|
||||
"github.com/gogf/gf/v2/database/gdb"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/net/ghttp"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
"github.com/gogf/gf/v2/util/grand"
|
||||
"server/internal/consts"
|
||||
"server/internal/dao"
|
||||
@ -80,13 +78,6 @@ func (s *sMerchantAdmin) Login(ctx context.Context, in *model.MerchantLoginIn) (
|
||||
out = &model.MerchantLoginOut{
|
||||
Token: token,
|
||||
}
|
||||
go func(ctx context.Context, merchantAdminId int64) {
|
||||
// 更新商户管理员登录时间
|
||||
dao.MerchantAdmins.Ctx(ctx).WherePri(merchantAdminId).Update(do.MerchantAdmins{
|
||||
LastLoginAt: gtime.Now(),
|
||||
LastLoginIp: ghttp.RequestFromCtx(ctx).RemoteAddr,
|
||||
})
|
||||
}(context.Background(), mAdminId)
|
||||
return
|
||||
}
|
||||
func (s *sMerchantAdmin) Info(ctx context.Context, in *model.MerchantAdminInfoIn) (out *model.MerchantAdminInfoOut, err error) {
|
||||
|
||||
@ -3,6 +3,7 @@ package store
|
||||
import (
|
||||
"context"
|
||||
"github.com/gogf/gf/v2/database/gdb"
|
||||
"github.com/gogf/gf/v2/errors/gerror"
|
||||
"server/internal/consts"
|
||||
"server/internal/dao"
|
||||
"server/internal/model"
|
||||
@ -152,3 +153,77 @@ func (s *sStore) Info(ctx context.Context, in *model.StoreInfoIn) (out *model.St
|
||||
// TODO 获取门店信息等相关信息
|
||||
return
|
||||
}
|
||||
|
||||
func (s *sStore) GetDesktopSetting(ctx context.Context, in *model.StoreGetDesktopSettingIn) (*model.StoreGetDesktopSettingOut, error) {
|
||||
// 检查门店桌面设置是否存在
|
||||
exist, err := dao.StoreDesktopSettings.Ctx(ctx).Where(do.StoreDesktopSettings{StoreId: in.StoreId}).Count()
|
||||
if err != nil {
|
||||
return nil, gerror.Wrap(ecode.Fail, "查询门店桌面设置出现异常")
|
||||
}
|
||||
if exist == 0 {
|
||||
return &model.StoreGetDesktopSettingOut{}, nil
|
||||
}
|
||||
|
||||
// 查询桌面设置
|
||||
out := &model.StoreGetDesktopSettingOut{}
|
||||
err = dao.StoreDesktopSettings.Ctx(ctx).Where(do.StoreDesktopSettings{StoreId: in.StoreId}).Scan(out)
|
||||
if err != nil {
|
||||
return nil, gerror.Wrap(ecode.Fail, "查询门店桌面设置出现异常")
|
||||
}
|
||||
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (s *sStore) SaveDesktopSetting(ctx context.Context, in *model.SaveDesktopSettingIn) (*model.SaveDesktopSettingOut, error) {
|
||||
out := &model.SaveDesktopSettingOut{}
|
||||
err := dao.StoreDesktopSettings.Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
|
||||
// 构建数据,包含所有字段
|
||||
data := do.StoreDesktopSettings{
|
||||
Id: in.Id,
|
||||
StoreId: in.StoreId,
|
||||
BackgroundUrl: in.BackgroundUrl,
|
||||
Resolution: in.Resolution,
|
||||
IsTopWidgetVisible: in.IsTopWidgetVisible,
|
||||
IsRightWidgetVisible: in.IsRightWidgetVisible,
|
||||
}
|
||||
|
||||
// 检查记录是否存在(基于 store_id)
|
||||
exist, err := dao.StoreDesktopSettings.Ctx(ctx).TX(tx).Where(do.StoreDesktopSettings{StoreId: in.StoreId}).Count()
|
||||
if err != nil {
|
||||
return gerror.Wrap(ecode.Fail, "检查门店桌面设置失败")
|
||||
}
|
||||
|
||||
if exist == 0 {
|
||||
// 新增
|
||||
result, err := dao.StoreDesktopSettings.Ctx(ctx).TX(tx).Data(data).Insert()
|
||||
if err != nil {
|
||||
return gerror.Wrap(ecode.Fail, "新增门店桌面设置失败")
|
||||
}
|
||||
id, err := result.LastInsertId()
|
||||
if err != nil {
|
||||
return gerror.Wrap(ecode.Fail, "获取新增记录ID失败")
|
||||
}
|
||||
out.Id = id
|
||||
} else {
|
||||
// 更新(如果提供了 Id,则优先使用 Id 作为条件,否则使用 StoreId)
|
||||
updateWhere := do.StoreDesktopSettings{StoreId: in.StoreId}
|
||||
if in.Id > 0 {
|
||||
updateWhere = do.StoreDesktopSettings{Id: in.Id}
|
||||
}
|
||||
_, err := dao.StoreDesktopSettings.Ctx(ctx).TX(tx).Data(data).Where(updateWhere).Update()
|
||||
if err != nil {
|
||||
return gerror.Wrap(ecode.Fail, "更新门店桌面设置失败")
|
||||
}
|
||||
id, err := dao.StoreDesktopSettings.Ctx(ctx).TX(tx).Where(updateWhere).Fields(dao.StoreDesktopSettings.Columns().Id).Value()
|
||||
if err != nil {
|
||||
return gerror.Wrap(ecode.Fail, "获取更新记录ID失败")
|
||||
}
|
||||
out.Id = id.Int64()
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ package storeAdmin
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"server/internal/consts"
|
||||
"server/internal/dao"
|
||||
"server/internal/model"
|
||||
@ -92,3 +93,132 @@ func (s *sStoreAdmin) Info(ctx context.Context, in *model.StoreAdminInfoIn) (out
|
||||
}
|
||||
return
|
||||
}
|
||||
func (s *sStoreAdmin) List(ctx context.Context, in *model.StoreAdminListIn) (out *model.StoreAdminListOut, err error) {
|
||||
list := make([]model.StoreAdmin, 0)
|
||||
var total int
|
||||
if err = dao.StoreAdmins.Ctx(ctx).LeftJoin(
|
||||
dao.StoreRoles.Table(),
|
||||
fmt.Sprintf("%s.%s = %s.%s", dao.StoreAdmins.Table(), dao.StoreAdmins.Columns().StoreRoleId, dao.StoreRoles.Table(), dao.StoreRoles.Columns().Id),
|
||||
).Fields(
|
||||
fmt.Sprintf("%s.*, %s.name as store_role_name", dao.StoreAdmins.Table(), dao.StoreRoles.Table()),
|
||||
).Page(in.Page, in.Size).Where(do.StoreAdmins{StoreId: in.StoreId}).ScanAndCount(&list, &total, false); err != nil {
|
||||
return nil, ecode.Fail.Sub("查询门店管理员失败")
|
||||
}
|
||||
return &model.StoreAdminListOut{
|
||||
List: list,
|
||||
Total: total,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *sStoreAdmin) Create(ctx context.Context, in *model.StoreAdminCreateIn) (out *model.CreateOut, err error) {
|
||||
exist, err := dao.StoreAdmins.Ctx(ctx).Where(do.StoreAdmins{Username: in.Username}).Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查询商户管理员失败")
|
||||
}
|
||||
if exist {
|
||||
return nil, ecode.Fail.Sub("该用户名已被注册")
|
||||
}
|
||||
passwordHash, err := encrypt.EncryptPassword(in.Password)
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("密码加密失败")
|
||||
}
|
||||
count, err := dao.StoreRoles.Ctx(ctx).Where(do.StoreRoles{Id: in.StoreRoleId}).Count()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查询角色失败")
|
||||
}
|
||||
if count == 0 {
|
||||
return nil, ecode.Params.Sub("角色不存在")
|
||||
}
|
||||
value, err := dao.Roles.Ctx(ctx).Where(do.Roles{Code: consts.StoreRoleCode}).Fields(dao.Roles.Columns().Id).Value()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查询角色失败")
|
||||
}
|
||||
id, err := dao.StoreAdmins.Ctx(ctx).Data(do.StoreAdmins{
|
||||
Username: in.Username,
|
||||
RealName: in.RealName,
|
||||
PasswordHash: passwordHash,
|
||||
StoreId: in.StoreId,
|
||||
Phone: in.Phone,
|
||||
StoreRoleId: in.StoreRoleId,
|
||||
Status: consts.StoreAdminEnable,
|
||||
RoleId: value.Int(),
|
||||
IsPrimary: false,
|
||||
}).InsertAndGetId()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("插入商户管理员数据失败")
|
||||
}
|
||||
return &model.CreateOut{
|
||||
Id: id,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *sStoreAdmin) Update(ctx context.Context, in *model.StoreAdminUpdateIn) (out *model.UpdateOut, err error) {
|
||||
exist, err := dao.StoreAdmins.Ctx(ctx).WherePri(in.StoreAdminId).Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查询商户管理员失败")
|
||||
}
|
||||
if !exist {
|
||||
return nil, ecode.Params.Sub("该用户不存在")
|
||||
}
|
||||
if _, err = dao.StoreAdmins.Ctx(ctx).WherePri(in.StoreAdminId).Data(do.StoreAdmins{
|
||||
RealName: in.RealName,
|
||||
Phone: in.Phone,
|
||||
StoreRoleId: in.StoreRoleId,
|
||||
}).Update(); err != nil {
|
||||
return nil, ecode.Fail.Sub("更新商户管理员数据失败")
|
||||
}
|
||||
return &model.UpdateOut{
|
||||
Success: true,
|
||||
}, nil
|
||||
}
|
||||
func (s *sStoreAdmin) EditPassword(ctx context.Context, in *model.StoreAdminEditPasswordIn) (out *model.UpdateOut, err error) {
|
||||
exist, err := dao.StoreAdmins.Ctx(ctx).WherePri(in.StoreAdminId).Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查询商户管理员失败")
|
||||
}
|
||||
if !exist {
|
||||
return nil, ecode.Params.Sub("该用户不存在")
|
||||
}
|
||||
value, err := dao.StoreAdmins.Ctx(ctx).WherePri(in.StoreAdminId).Fields(dao.StoreAdmins.Columns().PasswordHash).Value()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查询商户管理员失败")
|
||||
}
|
||||
if !encrypt.ComparePassword(value.String(), in.Password) {
|
||||
return nil, ecode.Params.Sub("密码错误")
|
||||
}
|
||||
newPassHash, err := encrypt.EncryptPassword(in.Password2)
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("密码加密失败")
|
||||
}
|
||||
if _, err = dao.StoreAdmins.Ctx(ctx).WherePri(in.StoreAdminId).Data(do.StoreAdmins{
|
||||
PasswordHash: newPassHash,
|
||||
}).Update(); err != nil {
|
||||
return nil, ecode.Fail.Sub("更新商户管理员数据失败")
|
||||
}
|
||||
return &model.UpdateOut{
|
||||
Success: true,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *sStoreAdmin) Delete(ctx context.Context, in *model.StoreAdminDeleteIn) (out *model.DeleteOut, err error) {
|
||||
exist, err := dao.StoreAdmins.Ctx(ctx).WherePri(in.StoreAdminId).Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查询商户管理员失败")
|
||||
}
|
||||
if !exist {
|
||||
return nil, ecode.Params.Sub("该用户不存在")
|
||||
}
|
||||
value, err := dao.StoreAdmins.Ctx(ctx).WherePri(in.StoreAdminId).Fields(dao.StoreAdmins.Columns().IsPrimary).Value()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查询商户管理员失败")
|
||||
}
|
||||
if value.Bool() {
|
||||
return nil, ecode.Params.Sub("该用户为门店管理员,不能删除")
|
||||
}
|
||||
if _, err = dao.StoreAdmins.Ctx(ctx).WherePri(in.StoreAdminId).Delete(); err != nil {
|
||||
return nil, ecode.Fail.Sub("删除商户管理员失败")
|
||||
}
|
||||
return &model.DeleteOut{
|
||||
Success: true,
|
||||
}, nil
|
||||
}
|
||||
|
||||
143
internal/logic/storeRole/storeRole.go
Normal file
143
internal/logic/storeRole/storeRole.go
Normal file
@ -0,0 +1,143 @@
|
||||
package storeRole
|
||||
|
||||
import (
|
||||
"context"
|
||||
"server/internal/dao"
|
||||
"server/internal/model"
|
||||
"server/internal/model/do"
|
||||
"server/internal/service"
|
||||
"server/utility/ecode"
|
||||
)
|
||||
|
||||
type sStoreRole struct {
|
||||
}
|
||||
|
||||
func New() service.IStoreRole {
|
||||
return &sStoreRole{}
|
||||
}
|
||||
func init() {
|
||||
service.RegisterStoreRole(New())
|
||||
}
|
||||
|
||||
func (s *sStoreRole) Create(ctx context.Context, in *model.StoreRoleCreateIn) (out *model.StoreRoleCreateOut, err error) {
|
||||
out = &model.StoreRoleCreateOut{}
|
||||
|
||||
// 检查角色名称是否已存在
|
||||
exist, err := dao.StoreRoles.Ctx(ctx).Where(do.StoreRoles{
|
||||
StoreId: in.StoreId,
|
||||
Name: in.Name,
|
||||
}).Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("新增角色查重出现异常")
|
||||
}
|
||||
if exist {
|
||||
return nil, ecode.Params.Sub("该门店下角色名称已存在")
|
||||
}
|
||||
|
||||
// 创建角色
|
||||
id, err := dao.StoreRoles.Ctx(ctx).InsertAndGetId(do.StoreRoles{
|
||||
StoreId: in.StoreId,
|
||||
Name: in.Name,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("创建角色失败")
|
||||
}
|
||||
|
||||
out.Id = id
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (s *sStoreRole) Update(ctx context.Context, in *model.StoreRoleUpdateIn) (out *model.StoreRoleUpdateOut, err error) {
|
||||
out = &model.StoreRoleUpdateOut{}
|
||||
|
||||
// 检查角色是否存在
|
||||
exist, err := dao.StoreRoles.Ctx(ctx).WherePri(in.Id).Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查询角色失败")
|
||||
}
|
||||
if !exist {
|
||||
return nil, ecode.Params.Sub("角色不存在")
|
||||
}
|
||||
|
||||
// 检查角色名称是否已存在(排除自身)
|
||||
exist, err = dao.StoreRoles.Ctx(ctx).
|
||||
Where(do.StoreRoles{
|
||||
StoreId: in.StoreID,
|
||||
Name: in.Name,
|
||||
}).
|
||||
WhereNot(dao.StoreRoles.Columns().Id, in.Id).
|
||||
Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查询角色名称失败")
|
||||
}
|
||||
if exist {
|
||||
return nil, ecode.Params.Sub("该门店下角色名称已存在")
|
||||
}
|
||||
|
||||
// 更新角色
|
||||
if _, err = dao.StoreRoles.Ctx(ctx).
|
||||
Where(do.StoreRoles{Id: in.Id}).
|
||||
Update(do.StoreRoles{
|
||||
Name: in.Name,
|
||||
}); err != nil {
|
||||
return nil, ecode.Fail.Sub("更新角色失败")
|
||||
}
|
||||
|
||||
out.Success = true
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (s *sStoreRole) Delete(ctx context.Context, in *model.StoreRoleDeleteIn) (out *model.StoreRoleDeleteOut, err error) {
|
||||
out = &model.StoreRoleDeleteOut{}
|
||||
|
||||
// 检查角色是否存在
|
||||
exist, err := dao.StoreRoles.Ctx(ctx).WherePri(in.Id).Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查询角色失败")
|
||||
}
|
||||
if !exist {
|
||||
return nil, ecode.Params.Sub("角色不存在")
|
||||
}
|
||||
|
||||
// 检查是否有管理员使用该角色
|
||||
count, err := dao.StoreAdmins.Ctx(ctx).Where(do.StoreAdmins{RoleId: in.Id}).Count()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查询角色使用情况失败")
|
||||
}
|
||||
if count > 0 {
|
||||
return nil, ecode.Params.Sub("该角色下存在管理员,无法删除")
|
||||
}
|
||||
|
||||
// 软删除角色
|
||||
if _, err = dao.StoreRoles.Ctx(ctx).
|
||||
Where(do.StoreRoles{Id: in.Id}).
|
||||
Delete(); err != nil {
|
||||
return nil, ecode.Fail.Sub("删除角色失败")
|
||||
}
|
||||
|
||||
out.Success = true
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (s *sStoreRole) List(ctx context.Context, in *model.StoreRoleListIn) (out *model.StoreRoleListOut, err error) {
|
||||
out = &model.StoreRoleListOut{}
|
||||
|
||||
// 构建查询条件
|
||||
orm := dao.StoreRoles.Ctx(ctx)
|
||||
if in.StoreId > 0 {
|
||||
orm = orm.Where(do.StoreRoles{StoreId: in.StoreId})
|
||||
}
|
||||
|
||||
// 获取分页数据
|
||||
list := make([]model.StoreRoleListItem, 0)
|
||||
var total int
|
||||
if err = orm.Page(in.Page, in.Size).
|
||||
OrderDesc(dao.StoreRoles.Columns().Id).
|
||||
ScanAndCount(&list, &total, false); err != nil {
|
||||
return nil, ecode.Fail.Sub("查询角色列表失败")
|
||||
}
|
||||
|
||||
out.List = list
|
||||
out.Total = total
|
||||
return out, nil
|
||||
}
|
||||
@ -63,6 +63,10 @@ func (s *sUser) Login(ctx context.Context, in *model.UserLoginIn) (out *model.Us
|
||||
return nil, ecode.Fail.Sub("查找用户失败")
|
||||
}
|
||||
var userId int64
|
||||
v, err := dao.Stores.Ctx(ctx).Where(do.Stores{StoreCode: in.StoreCode}).Fields(dao.Stores.Columns().Id).Value()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("查找门店失败")
|
||||
}
|
||||
if !exist {
|
||||
// 用户不存在,创建新用户
|
||||
// 生成 username: qy_ + 8位随机字母数字
|
||||
@ -84,16 +88,17 @@ func (s *sUser) Login(ctx context.Context, in *model.UserLoginIn) (out *model.Us
|
||||
return nil, ecode.Fail.Sub("加密密码失败")
|
||||
}
|
||||
user := &entity.Users{
|
||||
WxOpenId: in.OpenId,
|
||||
Username: username,
|
||||
Nickname: username,
|
||||
PasswordHash: password,
|
||||
Avatar: "adssssssssssssss", // FIXME 后续替换成默认头像的 oss 链接
|
||||
FirstVisitAt: gtime.Now(),
|
||||
LastLoginAt: gtime.Now(),
|
||||
WxPopenId: utility.GenerateUserID("WX"),
|
||||
QqPopenId: utility.GenerateUserID("QQ"),
|
||||
RoleId: value[dao.Roles.Columns().Id].Int64(),
|
||||
WxOpenId: in.OpenId,
|
||||
Username: username,
|
||||
Nickname: username,
|
||||
PasswordHash: password,
|
||||
Avatar: "adssssssssssssss", // FIXME 后续替换成默认头像的 oss 链接
|
||||
FirstVisitAt: gtime.Now(),
|
||||
LastLoginAt: gtime.Now(),
|
||||
WxPopenId: utility.GenerateUserID("WX"),
|
||||
QqPopenId: utility.GenerateUserID("QQ"),
|
||||
RoleId: value[dao.Roles.Columns().Id].Int64(),
|
||||
LastLoginStoreId: v.Int64(),
|
||||
}
|
||||
result, err := dao.Users.Ctx(ctx).Insert(user)
|
||||
if err != nil {
|
||||
@ -110,7 +115,7 @@ func (s *sUser) Login(ctx context.Context, in *model.UserLoginIn) (out *model.Us
|
||||
return nil, ecode.Fail.Sub("查找用户失败")
|
||||
}
|
||||
userId = user.Id
|
||||
if _, err := dao.Users.Ctx(ctx).Where(do.Users{Id: userId}).Update(do.Users{LastLoginAt: gtime.Now()}); err != nil {
|
||||
if _, err := dao.Users.Ctx(ctx).Where(do.Users{Id: userId}).Update(do.Users{LastLoginAt: gtime.Now(), LastLoginStoreId: v.Int64()}); err != nil {
|
||||
return nil, ecode.Fail.Sub("更新登录时间失败")
|
||||
}
|
||||
}
|
||||
@ -266,15 +271,15 @@ func (s *sUser) UnBoundUrl(ctx context.Context, in *model.UserBoundUrlIn) (out *
|
||||
func (s *sUser) BoundInfo(ctx context.Context, in *model.UserBoundInfoIn) (out *model.UserBoundInfoOut, err error) {
|
||||
url, err := gamelife.GetGamelifeClient(ctx).GetBound(ctx, in.PopenId)
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("获取绑定信息失败")
|
||||
return nil, ecode.Fail.Sub("获取查询用户绑定信息 url 失败")
|
||||
}
|
||||
var result model.UserBoundResult
|
||||
resp, err := resty.New().R().SetResult(&result).Post(url)
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("获取绑定信息失败")
|
||||
return nil, ecode.Fail.Sub("调用游戏人生接口出现异常")
|
||||
}
|
||||
if resp.StatusCode() != 200 {
|
||||
return nil, ecode.Fail.Sub("获取绑定信息失败")
|
||||
return nil, ecode.Fail.Sub("调用游戏人生接口失败")
|
||||
}
|
||||
|
||||
return &model.UserBoundInfoOut{
|
||||
|
||||
@ -16,3 +16,48 @@ type StoreAdminLoginIn struct {
|
||||
type StoreAdminLoginOut struct {
|
||||
Token string
|
||||
}
|
||||
type StoreAdminListIn struct {
|
||||
Page int
|
||||
Size int
|
||||
StoreId int64
|
||||
}
|
||||
type StoreAdmin struct {
|
||||
Id int64 `json:"id" orm:"id" dc:"门店管理员ID"`
|
||||
StoreId int64 `json:"storeId" orm:"store_id" dc:"所属门店ID"`
|
||||
Username string `json:"username" orm:"username" dc:"用户名"`
|
||||
RealName string `json:"realName" orm:"real_name" dc:"真实姓名"`
|
||||
Phone string `json:"phone" orm:"phone" dc:"手机号"`
|
||||
Email string `json:"email" orm:"email" dc:"邮箱"`
|
||||
IsPrimary bool `json:"isPrimary" orm:"is_primary" dc:"是否为主账号(true=是,false=否)"`
|
||||
Status int `json:"status" orm:"status" dc:"状态:1=正常,2=禁用"`
|
||||
StoreRoleId int64 `json:"storeRoleId" orm:"store_role_id" dc:"门店角色ID"`
|
||||
StoreRoleName string `json:"storeRoleName" orm:"store_role_name" dc:"门店角色名称"`
|
||||
}
|
||||
|
||||
type StoreAdminListOut struct {
|
||||
List []StoreAdmin
|
||||
Total int
|
||||
}
|
||||
|
||||
type StoreAdminCreateIn struct {
|
||||
StoreId int64
|
||||
Username string
|
||||
Password string
|
||||
Phone string
|
||||
StoreRoleId int
|
||||
RealName string
|
||||
}
|
||||
type StoreAdminUpdateIn struct {
|
||||
StoreAdminId int64
|
||||
Phone string
|
||||
StoreRoleId int
|
||||
RealName string
|
||||
}
|
||||
type StoreAdminEditPasswordIn struct {
|
||||
StoreAdminId int64
|
||||
Password string
|
||||
Password2 string
|
||||
}
|
||||
type StoreAdminDeleteIn struct {
|
||||
StoreAdminId int64
|
||||
}
|
||||
|
||||
34
internal/model/storeDesktopSetting.go
Normal file
34
internal/model/storeDesktopSetting.go
Normal file
@ -0,0 +1,34 @@
|
||||
package model
|
||||
|
||||
import "github.com/gogf/gf/v2/frame/g"
|
||||
|
||||
type StoreDesktopSettings struct {
|
||||
g.Meta `orm:"table:store_desktop_settings"`
|
||||
Id int64 `orm:"id" json:"id"` // 主键ID
|
||||
StoreId int64 `orm:"store_id" json:"store_id"` // 门店ID
|
||||
BackgroundUrl string `orm:"background_url" json:"background_url"` // 桌面背景图片URL
|
||||
Resolution string `orm:"resolution" json:"resolution"` // 分辨率,例如1920x1080
|
||||
IsTopWidgetVisible bool `orm:"is_top_widget_visible" json:"is_top_widget_visible"` // 顶部组件是否显示:FALSE=隐藏,TRUE=显示
|
||||
IsRightWidgetVisible bool `orm:"is_right_widget_visible" json:"is_right_widget_visible"` // 右侧组件是否显示:FALSE=隐藏,TRUE=显示
|
||||
}
|
||||
|
||||
type StoreGetDesktopSettingIn struct {
|
||||
OperatorId int64
|
||||
OperatorRole string
|
||||
StoreId int64
|
||||
}
|
||||
type StoreGetDesktopSettingOut struct {
|
||||
StoreDesktopSettings
|
||||
}
|
||||
|
||||
type SaveDesktopSettingIn struct {
|
||||
Id int64
|
||||
StoreId int64
|
||||
BackgroundUrl string
|
||||
Resolution string
|
||||
IsTopWidgetVisible bool
|
||||
IsRightWidgetVisible bool
|
||||
}
|
||||
type SaveDesktopSettingOut struct {
|
||||
Id int64
|
||||
}
|
||||
44
internal/model/storeRole.go
Normal file
44
internal/model/storeRole.go
Normal file
@ -0,0 +1,44 @@
|
||||
package model
|
||||
|
||||
type StoreRoleCreateIn struct {
|
||||
StoreId int64
|
||||
Name string
|
||||
}
|
||||
|
||||
type StoreRoleCreateOut struct {
|
||||
Id int64 `json:"id"`
|
||||
}
|
||||
|
||||
type StoreRoleUpdateIn struct {
|
||||
Id int64
|
||||
StoreID int64
|
||||
Name string
|
||||
}
|
||||
|
||||
type StoreRoleUpdateOut struct {
|
||||
Success bool `json:"success"`
|
||||
}
|
||||
|
||||
type StoreRoleDeleteIn struct {
|
||||
Id int64
|
||||
}
|
||||
|
||||
type StoreRoleDeleteOut struct {
|
||||
Success bool `json:"success"`
|
||||
}
|
||||
type StoreRoleListIn struct {
|
||||
StoreId int64
|
||||
Page int
|
||||
Size int
|
||||
}
|
||||
|
||||
type StoreRoleListItem struct {
|
||||
Id int64 `json:"id"`
|
||||
StoreID int64 `json:"storeId"`
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
type StoreRoleListOut struct {
|
||||
Total int `json:"total"`
|
||||
List []StoreRoleListItem `json:"list"`
|
||||
}
|
||||
@ -3,6 +3,7 @@ package packed
|
||||
import (
|
||||
_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
|
||||
_ "github.com/gogf/gf/contrib/nosql/redis/v2"
|
||||
_ "server/utility/gamelife"
|
||||
_ "server/utility/myCasbin"
|
||||
_ "server/utility/rsa"
|
||||
_ "server/utility/snowid"
|
||||
|
||||
@ -17,6 +17,8 @@ type (
|
||||
Update(ctx context.Context, in *model.StoreUpdateIn) (out *model.UpdateOut, err error)
|
||||
Delete(ctx context.Context, in *model.StoreDeleteIn) (out *model.DeleteOut, err error)
|
||||
Info(ctx context.Context, in *model.StoreInfoIn) (out *model.StoreInfoOut, err error)
|
||||
GetDesktopSetting(ctx context.Context, in *model.StoreGetDesktopSettingIn) (*model.StoreGetDesktopSettingOut, error)
|
||||
SaveDesktopSetting(ctx context.Context, in *model.SaveDesktopSettingIn) (*model.SaveDesktopSettingOut, error)
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@ -14,6 +14,11 @@ type (
|
||||
IStoreAdmin interface {
|
||||
Login(ctx context.Context, in *model.StoreAdminLoginIn) (out *model.StoreAdminLoginOut, err error)
|
||||
Info(ctx context.Context, in *model.StoreAdminInfoIn) (out *model.StoreAdminInfoOut, err error)
|
||||
List(ctx context.Context, in *model.StoreAdminListIn) (out *model.StoreAdminListOut, err error)
|
||||
Create(ctx context.Context, in *model.StoreAdminCreateIn) (out *model.CreateOut, err error)
|
||||
Update(ctx context.Context, in *model.StoreAdminUpdateIn) (out *model.UpdateOut, err error)
|
||||
EditPassword(ctx context.Context, in *model.StoreAdminEditPasswordIn) (out *model.UpdateOut, err error)
|
||||
Delete(ctx context.Context, in *model.StoreAdminDeleteIn) (out *model.DeleteOut, err error)
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
35
internal/service/store_role.go
Normal file
35
internal/service/store_role.go
Normal file
@ -0,0 +1,35 @@
|
||||
// ================================================================================
|
||||
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||
// You can delete these comments if you wish manually maintain this interface file.
|
||||
// ================================================================================
|
||||
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"server/internal/model"
|
||||
)
|
||||
|
||||
type (
|
||||
IStoreRole interface {
|
||||
Create(ctx context.Context, in *model.StoreRoleCreateIn) (out *model.StoreRoleCreateOut, err error)
|
||||
Update(ctx context.Context, in *model.StoreRoleUpdateIn) (out *model.StoreRoleUpdateOut, err error)
|
||||
Delete(ctx context.Context, in *model.StoreRoleDeleteIn) (out *model.StoreRoleDeleteOut, err error)
|
||||
List(ctx context.Context, in *model.StoreRoleListIn) (out *model.StoreRoleListOut, err error)
|
||||
}
|
||||
)
|
||||
|
||||
var (
|
||||
localStoreRole IStoreRole
|
||||
)
|
||||
|
||||
func StoreRole() IStoreRole {
|
||||
if localStoreRole == nil {
|
||||
panic("implement not found for interface IStoreRole, forgot register?")
|
||||
}
|
||||
return localStoreRole
|
||||
}
|
||||
|
||||
func RegisterStoreRole(i IStoreRole) {
|
||||
localStoreRole = i
|
||||
}
|
||||
@ -37,3 +37,15 @@ wechat:
|
||||
rsa:
|
||||
publickey: "./manifest/config/public.pem"
|
||||
privatekey: "./manifest/config/private.pem"
|
||||
|
||||
#OSS配置
|
||||
oss:
|
||||
aliyun:
|
||||
bucket: "waipretty"
|
||||
key: "LTAI4FhJV8uQvgSzviJ5tgcP"
|
||||
secret: "Zc5E5CO4fqsXTIFsq4SHIaaXO4beJm"
|
||||
endpoint: "oss-us-east-1.aliyuncs.com"
|
||||
|
||||
gamelife:
|
||||
platId: "b1749611654"
|
||||
mode: "test"
|
||||
|
||||
@ -128,6 +128,7 @@ func (s *gamelifeClient) GetUserKeyIV(ctx context.Context, popenId string) (cach
|
||||
err = ecode.Fail.Sub("解密用户信息失败")
|
||||
return
|
||||
}
|
||||
|
||||
gamelifeCache := model.UserGamelifeCache{Aes: aesResult.key, IV: aesResult.iv, Token: result.key}
|
||||
// 将用户的 aeskey 和 iv 存储到缓存当中,用于后续请求数据加密, 固定时间 2 小时同时不同用户加上一个随机时间
|
||||
if err = g.Redis().SetEX(ctx, fmt.Sprintf(consts.GameLifeUserKey, popenId), gamelifeCache, int64(consts.GameLifeUserExpire+grand.Intn(1000))); err != nil {
|
||||
|
||||
@ -58,6 +58,9 @@ func init() {
|
||||
enforcer.AddPolicy("user", "/x/user/getPhoneCode", "POST", "获取验证码")
|
||||
enforcer.AddPolicy("user", "/x/user/bindPhone", "POST", "绑定手机号")
|
||||
enforcer.AddPolicy("user", "/x/user/info", "GET", "查询用户个人信息")
|
||||
enforcer.AddPolicy("user", "/x/user/boundInfo", "GET", "查询用户绑定信息")
|
||||
enforcer.AddPolicy("user", "/x/user/boundUrl", "GET", "获取用户绑定的URL")
|
||||
enforcer.AddPolicy("user", "/x/user/unBoundUrl", "GET", "获取用户取消绑定的URL")
|
||||
|
||||
// 反馈信息
|
||||
enforcer.AddPolicy("user", "/x/feedback", "GET", "获取反馈信息列表")
|
||||
@ -80,6 +83,21 @@ func init() {
|
||||
|
||||
// 任务
|
||||
enforcer.AddPolicy("user", "/x/task/getNonLoginTaskList", "GET", "获取任务列表(已登录)")
|
||||
|
||||
// 门店角色
|
||||
enforcer.AddPolicy("store", "/x/store/role", "GET", "获取门店角色列表")
|
||||
enforcer.AddPolicy("store", "/x/store/role", "POST", "添加门店角色")
|
||||
enforcer.AddPolicy("store", "/x/store/role", "PUT", "更新门店角色")
|
||||
enforcer.AddPolicy("store", "/x/store/role/*", "DELETE", "删除门店角色")
|
||||
|
||||
// 门店管理员(门店员工)
|
||||
enforcer.AddPolicy("store", "/x/store/admin/info", "GET", "获取门店管理员信息")
|
||||
enforcer.AddPolicy("store", "/x/store/admin", "GET", "获取门店管理员列表")
|
||||
enforcer.AddPolicy("store", "/x/store/admin", "POST", "添加门店管理员")
|
||||
enforcer.AddPolicy("store", "/x/store/admin", "PUT", "更新门店管理员")
|
||||
enforcer.AddPolicy("store", "/x/store/admin/*", "DELETE", "删除门店管理员")
|
||||
enforcer.AddPolicy("store", "/x/store/admin/password", "POST", "修改门店管理员密码")
|
||||
|
||||
}
|
||||
// 商户
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user