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() }