Files
boxi-server/plugin/admin/app/controller/StoreController.php
T
2025-04-16 10:55:23 +08:00

300 lines
8.2 KiB
PHP

<?php
namespace plugin\admin\app\controller;
use app\util\Util;
use support\Db;
use support\Request;
use support\Response;
use plugin\admin\app\model\Store;
use plugin\admin\app\controller\Crud;
use support\exception\BusinessException;
/**
* 门店
*/
class StoreController extends Crud
{
/**
* 不需要登录的方法
* @var string[]
*/
protected $noNeedLogin = ['list','storeNum','turnover','storeTurnover','channelTurnover','channelStoreTurnover','inster'];
protected $channel = ['苏宁','五星','RKA','BFS','DIS','自有渠道'];
protected $brand = ['西门子','博世','卡萨帝','COLMO','方太','老板'];
/**
* @var Store
*/
protected $model = null;
/**
* 构造函数
* @return void
*/
public function __construct()
{
$this->model = new Store;
}
/**
* 浏览
* @return Response
*/
public function index(): Response
{
return view('store/index');
}
/**
* 插入
* @param Request $request
* @return Response
* @throws BusinessException
*/
public function insert(Request $request): Response
{
if ($request->method() === 'POST') {
return parent::insert($request);
}
return view('store/insert');
}
/**
* 更新
* @param Request $request
* @return Response
* @throws BusinessException
*/
public function update(Request $request): Response
{
if ($request->method() === 'POST') {
return parent::update($request);
}
return view('store/update');
}
/**
* 更新
* @param Request $request
* @return Response
* @throws BusinessException
*/
public function list(Request $request): Response
{
$brand = $request->input('brand');
$channel = $request->input('channel');
$where = [];
if(!empty($brand)){
$where['brand'] = $brand;
}
if(!empty($channel)){
$where['channel'] = $channel;
}
$store = Store::where($where)->get();
return util::success($store);
}
/**
* 门店数量
* @param Request $request
* @return Response
* @throws BusinessException
*/
public function storeNum(Request $request): Response
{
$area = $request->input('area');
$where = [];
if($area != 0){
$where['area'] = $area;
}
$where['area'] = $area;
$store = Store::query()
->select([
'brand',
DB::raw('count(*) as count')
])->where($where)
->groupBy('brand')->get()->toArray();
// $brand = array_column($store, 'brand');
$brand = $this->brand;
// $count = array_column($store, 'count');
foreach ($brand as $value) {
$count[$value] = 0;
}
foreach ($store as $value) {
$count[$value['brand']] = $value['count'];
}
$count = array_values($count);
return util::success(['name'=>$brand,'statistics'=>$count,$store]);
}
/**
* 营业额统计
* @param Request $request
* @return Response
* @throws BusinessException
*/
public function turnover(Request $request): Response
{
$area = $request->input('area');
$where = [];
if($area != 0){
$where['area'] = $area;
}
$store = Store::query()
->select([
'brand',
DB::raw('SUM(turnover) as total')
])->where($where)
->groupBy('brand')
->get()->toArray();
// $brand = array_column($store, 'brand');
$brand = $this->brand;
// $total = array_column($store, 'total');
foreach ($brand as $value) {
$total[$value] = 0;
}
foreach ($store as $value) {
$total[$value['brand']] = $value['total'];
}
$total = array_values($total);
return util::success(['name'=>$brand,'statistics'=>$total,$store]);
}
/**
* 渠道品牌营业额对比
* @param Request $request
* @return Response
* @throws BusinessException
*/
public function channelTurnover(Request $request): Response
{
$area = $request->input('area');
$where = [];
if($area != 0){
$where['area'] = $area;
}
$store = Store::query()
->select([
'brand','channel',
DB::raw('SUM(turnover) as total')
])->where($where)
->groupBy('brand','channel')->orderBy('channel')
->get()->toArray();
// $brand = array_unique(array_column($store,'brand'));
// $channel = array_unique(array_column($store,'channel'));
$brand = $this->brand;
$channel = $this->channel;
$res = [];
foreach ($this->brand as $item){
foreach ($this->channel as $key){
$res[$item][$key] = 0;
}
}
foreach ($store as $item){
$res[$item['brand']][$item['channel']] = $item['total'];
}
return util::success(['brand'=>$brand,'channel'=>$channel,'statistics'=>$res,$store]);
}
/**
* 按渠道分析品牌门店数
* @param Request $request
* @return Response
* @throws BusinessException
*/
public function storeTurnover(Request $request): Response
{
$area = $request->input('area');
$where = [];
if($area != 0){
$where['area'] = $area;
}
$store = Store::query()
->select([
'brand','channel',
DB::raw('count(turnover) as count')
])->where($where)
->groupBy('channel','brand')
->orderBy('brand')
->get()->toArray();
// $brand = array_unique(array_column($store,'brand'));
// $channel = array_unique(array_column($store,'channel'));
$brand = $this->brand;
$channel = $this->channel;
$res = [];
foreach ($this->channel as $item){
foreach ($this->brand as $key){
$res[$item][$key] = 0;
}
}
foreach ($store as $item){
$res[$item['channel']][$item['brand']] = $item['count'];
}
return util::success(['brand'=>$brand,'channel'=>$channel,'statistics'=>$res,$store]);
}
/**
* 按渠道统计各品牌零售
* @param Request $request
* @return Response
* @throws BusinessException
*/
public function channelStoreTurnover(Request $request): Response
{
$area = $request->input('area');
$where = [];
if($area != 0){
$where['area'] = $area;
}
$store = Store::query()
->select([
'brand','channel',
DB::raw('SUM(turnover) as total')
])->where($where)
->groupBy('channel','brand')->orderBy('channel')
->get()->toArray();
// $brand = array_unique(array_column($store,'brand'));
// $channel = array_unique(array_column($store,'channel'));
$brand = $this->brand;
$channel = $this->channel;
$res = [];
foreach ($this->channel as $item){
foreach ($this->brand as $key){
$res[$item][$key] = 0;
}
}
foreach ($store as $item){
$res[$item['channel']][$item['brand']] = $item['total'];
}
return util::success(['brand'=>$brand,'channel'=>$channel,'statistics'=>$res,$store]);
}
/**
* 插入
* @param Request $request
* @return Response
* @throws BusinessException
*/
public function inster(Request $request): Response
{
$json = [];
foreach ($json as $key => $value) {
$store = new Store();
$store->brand = $value['styleId'];
$store->name = $value['title'];
$store->lat = $value['lat'];
$store->lng = $value['lng'];
$store->area = 0;
$store->turnover = 0;
$store->channel = '';
$store->save();
}
return util::success($store);
}
}