徐总多门店
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

697 lines
23 KiB

<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\controller\admin\v1\diy;
use app\controller\admin\AuthController;
use app\services\activity\newcomer\StoreNewcomerServices;
use app\services\activity\video\VideoServices;
use app\services\article\ArticleServices;
use app\services\diy\DiyServices;
use app\services\other\CacheServices;
use app\services\product\category\StoreProductCategoryServices;
use app\services\product\product\StoreProductServices;
use crmeb\exceptions\AdminException;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use think\facade\App;
/**
* Class Diy
* @package app\controller\admin\v1\diy
*/
class Diy extends AuthController
{
/**
* Diy constructor.
* @param App $app
* @param DiyServices $services
*/
public function __construct(App $app, DiyServices $services)
{
parent::__construct($app);
$this->services = $services;
}
/**
* DIY列表
* @return mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getList()
{
$where = $this->request->getMore([
['status', ''],
['type', 1],
['name', ''],
['version', ''],
]);
$where['is_del'] = 0;
$data = $this->services->getDiyList($where);
return $this->success($data);
}
/**
* 修改模版名称
* @param int $id
* @return mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function updateName(int $id)
{
[$name] = $this->request->postMore([
['name', '']
], true);
$info = $this->services->get($id);
if (!$info) {
return $this->fail('数据不存在');
}
if ($info['name'] == $name) {
return $this->fail('模版名称无任何修改');
}
$info->name = $name;
$info->save();
return $this->success('修改成功');
}
/**
* 保存资源
* @param int $id
* @return mixed
*/
public function saveData(int $id = 0)
{
$data = $this->request->postMore([
['name', ''],
['title', ''],
['value', ''],
['type', 1],
['cover_image', ''],
['is_show', 0],
['is_bg_color', 0],
['is_bg_pic', 0],
['bg_tab_val', 0],
['color_picker', ''],
['bg_pic', ''],
]);
$value = is_string($data['value']) ? json_decode($data['value'], true) : $data['value'];
$infoDiy = $id ? $this->services->get($id, ['is_diy']) : [];
foreach ($value as $key => &$item) {
if ($item['name'] === 'goodList') {
if (isset($item['selectConfig']['list'])) {
unset($item['selectConfig']['list']);
}
if (isset($item['goodsList']['list']) && is_array($item['goodsList']['list'])) {
$limitMax = config('database.page.limitMax', 50);
if (isset($item['numConfig']['val']) && isset($item['tabConfig']['tabVal']) && $item['tabConfig']['tabVal'] == 0 && $item['numConfig']['val'] > $limitMax) {
return $this->fail('您设置得商品个数超出系统限制,最大限制' . $limitMax . '个商品');
}
$item['goodsList']['ids'] = array_column($item['goodsList']['list'], 'id');
unset($item['goodsList']['list'], $item['productList']['list']);
}
} elseif ($item['name'] === 'articleList') {
if (isset($item['selectList']['list']) && is_array($item['selectList']['list'])) {
unset($item['selectList']['list']);
}
} elseif ($item['name'] === 'promotionList') {
if (isset($item['tabConfig']['list']) && $item['tabConfig']['list']) {
$list = $item['tabConfig']['list'];
foreach ($list as &$tabValue) {
if (isset($tabValue['goodsList']['list']) && is_array($tabValue['goodsList']['list'])) {
$limitMax = config('database.page.limitMax', 50);
if (isset($tabValue['numConfig']['val']) && isset($tabValue['tabConfig']['tabVal']) && $tabValue['tabConfig']['tabVal'] == 0 && $tabValue['numConfig']['val'] > $limitMax) {
return $this->fail('您设置得商品个数超出系统限制,最大限制' . $limitMax . '个商品');
}
$tabValue['goodsList']['ids'] = array_column($tabValue['goodsList']['list'], 'id');
}
unset($tabValue['goodsList']['list'], $item['productList']['list']);
}
$item['tabConfig']['list'] = $list;
}
} elseif ($item['name'] === 'newVip') {
unset($item['newVipList']['list']);
} elseif ($item['name'] === 'shortVideo') {
unset($item['videoList']);
}
}
$data['value'] = json_encode($value);
$data['version'] = uniqid();
return $this->success($id ? '修改成功' : '保存成功', ['id' => $this->services->saveData($id, $data)]);
}
/**
* 删除模板
* @param $id
* @return mixed
*/
public function del($id)
{
$this->services->del($id);
return $this->success('删除成功');
}
/**
* 使用模板
* @param $id
* @return mixed
*/
public function setStatus($id)
{
return $this->success($this->services->setStatus($id));
}
/**
* 获取一条数据
* @param int $id
* @return mixed
*/
public function getInfo($id, StoreProductServices $services, StoreNewcomerServices $newcomerServices, VideoServices $videoServices)
{
if (!(int)$id) throw new AdminException('参数错误');
$info = $this->services->get((int)$id);
if ($info) {
$info = $info->toArray();
} else {
throw new AdminException('模板不存在');
}
$info['value'] = json_decode($info['value'], true);
if ($info['value']) {
/** @var ArticleServices $articleServices */
$articleServices = app()->make(ArticleServices::class);
/** @var StoreProductCategoryServices $storeCategoryServices */
$storeCategoryServices = app()->make(StoreProductCategoryServices::class);
if ($info['is_diy']) {
$limitMax = config('database.page.limitMax', 50);
foreach ($info['value'] as &$item) {
switch ($item['name']) {
case 'goodList'://商品列表
$typeConfig = $item['typeConfig']['activeValue'] ?? 0;
$where = [];
$num = $item['numberConfig']['val'] ?? $limitMax;
$sort = $item['goodsSort']['type'] ?? 0;
if ($sort == 1) {
$where['salesOrder'] = 'desc';
} elseif ($sort == 2) {
$where['priceOrder'] = 'desc';
}
$item['goodsList']['list'] = [];
// $where['type'] = [0, 2];
$where['is_show'] = 1;
$where['is_del'] = 0;
$where['is_verify'] = 1;
switch ($typeConfig){
case 1://指定商品
$where['ids'] = $item['goodsList']['ids'] ?? [];
$item['goodsList']['list'] = $services->getSearchList($where, 0, 0, ['id,store_name,cate_id,image,IFNULL(sales, 0) + IFNULL(ficti, 0) as sales,price,stock,activity,ot_price,spec_type,recommend_image,unit_name,is_vip,vip_price'], '', []);
break;
case 2://指定品牌
$where['brand_id'] = $item['brandList']['brandVal'] ?? [];
$item['productList']['list'] = $services->getSearchList($where, 0, $num, ['id,store_name,cate_id,image,IFNULL(sales, 0) + IFNULL(ficti, 0) as sales,price,stock,activity,ot_price,spec_type,recommend_image,unit_name,is_vip,vip_price'], '', []);
break;
case 3://指定分类
$cateIds = $item['classList']['classVal'] ?? [];
if ($cateIds) {
// $ids = $storeCategoryServices->getColumn(['pid' => $cateIds], 'id');
// if ($ids) {
// $cateIds = array_unique(array_merge($cateIds, $ids));
$where['cate_id'] = $cateIds;
// }
}
$item['productList']['list'] = $services->getSearchList($where, 0, $num, ['id,store_name,cate_id,image,IFNULL(sales, 0) + IFNULL(ficti, 0) as sales,price,stock,activity,ot_price,spec_type,recommend_image,unit_name,is_vip,vip_price'], '', []);
break;
case 4://商品标签
$storeLabelIds = $item['goodsLabel']['activeValue'] ?? [];
if ($storeLabelIds) {
$where['store_label_id'] = $storeLabelIds;
}
$item['productList']['list'] = $services->getSearchList($where, 0, $num, ['id,store_name,cate_id,image,IFNULL(sales, 0) + IFNULL(ficti, 0) as sales,price,stock,activity,ot_price,spec_type,recommend_image,unit_name,is_vip,vip_price'], '', []);
break;
}
break;
case 'articleList'://文章
$data = [];
if ($item['selectConfig']['activeValue'] ?? 0) {
$data = $articleServices->getList(['cid' => $item['selectConfig']['activeValue'] ?? 0], 0, $item['numConfig']['val'] ?? 0);
}
$item['selectList']['list'] = $data['list'] ?? [];
break;
case 'promotionList'://促销列表
if (isset($item['tabConfig']['list']) && $item['tabConfig']['list']) {
$list = $item['tabConfig']['list'];
if ($list) {
foreach ($list as &$tabValue) {
$where = [];
//选择方式
$selectValue = $tabValue['tabVal'] ?? 0;
$num = $tabValue['numConfig']['val'] ?? $limitMax;
$sort = $tabValue['goodsSort'] ?? 0;
if ($sort == 1) {
$where['salesOrder'] = 'desc';
} elseif ($sort == 2) {
$where['priceOrder'] = 'desc';
}
if ($selectValue == 1 && isset($tabValue['goodsList']['ids']) && count($tabValue['goodsList']['ids'])) {//手动选商品
$where['ids'] = $tabValue['goodsList']['ids'];
$tabValue['goodsList']['list'] = $services->getSearchList($where, 0, 0, ['id,store_name,cate_id,image,IFNULL(sales, 0) + IFNULL(ficti, 0) as sales,price,stock,activity,ot_price,spec_type,recommend_image,unit_name,is_vip,vip_price'], '', []);
} elseif ((isset($tabValue['selectConfig']['activeValue']) && $tabValue['selectConfig']['activeValue']) || (isset($tabValue['goodsLabel']['activeValue']) && $tabValue['goodsLabel']['activeValue'])) {//选分类 、标签
$cateIds = $tabValue['selectConfig']['activeValue'] ?? [];
if ($cateIds) {
$ids = $storeCategoryServices->getColumn(['pid' => $cateIds], 'id');
if ($ids) {
$cateIds = array_unique(array_merge($cateIds, $ids));
$where['cate_id'] = $cateIds;
}
}
$storeLabelIds = $tabValue['goodsLabel']['activeValue'] ?? [];
if ($storeLabelIds) {
$where['store_label_id'] = $storeLabelIds;
}
$where['type'] = [0, 2];
$where['is_show'] = 1;
$where['is_del'] = 0;
$where['is_verify'] = 1;
$where['ids'] = '';
$tabValue['productList']['list'] = $services->getSearchList($where, 0, $num, ['id,store_name,cate_id,image,IFNULL(sales, 0) + IFNULL(ficti, 0) as sales,price,stock,activity,ot_price,spec_type,recommend_image,unit_name,is_vip,vip_price'], '', []);
}
}
$item['tabConfig']['list'] = $list;
}
}
break;
case 'newVip'://新人专享
$item['newVipList']['list'] = $newcomerServices->getDiyNewcomerList();
break;
case 'shortVideo'://短视频
$item['videoList'] = $videoServices->getDiyVideoList(0);
break;
}
}
} else {
if ($info['value']) {
if (isset($info['value']['d_goodList']['goodsList'])) {
$info['value']['d_goodList']['goodsList']['list'] = [];
}
if (isset($info['value']['d_goodList']['goodsList']['ids']) && count($info['value']['d_goodList']['goodsList']['ids'])) {
$info['value']['d_goodList']['goodsList']['list'] = $services->getSearchList(['ids' => $info['value']['d_goodList']['goodsList']['ids']]);
}
}
}
}
return $this->success(compact('info'));
}
/**
* 获取uni-app路径
* @return mixed
*/
public function getUrl()
{
$url = sys_data('uni_app_link');
if ($url) {
foreach ($url as &$link) {
$link['url'] = $link['link'];
$link['parameter'] = trim($link['param']);
}
} else {
/** @var CacheServices $cache */
$cache = app()->make(CacheServices::class);
$url = $cache->getDbCache('uni_app_url', null);
}
return $this->success(compact('url'));
}
/**
* 获取商品分类
* @return mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getCategory()
{
/** @var StoreProductCategoryServices $categoryService */
$categoryService = app()->make(StoreProductCategoryServices::class);
$list = $categoryService->cascaderList();
// $data = [];
// foreach ($list as $value) {
// $data[] = [
// 'id' => $value['id'],
// 'title' => $value['html'] . $value['cate_name']
// ];
// }
return $this->success($list);
}
/**
* 获取商品
* @return mixed
*/
public function getProduct()
{
$where = $this->request->getMore([
['id', 0],//搜索分类
['salesOrder', ''],//销量排序
['priceOrder', ''],//价格排序
['supplier_id', 0],//供应商ID
['store_id', 0],//门店ID
['store_label_id', ''],//标签ID
['ids', ''],//商品ID
['brand_id', ''],//品牌ID
]);
$cateId = $where['id'];
$where['is_show'] = 1;
$where['is_del'] = 0;
$where['is_verify'] = 1;
$where['type'] = [0, 2];
$where['show_type'] = [0, 1];
if ($where['supplier_id']) {
$where['relation_id'] = $where['supplier_id'];
$where['type'] = 2;
} elseif ($where['store_id']) {
$where['relation_id'] = $where['store_id'];
$where['type'] = 1;
} else {
$where['pid'] = 0;
}
unset($where['supplier_id'], $where['store_id']);
unset($where['id']);
/** @var StoreProductCategoryServices $storeCategoryServices */
$storeCategoryServices = app()->make(StoreProductCategoryServices::class);
if ($cateId) {
$cateId = is_string($cateId) ? [$cateId] : $cateId;
$cateId = array_merge($cateId, $storeCategoryServices->getColumn(['pid' => $cateId], 'id'));
$cateId = array_unique(array_diff($cateId, [0]));
}
$where['cate_id'] = $cateId;
[$page, $limit] = $this->services->getPageValue();
/** @var StoreProductServices $productService */
$productService = app()->make(StoreProductServices::class);
$list = $productService->getSearchList($where, $page, $limit, ['id,store_name,cate_id,image,IFNULL(sales, 0) + IFNULL(ficti, 0) as sales,price,stock,activity,ot_price,spec_type,recommend_image,unit_name,is_vip,vip_price'], '', []);
return $this->success($list);
}
/**
* 获取提货点自提开启状态
* @return mixed
*/
public function getStoreStatus()
{
$data['store_status'] = 0;
if (sys_config('store_func_status', 1)) {
$data['store_status'] = sys_config('store_self_mention', 0);
}
return $this->success($data);
}
/**
* 设置模版默认数据
* @param $id
* @return mixed
*/
public function setDefaultData($id)
{
if (!$id) throw new AdminException('参数错误');
$info = $this->services->get($id);
if ($info) {
$info->default_value = $info->value;
$info->update_time = time();
$info->save();
event('diy.update');
return $this->success('设置成功');
} else {
throw new AdminException('模板不存在');
}
}
/**
* 还原模板数据
* @param $id
* @return mixed
*/
public function Recovery($id)
{
if (!$id) throw new AdminException('参数错误');
$info = $this->services->get($id);
if ($info) {
$info->value = $info->default_value;
$info->update_time = time();
$info->save();
event('diy.update');
return $this->success('还原成功');
} else {
throw new AdminException('模板不存在');
}
}
/**
* 获取二级分类
* @return mixed
*/
public function getByCategory()
{
$where = $this->request->getMore([
['pid', -1],
['name', '']
]);
/** @var StoreProductCategoryServices $categoryServices */
$categoryServices = app()->make(StoreProductCategoryServices::class);
return $this->success($categoryServices->getALlByIndex($where));
}
/**
* 获取首页推荐不同类型商品的轮播图和商品
* @param $type
* @return mixed
*/
public function groom_list($type)
{
$info['list'] = $this->get_groom_list($type);
return $this->success($info);
}
/**
* 实际获取方法
* @param $type
* @return array
*/
protected function get_groom_list($type, int $num = 0)
{
/** @var StoreProductServices $services */
$services = app()->make(StoreProductServices::class);
$info = [];
$where = [];
if ($type == 1) {// 精品推荐
$where['is_best'] = 1;
// 精品推荐个数
} else if ($type == 2) {// 热门榜单
$where['is_hot'] = 1;
} else if ($type == 3) {// 首发新品
$where['is_new'] = 1;
} else if ($type == 4) {// 促销单品
$where['is_benefit'] = 1;
} else if ($type == 5) {// 会员商品
$where['is_vip'] = 1;
}
$info = $services->getRecommendProduct(0, $where, $num);
return $info;
}
/**
* 一键换色
* @param $status
* @return mixed
*/
public function colorChange($status, $type)
{
if (!$status) throw new AdminException('参数错误');
$info = $this->services->get(['template_name' => $type, 'type' => 3]);
if ($info) {
$info->value = $status;
$info->update_time = time();
$info->save();
event('diy.update');
$this->services->cacheStrUpdate('color_change_' . $type . '_3', $status);
return $this->success('设置成功');
} else {
throw new AdminException('模板不存在');
}
}
/**
* 获取颜色选择和分类模板选择
* @param $type
* @return mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getColorChange($type)
{
$status = (int)$this->services->getColorChange((string)$type);
return $this->success(compact('status'));
}
/**
* 获取单个diy小程序预览二维码
* @param $id
* @return mixed
*/
public function getRoutineCode($id)
{
$image = $this->services->getRoutineCode((int)$id);
return $this->success(compact('image'));
}
/**
* 获取会员中心数据
* @return mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getMember()
{
$data = $this->services->getMemberData();
return $this->success($data);
}
/**
* 保存个人中心数据
* @return mixed
*/
public function memberSaveData()
{
$data = $this->request->postMore([
['member', []],
['routine_my_banner', []],
['routine_my_menus', []]
]);
$this->services->memberSaveData($data);
event('diy.update');
return $this->success('保存成功');
}
/**
* 获取开屏广告
* @return mixed
*/
public function getOpenAdv()
{
/** @var CacheServices $cacheServices */
$cacheServices = app()->make(CacheServices::class);
$data = $cacheServices->getDbCache('open_adv','');
$data = $data ?: [];
$data['time'] = (float)($data['time'] ?? 3);
$data['interval_time'] = (float)($data['interval_time'] ?? 24);
return app('json')->success($data);
}
/**
* 保存开屏广告
* @return mixed
*/
public function openAdvAdd()
{
$data = $this->request->postMore([
['status', 0],//状态
['time', 0],//广告时间
['interval_time', 24],//再次出现间隔时间
['type', 'pic'],//类型
['value', []],
['video_link','']
]);
if (!$data['type']) {
$data['type'] = 'pic';
}
/** @var CacheServices $cacheServices */
$cacheServices = app()->make(CacheServices::class);
$cacheServices->setDbCache('open_adv', $data);
event('diy.update');
return app('json')->success('保存成功');
}
/**
* 获取商品详情数据
* @return mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getProductDetailDiy()
{
$data = $this->services->getProductDetailDiy();
return $this->success($data);
}
/**
* 保存商品详情数据
* @return mixed
*/
public function saveProductDetailDiy()
{
[$content] = $this->request->postMore([
['product_detail_diy', []],
], true);
$this->services->saveProductDetailDiy($content);
event('diy.update');
return $this->success('保存成功');
}
/**
* 获取商品分类数据
* @return mixed
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
public function getProductCategoryDiy()
{
$data = $this->services->getProductCategoryDiy();
return $this->success($data);
}
/**
* 保存商品分类数据
* @return mixed
*/
public function saveProductCategoryDiy()
{
[$content] = $this->request->postMore([
['product_category_diy', []],
], true);
$this->services->saveProductCategoryDiy($content);
event('diy.update');
return $this->success('保存成功');
}
/**
* 获取新人礼商品
* @param StoreNewcomerServices $newcomerServices
* @return mixed
*/
public function newcomerList(StoreNewcomerServices $newcomerServices)
{
$where = $this->request->getMore([
['priceOrder', ''],
['salesOrder', ''],
]);
return app('json')->success($newcomerServices->getDiyNewcomerList(0, $where));
}
}