package merchant import ( "context" "github.com/gogf/gf/v2/database/gdb" "github.com/gogf/gf/v2/os/gtime" "server/internal/consts" "server/internal/dao" "server/internal/model" "server/internal/model/do" "server/internal/service" "server/utility/ecode" ) type sMerchant struct { } func New() service.IMerchant { return &sMerchant{} } func init() { service.RegisterMerchant(New()) } func (s *sMerchant) List(ctx context.Context, in *model.MerchantListIn) (out *model.MerchantListOut, err error) { list := make([]model.Merchant, 0) var total int orm := dao.Merchants.Ctx(ctx) if in.Status != 0 { orm = orm.Where(dao.Merchants.Columns().Status, in.Status) } if in.AuditStatus != 0 { orm = orm.Where(dao.Merchants.Columns().AuditStatus, in.AuditStatus) } if err = orm.Page(in.Page, in.Size).ScanAndCount(&list, &total, false); err != nil { return nil, ecode.Fail.Sub("查询商户列表失败") } return &model.MerchantListOut{ List: list, Total: total, }, nil } func (s *sMerchant) Audit(ctx context.Context, in *model.MerchantAuditIn) (out *model.MerchantAuditOut, err error) { merchant, err := dao.Merchants.Ctx(ctx).WherePri(in.Id).One() if err != nil { return nil, ecode.Fail.Sub("查询商户失败") } if merchant.IsEmpty() { return nil, ecode.Params.Sub("商户不存在") } if merchant[dao.Merchants.Columns().AuditStatus].Int() != 1 { return nil, ecode.Params.Sub("商户已审核") } status := 2 if in.AuditStatus == 2 { status = 1 } if err = dao.Merchants.Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) { var time *gtime.Time if in.ExpireAt != nil { time = in.ExpireAt.AddDate(1, 0, 0) } if _, err = tx.Model(dao.Merchants.Table()).WherePri(in.Id).Data(do.Merchants{ AuditBy: in.AdminId, AuditRemark: in.AuditRemark, AuditStatus: in.AuditStatus, AuditAt: gtime.Now(), ExpireAt: time, // 暂定审核通过后1年 Status: status, // 暂定审核通过商户即可使用 RejectReason: in.RejectReason, }).OmitEmptyData().Update(); err != nil { return ecode.Fail.Sub("审核商户失败") } if _, err = tx.Model(dao.MerchantAdmins.Table()).Where(do.MerchantAdmins{MerchantId: in.Id, IsPrimary: true}).Data(do.MerchantAdmins{ Status: consts.MerchantAdministratorEnable, }).Update(); err != nil { return ecode.Fail.Sub("审核商户失败") } return nil }); err != nil { return nil, err } return } func (s *sMerchant) Create(ctx context.Context, in *model.MerchantCreateIn) (out *model.CreateOut, err error) { // 管理员创建的商户,无需审核,直接可以使用,需要注意商户关联的主账号的 username return }