admin-api/app/controller/admin/Common.php

550 lines
20 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\controller\admin;
use app\common\repositories\store\order\StoreOrderProductRepository;
use app\common\repositories\store\order\StoreOrderRepository;
use app\common\repositories\system\CacheRepository;
use app\common\repositories\system\config\ConfigRepository;
use app\common\repositories\system\config\ConfigValueRepository;
use app\common\repositories\system\merchant\MerchantCategoryRepository;
use app\common\repositories\system\merchant\MerchantRepository;
use app\common\repositories\user\UserRepository;
use app\common\repositories\user\UserVisitRepository;
use crmeb\basic\BaseController;
use crmeb\services\HttpService;
use crmeb\services\UploadService;
use think\facade\Db;
use think\facade\Cache;
/**
* Class Common
* @package app\controller\admin
* @author xaboy
* @day 2020/6/25
*/
class Common extends BaseController
{
/**
* @return mixed
* @author xaboy
* @day 2020/6/25
*/
public function main()
{
$res = Cache::store('file')->remember(self::class . '@main', function () {
$today = $this->mainGroup('today');
$yesterday = $this->mainGroup('yesterday');
$lastWeek = $this->mainGroup(date('Y-m-d', strtotime('- 7day')));
$lastWeekRate = [];
foreach ($lastWeek as $k => $item) {
$lastWeekRate[$k] = $this->getRate($item, $today[$k], 4);
}
return compact('today', 'yesterday', 'lastWeekRate');
}, 2000 + random_int(600, 1200));
return app('json')->success($res);
}
/**
* TODO 上传视频key
* @return \think\response\Json
* @author Qinii
* @day 3/11/22
*/
public function temp_key()
{
$upload = UploadService::create();
$re = $upload->getTempKeys();
return app('json')->success($re);
}
/**
* @param $date
* @return array
* @author xaboy
* @day 2020/6/25
*/
protected function mainGroup($date)
{
$userRepository = app()->make(UserRepository::class);
$storeOrderRepository = app()->make(StoreOrderRepository::class);
$merchantRepository = app()->make(MerchantRepository::class);
$userVisitRepository = app()->make(UserVisitRepository::class);
$payPrice = (float)$storeOrderRepository->dayOrderPrice($date);
$userNum = (float)$userRepository->newUserNum($date);
$storeNum = (float)$merchantRepository->dateMerchantNum($date);
$visitUserNum = (float)$userVisitRepository->dateVisitUserNum($date);
$visitNum = (float)$userVisitRepository->dateVisitNum($date);
return compact('payPrice', 'userNum', 'storeNum', 'visitUserNum', 'visitNum');
}
/**
* @param StoreOrderRepository $repository
* @return mixed
* @author xaboy
* @day 2020/6/25
*/
public function order(StoreOrderRepository $repository)
{
$today = $repository->dayOrderPriceGroup('today')->toArray();
$yesterday = $repository->dayOrderPriceGroup('yesterday')->toArray();
$today = array_combine(array_column($today, 'time'), array_column($today, 'price'));
$yesterday = array_combine(array_column($yesterday, 'time'), array_column($yesterday, 'price'));
$time = getTimes();
$order = [];
foreach ($time as $item) {
$order[] = [
'time' => $item,
'today' => $today[$item] ?? 0,
'yesterday' => $yesterday[$item] ?? 0,
];
}
$todayPrice = $repository->dayOrderPrice('today');
$yesterdayPrice = $repository->dayOrderPrice('yesterday');
return app('json')->success(compact('order', 'todayPrice', 'yesterdayPrice'));
}
/**
* @param StoreOrderRepository $repository
* @return mixed
* @author xaboy
* @day 2020/6/25
*/
public function orderNum(StoreOrderRepository $repository)
{
$orderNum = $repository->dayOrderNum('today');
$yesterdayNum = $repository->dayOrderNum('yesterday');
$today = $repository->dayOrderNumGroup('today')->toArray();
$today = array_combine(array_column($today, 'time'), array_column($today, 'total'));
$monthOrderNum = $repository->dayOrderNum(date('Y/m/d', strtotime('first day of')) . ' 00:00:00' . '-' . date('Y/m/d H:i:s'));
$date = date('Y/m/01 00:00:00', strtotime('last Month')) . '-' . date('Y/m/d 00:00:00', strtotime('-1 day', strtotime('first day of')));
$beforeOrderNum = $repository->dayOrderNum($date);
$monthRate = $this->getRate($beforeOrderNum, $monthOrderNum);
$orderRate = $this->getRate($yesterdayNum, $orderNum);
$time = getTimes();
$data = [];
foreach ($time as $item) {
$data[] = [
'total' => $today[$item] ?? 0,
'time' => $item
];
}
$today = $data;
return app('json')->success(compact('orderNum', 'today', 'monthOrderNum', 'monthRate', 'orderRate'));
}
/**
* @param StoreOrderRepository $repository
* @return mixed
* @author xaboy
* @day 2020/6/25
*/
public function orderUser(StoreOrderRepository $repository)
{
$orderNum = $repository->dayOrderUserNum('today');
$yesterdayNum = $repository->dayOrderUserNum('yesterday');
$today = $repository->dayOrderUserGroup('today')->toArray();
$today = array_combine(array_column($today, 'time'), array_column($today, 'total'));
$monthOrderNum = $repository->dayOrderUserNum(date('Y/m/d', strtotime('first day of')) . ' 00:00:00' . '-' . date('Y/m/d H:i:s'));
$date = gmdate('Y/m/01 00:00:00', strtotime('last Month')) . '-' . date('Y/m/d 00:00:00', strtotime('-1 day', strtotime('first day of')));
$beforeOrderNum = $repository->dayOrderUserNum($date);
$monthRate = $this->getRate($beforeOrderNum, $monthOrderNum);
$orderRate = $this->getRate($yesterdayNum, $orderNum);
$time = getTimes();
$data = [];
foreach ($time as $item) {
$data[] = [
'total' => $today[$item] ?? 0,
'time' => $item
];
}
$today = $data;
return app('json')->success(compact('orderNum', 'today', 'monthOrderNum', 'monthRate', 'orderRate'));
}
/**
* @param StoreOrderProductRepository $repository
* @return mixed
* @author xaboy
* @day 2020/6/25
*/
public function merchantStock(StoreOrderProductRepository $repository)
{
$date = $this->request->param('date') ?: 'lately7';
$res = Cache::store('file')->remember(self::class . '@merchantStock' . $date, function () use ($date, $repository) {
$total = $repository->dateProductNum($date);
$list = $repository->orderProductGroup($date)->toArray();
foreach ($list as &$item) {
$item['rate'] = bcdiv($item['total'], $total, 2);
}
return compact('list', 'total');
}, 2000 + random_int(600, 1200));
return app('json')->success($res);
}
/**
* @param UserVisitRepository $repository
* @return mixed
* @author xaboy
* @day 2020/6/25
*/
public function merchantVisit(UserVisitRepository $repository)
{
$date = $this->request->param('date') ?: 'lately7';
$res = Cache::store('file')->remember(self::class . '@merchantVisit' . $date, function () use ($date, $repository) {
$total = $repository->dateVisitMerchantTotal($date);
$list = $repository->dateVisitMerchantNum($date)->toArray();
foreach ($list as &$item) {
$item['rate'] = bcdiv($item['total'], $total, 2);
}
return compact('list', 'total');
}, 2000 + random_int(600, 1200));
return app('json')->success($res);
}
/**
* @param StoreOrderRepository $repository
* @param MerchantCategoryRepository $merchantCategoryRepository
* @return mixed
* @author xaboy
* @day 2020/6/25
*/
public function merchantRate(StoreOrderRepository $repository, MerchantCategoryRepository $merchantCategoryRepository)
{
$date = $this->request->param('date') ?: 'lately7';
$res = Cache::store('file')->remember(self::class . '@merchantRate' . $date, function () use ($repository, $merchantCategoryRepository, $date) {
$total = $repository->dateOrderPrice($date);
$list = $merchantCategoryRepository->dateMerchantPriceGroup($date)->toArray();
$rate = 1;
$pay_price = $total;
foreach ($list as &$item) {
$item['rate'] = bcdiv($item['pay_price'], $total, 2);
$rate = bcsub($rate, $item['rate'], 2);
$pay_price = bcsub($pay_price, $item['pay_price'], 2);
}
if ($rate > 0 && count($list)) {
$list[] = [
'pay_price' => $pay_price,
'category_name' => '其他类',
'rate' => $rate
];
}
return compact('list', 'total');
}, 2000 + random_int(600, 1200));
return app('json')->success($res);
}
public function userData(UserRepository $repository, UserVisitRepository $visitRepository)
{
$date = $this->request->param('date') ?: 'lately7';
$res = Cache::store('file')->remember(self::class . '@userData' . $date, function () use ($visitRepository, $repository, $date) {
$newUserList = $repository->userNumGroup($date)->toArray();
$newUserList = array_combine(array_column($newUserList, 'time'), array_column($newUserList, 'new'));
$visitList = $visitRepository->dateVisitNumGroup($date)->toArray();
$visitList = array_combine(array_column($visitList, 'time'), array_column($visitList, 'total'));
$base = $repository->beforeUserNum(getStartModelTime($date));
$time = getDatesBetweenTwoDays(getStartModelTime($date), date('Y-m-d'));
$userList = [];
$before = $base;
foreach ($time as $item) {
$new = $newUserList[$item] ?? 0;
$before += $new;
$userList[] = [
'total' => $before,
'new' => $new,
'visit' => $visitList[$item] ?? 0,
'day' => $item
];
}
return $userList;
}, 2000 + random_int(600, 1200));
return app('json')->success($res);
}
/**
* @param $last
* @param $today
* @param int $scale
* @return int|string|null
* @author xaboy
* @day 2020/6/25
*/
protected function getRate($last, $today, $scale = 2)
{
if ($last == $today)
return 0;
else if ($last == 0)
return $today;
else if ($today == 0)
return -$last;
else
return (float)bcdiv(bcsub($today, $last, $scale), $last, $scale);
}
/**
* 申请授权
* @return mixed
*/
public function auth_apply()
{
// $data = $this->request->params([
// ['company_name', ''],
// ['domain_name', ''],
// ['order_id', ''],
// ['phone', ''],
// ['label', 10],
// ['captcha', ''],
// ]);
// if (!$data['company_name']) {
// return app('json')->fail('请填写公司名称');
// }
// if (!$data['domain_name']) {
// return app('json')->fail('请填写授权域名');
// }
// if (!$data['phone']) {
// return app('json')->fail('请填写手机号码');
// }
// if (!$data['order_id']) {
// return app('json')->fail('请填写订单id');
// }
// if (!$data['captcha']) {
// return app('json')->fail('请填写验证码');
// }
// $res = HttpService::postRequest('http://authorize.crmeb.net/api/auth_apply', $data);
// if ($res === false) {
// return app('json')->fail('申请失败,服务器没有响应!');
// }
// $res = json_decode($res, true);
// if (isset($res['status'])) {
// if ($res['status'] == 400) {
// return app('json')->fail($res['msg'] ?? "申请失败");
// } else {
// return app('json')->success($res['msg'] ?? '申请成功', $res);
// }
// }
// return app('json')->fail("申请授权失败!");
return app('json')->success($res['msg'] ?? '申请成功', $res);
}
public function uploadConfig(ConfigRepository $repository)
{
return app('json')->success(formToData($repository->uploadForm()));
}
public function saveUploadConfig(ConfigRepository $repository)
{
$formData = $this->request->post();
if (!count($formData)) return app('json')->fail('保存失败');
$repository->saveUpload($formData);
return app('json')->success('保存成功');
}
public function loginConfig()
{
$login_logo = systemConfig('sys_login_logo');
$menu_logo = systemConfig('sys_menu_logo');
$menu_slogo = systemConfig('sys_menu_slogo');
$login_title = systemConfig('sys_login_title');
$sys_login_banner = systemConfig('sys_login_banner');
$beian_sn = systemConfig('beian_sn');
$login_banner = [];
foreach ($sys_login_banner ?: [] as $item) {
$login_banner[] = [
'pic' => $item,
'name' => $item
];
}
return app('json')->success(compact('login_banner', 'login_logo', 'login_title', 'menu_slogo', 'menu_logo', 'beian_sn'));
}
public function version()
{
$sys_open_version = systemConfig('sys_open_version');
$data = [
'version' => get_crmeb_version('未知'),
'year' => '© 2014-' . date('Y', time()),
'beian_sn' => systemConfig('beian_sn'),
'url' => 'http://www.crmeb.com',
'Copyright' => 'Copyright',
'sys_open_version' => $sys_open_version === '' ? '1' : $sys_open_version,
];
$copyright = app()->make(CacheRepository::class)->getResultByKey('copyright_status');
if (!$copyright) {
$data['status'] = -1;
} else {
$copyright = app()->make(CacheRepository::class)->search(['copyright_status', 'copyright_context', 'copyright_image']);
$data['status'] = 1;
$data['Copyright'] = $copyright['copyright_context'] ?? '';
$data['image'] = $copyright['copyright_image'] ?? '';
$data['url'] = systemConfig('site_url');
}
return app('json')->success($data);
}
public function config()
{
$config = systemConfig(['delivery_type', 'delivery_status', 'sms_use_type', 'hot_ranking_lv', 'hot_ranking_switch']);
return app('json')->success($config);
}
public function getChangeColor()
{
return app('json')->success(systemConfig(['global_theme']));
}
public function setChangeColor()
{
$data = $this->request->params(['global_theme']);
$make = app()->make(ConfigValueRepository::class);
$make->setFormData($data, 0);
return app('json')->success('修改成功');
}
public function svaeCopyright()
{
$data = $this->request->params(['copyright_context', 'copyright_image']);
$copyright = app()->make(CacheRepository::class)->getResultByKey('copyright_status');
if (!$copyright)
return app('json')->fail('请先获取版权授权');
app()->make(CacheRepository::class)->saveAll($data);
return app('json')->success('修改成功');
}
public function test(){
// $this->sqlInit();
debug("调试结束...");
}
/******** 数据库批量处理 ***************************************/
private function sqlInit(){
// 不清除数据的表
$notCleanUp = [
];
// 获取全部数据库列表
$tables = $this->getAllTable();
// 获取存在数据的表
// $hasTable = $this->getHasDataTable($tables,$notCleanUp);
debug($tables);
// 执行清除操作
// foreach($tables as $name){
// if(!in_array($name,$notCleanUp)){
// // 判断是否操作uniacid=0的数据 存在则执行删除存在,不存在则执行清除操作
// $tableName = str_replace('ims_','',$name);
// if($this->isHasZeroData($name)){
// // echo $name."=有","<br />";
// $columns = \DB::select('SHOW COLUMNS FROM '.$name);
// $fields = array_column($columns,'Field');
// $primaryKey = $fields[0];
// $max = \DB::table($tableName)->where('uniacid',0)->max($primaryKey);
// \DB::table($tableName)->where('uniacid','>',0)->delete();
// // \DB::select('alter table '.$name.' AUTO_INCREMENT='.$max);
// }else{
// \DB::select('TRUNCATE TABLE '.$name.';');
// }
// }
// }
debug("处理完成");
}
// 数据库处理 - 获取全部数据库
private function getAllTable(){
$database = Db::query('SELECT DATABASE() as database_name')[0]['database_name'];
$tables = Db::query('SHOW TABLES');
return array_column($tables,'Tables_in_'.$database);
}
// 数据库处理 - 获取存在数据的表
private function getHasDataTable($tables,$notCleanUp){
$tableList = [];
foreach($tables as $tableName){
if(!in_array($tableName,$notCleanUp)){
echo "{$tableName}\n\r";
// 获取字段信息
$allFieldDesc = Db::query("show columns from {$tableName}");
$allField = array_column($allFieldDesc,'Field');
// if($this->isHasSpecifyData($allField,$name)) $tableList[] = $name;
$res = $this->isHasSpecifyData($allField,$tableName);
echo $res ? "存在\n\r" : "不存在\n\r";
if($res){
// 批量替换
$query = "UPDATE {$tableName} SET ";
$handleFieldNum = 0;
foreach($allFieldDesc as $fieldInfo){
if(strpos($fieldInfo['Type'], 'int') !== false || $fieldInfo['Key'] == 'PRI') continue;
$fieldName = $fieldInfo['Field'];
$query .= "`{$fieldName}` = REPLACE(`{$fieldName}`,'bt.test.cdlfjy.com','zc.test.cdlfjy.com'),";
++$handleFieldNum;
}
$query = trim($query);
$query = trim($query,',');
$query = trim($query);
echo "SQL({$handleFieldNum}){$query}\n";
if($handleFieldNum > 0) Db::query($query);
}
echo "\n\n\n";
}
}
return $tableList;
}
// 数据库处理 - 判断当前表是否具有指定内容
private function isHasSpecifyData($allField,$tableName){
$query = "select * from {$tableName} where (";
foreach($allField as $fieldName){
$query .= "`{$fieldName}` like '%bt.test.cdlfjy.com%' OR ";
}
$query = trim($query);
$query = trim($query,'OR');
$query = trim($query) . ")";
$result = Db::query($query);
if($result) return true;
return false;
}
}