', GoodsEnum::DEL_TRUE] ]; $goods = []; // 销售中商品(含库存预警商品) // 销售状态:上架中;删除状态:正常; 审核状态: 审核通过 $goods['sell'] = Goods::where($where) ->where('status', GoodsEnum::STATUS_SHELVES) ->where('del', GoodsEnum::DEL_NORMAL) ->where('audit_status', GoodsEnum::AUDIT_STATUS_OK) ->count(); // 仓库中商品 // 销售状态:仓库中;删除状态:正常; 审核状态: 审核通过 $goods['warehouse'] = Goods::where($where) ->where('status', GoodsEnum::STATUS_SOLD_OUT) ->where('del', GoodsEnum::DEL_NORMAL) ->where('audit_status', GoodsEnum::AUDIT_STATUS_OK) ->count(); // 回收站商品 // 销售状态:任意;删除状态:回收站; 审核状态: 审核通过 $goods['recycle'] = Goods::where($where) ->where('del', GoodsEnum::DEL_RECYCLE) ->where('audit_status', GoodsEnum::AUDIT_STATUS_OK) ->count(); // 待审核商品 // 销售状态:任意;删除状态:排除已删除; 审核状态: 待审核 $goods['audit_stay'] = Goods::where($where) ->where('audit_status', GoodsEnum::AUDIT_STATUS_STAY) ->count(); // 审核未通过商品 // 销售状态:任意;删除状态:排除已删除; 审核状态: 审核未通过 $goods['audit_refuse'] = Goods::where($where) ->where('audit_status', GoodsEnum::AUDIT_STATUS_REFUSE) ->count(); return $goods; } /* * 商品统计 */ public static function statistics_bak(){ $where = [ ['del', '<>', GoodsEnum::DEL_TRUE] ]; $goods_list = Goods::where($where) ->field('id,status,stock,stock_warn,audit_status,del') ->select(); $goods = [ 'sell' => 0, //销售中 'warehouse' => 0, //仓库中 'recycle' => 0, //回收站 'audit_stay'=> 0, // 待审核 'audit_refuse'=> 0, // 审核未通过 ]; foreach ($goods_list as $item){ // 销售中商品(含库存预警商品) // 销售状态:上架中;删除状态:正常; 审核状态: 审核通过 if($item['status'] == GoodsEnum::STATUS_SHELVES && $item['del'] == GoodsEnum::DEL_NORMAL && $item['audit_status'] == GoodsEnum::AUDIT_STATUS_OK) { $goods['sell']++; } // 仓库中商品 // 销售状态:仓库中;删除状态:正常; 审核状态: 审核通过 if($item['status'] == GoodsEnum::STATUS_SOLD_OUT && $item['del'] == GoodsEnum::DEL_NORMAL && $item['audit_status'] == GoodsEnum::AUDIT_STATUS_OK) { $goods['warehouse']++; } // 回收站商品 // 销售状态:任意;删除状态:回收站; 审核状态: 审核通过 if($item['del'] == GoodsEnum::DEL_RECYCLE && $item['audit_status'] == GoodsEnum::AUDIT_STATUS_OK) { $goods['recycle']++; } // 待审核商品 // 销售状态:任意;删除状态:排除已删除; 审核状态: 待审核 if($item['del'] != GoodsEnum::DEL_TRUE && $item['audit_status'] == GoodsEnum::AUDIT_STATUS_STAY) { $goods['audit_stay']++; } // 审核未通过商品 // 销售状态:任意;删除状态:排除已删除; 审核状态: 审核未通过 if($item['del'] != GoodsEnum::DEL_TRUE && $item['audit_status'] == GoodsEnum::AUDIT_STATUS_REFUSE) { $goods['audit_refuse']++; } } return $goods; } /** * Notes: 列表 * @param $get * @author 段誉(2021/4/15 10:53) * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public static function lists($get) { $where = []; if(isset($get['shop_name']) && !($get['shop_name'] == '')) { $where[] = ['s.name','like','%'.$get['shop_name'].'%']; } if(isset($get['goods_name']) && !($get['goods_name'] == '')) { $where[] = ['g.name','like','%'.$get['goods_name'].'%']; } if(!empty($get['platform_cate_id'])) { $where[] = ['g.first_cate_id|g.second_cate_id|g.third_cate_id','=', $get['platform_cate_id']]; } if(isset($get['goods_type']) && $get['goods_type'] != '') { $where[] = ['g.type','=', $get['goods_type']]; } $type = $get['type'] ?? 0; switch ($type) { case 1: //销售中 $where[] = ['g.status', '=', GoodsEnum::STATUS_SHELVES];//上架 $where[] = ['g.del', '=', GoodsEnum::DEL_NORMAL]; $where[] = ['g.audit_status', '=', GoodsEnum::AUDIT_STATUS_OK];//审核通过 break; case 2: //仓库中 $where[] = ['g.status', '=', GoodsEnum::STATUS_SOLD_OUT];//下架 $where[] = ['g.del', '=', GoodsEnum::DEL_NORMAL]; $where[] = ['g.audit_status', '=', GoodsEnum::AUDIT_STATUS_OK];//审核通过 break; case 3: //回收站 $where[] = ['g.del', '=', GoodsEnum::DEL_RECYCLE]; $where[] = ['g.audit_status', '=', GoodsEnum::AUDIT_STATUS_OK];//审核通过 break; case 4: //待审核 $where[] = ['g.del', '<>', GoodsEnum::DEL_TRUE]; $where[] = ['g.audit_status', '=', GoodsEnum::AUDIT_STATUS_STAY]; break; case 5: //审核未通过 $where[] = ['g.del', '<>', GoodsEnum::DEL_TRUE]; $where[] = ['g.audit_status', '=', GoodsEnum::AUDIT_STATUS_REFUSE]; break; default: $where[] = ['g.del', '=', GoodsEnum::DEL_NORMAL]; } $lists = Goods::alias('g') ->field('g.id, g.image, g.spec_type, g.name, g.min_price, g.max_price, g.sales_actual, g.stock, g.sort_weight, g.create_time, g.column_ids, g.audit_status, g.audit_remark,s.id as shop_id, s.name as shop_name, s.logo as shop_logo, s.type as shop_type') ->leftJoin('Shop s', 's.id=g.shop_id') ->where($where) ->page($get['page'], $get['limit']) ->order('g.create_time', 'desc') ->select(); $count = Goods::alias('g')->leftJoin('shop s', 's.id = g.shop_id')->where($where)->count(); foreach($lists as &$item) { $item['price'] = $item['spec_type'] == 1 ? $item["min_price"] : $item["min_price"] . " ~ " . $item["max_price"]; switch($item['shop_type']) { case 1: $item['shop_type_desc'] = '官方自营'; break; case 2: $item['shop_type_desc'] = '入驻商家'; break; } $item['shop_logo'] = empty($item['shop_logo']) ? '' : UrlServer::getFileUrl($item['shop_logo']); if(!empty($item['column_ids'])) { $columnArr = explode(',', $item['column_ids']); $columnStr = ''; foreach($columnArr as $cloumnId) { $columnName = GoodsColumn::where('id', $cloumnId)->value('name'); $columnStr = $columnStr . $columnName . ','; } $columnStr = substr($columnStr, 0, strlen($columnStr) -1); $item['columnStr'] = $columnStr; } } if($count) { $lists = $lists->toArray(); }else{ $lists = []; } return ['count' => $count, 'lists' => $lists]; } /** * 获取商品信息 * @param $goods_id * @return array */ public static function info($goods_id) { // 商品主表 $info['base'] = Goods::where(['id' => $goods_id]) ->withAttr('abs_image', function ($value, $data) { return UrlServer::getFileUrl($data['image']); }) ->withAttr('content', function ($value){ $preg = '/()/is'; $local_url = UrlServer::getFileUrl('/'); return preg_replace($preg, "\${1}$local_url\${2}\${3}",$value); }) ->withAttr('poster', function ($value){ return empty($value) ? '' : UrlServer::getFileUrl($value); }) ->withAttr('abs_video',function ($value,$data){ if($data['video']){ return UrlServer::getFileUrl($data['video']); } return ''; })->append(['abs_image','abs_video'])->find(); // 商品轮播图 $info['base']['goods_image'] = GoodsImage::where(['goods_id' => $goods_id]) ->withAttr('abs_image', function ($value, $data) { return UrlServer::getFileUrl($data['uri']);}) ->append(['abs_image']) ->select(); // 商品SKU $info['item'] =GoodsItem::where(['goods_id' => $goods_id]) ->withAttr('abs_image', function ($value, $data) { return $data['image'] ? UrlServer::getFileUrl($data['image']) : ''; })->append(['abs_image']) ->select(); // 商品规格项 $info['spec'] = GoodsSpec::where(['goods_id' => $goods_id])->select(); // 商品规格值 $spec_value = GoodsSpecValue::where(['goods_id' => $goods_id])->select(); $data = []; foreach ($spec_value as $k => $v) { $data[$v['spec_id']][] = $v; } foreach ($info['spec'] as $k => $v) { $info['spec'][$k]['values'] = isset($data[$v['id']]) ? $data[$v['id']] : []; } return $info; } /** * 违规重审 * @param $params */ public static function reAudit($params) { Db::startTrans(); try{ // 更新商品信息 $updateData = [ 'id' => $params['goods_id'], 'audit_remark' => trim($params['reason']), 'audit_status' => GoodsEnum::AUDIT_STATUS_REFUSE ]; Goods::update($updateData); // 对应的秒杀商品同步更新为待审核 SeckillGoods::where([ 'del' => 0, 'goods_id' => $params['goods_id'] ])->update([ 'review_status' => 0, 'update_time' => time() ]); event('UpdateCollect', ['goods_id' => $params['goods_id']]); Db::commit(); return true; }catch(\Exception $e) { Db::rollback(); self::$error = $e->getMessage(); return false; } } /** * 商品设置 */ public static function setInfo($params) { $updateData = [ 'id' => $params['goods_id'], 'sales_virtual' => $params['sales_virtual'], 'sort_weight' => $params['sort_weight'], 'column_ids' => $params['select'] ]; return Goods::update($updateData); } /** * 审核 */ public static function audit($params) { $updateData = [ 'id' => $params['goods_id'], 'audit_status' => $params['audit_status'], 'audit_remark' => $params['audit_remark'], ]; return Goods::update($updateData); } }