| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379 |
- <?php
- namespace app\common\model\search;
- use app\common\enum\GoodsEnum;
- use app\common\enum\PresellEnum;
- use app\common\enum\YesNoEnum;
- use app\common\logic\GoodsActivityLogic;
- use app\common\model\DiscountGoods;
- use app\common\model\DistributionGoods;
- use app\common\model\GoodsBrand;
- use app\common\model\GoodsCategory;
- use app\common\model\GoodsCategoryIndex;
- use app\common\model\GoodsItem;
- use app\common\model\PresellGoods;
- use think\facade\Validate;
- trait SearchGoods
- {
- /**
- * @notes 关键词搜索
- * @param $query
- * @param $value
- * @param $data
- * @author cjhao
- * @date 2021/8/16 18:01
- */
- public function searchKeywordAttr($query, $value, $data)
- {
- if ($value) {
- $query->where('code|name', 'like', '%' . $value . '%');
- }
- }
-
- /**
- * @notes 搜索条形码
- * @param $query
- * @param $value
- * @param $data
- * @return void
- * @author lbzy
- * @datetime 2023-12-21 11:49:39
- */
- function searchBarCodeAttr($query, $value, $data)
- {
- Validate::must($value) && $query->where('id', 'in', GoodsItem::where('bar_code', $value)->column('goods_id'));
- }
-
- /**
- * @notes 分类搜索
- * @param $query
- * @param $value
- * @param $data
- * @author cjhao
- * @date 2021/8/16 18:02
- */
- public function searchCategoryIdAttr($query, $value, $data)
- {
- if ($value) {
- $goodsCategory = GoodsCategory::find($value);
- $level = $goodsCategory['level'] ?? '';
- $categoryIds = [];
- switch ($level) {
- case 1:
- $categoryIds = GoodsCategory::alias('A')
- ->join('goods_category B', 'A.id = B.pid')
- ->where(['A.pid' => $value])
- ->field('A.id as aid,B.id as bid')
- ->select()->toArray();
- $categoryIds = array_merge(array_column($categoryIds, 'aid'), array_column($categoryIds, 'bid'));
- break;
- case 2:
- $categoryIds = GoodsCategory::where(['pid' => $value])
- ->column('id');
- break;
- }
- $categoryIds = array_merge([(int)$value], $categoryIds);
- $goodsIds = GoodsCategoryIndex::where(['category_id' => $categoryIds])->column('goods_id');
- $query->where('id', 'in', $goodsIds);
-
- }
-
- }
-
- /**
- * @notes 品牌搜索
- * @param $query
- * @param $value
- * @param $data
- * @return void
- * @author lbzy
- * @datetime 2023-11-08 09:49:20
- */
- public function searchBrandIdAttr($query, $value, $data)
- {
- $value && $query->where('brand_id', 'in', $value);
- }
-
- /**
- * @notes 商品类型筛选
- * @param $query
- * @param $value
- * @param $data
- * @author cjhao
- * @date 2022/4/21 18:05
- */
- public function searchGoodsTypeAttr($query, $value, $data)
- {
- if ($value) {
- $query->where('type', '=', $value);
- }
- }
-
- /**
- * @notes 供应商搜索
- * @param $query
- * @param $value
- * @param $data
- * @author cjhao
- * @date 2021/8/16 18:02
- */
- public function searchSupplierIdAttr($query, $value, $data)
- {
- if ($value) {
- $query->where('supplier_id', '=', $value);
- }
-
- }
-
- /**
- * @notes 价格排序
- * @param $query
- * @param $value
- * @param $data
- * @author cjhao
- * @date 2021/8/16 18:02
- */
- public function searchPriceAttr($query, $value, $data)
- {
- if ($value) {
- $query->order(['min_price' => $value]);
- }
- }
-
- /**
- * @notes 销售排序
- * @param $query
- * @param $value
- * @param $data
- * @author cjhao
- * @date 2021/8/16 18:02
- */
- public function searchSaleAttr($query, $value, $data)
- {
- if ($value) {
- $query->order(['sales_num' => $value]);
- }
- }
-
- /**
- * @notes 商品名称搜索
- * @param $query
- * @param $value
- * @param $data
- * @author cjhao
- * @date 2021/8/16 18:02
- */
- public function searchNameAttr($query, $value, $data)
- {
- if (Validate::must($value)) {
- $brandId = GoodsBrand::where('name', $value)->where('is_show', 1)->value('id');
- if ($brandId) {
- $query->where('brand_id', $brandId);
- } else {
- $query->where('name', 'like', '%' . $value . '%');
- }
- }
- }
-
- /**
- * @notes 类型搜索
- * @param $query
- * @param $value
- * @param $data
- * @author cjhao
- * @date 2021/8/16 18:02
- */
- public function searchTypeAttr($query, $value, $data)
- {
- switch ($value) {
- case 1: //销售中 todo 列出「销售状态:销售中」的商品
- $query->where(['status' => GoodsEnum::STATUS_SELL]);
- break;
- case 2: //库存预警 todo 列出「销售状态:销售中」且「库存预警:开启预警」 且「0 < 总库存 < 库存预警值」
- $query->where([
- ['status', '=', GoodsEnum::STATUS_SELL],
- ['stock_warning', '>', 0],
- ['total_stock', '>', 0],
- ]);
- $query->whereColumn('stock_warning', '>', 'total_stock');
- break;
-
- case 3: //已售罄 todo 「销售状态:销售中」且 「总库存 == 0」
- $query->where(['status' => GoodsEnum::STATUS_SELL, 'total_stock' => 0]);
- break;
- case 4: //仓库中 todo 列出「销售状态:仓库中」的商品
- $query->where(['status' => GoodsEnum::STATUS_STORAGE]);
- break;
-
- }
-
- }
-
- /**
- * @notes 根据活动状态搜索
- * @param $query
- * @param $value
- * @param $data
- * @return bool
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- * @author cjhao
- * @date 2022/9/1 17:10
- */
- public function searchActivityTypeAttr($query, $value, $data)
- {
- //全部
- if('' == $value){
- return false;
- }
- //未参与
- if(0 == $value){
-
- $activityLists = GoodsActivityLogic::activityInfo();
- $goodsIds = array_keys($activityLists);
- return $query->where('id', 'not in', $goodsIds);
-
- }else{
- //参与某个活动
- $activityLists = GoodsActivityLogic::activityInfo([],$value);
- $goodsIds = array_keys($activityLists);
- return $query->where('id', 'in', $goodsIds);
- }
- return false;
- }
-
- /**
- * @notes 根据分销状态搜索
- * @param $query
- * @param $value
- * @param $data
- * @author Tab
- * @date 2021/7/23 16:01
- */
- public function searchIsDistributionAttr($query, $value, $data)
- {
- // 获取已开启分销的商品id
- $joinIds = DistributionGoods::where('is_distribution', YesNoEnum::YES)->column('goods_id');
-
- if ($value == 1) {
- // 分销商品
- return $query->where('id', 'in', $joinIds);
- }
- if ($value == 0) {
- // 非分销商品
- return $query->where('id', 'not in', $joinIds);
- }
- return false;
- }
-
- /**
- * @notes 是否折扣商品
- * @param $query
- * @param $value
- * @param $data
- * @return mixed
- * @author cjhao
- * @date 2022/5/5 15:31
- */
- public function searchDiscountAttr($query, $value, $data)
- {
- if ($value) {
- $query->where('is_discount', '=', $value);
- }
- if (0 == $value) {
- $query->where('is_discount = 0 or is_discount is null');
- }
- }
-
- /**
- * @notes 状态筛选
- * @param $query
- * @param $value
- * @param $data
- * @author cjhao
- * @date 2022/5/5 15:38
- */
- public function searchStatusAttr($query, $value, $data)
- {
- if ('' !== $value) {
- $query->where('status', '=', $value);
- }
- }
-
- /**
- * @notes 搜索最大价格 max_price
- * @param $query
- * @param $value
- * @param $data
- * @return void
- * @author lbzy
- * @datetime 2023-11-08 09:51:26
- */
- function searchMaxPriceAttr($query, $value, $data)
- {
- Validate::must($value) && $query->where('max_price', '<=', $value);
- }
-
- /**
- * @notes 搜索最小价格 min_price
- * @param $query
- * @param $value
- * @param $data
- * @return void
- * @author lbzy
- * @datetime 2023-11-08 09:52:16
- */
- function searchMinPriceAttr($query, $value, $data)
- {
- Validate::must($value) && $query->where('min_price', '>=', $value);
- }
-
- /**
- * @notes 搜搜是否会员价 is_member_price 0或1
- * @param $query
- * @param $value
- * @param $data
- * @return void
- * @author lbzy
- * @datetime 2023-11-08 09:58:32
- */
- function searchIsMemberPriceAttr($query, $value, $data)
- {
- if (Validate::must($value)) {
- $discountGoodsIds = DiscountGoods::where('is_discount', 1)->column('goods_id');
- if ($value == 1) {
- $query->whereIn('id', $discountGoodsIds);
- } else {
- $query->whereNotIn('id', $discountGoodsIds);
- }
- }
- }
-
- /**
- * @notes 搜索预售 presell
- * @param $query
- * @param $value
- * @param $data
- * @return void
- * @author lbzy
- * @datetime 2024-05-07 09:35:15
- */
- function searchPresellAttr($query, $value, $data)
- {
- if (Validate::must($value)) {
- $goodsIds = PresellGoods::alias('pg')
- ->join('presell p', 'pg.presell_id=p.id')
- ->where('p.status', 'in' , PresellEnum::STATUS_GOODS_HAS)
- ->column('pg.goods_id');
- if ($value == 0) {
- $query->whereNotIn('id', $goodsIds);
- }
- if ($value == 1) {
- $query->whereIn('id', $goodsIds);
- }
- }
- }
- }
|