You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
283 lines
5.9 KiB
Go
283 lines
5.9 KiB
Go
package service
|
|
|
|
import (
|
|
"joybuywork/internal/repository/cache"
|
|
"joybuywork/internal/repository/model"
|
|
"joybuywork/internal/repository/mtype"
|
|
"joybuywork/internal/repository/withdefault"
|
|
containers "joybuywork/internal/service/containers/mall"
|
|
"joybuywork/internal/service/provider/malls"
|
|
"joybuywork/internal/utils/logic"
|
|
pb "joybuywork/proto/go_proto/w_mall"
|
|
|
|
"gorm.io/gen/field"
|
|
)
|
|
|
|
type WMall struct {
|
|
Service
|
|
}
|
|
|
|
// List 商城列表
|
|
func (s *WMall) List(req *pb.ListReq, res *pb.ListRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.ListRes{}
|
|
container := new(containers.List)
|
|
{
|
|
container.Init(s.ctx)
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// Store 商城创建
|
|
func (s *WMall) Store(req *pb.StoreReq, res *pb.StoreRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
project, err := s.ProjectErrNil(req.GetProjectHashId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
mall := withdefault.RedeemMall(&model.RedeemMall{
|
|
ProjectID: project.ID,
|
|
Title: req.GetTitle(),
|
|
})
|
|
|
|
if err = s.GetDao().RedeemMall.WithContext(s.ctx).Create(mall); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
*res = pb.StoreRes{
|
|
Id: mall.ID,
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// Update 商城更新
|
|
func (s *WMall) Update(req *pb.UpdateReq, res *pb.UpdateRes) (err error) {
|
|
defer s.checkErr()
|
|
mall, err := cache.NewRedeemMall(s.ctx).FindById(req.GetId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if mall == nil {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().RedeemMall
|
|
var up []field.AssignExpr
|
|
if req.GetTitle() != mall.Title {
|
|
up = append(up, m.Title.Value(req.GetTitle()))
|
|
}
|
|
|
|
if len(up) > 0 {
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(mall.ID)).UpdateSimple(up...)
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
_ = cache.NewRedeemMall(s.ctx).Clear(mall)
|
|
}
|
|
|
|
*res = pb.UpdateRes{
|
|
Id: mall.ID,
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// Destroy 商城删除
|
|
func (s *WMall) Destroy(req *pb.DestroyReq, res *pb.DestroyRes) (err error) {
|
|
defer s.checkErr()
|
|
mall, err := cache.NewRedeemMall(s.ctx).FindById(req.GetId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if mall == nil || mall.IsDel == mtype.Yes {
|
|
return
|
|
}
|
|
|
|
relateM := s.GetDao().RedeemMallRelate
|
|
count, err := relateM.WithContext(s.ctx).Where(relateM.MallID.Eq(mall.ID), relateM.CancelTime.Eq(mtype.No)).Count()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
if count > 0 {
|
|
err = s.BE().VerifyError("mall used")
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().RedeemMall
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(mall.ID)).UpdateSimple(m.IsDel.Value(mtype.Yes))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
*res = pb.DestroyRes{}
|
|
|
|
return
|
|
}
|
|
|
|
// ItemList 商城奖品列表
|
|
func (s *WMall) ItemList(req *pb.ItemListReq, res *pb.ItemListRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.ItemListRes{}
|
|
container := new(containers.ItemList)
|
|
{
|
|
container.Init(s.ctx)
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// ItemStore 商城奖品创建
|
|
func (s *WMall) ItemStore(req *pb.ItemStoreReq, res *pb.ItemStoreRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
container := new(containers.ItemStore)
|
|
{
|
|
container.Init(s.ctx, logic.WithTran())
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// ItemUpdate 商城奖品更新
|
|
func (s *WMall) ItemUpdate(req *pb.ItemUpdateReq, res *pb.ItemUpdateRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.ItemUpdateRes{}
|
|
container := new(containers.ItemUpdate)
|
|
{
|
|
container.Init(s.ctx, logic.WithTran())
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// ItemStatus 商城奖品状态修改
|
|
func (s *WMall) ItemStatus(req *pb.ItemStatusReq, res *pb.ItemStatusRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.ItemStatusRes{}
|
|
container := new(containers.ItemStatus)
|
|
{
|
|
container.Init(s.ctx, logic.WithTran())
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// ItemSort 商城奖品排序
|
|
func (s *WMall) ItemSort(req *pb.ItemSortReq, res *pb.ItemSortRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
m := s.GetDao().RedeemMallItem
|
|
|
|
l := len(req.GetIds())
|
|
for i, id := range req.GetIds() {
|
|
_, err = m.WithContext(s.ctx).Where(m.ID.Eq(id)).UpdateSimple(m.Sort.Value(int32(l - i)))
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
*res = pb.ItemSortRes{}
|
|
|
|
return
|
|
}
|
|
|
|
// Select 商城选择
|
|
func (s *WMall) Select(req *pb.SelectReq, res *pb.SelectRes) (err error) {
|
|
defer s.checkErr()
|
|
project, err := s.ProjectErrNil(req.GetProjectHashId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().RedeemMall
|
|
list, err := m.WithContext(s.ctx).Select(m.ID, m.Title).Where(m.ProjectID.Eq(project.ID), m.IsDel.Eq(mtype.No)).Order(m.ID.Desc()).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
*res = pb.SelectRes{
|
|
List: make([]*pb.SelectRes_One, 0, len(list)),
|
|
}
|
|
|
|
for _, v := range list {
|
|
res.List = append(res.List, &pb.SelectRes_One{
|
|
Id: v.ID,
|
|
Title: v.Title,
|
|
})
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// RelateMall 关联商城
|
|
func (s *WMall) RelateMall(req *pb.RelateMallReq, res *pb.RelateMallRes) (err error) {
|
|
defer s.checkErr()
|
|
relate, err := malls.NewRelate(s.ctx, req.GetRelateId(), req.GetRelateTable())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = relate.Related(int8(req.GetSource()), req.GetMallIds()...)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
*res = pb.RelateMallRes{}
|
|
return
|
|
}
|
|
|
|
// UserItemList 用户商城奖品列表
|
|
func (s *WMall) UserItemList(req *pb.UserItemListReq, res *pb.UserItemListRes) (err error) {
|
|
defer s.checkErr()
|
|
|
|
*res = pb.UserItemListRes{}
|
|
container := new(containers.UserItemList)
|
|
{
|
|
container.Init(s.ctx)
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|
|
|
|
// ExchangeItem 商城奖品兑换
|
|
func (s *WMall) ExchangeItem(req *pb.ExchangeItemReq, res *pb.ExchangeItemRes) (err error) {
|
|
defer s.checkErr()
|
|
*res = pb.ExchangeItemRes{}
|
|
container := new(containers.ExchangeItem)
|
|
{
|
|
container.Init(s.ctx, logic.WithTran())
|
|
container.Req = req
|
|
container.Res = res
|
|
}
|
|
|
|
return container.Run()
|
|
}
|