徐总多门店
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.
 
 
 
 
 
 

338 lines
11 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\api\store;
use app\Request;
use app\services\order\OtherOrderServices;
use app\services\order\store\BranchOrderServices;
use app\services\order\StoreOrderServices;
use app\services\store\SystemStoreStaffServices;
use app\services\system\attachment\SystemAttachmentServices;
use app\services\user\UserCardServices;
use app\services\user\UserRechargeServices;
use app\services\user\UserServices;
use app\services\user\UserSpreadServices;
use app\services\wechat\WechatCardServices;
use crmeb\services\CacheService;
use crmeb\services\UploadService;
use crmeb\services\UtilService;
use crmeb\services\wechat\MiniProgram;
use crmeb\services\wechat\OfficialAccount;
use GuzzleHttp\Psr7\Utils;
use think\db\exception\DbException;
use think\exception\ValidateException;
use think\Response;
/**
* 店员
* Class StoreStaff
* @package app\controller\api\store
*/
class StoreStaff
{
/**
* @var SystemStoreStaffServices
*/
protected $services;
/**
* @var int
*/
protected $uid;
/**
* 门店店员信息
* @var array
*/
protected $staffInfo;
/**
* 门店id
* @var int|mixed
*/
protected $store_id;
/**
* 门店店员ID
* @var int|mixed
*/
protected $staff_id;
/**
* 构造方法
* StoreStaff constructor.
* @param SystemStoreStaffServices $services
*/
public function __construct(SystemStoreStaffServices $services, Request $request)
{
$this->services = $services;
$this->uid = (int)$request->uid();
$this->staffInfo = $services->getStaffInfoByUid($this->uid)->toArray();
$this->store_id = (int)$this->staffInfo['store_id'] ?? 0;
$this->staff_id = (int)$this->staffInfo['id'] ?? 0;
}
/**
* 获取店员信息
* @return mixed
*/
public function info()
{
return app('json')->success($this->staffInfo);
}
/**
* 工作台数据
* @param Request $request
* @return Response
* @throws DbException
*/
public function stagingData(Request $request)
{
[$is_manager, $time] = $request->getMore([
['is_manager', 0],
['data', '', '', 'time'],
], true);
if (!$is_manager || !$this->staffInfo['is_manager']) {
$is_manager = 0;
}
$store_id = $this->store_id;
$staff_id = $is_manager ? 0 : $this->staff_id;
return app('json')->successful($this->services->getStagingData($store_id, $staff_id, $time));
}
/**
* 店员|门店数据统计
* @param Request $request
* @return mixed
*/
public function statistics(Request $request)
{
[$is_manager, $time] = $request->getMore([
['is_manager', 0],
['data', '', '', 'time'],
], true);
if (!$is_manager || !$this->staffInfo['is_manager']) {
$is_manager = 0;
}
$store_id = $this->store_id;
$staff_id = $is_manager ? 0 : $this->staff_id;
$data = $this->services->getStoreData($this->uid, $store_id, $staff_id, $time);
return app('json')->successful($data);
}
/**
* 统计图表
* @param Request $request
* @param $type
* @return Response
* @throws DbException
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
*/
public function timeChart(Request $request, $type = 1)
{
[$is_manager, $time] = $request->getMore([
['is_manager', 0],
['time', 'today'],
], true);
[$start, $end, $timeType, $timeKey] = $this->services->timeHandle($time, true);
if (!$is_manager || !$this->staffInfo['is_manager']) {
$is_manager = 0;
}
$staff_id = (int)($is_manager ? 0 : $this->staff_id);
$store_id = (int)$this->store_id;
switch ($type) {
case 1://销售额
case 2://配送订单金额
case 3://配送订单数量
case 4://退款订单金额
case 5://收银订单金额
case 6://核销订单金额
/** @var BranchOrderServices $order */
$order = app()->make(BranchOrderServices::class);
$list = $order->time($store_id, $staff_id, $type, [$start, $end], $timeType);
break;
case 7://付费会员
/** @var OtherOrderServices $otherOrder */
$otherOrder = app()->make(OtherOrderServices::class);
$list = $otherOrder->time($store_id, $staff_id, [$start, $end], $timeType);
break;
case 8://充值
/** @var UserRechargeServices $userRecharge */
$userRecharge = app()->make(UserRechargeServices::class);
$list = $userRecharge->time($store_id, $staff_id, [$start, $end], $timeType);
break;
case 9://推广用户
/** @var UserSpreadServices $userSpread */
$userSpread = app()->make(UserSpreadServices::class);
$list = $userSpread->time($this->store_id, $staff_id, [$start, $end], $timeType);
break;
case 10://激活会员卡
/** @var UserCardServices $userCard */
$userCard = app()->make(UserCardServices::class);
$list = $userCard->time($this->store_id, $staff_id, [$start, $end], $timeType);
break;
default:
return app('json')->fail('没有此类型');
}
$result = [];
if ($list) {
$list = array_combine(array_column($list, 'day'), $list);
}
foreach ($timeKey as $value) {
$key = in_array($type, [3, 9, 10]) ? 'count' : 'price';
$result[] = ['time' => $time == 'month' ? date('d',strtotime($value)) : $value, 'number' => $list[$value][$key] ?? 0, 'price' => in_array($type, [3, 9, 10]) ? 0 : $list[$value]['price'] ?? 0, 'num' => $list[$value]['count'] ?? 0];
}
return app('json')->successful($result);
}
/**
* 店员|门店统计详情页列表
* @param Request $request
* @param $type
* @return Response
* @throws DbException
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
*/
public function data(Request $request, $type)
{
[$is_manager, $time] = $request->getMore([
['is_manager', 0],
['time', 'today'],
], true);
[$start, $end, $timeType, $timeKey] = $time = $this->services->timeHandle($time, true);
if (!$is_manager || !$this->staffInfo['is_manager']) {
$is_manager = 0;
}
$staff_id = (int)($is_manager ? 0 : $this->staff_id);
$store_id = (int)$this->store_id;
$timeType = 'day';
switch ($type) {
case 1://销售额
case 2://配送订单金额
case 3://配送订单数量
case 4://退款订单金额
case 5://收银订单金额
case 6://核销订单金额
/** @var BranchOrderServices $order */
$order = app()->make(BranchOrderServices::class);
$list = $order->time($store_id, $staff_id, $type, [$start, $end], $timeType);
break;
case 7://付费会员
/** @var OtherOrderServices $otherOrder */
$otherOrder = app()->make(OtherOrderServices::class);
$list = $otherOrder->time($store_id, $staff_id, [$start, $end], $timeType);
break;
case 8://充值
/** @var UserRechargeServices $userRecharge */
$userRecharge = app()->make(UserRechargeServices::class);
$list = $userRecharge->time($this->store_id, $staff_id, [$start, $end], $timeType);
break;
case 9://推广用户
/** @var UserSpreadServices $userSpread */
$userSpread = app()->make(UserSpreadServices::class);
$list = $userSpread->time($this->store_id, $staff_id, [$start, $end], $timeType);
break;
case 10://激活会员卡
/** @var UserCardServices $userCard */
$userCard = app()->make(UserCardServices::class);
$list = $userCard->time($this->store_id, $staff_id, [$start, $end], $timeType);
break;
default:
return app('json')->fail('没有此类型');
}
return app('json')->success($list);
}
/**
* 商品分享二维码 推广员
* @param Request $request
* @param $id
* @return mixed
*/
public function code(Request $request, WechatCardServices $cardServices)
{
$wechatCard = $cardServices->get(['card_type' => 'member_card', 'status' => 1, 'is_del' => 0]);
$uid = (int)$request->uid();
if ($wechatCard && !$request->isApp()) {
$key = $wechatCard['card_id'] . '_cart_' . $uid;
$data = CacheService::get($key);
if (!$data) {
$result = OfficialAccount::getCardQRCode($wechatCard['card_id'], $uid);
$data = [
'url' => $result['url'] ?? '',
'show_qrcode_url' => $result['show_qrcode_url'] ?? ''
];
CacheService::set($key, $data, 1500);
}
} else {
$site_url = sys_config('site_url');
$valueData = 'spread=' . $uid . '&spid=' . $uid;
$url = $site_url ? $site_url . '?'.$valueData : '';
if (request()->isRoutine()) {
try {
//小程序
$name = $uid . '_store_share_routine.jpg';
/** @var SystemAttachmentServices $systemAttachmentServices */
$systemAttachmentServices = app()->make(SystemAttachmentServices::class);
$imageInfo = $systemAttachmentServices->getInfo(['name' => $name]);
if (!$imageInfo) {
$res = MiniProgram::appCodeUnlimit($valueData, 'pages/index/index', 280);
if (!$res) throw new ValidateException('二维码生成失败');
$uploadType = (int)sys_config('upload_type', 1);
$upload = UploadService::init($uploadType);
$res = (string)Utils::streamFor($res);
$res = $upload->to('routine/store/code')->validate()->stream($res, $name);
if ($res === false) {
throw new ValidateException($upload->getError());
}
$imageInfo = $upload->getUploadInfo();
$imageInfo['image_type'] = $uploadType;
if ($imageInfo['image_type'] == 1) $remoteImage = UtilService::remoteImage($site_url . $imageInfo['dir']);
else $remoteImage = UtilService::remoteImage($imageInfo['dir']);
if (!$remoteImage['status']) throw new ValidateException($remoteImage['msg']);
$systemAttachmentServices->save([
'name' => $imageInfo['name'],
'att_dir' => $imageInfo['dir'],
'satt_dir' => $imageInfo['thumb_path'],
'att_size' => $imageInfo['size'],
'att_type' => $imageInfo['type'],
'image_type' => $imageInfo['image_type'],
'module_type' => 2,
'time' => time(),
'pid' => 1,
'type' => 1
]);
$url = $imageInfo['dir'];
} else {
$url = $imageInfo['att_dir'];
}
if ($imageInfo['image_type'] == 1)
$url = $site_url . $url;
} catch (\Throwable $e) {
}
}
$data = [
'url' => $url,
'show_qrcode_url' => $url
];
}
return app('json')->success($data);
}
}