jh-admin/addon/supply/shop/controller/Goods.php

259 lines
11 KiB
PHP
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.

<?php
/**
* SAAS应用系统 --- 十年开发经验汇集巨献!
* ==========================================================
* Copy right 2020-2050 成都众联思索科技有限公司,保留所有权利。
* ----------------------------------------------------------
* 官方网址: https://www.zoomtk.com
* 这不是自由软件!未经允许不得用于商业目或程序代码摘取及修改。
* 任何企业和个人不允许对程序代码以任何形式任何目的再发布传播。
* 唯一发布渠道www.zoomtk.com;非官方渠道统一视为侵权行为。
* ==========================================================
*/
namespace addon\supply\shop\controller;
use addon\supply\model\Supplier;
use app\model\goods\GoodsAttribute;
use addon\supply\model\goods\Goods as GoodsModel;
use addon\supply\model\SupplyGoodsCategory as GoodsCategory;
/**
* 供应商信息
* Class Order
* @package app\shop\controller
*/
class Goods extends BaseSupplyshop
{
/**
* 商品列表
*/
public function goodslist()
{
if(request()->isAjax()){
$goods_model = new GoodsModel();
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$site_id = input('site_id', 0); //供应商id
$goods_id_arr = input('goods_id_arr', ''); //sku_id数组
$keyword = input('keyword', ''); //关键词
$category_id = input('category_id', 0); //分类
$category_level = input('category_level', 0); //分类等级
$brand_id = input('brand_id', 0); //品牌
$min_price = input('min_price', 0); //价格区间,小
$max_price = input('max_price', 0); //价格区间,大
$is_free_shipping = input('is_free_shipping', '-1'); //是否免邮
$is_own = input('is_own', ''); //是否自营
$order = input('order', 'create_time'); //排序(综合、销量、价格)
$sort = input('sort', 'desc'); //升序、降序
$attr = input('attr', ''); //属性json
$condition = [];
$field = 'gs.goods_id,gs.sku_id,gs.sku_name,gs.price_json,gs.min_price,gs.max_price,gs.min_num,
gs.market_price,gs.stock,gs.sale_num,gs.sku_image,gs.goods_name,gs.site_id,g.site_name,gs.website_id,
gs.is_own,gs.is_free_shipping,gs.introduction,g.goods_image,gs.goods_spec_format,gs.is_virtual';
$alias = 'gs';
$join = [
['supply_goods g', 'gs.sku_id = g.sku_id', 'inner']
];
if (!empty($site_id)) {
$condition[] = ['gs.site_id', '=', $site_id];
}
if (!empty($goods_id_arr)) {
$condition[] = ['gs.goods_id', 'in', $goods_id_arr];
}
if (!empty($keyword)) {
$condition[] = ['g.goods_name|gs.sku_name|gs.keywords', 'like', '%' . $keyword . '%'];
}
if (!empty($category_id) && !empty($category_level)) {
$condition[] = ['gs.category_id_' . $category_level, '=', $category_id];
}
if (!empty($brand_id)) {
$condition[] = ['gs.brand_id', '=', $brand_id];
}
//价格区间
if ($min_price != 0 && $max_price != 0) {
$condition[] = ['gs.min_price', '>=', $min_price];
$condition[] = ['gs.max_price', '<=', $max_price];
} elseif ($min_price != 0) {
$condition[] = ['gs.min_price', '>=', $min_price];
} elseif ($max_price != 0) {
$condition[] = ['gs.max_price', '<=', $max_price];
}
if (isset($is_free_shipping) && !empty($is_free_shipping) && $is_free_shipping > -1) {
$condition[] = ['gs.is_free_shipping', '=', $is_free_shipping];
}
if ($is_own !== '') {
$condition[] = ['gs.is_own', '=', $is_own];
}
// 非法参数进行过滤
if ($sort != "desc" && $sort != "asc") {
$sort = "";
}
// 非法参数进行过滤
if ($order != '') {
if ($order != "sale_num" && $order != "min_price") {
$order = 'gs.create_time';
} else {
$order = 'gs.' . $order;
}
$order_by = $order . ' ' . $sort;
} else {
$order_by = 'gs.sort desc,gs.create_time desc';
}
//拿到商品属性查询sku_id
if (!empty($attr)) {
$attr = json_decode($attr, true);
$attr_id = [];
$attr_value_id = [];
foreach ($attr as $k => $v) {
$attr_id[] = $v['attr_id'];
$attr_value_id[] = $v['attr_value_id'];
}
$goods_attribute = new GoodsAttribute();
$attribute_condition = [
['attr_id', 'in', implode(",", $attr_id)],
['attr_value_id', 'in', implode(",", $attr_value_id)],
['app_module', '=', 'supply']
];
$attribute_list = $goods_attribute->getAttributeIndexList($attribute_condition, 'sku_id');
$attribute_list = $attribute_list['data'];
if (!empty($attribute_list)) {
$sku_id = [];
foreach ($attribute_list as $k => $v) {
$sku_id[] = $v['sku_id'];
}
$condition[] = [
['gs.sku_id', 'in', implode(",", $sku_id)]
];
}
}
$condition[] = ['gs.goods_state', '=', 1];
$condition[] = ['gs.verify_state', '=', 1];
$condition[] = ['gs.is_delete', '=', 0];
$list = $goods_model->getGoodsSkuPageList($condition, $page, $page_size, $order_by, $field, $alias, $join);
return $list;
}else{
$keyword = input('keyword', '');
$this->assign('keyword', $keyword);
$category_id = input('category_id', 0);
$category_level = input('category_level', 0);
$this->assign('category_id', $category_id);
$this->assign('category_level', $category_level);
$goods_category_model = new GoodsCategory();
$category_id_1 = 0;
$category_id_2 = 0;
$category_id_3 = 0;
$first_goods_category_list_result = $goods_category_model->getCategoryList([['pid', '=', 0], ['is_show', '=', 1]]);
$first_goods_category_list = $first_goods_category_list_result['data'] ?? [];
$second_goods_category_list = [];
$third_goods_category_list = [];
if($category_level > 0){
$category_info_result = $goods_category_model->getCategoryInfo([['category_id', '=', $category_id]], 'category_id_1,category_id_2,category_id_3');
$category_info = $category_info_result['data'];
if(!empty($category_info)){
$category_id_1 = $category_info['category_id_1'];
$category_id_2 = $category_info['category_id_2'];
$category_id_3 = $category_info['category_id_3'];
if($category_id_1 > 0){
$second_goods_category_list_result = $goods_category_model->getCategoryList([['pid', '=', $category_id_1], ['is_show', '=', 1]]);
$second_goods_category_list = $second_goods_category_list_result['data'] ?? [];
if($category_id_2 > 0){
$third_goods_category_list_result = $goods_category_model->getCategoryList([['pid', '=', $category_id_2], ['is_show', '=', 1]]);
$third_goods_category_list = $third_goods_category_list_result['data'] ?? [];
}
}
}
}
$this->assign('category_id_1', $category_id_1);
$this->assign('category_id_2', $category_id_2);
$this->assign('category_id_3', $category_id_3);
$this->assign('first_goods_category_list', $first_goods_category_list);
$this->assign('second_goods_category_list', $second_goods_category_list);
$this->assign('third_goods_category_list', $third_goods_category_list);
return $this->fetch("goods/lists", [], $this->replace);
}
}
/**
* 商品详情
*/
public function detail()
{
$goods_model = new GoodsModel();
$sku_id = input('sku_id', 0);
$goods_id = input('goods_id', 0);
$res = [];
$goods_sku_detail = $goods_model->getGoodsSkuDetail($sku_id,$goods_id);
$goods_sku_detail = $goods_sku_detail['data'];
$res['goods_sku_detail'] = $goods_sku_detail;
//供应商信息 todo
$supply_model = new Supplier();
$supply_info = $supply_model->getSupplierInfo([['supplier_site_id', '=', $goods_sku_detail['site_id']]]);
$res['supply_info'] = $supply_info['data'];
$this->assign('detail', $res);
return $this->fetch("goods/detail", [], $this->replace);
}
/**
* 基础信息
*/
public function info()
{
$goods_model = new GoodsModel();
$sku_id = input('sku_id', 0);
if (empty($sku_id)) {
return $goods_model->error('', 'REQUEST_SKU_ID');
}
$field = 'goods_id,sku_id,sku_name,sku_spec_format,price,market_price,stock,click_num,sale_num,
collect_num,sku_image,sku_images,goods_id,site_id,goods_content,goods_state,verify_state,is_virtual,
is_free_shipping,goods_spec_format,goods_attr_format,introduction,unit,video_url,evaluate, min_price,max_price,min_num,price_json';
// ,category_id,category_name
// category_id_1,category_id_2,category_id_3
$info = $goods_model->getGoodsSkuInfo([['sku_id', '=', $sku_id]], $field);
return $info;
}
/**
* 商品推荐
* @return string
*/
public function recommend()
{
$goods_model = new GoodsModel();
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$condition = [
['gs.goods_state', '=', 1],
['gs.verify_state', '=', 1],
['gs.is_delete', '=', 0]
];
$field = 'gs.goods_id,gs.sku_id,gs.sku_name,gs.market_price,gs.stock,gs.sale_num,gs.sku_image,
gs.goods_name,gs.site_id,gs.website_id,gs.is_own,gs.is_free_shipping,gs.introduction,g.goods_image,
gs.min_price,gs.max_price,gs.min_num,gs.price_json';
$alias = 'gs';
$join = [
['supply_goods g', 'gs.sku_id = g.sku_id', 'inner']
];
$order_by = 'gs.sort desc,gs.create_time desc';
$list = $goods_model->getGoodsSkuPageList($condition, $page, $page_size, $order_by, $field, $alias, $join);
return $list;
}
}