jh-admin/app/shop/controller/Goods.php

1841 lines
78 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
/**
* SaaSMall商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy riht 2019-2029 成都SAAS云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.gobuysaas.com
* =========================================================
*/
namespace app\shop\controller;
use addon\commission\model\Setting;
use addon\form\model\Form;
use addon\postertemplate\model\PosterTemplate as PosterTemplateModel;
use addon\supply\model\Supplier as SupplierModel;
use app\model\express\Config as ExpressConfig;
use app\model\express\ExpressTemplate as ExpressTemplateModel;
use app\model\goods\Batch;
use app\model\goods\Goods as GoodsModel;
use app\model\goods\GoodsAttribute as GoodsAttributeModel;
use app\model\goods\GoodsBrand as GoodsBrandModel;
use app\model\goods\GoodsBrowse;
use app\model\goods\GoodsCategory as GoodsCategoryModel;
use app\model\goods\GoodsCollect;
use app\model\goods\GoodsCommunityQrCode;
use app\model\goods\GoodsEvaluate as GoodsEvaluateModel;
use app\model\goods\GoodsImport;
use app\model\goods\GoodsLabel as GoodsLabelModel;
use app\model\goods\GoodsPoster;
use app\model\goods\GoodsService as GoodsServiceModel;
use app\model\store\Store as StoreModel;
use app\model\web\Config;
use app\model\web\Config as ConfigModel;
/**
* 实物商品
* Class Goods
* @package app\shop\controller
*/
class Goods extends BaseShop
{
public function __construct()
{
$this->app_module = input('app_module', SHOP_MODULE);
if ($this->app_module == 'store') {
$this->initConstructInfo(); // 加载构造函数重要信息
} else {
parent::__construct();
}
}
/**
* 商品列表
* @return mixed
*/
public function lists()
{
$stockalarm = input('stockalarm', 0);
$goods_model = new GoodsModel();
if (request()->isAjax()) {
$page_index = input('page', 1);
$page_index = intval($page_index);
$page_size = input('page_size', PAGE_LIST_ROWS);
$search_text = input('search_text', "");
$goods_state = input('goods_state', "");
$start_sale = input('start_sale', 0);
$end_sale = input('end_sale', 0);
$start_price = input('start_price', 0);
$end_price = input('end_price', 0);
$sku_start_price = input('sku_start_price', 0);
$sku_end_price = input('sku_end_price', 0);
$goods_class = input('goods_class', "");
$label_id = input('label_id', "");
$brand_id = input('brand_id', "");
$order = input('order', '');
$sort = input('sort', 'asc');
$sku_no = input('sku_no', '');
$promotion_type = input('promotion_type', "");
$category_id = input('category_id', "");
$condition = [
['site_id', '=', $this->site_id],
['is_delete', '=', 0],
];
if (!empty($search_text)) {
$condition[] = ['goods_name', 'like', '%' . $search_text . '%'];
}
if (!empty($category_id)) {
$condition[] = ['category_id', 'like', '%,' . $category_id . ',%'];
}
if ($goods_class !== "") {
$condition[] = ['goods_class', '=', $goods_class];
}
if (!empty($label_id)) {
$condition[] = ['label_id', '=', $label_id];
}
if (!empty($brand_id)) {
$condition[] = ['brand_id', '=', $brand_id];
}
if (!empty($promotion_type)) {
$condition[] = ['promotion_addon', 'like', "%{$promotion_type}%"];
}
// 上架状态
if ($goods_state !== '') {
$condition[] = ['goods_state', '=', $goods_state];
}
if (!empty($start_sale)) $condition[] = ['sale_num', '>=', $start_sale];
if (!empty($end_sale)) $condition[] = ['sale_num', '<=', $end_sale];
if (!empty($start_price)) $condition[] = ['price', '>=', $start_price];
if (!empty($end_price)) $condition[] = ['price', '<=', $end_price];
if (!empty($sku_start_price)) $condition[] = ['sku.price', '>=', $sku_start_price];
if (!empty($sku_end_price)) $condition[] = ['sku.price', '<=', $sku_end_price];
// 查询库存预警的商品
if ($stockalarm) {
$stock_alarm = $goods_model->getGoodsStockAlarm($this->site_id);
if (!empty($stock_alarm['data'])) {
$condition[] = ['goods_id', 'in', $stock_alarm['data']];
} else {
return success(0, '', ['page_count' => 1, 'count' => 0, 'list' => []]);
}
}
if (!empty($sku_no)) {
$goods_sku_list = $goods_model->getGoodsSkuList([['sku_no', 'like', '%' . $sku_no . '%']], 'goods_id')['data'];
$goods_id_arr = array_unique(array_column($goods_sku_list, 'goods_id'));
$condition[] = ['goods_id', 'in', $goods_id_arr];
}
$order_by = 'create_time desc';
if ($order != '') {
if ($order == 'sort') {
$order_by = $order . ' ' . $sort . ',create_time desc';
} else {
$order_by = $order . ' ' . $sort;
}
}
$field = 'goods_id,goods_name,site_id,site_name,goods_image,goods_state,price,goods_stock,goods_stock_alarm,create_time,goods_kind_id,sale_num,is_virtual,goods_class,goods_class_name,is_fenxiao,fenxiao_type,promotion_addon,sku_id,is_consume_discount,is_zmxx,discount_config,discount_method,sort,label_id,is_delete,label_name,virtual_deliver_type';
$res = $goods_model->getGoodsPageList($condition, $page_index, $page_size, $order_by, $field);
$goods_promotion_type = event('GoodsPromotionType');
if (!empty($res['data']['list'])) {
foreach ($res['data']['list'] as $k => &$v) {
if (!empty($v['promotion_addon'])) {
$v['promotion_addon'] = json_decode($v['promotion_addon'], true);
foreach ($v['promotion_addon'] as $ck => $cv) {
foreach ($goods_promotion_type as $gk => $gv) {
if ($gv['type'] == $ck) {
$res['data']['list'][$k]['promotion_addon_list'][] = $gv;
break;
}
}
}
}
}
}
return $res;
} else {
$goods_state = input('state', '');
$this->assign('goods_state', $goods_state);
//获取一级商品分类
$goods_category_model = new GoodsCategoryModel();
$condition = [
['pid', '=', 0],
['site_id', '=', $this->site_id]
];
$goods_category_list = $goods_category_model->getCategoryList($condition, 'category_id,category_name,level,commission_rate')['data'];
$this->assign("goods_category_list", $goods_category_list);
// 商品分组
$goods_label_model = new GoodsLabelModel();
$label_list = $goods_label_model->getLabelList([['site_id', '=', $this->site_id]], 'id,label_name', 'sort asc')['data'];
$this->assign("label_list", $label_list);
// 商品品牌
$goods_brand_model = new GoodsBrandModel();
$brand_list = $goods_brand_model->getBrandList([['site_id', '=', $this->site_id]], 'brand_id,brand_name', 'sort asc')['data'];
$this->assign("brand_list", $brand_list);
// 商品服务
$goods_service_model = new GoodsServiceModel();
$service_list = $goods_service_model->getServiceList([['site_id', '=', $this->site_id]], 'id,service_name,icon')['data'];
$this->assign("service_list", $service_list);
//获取运费模板
$express_template_model = new ExpressTemplateModel();
$express_template_list = $express_template_model->getExpressTemplateList([['site_id', "=", $this->site_id]], 'template_id,template_name', 'is_default desc')['data'];
$this->assign("express_template_list", $express_template_list);
//判断会员价插件
$memberprice_is_exit = addon_is_exit('memberprice', $this->site_id);
$this->assign('memberprice_is_exit', $memberprice_is_exit);
// 获取商品排序
$confif_model = new ConfigModel();
$goods_sort = $confif_model->getGoodsSort($this->site_id);
$this->assign("goods_sort", $goods_sort['data']['value']['type']);
// 营销活动
$goods_promotion_type = event('GoodsPromotionType');
$this->assign('promotion_type', $goods_promotion_type);
$this->assign('virtualcard_exit', addon_is_exit('virtualcard', $this->site_id));
$this->assign('stockalarm', $stockalarm);
$this->assign('pc_domain', '');
if (addon_is_exit('pc')) {
$config_model = new Config();
$config = $config_model->getPcDomainName($this->site_id);
$this->assign('pc_domain', $config['data']['value']['domain_name_pc'] ?? '');
}
$this->assign('goods_class', array_column(event('GoodsClass'), null, 'goods_class'));
$cardservice_is_exit = addon_is_exit('cardservice', $this->site_id);
$this->assign('cardservice_is_exit', $cardservice_is_exit);
$form_is_exit = addon_is_exit('form', $this->site_id);
if ($form_is_exit) {
$form_list = (new Form())->getFormList([['site_id', '=', $this->site_id], ['form_type', '=', 'goods'], ['is_use', '=', 1]], 'id desc', 'id, form_name')['data'];
$this->assign('form_list', $form_list);
}
$this->assign('form_is_exit', $form_is_exit);
$site_id = $this->site_id;
$site_agent_id = model('site')->getValue([['site_id' , '=' , $site_id]],'agent_id');
$this->assign('site_agent_id', $site_agent_id);
return $this->fetch("goods/lists");
}
}
/**
* 修改商品排序
*/
public function modifySort()
{
if (request()->isAjax()) {
$goods_model = new GoodsModel();
$goods_id = input('goods_id', 0);
$sort = input('sort', 0);
return $goods_model->modifyGoodsSort($sort, $goods_id, $this->site_id);
}
}
/**
* 添加商品
* @return mixed
*/
public function addGoods()
{
if (request()->isAjax()) {
$category_id = input("category_id", 0);// 分类id
$category_json = json_encode($category_id);//分类字符串
$category_id = ',' . implode(',', $category_id) . ',';
$data = [
'goods_name' => input("goods_name", ""),// 商品名称,
'goods_attr_class' => input("goods_attr_class", ""),// 商品类型id,
'goods_attr_name' => input("goods_attr_name", ""),// 商品类型名称,
'is_limit' => input("is_limit", "0"),// 商品是否限购,
'limit_type' => input("limit_type", "1"),// 商品限购类型,
'site_id' => $this->site_id,
'category_id' => $category_id,
'category_json' => $category_json,
'goods_image' => input("goods_image", ""),// 商品主图路径
'goods_content' => input("goods_content", ""),// 商品详情
'goods_state' => input("goods_state", ""),// 商品状态1.正常0下架
'goods_kind_id' => input("goods_kind_id", ""),// 商品种类(1.报单0进货)
'price' => input("price", 0),// 商品价格取第一个sku
'market_price' => input("market_price", 0),// 市场价格取第一个sku
'cost_price' => input("cost_price", 0),// 成本价取第一个sku
'sku_no' => input("sku_no", ""),// 商品sku编码
'weight' => input("weight", ""),// 重量
'volume' => input("volume", ""),// 体积
'goods_stock' => input("goods_stock", 0),// 商品库存(总和)
'goods_stock_alarm' => input("goods_stock_alarm", 0),// 库存预警
'is_free_shipping' => input("is_free_shipping", 1),// 是否免邮
'shipping_template' => input("shipping_template", 0),// 指定运费模板
'goods_spec_format' => input("goods_spec_format", ""),// 商品规格格式
'goods_attr_format' => input("goods_attr_format", ""),// 商品参数格式
'introduction' => input("introduction", ""),// 促销语
'keywords' => input("keywords", ""),// 关键词
'unit' => input("unit", ""),// 单位
'sort' => input("sort", 0),// 排序,
'video_url' => input("video_url", ""),// 视频
'goods_sku_data' => input("goods_sku_data", ""),// SKU商品数据
'goods_service_ids' => input("goods_service_ids", ''),// 商品服务id集合
'label_id' => input("label_id", ''),// 商品分组id
'brand_id' => input("brand_id", 0),//品牌id
'virtual_sale' => input("virtual_sale", 0),// 虚拟销量
'max_buy' => input("max_buy", 0),// 限购
'min_buy' => input("min_buy", 0),// 起售
'recommend_way' => input('recommend_way', 0), // 推荐方式1新品2精品3推荐
'timer_on' => strtotime(input('timer_on', 0)),//定时上架
'timer_off' => strtotime(input('timer_off', 0)),//定时下架
'is_consume_discount' => input('is_consume_discount', 0),//是否参与会员折扣
'qr_id' => input('qr_id', 0),//社群二维码id
'sale_show' => input('sale_show', 0),//
'stock_show' => input('stock_show', 0),//
'market_price_show' => input('market_price_show', 0),//
'barrage_show' => input('barrage_show', 0),//
'template_id' => input('template_id', 0),//商品海报id
'form_id' => input('form_id', 0),
'support_trade_type' => input('support_trade_type', ''),
'sale_channel' => input('sale_channel', 'all'),
'sale_store' => input('sale_store', 'all'),
'is_unify_pirce' => input('is_unify_pirce', '1'),
'is_zmxx' => input('is_zmxx', 0),
'cat_id' => input('cat_id', ''),
'is_correlation' => input('is_correlation', 0),
'correlation_type' => input('correlation_type', 1),
'correlation_goods_ids' => input('correlation_goods_ids', []),
];
$goods_model = new GoodsModel();
$res = $goods_model->addGoods($data);
// 处理平台抽成 商品设置
$commissionSet = input('set');
$commissionSet['site_id'] = $this->site_id;
(new Setting())->setGoodConfig((int)$res['data'], (array)$commissionSet);
return $res;
} else {
//获取一级商品分类
$goods_category_model = new GoodsCategoryModel();
$condition = [
['pid', '=', 0],
['site_id', '=', $this->site_id]
];
$goods_category_list = $goods_category_model->getCategoryList($condition, 'category_id,category_name,level,commission_rate')['data'];
$this->assign("goods_category_list", $goods_category_list);
//获取运费模板
$express_template_model = new ExpressTemplateModel();
$express_template_list = $express_template_model->getExpressTemplateList([['site_id', "=", $this->site_id]], 'template_id,template_name', 'is_default desc')['data'];
$this->assign("express_template_list", $express_template_list);
//获取商品类型
$goods_attr_model = new GoodsAttributeModel();
$attr_class_list = $goods_attr_model->getAttrClassList([['site_id', '=', $this->site_id]], 'class_id,class_name')['data'];
$this->assign("attr_class_list", $attr_class_list);
// 商品服务
$goods_service_model = new GoodsServiceModel();
$service_list = $goods_service_model->getServiceList([['site_id', '=', $this->site_id]], 'id,service_name,icon')['data'];
$this->assign("service_list", $service_list);
// 商品分组
$goods_label_model = new GoodsLabelModel();
$label_list = $goods_label_model->getLabelList([['site_id', '=', $this->site_id]], 'id,label_name', 'sort asc')['data'];
$this->assign("label_list", $label_list);
//商品默认排序值
$config_model = new ConfigModel();
$sort_config = $config_model->getGoodsSort($this->site_id, $this->app_module);
$sort_config = $sort_config['data']['value'];
$this->assign("sort_config", $sort_config);
//获取品牌
$goods_brand_model = new GoodsBrandModel();
$brand_list = $goods_brand_model->getBrandList([['site_id', '=', $this->site_id]], "brand_id, brand_name")['data'];
$this->assign("brand_list", $brand_list);
//获取商品海报
$poster_template_model = new PosterTemplateModel();
$poster_list = $poster_template_model->getPosterTemplateList([['site_id', '=', $this->site_id], ['template_status', '=', 1]], 'template_id,poster_name,site_id');
$this->assign('poster_list', $poster_list['data']);
$this->assign('virtualcard_exit', addon_is_exit('virtualcard', $this->site_id));
//获取社群二维码
$goods_community_model = new GoodsCommunityQrCode();
$goods_community_qr_list = $goods_community_model->getQrList([['site_id', '=', $this->site_id], ['qr_state', '=', 1]], 'qr_id,qr_name,site_id');
$this->assign('goods_community_qr_list', $goods_community_qr_list['data']);
$form_is_exit = addon_is_exit('form', $this->site_id);
if ($form_is_exit) {
$form_list = (new Form())->getFormList([['site_id', '=', $this->site_id], ['form_type', '=', 'goods'], ['is_use', '=', 1]], 'id desc', 'id, form_name')['data'];
$this->assign('form_list', $form_list);
}
$this->assign('form_is_exit', $form_is_exit);
$express_type = (new ExpressConfig())->getEnabledExpressType($this->site_id);
$this->assign('express_type', $express_type);
$this->assign('all_goodsclass', event('GoodsClass'));
$this->assign('goods_class', (new GoodsModel())->getGoodsClass());
$this->assign('store_is_exit', addon_is_exit('store', $this->site_id));
$is_install_supply = addon_is_exit("supply");
if ($is_install_supply) {
$supplier_model = new SupplierModel();
$supplier_list = $supplier_model->getSupplyList([['supplier_site_id', '=', $this->site_id]], 'supplier_id,title', 'supplier_id desc')['data'];
$this->assign("supplier_list", $supplier_list);
}
$this->assign("is_install_supply", $is_install_supply);
$config = new \addon\aliapp\model\Config();
$config_info = $config->getAppConfig($this->site_id)['data']['value'];
$is_alipay_goods = 0;
if ($config_info) $is_alipay_goods = 1;
$this->assign("is_alipay_goods", $is_alipay_goods);
//商品信息
$this->assign('goods_list', []);
$this->assign('goods_ids_arr', []);
// 获取平台抽成设置
$this->assign([
'finalSet' => (new Setting())->getFinalSet((int)$this->site_id),// 获取店铺级 最终设置
'goodSet' => (new Setting())->getGoodConfig((int)0),// 获取当前商品的抽成设置
]);
return $this->fetch("goods/add_goods");
}
}
/**
* 编辑商品
* @return mixed
*/
public function editGoods()
{
$goods_model = new GoodsModel();
if (request()->isAjax()) {
$category_id = input("category_id", 0);// 分类id
$category_json = json_encode($category_id);//分类字符串
$category_id = ',' . implode(',', $category_id) . ',';
$data = [
'goods_id' => input("goods_id",0),// 商品id
'goods_name' => input("goods_name",""),// 商品名称,
'goods_attr_class' => input("goods_attr_class",""),// 商品类型id,
'goods_attr_name' => input("goods_attr_name",""),// 商品类型名称,
'is_limit' => input("is_limit","0"),// 商品是否限购,
'limit_type' => input("limit_type","1"),// 商品限购类型,
'site_id' => $this->site_id,
'category_id' => $category_id,
'category_json' => $category_json,
'goods_image' => input("goods_image",""),// 商品主图路径
'goods_content' => input("goods_content",""),// 商品详情
'goods_state' => input("goods_state",""),// 商品状态1.正常0下架
'goods_kind_id' => input("goods_kind_id", ""),// 商品种类(1.报单0进货)
'price' => input("price",0),// 商品价格取第一个sku
'market_price' => input("market_price",0),// 市场价格取第一个sku
'cost_price' => input("cost_price",0),// 成本价取第一个sku
'sku_no' => input("sku_no",""),// 商品sku编码
'weight' => input("weight",""),// 重量
'volume' => input("volume",""),// 体积
'goods_stock' => input("goods_stock",0),// 商品库存(总和)
'goods_stock_alarm' => input("goods_stock_alarm",0),// 库存预警
'is_free_shipping' => input("is_free_shipping",1),// 是否免邮
'shipping_template' => input("shipping_template",0),// 指定运费模板
'goods_spec_format' => input("goods_spec_format",""),// 商品规格格式
'goods_attr_format' => input("goods_attr_format",""),// 商品参数格式
'introduction' => input("introduction",""),// 促销语
'keywords' => input("keywords",""),// 关键词
'unit' => input("unit",""),// 单位
'sort' => input("sort",0),// 排序,
'video_url' => input("video_url",""),// 视频
'goods_sku_data' => input("goods_sku_data",""),// SKU商品数据
'goods_service_ids' => input("goods_service_ids",''),// 商品服务id集合
'label_id' => input("label_id",''),// 商品分组id
'brand_id' => input("brand_id",0),//品牌id
'virtual_sale' => input("virtual_sale",0),// 虚拟销量
'max_buy' => input("max_buy",0),// 限购
'min_buy' => input("min_buy",0),// 起售
'recommend_way' => input('recommend_way',0), // 推荐方式1新品2精品3推荐
'timer_on' => strtotime(input('timer_on',0)),//定时上架
'timer_off' => strtotime(input('timer_off',0)),//定时下架
'spec_type_status' => input('spec_type_status',0),
'is_consume_discount' => input('is_consume_discount',0),//是否参与会员折扣
'qr_id' => input('qr_id',0),//社群二维码id
'sale_show' => input('sale_show',0),//
'stock_show' => input('stock_show',0),//
'market_price_show' => input('market_price_show',0),//
'barrage_show' => input('barrage_show',0),//
'template_id' => input('template_id',0),//商品海报id
'form_id' => input('form_id',0),
'support_trade_type' => input('support_trade_type',''),
'sale_channel' => input('sale_channel','all'),
'sale_store' => input('sale_store','all'),
'is_unify_pirce' => input('is_unify_pirce','1'),
'is_zmxx' => input('is_zmxx',0),
'cat_id' => input('cat_id',''),
'is_correlation' => input('is_correlation', 0),
'correlation_type' => input('correlation_type', 1),
'correlation_goods_ids' => input('correlation_goods_ids', []),
];
$res = $goods_model->editGoods($data);
// 处理平台抽成 商品设置
$commissionSet = input('set');
$commissionSet['site_id'] = $this->site_id;
(new Setting())->setGoodConfig((int)$data['goods_id'], (array)$commissionSet);
return $res;
} else {
$goods_id = input("goods_id", 0);
$goods_info = $goods_model->editGetGoodsInfo([['goods_id', '=', $goods_id], ['site_id', '=', $this->site_id]])['data'];
if (empty($goods_info)) $this->error('未获取到商品数据', addon_url('shop/goods/lists'));
$goods_sku_list = $goods_model->getGoodsSkuList([['goods_id', '=', $goods_id], ['site_id', '=', $this->site_id]], "sku_id,sku_name,sku_no,sku_spec_format,price,market_price,cost_price,stock,weight,volume,sku_image,sku_images,goods_spec_format,goods_supplier_format,spec_name,stock_alarm,is_default", '')['data'];
$goods_info['sku_list'] = $goods_sku_list;
$this->assign("goods_info", $goods_info);
// 商品信息
$goodsIdsArr = $goods_info['correlation_goods_ids'] ?? [];
$goodsList = model('goods')->getList([
['goods_id', 'in', $goodsIdsArr]
], 'goods_id,goods_name,price,goods_stock');
$this->assign('goods_list', $goodsList);
$this->assign('goods_ids_arr', $goodsIdsArr);
//获取一级商品分类
$goods_category_model = new GoodsCategoryModel();
$condition = [
['pid', '=', 0],
['site_id', '=', $this->site_id]
];
$goods_category_list = $goods_category_model->getCategoryList($condition, 'category_id,category_name,level,commission_rate')['data'];
$this->assign("goods_category_list", $goods_category_list);
//获取运费模板
$express_template_model = new ExpressTemplateModel();
$express_template_list = $express_template_model->getExpressTemplateList([['site_id', "=", $this->site_id]], 'template_id,template_name', 'is_default desc')['data'];
$this->assign("express_template_list", $express_template_list);
//获取商品类型
$goods_attr_model = new GoodsAttributeModel();
$attr_class_list = $goods_attr_model->getAttrClassList([['site_id', '=', $this->site_id]], 'class_id,class_name')['data'];
$this->assign("attr_class_list", $attr_class_list);
//获取品牌
$goods_brand_model = new GoodsBrandModel();
$brand_list = $goods_brand_model->getBrandList([['site_id', '=', $this->site_id]], "brand_id, brand_name")['data'];
$this->assign("brand_list", $brand_list);
// 商品服务
$goods_service_model = new GoodsServiceModel();
$service_list = $goods_service_model->getServiceList([['site_id', '=', $this->site_id]], 'id,service_name,icon')['data'];
$this->assign("service_list", $service_list);
// 商品分组
$goods_label_model = new GoodsLabelModel();
$label_list = $goods_label_model->getLabelList([['site_id', '=', $this->site_id]], 'id,label_name', 'sort asc')['data'];
$this->assign("label_list", $label_list);
//获取商品海报
$poster_template_model = new PosterTemplateModel();
$poster_list = $poster_template_model->getPosterTemplateList([['site_id', '=', $this->site_id], ['template_status', '=', 1], ['template_type', '=', 'goods']], 'template_id,poster_name,site_id')['data'];
$this->assign('poster_list', $poster_list);
$form_is_exit = addon_is_exit('form', $this->site_id);
if ($form_is_exit) {
$form_list = (new Form())->getFormList([['site_id', '=', $this->site_id], ['form_type', '=', 'goods'], ['is_use', '=', 1]], 'id desc', 'id, form_name')['data'];
$this->assign('form_list', $form_list);
}
$this->assign('form_is_exit', $form_is_exit);
$express_type = (new ExpressConfig())->getEnabledExpressType($this->site_id);
$this->assign('express_type', $express_type);
$store_is_exit = addon_is_exit('store', $this->site_id);
if ($store_is_exit && $goods_info['sale_store'] != 'all') {
$where=[
['site_id', '=', $this->site_id],
['store_id', 'in', $goods_info['sale_store']]
];
if(is_numeric($goods_info['sale_store'])){
$where[]=['store_id','<>',$goods_info['sale_store']];
}
$store_list = (new StoreModel())->getStoreList($where, 'store_id,store_name,status,address,full_address,is_frozen');
$this->assign('store_list', $store_list['data']);
}
$this->assign('store_is_exit', $store_is_exit);
//获取社群二维码
$goods_community_model = new GoodsCommunityQrCode();
$goods_community_qr_list = $goods_community_model->getQrList([['site_id', '=', $this->site_id], ['qr_state', '=', 1]], 'qr_id,qr_name,site_id');
$this->assign('goods_community_qr_list', $goods_community_qr_list['data']);
$editGoodsInfo = event('editGoodsInfo', ['goods_id' => $goods_id, 'site_id' => $this->site_id]);
if ($editGoodsInfo) {
foreach ($editGoodsInfo as $item) {
if ($item['apptype'] == 'aliapp') {
$this->assign("alipay_category_id", $item['category_id'] ?? '');
}
}
}
$config = new \addon\aliapp\model\Config();
$config_info = $config->getAppConfig($this->site_id)['data']['value'];
$is_alipay_goods = 0;
if ($config_info) $is_alipay_goods = 1;
$this->assign("is_alipay_goods", $is_alipay_goods);
// 获取平台抽成设置
$this->assign([
'finalSet' => (new Setting())->getFinalSet((int)$this->site_id),// 获取店铺级 最终设置
'goodSet' => (new Setting())->getGoodConfig((int)$goods_id),// 获取当前商品的抽成设置
]);
return $this->fetch("goods/edit_goods");
}
}
/**
* 删除商品
*/
public function deleteGoods()
{
if (request()->isAjax()) {
$goods_ids = input("goods_ids", 0);
$goods_model = new GoodsModel();
$res = $goods_model->modifyIsDelete($goods_ids, 1, $this->site_id);
return $res;
}
}
public function copyGoodsList(){
if(request()->isAjax()){
$goods_model = new GoodsModel();
$site_id = $this->site_id;
$site_agent_id = model('site')->getValue([['site_id' , '=' , $site_id]],'agent_id');
$condition[] = [ 'site_id', '=', $site_agent_id ];
$field = 'goods_id,goods_name,goods_class_name';
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$search_text = input('search_text', '');
if ($search_text) {
$condition[] = ['goods_name', 'like', '%' . $search_text . '%'];
}
$list = $goods_model->getGoodsPageList($condition, $page, $page_size, 'goods_id desc',$field);
return $list;
}
}
public function copySiteGoods(){
if (request()->isAjax()) {
$id = input('copy_id', 0);
$goods_model = new GoodsModel();
$site_id = $this->site_id;
$site_agent_id = model('site')->getValue([['site_id' , '=' , $site_id]],'agent_id');
return $goods_model->copyTopicGoods($id, $site_id, $site_agent_id);
}
}
/**
* 商品回收站
*/
public function recycle()
{
if (request()->isAjax()) {
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$search_keys = input('search_text', "");
$goods_class = input('goods_class', '');
$condition = [['is_delete', '=', 1], ['site_id', "=", $this->site_id]];
if (!empty($search_keys)) {
$condition[] = ['goods_name', 'like', '%' . $search_keys . '%'];
}
$category_id = input('category_id', "");
if (!empty($category_id)) {
$condition[] = ['category_id', 'like', '%,' . $category_id . ',%'];
}
if ($goods_class !== "") {
$condition[] = ['goods_class', '=', $goods_class];
}
$goods_model = new GoodsModel();
$res = $goods_model->getGoodsPageList($condition, $page_index, $page_size);
return $res;
} else {
//获取一级商品分类
$goods_category_model = new GoodsCategoryModel();
$condition = [
['pid', '=', 0],
['site_id', '=', $this->site_id]
];
$goods_category_list = $goods_category_model->getCategoryList($condition, 'category_id,category_name,level,commission_rate')['data'];
$this->assign("goods_category_list", $goods_category_list);
$this->assign('virtualcard_exit', addon_is_exit('virtualcard', $this->site_id));
return $this->fetch("goods/recycle");
}
}
/**
* 商品回收站商品删除
*/
public function deleteRecycleGoods()
{
if (request()->isAjax()) {
$goods_ids = input("goods_ids", 0);
$goods_model = new GoodsModel();
$res = $goods_model->deleteRecycleGoods($goods_ids, $this->site_id);
return $res;
}
}
/**
* 商品回收站商品恢复
*/
public function recoveryRecycle()
{
if (request()->isAjax()) {
$goods_ids = input("goods_ids", 0);
$goods_model = new GoodsModel();
$res = $goods_model->modifyIsDelete($goods_ids, 0, $this->site_id);
return $res;
}
}
/**
* 商品下架
*/
public function offGoods()
{
if (request()->isAjax()) {
$goods_ids = input("goods_ids", 0);
$goods_state = input("goods_state", 0);
$goods_model = new GoodsModel();
$res = $goods_model->modifyGoodsState($goods_ids, $goods_state, $this->site_id);
return $res;
}
}
/**
* 商品上架
*/
public function onGoods()
{
if (request()->isAjax()) {
$goods_ids = input("goods_ids", 0);
$goods_state = input("goods_state", 0);
$goods_model = new GoodsModel();
$res = $goods_model->modifyGoodsState($goods_ids, $goods_state, $this->site_id);
return $res;
}
}
/**
* 编辑商品库存
* @return array|\multitype
*/
public function editGoodsStock()
{
if (request()->isAjax()) {
$sku_list = input("sku_list", '');
$model = new GoodsModel;
$res = $model->editGoodsStock($sku_list, $this->site_id);
return $res;
}
}
/**
* 获取商品分类列表
* @return \multitype
*/
public function getCategoryList()
{
if (request()->isAjax()) {
$category_id = input("category_id", 0);
$goods_category_model = new GoodsCategoryModel();
$condition = [
['pid', '=', $category_id],
['site_id', '=', $this->site_id]
];
$goods_category_list = $goods_category_model->getCategoryList($condition, 'category_id,category_name,level,commission_rate');
return $goods_category_list;
}
}
/**
* 获取商品参数列表
* @return \multitype
*/
public function getAttributeList()
{
if (request()->isAjax()) {
$goods_attr_model = new GoodsAttributeModel();
$attr_class_id = input('attr_class_id', 0);// 商品类型id
$attribute_list = $goods_attr_model->getAttributeList([['attr_class_id', '=', $attr_class_id], ['is_spec', '=', 0], ['site_id', '=', $this->site_id]], 'attr_id,attr_name,attr_class_id,attr_class_name,attr_type,attr_value_format', 'sort asc');
if (!empty($attribute_list['data'])) {
foreach ($attribute_list['data'] as $k => $v) {
if (!empty($v['attr_value_format'])) {
$attribute_list['data'][$k]['attr_value_format'] = json_decode($v['attr_value_format'], true);
}
}
}
return $attribute_list;
}
}
/**
* 获取SKU商品列表
* @return array
*/
public function getGoodsSkuList()
{
if (request()->isAjax()) {
$goods_id = input("goods_id", 0);
$goods_model = new GoodsModel();
$res = $goods_model->getGoodsSkuList([['goods_id', '=', $goods_id], ['site_id', '=', $this->site_id]], 'sku_id,sku_name,price,market_price,cost_price,stock,weight,volume,sku_no,sale_num,sku_image,spec_name,goods_id,stock_alarm,is_consume_discount,member_price,discount_method,discount_config,verify_num');
if (!empty($res['data'])) {
$res['data'] = $goods_model->getSkuMemberPrice($res['data'], $this->site_id);
}
return $res;
}
}
/**
* 商品选择组件
* @return \multitype
*/
public function goodsSelect()
{
if (request()->isAjax()) {
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$search_text = input('search_text', '');
$goods_id = input('goods_id', 0);
$goods_ids = input('goods_ids', '');
$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', "");
$label_id = input('label_id', "");
$select_type = input('select_type', 'all');
$usable_goods_class = input('usable_goods_class', '');
$is_weigh = input('is_weigh', 0); // 是否支持称重
if (!empty($promotion) && addon_is_exit($promotion)) {
$promotion_name = input('promotion_name', '');// 营销活动
$goods_list = event('GoodsListPromotion', [
'page' => $page,
'page_size' => $page_size,
'site_id' => $this->site_id,
'promotion' => $promotion,
'promotion_name' => $promotion_name,
//筛选参数
'category_id' => $category_id,
'select_type' => $select_type,
'goods_ids' => $goods_ids,
'label_id' => $label_id,
'goods_class' => $goods_class,
'goods_name' => $search_text,
], true);
} else {
$goods_model = new GoodsModel();
$condition = [
['is_delete', '=', 0],
['goods_state', '=', 1],
['goods_stock', '>', 0],
['site_id', '=', $this->site_id]
];
if ($is_weigh == 0) {
$condition[] = ['goods_class', '<>', 6]; // 排除称重商品
}
if (!empty($search_text)) {
$goods_sku_list = $goods_model->getGoodsSkuList([['sku_no', 'like', '%' . $search_text . '%']], 'goods_id')['data'];
$goods_id_arr = array_unique(array_column($goods_sku_list, 'goods_id'));
if (!empty($goods_id_arr)) {
$goods_ids = join(',', $goods_id_arr);
$condition[] = ['', 'exp', \think\facade\Db::raw("goods_name like '%{$search_text}%' or goods_id in ({$goods_ids})")];
} else {
$condition[] = ['goods_name', 'like', "%{$search_text}%"];
}
}
if ($is_virtual !== "") {
$condition[] = ['is_virtual', '=', $is_virtual];
}
if (!empty($goods_id)) {
$condition[] = ['goods_id', '=', $goods_id];
}
if ($select_type == 'selected') {
$condition[] = ['goods_id', 'in', $goods_ids];
}
if (!empty($category_id)) {
$condition[] = ['category_id', 'like', '%,' . $category_id . ',%'];
}
if (!empty($promotion_type)) {
$condition[] = ['promotion_addon', 'like', "%{$promotion_type}%"];
}
if (!empty($label_id)) {
$condition[] = ['label_id', '=', $label_id];
}
if ($goods_class !== "") {
$condition[] = ['goods_class', '=', $goods_class];
}
if ($usable_goods_class != '') {
$condition[] = ['goods_class', 'in', $usable_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];
}
$config_model = new ConfigModel();
$sort_config = $config_model->getGoodsSort($this->site_id);
$sort_config = $sort_config['data']['value'];
$order = 'sort ' . $sort_config['type'] . ',create_time desc';
$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_list['data']['list'][$k]['sku_list'] = $goods_model->getGoodsSkuList([['goods_id', '=', $v['goods_id']], ['site_id', '=', $this->site_id]], 'sku_id,sku_name,price,stock,sku_image,goods_id,goods_class_name', 'price asc')['data'];
}
}
}
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
$goods_type = input('goods_type', ''); //查找商品类型
$is_disabled_goods_type = input('is_disabled_goods_type', 0); //是否禁用商品类型筛选 0开启 1关闭
$usable_goods_class = input('usable_goods_class', ''); // 可选择的商品类型
$is_weigh = input('is_weigh', 0); // 是否支持称重
$this->assign('is_disabled_goods_type', $is_disabled_goods_type);
$this->assign('goods_type', $goods_type);
$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);
$this->assign('all_goodsclass', event('GoodsClass'));
$this->assign('usable_goods_class', explode(',', $usable_goods_class));
$this->assign('is_weigh', $is_weigh);
// 营销活动
$goods_promotion_type = event('GoodsPromotionType');
$this->assign('promotion_type', $goods_promotion_type);
// 商品分组
$goods_label_model = new GoodsLabelModel();
$label_list = $goods_label_model->getLabelList([['site_id', '=', $this->site_id]], 'id,label_name', 'sort asc')['data'];
$this->assign("label_list", $label_list);
//分类过滤
if (!empty($promotion) && addon_is_exit($promotion)) {
$category_id_arr = event('GoodsListCategoryIds', [
'promotion' => $promotion,
'site_id' => $this->site_id,
], true)['data'] ?? [];
} else {
$goods_model = new GoodsModel();
$category_id_arr = $goods_model->getGoodsCategoryIds([
['is_delete', '=', 0],
['goods_state', '=', 1],
['goods_stock', '>', 0],
['site_id', '=', $this->site_id],
])['data'];
}
$goods_category_model = new GoodsCategoryModel();
$field = 'category_id,category_name as title,pid';
$list = $goods_category_model->getCategoryList([
['site_id', '=', $this->site_id],
['category_id', 'in', $category_id_arr]
], $field)['data'];
$tree = list_to_tree($list, 'category_id', 'pid', 'children', 0);
$this->assign("category_list", $tree);
$this->assign('virtualcard_exit', addon_is_exit('virtualcard', $this->site_id));
$this->assign('cardservice_exit', addon_is_exit('cardservice', $this->site_id));
$goods_model = new GoodsModel();
$goods_model->getGoodsTotalCount();
return $this->fetch("goods/goods_select");
}
}
/***********************************************************商品评价**************************************************/
/**
* 商品评价
*/
public function evaluate()
{
$goods_evaluate = new GoodsEvaluateModel();
if (request()->isAjax()) {
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$explain_type = input('explain_type', ''); //1好评2中评3差评
$is_show = input('is_show', ''); //1显示 0隐藏
$search_text = input('search_text', ''); //搜索值
$search_type = input('search_type', ''); //搜索类型
$start_time = input('start_time', '');
$end_time = input('end_time', '');
$goods_id = input('goods_id', '');
$is_audit = input('is_audit', '');
if (!empty($is_audit)) {
if ($is_audit == 1) {
$condition[] =
["is_audit", "=", 0];
} else if ($is_audit == 2) {
$condition[] =
["is_audit", "=", 1];
} else if ($is_audit == 3) {
$condition[] =
["is_audit", "=", 2];
}
}
$condition[] =
["site_id", "=", $this->site_id];
//评分类型
if ($explain_type != "") {
$condition[] = ["explain_type", "=", $explain_type];
}
if ($is_show != "") {
$condition[] = ["is_show", "=", $is_show];
}
if ($search_text != "") {
$condition[] = [$search_type, "like", '%' . $search_text . '%'];
}
if ($goods_id != "") {
$condition[] = ['goods_id', "=", $goods_id];
}
if (!empty($start_time) && empty($end_time)) {
$condition[] = ["create_time", ">=", date_to_time($start_time)];
} elseif (empty($start_time) && !empty($end_time)) {
$condition[] = ["create_time", "<=", date_to_time($end_time)];
} elseif (!empty($start_time) && !empty($end_time)) {
$condition[] = ['create_time', 'between', [date_to_time($start_time), date_to_time($end_time)]];
}
return $goods_evaluate->getEvaluatePageList($condition, $page_index, $page_size, "is_audit asc, create_time desc");
} else {
$goods_id = input('goods_id', '');
$this->assign('goods_id', $goods_id);
return $this->fetch("goods/evaluate");
}
}
/**
* 商品评价删除
*/
public function deleteEvaluate()
{
if (request()->isAjax()) {
$goods_evaluate = new GoodsEvaluateModel();
$evaluate_ids = input("evaluate_ids", 0);
return $goods_evaluate->deleteEvaluate($evaluate_ids);
}
}
/**
* 修改商品评价审核状态
*/
public function modifyAuditEvaluate()
{
if (request()->isAjax()) {
$goods_evaluate = new GoodsEvaluateModel();
$evaluate_ids = input("evaluate_ids", '');
$is_audit = input('is_audit', 0);
$data = [
'is_audit' => $is_audit
];
$condition = [
['evaluate_id', 'in', $evaluate_ids],
['is_audit', '=', 0],
['site_id', '=', $this->site_id],
];
$res = $goods_evaluate->modifyAuditEvaluate($data, $condition);
return $res;
}
}
/**
* 修改商品追评审核状态
*/
public function modifyAgainAuditEvaluate()
{
if (request()->isAjax()) {
$goods_evaluate = new GoodsEvaluateModel();
$evaluate_ids = input("evaluate_ids", '');
$again_is_audit = input('again_is_audit', 0);
$data = [
'again_is_audit' => $again_is_audit
];
$condition = [
['evaluate_id', 'in', $evaluate_ids],
['again_is_audit', '=', 0],
['site_id', '=', $this->site_id],
];
$res = $goods_evaluate->modifyAgainAuditEvaluate($data, $condition);
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,site_id')['data'];
if (!empty($goods_sku_info)) {
$res = $goods_model->urlQrcode('/pages_market/goods/detail', ['goods_id' => $goods_id], 'goods', $this->site_id);
return $res;
}
}
/**
* 商品评价回复
*/
public function evaluateApply()
{
if (request()->isAjax()) {
$goods_evaluate = new GoodsEvaluateModel();
$evaluate_id = input("evaluate_id", 0);
$explain = input("explain", 0);
$is_first_explain = input("is_first_explain", 0);// 是否第一次回复
$data = [
'evaluate_id' => $evaluate_id
];
if ($is_first_explain == 0) {
$data['explain_first'] = $explain;
} elseif ($is_first_explain == 1) {
$data['again_explain'] = $explain;
}
return $goods_evaluate->evaluateApply($data);
}
}
/**
* 删除商品评价回复
*/
public function deleteContent()
{
if (request()->isAjax()) {
$goods_evaluate = new GoodsEvaluateModel();
$evaluate_id = input("evaluate_id", 0);
$is_first_explain = input("is_first", 0);// 0 第一次回复1 追评回复
$data = [];
if ($is_first_explain == 0) {
$data['explain_first'] = '';
} elseif ($is_first_explain == 1) {
$data['again_explain'] = '';
}
$condition = [
['evaluate_id', '=', $evaluate_id],
['site_id', '=', $this->site_id],
];
return $goods_evaluate->editEvaluate($data, $condition);
}
}
/**
* 商品批量设置
*/
public function batchSet()
{
if (request()->isAjax()) {
$type = input("type", '');
$goods_ids = input("goods_ids", '');
$field = input("field", '');
$data = !empty($field) ? json_decode($field, true) : [];
$goods_model = new GoodsModel();
$result = error(-1, '操作失败');
try {
if (!empty($goods_ids)) {
switch ($type) {
case 'group':
$result = $goods_model->modifyGoodsLabel($data['group'], $this->site_id, $goods_ids);
break;
case 'service':
$result = $goods_model->modifyGoodsService($data['server_ids'], $this->site_id, $goods_ids);
break;
case 'sale':
$result = $goods_model->modifyGoodsVirtualSale($data['sale'], $this->site_id, $goods_ids);
break;
case 'purchase_limit':
$result = $goods_model->modifyGoodsPurchaseLimit($data['max_buy'], $this->site_id, $goods_ids);
break;
case 'shipping':
$result = $goods_model->modifyGoodsShippingTemplate($data['is_free_shipping'], $data['shipping_template'], $this->site_id, $goods_ids);
break;
case 'category':
$result = $goods_model->modifyGoodsCategoryId($data['category_id'], $this->site_id, $goods_ids);
//$result = ',' . implode(',', $data[ 'category_id' ]) . ',';
break;
case 'shop_intor':
$result = $goods_model->modifyGoodsShopIntor($data['recom_way'], $this->site_id, $goods_ids);
break;
case 'member_price':
$result = $goods_model->modifyGoodsConsumeDiscount($data['is_consume_discount'], $this->site_id, $goods_ids);
break;
case 'stock':
$sku_list = $goods_model->getGoodsSkuList([['goods_id', 'in', $goods_ids], ['goods_class', 'in', '1,2,4,5,6']], 'sku_id,goods_id,stock,goods_class')['data'] ?? [];
// 实物,虚拟,卡项,服务,称重
$result = $goods_model->editGoodsSkuStock($sku_list, $data['stock'], $data['stock_type'], $this->site_id);
break;
case 'price':
$batch_model = new Batch();
$params = array(
'site_id' => $this->site_id,
'type' => $type,
'goods_ids' => $goods_ids,
);
$result = $batch_model->setPrice(array_merge($params, $data));
break;
case 'goods_form':
$result = $goods_model->modifyGoodsForm($data['form_id'], $this->site_id, $goods_ids);
break;
}
}
} catch (\Exception $e) {
$result = error(-1, $e->getMessage());
}
return $result;
}
}
/**
* 热门搜索关键词
* @return mixed
*/
public function hotSearchWords()
{
$config_model = new ConfigModel();
if (request()->isAjax()) {
$words = input("words", []);
$data = [
'words' => implode(',', $words)
];
$res = $config_model->setHotSearchWords($data, $this->site_id, $this->app_module);
return $res;
} else {
$this->forthMenu();
$hot_search_words = $config_model->getHotSearchWords($this->site_id, $this->app_module);
$hot_search_words = $hot_search_words['data']['value'];
$words_array = [];
if (!empty($hot_search_words['words'])) {
$words_array = explode(',', $hot_search_words['words']);
}
$hot_search_words['words_array'] = $words_array;
$this->assign("hot_search_words", $hot_search_words);
return $this->fetch('goods/hot_search_words');
}
}
/**
* 猜你喜欢
* @return mixed
*/
public function guessYouLike()
{
$config_model = new ConfigModel();
if (request()->isAjax()) {
$value = input('value', '');
if (!empty($value)) {
$value = json_decode($value, true);
$res = $config_model->setGuessYouLike($value, $this->site_id, $this->app_module);
return $res;
}
} else {
$config = $config_model->getGuessYouLike($this->site_id, $this->app_module)['data']['value'];
$this->assign("config", $config);
$this->assign('store_is_exit', addon_is_exit('store', $this->site_id));
return $this->fetch('goods/guess_you_like');
}
}
/**
* 商品列表配置
* @return mixed
*/
public function goodsListConfig()
{
$config_model = new ConfigModel();
if (request()->isAjax()) {
$value = input('value', '');
if (!empty($value)) {
$value = json_decode($value, true);
$res = $config_model->setGoodsListConfig($value, $this->site_id, $this->app_module);
return $res;
}
} else {
$config = $config_model->getGoodsListConfig($this->site_id, $this->app_module)['data']['value'];
$this->assign("config", $config);
$this->assign('store_is_exit', addon_is_exit('store', $this->site_id));
return $this->fetch('goods/goods_list_config');
}
}
/**
* 默认搜索关键词
* @return mixed
*/
public function defaultSearchWords()
{
$config_model = new ConfigModel();
if (request()->isAjax()) {
$default_data = [
'words' => input("default_words", "")
];
$config_model->setDefaultSearchWords($default_data, $this->site_id, $this->app_module);
$words = input("words", []);
$data = [
'words' => implode(',', $words)
];
$res = $config_model->setHotSearchWords($data, $this->site_id, $this->app_module);
return $res;
} else {
$this->forthMenu();
$default_search_words = $config_model->getDefaultSearchWords($this->site_id, $this->app_module);
$default_search_words = $default_search_words['data']['value'];
$this->assign("default_search_words", $default_search_words);
$hot_search_words = $config_model->getHotSearchWords($this->site_id, $this->app_module);
$hot_search_words = $hot_search_words['data']['value'];
$words_array = [];
if (!empty($hot_search_words['words'])) {
$words_array = explode(',', $hot_search_words['words']);
}
$hot_search_words['words_array'] = $words_array;
$this->assign("hot_search_words", $hot_search_words);
return $this->fetch('goods/default_search_words');
}
}
/**
* 复制商品
* @return array
*/
public function copyGoods()
{
if (request()->isAjax()) {
$goods_id = input('goods_id', 0);
$goods_model = new GoodsModel();
$res = $goods_model->copyGoods($goods_id, $this->site_id);
return $res;
}
}
/**
* 会员商品收藏
*/
public function memberGoodsCollect()
{
$goods_collect_model = new GoodsCollect();
$member_id = input('member_id', 0);
if (request()->isAjax()) {
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$condition = [];
$condition[] = ['gc.site_id', '=', $this->site_id];
$condition[] = ['gc.member_id', '=', $member_id];
$order = 'gc.create_time desc';
$field = 'gc.collect_id,gc.create_time,gc.member_id, gc.goods_id, gc.sku_id,gc.sku_name, gc.sku_price, gc.sku_image,g.goods_name,g.is_free_shipping,sku.promotion_type,sku.member_price,sku.discount_price,g.sale_num,g.price,g.market_price,g.is_virtual,sku.collect_num,g.goods_state';
return $goods_collect_model->getCollectPageList($condition, $page, $page_size, $order, $field);
} else {
$this->forthMenu(['member_id' => $member_id]);
$this->assign('member_id', $member_id);
return $this->fetch('goods/member_goods_collect');
}
}
/**
* 会员浏览记录
*/
public function memberGoodsBrowse()
{
$member_id = input('member_id', 0);
$goods_browse_model = new GoodsBrowse();
if (request()->isAjax()) {
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$search = input('search', '');
$condition = [];
$condition[] = ['gb.site_id', '=', $this->site_id];
$condition[] = ['gb.member_id', '=', $member_id];
if (!empty($search)) {
$condition[] = ['gs.sku_name', 'like', '%' . $search . '%'];
}
$order = 'browse_time desc';
$field = 'gb.*,gs.sku_name,gs.sku_image,gs.price,gs.goods_state,gs.stock,gs.click_num';
$alias = 'gb';
$join = [
['goods_sku gs', 'gs.sku_id = gb.sku_id', 'right']
];
return $goods_browse_model->getBrowsePageList($condition, $page, $page_size, $order, $field, $alias, $join);
} else {
$this->forthMenu(['member_id' => $member_id]);
$this->assign('member_id', $member_id);
return $this->fetch('goods/member_goods_browse');
}
}
/**
* 商品浏览记录
*/
public function goodsBrowse()
{
$goods_id = input('goods_id', 0);
$goods_browse_model = new GoodsBrowse();
if (request()->isAjax()) {
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$search = input('search', '');
$condition = [];
$condition[] = ['gb.site_id', '=', $this->site_id];
if ($goods_id > 0) {
$condition[] = ['gb.goods_id', '=', $goods_id];
}
if (!empty($search))
$condition[] = ['gs.sku_name', 'like', '%' . $search . '%'];
$order = 'browse_time desc';
$field = 'gb.*,gs.sku_name,gs.sku_image,gs.price,gs.goods_state,gs.stock,gs.click_num,m.nickname,m.headimg';
$alias = 'gb';
$join = [
['goods_sku gs', 'gs.sku_id = gb.sku_id', 'left'],
['member m', 'm.member_id = gb.member_id', 'left']
];
$res = $goods_browse_model->getBrowsePageList($condition, $page, $page_size, $order, $field, $alias, $join);
foreach ($res['data']['list'] as $k => $v) {
$res['data']['list'][$k]['stock'] = numberFormat($res['data']['list'][$k]['stock']);
}
return $res;
} else {
$this->assign('goods_id', $goods_id);
return $this->fetch('goods/goods_browse');
}
}
/**
* 商品排序
*/
public function goodssort()
{
$config_model = new ConfigModel();
if (request()->isAjax()) {
$type = input("type", 'asc');
$default_value = input("default_value", '0');
$data = [
'type' => trim($type),
'default_value' => trim($default_value),
];
$res = $config_model->setGoodsSort($data, $this->site_id, $this->app_module);
return $res;
} else {
$this->forthMenu();
$goods_sort_confog = $config_model->getGoodsSort($this->site_id, $this->app_module);
$goods_sort_confog = $goods_sort_confog['data']['value'];
$this->assign("goods_sort_confog", $goods_sort_confog);
return $this->fetch('goods/goods_sort');
}
}
/**
* 商品导入
*/
public function import()
{
$import_model = new GoodsImport();
$type = input('type');
if (request()->isAjax()) {
$file = request()->file('xlsx');
if (empty($file)) {
return $import_model->error();
}
$tmp_name = $file->getPathname();//获取上传缓存文件
$data = (new GoodsImport())->readGoodsExcel($tmp_name);
if ($data['code'] < 0) {
return $data;
}
$result = (new GoodsImport())->importGoods($data['data'], $this->site_id, $type);
return $result;
} else {
return $this->fetch("goods/import");
}
}
public function importRecordList()
{
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$goodsimport_model = new GoodsImport();
if (request()->isAjax()) {
$start_time = input('start_time', '');
$end_time = input('end_time', '');
$condition = [['site_id', '=', $this->site_id]];
if (!empty($start_time) && empty($end_time)) {
$condition[] = ["import_time", ">=", date_to_time($start_time)];
} elseif (empty($start_time) && !empty($end_time)) {
$condition[] = ["import_time", "<=", date_to_time($end_time)];
} elseif (!empty($start_time) && !empty($end_time)) {
$condition[] = ['import_time', 'between', [date_to_time($start_time), date_to_time($end_time)]];
}
$res = $goodsimport_model->getImportPageList($condition, $page_index, $page_size);
if (!empty($res['data']['list'])) {
foreach ($res['data']['list'] as $k => &$v) {
$v['import_time'] = time_to_date($v['import_time']);
}
}
return $res;
} else {
return $this->fetch("goods/import_record_list");
}
}
public function download()
{
$id = input('id', '0');
(new GoodsImport())->downloadFailData($id, $this->site_id);
}
/**
* 商品海报
*/
public function poster()
{
$goods_poster_model = new GoodsPoster();
if (request()->isAjax()) {
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$keywords = input('keywords', '');
if (!empty($keywords)) {
$condition[] = ['poster_name', 'like', '%' . $keywords . '%'];
}
$condition[] = ['site_id', '=', $this->site_id];
$result = $goods_poster_model->getPosterPageList($condition, $page, $page_size);
return $result;
} else {
return $this->fetch("goods/goods_poster_list");
}
}
/**
* 商品海报添加
*/
public function editPoster()
{
$goods_poster_model = new GoodsPoster();
if (request()->isAjax()) {
$poster_name = input('poster_name', '');
$json_data = input('json_data', '');
$poster_id = input('poster_id', '');
if (empty($poster_id)) {
$data['create_time'] = time();
} else {
$data['modify_time'] = time();
}
$data['poster_id'] = $poster_id;
$data['poster_name'] = $poster_name;
$data['json_data'] = $json_data;
$data['poster_type'] = 1;
$data['site_id'] = $this->site_id;
$result = $goods_poster_model->addPoster($data);
return $result;
} else {
$poster_id = input('poster_id', '');
if (!empty($poster_id)) {
$goods_poster_data = $goods_poster_model->getPosterInfo($poster_id, $this->site_id);
$this->assign('poster_data', $goods_poster_data['data']);
}
return $this->fetch("goods/goods_edit_poster");
}
}
/**
* 修改海报启用状态
*/
public function editStatus()
{
$goods_poster_model = new GoodsPoster();
$poster_id = input('poster_id', 0);
$status = input('status', '');
$data = [
'poster_id' => $poster_id,
'status' => $status,
'site_id' => $this->site_id,
'modify_time' => time()
];
return $goods_poster_model->addPoster($data);
}
/**
* 删除海报
*/
public function deletePoster()
{
$goods_poster_model = new GoodsPoster();
$poster_id = input('poster_id', 0);
return $goods_poster_model->deletePoster($poster_id, $this->site_id);
}
public function verify()
{
$goods_id = input("goods_id", "0");
$virtual_goods_model = new \app\model\goods\VirtualGoods();
if (request()->isAjax()) {
$start_time = input("start_time", '');
$end_time = input("end_time", '');
$nickname = input("nickname", '');
$is_verify = input("is_verify", "all");
$verify_code = input("verify_code", "");
$field = 'gv.*, m.nickname,m.headimg';
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$alias = 'gv';
$condition = [
["gv.site_id", "=", $this->site_id],
["gv.goods_id", "=", $goods_id],
];
if ($nickname) $condition[] = ['m.nickname', 'like', '%' . $nickname . '%'];
if ($verify_code) $condition[] = ['gv.code', '=', $verify_code];
$order = "gv.id desc";
$join = [
[
'member m',
'm.member_id = gv.member_id',
'left'
]
];
if ($is_verify != "all") {
$condition[] = ["gv.is_veirfy", "=", $is_verify];
}
$list = $virtual_goods_model->getVirtualGoodsPageList($condition, $page_index, $page_size, $order, $field, $alias, $join);
return $list;
}
$this->assign('goods_id', $goods_id);
$goods_model = new GoodsModel();
$goods_info = $goods_model->getGoodsInfo([['goods_id', '=', $goods_id], ['site_id', '=', $this->site_id]], 'goods_id, goods_name,goods_image,price,goods_state,goods_stock,sale_num');
$this->assign('goods_info', $goods_info['data']);
$verify_count = $virtual_goods_model->getVirtualGoodsInfo([['goods_id', '=', $goods_id], ['site_id', '=', $this->site_id]], 'count(id) as total_count, sum(verify_use_num) as verify_use_num')['data'] ?? [];
$this->assign('total_count', $verify_count['total_count'] ?? 0);
$this->assign('verify_use_num', $verify_count['verify_use_num'] ?? 0);
return $this->fetch("goods/verify");
}
/**
* 商品详情配置
* @return mixed
*/
public function goodsDetailConfig()
{
$config_model = new ConfigModel();
if (request()->isAjax()) {
$data = [
'nav_bar_switch' => input('nav_bar_switch', 0),
'introduction_color' => input('introduction_color', ''),
];
$res = $config_model->setGoodsDetailConfig($data, $this->site_id, $this->app_module);
return $res;
} else {
$config = $config_model->getGoodsDetailConfig($this->site_id, $this->app_module)['data']['value'];
$this->assign("config", $config);
return $this->fetch('goods/goods_detail_config');
}
}
/**
* 获取运费模板
* @return array
*/
public function getExpressTemplateList()
{
if (request()->isAjax()) {
$express_template_model = new ExpressTemplateModel();
$express_template_list = $express_template_model->getExpressTemplateList([['site_id', "=", $this->site_id]], 'template_id,template_name', 'is_default desc') ?? [];
// foreach ($express_template_list[ 'data' ] as $k => $v) {
// $template_item_condition = array (
// [ 'template_id', '=', $v[ 'template_id' ] ],
// );
// $template_item_list = $express_template_model->getExpressTemplateItemList($template_item_condition)[ 'data' ] ?? [];
// $express_template_list[ 'data' ][ $k ][ 'template_item_list' ] = $template_item_list;
// }
return $express_template_list;
}
}
/**
* 社群二维码
*/
public function communityQrCode()
{
$goods_community_model = new GoodsCommunityQrCode();
if (request()->isAjax()) {
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$condition = [];
$keywords = input('keywords', '');
if (!empty($keywords)) {
$condition[] = ['qr_name', 'like', '%' . $keywords . '%'];
}
$condition[] = ['site_id', '=', $this->site_id];
$order = 'create_time desc';
$field = 'qr_id, qr_img, qr_name, community_describe,qr_state, create_time, site_id';
return $goods_community_model->getQrPageList($condition, $page, $page_size, $order, $field);
} else {
return $this->fetch('goods/community_qrcode');
}
}
/**
* 社群二维码组件调用
*/
public function QrCodeLists()
{
$goods_community_model = new GoodsCommunityQrCode();
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$condition = [];
$condition[] = ['site_id', '=', $this->site_id];
$order = 'create_time desc';
$field = 'qr_id, qr_img, qr_name, community_describe,qr_state, create_time, site_id';
$res_data = $goods_community_model->getQrPageList($condition, $page, $page_size, $order, $field);
return $res_data;
}
/**
* 添加社群二维码
*/
public function addQrCode()
{
$goods_community_model = new GoodsCommunityQrCode();
if (request()->isAjax()) {
$qr_name = input('qr_name', '');
$qr_img = input('qr_img', '');
$community_describe = input('community_describe', '');
$templateId = input('templateId', '');
$data = [
'qr_name' => $qr_name,
'qr_img' => $qr_img,
'template_id' => $templateId,
'community_describe' => $community_describe,
'qr_state' => 0,
'create_time' => time(),
'site_id' => $this->site_id
];
return $goods_community_model->addQrCode($data);
} else {
return $this->fetch('goods/add_qrcode');
}
}
/**
* 编辑社群二维码
*/
public function editQrCode()
{
$goods_community_model = new GoodsCommunityQrCode();
if (request()->isAjax()) {
$qr_id = input('qr_id', '0');
$qr_name = input('qr_name', '');
$qr_img = input('qr_img', '');
$community_describe = input('community_describe', '');
$data = [
'qr_id' => $qr_id,
'qr_name' => $qr_name,
'qr_img' => $qr_img,
'community_describe' => $community_describe,
'qr_state' => 0,
'modify_time' => time(),
'site_id' => $this->site_id
];
return $goods_community_model->addQrCode($data);
} else {
$qr_id = input('qr_id', '0');
$qr_data = $goods_community_model->getQrInfo($qr_id, $this->site_id);
$this->assign('qr_data', $qr_data['data']);
return $this->fetch('goods/edit_qrcode');
}
}
/**
* 修改社群二维码状态
*/
public function editState()
{
$goods_community_model = new GoodsCommunityQrCode();
$qr_id = input('qr_id', '0');
$state = input('state', '');
$data = [
'qr_id' => $qr_id,
'qr_state' => $state,
'modify_time' => time(),
'site_id' => $this->site_id
];
return $goods_community_model->addQrCode($data);
}
/**
* 删除社群二维码
*/
public function deleteQr()
{
$goods_community_model = new GoodsCommunityQrCode();
$qr_id = input('qr_id', '0');
return $goods_community_model->deleteQrCode($qr_id, $this->site_id);
}
}