haibei/internal/mods/common/biz/receptionCenter.go
2025-06-19 10:33:58 +08:00

134 lines
3.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package biz
import (
"context"
"fmt"
"github.com/skip2/go-qrcode"
"github.guxuan/haibei/internal/mods/common/dal"
"github.guxuan/haibei/internal/mods/common/schema"
"github.guxuan/haibei/pkg/errors"
"github.guxuan/haibei/pkg/util"
"time"
)
type ReceptionCenter struct {
Trans *util.Trans
ReceptionCenterDAL *dal.ReceptionCenter
}
// Query companies from the data access object based on the provided parameters and options.
func (a *ReceptionCenter) Query(ctx context.Context, params schema.ReceptionCenterQueryParam) (*schema.ReceptionCenterQueryResult, error) {
params.Pagination = true
result, err := a.ReceptionCenterDAL.Query(ctx, params, schema.ReceptionCenterQueryOptions{
QueryOptions: util.QueryOptions{
OrderFields: []util.OrderByParam{
{Field: "created_at", Direction: util.DESC},
},
},
})
if err != nil {
return nil, err
}
return result, nil
}
// Get the specified company from the data access object.
func (a *ReceptionCenter) Get(ctx context.Context, id uint) (*schema.ReceptionCenter, error) {
company, err := a.ReceptionCenterDAL.Get(ctx, id)
if err != nil {
return nil, err
} else if company == nil {
return nil, errors.NotFound("", "Company not found")
}
return company, nil
}
func GenerateStoreQR(recepId uint) ([]byte, error) {
// 格式checkin:store_id=123 (添加前缀防止恶意扫描)
content := fmt.Sprintf("checkin:reception_center_id=%d", recepId)
return qrcode.Encode(content, qrcode.Medium, 256)
}
func (a *ReceptionCenter) GetQrCode(ctx context.Context, id uint) ([]byte, error) {
recep, err := a.ReceptionCenterDAL.Get(ctx, id)
if err != nil {
return nil, err
} else if recep == nil {
return nil, errors.NotFound("", "ReceptionCenter not found")
}
png, err := GenerateStoreQR(recep.ID)
if err != nil {
return nil, err
}
return png, nil
}
// Create a new company in the data access object.
func (a *ReceptionCenter) Create(ctx context.Context, formItem *schema.ReceptionCenterForm) (*schema.ReceptionCenter, error) {
recep := &schema.ReceptionCenter{}
if err := formItem.FillTo(recep); err != nil {
return nil, err
}
err := a.Trans.Exec(ctx, func(ctx context.Context) error {
if err := a.ReceptionCenterDAL.Create(ctx, recep); err != nil {
return err
}
return nil
})
if err != nil {
return nil, err
}
return recep, nil
}
func (a *ReceptionCenter) CheckQrcode(ctx context.Context, receptionID, customerID uint) error {
recep, err := a.ReceptionCenterDAL.Get(ctx, receptionID)
if err != nil {
return err
} else if recep == nil {
return errors.NotFound("", "ReceptionCenter not found")
}
return nil
}
// Update the specified company in the data access object.
func (a *ReceptionCenter) Update(ctx context.Context, id uint, formItem *schema.ReceptionCenterForm) error {
recep, err := a.ReceptionCenterDAL.Get(ctx, id)
if err != nil {
return err
} else if recep == nil {
return errors.NotFound("", "recep not found")
}
if err := formItem.FillTo(recep); err != nil {
return err
}
recep.UpdatedAt = time.Now()
return a.Trans.Exec(ctx, func(ctx context.Context) error {
if err := a.ReceptionCenterDAL.Update(ctx, recep); err != nil {
return err
}
return nil
})
}
// Delete the specified company from the data access object.
func (a *ReceptionCenter) Delete(ctx context.Context, id uint) error {
exists, err := a.ReceptionCenterDAL.Exists(ctx, id)
if err != nil {
return err
} else if !exists {
return errors.NotFound("", "recep not found")
}
return a.Trans.Exec(ctx, func(ctx context.Context) error {
if err := a.ReceptionCenterDAL.Delete(ctx, id); err != nil {
return err
}
return nil
})
}