实现了门店员工、员工角色的接口开发
This commit is contained in:
@ -12,4 +12,9 @@ import (
|
|||||||
|
|
||||||
type IStoreAdminV1 interface {
|
type IStoreAdminV1 interface {
|
||||||
Info(ctx context.Context, req *v1.InfoReq) (res *v1.InfoRes, err error)
|
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"
|
import "github.com/gogf/gf/v2/frame/g"
|
||||||
|
|
||||||
type InfoReq struct {
|
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 {
|
type InfoRes struct {
|
||||||
Id int64 `json:"id"`
|
Id int64 `json:"id"`
|
||||||
Username string `json:"username"`
|
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/rewardType"
|
||||||
"server/internal/controller/role"
|
"server/internal/controller/role"
|
||||||
"server/internal/controller/store"
|
"server/internal/controller/store"
|
||||||
|
"server/internal/controller/storeAdmin"
|
||||||
|
"server/internal/controller/storeRole"
|
||||||
"server/internal/controller/task"
|
"server/internal/controller/task"
|
||||||
"server/internal/controller/upload"
|
"server/internal/controller/upload"
|
||||||
"server/internal/controller/user"
|
"server/internal/controller/user"
|
||||||
@ -46,6 +48,8 @@ var (
|
|||||||
role.NewV1(),
|
role.NewV1(),
|
||||||
merchant.NewV1(),
|
merchant.NewV1(),
|
||||||
store.NewV1(),
|
store.NewV1(),
|
||||||
|
storeRole.NewV1(),
|
||||||
|
storeAdmin.NewV1(),
|
||||||
rewardType.NewV1(),
|
rewardType.NewV1(),
|
||||||
feedback.NewV1(),
|
feedback.NewV1(),
|
||||||
user.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
|
||||||
|
}
|
||||||
@ -29,6 +29,7 @@ type RolesColumns struct {
|
|||||||
UpdatedAt string // 更新时间
|
UpdatedAt string // 更新时间
|
||||||
DeletedAt string // 软删除时间戳
|
DeletedAt string // 软删除时间戳
|
||||||
IsDeletable string // 是否可删除:0=不可删除,1=可删除
|
IsDeletable string // 是否可删除:0=不可删除,1=可删除
|
||||||
|
StoreId string // 门店ID
|
||||||
}
|
}
|
||||||
|
|
||||||
// rolesColumns holds the columns for the table roles.
|
// rolesColumns holds the columns for the table roles.
|
||||||
@ -42,6 +43,7 @@ var rolesColumns = RolesColumns{
|
|||||||
UpdatedAt: "updated_at",
|
UpdatedAt: "updated_at",
|
||||||
DeletedAt: "deleted_at",
|
DeletedAt: "deleted_at",
|
||||||
IsDeletable: "is_deletable",
|
IsDeletable: "is_deletable",
|
||||||
|
StoreId: "store_id",
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewRolesDao creates and returns a new DAO object for table data access.
|
// NewRolesDao creates and returns a new DAO object for table data access.
|
||||||
|
|||||||
@ -34,6 +34,7 @@ type StoreAdminsColumns struct {
|
|||||||
UpdatedAt string // 更新时间
|
UpdatedAt string // 更新时间
|
||||||
DeletedAt string // 软删除时间戳
|
DeletedAt string // 软删除时间戳
|
||||||
RoleId string // 角色ID
|
RoleId string // 角色ID
|
||||||
|
StoreRoleId string // 门店角色ID
|
||||||
}
|
}
|
||||||
|
|
||||||
// storeAdminsColumns holds the columns for the table store_admins.
|
// storeAdminsColumns holds the columns for the table store_admins.
|
||||||
@ -52,6 +53,7 @@ var storeAdminsColumns = StoreAdminsColumns{
|
|||||||
UpdatedAt: "updated_at",
|
UpdatedAt: "updated_at",
|
||||||
DeletedAt: "deleted_at",
|
DeletedAt: "deleted_at",
|
||||||
RoleId: "role_id",
|
RoleId: "role_id",
|
||||||
|
StoreRoleId: "store_role_id",
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewStoreAdminsDao creates and returns a new DAO object for table data access.
|
// NewStoreAdminsDao creates and returns a new DAO object for table data access.
|
||||||
|
|||||||
89
internal/dao/internal/store_desktop_settings.go
Normal file
89
internal/dao/internal/store_desktop_settings.go
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
// ==========================================================================
|
||||||
|
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||||
|
// ==========================================================================
|
||||||
|
|
||||||
|
package internal
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/gogf/gf/v2/database/gdb"
|
||||||
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 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.
|
||||||
|
}
|
||||||
|
|
||||||
|
// StoreDesktopSettingsColumns defines and stores column names for the table store_desktop_settings.
|
||||||
|
type StoreDesktopSettingsColumns struct {
|
||||||
|
Id string // 主键ID
|
||||||
|
StoreId string // 门店ID
|
||||||
|
BackgroundUrl string // 桌面背景图片URL
|
||||||
|
Resolution string // 分辨率,例如1920x1080
|
||||||
|
IsTopWidgetVisible string // 顶部组件是否显示:FALSE=隐藏,TRUE=显示
|
||||||
|
IsRightWidgetVisible string // 右侧组件是否显示:FALSE=隐藏,TRUE=显示
|
||||||
|
CreatedAt string // 创建时间
|
||||||
|
UpdatedAt string // 更新时间
|
||||||
|
DeletedAt string // 软删除时间戳
|
||||||
|
}
|
||||||
|
|
||||||
|
// storeDesktopSettingsColumns holds the columns for the table store_desktop_settings.
|
||||||
|
var storeDesktopSettingsColumns = StoreDesktopSettingsColumns{
|
||||||
|
Id: "id",
|
||||||
|
StoreId: "store_id",
|
||||||
|
BackgroundUrl: "background_url",
|
||||||
|
Resolution: "resolution",
|
||||||
|
IsTopWidgetVisible: "is_top_widget_visible",
|
||||||
|
IsRightWidgetVisible: "is_right_widget_visible",
|
||||||
|
CreatedAt: "created_at",
|
||||||
|
UpdatedAt: "updated_at",
|
||||||
|
DeletedAt: "deleted_at",
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewStoreDesktopSettingsDao creates and returns a new DAO object for table data access.
|
||||||
|
func NewStoreDesktopSettingsDao() *StoreDesktopSettingsDao {
|
||||||
|
return &StoreDesktopSettingsDao{
|
||||||
|
group: "default",
|
||||||
|
table: "store_desktop_settings",
|
||||||
|
columns: storeDesktopSettingsColumns,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// DB retrieves and returns the underlying raw database management object of the current DAO.
|
||||||
|
func (dao *StoreDesktopSettingsDao) DB() gdb.DB {
|
||||||
|
return g.DB(dao.group)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Table returns the table name of the current DAO.
|
||||||
|
func (dao *StoreDesktopSettingsDao) Table() string {
|
||||||
|
return dao.table
|
||||||
|
}
|
||||||
|
|
||||||
|
// Columns returns all column names of the current DAO.
|
||||||
|
func (dao *StoreDesktopSettingsDao) Columns() StoreDesktopSettingsColumns {
|
||||||
|
return dao.columns
|
||||||
|
}
|
||||||
|
|
||||||
|
// Group returns the database configuration group name of the current DAO.
|
||||||
|
func (dao *StoreDesktopSettingsDao) Group() string {
|
||||||
|
return dao.group
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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 {
|
||||||
|
return dao.DB().Model(dao.table).Safe().Ctx(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transaction wraps the transaction logic using function f.
|
||||||
|
// It rolls back the transaction and returns the error if function f returns a non-nil error.
|
||||||
|
// It commits the transaction and returns nil if function f returns nil.
|
||||||
|
//
|
||||||
|
// Note: Do not commit or roll back the transaction in function f,
|
||||||
|
// as it is automatically handled by this function.
|
||||||
|
func (dao *StoreDesktopSettingsDao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) {
|
||||||
|
return dao.Ctx(ctx).Transaction(ctx, f)
|
||||||
|
}
|
||||||
83
internal/dao/internal/store_roles.go
Normal file
83
internal/dao/internal/store_roles.go
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
// ==========================================================================
|
||||||
|
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||||
|
// ==========================================================================
|
||||||
|
|
||||||
|
package internal
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/gogf/gf/v2/database/gdb"
|
||||||
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 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.
|
||||||
|
}
|
||||||
|
|
||||||
|
// StoreRolesColumns defines and stores column names for the table store_roles.
|
||||||
|
type StoreRolesColumns struct {
|
||||||
|
Id string // 门店角色ID
|
||||||
|
StoreId string // 所属门店ID
|
||||||
|
Name string // 门店角色名称
|
||||||
|
CreatedAt string // 创建时间
|
||||||
|
UpdatedAt string // 更新时间
|
||||||
|
DeletedAt string // 软删除时间戳
|
||||||
|
}
|
||||||
|
|
||||||
|
// storeRolesColumns holds the columns for the table store_roles.
|
||||||
|
var storeRolesColumns = StoreRolesColumns{
|
||||||
|
Id: "id",
|
||||||
|
StoreId: "store_id",
|
||||||
|
Name: "name",
|
||||||
|
CreatedAt: "created_at",
|
||||||
|
UpdatedAt: "updated_at",
|
||||||
|
DeletedAt: "deleted_at",
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewStoreRolesDao creates and returns a new DAO object for table data access.
|
||||||
|
func NewStoreRolesDao() *StoreRolesDao {
|
||||||
|
return &StoreRolesDao{
|
||||||
|
group: "default",
|
||||||
|
table: "store_roles",
|
||||||
|
columns: storeRolesColumns,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// DB retrieves and returns the underlying raw database management object of the current DAO.
|
||||||
|
func (dao *StoreRolesDao) DB() gdb.DB {
|
||||||
|
return g.DB(dao.group)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Table returns the table name of the current DAO.
|
||||||
|
func (dao *StoreRolesDao) Table() string {
|
||||||
|
return dao.table
|
||||||
|
}
|
||||||
|
|
||||||
|
// Columns returns all column names of the current DAO.
|
||||||
|
func (dao *StoreRolesDao) Columns() StoreRolesColumns {
|
||||||
|
return dao.columns
|
||||||
|
}
|
||||||
|
|
||||||
|
// Group returns the database configuration group name of the current DAO.
|
||||||
|
func (dao *StoreRolesDao) Group() string {
|
||||||
|
return dao.group
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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 {
|
||||||
|
return dao.DB().Model(dao.table).Safe().Ctx(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transaction wraps the transaction logic using function f.
|
||||||
|
// It rolls back the transaction and returns the error if function f returns a non-nil error.
|
||||||
|
// It commits the transaction and returns nil if function f returns nil.
|
||||||
|
//
|
||||||
|
// Note: Do not commit or roll back the transaction in function f,
|
||||||
|
// as it is automatically handled by this function.
|
||||||
|
func (dao *StoreRolesDao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) {
|
||||||
|
return dao.Ctx(ctx).Transaction(ctx, f)
|
||||||
|
}
|
||||||
27
internal/dao/store_desktop_settings.go
Normal file
27
internal/dao/store_desktop_settings.go
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
// =================================================================================
|
||||||
|
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||||
|
// =================================================================================
|
||||||
|
|
||||||
|
package dao
|
||||||
|
|
||||||
|
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 {
|
||||||
|
internalStoreDesktopSettingsDao
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
// StoreDesktopSettings is a globally accessible object for table store_desktop_settings operations.
|
||||||
|
StoreDesktopSettings = storeDesktopSettingsDao{
|
||||||
|
internal.NewStoreDesktopSettingsDao(),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// Add your custom methods and functionality below.
|
||||||
27
internal/dao/store_roles.go
Normal file
27
internal/dao/store_roles.go
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
// =================================================================================
|
||||||
|
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||||
|
// =================================================================================
|
||||||
|
|
||||||
|
package dao
|
||||||
|
|
||||||
|
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 {
|
||||||
|
internalStoreRolesDao
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
// StoreRoles is a globally accessible object for table store_roles operations.
|
||||||
|
StoreRoles = storeRolesDao{
|
||||||
|
internal.NewStoreRolesDao(),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// Add your custom methods and functionality below.
|
||||||
@ -15,6 +15,7 @@ import (
|
|||||||
_ "server/internal/logic/role"
|
_ "server/internal/logic/role"
|
||||||
_ "server/internal/logic/store"
|
_ "server/internal/logic/store"
|
||||||
_ "server/internal/logic/storeAdmin"
|
_ "server/internal/logic/storeAdmin"
|
||||||
|
_ "server/internal/logic/storeRole"
|
||||||
_ "server/internal/logic/task"
|
_ "server/internal/logic/task"
|
||||||
_ "server/internal/logic/upload"
|
_ "server/internal/logic/upload"
|
||||||
_ "server/internal/logic/user"
|
_ "server/internal/logic/user"
|
||||||
|
|||||||
@ -5,8 +5,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"github.com/gogf/gf/v2/database/gdb"
|
"github.com/gogf/gf/v2/database/gdb"
|
||||||
"github.com/gogf/gf/v2/frame/g"
|
"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"
|
"github.com/gogf/gf/v2/util/grand"
|
||||||
"server/internal/consts"
|
"server/internal/consts"
|
||||||
"server/internal/dao"
|
"server/internal/dao"
|
||||||
@ -80,13 +78,6 @@ func (s *sMerchantAdmin) Login(ctx context.Context, in *model.MerchantLoginIn) (
|
|||||||
out = &model.MerchantLoginOut{
|
out = &model.MerchantLoginOut{
|
||||||
Token: token,
|
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
|
return
|
||||||
}
|
}
|
||||||
func (s *sMerchantAdmin) Info(ctx context.Context, in *model.MerchantAdminInfoIn) (out *model.MerchantAdminInfoOut, err error) {
|
func (s *sMerchantAdmin) Info(ctx context.Context, in *model.MerchantAdminInfoIn) (out *model.MerchantAdminInfoOut, err error) {
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package store
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"github.com/gogf/gf/v2/database/gdb"
|
"github.com/gogf/gf/v2/database/gdb"
|
||||||
|
"github.com/gogf/gf/v2/errors/gerror"
|
||||||
"server/internal/consts"
|
"server/internal/consts"
|
||||||
"server/internal/dao"
|
"server/internal/dao"
|
||||||
"server/internal/model"
|
"server/internal/model"
|
||||||
@ -152,3 +153,77 @@ func (s *sStore) Info(ctx context.Context, in *model.StoreInfoIn) (out *model.St
|
|||||||
// TODO 获取门店信息等相关信息
|
// TODO 获取门店信息等相关信息
|
||||||
return
|
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 (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"server/internal/consts"
|
"server/internal/consts"
|
||||||
"server/internal/dao"
|
"server/internal/dao"
|
||||||
"server/internal/model"
|
"server/internal/model"
|
||||||
@ -92,3 +93,132 @@ func (s *sStoreAdmin) Info(ctx context.Context, in *model.StoreAdminInfoIn) (out
|
|||||||
}
|
}
|
||||||
return
|
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("查找用户失败")
|
return nil, ecode.Fail.Sub("查找用户失败")
|
||||||
}
|
}
|
||||||
var userId int64
|
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 {
|
if !exist {
|
||||||
// 用户不存在,创建新用户
|
// 用户不存在,创建新用户
|
||||||
// 生成 username: qy_ + 8位随机字母数字
|
// 生成 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("加密密码失败")
|
return nil, ecode.Fail.Sub("加密密码失败")
|
||||||
}
|
}
|
||||||
user := &entity.Users{
|
user := &entity.Users{
|
||||||
WxOpenId: in.OpenId,
|
WxOpenId: in.OpenId,
|
||||||
Username: username,
|
Username: username,
|
||||||
Nickname: username,
|
Nickname: username,
|
||||||
PasswordHash: password,
|
PasswordHash: password,
|
||||||
Avatar: "adssssssssssssss", // FIXME 后续替换成默认头像的 oss 链接
|
Avatar: "adssssssssssssss", // FIXME 后续替换成默认头像的 oss 链接
|
||||||
FirstVisitAt: gtime.Now(),
|
FirstVisitAt: gtime.Now(),
|
||||||
LastLoginAt: gtime.Now(),
|
LastLoginAt: gtime.Now(),
|
||||||
WxPopenId: utility.GenerateUserID("WX"),
|
WxPopenId: utility.GenerateUserID("WX"),
|
||||||
QqPopenId: utility.GenerateUserID("QQ"),
|
QqPopenId: utility.GenerateUserID("QQ"),
|
||||||
RoleId: value[dao.Roles.Columns().Id].Int64(),
|
RoleId: value[dao.Roles.Columns().Id].Int64(),
|
||||||
|
LastLoginStoreId: v.Int64(),
|
||||||
}
|
}
|
||||||
result, err := dao.Users.Ctx(ctx).Insert(user)
|
result, err := dao.Users.Ctx(ctx).Insert(user)
|
||||||
if err != nil {
|
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("查找用户失败")
|
return nil, ecode.Fail.Sub("查找用户失败")
|
||||||
}
|
}
|
||||||
userId = user.Id
|
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("更新登录时间失败")
|
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) {
|
func (s *sUser) BoundInfo(ctx context.Context, in *model.UserBoundInfoIn) (out *model.UserBoundInfoOut, err error) {
|
||||||
url, err := gamelife.GetGamelifeClient(ctx).GetBound(ctx, in.PopenId)
|
url, err := gamelife.GetGamelifeClient(ctx).GetBound(ctx, in.PopenId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, ecode.Fail.Sub("获取绑定信息失败")
|
return nil, ecode.Fail.Sub("获取查询用户绑定信息 url 失败")
|
||||||
}
|
}
|
||||||
var result model.UserBoundResult
|
var result model.UserBoundResult
|
||||||
resp, err := resty.New().R().SetResult(&result).Post(url)
|
resp, err := resty.New().R().SetResult(&result).Post(url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, ecode.Fail.Sub("获取绑定信息失败")
|
return nil, ecode.Fail.Sub("调用游戏人生接口出现异常")
|
||||||
}
|
}
|
||||||
if resp.StatusCode() != 200 {
|
if resp.StatusCode() != 200 {
|
||||||
return nil, ecode.Fail.Sub("获取绑定信息失败")
|
return nil, ecode.Fail.Sub("调用游戏人生接口失败")
|
||||||
}
|
}
|
||||||
|
|
||||||
return &model.UserBoundInfoOut{
|
return &model.UserBoundInfoOut{
|
||||||
|
|||||||
@ -21,4 +21,5 @@ type Roles struct {
|
|||||||
UpdatedAt *gtime.Time // 更新时间
|
UpdatedAt *gtime.Time // 更新时间
|
||||||
DeletedAt *gtime.Time // 软删除时间戳
|
DeletedAt *gtime.Time // 软删除时间戳
|
||||||
IsDeletable interface{} // 是否可删除:0=不可删除,1=可删除
|
IsDeletable interface{} // 是否可删除:0=不可删除,1=可删除
|
||||||
|
StoreId interface{} // 门店ID
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,4 +26,5 @@ type StoreAdmins struct {
|
|||||||
UpdatedAt *gtime.Time // 更新时间
|
UpdatedAt *gtime.Time // 更新时间
|
||||||
DeletedAt *gtime.Time // 软删除时间戳
|
DeletedAt *gtime.Time // 软删除时间戳
|
||||||
RoleId interface{} // 角色ID
|
RoleId interface{} // 角色ID
|
||||||
|
StoreRoleId interface{} // 门店角色ID
|
||||||
}
|
}
|
||||||
|
|||||||
24
internal/model/do/store_desktop_settings.go
Normal file
24
internal/model/do/store_desktop_settings.go
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
// =================================================================================
|
||||||
|
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||||
|
// =================================================================================
|
||||||
|
|
||||||
|
package do
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
|
"github.com/gogf/gf/v2/os/gtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
// StoreDesktopSettings is the golang structure of table store_desktop_settings for DAO operations like Where/Data.
|
||||||
|
type StoreDesktopSettings struct {
|
||||||
|
g.Meta `orm:"table:store_desktop_settings, do:true"`
|
||||||
|
Id interface{} // 主键ID
|
||||||
|
StoreId interface{} // 门店ID
|
||||||
|
BackgroundUrl interface{} // 桌面背景图片URL
|
||||||
|
Resolution interface{} // 分辨率,例如1920x1080
|
||||||
|
IsTopWidgetVisible interface{} // 顶部组件是否显示:FALSE=隐藏,TRUE=显示
|
||||||
|
IsRightWidgetVisible interface{} // 右侧组件是否显示:FALSE=隐藏,TRUE=显示
|
||||||
|
CreatedAt *gtime.Time // 创建时间
|
||||||
|
UpdatedAt *gtime.Time // 更新时间
|
||||||
|
DeletedAt *gtime.Time // 软删除时间戳
|
||||||
|
}
|
||||||
21
internal/model/do/store_roles.go
Normal file
21
internal/model/do/store_roles.go
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// =================================================================================
|
||||||
|
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||||
|
// =================================================================================
|
||||||
|
|
||||||
|
package do
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
|
"github.com/gogf/gf/v2/os/gtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
// StoreRoles is the golang structure of table store_roles for DAO operations like Where/Data.
|
||||||
|
type StoreRoles struct {
|
||||||
|
g.Meta `orm:"table:store_roles, do:true"`
|
||||||
|
Id interface{} // 门店角色ID
|
||||||
|
StoreId interface{} // 所属门店ID
|
||||||
|
Name interface{} // 门店角色名称
|
||||||
|
CreatedAt *gtime.Time // 创建时间
|
||||||
|
UpdatedAt *gtime.Time // 更新时间
|
||||||
|
DeletedAt *gtime.Time // 软删除时间戳
|
||||||
|
}
|
||||||
@ -19,4 +19,5 @@ type Roles struct {
|
|||||||
UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:"更新时间"` // 更新时间
|
UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:"更新时间"` // 更新时间
|
||||||
DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:"软删除时间戳"` // 软删除时间戳
|
DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:"软删除时间戳"` // 软删除时间戳
|
||||||
IsDeletable bool `json:"isDeletable" orm:"is_deletable" description:"是否可删除:0=不可删除,1=可删除"` // 是否可删除:0=不可删除,1=可删除
|
IsDeletable bool `json:"isDeletable" orm:"is_deletable" description:"是否可删除:0=不可删除,1=可删除"` // 是否可删除:0=不可删除,1=可删除
|
||||||
|
StoreId int64 `json:"storeId" orm:"store_id" description:"门店ID"` // 门店ID
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,4 +24,5 @@ type StoreAdmins struct {
|
|||||||
UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:"更新时间"` // 更新时间
|
UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:"更新时间"` // 更新时间
|
||||||
DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:"软删除时间戳"` // 软删除时间戳
|
DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:"软删除时间戳"` // 软删除时间戳
|
||||||
RoleId int64 `json:"roleId" orm:"role_id" description:"角色ID"` // 角色ID
|
RoleId int64 `json:"roleId" orm:"role_id" description:"角色ID"` // 角色ID
|
||||||
|
StoreRoleId int64 `json:"storeRoleId" orm:"store_role_id" description:"门店角色ID"` // 门店角色ID
|
||||||
}
|
}
|
||||||
|
|||||||
22
internal/model/entity/store_desktop_settings.go
Normal file
22
internal/model/entity/store_desktop_settings.go
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
// =================================================================================
|
||||||
|
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||||
|
// =================================================================================
|
||||||
|
|
||||||
|
package entity
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gogf/gf/v2/os/gtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
// StoreDesktopSettings is the golang structure for table store_desktop_settings.
|
||||||
|
type StoreDesktopSettings struct {
|
||||||
|
Id int64 `json:"id" orm:"id" description:"主键ID"` // 主键ID
|
||||||
|
StoreId int64 `json:"storeId" orm:"store_id" description:"门店ID"` // 门店ID
|
||||||
|
BackgroundUrl string `json:"backgroundUrl" orm:"background_url" description:"桌面背景图片URL"` // 桌面背景图片URL
|
||||||
|
Resolution string `json:"resolution" orm:"resolution" description:"分辨率,例如1920x1080"` // 分辨率,例如1920x1080
|
||||||
|
IsTopWidgetVisible int `json:"isTopWidgetVisible" orm:"is_top_widget_visible" description:"顶部组件是否显示:FALSE=隐藏,TRUE=显示"` // 顶部组件是否显示:FALSE=隐藏,TRUE=显示
|
||||||
|
IsRightWidgetVisible int `json:"isRightWidgetVisible" orm:"is_right_widget_visible" description:"右侧组件是否显示:FALSE=隐藏,TRUE=显示"` // 右侧组件是否显示:FALSE=隐藏,TRUE=显示
|
||||||
|
CreatedAt *gtime.Time `json:"createdAt" orm:"created_at" description:"创建时间"` // 创建时间
|
||||||
|
UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:"更新时间"` // 更新时间
|
||||||
|
DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:"软删除时间戳"` // 软删除时间戳
|
||||||
|
}
|
||||||
19
internal/model/entity/store_roles.go
Normal file
19
internal/model/entity/store_roles.go
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// =================================================================================
|
||||||
|
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||||
|
// =================================================================================
|
||||||
|
|
||||||
|
package entity
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gogf/gf/v2/os/gtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
// StoreRoles is the golang structure for table store_roles.
|
||||||
|
type StoreRoles struct {
|
||||||
|
Id int64 `json:"id" orm:"id" description:"门店角色ID"` // 门店角色ID
|
||||||
|
StoreId int64 `json:"storeId" orm:"store_id" description:"所属门店ID"` // 所属门店ID
|
||||||
|
Name string `json:"name" orm:"name" description:"门店角色名称"` // 门店角色名称
|
||||||
|
CreatedAt *gtime.Time `json:"createdAt" orm:"created_at" description:"创建时间"` // 创建时间
|
||||||
|
UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:"更新时间"` // 更新时间
|
||||||
|
DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:"软删除时间戳"` // 软删除时间戳
|
||||||
|
}
|
||||||
@ -16,3 +16,48 @@ type StoreAdminLoginIn struct {
|
|||||||
type StoreAdminLoginOut struct {
|
type StoreAdminLoginOut struct {
|
||||||
Token string
|
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 (
|
import (
|
||||||
_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
|
_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
|
||||||
_ "github.com/gogf/gf/contrib/nosql/redis/v2"
|
_ "github.com/gogf/gf/contrib/nosql/redis/v2"
|
||||||
|
_ "server/utility/gamelife"
|
||||||
_ "server/utility/myCasbin"
|
_ "server/utility/myCasbin"
|
||||||
_ "server/utility/rsa"
|
_ "server/utility/rsa"
|
||||||
_ "server/utility/snowid"
|
_ "server/utility/snowid"
|
||||||
|
|||||||
@ -17,6 +17,8 @@ type (
|
|||||||
Update(ctx context.Context, in *model.StoreUpdateIn) (out *model.UpdateOut, err error)
|
Update(ctx context.Context, in *model.StoreUpdateIn) (out *model.UpdateOut, err error)
|
||||||
Delete(ctx context.Context, in *model.StoreDeleteIn) (out *model.DeleteOut, 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)
|
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 {
|
IStoreAdmin interface {
|
||||||
Login(ctx context.Context, in *model.StoreAdminLoginIn) (out *model.StoreAdminLoginOut, err error)
|
Login(ctx context.Context, in *model.StoreAdminLoginIn) (out *model.StoreAdminLoginOut, err error)
|
||||||
Info(ctx context.Context, in *model.StoreAdminInfoIn) (out *model.StoreAdminInfoOut, 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
|
||||||
|
}
|
||||||
@ -36,4 +36,16 @@ wechat:
|
|||||||
|
|
||||||
rsa:
|
rsa:
|
||||||
publickey: "./manifest/config/public.pem"
|
publickey: "./manifest/config/public.pem"
|
||||||
privatekey: "./manifest/config/private.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("解密用户信息失败")
|
err = ecode.Fail.Sub("解密用户信息失败")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
gamelifeCache := model.UserGamelifeCache{Aes: aesResult.key, IV: aesResult.iv, Token: result.key}
|
gamelifeCache := model.UserGamelifeCache{Aes: aesResult.key, IV: aesResult.iv, Token: result.key}
|
||||||
// 将用户的 aeskey 和 iv 存储到缓存当中,用于后续请求数据加密, 固定时间 2 小时同时不同用户加上一个随机时间
|
// 将用户的 aeskey 和 iv 存储到缓存当中,用于后续请求数据加密, 固定时间 2 小时同时不同用户加上一个随机时间
|
||||||
if err = g.Redis().SetEX(ctx, fmt.Sprintf(consts.GameLifeUserKey, popenId), gamelifeCache, int64(consts.GameLifeUserExpire+grand.Intn(1000))); err != nil {
|
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/getPhoneCode", "POST", "获取验证码")
|
||||||
enforcer.AddPolicy("user", "/x/user/bindPhone", "POST", "绑定手机号")
|
enforcer.AddPolicy("user", "/x/user/bindPhone", "POST", "绑定手机号")
|
||||||
enforcer.AddPolicy("user", "/x/user/info", "GET", "查询用户个人信息")
|
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", "获取反馈信息列表")
|
enforcer.AddPolicy("user", "/x/feedback", "GET", "获取反馈信息列表")
|
||||||
@ -80,6 +83,21 @@ func init() {
|
|||||||
|
|
||||||
// 任务
|
// 任务
|
||||||
enforcer.AddPolicy("user", "/x/task/getNonLoginTaskList", "GET", "获取任务列表(已登录)")
|
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