调整表结构

This commit is contained in:
2025-06-05 14:58:58 +08:00
parent fdf5152bd2
commit 77067adf33
83 changed files with 137 additions and 2662 deletions

View File

@ -6,7 +6,6 @@ package logic
import (
_ "server/internal/logic/admin"
_ "server/internal/logic/menu"
_ "server/internal/logic/merchant"
_ "server/internal/logic/merchantAdmin"
_ "server/internal/logic/rewardType"

View File

@ -1,189 +0,0 @@
package menu
import (
"context"
"server/internal/dao"
"server/internal/model"
"server/internal/model/do"
"server/internal/model/entity"
"server/internal/service"
"server/utility/ecode"
)
type sMenu struct {
}
func New() service.IMenu {
return &sMenu{}
}
func init() {
service.RegisterMenu(New())
}
// Create 创建菜单
func (s *sMenu) Create(ctx context.Context, in *model.MenuCreateInput) (out *model.CreateOut, err error) {
// 检查菜单名称是否已存在
exist, err := dao.Menus.Ctx(ctx).Where(do.Menus{Name: in.Name}).Exist()
if err != nil {
return nil, ecode.Fail.Sub("插入菜单查重出现异常")
}
if exist {
return nil, ecode.Params.Sub("菜单名称已存在")
}
id, err := dao.Menus.Ctx(ctx).InsertAndGetId(do.Menus{
ParentId: in.ParentId,
Name: in.Name,
Path: in.Path,
Component: in.Component,
Type: in.Type,
Icon: in.Icon,
Sort: in.Sort,
Hidden: in.Hidden,
Status: in.Status,
})
if err != nil {
return nil, err
}
return &model.CreateOut{Id: id}, nil
}
// Delete 删除菜单
func (s *sMenu) Delete(ctx context.Context, in *model.MenuDeleteInput) (out *model.DeleteOut, err error) {
// 检查是否存在子菜单
count, err := dao.Menus.Ctx(ctx).Where(do.Menus{ParentId: in.Id}).Count()
if err != nil {
return nil, err
}
if count > 0 {
return nil, ecode.Params.Sub("存在子菜单,请先删除子菜单")
}
// 删除菜单
_, err = dao.Menus.Ctx(ctx).Where(do.Menus{Id: in.Id}).Delete()
if err != nil {
return nil, err
}
return &model.DeleteOut{}, nil
}
// BatchDelete 批量删除菜单
func (s *sMenu) BatchDelete(ctx context.Context, in *model.BatchDeleteIn) (out *model.BatchDeleteOut, err error) {
// 检查是否存在子菜单
var menus []*entity.Menus
err = dao.Menus.Ctx(ctx).WhereIn(dao.Menus.Columns().ParentId, in.Ids).Scan(&menus)
if err != nil {
return nil, err
}
// 获取有子菜单的ID
hasChildrenIds := make(map[int]bool)
for _, menu := range menus {
hasChildrenIds[int(menu.ParentId)] = true
}
// 找出可以删除的ID
var deletableIds []int
var undeletableIds []int
for _, id := range in.Ids {
if hasChildrenIds[id] {
undeletableIds = append(undeletableIds, id)
} else {
deletableIds = append(deletableIds, id)
}
}
// 如果有可删除的ID执行删除操作
if len(deletableIds) > 0 {
_, err = dao.Menus.Ctx(ctx).WhereIn(dao.Menus.Columns().Id, deletableIds).Delete()
if err != nil {
return nil, err
}
}
return &model.BatchDeleteOut{
Ids: undeletableIds,
}, nil
}
// Update 更新菜单
func (s *sMenu) Update(ctx context.Context, in *model.MenuUpdateInput) (out *model.UpdateOut, err error) {
// 检查菜单是否存在
exist, err := dao.Menus.Ctx(ctx).WherePri(in.Id).Exist()
if err != nil {
return nil, ecode.Fail.Sub("查询菜单失败")
}
if !exist {
return nil, ecode.Params.Sub("菜单不存在")
}
exist, err = dao.Menus.Ctx(ctx).Where(do.Menus{Name: in.Name}).WhereNot(dao.Menus.Columns().Id, in.Id).Exist()
if err != nil {
return nil, ecode.Fail.Sub("查询菜单失败")
}
if exist {
return nil, ecode.Params.Sub("菜单名称已存在")
}
// 更新菜单
_, err = dao.Menus.Ctx(ctx).Where(do.Menus{
Id: in.Id,
}).Update(do.Menus{
ParentId: in.ParentId,
Name: in.Name,
Path: in.Path,
Component: in.Component,
Type: in.Type,
Icon: in.Icon,
Sort: in.Sort,
Hidden: in.Hidden,
Status: in.Status,
})
if err != nil {
return nil, err
}
return &model.UpdateOut{}, nil
}
// List 获取菜单列表
func (s *sMenu) List(ctx context.Context, in *model.MenuListInput) (out *model.MenuListOutput, err error) {
m := dao.Menus.Ctx(ctx)
// 构建查询条件
if in.ParentId > 0 {
m = m.Where(do.Menus{
ParentId: in.ParentId,
})
}
if in.Name != "" {
m = m.WhereLike(dao.Menus.Columns().Name, "%"+in.Name+"%")
}
if in.Path != "" {
m = m.WhereLike(dao.Menus.Columns().Path, "%"+in.Path+"%")
}
if in.Type > 0 {
m = m.Where(do.Menus{
Type: in.Type,
})
}
if in.Status > 0 {
m = m.Where(do.Menus{
Status: in.Status,
})
}
// 分页查询
list := make([]model.Menu, 0)
var total int
err = m.Page(in.Page, in.Size).OrderAsc(dao.Menus.Columns().Sort).ScanAndCount(&list, &total, false)
if err != nil {
return nil, err
}
return &model.MenuListOutput{
List: list,
Total: total,
}, nil
}

View File

@ -17,6 +17,7 @@ import (
"server/utility/ecode"
utility "server/utility/encrypt"
"server/utility/jwt"
"server/utility/snowid"
)
type sMerchantAdmin struct {
@ -150,8 +151,13 @@ func (s *sMerchantAdmin) Register(ctx context.Context, in *model.MerchantAdminRe
}
if err = dao.MerchantAdmins.Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
// 插入商户数据
generateCode, err := snowid.GetSnowClient().GenerateMerchantCode()
if err != nil {
return ecode.Fail.Sub("生成商户编号失败")
}
id, err := tx.Model(dao.Merchants.Table()).Data(do.Merchants{
Name: fmt.Sprintf("%s的商铺", in.Username),
MerchantCode: generateCode,
Name: fmt.Sprintf("%s代理", in.Username),
CreatedByType: consts.MerchantRegisterByAdmin,
Status: consts.MerchantDisabledStatus,
AuditStatus: consts.MerchantPendingReview,

View File

@ -9,6 +9,7 @@ import (
"server/internal/model/do"
"server/internal/service"
"server/utility/ecode"
"server/utility/snowid"
)
type sStore struct {
@ -39,21 +40,29 @@ func (s *sStore) Create(ctx context.Context, in *model.StoreCreateIn) (out *mode
// 2. 使用事务处理数据插入
if err = dao.Stores.Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
// 2.1 根据商户 id 获取所属的商户
value, err := dao.MerchantAdmins.Ctx(ctx).WherePri(in.MerchantAdminId).Fields(dao.MerchantAdmins.Columns().MerchantId).Value()
value, err := dao.MerchantAdmins.Ctx(ctx).WherePri(in.OperatorId).Fields(dao.MerchantAdmins.Columns().MerchantId).Value()
if err != nil {
return ecode.Fail.Sub("获取商户ID出现异常")
}
// 2,2 生成门店的相关信息
code, err := snowid.GetSnowClient().GenerateStoreCode()
if err != nil {
return ecode.Fail.Sub("生成门店ID出现异常")
}
// 2.3 插入门店数据
id, err := tx.Model(dao.Stores.Table()).Data(do.Stores{
MerchantId: value.Int64(),
MerchantId: value.Int(),
StoreCode: code,
Name: in.Name,
Address: in.Address,
ContactName: in.ContactName,
ContactPhone: in.ContactPhone,
}).InsertAndGetId()
if err != nil {
return ecode.Fail.Sub("新增门店出现异常")
}
//2.4 生成门店主管理账号
// TODO 生成门店主管理账号,密码通知方式
// 2.5 插入门店管理员数据
_, err = tx.Model(dao.StoreAdmins.Table()).Data(do.StoreAdmins{
@ -62,11 +71,11 @@ func (s *sStore) Create(ctx context.Context, in *model.StoreCreateIn) (out *mode
if err != nil {
return ecode.Fail.Sub("新增门店管理员出现异常")
}
out.Id = id
return nil
}); err != nil {
return nil, err
}
return
}

View File

@ -98,6 +98,9 @@ func (s *sUser) Login(ctx context.Context, in *model.UserLoginIn) (out *model.Us
}
return
}
func (s *sUser) WeChatLogin(ctx context.Context, in *model.WeChatLogin) (out *model.WeChatLoginOut, err error) {
return
}
func (s *sUser) Info(ctx context.Context, in *model.UserInfoIn) (out *model.UserInfoOut, err error) {
exist, err := dao.Users.Ctx(ctx).Where(do.Users{WxOpenId: in.OpenId, Id: in.Id}).OmitEmptyWhere().Exist()