303 lines
11 KiB
PHP
303 lines
11 KiB
PHP
|
<?php
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | likeshop开源商城系统
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
|
|||
|
// | gitee下载:https://gitee.com/likeshop_gitee
|
|||
|
// | github下载:https://github.com/likeshop-github
|
|||
|
// | 访问官网:https://www.likeshop.cn
|
|||
|
// | 访问社区:https://home.likeshop.cn
|
|||
|
// | 访问手册:http://doc.likeshop.cn
|
|||
|
// | 微信公众号:likeshop技术社区
|
|||
|
// | likeshop系列产品在gitee、github等公开渠道开源版本可免费商用,未经许可不能去除前后端官方版权标识
|
|||
|
// | likeshop系列产品收费版本务必购买商业授权,购买去版权授权后,方可去除前后端官方版权标识
|
|||
|
// | 禁止对系统程序代码以任何目的,任何形式的再发布
|
|||
|
// | likeshop团队版权所有并拥有最终解释权
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | author: likeshop.cn.team
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
namespace app\shop\controller\goods;
|
|||
|
|
|||
|
|
|||
|
use app\common\basics\ShopBase;
|
|||
|
use app\common\enum\GoodsEnum;
|
|||
|
use app\common\model\goods\GoodsBrand;
|
|||
|
use app\common\model\goods\GoodsUnit;
|
|||
|
use app\common\model\Freight;
|
|||
|
use app\common\model\goods\Supplier;
|
|||
|
use app\common\model\goods\Goods as GoodsModel;
|
|||
|
use app\common\logic\CommonLogic;
|
|||
|
use app\common\server\ArrayServer;
|
|||
|
use app\common\server\JsonServer;
|
|||
|
use app\shop\logic\goods\GoodsLogic;
|
|||
|
use app\shop\validate\goods\GoodsMoreSpec;
|
|||
|
use app\shop\validate\goods\GoodsMoreSpecLists;
|
|||
|
use app\shop\validate\goods\GoodsOneSpec;
|
|||
|
use app\shop\validate\goods\GoodsStatusValidate;
|
|||
|
use app\shop\validate\goods\GoodsValidate;
|
|||
|
use app\admin\logic\goods\CategoryLogic as MallCategoryLogic;
|
|||
|
use app\shop\logic\goods\CategoryLogic as ShopCategoryLogic;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 商品管理
|
|||
|
* Class Goods
|
|||
|
* @package app\shop\controller\goods
|
|||
|
*/
|
|||
|
class Goods extends ShopBase
|
|||
|
{
|
|||
|
/**
|
|||
|
* Notes: 列表
|
|||
|
* @author 段誉(2021/4/15 10:49)
|
|||
|
*/
|
|||
|
public function lists()
|
|||
|
{
|
|||
|
if ($this->request->isAjax()) {
|
|||
|
$get = $this->request->get();
|
|||
|
$get['shop_id'] = $this->shop_id;
|
|||
|
return JsonServer::success('', GoodsLogic::lists($get));
|
|||
|
}
|
|||
|
$cate_list = MallCategoryLogic::categoryTreeeTree();
|
|||
|
$shop_cate_list = ShopCategoryLogic::listAll($this->shop_id);
|
|||
|
$statistics = GoodsLogic::statistics($this->shop_id);
|
|||
|
return view('', [
|
|||
|
'statistics' => $statistics,
|
|||
|
'cate_list' => $cate_list, //平台分类
|
|||
|
'shop_cate_list' => $shop_cate_list, //商家分类
|
|||
|
'goods_type' => GoodsEnum::getTypeDesc()
|
|||
|
]);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* Notes: 添加
|
|||
|
* @author 段誉(2021/4/15 10:49)
|
|||
|
*/
|
|||
|
public function add()
|
|||
|
{
|
|||
|
if ($this->request->isAjax()) {
|
|||
|
$post = $this->request->post();
|
|||
|
$post['shop_id'] = $this->shop_id;
|
|||
|
|
|||
|
//主表验证
|
|||
|
(new GoodsValidate())->goCheck('add', ['shop_id' => $this->shop_id]);
|
|||
|
|
|||
|
//单规格验证
|
|||
|
if ($post['spec_type'] == 1) {
|
|||
|
(new GoodsOneSpec())->goCheck();
|
|||
|
}
|
|||
|
|
|||
|
//多规格验证
|
|||
|
$spec_lists = [];
|
|||
|
if ($post['spec_type'] == 2) {
|
|||
|
$spec_lists = $post;
|
|||
|
unset($spec_lists['goods_image']);
|
|||
|
unset($spec_lists['spec_id']);
|
|||
|
unset($spec_lists['spec_name']);
|
|||
|
unset($spec_lists['spec_values']);
|
|||
|
unset($spec_lists['spec_value_ids']);
|
|||
|
unset($spec_lists['delivery_type']);
|
|||
|
|
|||
|
$spec_lists = ArrayServer::form_to_linear($spec_lists);
|
|||
|
|
|||
|
//规格验证
|
|||
|
if (empty($spec_lists)) {
|
|||
|
return JsonServer::error('至少添加一个规格');
|
|||
|
}
|
|||
|
// 规格项及规格值是否重复验证
|
|||
|
(new GoodsMoreSpec())->goCheck();
|
|||
|
|
|||
|
//规格商品列表验证
|
|||
|
foreach ($spec_lists as $v) {
|
|||
|
(new GoodsMoreSpecLists())->goCheck('', $v);
|
|||
|
}
|
|||
|
// 校验规格
|
|||
|
$total_stock = array_sum(array_column($spec_lists, 'stock'));
|
|||
|
if ($total_stock <= 0) {
|
|||
|
return JsonServer::error('至少有一个规格的库存大于0');
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 添加商品
|
|||
|
$result = GoodsLogic::add($this->shop_id, $post, $spec_lists);
|
|||
|
|
|||
|
if (true !== $result) {
|
|||
|
return JsonServer::error(GoodsLogic::getError() ?: '操作失败');
|
|||
|
}
|
|||
|
return JsonServer::success('添加成功');
|
|||
|
}
|
|||
|
|
|||
|
return view('', [
|
|||
|
'category_lists' => json_encode(MallCategoryLogic::getAllTree(), JSON_UNESCAPED_UNICODE),
|
|||
|
'shop_category_lists' => json_encode(ShopCategoryLogic::listAll($this->shop_id), JSON_UNESCAPED_UNICODE),
|
|||
|
'brand_lists' => json_encode(GoodsBrand::getNameColumn(), JSON_UNESCAPED_UNICODE),
|
|||
|
'supplier_lists' => json_encode(Supplier::getNameColumn($this->shop_id), JSON_UNESCAPED_UNICODE),
|
|||
|
'unit_lists' => json_encode(GoodsUnit::getNameColumn(), JSON_UNESCAPED_UNICODE),
|
|||
|
'freight_lists' => json_encode(Freight::getNameColumn($this->shop_id), JSON_UNESCAPED_UNICODE),
|
|||
|
]);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* @notes 编辑
|
|||
|
* @return \think\response\Json|\think\response\View
|
|||
|
* @author 段誉
|
|||
|
* @date 2021/4/15 10:49
|
|||
|
*/
|
|||
|
public function edit()
|
|||
|
{
|
|||
|
if ($this->request->isAjax()) {
|
|||
|
$post = $this->request->post();
|
|||
|
$post['del'] = 0;
|
|||
|
$post['id'] = $post['goods_id'];
|
|||
|
|
|||
|
//主表验证
|
|||
|
(new GoodsValidate())->goCheck(null, ['shop_id' => $this->shop_id]);
|
|||
|
|
|||
|
//单规格验证
|
|||
|
if ($post['spec_type'] == 1) {
|
|||
|
(new GoodsOneSpec())->goCheck();
|
|||
|
}
|
|||
|
|
|||
|
//多规格验证
|
|||
|
$spec_lists = [];
|
|||
|
if ($post['spec_type'] == 2) {
|
|||
|
$spec_lists = $post;
|
|||
|
unset($spec_lists['goods_image']);
|
|||
|
unset($spec_lists['spec_name']);
|
|||
|
unset($spec_lists['spec_values']);
|
|||
|
unset($spec_lists['spec_id']);
|
|||
|
unset($spec_lists['spec_value_ids']);
|
|||
|
unset($spec_lists['delivery_type']);
|
|||
|
$spec_lists = ArrayServer::form_to_linear($spec_lists);
|
|||
|
|
|||
|
//规格验证
|
|||
|
if (empty($spec_lists)) {
|
|||
|
return JsonServer::error('至少添加一个规格');
|
|||
|
}
|
|||
|
// 规格项验证
|
|||
|
(new GoodsMoreSpec())->goCheck();
|
|||
|
//规格商品列表验证
|
|||
|
foreach ($spec_lists as $v) {
|
|||
|
(new GoodsMoreSpecLists())->goCheck('', $v);
|
|||
|
}
|
|||
|
// 校验规格
|
|||
|
$total_stock = array_sum(array_column($spec_lists, 'stock'));
|
|||
|
if ($total_stock <= 0) {
|
|||
|
return JsonServer::error('至少有一个规格的库存大于0');
|
|||
|
}
|
|||
|
}
|
|||
|
$result = GoodsLogic::edit($post, $spec_lists);
|
|||
|
if (true !== $result) {
|
|||
|
return JsonServer::error(GoodsLogic::getError() ?: '操作失败');
|
|||
|
}
|
|||
|
return JsonServer::success('编辑成功');
|
|||
|
}
|
|||
|
|
|||
|
$goods_id = $this->request->get('goods_id');
|
|||
|
|
|||
|
return view('goods/goods/add', [
|
|||
|
'category_lists' => json_encode(MallCategoryLogic::getAllTree(), JSON_UNESCAPED_UNICODE),
|
|||
|
'shop_category_lists' => json_encode(ShopCategoryLogic::listAll($this->shop_id), JSON_UNESCAPED_UNICODE),
|
|||
|
'brand_lists' => json_encode(GoodsBrand::getNameColumn(), JSON_UNESCAPED_UNICODE),
|
|||
|
'supplier_lists' => json_encode(Supplier::getNameColumn($this->shop_id), JSON_UNESCAPED_UNICODE),
|
|||
|
'unit_lists' => json_encode(GoodsUnit::getNameColumn(), JSON_UNESCAPED_UNICODE),
|
|||
|
'freight_lists' => json_encode(Freight::getNameColumn($this->shop_id), JSON_UNESCAPED_UNICODE),
|
|||
|
'info' => json_encode(GoodsLogic::info($goods_id),JSON_UNESCAPED_UNICODE)
|
|||
|
]);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Notes: 删除
|
|||
|
* @author 段誉(2021/4/15 10:49)
|
|||
|
* @return \think\response\Json
|
|||
|
*/
|
|||
|
public function del()
|
|||
|
{
|
|||
|
if ($this->request->isAjax()) {
|
|||
|
$id = $this->request->post('id');
|
|||
|
(new GoodsValidate())->goCheck('del', ['goods_id' => $id, 'shop_id' => $this->shop_id]);
|
|||
|
$result = GoodsLogic::del($this->shop_id, $id);
|
|||
|
if($result) {
|
|||
|
return JsonServer::success('删除成功');
|
|||
|
}
|
|||
|
return JsonServer::error(GoodsLogic::getError());
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Notes:修改商品字段(上下架、新品推荐、好物优选、猜你喜欢)
|
|||
|
* @throws \think\Exception
|
|||
|
* @throws \think\exception\PDOException
|
|||
|
*/
|
|||
|
public function changeFields(){
|
|||
|
$table = 'goods';
|
|||
|
$pk_name = 'id';
|
|||
|
$pk_value = $this->request->post('id');
|
|||
|
$field = $this->request->post('field');
|
|||
|
$field_value = $this->request->post('value');
|
|||
|
|
|||
|
// 库存校验
|
|||
|
$stock = GoodsModel::where('id', $pk_value)->value('stock');
|
|||
|
if($field_value == 1 && $stock <= 0) {
|
|||
|
return JsonServer::error('库存为0的商品不允许上架');
|
|||
|
}
|
|||
|
$result = CommonLogic::changeTableValue($table,$pk_name,$pk_value,$field,$field_value);
|
|||
|
if($result){
|
|||
|
event('UpdateCollect', ['goods_id' => $pk_value]);
|
|||
|
return JsonServer::success('操作成功');
|
|||
|
}
|
|||
|
return JsonServer::error('操作失败');
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 放回仓库
|
|||
|
*/
|
|||
|
public function backToWarehouse(){
|
|||
|
$id = $this->request->post('id', '', 'intval');
|
|||
|
if(empty($id)) {
|
|||
|
return JsonServer::error('id不存在');
|
|||
|
}
|
|||
|
$result = GoodsLogic::backToWarehouse($id);
|
|||
|
if($result) {
|
|||
|
return JsonServer::success('操作成功');
|
|||
|
}
|
|||
|
return JsonServer::error('操作失败');
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @notes 获取统计数据
|
|||
|
* @author Tab
|
|||
|
* @date 2021/7/13 18:03
|
|||
|
*/
|
|||
|
public function totalCount()
|
|||
|
{
|
|||
|
if ($this->request->isAjax()) {
|
|||
|
return JsonServer::success('获取成功', GoodsLogic::statistics($this->shop_id));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* @notes 批量更新上下架状态
|
|||
|
* @return \think\response\Json|void
|
|||
|
* @author 段誉
|
|||
|
* @date 2022/3/17 11:53
|
|||
|
*/
|
|||
|
public function setStatus()
|
|||
|
{
|
|||
|
if ($this->request->isAjax()) {
|
|||
|
$params = (new GoodsStatusValidate())->goCheck(null, ['shop_id' => $this->shop_id]);
|
|||
|
$result = GoodsLogic::setStatus($params['ids'], $params['status']);
|
|||
|
if($result) {
|
|||
|
return JsonServer::success('操作成功');
|
|||
|
}
|
|||
|
return JsonServer::error(GoodsLogic::getError());
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|