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

459 lines
15 KiB
PHP
Raw Permalink 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\store\shop\controller;
use app\model\goods\Config as GoodsConfigModel;
use app\model\goods\Goods as GoodsModel;
use app\model\goods\GoodsCategory as GoodsCategoryModel;
use app\model\goods\GoodsEvaluate;
use app\shop\controller\BaseShop;
class Goods extends BaseShop
{
/******************************* 正常商品列表及相关操作 ***************************/
/**
* 商品列表
*/
public function lists()
{
$goods_model = new GoodsModel();
if (request()->isAjax()) {
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$search_text = input('search_text', "");
$search_text_type = input('search_text_type', "goods_name");
$goods_state = input('goods_state', "");
$verify_state = input('verify_state', "");
$category_id = input('category_id', "");
$brand_id = input('goods_brand', '');
$goods_attr_class = input("goods_attr_class", "");
$goods_class = input('goods_class', "");
$condition = [[ 'site_id', '=', $this->site_id ],[ 'is_delete', '=', 0 ] ];
if (!empty($search_text)) {
$condition[] = [ $search_text_type, 'like', '%' . $search_text . '%' ];
}
if ($goods_class !== "") {
$condition[] = [ 'goods_class', '=', $goods_class ];
}
if ($goods_state !== '') {
$condition[] = [ 'goods_state', '=', $goods_state ];
}
if ($verify_state !== '') {
$condition[] = [ 'verify_state', '=', $verify_state ];
}
if (!empty($category_id)) {
$condition[] = [ 'category_id|category_id_1|category_id_2|category_id_3', '=', $category_id ];
}
if ($brand_id) {
$condition[] = [ 'brand_id', '=', $brand_id ];
}
if ($goods_attr_class) {
$condition[] = [ 'goods_attr_class', '=', $goods_attr_class ];
}
if (!empty($site_id)) {
$condition[] = [ 'site_id', '=', $site_id ];
}
$res = $goods_model->getGoodsPageList($condition, $page_index, $page_size);
return $res;
} else {
$arr = [];
$verify_state = $arr;
$this->assign("verify_state", $verify_state);
return $this->fetch('goods/lists');
}
}
/**
* 商品SKU列表
*
* @return void
*/
public function skulists()
{
$page = input('page', 1);
$page_size = input('page_size', '');
$site_id = input('site_id', 0);
$category_id = input('category_id', 0);
$category_level = input('category_level', 0);
$brand_id = input('brand_id', 0);
$min_price = input('min_price', "");
$max_price = input('max_price', "");
$condition = [];
$field = 'gs.goods_id,gs.sku_id,gs.sku_name,gs.sku_image,gs.introduction,gs.price,gs.stock,gs.site_id,gs.market_price';
$alias = 'gs';
$join = [
[ 'goods g', 'gs.sku_id = g.sku_id', 'inner' ]
];
if (!empty($site_id)) {
$condition[] = [ 'gs.site_id', '=', $site_id ];
}
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 != "" && $max_price != "") {
$condition[] = [ 'gs.price', 'between', [ $min_price, $max_price ] ];
} elseif ($min_price != "") {
$condition[] = [ 'gs.price', '>=', $min_price ];
} elseif ($max_price != "") {
$condition[] = [ 'gs.price', '<=', $max_price ];
}
$condition[] = [ 'gs.goods_state', '=', 1 ];
$condition[] = [ 'gs.verify_state', '=', 1 ];
$condition[] = [ 'gs.is_delete', '=', 0 ];
$goods = new GoodsModel();
$list = $goods->getGoodsSkuPageList($condition, $page, PAGE_LIST_ROWS, '', $field, $alias, $join);
return $list;
}
/**
* 刷新审核状态商品数量
*/
public function refreshVerifyStateCount()
{
if (request()->isAjax()) {
$goods_model = new GoodsModel();
$verify_state = $goods_model->getVerifyState();
$arr = [];
foreach ($verify_state as $k => $v) {
// 过滤已审核状态
if ($k != 1) {
$total = $goods_model->getGoodsTotalCount([ [ 'verify_state', '=', $k ], [ 'is_delete', '=', 0 ] ]);
$total = $total[ 'data' ];
$arr[] = [
'state' => $k,
'value' => $v,
'count' => $total
];
}
}
$verify_state = $arr;
return $verify_state;
}
}
/**
* 获取SKU商品列表
* @return \multitype
*/
public function getGoodsSkuList()
{
if (request()->isAjax()) {
$goods_id = input("goods_id", 0);
$goods_model = new GoodsModel();
$res = $goods_model->getGoodsSkuList([ [ 'goods_id', '=', $goods_id ] ], 'sku_id,sku_name,price,stock,sale_num,sku_image,spec_name');
return $res;
}
}
/******************************* 违规下架商品列表及相关操作 ***************************/
/**
* 违规下架
*/
public function lockup()
{
if (request()->isAjax()) {
$verify_state_remark = input("verify_state_remark", 0);
$goods_ids = input("goods_ids", 0);
$goods_model = new GoodsModel();
$res = $goods_model->lockup([ [ 'goods_id', 'in', $goods_ids ] ], $verify_state_remark);
$this->addLog("商品违规下架id:" . $goods_ids . "原因:" . $verify_state_remark);
return $res;
}
}
/**
* 获取商品违规或审核失败说明
* @return \multitype
*/
public function getVerifyStateRemark()
{
if (request()->isAjax()) {
$goods_id = input("goods_id", 0);
$goods_model = new GoodsModel();
$res = $goods_model->getGoodsInfo([ [ 'goods_id', '=', $goods_id ], [ 'verify_state', 'in', [ -2, 10 ] ] ], 'verify_state_remark');
return $res;
}
}
/******************************* 待审核商品列表及相关操作 ***************************/
/**
* 商品审核
*/
public function verifyOn()
{
if (request()->isAjax()) {
$goods_ids = input("goods_ids", 0);
$verify_state = input("verify_state", -2);
$verify_state_remark = input("verify_state_remark", '');
$goods_model = new GoodsModel();
$res = $goods_model->modifyVerifyState($goods_ids, $verify_state, $verify_state_remark);
return $res;
}
}
/**
* 审核设置
*/
public function verifyConfig()
{
if (request()->isAjax()) {
$is_open = input("is_open", 0);
$data = [
'is_open' => $is_open
];
$goods_config = new GoodsConfigModel();
$res = $goods_config->setVerifyConfig($data);
return $res;
} else {
$goods_config = new GoodsConfigModel();
$goods_verify_info = $goods_config->getVerifyConfig();
$goods_verify_info = $goods_verify_info[ 'data' ];
$this->assign("goods_verify_info", $goods_verify_info[ 'value' ]);
return $this->fetch('goods/verify_config');
}
}
/******************************* 商品评价列表及相关操作 ***************************/
/**
* 商品评价
*/
public function evaluateList()
{
if (request()->isAjax()) {
$page_index = input('page', 1);
$page_size = input('limit', PAGE_LIST_ROWS);
$site_id = input("site_id", "");
$explain_type = input('explain_type', ''); //1好评2中评3差评
$search_text = input('search_text', "");
$search_type = input('search_type', "sku_name");
$condition = [];
//评分类型
if ($explain_type != "") {
$condition[] = [ "explain_type", "=", $explain_type ];
}
if (!empty($search_text)) {
if (!empty($search_type)) {
$condition[] = [ $search_type, 'like', '%' . $search_text . '%' ];
} else {
$condition[] = [ 'sku_name', 'like', '%' . $search_text . '%' ];
}
}
if (!empty($site_id)) {
$condition[] = [ 'site_id', '=', $site_id ];
}
$evaluate_model = new GoodsEvaluate();
$res = $evaluate_model->getEvaluatePageList($condition, $page_index, $page_size);
return $res;
} else {
return $this->fetch('goods/evaluate_list');
}
}
/**
* 评价删除
*/
public function deleteEvaluate()
{
if (request()->isAjax()) {
$id = input('id', '');
$evaluate_model = new GoodsEvaluate();
$res = $evaluate_model->deleteEvaluate($id);
$this->addLog("删除商品评价id:" . $id);
return $res;
}
}
/**
* 商品推广
* return
*/
public function goodsUrl()
{
$goods_id = input('goods_id', '');
$goods_model = new GoodsModel();
$goods_sku_info = $goods_model->getGoodsSkuInfo([ [ 'goods_id', '=', $goods_id ] ], 'sku_id,goods_name');
$goods_sku_info = $goods_sku_info[ 'data' ];
$res = $goods_model->qrcode($goods_sku_info[ 'sku_id' ], $goods_sku_info[ 'goods_name' ]);
return $res;
}
/**
* 商品预览
* return
*/
public function goodsPreview()
{
$goods_id = input('goods_id', '');
$goods_model = new GoodsModel();
$goods_sku_info = $goods_model->getGoodsSkuInfo([ [ 'goods_id', '=', $goods_id ] ], 'sku_id,goods_name');
$goods_sku_info = $goods_sku_info[ 'data' ];
$res = $goods_model->qrcode($goods_sku_info[ 'sku_id' ], $goods_sku_info[ 'goods_name' ]);
return $res;
}
/**
* 商品选择组件
* @return array|mixed|void
*/
public function goodsSelect()
{
if (request()->isPost()) {
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$goods_name = input('goods_name', '');
$goods_id = input('goods_id', 0);
$is_virtual = input('is_virtual', '');// 是否虚拟类商品0实物1.虚拟)
$min_price = input('min_price', 0);
$max_price = input('max_price', 0);
$goods_class = input('goods_class', "");// 商品类型,实物、虚拟
$category_id = input('category_id', "");// 商品分类id
$promotion = input('promotion', '');//营销活动标识pintuan、groupbuy、fenxiao、bargain
$promotion_type = input('promotion_type', "");
if (!empty($promotion) && addon_is_exit($promotion)) {
$pintuan_name = input('pintuan_name', '');//拼团活动
$goods_list = event('GoodsListPromotion', ['page' => $page, 'page_size' => $page_size, 'site_id' => $this->site_id, 'promotion' => $promotion, 'pintuan_name' => $pintuan_name, 'goods_name' => $goods_name], true);
} else {
$condition = [
['is_delete', '=', 0],
['goods_state', '=', 1],
];
if(!empty($this->site_id)) $condition[] = ['site_id', '=', $this->site_id];
if (!empty($goods_name)) {
$condition[] = ['goods_name', 'like', '%' . $goods_name . '%'];
}
if ($is_virtual !== "") {
$condition[] = ['is_virtual', '=', $is_virtual];
}
if (!empty($goods_id)) {
$condition[] = ['goods_id', '=', $goods_id];
}
if (!empty($category_id)) {
$condition[] = ['category_id', 'like', [$category_id, '%' . $category_id . ',%', '%' . $category_id, '%,' . $category_id . ',%'], 'or'];
}
if (!empty($promotion_type)) {
$condition[] = ['promotion_addon', 'like', "%{$promotion_type}%"];
}
if ($goods_class !== "") {
$condition[] = ['goods_class', '=', $goods_class];
}
if ($min_price != "" && $max_price != "") {
$condition[] = ['price', 'between', [$min_price, $max_price]];
} elseif ($min_price != "") {
$condition[] = ['price', '<=', $min_price];
} elseif ($max_price != "") {
$condition[] = ['price', '>=', $max_price];
}
$order = 'create_time desc';
$goods_model = new GoodsModel();
$field = 'goods_id,goods_name,goods_class_name,goods_image,price,goods_stock,create_time,is_virtual';
$goods_list = $goods_model->getGoodsPageList($condition, $page, $page_size, $order, $field);
if (!empty($goods_list[ 'data' ][ 'list' ])) {
foreach ($goods_list[ 'data' ][ 'list' ] as $k => $v) {
$goods_sku_list = $goods_model->getGoodsSkuList([['goods_id', '=', $v[ 'goods_id' ]]], 'sku_id,sku_name,price,stock,sku_image,goods_id,goods_class_name');
$goods_sku_list = $goods_sku_list[ 'data' ];
$goods_list[ 'data' ][ 'list' ][ $k ][ 'sku_list' ] = $goods_sku_list;
}
}
}
return $goods_list;
} else {
//已经选择的商品sku数据
$select_id = input('select_id', '');
$mode = input('mode', 'spu');
$max_num = input('max_num', 0);
$min_num = input('min_num', 0);
$is_virtual = input('is_virtual', '');
$disabled = input('disabled', 0);
$promotion = input('promotion', '');//营销活动标识pintuan、groupbuy、seckill、fenxiao
$this->assign('select_id', $select_id);
$this->assign('mode', $mode);
$this->assign('max_num', $max_num);
$this->assign('min_num', $min_num);
$this->assign('is_virtual', $is_virtual);
$this->assign('disabled', $disabled);
$this->assign('promotion', $promotion);
// 营销活动
$goods_promotion_type = event('GoodsPromotionType');
$this->assign('promotion_type', $goods_promotion_type);
$goods_category_model = new GoodsCategoryModel();
$field = 'category_id,category_name as title';
$condition = [
[ 'pid', '=', 0 ],
[ 'level', '=', 1 ],
];
$list = $goods_category_list = $goods_category_model->getCategoryByParent($condition, $field);
$list = $list['data'];
if(!empty($list)){
foreach($list as $k=>$v){
$two_list = $goods_category_list = $goods_category_model->getCategoryByParent(
[
[ 'pid', '=', $v['category_id'] ],
[ 'level', '=', 2 ],
],
$field
);
$two_list = $two_list['data'];
if(!empty($two_list)){
foreach($two_list as $two_k=>$two_v){
$three_list = $goods_category_list = $goods_category_model->getCategoryByParent(
[
[ 'pid', '=', $two_v['category_id'] ],
[ 'level', '=', 3 ],
],
$field
);
$two_list[$two_k]['children'] = $three_list['data'];
}
}
$list[$k]['children'] = $two_list;
}
}
$this->assign("category_list", $list);
return $this->fetch("goods/goods_select");
}
}
}