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.
 
 
 
 
 
 
shipin/app/services/diy/DiyServices.php

449 lines
16 KiB

<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
declare (strict_types=1);
namespace app\services\diy;
use app\services\activity\bargain\StoreBargainServices;
use app\services\activity\combination\StoreCombinationServices;
use app\services\activity\seckill\StoreSeckillServices;
use app\services\BaseServices;
use app\dao\diy\DiyDao;
use app\services\other\QrcodeServices;
use app\services\product\product\StoreProductServices;
use app\services\system\config\SystemGroupDataServices;
use app\services\system\config\SystemGroupServices;
use crmeb\exceptions\AdminException;
use crmeb\services\CacheService;
use crmeb\services\FormBuilder as Form;
use crmeb\services\SystemConfigService;
use think\facade\Route as Url;
/**
*
* Class DiyServices
* @package app\services\diy
*/
class DiyServices extends BaseServices
{
/**
* DiyServices constructor.
* @param DiyDao $dao
*/
public function __construct(DiyDao $dao)
{
$this->dao = $dao;
}
/**
* 获取DIY列表
* @param array $where
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getDiyList(array $where)
{
[$page, $limit] = $this->getPageValue();
$where['is_del'] = 0;
$list = $this->dao->getDiyList($where, $page, $limit, ['id', 'name', 'type', 'add_time', 'update_time', 'is_diy', 'status']);
foreach ($list as &$item) {
$item['type_name'] = $item['type'] == 0 ? '可视化' : '专题页';
}
$count = $this->dao->count($where);
return compact('list', 'count');
}
/**
* 保存资源
* @param int $id
* @param array $data
*/
public function saveData(int $id = 0, array $data = [])
{
if ($id) {
$data['update_time'] = time();
$res = $this->dao->update($id, $data);
if (!$res) throw new AdminException(100007);
} else {
$data['add_time'] = time();
$data['update_time'] = time();
$res = $this->dao->save($data);
if (!$res) throw new AdminException(100006);
$id = $res->id;
}
CacheService::clear();
CacheService::set('index_diy_' . $id, $data['version']);
$this->updateCacheDiyVersion();
return $id;
}
/**
* 删除DIY模板
* @param int $id
*/
public function del(int $id)
{
if ($id == 1) throw new AdminException(400457);
$count = $this->dao->getCount(['id' => $id, 'status' => 1]);
if ($count) throw new AdminException(400458);
$res = $this->dao->update($id, ['is_del' => 1]);
if (!$res) throw new AdminException(100008);
CacheService::clear();
}
/**
* 设置模板使用
* @param int $id
*/
public function setStatus(int $id)
{
$this->dao->update(['is_diy' => 1], ['is_show' => 1, 'type' => 2]);
$this->dao->update([['id', '<>', $id]], ['status' => 0]);
$this->dao->update($id, ['status' => 1, 'update_time' => time()]);
CacheService::clear();
$this->updateCacheDiyVersion();
}
/**
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author 等风来
* @email 136327134@qq.com
* @date 2023/2/8
*/
public function updateCacheDiyVersion()
{
$diyInfo = $this->dao->get(['status' => 1, 'is_del' => 0], ['id', 'version']);
if (!$diyInfo) {
CacheService::delete('index_diy_default');
} else {
CacheService::set('index_diy_default', $diyInfo['version']);
}
}
/**
* @param int $id
* @return array|mixed|\think\Model|null
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author 吴汐
* @email 442384644@qq.com
* @date 2023/05/08
*/
public function getDiyVersion(int $id)
{
if ($id) {
$cacheKey = 'index_diy_' . $id;
$where = ['id' => $id];
} else {
$cacheKey = 'index_diy_default';
$where = ['status' => 1, 'is_del' => 0];
}
$data = CacheService::remember($cacheKey, function () use ($where) {
return $this->dao->getOne($where, 'version,is_diy');
});
if (isset($data['version']) && isset($data['is_diy'])) {
return $data;
} else {
return $this->dao->getOne($where, 'version,is_diy');
}
}
/**
* 获取页面数据
* @param int $id
* @return array|mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getDiy($id = 0)
{
$field = 'name,value,is_show,is_bg_color,color_picker,bg_pic,bg_tab_val,is_bg_pic,order_status,is_diy,title';
$info = CacheService::remember('diy_info_' . $id, function () use ($field, $id) {
if ($id) {
$info = $this->dao->getOne(['id' => $id], $field);
} else {
$info = $this->dao->getOne(['status' => 1, 'is_del' => 0], $field);
}
return $info ? $info->toArray() : [];
});
if ($info) {
if ($info['value']) {
$info['value'] = json_decode($info['value'], true);
if ($info['is_diy']) {
foreach ($info['value'] as &$item) {
if ($item['name'] == 'customerService') {
$item['routine_contact_type'] = sys_config('routine_contact_type', 0);
}
}
return $info;
} else {
foreach ($info['value'] as $key => &$item) {
if ($key == 'customerService') {
foreach ($item as $k => &$v) {
$v['routine_contact_type'] = sys_config('routine_contact_type', 0);
}
}
}
return $info['value'];
}
}
}
return [];
}
/**
* 添加表单
* @return array
* @throws \FormBuilder\Exception\FormBuilderException
*/
public function createForm()
{
$field = array();
$title = '添加模板';
$field[] = Form::input('name', '页面名称', '')->required();
return create_form($title, $field, Url::buildUrl('/diy/create'), 'POST');
}
/**
* 获取商品数据
* @param array $where
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function ProductList(array $where)
{
/** @var StoreProductServices $StoreProductServices */
$StoreProductServices = app()->make(StoreProductServices::class);
/** @var StoreBargainServices $StoreBargainServices */
$StoreBargainServices = app()->make(StoreBargainServices::class);
/** @var $StoreCombinationServices StoreCombinationServices */
$StoreCombinationServices = app()->make(StoreCombinationServices::class);
/** @var $StoreSeckillServices StoreSeckillServices */
$StoreSeckillServices = app()->make(StoreSeckillServices::class);
$type = $where['type'];
unset($where['type']);
$data = [];
switch ($type) {
case 0:
$data = $StoreProductServices->searchList($where);
break;
//秒杀
case 2:
$data = $StoreSeckillServices->getDiySeckillList($where);
break;
//拼团
case 3:
$data = $StoreCombinationServices->getDiyCombinationList($where);
break;
case 4:
$where['is_hot'] = 1;
$data = $StoreProductServices->searchList($where);
break;
case 5:
$where['is_new'] = 1;
$data = $StoreProductServices->searchList($where);
break;
case 6:
$where['is_benefit'] = 1;
$data = $StoreProductServices->searchList($where);
break;
case 7:
$where['is_best'] = 1;
$data = $StoreProductServices->searchList($where);
break;
//砍价
case 8:
$data = $StoreBargainServices->getDiyBargainList($where);
break;
}
return $data;
}
/**
* 前台获取首页数据接口
* @param array $where
*/
public function homeProductList(array $where, int $uid)
{
/** @var StoreProductServices $StoreProductServices */
$StoreProductServices = app()->make(StoreProductServices::class);
/** @var StoreBargainServices $StoreBargainServices */
$StoreBargainServices = app()->make(StoreBargainServices::class);
/** @var $StoreCombinationServices StoreCombinationServices */
$StoreCombinationServices = app()->make(StoreCombinationServices::class);
/** @var $StoreSeckillServices StoreSeckillServices */
$StoreSeckillServices = app()->make(StoreSeckillServices::class);
$type = $where['type'];
$data = [];
switch ($type) {
case 0:
$where['type'] = $where['isType'] ?? 0;
$data['list'] = $StoreProductServices->getGoodsList($where, $uid);
break;
//秒杀
case 2:
$data = $StoreSeckillServices->getHomeSeckillList($where);
break;
//拼团
case 3:
$data = $StoreCombinationServices->getHomeList($where);
break;
case 4:
$where['is_hot'] = 1;
$where['type'] = $where['isType'] ?? 0;
$data['list'] = $StoreProductServices->getGoodsList($where, $uid);
break;
case 5:
$where['is_new'] = 1;
$where['type'] = $where['isType'] ?? 0;
$data['list'] = $StoreProductServices->getGoodsList($where, $uid);
break;
case 6:
$where['is_benefit'] = 1;
$where['type'] = $where['isType'] ?? 0;
$data['list'] = $StoreProductServices->getGoodsList($where, $uid);
break;
case 7:
$where['is_best'] = 1;
$where['type'] = $where['isType'] ?? 0;
$data['list'] = $StoreProductServices->getGoodsList($where, $uid);
break;
//砍价
case 8:
$data = $StoreBargainServices->getHomeList($where);
break;
}
foreach ($data['list'] as &$item) {
$item['image'] = set_file_url($item['image'], sys_config('site_url'));
}
return $data;
}
/**
* 分类、个人中心、一键换色
* @param string $name
* @return mixed
*/
public function getColorChange(string $name)
{
return $this->dao->value(['template_name' => $name, 'type' => 1], 'value');
}
public function getMemberData()
{
$info = $this->dao->get(['template_name' => 'member', 'type' => 1]);
$status = (int)$info['value'];
$order_status = $info['order_status'] ? (int)$info['order_status'] : 1;
$color_change = (int)$this->getColorChange('color_change');
/** @var SystemGroupDataServices $systemGroupDataServices */
$systemGroupDataServices = app()->make(SystemGroupDataServices::class);
/** @var SystemGroupServices $systemGroupServices */
$systemGroupServices = app()->make(SystemGroupServices::class);
$menus_gid = $systemGroupServices->value(['config_name' => 'routine_my_menus'], 'id');
$banner_gid = $systemGroupServices->value(['config_name' => 'routine_my_banner'], 'id');
$routine_my_menus = $systemGroupDataServices->getGroupDataList(['gid' => $menus_gid]);
$routine_my_menus = $routine_my_menus['list'] ?? [];
$routine_my_banner = $systemGroupDataServices->getGroupDataList(['gid' => $banner_gid]);
$routine_my_banner = $routine_my_banner['list'] ?? [];
$my_banner_status = boolval($info['my_banner_status']);
return compact('status', 'order_status', 'routine_my_menus', 'routine_my_banner', 'color_change', 'my_banner_status');
}
/**
* 保存个人中心数据配置
* @param array $data
* @return bool
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function memberSaveData(array $data)
{
/** @var SystemGroupDataServices $systemGroupDataServices */
$systemGroupDataServices = app()->make(SystemGroupDataServices::class);
if (!$data['status']) throw new AdminException(100100);
$info = $this->dao->get(['template_name' => 'member', 'type' => 1]);
if ($info) {
$info->my_banner_status = $data['my_banner_status'];
$info->value = $data['status'];
$info->order_status = $data['order_status'];
$info->update_time = time();
$res = $info->save();
} else {
throw new AdminException(400459);
}
$systemGroupDataServices->saveAllData($data['routine_my_banner'], 'routine_my_banner');
$systemGroupDataServices->saveAllData($data['routine_my_menus'], 'routine_my_menus');
return true;
}
/**
* 获取底部导航
* @param string $template_name
* @return array|mixed
*/
public function getNavigation(string $template_name)
{
$value = CacheService::remember('navigation', function () {
$value = $this->dao->value(['status' => 1], 'value');
if (!$value) {
$value = $this->dao->value(['template_name' => 'default'], 'value');
}
return $value;
});
$navigation = [];
if ($value) {
$value = json_decode($value, true);
foreach ($value as $item) {
if (isset($item['name']) && strtolower($item['name']) === 'pagefoot') {
$navigation = $item;
break;
}
}
}
return $navigation;
}
/**
* 取单个diy小程序预览二维码
* @param int $id
* @return string
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getRoutineCode(int $id)
{
$diy = $this->dao->getOne(['id' => $id, 'is_del' => 0]);
if (!$diy) {
throw new AdminException(100026);
}
/** @var QrcodeServices $QrcodeService */
$QrcodeService = app()->make(QrcodeServices::class);
return $QrcodeService->getRoutineQrcodePath($id, 0, 6, [], false);
}
}