初步实现门店的逻辑代码

This commit is contained in:
2025-06-05 11:43:25 +08:00
parent 8b63f72f99
commit 9d20953377
14 changed files with 167 additions and 64 deletions

View File

@ -2,13 +2,13 @@ package store
import (
"context"
"github.com/gogf/gf/v2/database/gdb"
"server/internal/consts"
"server/internal/dao"
"server/internal/model"
"server/internal/model/do"
"server/internal/service"
"server/utility/ecode"
"github.com/gogf/gf/v2/database/gdb"
)
type sStore struct {
@ -26,6 +26,7 @@ func (s *sStore) List(ctx context.Context, in *model.StoreListIn) (out *model.St
}
func (s *sStore) Create(ctx context.Context, in *model.StoreCreateIn) (out *model.CreateOut, err error) {
out = &model.CreateOut{}
// 1. 检查门店名称是否重复
exist, err := dao.Stores.Ctx(ctx).Where(do.Stores{Name: in.Name}).Exist()
if err != nil {
@ -36,11 +37,31 @@ 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) error {
// 2.1 生成唯一的门店编号
// 2.2 插入门店基本信息
// 2.3 创建门店管理员账号
// 2.4 初始化门店配置
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()
if err != nil {
return ecode.Fail.Sub("获取商户ID出现异常")
}
// 2,2 生成门店的相关信息
// 2.3 插入门店数据
id, err := tx.Model(dao.Stores.Table()).Data(do.Stores{
MerchantId: value.Int64(),
}).InsertAndGetId()
if err != nil {
return ecode.Fail.Sub("新增门店出现异常")
}
//2.4 生成门店主管理账号
// 2.5 插入门店管理员数据
_, err = tx.Model(dao.StoreAdmins.Table()).Data(do.StoreAdmins{
StoreId: id,
}).Insert()
if err != nil {
return ecode.Fail.Sub("新增门店管理员出现异常")
}
return nil
}); err != nil {
return nil, err
@ -48,30 +69,69 @@ func (s *sStore) Create(ctx context.Context, in *model.StoreCreateIn) (out *mode
return
}
func (s *sStore) Update(ctx context.Context, in *model.StoreUpdateIn) (out *model.UpdateOut, err error) {
// 1. 验证门店是否存在
// 2. 验证操作权限(商户管理员或门店管理员)
// 3. 检查更新后的门店名称是否重复
// 4. 使用事务更新门店信息
// 5. 记录操作日志
return
exist, err := dao.Stores.Ctx(ctx).WherePri(in.Id).Exist()
if err != nil {
return nil, ecode.Fail.Sub("查询门店出现异常")
}
if !exist {
return nil, ecode.Params.Sub("门店不存在")
}
if in.OperatorId == 0 || (in.OperatorRole != consts.MerchantRoleCode && in.OperatorRole != consts.StoreRoleCode) {
return nil, ecode.InvalidOperation.Sub("无权限操作")
}
if in.Name != "" {
exist, err = dao.Stores.Ctx(ctx).Where(dao.Stores.Columns().Name, in.Name).WhereNot(dao.Stores.Columns().Id, in.Id).Exist()
if err != nil {
return nil, ecode.Fail.Sub("检查门店名称出现异常")
}
if exist {
return nil, ecode.Params.Sub("门店名称已存在")
}
}
_, err = dao.Stores.Ctx(ctx).WherePri(in.Id).Data(do.Stores{
Name: in.Name,
Address: in.Address,
ContactName: in.ContactName,
ContactPhone: in.ContactPhone, // TODO暂定可以直接修改后续可能需要验证手机号
Status: in.Status,
}).Update()
if err != nil {
return nil, ecode.Fail.Sub("更新门店出现异常")
}
return &model.UpdateOut{Success: true}, nil
}
func (s *sStore) Delete(ctx context.Context, in *model.StoreDeleteIn) (out *model.DeleteOut, err error) {
// 1. 验证门店是否存在
// 2. 验证操作权限(仅允许商户管理员)
// 3. 检查门店状态(是否有关联数据)
// 4. 使用事务处理删除操作
// 5. 清理相关数据
// 6. 记录操作日志
return
exist, err := dao.Stores.Ctx(ctx).WherePri(in.Id).Exist()
if err != nil {
return nil, ecode.Fail.Sub("查询门店出现异常")
}
if !exist {
return nil, ecode.Params.Sub("门店不存在")
}
if in.OperatorId == 0 || (in.OperatorRole != consts.MerchantRoleCode) {
return nil, ecode.InvalidOperation.Sub("无权限操作")
}
// TODO: 是否需要检查门店下存在未发放奖励等
return &model.DeleteOut{Success: true}, nil
}
func (s *sStore) Info(ctx context.Context, in *model.StoreInfoIn) (out *model.StoreInfoOut, err error) {
// 1. 验证门店是否存在
// 2. 验证访问权限
// 3. 获取门店基本信息
// 4. 获取门店配置信息
// 5. 获取门店管理员信息
// 6. 获取门店统计信息
// 7. 处理敏感信息
exist, err := dao.Stores.Ctx(ctx).Where(do.Stores{Id: in.Id}).Exist()
if err != nil {
return nil, ecode.Fail.Sub("查询门店出现异常")
}
if !exist {
return nil, ecode.Params.Sub("门店不存在")
}
// TODO 获取门店信息等相关信息
return
}