Commit fcab7293 by Arthur

init

parent 68911668

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

File added
[2023-06-08 16:31:46]{"RequestHeader":{"Referer":"https://servicewechat.com/wxf02ceeaa45d1c9f4/13/page-frame.html","User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 16_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.37(0x1800252e) NetType/4G Language/en","Accept-Encoding":"gzip,compress,br,deflate","Version":"v2.0","Token":"eyJpdiI6IkwyMkxrbDExZEN3V3lFUVlnN0dKZkE9PSIsInZhbHVlIjoiNndSSnRlMVN2eFhcL0RKVkd4VlFSU3FFSWM4WU1nWDY4TU81dzRRa2RSd3Q5SGZqeFE4aVVnNGIrVXJMUzFGcnBMUEI0XC9yc1J2bDZlNm5OVEc4bmVmQjdRRTFOekNnczg3M1l3XC9vMkM5dGZlckJMakxsTWRsOVFpUmp6OVA3U1RVUWhXdFJFWVpUcGVZYXhjemRISGFRPT0iLCJtYWMiOiIzMGI3N2Q4ZGRlYmFiNThiZmQyMWJiYzk3YmJlZGFhODlkYzY0YWFhODRiMzBmNGE0OWRhYWNiNmU2MmVjMzdkIn0=","Content-Type":"application/json","From":"1","Wxversion":"release","X-Forwarded-For":"223.104.148.115","X-Real-Ip":"223.104.148.115","X-Client-Proto-Ver":"HTTP/1.1","X-Forwarded-Proto":"https","X-Client-Proto":"https","X-Stgw-Time":"1686213106.508","Content-Length":"119","Connection":"close","Host":"order.el.org"},"Time":"121ms","RequestData":{"shipping_method":"SF","trade_type":"minApp","payment_method":"WeixinPay","shipping_address_id":1012,"sku":"05005001"},"RespondData":"{"code":1,"message":"OK","data":{"order_sn":"2306082100001260","oms_return":{"order_sn":"2306082100001260","order_id":1260,"cps_link":"","created_at":"2023-06-08 16:31:46"}}}"}
{
"presets": [
[
"@babel/preset-env",
{
"modules": false
}
]
],
"plugins": [
["@babel/plugin-transform-runtime",{"corejs": 2}],
"@babel/plugin-transform-object-assign",
["@babel/plugin-proposal-decorators", { "legacy": true }],
"@babel/plugin-proposal-class-properties"
]
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<buildpath>
<buildpathentry kind="src" path=""/>
<buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
</buildpath>
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:r8fHV1c4tmyyFI0faw4W7gZOkqlfwPvPN36/UfFdTQ4=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://wx-small-api.com:81/
APPID=wx0cf228686c051055
SECRET=5366d19165b3072a1d224947c7faf738
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=wechat-state
DB_USERNAME=root
DB_PASSWORD=123456
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
* text=auto
*.css linguist-vendored
*.scss linguist-vendored
*.js linguist-vendored
CHANGELOG.md export-ignore
/node_modules
/public/js
/public/hot
/public/storage
/storage
/vendor
/.idea
/.vagrant
Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
.env
/public/upload/*
/public/logs
/storage/logs/*.log
/app/Console/Commands/Test.php
/config/database.php
\ No newline at end of file
<?php
namespace App\Console\Commands;
use App\Model\Element;
use App\Model\Pages;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Facades\DB;
class CmsOnline extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'cms:online';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Cms Auto Onlone.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$this->published();
$this->offine();
}
protected function published(){
$list=Pages::withCount('element')->with(['element'=>function(HasMany $query){
$query
->where([
['published_at','<',date("Y-m-d H:i:s")],
['published','0'],
])
;
}])->get()->filter(function($item,$key){
return $item->element->count() > 0 ;
});
dump($list->toArray());
foreach($list as $page){
foreach ($page->element as $element){
if($page->share_image){
$page->share_image = $ossDomain=env('OSS_DOMAIN').'/cms'.$page->share_image;
}
if($element['published_at'] < date('Y-m-d H:i:s')){
$status = 1;
DB::table('element_published')->where('id',$element['id'])->update(['published'=>1,'status'=>$status]);
$this->createAPI($page,$element,$status);
}
}
}
}
protected function offine(){
$list=Pages::withCount('element')->with(['element'=>function(HasMany $query){
$query
->where([
['offline_at','<',date("Y-m-d H:i:s")],
['offline','0'],
])
;
}])->get()->filter(function($item,$key){
return $item->element->count() > 0 ;
});
dump($list->toArray());
foreach($list as $page){
foreach ($page->element as $element){
if($page->share_image){
$page->share_image = $ossDomain=env('OSS_DOMAIN').'/cms'.$page->share_image;
}
if($element['published_at'] < date('Y-m-d H:i:s')){
$status = 0;
DB::table('element_published')->where('id',$element['id'])->update(['offline'=>1,'status'=>$status]);
$this->createAPI($page,$element,$status);
}
}
}
}
protected function createAPI($page,$element,$status){
$saveType=$element['type'];
if($saveType ==='h5') {
$ossFileName='os';
}elseif($saveType=='wechat'){
$ossFileName='wechat';
}else{
throw new \Exception('oss保存错误!');
}
$ossClient = new \App\Lib\Oss();
$path= 'cms/page/'.$page->key.'/'.$ossFileName.'.json';
$nodes=json_decode($element['content'],true);
unset($page->element_count);
unset($page->element);
$page->nodes=$nodes??"[]";
$page->status=$status;
$content = json_encode($page);
$ossClient->putObject($path,$content);
}
}
<?php
namespace App\Console\Commands;
use function AlibabaCloud\Client\json;
use App\Model\Element;
use App\Model\Pages;
use FFMpeg\Coordinate\TimeCode;
use FFMpeg\FFMpeg;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Facades\DB;
use App\Lib\Http;
class Import extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'import:product_detail {--filename=}';
protected $_http;
const IMPORT_KEY = 'import_product_detail';
protected $importId;
protected $errorLines=[];
/**
* The console command description.
*
* @var string
*/
protected $description = '批量导入商品图文详情';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
$this->_http = new Http();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$csvFile=$this->option('filename');
if(!$csvFile){
return $this->error('filename必传');
}
$lineCount = $this->getLineCount($csvFile);
if($lineCount>0){
$importId=DB::table('import_log')->insertGetId(['count'=>$lineCount,'filename'=>$csvFile]);
$this->importId = $importId;
$this->getCsvData($csvFile);
$data=[
'finished'=>date("Y-m-d H:i:s")
];
if(count($this->errorLines)>0){
$data['error_ids'] =join(',',$this->errorLines);
}
$this->updateStatus($data);
}
}
public function updateStatus($data){
dump($data);
DB::table('import_log')->where('id',$this->importId)->update($data);
}
public function getLineCount($csvFile){
$command ='wc -l '.$csvFile ."|awk '{print $1}'";
$return = (int) trim(shell_exec($command),"\n");
return $return - 1;
}
protected function getCsvData($file){
if(!is_file($file)){
$this->updateStatus(['message'=>'不是文件']);
dd('不是文件');
}
$handle = fopen($file,'r');
if(!$handle){
$this->updateStatus(['message'=>'读取文件失败']);
dd('读取文件失败');
}
$i =0;
while(($data = fgetcsv($handle))!==false){
if($i == 0 ){
if($data[0]!=='SPU' || $data[1]!=='TYPE' || $data[2]!=='MEDIA1' ||$data[3]!=='MEDIA2'||$data[4]!=='MEDIA3'||$data[5]!=='MEDIA4'||$data[6]!=='MEDIA5'||$data[7]!=='MEDIA6' ){
$this->updateStatus(['message'=>'标题不对']);
return false;
}
}
if($i>0){
if(count($data)!=8){
$this->updateStatus(['message'=>sprintf("第%s行:列数不对",$i + 1)]);
}else{
$this->importImages($data,$i);
}
}
$i++;
}
}
protected function importImages($data,$i){
$sku = $data[0];
$type = $data[1];
$imagesTag=false;
$kvTag=false;
$imageArray = array_slice($data,2);
if($type=='detail'){
$imagesTag=$this->createMultiTag($sku,$imageArray);
$imagesTag = json_encode($imagesTag);
}
if($type=='kv'){
$kvTag=$this->createImageTag($sku,$imageArray);
$kvTag = json_encode($kvTag);
}
$params=[
'id'=>$sku,
'kv_images'=>$kvTag,
];
$this->save($params,$i);
}
protected function createImageTag($sku,$imageArray){
$images=[];
$dir='/upload/spu_images/';
foreach($imageArray as $image){
$image=strtolower(trim($image));
$dir='/upload/spu_images/';
$fileFullPath=public_path(".".$dir.$image);
if(!is_file($fileFullPath)){
$this->info(sprintf("SPU:%s中的素材不存在:%s",$sku,$fileFullPath));
continue;
}
$finfo = finfo_open(FILEINFO_MIME);
$mime=finfo_file($finfo,$fileFullPath);
finfo_close($finfo);
if(strpos($mime,'video')===0){
$config = [
'ffmpeg.binaries' => env('ffmpeg'),
'ffprobe.binaries' => env('ffprobe'),
];
// $ffprobe = FFProbe::create($config);
// $info=$ffprobe
// ->streams($path)
// ->videos()
// ->first();
// $width=$info->get('width');
// $height=$info->get('height');
$ffmpeg = FFMpeg::create($config);
$string=uniqid();
if(!is_dir(public_path($dir."screenshot"))){
mkdir(public_path($dir."screenshot"), 0777, true);
}
$mp4Path=public_path(".".$dir.$image);
$mp4=$ffmpeg->open($mp4Path);
$screenshot= $dir."screenshot/" .$string.'_screenshot.jpg';
$mp4->frame(TimeCode::fromSeconds(1))->save(public_path(".".$screenshot));
$imageObj=[
"tag"=>"video",
"data"=>[
"src"=>$this->getOssPath($sku,$screenshot),
"video"=>$this->getOssPath($sku,$dir.$image),
]
];
}else{
$imageObj=[
"tag"=>"image",
"data"=>[
"src"=>$this->getOssPath($sku, $dir.$image),
]
];
}
$images [] = $imageObj;
}
return $images;
}
protected function createMultiTag($sku,$imageArray){
$nodes = [];
foreach($imageArray as $image){
$imageObj=[
"tag"=>"image",
"src"=>$this->getOssPath($sku,$image),
"action"=>[
"data"=>"",
"type"=>"none",
"route"=>"",
"height"=>""
]
];
$nodes [] = $imageObj;
}
$tag =[
"tag"=>"multi_image",
"name"=>"多图",
"nodes"=>$nodes,
"height"=>"",
"columns"=>1
];
return [$tag];
}
protected function getOssPath($sku,$filename){
return env('OSS_DOMAIN').$filename;
}
public function save($data,$i){
$result=$this->curl('goods/spu/saveDetail',$data);
if(isset($result['code']) && $result['code']==1){
DB::table('import_log')->where('id',$this->importId)->increment('success');
}else{
DB::table('import_log')->where('id',$this->importId)->increment('error');
$this->errorLines[]=$i+1;
}
return $result;
}
public function curl($apiName, $data = [])
{
return $this->_http->curl($apiName, $data);
}
}
<?php
namespace App\Console\Commands;
use function AlibabaCloud\Client\json;
use App\Model\Element;
use App\Model\Pages;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Facades\DB;
use App\Lib\Http;
class Import extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'import:product_detail {--filename=}';
protected $_http;
const IMPORT_KEY = 'import_product_detail';
protected $importId;
protected $errorLines=[];
/**
* The console command description.
*
* @var string
*/
protected $description = '批量导入商品图文详情';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
$this->_http = new Http();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$csvFile=$this->option('filename');
if(!$csvFile){
return $this->error('filename必传');
}
$lineCount = $this->getLineCount($csvFile);
if($lineCount>0){
$importId=DB::table('import_log')->insertGetId(['count'=>$lineCount,'filename'=>$csvFile]);
$this->importId = $importId;
$this->getCsvData($csvFile);
$data=[
'finished'=>date("Y-m-d H:i:s")
];
if(count($this->errorLines)>0){
$data['error_ids'] =join(',',$this->errorLines);
}
$this->updateStatus($data);
}
}
public function updateStatus($data){
DB::table('import_log')->where('id',$this->importId)->update($data);
}
public function getLineCount($csvFile){
$command ='wc -l '.$csvFile ."|awk '{print $1}'";
$return = (int) trim(shell_exec($command),"\n");
return $return - 1;
}
protected function getCsvData($file){
if(!is_file($file)){
$this->updateStatus(['message'=>'不是文件']);
dd('不是文件');
}
$handle = fopen($file,'r');
if(!$handle){
$this->updateStatus(['message'=>'读取文件失败']);
dd('读取文件失败');
}
$i =0;
while(($data = fgetcsv($handle))!==false){
if($i == 0 ){
if($data[0]!=='SKU' || $data[1]!=='TYPE' || $data[2]!=='IMAGE' ){
$this->updateStatus(['message'=>'标题不对,SKU,TYPE:(detail,kv),IMAGE']);
dd('标题不对');
}
}
if($i>0 && count($data)>2){
$this->importImages($data,$i);
}
$i++;
}
}
protected function importImages($data,$i){
$sku = $data[0];
$type = $data[1];
$imagesTag=false;
$kvTag=false;
$imageArray = array_slice($data,2);
if($type=='detail'){
$imagesTag=$this->createMultiTag($sku,$imageArray);
$imagesTag = json_encode($imagesTag);
}
if($type=='kv'){
$kvTag=$this->createImageTag($sku,$imageArray);
$kvTag = json_encode($kvTag);
}
$params=[
'id'=>$sku,
'wechat'=>$imagesTag,
'pc'=>$imagesTag,
'kv_images'=>$kvTag,
];
$this->save($params,$i);
}
protected function createImageTag($sku,$imageArray){
$images=[];
foreach($imageArray as $image){
$imageObj=[
"tag"=>"image",
"data"=>[
"src"=>$this->getOssPath($sku,$image),
]
];
$images [] = $imageObj;
}
return $images;
}
protected function createMultiTag($sku,$imageArray){
$nodes = [];
foreach($imageArray as $image){
$imageObj=[
"tag"=>"image",
"src"=>$this->getOssPath($sku,$image),
"action"=>[
"data"=>"",
"type"=>"none",
"route"=>"",
"height"=>""
]
];
$nodes [] = $imageObj;
}
$tag =[
"tag"=>"multi_image",
"name"=>"多图",
"nodes"=>$nodes,
"height"=>"",
"columns"=>1
];
return [$tag];
}
protected function getOssPath($sku,$filename){
return env('OSS_DOMAIN').'/cms/upload/spu_images/'.$sku.'/'.$filename;
}
public function save($data,$i){
$result=$this->curl('goods/spu/saveDetail',$data);
if(isset($result['code']) && $result['code']==1){
DB::table('import_log')->where('id',$this->importId)->increment('success');
}else{
DB::table('import_log')->where('id',$this->importId)->increment('error');
$this->errorLines[]=$i+1;
}
return $result;
}
public function curl($apiName, $data = [])
{
return $this->_http->curl($apiName, $data);
}
}
<?php
namespace App\Console\Commands;
use function AlibabaCloud\Client\json;
use App\Model\Element;
use App\Model\Pages;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Facades\DB;
use App\Lib\Http;
use Swoole;
use Swoole\Process;
use Swoole\Event;
class ImportDo extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'import:do {--filename=}';
/**
* The console command description.
*
* @var string
*/
protected $description = '批量导入商品图文主程序';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle(){
try{
$worker = new Process(function ($worker) {
Event::add($worker->pipe, function ($pipe) use ($worker) {
$csvFile = $worker->read();
$artisan = base_path().'/artisan';
$command ='php '.$artisan.' import:product_detail --filename='.$csvFile;
$result=shell_exec($command);
Event::del($worker->pipe);
//退出子进程
$worker->exit();
});
},false,1,false);
$worker->name('import_process');
$worker->start();
$csvFile=$this->option('filename');
$worker->write($csvFile);
Process::signal(SIGCHLD, function ($sig) {
while ($ret = Process::wait(false)) {
}
});
return [
'status'=>1,
'message'=>'请耐心等待程序处理完毕',
'data'=>[
'file'=>$csvFile
]
];
}catch (\Exception $e){
return [
'status'=>0,
'message'=>$e->getMessage(),
];
}
}
}
<?php
namespace App\Console\Commands;
use App\Model\Log;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Ring\Exception\ConnectException;
use Illuminate\Console\Command;
use App\Http\Controllers\Api\MiniAppCollectController;
use PHPMailer\PHPMailer\Exception;
class MiniappRetainCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'miniapp:retain';
/**
* The console command description.
*
* @var string
*/
protected $description = '拉取并保存前一天的每日留存数据';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//一次拉取小程序留资的相关数据
$miniApp = new MiniAppCollectController();
try {
$miniApp->getDataDailyRetain();
$miniApp->getDataDailySummary();
$miniApp->getDataDailyVisitTrend();
$miniApp->getDataMonthlyRetain();
$miniApp->getDataMonthlyVisitTrend();
$miniApp->getDataUserPortraitDaily();
$miniApp->getDataUserPortraitWeekly();
$miniApp->getDataUserPortraitMonthly();
$miniApp->getDataVisitDistribution();
$miniApp->getDataVisitPage();
$miniApp->getDataWeeklyVisitTrend();
$miniApp->getDataWeeklyRetain();
} catch (GuzzleException $exception) {
echo $exception;
}
}
}
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Service\BaiWangAuthApi;
/**
* ╔═════════════╦══════════════════════════════════════════
* ║File Name ║ NewAuthrizerToken.php
* ╠═ ═ ═ ═ ═ ═ ═╬═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═
* ║Class Name ║ NewAuthrizerToken
* ╠═ ═ ═ ═ ═ ═ ═╬═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═
* ║Created Date ║ 2020-07-31
* ╠═ ═ ═ ═ ═ ═ ═╬═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═
* ║Created By ║ william.ji@connext.com.cn
* ╠═ ═ ═ ═ ═ ═ ═╬═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═
* ║Copy Right ║ CONNEXT
* ╠═ ═ ═ ═ ═ ═ ═╬═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═
* ║Use For ║ 获取token
* ╚═════════════╩══════════════════════════════════════════
*/
class NewAuthrizerToken extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'oauthToken:new {appKey}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
*
* 获取客户的Token
*
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function handle()
{
$appKey = $this->argument('appKey');
BaiWangAuthApi::getInstance()->newAccessToken($appKey);
}
}
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Http\Controllers\Api\ProdstatToDbController;
class ProdstatToDbCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'prodstat:todb';
/**
* The console command description.
*
* @var string
*/
protected $description = '将Redis里面存储的搜索、产品浏览等排行从Redis中写入DB';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$prod = new ProdstatToDbController();
try {
$prod->AddCartToDB();
// $prod->ProdFavoriteToDB();
$prod->ProdShareToDB();
// $prod->ProdViewByProdTypeToDB();
$prod->catViewToDB();
$prod->ProdViewToDB();
$prod->SearchKeywordToDB();
} catch (\Exception $exception) {
echo $exception;
}
}
}
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Model\ThrAccessInfo;
use App\Service\BaiWangAuthApi;
use App\Tools\Lock;
/**
* ╔═════════════╦══════════════════════════════════════════
* ║File Name ║ RefreshAuthrizerToken.php
* ╠═ ═ ═ ═ ═ ═ ═╬═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═
* ║Class Name ║ RefreshAuthrizerToken
* ╠═ ═ ═ ═ ═ ═ ═╬═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═
* ║Created Date ║ 2020-07-31
* ╠═ ═ ═ ═ ═ ═ ═╬═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═
* ║Created By ║ william.ji@connext.com.cn
* ╠═ ═ ═ ═ ═ ═ ═╬═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═
* ║Copy Right ║ CONNEXT
* ╠═ ═ ═ ═ ═ ═ ═╬═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═
* ║Use For ║ 刷新token
* ╚═════════════╩══════════════════════════════════════════
*/
class RefreshAuthrizerToken extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'oauthToken:refresh';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* 刷新客户即将过期的Token
*
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function handle()
{
if (Lock::processLock('oauthToken_refresh')) {
$timeOutAuthRows = ThrAccessInfo::where('expired_at', '<=', date('Y-m-d H:i:s'))->get()->toArray();
if (!empty($timeOutAuthRows)) {
foreach ($timeOutAuthRows as $timeOutAuthRow) {
try {
BaiWangAuthApi::getInstance()->refreshAccessToken($timeOutAuthRow['authorizer_appid'], $timeOutAuthRow);
echo '[Refresh Token]#' . $timeOutAuthRow['authorizer_appid'] . '#Success#' . date('Y-m-d H:i:s') . "\r\n";
} catch (Exception $e) {
echo '[Refresh Token]#' . $timeOutAuthRow['authorizer_appid'] . '#' . $e->getMessage() . '#' . date('Y-m-d H:i:s') . "\r\n";
}
}
} else {
echo '[Refresh Token]##No Expired#' . date('Y-m-d H:i:s') . "\r\n";
}
} else {
echo '[Refresh Token]##Last Process Still Running#' . date('Y-m-d H:i:s') . "\r\n";
}
}
}
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class RunShellCommand extends Command
{
protected $signature = 'run:shell {option}';
protected $description = 'Run shell';
public function __construct(){
parent::__construct();
}
public function handle()
{
try{
$option = $this->argument('option');
$allow_options = ['makedir','cacheFileClean','redisclear'];
if(in_array($option,$allow_options)){
call_user_func([__CLASS__,$option]);
}
$this->line('All done');
}catch (\Exception $e){
$this->error($e->getMessage());
}
}
/**
* 生成目录
*/
protected function makedir(){
$upload_path = public_path().config('arden.upload').'/';
$cache_path = $upload_path.'cache/';
$this->mkdir($cache_path);
$log_path = public_path().'/logs/';
$this->mkdir($log_path);
}
private function mkdir($path,$mode = 0744){
if(!is_dir($path)){
mkdir($path,$mode,true);
}
}
/**
* 清除上传图片的缓存
*/
protected function cachefileclean(){
$cache_path = public_path().config('arden.upload').'/cache/';
$files = scandir($cache_path);
chdir($cache_path);
$time = time();
foreach($files as $file){
//删除一周前的缓存文件
if(($time-filemtime($file))>3600*24*7){
@unlink($file);
}
}
}
/**
* 清空Redis中相应的数据
*/
protected function redisclear(){
$redis = app('redis.connection');
//清除类目的数据
$redis->hdel(env('APP_NAME').'_Taxonomy');
}
}
\ No newline at end of file
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Http\Controllers\Api\UserTrackingController;
class UserTrackingCammand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'user:tracking';
/**
* The console command description.
*
* @var string
*/
protected $description = '拉取并保存前一天前端埋点UV数据到DB';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$userTracking = new UserTrackingController();
try{
$userTracking->DailyUserTracking();
$userTracking->makeBounceRate();
}
catch (\Exception $exception){
echo $exception;
}
}
}
{"Response_UUID":"93cd72b7-a273-8c17-1ab7-36370a79e1df","Request_Time":"2020-03-17 16:52:45","Request_IP":false,"HTTP code":404,"Response_Time":"2020-03-17 16:52:49","Response_Body":"{\"RequestId\":\"A2B78B4B-47AF-41B4-B3F4-E82BDEF8A641\",\"HostId\":\"cdn.aliyuncs.com\",\"Code\":\"InvalidDomain.NotFound\",\"Message\":\"The domain provided does not belong to you.\"}"}
{"Response_UUID":"d4c389e9-947f-6ae9-ed3f-8f1755fe5c14","Request_Time":"2020-03-17 16:53:21","Request_IP":false,"HTTP code":404,"Response_Time":"2020-03-17 16:53:25","Response_Body":"{\"RequestId\":\"8788EEA2-A1A8-431B-BEF2-3AD18844B6D9\",\"HostId\":\"cdn.aliyuncs.com\",\"Code\":\"InvalidDomain.NotFound\",\"Message\":\"The domain provided does not belong to you.\"}"}
{"Response_UUID":"e648023f-8ae1-a775-2841-ef24a70dec48","Request_Time":"2020-03-17 16:53:45","Request_IP":false,"HTTP code":404,"Response_Time":"2020-03-17 16:53:49","Response_Body":"{\"RequestId\":\"72D50C34-1435-4A7F-AC30-582ABCC9AAC6\",\"HostId\":\"cdn.aliyuncs.com\",\"Code\":\"InvalidDomain.NotFound\",\"Message\":\"The domain provided does not belong to you.\"}"}
{"Response_UUID":"b174381b-d5f9-cb5b-1587-851b68db3d62","Request_Time":"2020-03-17 17:24:54","Request_IP":false,"HTTP code":404,"Response_Time":"2020-03-17 17:25:00","Response_Body":"{\"RequestId\":\"397355D1-640C-44D6-BDF8-BD267F8EEB9B\",\"HostId\":\"cdn.aliyuncs.com\",\"Code\":\"InvalidDomain.NotFound\",\"Message\":\"The domain provided does not belong to you.\"}"}
{"Response_UUID":"35c6196b-ffa8-9354-c116-dbe26786aaf2","Request_Time":"2020-03-17 18:02:11","Request_IP":false,"HTTP code":404,"Response_Time":"2020-03-17 18:02:27","Response_Body":"{\"RequestId\":\"4F035088-8070-4577-9535-BF53C830B84E\",\"HostId\":\"cdn.aliyuncs.com\",\"Code\":\"InvalidDomain.NotFound\",\"Message\":\"The domain provided does not belong to you.\"}"}
{"Response_UUID":"787385da-0165-9365-9c4d-1f752925c901","Request_Time":"2020-03-17 18:24:38","Request_IP":false,"HTTP code":404,"Response_Time":"2020-03-17 18:24:41","Response_Body":"{\"RequestId\":\"BD33E584-EACD-443D-A527-6C1BD1DBCB9B\",\"HostId\":\"cdn.aliyuncs.com\",\"Code\":\"InvalidDomain.NotFound\",\"Message\":\"The domain provided does not belong to you.\"}"}
{"Response_UUID":"7c9a9a7a-ac0a-2787-58cc-bf6558a9fb3f","Request_Time":"2020-03-17 18:28:52","Request_IP":false,"HTTP code":404,"Response_Time":"2020-03-17 18:28:55","Response_Body":"{\"RequestId\":\"489F6AA7-AF0E-4D8E-BB83-E64232D39F07\",\"HostId\":\"cdn.aliyuncs.com\",\"Code\":\"InvalidDomain.NotFound\",\"Message\":\"The domain provided does not belong to you.\"}"}
{"Response_UUID":"011504fc-249e-f568-c144-82e68e5d7376","Request_Time":"2020-03-17 18:34:06","Request_IP":false,"HTTP code":404,"Response_Time":"2020-03-17 18:34:09","Response_Body":"{\"RequestId\":\"D1FFFB1D-F386-4B9F-80D3-54484CB13A5E\",\"HostId\":\"cdn.aliyuncs.com\",\"Code\":\"InvalidDomain.NotFound\",\"Message\":\"The domain provided does not belong to you.\"}"}
{"Response_UUID":"0a60d1c9-0600-9239-9349-49a4da425e65","Request_Time":"2020-03-17 18:34:09","Request_IP":false,"HTTP code":404,"Response_Time":"2020-03-17 18:34:12","Response_Body":"{\"RequestId\":\"BEA6F223-CD4B-4154-8696-F177428B56FF\",\"HostId\":\"cdn.aliyuncs.com\",\"Code\":\"InvalidDomain.NotFound\",\"Message\":\"The domain provided does not belong to you.\"}"}
{"Response_UUID":"e051f0c7-df2c-e246-94d3-e4b96205225f","Request_Time":"2020-03-17 18:36:04","Request_IP":false,"HTTP code":404,"Response_Time":"2020-03-17 18:36:07","Response_Body":"{\"RequestId\":\"5813EDC5-A651-4639-A802-94FE3F77F704\",\"HostId\":\"cdn.aliyuncs.com\",\"Code\":\"InvalidDomain.NotFound\",\"Message\":\"The domain provided does not belong to you.\"}"}
{"Response_UUID":"bae2aedb-07e1-a930-fab2-e111f61fae6d","Request_Time":"2020-03-17 18:36:21","Request_IP":false,"HTTP code":404,"Response_Time":"2020-03-17 18:36:25","Response_Body":"{\"RequestId\":\"48F3862A-FCAC-47A1-AC8A-112E36FB4ABD\",\"HostId\":\"cdn.aliyuncs.com\",\"Code\":\"InvalidDomain.NotFound\",\"Message\":\"The domain provided does not belong to you.\"}"}
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
Commands\RunShellCommand::class,
Commands\MiniappRetainCommand::class,
Commands\ProdstatToDbCommand::class,
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')
// ->hourly();
$schedule->command("miniapp:retain")->twiceDaily($first = 8, $second = 13);
//微信那边次日方可获取数据,但是不一定有。所以一天两次稍微保险一点
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}
{"Request_body":[[]],"Request_Time":"2020-03-17 16:52:45","Request_IP":false,"Method":"https:\/\/cdn.aliyuncs.com?AccessKeyId=LTAI4FpGXZye4dvURWriZ3zZ&Action=RefreshObjectCaches&Format=JSON&ObjectPath=https%3A%2F%2Fcss-wec-wec-uat.oss-cn-shenzhen.aliyuncs.com%2Fcms%2Fmg%2Fpage%2F400012.json&ObjectType=File&SignatureMethod=HMAC-SHA1&SignatureNonce=6d961234be9e234e5de0fc49d36816a1&SignatureVersion=1.0&Timestamp=2020-03-17T08%3A52%3A48Z&Version=2018-05-10&Signature=4kiWReTuQ%2FYHjfxmvrK9wbhrEBI%3D","URL":"POST","HostName":"localhost.localdomain","Headers":"","HTTP code":404,"Response_Time":"2020-03-17 16:52:49","Response_UUID":"93cd72b7-a273-8c17-1ab7-36370a79e1df"}
{"Request_body":[[]],"Request_Time":"2020-03-17 16:53:21","Request_IP":false,"Method":"https:\/\/cdn.aliyuncs.com?AccessKeyId=LTAI4FpGXZye4dvURWriZ3zZ&Action=RefreshObjectCaches&Format=JSON&ObjectPath=https%3A%2F%2Fcss-wec-wec-uat.oss-cn-shenzhen.aliyuncs.com%2Fcms%2Fmg%2Fpage%2F400012.json&ObjectType=File&SignatureMethod=HMAC-SHA1&SignatureNonce=9eb0edf0f61baf9848af4d0cf645fd80&SignatureVersion=1.0&Timestamp=2020-03-17T08%3A53%3A24Z&Version=2018-05-10&Signature=vlSScTEAyhWB0emV2OQYfSPzsYY%3D","URL":"POST","HostName":"localhost.localdomain","Headers":"","HTTP code":404,"Response_Time":"2020-03-17 16:53:25","Response_UUID":"d4c389e9-947f-6ae9-ed3f-8f1755fe5c14"}
{"Request_body":[[]],"Request_Time":"2020-03-17 16:53:45","Request_IP":false,"Method":"https:\/\/cdn.aliyuncs.com?AccessKeyId=LTAI4FpGXZye4dvURWriZ3zZ&Action=RefreshObjectCaches&Format=JSON&ObjectPath=https%3A%2F%2Fcss-wec-wec-uat.oss-cn-shenzhen.aliyuncs.com%2Fcms%2Fmg%2Fpage%2F400012.json&ObjectType=File&SignatureMethod=HMAC-SHA1&SignatureNonce=e60231342dd0920a64f09bfce098e14a&SignatureVersion=1.0&Timestamp=2020-03-17T08%3A53%3A48Z&Version=2018-05-10&Signature=A25sD6sk4F6sa1rcCFDUI0b7Wc4%3D","URL":"POST","HostName":"localhost.localdomain","Headers":"","HTTP code":404,"Response_Time":"2020-03-17 16:53:49","Response_UUID":"e648023f-8ae1-a775-2841-ef24a70dec48"}
{"Request_body":[[]],"Request_Time":"2020-03-17 17:24:54","Request_IP":false,"Method":"https:\/\/cdn.aliyuncs.com?AccessKeyId=LTAI4FpGXZye4dvURWriZ3zZ&Action=RefreshObjectCaches&Format=JSON&ObjectPath=https%3A%2F%2Fcss-wec-wec-uat.oss-cn-shenzhen.aliyuncs.com%2Fcms%2Fmg%2Fpage%2F400012.json&ObjectType=File&SignatureMethod=HMAC-SHA1&SignatureNonce=c594bd58e17feb1463cd0823f11ef1c6&SignatureVersion=1.0&Timestamp=2020-03-17T09%3A24%3A59Z&Version=2018-05-10&Signature=UXmDQxFmgJVXKu1mSwRnjoU9nF4%3D","URL":"POST","HostName":"localhost.localdomain","Headers":"","HTTP code":404,"Response_Time":"2020-03-17 17:25:00","Response_UUID":"b174381b-d5f9-cb5b-1587-851b68db3d62"}
{"Request_body":[[]],"Request_Time":"2020-03-17 18:02:11","Request_IP":false,"Method":"https:\/\/cdn.aliyuncs.com?AccessKeyId=LTAI4FpGXZye4dvURWriZ3zZ&Action=RefreshObjectCaches&Format=JSON&ObjectPath=https%3A%2F%2Fcss-wec-wec-uat.oss-cn-shenzhen.aliyuncs.com%2Fcms%2Fmg%2Fpage%2F400012.json&ObjectType=File&SignatureMethod=HMAC-SHA1&SignatureNonce=4fc8901361f690bf045dd53c63dfb752&SignatureVersion=1.0&Timestamp=2020-03-17T10%3A02%3A26Z&Version=2018-05-10&Signature=tub2v2b0WttzBkDKW44OHKYcj3c%3D","URL":"POST","HostName":"localhost.localdomain","Headers":"","HTTP code":404,"Response_Time":"2020-03-17 18:02:27","Response_UUID":"35c6196b-ffa8-9354-c116-dbe26786aaf2"}
{"Request_body":[[]],"Request_Time":"2020-03-17 18:24:38","Request_IP":false,"Method":"https:\/\/cdn.aliyuncs.com?AccessKeyId=LTAI4FpGXZye4dvURWriZ3zZ&Action=RefreshObjectCaches&Format=JSON&ObjectPath=https%3A%2F%2Fcss-wec-wec-uat.oss-cn-shenzhen.aliyuncs.com%2Fcms%2Fmg%2Fpage%2F400012.json&ObjectType=File&SignatureMethod=HMAC-SHA1&SignatureNonce=01b32dbc910a213cebf9b9214978194e&SignatureVersion=1.0&Timestamp=2020-03-17T10%3A24%3A41Z&Version=2018-05-10&Signature=7x51WvuC%2B7PwW4G6nA4qEic0qoE%3D","URL":"POST","HostName":"localhost.localdomain","Headers":"","HTTP code":404,"Response_Time":"2020-03-17 18:24:41","Response_UUID":"787385da-0165-9365-9c4d-1f752925c901"}
{"Request_body":[[]],"Request_Time":"2020-03-17 18:28:52","Request_IP":false,"Method":"https:\/\/cdn.aliyuncs.com?AccessKeyId=LTAI4FpGXZye4dvURWriZ3zZ&Action=RefreshObjectCaches&Format=JSON&ObjectPath=https%3A%2F%2Fcss-wec-wec-uat.oss-cn-shenzhen.aliyuncs.com%2Fcms%2Fmb%2Fpage%2F300011.json&ObjectType=File&SignatureMethod=HMAC-SHA1&SignatureNonce=1054d3b78f3e5227cf5fc1b88422c472&SignatureVersion=1.0&Timestamp=2020-03-17T10%3A28%3A55Z&Version=2018-05-10&Signature=XcHfQRcQ65hlEQv6xpu6ij8%2BlBk%3D","URL":"POST","HostName":"localhost.localdomain","Headers":"","HTTP code":404,"Response_Time":"2020-03-17 18:28:55","Response_UUID":"7c9a9a7a-ac0a-2787-58cc-bf6558a9fb3f"}
{"Request_body":[[]],"Request_Time":"2020-03-17 18:34:06","Request_IP":false,"Method":"https:\/\/cdn.aliyuncs.com?AccessKeyId=LTAI4FpGXZye4dvURWriZ3zZ&Action=RefreshObjectCaches&Format=JSON&ObjectPath=https%3A%2F%2Fcss-wec-wec-uat.oss-cn-shenzhen.aliyuncs.com%2Fcms%2Fmb%2Fpage%2F300011.json&ObjectType=File&SignatureMethod=HMAC-SHA1&SignatureNonce=aa6b95bb7e69f9a23220de0a55996d90&SignatureVersion=1.0&Timestamp=2020-03-17T10%3A34%3A08Z&Version=2018-05-10&Signature=Q6LHXhpFVysP2YvU79Ii9o6VacQ%3D","URL":"POST","HostName":"localhost.localdomain","Headers":"","HTTP code":404,"Response_Time":"2020-03-17 18:34:09","Response_UUID":"011504fc-249e-f568-c144-82e68e5d7376"}
{"Request_body":[[]],"Request_Time":"2020-03-17 18:34:09","Request_IP":false,"Method":"https:\/\/cdn.aliyuncs.com?AccessKeyId=LTAI4FpGXZye4dvURWriZ3zZ&Action=RefreshObjectCaches&Format=JSON&ObjectPath=https%3A%2F%2Fcss-wec-wec-uat.oss-cn-shenzhen.aliyuncs.com%2Fcms%2Fmg%2Fpage%2F400012.json&ObjectType=File&SignatureMethod=HMAC-SHA1&SignatureNonce=c60a97dbc280ffa80634ed063fe04d8b&SignatureVersion=1.0&Timestamp=2020-03-17T10%3A34%3A12Z&Version=2018-05-10&Signature=BohajGF2rZGjld3IZXBVDFKLLXU%3D","URL":"POST","HostName":"localhost.localdomain","Headers":"","HTTP code":404,"Response_Time":"2020-03-17 18:34:12","Response_UUID":"0a60d1c9-0600-9239-9349-49a4da425e65"}
{"Request_body":[[]],"Request_Time":"2020-03-17 18:36:04","Request_IP":false,"Method":"https:\/\/cdn.aliyuncs.com?AccessKeyId=LTAI4FpGXZye4dvURWriZ3zZ&Action=RefreshObjectCaches&Format=JSON&ObjectPath=https%3A%2F%2Fcss-wec-wec-uat.oss-cn-shenzhen.aliyuncs.com%2Fcms%2Fmg%2Fpage%2F400012.json&ObjectType=File&SignatureMethod=HMAC-SHA1&SignatureNonce=5f536e3c55d73bfc01dc3f9a3cc2109b&SignatureVersion=1.0&Timestamp=2020-03-17T10%3A36%3A06Z&Version=2018-05-10&Signature=eAIGbT3RPXwpKa0qEurVPSg6pdA%3D","URL":"POST","HostName":"localhost.localdomain","Headers":"","HTTP code":404,"Response_Time":"2020-03-17 18:36:07","Response_UUID":"e051f0c7-df2c-e246-94d3-e4b96205225f"}
{"Request_body":[[]],"Request_Time":"2020-03-17 18:36:21","Request_IP":false,"Method":"https:\/\/cdn.aliyuncs.com?AccessKeyId=LTAI4FpGXZye4dvURWriZ3zZ&Action=RefreshObjectCaches&Format=JSON&ObjectPath=https%3A%2F%2Fcss-wec-wec-uat.oss-cn-shenzhen.aliyuncs.com%2Fcms%2Fmb%2Fpage%2F300011.json&ObjectType=File&SignatureMethod=HMAC-SHA1&SignatureNonce=33e61287ca38529ca687f11e4c885411&SignatureVersion=1.0&Timestamp=2020-03-17T10%3A36%3A24Z&Version=2018-05-10&Signature=KynqGn%2FAQryou%2FMuTgh02KqOzEg%3D","URL":"POST","HostName":"localhost.localdomain","Headers":"","HTTP code":404,"Response_Time":"2020-03-17 18:36:25","Response_UUID":"bae2aedb-07e1-a930-fab2-e111f61fae6d"}
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
{
/**
* A list of the exception types that are not reported.
*
* @var array
*/
protected $dontReport = [
//
];
/**
* A list of the inputs that are never flashed for validation exceptions.
*
* @var array
*/
protected $dontFlash = [
'password',
'password_confirmation',
];
/**
* Report or log an exception.
*
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
*
* @param \Exception $exception
* @return void
*/
public function report(Exception $exception)
{
parent::report($exception);
}
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
{
return parent::render($request, $exception);
}
}
<?php
/**
* Created by PhpStorm.
* User: JIAN112
* Date: 2019/11/27
* Time: 11:20
*/
namespace App\Http\Controllers\Api\BaiWang;
use App\Service\BaiWangAuthApi;
use Illuminate\Http\Request;
use App\Http\Controllers\Api\Controller;
class AuthController extends Controller
{
public function __construct()
{
}
/**
* 获取百旺token
* @param Request $request
* @return mixed
*/
public function getAccessToken(Request $request)
{
$appKey = $request->get('appKey');
$token = BaiWangAuthApi::getInstance()->getAccessToken($appKey);
return $this->success(['accessToken' => $token]);
}
}
\ No newline at end of file
<?php
namespace App\Http\Controllers\Api\Config;
use App\Http\Requests;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Api\Controller;
use App\Model\Config;
use App\Lib\Http;
class CouponController extends Controller
{
//新客优惠券
public function newMemberCoupon(){
$new_member_coupon = Config::where('config_name','new_member_coupon')->get()->toArray();
$new_member_coupon_pic = Config::where('config_name','new_member_coupon_pic')->get()->toArray();
$response['code'] = 1;
$response['msg'] = "新客优惠券";
$response['data'] = [
'couponId'=>$new_member_coupon[0]['config_value'],
'popBg'=>env('OSS_DOMAIN').$new_member_coupon_pic[0]['config_value'],//url
];
//获取coupon信息
$coupon_id = $response['data']['couponId'];
if(!$coupon_id){
return [];
}
$http = new Http();
$item = $http->curl('promotion/coupon/dataList',[$coupon_id]);
if(!isset($item['data'][0])){
return [];
}
$item = $item['data'][0];
$expire_flag = 0;
if( time() > strtotime($item['end_time']) ){
$expire_flag = 1;
}
$data = [
'id'=>$item['id'],
'status'=>$expire_flag,//0:未过期,1:已过期
'price'=>$item['total_discount'],
'require'=>$item['total_amount'],
'start'=>$item['start_time'],
'end'=>$item['end_time'],
];
return $data;
}
}
<?php
namespace App\Http\Controllers\Api;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Http\Request;
use App\Lib\Http;
use App\Model\Permission;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
protected $_http;
protected $pageSize = 10;
function __construct(){
$this->_http= new Http();
$this->pageSize=config('view.page_size');
}
/**
*
* @param string $url
* @param array $data
* @return mixed
*/
public function curl($apiName,$data=[]){
return $this->_http->curl($apiName,$data);
}
function success($data, $message = "ok")
{
return [
'code' => 1,
'data' => $data
];
}
function error($message = "fail")
{
return [
'code' => 0,
'error' => [
'code' => 500,
'type' => 'NORMAL',
'message' => 'fail'
]
];
}
function ok($data, $message = "ok"){
return [
'code' => 1,
'message'=>$message,
'data' => $data
];
}
}
<?php
namespace App\Http\Controllers\Api;
use App\Http\Requests;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class DemoController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function productList(){
$ossClient=new \App\Lib\Oss();
$prefix='cms';
$file='/upload/demo/1.jpg';
$remotePath= $prefix.$file;
$filePath=realpath('.'.$file);
$ossClient->upload($remotePath,$filePath);
}
public function doc(){
//return $this->contact();
//return $this->ok($this->getDetailById());
//return $this->ok($this->getAllTags());
return $this->ok($this->getListById());
return $this->ok($this->getListByTag());
return $this->ok($this->getCustomAllMenu());
return $this->ok($this->homeMenu());
return $this->ok($this->login());
}
protected function contact(){
return $this->ok([],'留言成功');
}
protected function getDetailById(){
return [
'image'=>['src'=>'http://img.alicdn.com/bao/uploaded/i2/TB1XwrQSXXXXXb_apXXntC69XXX_035351.jpg','width'=>750,'height'=>500,],
'title'=>'标题',
'description'=>'文章的描述',
'category'=>'Increase Conversion',
'tag'=>['3D/4D全息','AI大数据学习'],
'created_at'=>'2019-10-23 10:23:11',
'is_favorites'=>1,
'content'=>[
]
];
}
protected function getListById(){
return [
'list'=>[
[
'image'=>'http://img.alicdn.com/bao/uploaded/i2/TB1XwrQSXXXXXb_apXXntC69XXX_035351.jpg',
'title'=>'PREFUME BOX',
'description'=>'标题的描述标题的描述标题的描述标题的描述标题的描述标题的描述标题的描述标题的描述标题的描述',
'category'=>'Increase Traffic',
'article_id'=>1,
'tag'=>['3D/4D/全息','3D/4D/全息','3D/4D/全息','3D/4D/全息']
],
[
'image'=>'http://img.alicdn.com/bao/uploaded/i2/TB1XwrQSXXXXXb_apXXntC69XXX_035351.jpg',
'title'=>'PREFUME BOX',
'description'=>'标题的描述标题的描述标题的描述标题的描述标题的描述标题的描述标题的描述标题的描述标题的描述',
'category'=>'Increase Traffic',
'article_id'=>1,
'tag'=>['3D/4D/全息','3D/4D/全息','3D/4D/全息','3D/4D/全息']
],
[
'image'=>'http://img.alicdn.com/bao/uploaded/i2/TB1XwrQSXXXXXb_apXXntC69XXX_035351.jpg',
'title'=>'PREFUME BOX',
'description'=>'标题的描述标题的描述标题的描述标题的描述标题的描述标题的描述标题的描述标题的描述标题的描述',
'category'=>'Increase Traffic',
'article_id'=>1,
'tag'=>['3D/4D/全息','3D/4D/全息','3D/4D/全息','3D/4D/全息']
],
[
'image'=>'http://img.alicdn.com/bao/uploaded/i2/TB1XwrQSXXXXXb_apXXntC69XXX_035351.jpg',
'title'=>'PREFUME BOX',
'description'=>'标题的描述标题的描述标题的描述标题的描述标题的描述标题的描述标题的描述标题的描述标题的描述',
'category'=>'Increase Traffic',
'article_id'=>1,
'tag'=>['3D/4D/全息','3D/4D/全息','3D/4D/全息','3D/4D/全息']
],
]
];
}
protected function getListByTag(){
return $this->getListById();
}
protected function getAllTags(){
return [
'tags'=>[
['id'=>1,'name'=>'3D/4D全息'],
['id'=>2,'name'=>'AI大数据学习'],
['id'=>3,'name'=>'3D/4D全息'],
['id'=>4,'name'=>'AI大数据学习'],
['id'=>5,'name'=>'3D/4D全息'],
['id'=>6,'name'=>'3D/4D全息'],
['id'=>7,'name'=>'3D/4D全息'],
['id'=>8,'name'=>'3D/4D全息'],
['id'=>9,'name'=>'3D/4D全息'],
['id'=>10,'name'=>'3D/4D全息']
]
];
}
protected function getCustomAllMenu(){
return [
'menus'=>[
[
'name'=>'Increase Traffic'
],
[
'name'=>'Increase Follows'
],
[
'name'=>'Increase Conversion'
],
[
'name'=>'Branding'
],
]
];
}
protected function homeMenu(){
return [
'menus'=>[
[
'category_id'=>1,
'is_custom_category'=>true,
'image'=>'http://img.alicdn.com/bao/uploaded/i2/TB1XwrQSXXXXXb_apXXntC69XXX_035351.jpg',
'title'=>'标题',
'description'=>'描述',
],
[
'category_id'=>1,
'is_custom_category'=>false,
'image'=>'http://img.alicdn.com/bao/uploaded/i2/TB1XwrQSXXXXXb_apXXntC69XXX_035351.jpg',
'title'=>'标题',
'description'=>'描述',
],
[
'category_id'=>1,
'is_custom_category'=>false,
'image'=>'http://img.alicdn.com/bao/uploaded/i2/TB1XwrQSXXXXXb_apXXntC69XXX_035351.jpg',
'title'=>'标题',
'description'=>'描述',
],
[
'category_id'=>1,
'is_custom_category'=>false,
'image'=>'http://img.alicdn.com/bao/uploaded/i2/TB1XwrQSXXXXXb_apXXntC69XXX_035351.jpg',
'title'=>'标题',
'description'=>'描述',
],
[
'category_id'=>1,
'is_custom_category'=>false,
'image'=>'http://img.alicdn.com/bao/uploaded/i2/TB1XwrQSXXXXXb_apXXntC69XXX_035351.jpg',
'title'=>'标题',
'description'=>'描述',
]
]
];
}
protected function login(){
return [
'open_id'=>1234567890
];
}
}
<?php
namespace App\Http\Controllers\Api;
use App\Http\Requests;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class LogController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function post()
{
$userId=request('user_id');
$module=request('module');
$action=request('action');
$content=request('content');
$data=[
'user_id'=>$userId,
'module'=>$module,
'action'=>$action,
'content'=>$content,
];
DB::table('report_log')->insert($data);
}
}
<?php
/**
* Created by PhpStorm.
* User: JIAN112
* Date: 2019/11/27
* Time: 11:20
*/
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use App\Http\Helpers\Api\AdminCurlLog;
use App\Http\Requests\AccessTokenRequest;
class MiniAppAccessToken
{
protected $accessToken;
protected $tokenKey = 'MiniAppAccessToken';
protected $tokenExpired = 7000;
public function __construct()
{
$this->resetAccessToken();
}
public function resetAccessToken($force = false)
{
if (true === $force) {
$tokenInfo = $this->getAccessToken();
$token = $tokenInfo['access_token'];
$this->setAccessTokentoRedis($this->tokenKey, $token, $this->tokenExpired);
} else {
$accessToken = $this->getAccessTokenFromRedis();
if (-1 === $accessToken) {
$tokenInfo = $this->getAccessToken();
$token = $tokenInfo['access_token'];
$this->setAccessTokentoRedis($this->tokenKey, $token, $this->tokenExpired);
} else {
$token = $accessToken;
}
}
$this->accessToken = $token;
}
/**
* 封装一个微信请求的中转方法
* @param AccessTokenRequest $request
* @return mixed
*/
public function wechatTransit(AccessTokenRequest $request)
{
$model_list = ['admin', 'order', 'member', 'promotion', 'goods'];
$force_list = ['0', '1'];
$model = $request->get("model");
$force = $request->get("force");
if((!in_array($model,$model_list)) || (!in_array($force,$force_list))){
return "error request";
}
if ($force === "1"){
$this->resetAccessToken(true);
}
$result = $this->accessToken;
return $result;
}
/**
* 获取Token并拼接请求url,发送请求给微信接口
* @param $postUrl
* @param $param
* @return mixed
*/
public function wxApi($postUrl, $param)
{
$fullPostUrl = $postUrl . $this->accessToken;
//请求的URL中,token要用最新的
$result = $this->curlWx($fullPostUrl, $param);
if ($this->isTokenInvaild($result)) {
$this->resetAccessToken(true);
$fullPostUrl = $postUrl . $this->accessToken;
//Token刷新,请求的URL中Token也要变了
$result = $this->curlWx($fullPostUrl, $param);
}
return $result;
}
/**
* 校验Token是否失效
* @param $data
* @return bool
*/
public function isTokenInvaild($data)
{
$tmparr = json_decode($data, true);
if(!isset($tmparr['errcode'])){
return false;
}
if ('0' === $tmparr['errcode']) {
return false;
}
if (preg_match('/access_token expired/i', $tmparr['errmsg']) || preg_match('/access_token is invalid/i', $tmparr['errmsg']) || preg_match('/invalid access_token/i', $tmparr['errmsg'])) {
return true;
}
return false;
}
public function curlWx($postUrl, $param)
{
$curlPost = $param;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $postUrl);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
curl_setopt($ch, CURLOPT_HEADER, 0); // no headers in the output
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // output to variable
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
if (!empty($curlPost)) {
curl_setopt($ch, CURLOPT_POST, 1); //post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
}
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$logger = new AdminCurlLog();
$logger->curlLog($curlPost,"POST" , $postUrl,
"", $httpCode, $result );
return $result;
}
public function getAccessTokenFromRedis()
{
$redis = app('redis.connection');
$accessToken = $redis->get($this->tokenKey);
if (empty($accessToken)){
return -1;
}
return $accessToken;
}
private function setAccessTokenToRedis($tokenKey, $token, $tokenExpired)
{
$redis = app('redis.connection');
$redis->Setex($tokenKey, $tokenExpired, $token );
}
public function getAccessToken()
{
$appId = config('app.appid');
$appSecret = config('app.secret');
$postUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appId&secret=$appSecret";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $postUrl);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
curl_setopt($ch, CURLOPT_HEADER, 0); // no headers in the output
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // output to variable
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_POST, 0); //post提交方式
$result = curl_exec($ch);
curl_close($ch);
return json_decode($result, true);
}
private function rpcLog($method, $request, $response, $time)
{
if (!is_array(json_decode($response,true))){
$response = "二维码生成成功";
}
$data = ['method' => $method, 'request' => $request, 'response' => $response, 'time' => $time];
$this->validLog($data);
}
private function validLog($content)
{
$txt = 'Log Time:'.date('Y-m-d H:i:s')."\n";
$txt .= 'Method:'.$content['method']."\n";
$txt .= 'Request:'.$content['request']."\n";
$txt .= 'Response:'.trim($content['response'])."\n";
$txt .= 'Runtime:'.$content['time']."\r\n------------------------------\r\n";
file_put_contents('Debug/'.date('Ymd').'.log', $txt, FILE_APPEND);
}
}
\ No newline at end of file
<?php
namespace App\Http\Controllers\Api;
use App\Model\ProdViewStatistics;
use App\Model\CatViewStatistics;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Redis;
use App\Http\Helpers\Api\AdminCurlLog;
use App\Model\SearchKeywordsDetail;
use App\Model\ProdAddCartStatistics;
use App\Model\ProdFavoriteStatistics;
use App\Model\ProdShareStatistics;
use App\Model\ProdViewByTypeStatistics;
use Illuminate\Support\Facades\DB;
class ProdstatToDbController extends Controller
{
private $ref_date;
function __construct($date = null)
{
$this->ref_date = isset($date) ? $date : date("Ymd",strtotime("-1 day"));
parent::__construct();
}
/**
* 将Redis中存储的搜索关键词按天存入DB中
* @return string
*/
public function SearchKeywordToDB()
{
try {
$Statistics_Redis = Redis::connection('statistics');
$rank_keyword = config('app.name').":search:hot:keywords:" . $this->ref_date;
//以下Redis读取部分直接全量读取整个Zset集合,然后同步到Redis中
$search_keywords_top10_withscores = $Statistics_Redis->ZREVRANGE($rank_keyword, 0, -1, "withscores");
if ($search_keywords_top10_withscores) {
foreach ($search_keywords_top10_withscores as $keyword => $search_time) {
$data = [];
$data = [
'keywords' => $keyword,
'search_time' => $search_time,
'ref_date' => $this->ref_date
];
$where = [
'keywords' => $keyword,
'ref_date' => $this->ref_date
];
SearchKeywordsDetail::updateOrCreate($where, $data);
}
return 'success';
}
}
catch (\Exception $exception){
echo $exception;
}
}
/**
* 将每天被加入购物车的产品按天更新到DB
*/
public function AddCartToDB()
{
try {
$ranking_add_cart = "Ranking_AddCart_" . $this->ref_date;
$Statistics_Redis = Redis::connection('sts');
//以下Redis读取部分直接全量读取整个Zset集合,然后同步到Redis中
$add_cart_top10_withscores = $Statistics_Redis->ZREVRANGE($ranking_add_cart, 0, -1, "withscores");
if ($add_cart_top10_withscores) {
foreach ($add_cart_top10_withscores as $prodId => $day_add_times) {
$data = [];
$data = [
'pdtId' => $prodId,
'day_add_times' => $day_add_times,
'ref_date' => $this->ref_date
];
$where = [
'pdtId' => $prodId,
'ref_date' => $this->ref_date
];
ProdAddCartStatistics::updateOrCreate($where, $data);
}
}
}
catch (\Exception $exception){
echo $exception;
}
}
/**
* 将被收藏产品按天更新到DB
*/
public function ProdFavoriteToDB()
{
try {
$rank_favorite ="Ranking_Favorite_" . $this->ref_date;
$Statistics_Redis = Redis::connection('statistics');
//以下Redis读取部分直接全量读取整个Zset集合,然后同步到Redis中
$rank_favorite_withscores = $Statistics_Redis->ZREVRANGE($rank_favorite, 0, -1, "withscores");
if ($rank_favorite_withscores) {
foreach ($rank_favorite_withscores as $prodId => $day_favorite_times) {
$data = [];
$data = [
'pdtId' => $prodId,
'day_favorite_times' => $day_favorite_times,
'ref_date' => $this->ref_date
];
$where = [
'pdtId' => $prodId,
'ref_date' => $this->ref_date
];
ProdFavoriteStatistics::updateOrCreate($where, $data);
}
}
}
catch (\Exception $exception){
echo $exception;
}
}
/**
* 将产品被分享信息更新到DB
*/
public function ProdShareToDB()
{
try {
$prod_share =config('redis.prodShareStatistics') .'_' . $this->ref_date;
$Statistics_Redis = Redis::connection('sts');
//以下Redis读取部分直接全量读取整个Zset集合,然后同步到Redis中
$prod_share_top10_withscores = $Statistics_Redis->ZREVRANGE($prod_share,0 ,-1,"withscores");
if ($prod_share_top10_withscores) {
foreach ($prod_share_top10_withscores as $prodId => $day_share_times) {
$data = [];
$data = [
'pdtId' => $prodId,
'day_share_times' => $day_share_times,
'ref_date' => $this->ref_date
];
$where = [
'pdtId' => $prodId,
'ref_date' => $this->ref_date
];
ProdShareStatistics::updateOrCreate($where, $data);
}
}
}
catch (\Exception $exception){
echo $exception;
}
}
/**
* 将被浏览产品从Redis按天更新到DB
*/
public function ProdViewToDB()
{
try{
$prod_view = config('redis.prodView') .'_' .$this->ref_date;
$Statistics_Redis = Redis::connection('sts');
//以下Redis读取部分直接全量读取整个Zset集合,然后同步到Redis中
$prod_view_top10_withscores = $Statistics_Redis->ZREVRANGE($prod_view,0 ,-1,"withscores");
if ($prod_view_top10_withscores) {
foreach ($prod_view_top10_withscores as $prodId => $day_view_times) {
$data = [];
$data = [
'pdtId' => $prodId,
'day_view_times' => $day_view_times,
'ref_date' => $this->ref_date
];
$where = [
'pdtId' => $prodId,
'ref_date' => $this->ref_date
];
ProdViewStatistics::updateOrCreate($where, $data);
}
}
}
catch (\Exception $exception){
echo $exception;
}
}
//分类访问数据数据
public function catViewToDB()
{
try{
$prod_view = config('redis.catView') .'_' .$this->ref_date;
$Statistics_Redis = Redis::connection('sts');
//以下Redis读取部分直接全量读取整个Zset集合,然后同步到Redis中
$prod_view_top10_withscores = $Statistics_Redis->ZREVRANGE($prod_view,0 ,-1,"withscores");
if ($prod_view_top10_withscores) {
foreach ($prod_view_top10_withscores as $cat_id => $day_view_times) {
$data = [];
$data = [
'prod_cat_id' => $cat_id,
'view_times' => $day_view_times,
'ref_date' => $this->ref_date
];
$where = [
'prod_cat_id' => $cat_id,
'ref_date' => $this->ref_date
];
CatViewStatistics::updateOrCreate($where, $data);
}
}
}
catch (\Exception $exception){
echo $exception;
}
}
public function ProdViewByProdTypeToDB()
{
try{
//链接到负责统计各种View的Redis库6
$Statistics_Redis = Redis::connection('statistics');
$prod_statistics = "prod_statistics_by_prod_type_" . $this->ref_date;
//以下Redis读取部分直接全量读取整个Zset集合,然后同步到Redis中
$typeViewScores = $Statistics_Redis->ZREVRANGE($prod_statistics , 0 ,-1,"withscores");
if ($typeViewScores) {
foreach ($typeViewScores as $prod_type_code => $type_view_times) {
$data = [];
$data = [
'prod_type_code' => $prod_type_code,
'type_view_times' => $type_view_times,
'ref_date' => $this->ref_date
];
$where = [
'prod_type_code' => $prod_type_code,
'ref_date' => $this->ref_date
];
ProdViewByTypeStatistics::updateOrCreate($where, $data);
}
}
}catch (\Exception $exception){
echo $exception;
}
}
}
<?php
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Redis;
use App\Http\Helpers\Api\AdminCurlLog;
use Illuminate\Support\Facades\DB;
use App\Model\UserTracking;
use App\Model\WxSmallVisitPage;
class UserTrackingController extends Controller
{
private $tracking_date;
public function __construct()
{
$this->tracking_date = date("Ymd", strtotime("-1 day"));
}
public function DailyUserTracking()
{
$ref_date = $this->tracking_date;
$Statistics_Redis = Redis::connection('statistics');
$homePageUV = $Statistics_Redis->ZCARD("Report_intoHome" . $ref_date);
$checkoutUV = $Statistics_Redis->ZCARD("Report_intoCheckout" . $ref_date);
$shoppingCartUV = $Statistics_Redis->ZCARD("Report_intoShoppingCar" . $ref_date);
$submitCheckoutUV = $Statistics_Redis->ZCARD("Report_intoSubmitCheckout" . $ref_date);
$pdtDetailUV = $Statistics_Redis->ZCARD("Report_intoPdtDetail" . $ref_date);
$where = [
'ref_date' => $ref_date,
];
$data = [
'homePageUV' => $homePageUV,
'checkoutUV' => $checkoutUV,
'shoppingCartUV' => $shoppingCartUV,
'submitCheckoutUV' => $submitCheckoutUV,
'pdtDetailUV' => $pdtDetailUV
];
$result = UserTracking::updateOrCreate($where, $data);
//更新到DB成功的话,则删掉7天前的Redis记录
if($result){
$del_date = date("Ymd", strtotime("-7 day"));
$Statistics_Redis->DEL("Report_intoSubmitCheckout" . $del_date);
$Statistics_Redis->DEL("Report_intoHome" . $del_date);
$Statistics_Redis->DEL("Report_intoCheckout" . $del_date);
$Statistics_Redis->DEL("Report_intoShoppingCar" . $del_date);
$Statistics_Redis->DEL("Report_intoPdtDetail" . $del_date);
}
}
public function makeBounceRate()
{
$searchDate = date("Y-m-d" ,strtotime("-1 day"));
$result= WxSmallVisitPage::where('ref_date', $searchDate)
->orderBy('ref_date', 'desc')
->get();
if (!$result->isEmpty()){
$page_info = $result->toArray();
foreach ($page_info as $items){
//逐个计算跳出率
$bounce_rate = number_format($items['exitpage_pv'] / $items['page_visit_pv'] ,4) * 100 . "%";
$id = $items['id'];
$where = [
'id' => $id,
];
$data = [
'bounce_rate' => $bounce_rate,
];
WxSmallVisitPage::updateOrCreate($where, $data);
}
}
}
}
<?php
namespace App\Http\Controllers\Backend\Ad;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
class ItemController extends Controller
{
public function __construct()
{
parent::__construct();
}
public function index(Request $request)
{
$all = $request->all();
$tpl = $request->tpl;
$tpl = $tpl?:'index';
$data = $this->curl('ad/item/list', $request->all());
$list = $data['data']["pageData"]??[];
$loc_id = empty($all['loc_id'])?$data['data']['loc_id']:$all['loc_id'];
unset($all['_url']);
return view('backend.ad.item.'.$tpl,[
'query_string'=>http_build_query($all),
'list_json'=>json_encode($list),
'loc_id'=>$loc_id,
]);
}
public function list(Request $request)
{
$all = $request->all();
unset($all['_url']);
$data = $this->curl('ad/item/list', $request->all());
return $data['data'];
}
//热销榜单
public function hotsale(Request $request){
$request['loc'] = 'hot_sale_product';
$request['tpl'] = 'hotSale';
return $this->index($request);
}
public function edit(Request $request)
{
$data = $this->curl('ad/loc/list', $request->all());
$detail = $data['data'];
$stock = $detail['stockinfo'];
return view('backend.goods.sku.edit', [
'detail' => array_to_object($detail),
'stockinfo'=>$stock
]);
}
public function add(Request $request)
{
return view('backend.goods.sku.add');
}
public function insert(Request $request)
{
$postData = $request->all();
unset($postData['file']);
$response = $this->curl('ad/item/insert', $postData);
return $response;
}
public function update(Request $request)
{
$postData = $request->all();
unset($postData['_token']);
$editBack = $this->curl('ad/item/update', $postData);
return $editBack;
}
public function delete(Request $request)
{
$postData = $request->all();
$editBack = $this->curl('ad/item/delete', $postData);
return $editBack;
}
}
<?php
namespace App\Http\Controllers\Backend\Ad;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
class LocationController extends Controller
{
public function __construct()
{
parent::__construct();
}
public function index(Request $request)
{
$all = $request->all();
unset($all['_url']);
return view('backend.ad.location.index',[
'query_string'=>http_build_query($all)
]);
}
public function list(Request $request)
{
$data = $this->curl('ad/loc/list', $request->all());
return $data;
}
public function edit(Request $request)
{
$data = $this->curl('ad/loc/get', $request->all());
$detail = $data['data'];
return view('backend.ad.location.edit',[
'detail'=> array_to_object($detail),
]);
}
public function add(Request $request)
{
return view('backend.ad.location.add');
}
public function insert(Request $request)
{
if ($request->isMethod('post')) {
$postData = $request->all();
unset($postData['file']);
$response = $this->curl('ad/loc/insert', $postData);
return $response;
}
}
public function update(Request $request)
{
// if ($request->isMethod('post')) {
$postData = $request->all();
unset($postData['_token']);
$editBack = $this->curl('ad/loc/update', $postData);
return $editBack;
// }
}
}
<?php
namespace App\Http\Controllers\Backend\Auth;
use App\Model\User;
use Validator;
use App\Http\Controllers\Backend\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Illuminate\Http\Request;
class AuthController extends Controller
{
/*
|--------------------------------------------------------------------------
| Registration & Login Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users, as well as the
| authentication of existing users. By default, this controller uses
| a simple trait to add these behaviors. Why don't you explore it?
|
*/
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
/**
* Where to redirect users after login / registration.
*
* @var string
*/
protected $redirectTo = '/admin';
/**
* Create a new authentication controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware($this->guestMiddleware(), ['except' => 'logout']);
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|min:6|confirmed',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
public function showRegistrationForm()
{
if (property_exists($this, 'registerView')) {
return view($this->registerView);
}
return view('backend.auth.register');
}
public function showLoginForm()
{
$view = property_exists($this, 'loginView')
? $this->loginView : 'auth.authenticate';
if (view()->exists($view)) {
return view($view);
}
return view('backend.auth.login');
}
protected function validateLogin(Request $request){
$this->validate($request, [
$this->loginUsername() => 'required',
'password' => 'required',
'captcha' => 'required|captcha',
],[
'captcha.required' => trans('validation.required'),
'captcha.captcha' => trans('validation.captcha'),
]);
}
}
<?php
namespace App\Http\Controllers\Backend\Auth;
use App\Http\Controllers\Backend\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/admin';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
public function showLoginForm()
{
return view('backend.auth.login');
}
public function guard(){
return Auth::guard();
}
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->invalidate();
return redirect('/admin/login');
}
protected function validateLogin(Request $request){
$this->validate($request, [
$this->username() => 'required',
'password' => 'required',
'captcha' => 'required|captcha',
],[
'captcha.required' => '必填项',
'captcha.captcha' => '',
]);
}
}
<?php namespace App\Http\Controllers\Backend\Config;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
use Illuminate\Support\Facades\Log;
class CacheController extends Controller
{
public function __construct()
{
parent::__construct();
}
public function index(Request $request)
{
$all = $request->all();
unset($all['_url']);
return view('backend.config.cache');
}
public function clear(Request $request,$action)
{
$error = 0;
try{
$api = app('ApiRequestInner');
$params = [
'action'=>$action,
];
$resp = $api->request('goods/cache/clear','POST',$params);
if($resp['code']==1){
return true;
}throw new \Exception('刷新失败');
} catch (\Throwable $e){
$error = $e->getMessage();
} finally {
return $error?['code'=>0,'message'=>$error]:['code'=>1,'message'=>'成功'];
}
}
}
<?php
namespace App\Http\Controllers\Backend\Config;
use App\Http\Requests;
use Illuminate\Http\Request;
use Validator;
use Exception;
use App\Http\Controllers\Backend\Controller;
use App\Model\Config;
class CouponController extends Controller
{
function __construct(){
parent::__construct();
}
public function index(){
$data = Config::all()->toArray();
$detail = [
'new_member_coupon'=>'',
];
foreach($data as $item){
$detail[$item['config_name']] = $item['config_value'];
if($item['config_name'] == 'new_member_coupon_pic'){
$detail['new_member_coupon_pic_url'] = env('OSS_DOMAIN').'/'. $item['config_value'];
}
}
$coupon_list = $this->curl('promotion/coupon/activeList',['limit'=>100]);
$coupon_list = $coupon_list['data'];
$detail['coupon_list'] = $coupon_list;
return view('backend.config.coupon',['detail' => $detail]);
}
public function save(){
$data = request()->all();
$arr = ['new_member_coupon',];
foreach($arr as $item){
$update = [
'config_name'=>$item,
'config_value'=>$data[$item],
];
$config = Config::where('config_name',$item)->get()->toArray();
if(count($config)){
Config::where('config_name',$item)->update($update);
}else{
Config::insert($update);
}
}
return ['code'=>1];
}
public function uploadPic(){
$path = request()->file->store('dlc_statics');
$local_path = storage_path().'/app/'.$path;
$localClient = new \App\Lib\Local();
return ['code' => 0, 'path' => $localClient->upload($path, $local_path)];
}
}
<?php namespace App\Http\Controllers\Backend\Config;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Reader\Xls;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use Illuminate\Support\Arr;
class DataController extends Controller
{
private $config = [];
public function __construct()
{
parent::__construct();
$this->config = [
'cat'=>[
'length'=>6,
'api'=>'goods/data/import',
],
'spu'=>[
'length'=>13,
'api'=>'goods/data/import',
],
'price'=>[
'length'=>2,
'api'=>'goods/data/import',
],
'img'=>[
'length'=>8,
'api'=>'goods/data/import',
],
'rel'=>[
'length'=>2,
'api'=>'goods/data/import',
],
'key'=>[
'length'=>2,
'api'=>'goods/data/import',
],
'sort'=>[
'length'=>2,
'api'=>'goods/data/import',
],
'ship'=>[
'length'=>3,
'api'=>'oms/data/import',
],
'stock'=>[
'length'=>4,
'api'=>'oms/data/import',
],
];
}
public function index(Request $request)
{
$all = $request->all();
unset($all['_url']);
return view('backend.config.data.index');
}
public function import(Request $request,$action)
{
$error = 0;
try{
$file = $request->file('file');
if($file->isValid()){
$originalName = $file->getClientOriginalName();
$info = pathinfo($originalName);
if(in_array($info['extension'],['xlsx','xls'])){
$realPath = $file->getRealPath();
$spreadsheet = IOFactory::load($realPath);
$data = $spreadsheet->getActiveSheet()->toArray();
if($length = Arr::get($this->config,"{$action}.length")){
$data = $this->sliceDatas($data,$length);
}else{
throw new \Exception('错误的格式');
}
if($data){
$api = app('ApiRequestInner');
$params = [
'action'=>$action,
'params'=>$data
];
// print_r(json_encode($params));exit;
$resp = $api->request(Arr::get($this->config,"{$action}.api"),'POST',$params);
if($resp['code']==1){
return true;
}throw new \Exception($resp['message']);
}throw new \Exception('数据为空');
}throw new \Exception('格式错误,只支持xlsx格式');
}throw new \Exception('无效的文件');
} catch (\Throwable $e){
$error = $e->getMessage();
} finally {
$result = $error?['code'=>0,'message'=>$error]:['code'=>1,'message'=>'成功'];
Log::info('后台商品数据导入:',[
'action'=>$action,
'error'=>$error
]);
return $result;
}
}
/**
* @param $ori_data
* @param $len
* @return array
*/
private function sliceDatas($ori_data,$len){
$data = [];
if(is_array($ori_data) && count($ori_data)){
//去除首行
if(array_key_exists(0,$ori_data)){
unset($ori_data[0]);
}
foreach($ori_data as $line){
//null转成空
foreach($line as &$l){
if(is_null($l)){
$l = '';
}
}
//如果第一列为empty则跳出
if(empty($line[0])){
break;
}
$data[] = array_slice($line,0,$len);
}
}return $data;
}
}
<?php
namespace App\Http\Controllers\Backend\Config;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
use App\Model\Config;
use App\Model\RedisModel;
use Illuminate\Support\Facades\DB;
use Swoole;
class ImportController extends Controller
{
public function __construct()
{
parent::__construct();
}
public function index()
{
return view('backend.config.import.list');
}
function dataList()
{
// return ['数据库33344:'=>env('DB_DATABASE')];
$limit = request('limit', 10);
$res = DB::table('import_log')
->select(DB::raw("import_log.*,concat ( left ((success + error) / count *100,5),'%') as percent"))
->orderBy('id','desc')
->paginate($limit)
->toArray();
$response['code'] = 0;
$response['msg'] = "获取规则列表成功.";
$response['count'] = $res['total'];
$response['data'] = $res['data'];
return $response;
}
public function ajaxUpload(){
$file=$_FILES['file'];
if(isset($file['error'])){
$error=$file['error'];
if($error> 0 && $error !=4){
$errorMessage=[
0,
'文件大小比php.ini中upload_max_filesize指定值要大',
'上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值',
'文件只有部分被上传',
'没有文件被上传',
'上传文件大小为',
];
return [
'status'=>false,
'message'=>'错误代码:'.$errorMessage[$error]
];
}
}
if(isset($file['tmp_name'])){
if($file['tmp_name']){
$ext=pathinfo($file['name']);
$string=uniqid();
$dir='import';
$new='/upload/'. $dir.'/' .$string.'.csv';
if(!is_dir(base_path('public/upload/'.$dir))){
mkdir(base_path('public/upload/'.$dir), 0777, true);
}
move_uploaded_file($file['tmp_name'], '.'.$new);
$csvFile =realpath('./'.$new);
$result = $this->apply($csvFile);
}
}
return [
'status'=>true,
'file'=>realpath('./'.$new),
];
}
public function apply($csvFile){
$command ='php ../artisan import:do --filename='.$csvFile;
$result=shell_exec($command);
}
}
<?php
namespace App\Http\Controllers\Backend\Config;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
use App\Model\OrderMail;
class MailController extends Controller
{
public function __construct()
{
parent::__construct();
}
public function index()
{
//return view('backend.config.mail');
$data = OrderMail::where('status','0')->whereNotNull('email')->select(['email','id'])->get()->toArray();
if (!empty($data)) {
}
return json_encode(['data' => $data]);
//return view('backend.config.mail', ['detail' => array_to_object($data)]);
}
}
<?php
namespace App\Http\Controllers\Backend\Config;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
use App\Model\Config;
use App\Model\RedisModel;
use Illuminate\Support\Facades\DB;
class RecommendController extends Controller
{
// public $recommendConfigDBName = ['pdp_rec','empty_cart_rec','search_rec','paid_rec'];
public $recommendConfigDBName = ['pdp_rec','empty_cart_rec','search_rec','paid_rec','selected_rec'];
public $recommendOption = [
'1' => '用户最近浏览的前6个产品',
// '2' => '同Usage下销量最高的前6个产品',
// '3' => '同Usage下浏览量最高的前6个产品',
// '4' => '用户最近收藏的前6个产品',
// '5' => '最新上架的6个产品',
// '6' => '自定义类目商品',
'7' => '默认Sort升序6个',
'8' => '默认Sort降序6个',
'9' => '自定义商品',
];
public function __construct()
{
parent::__construct();
}
public function index()
{
$data = Config::whereIn('config_name', $this->recommendConfigDBName)->get()->toArray();
$data = array_combine(array_column($data,'config_name'),$data);
foreach($this->recommendConfigDBName as $rec){
$data[$rec]['config_value'] = $data[$rec]['config_value']??1;
}
foreach($data as &$one){
if(!empty($one['extension'])) $one['extension'] = json_decode($one['extension'],true);
}
return view('backend.config.recommend', ['recs'=>$this->recommendConfigDBName, 'data' => $data,'opts'=>$this->recommendOption]);
}
public function save(Request $request)
{
$postData = $request->all();
if(!in_array($postData['config_name']??'',$this->recommendConfigDBName)) return ['code' => 0, 'msg' => '配置字段非法'];
$update = [
'config_name' => $postData['config_name'],
'config_value' => $postData['config_value'],
'extension' => json_encode($postData['extension'])
];
try {
Config::updateOrCreate(
['config_name' => $postData['config_name']],
$update
);
return ['code' => 1];
} catch (Exception $e) {
echo $e->getMessage();
return ['code' => 0, 'msg' => $e->getMessage()];
}
}
}
<?php
namespace App\Http\Controllers\Backend\Config;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
use App\Model\Config;
use App\Model\RedisModel;
class ReturnController extends Controller
{
public $returnConfigDBName = 'return';
public function __construct()
{
parent::__construct();
}
public function index()
{
$data = Config::where('config_name', $this->returnConfigDBName)->get()->toArray();
$detail = [];
$detail['image'] = '';
if (!empty($data)) {
foreach ($data as $item) {
if ($this->returnConfigDBName == $item['config_name']) {
$detail['image'] = $item['config_value'];
}
}
}
return view('backend.config.return', ['detail' => array_to_object($detail)]);
}
public function save(Request $request)
{
$postData = $request->all();
$update = [
'config_name' => $this->returnConfigDBName,
'config_value' => $postData['image'],
];
try {
Config::updateOrCreate(
['config_name' => $this->returnConfigDBName],
$update
);
$RedisModel = new RedisModel();
$RedisModel->_setDb(6);
$RedisModel->_hset(config('redis.sysConfig'), $this->returnConfigDBName, $postData['image']);
return ['code' => 1];
} catch (Exception $e) {
echo $e->getMessage();
return ['code' => 0, 'msg' => $e->getMessage()];
}
}
}
<?php
namespace App\Http\Controllers\Backend\Config;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
class SppController extends Controller
{
public $ruleTypeMap = [
'1' => '按品牌系列',
'2' => '按用途',
'3' => '按材质',
'4' => '按指定款号',
'5' => '全部',
];
public $prodTypeList;
public $prodUsage;
public $prodBrandCollList;
public function __construct()
{
parent::__construct();
$this->prodTypeList = $this->curl('goods/common/getProdTypelist');
$this->prodUsage = $this->curl('goods/common/getUsage');
$this->prodBrandCollList = $this->curl('goods/common/getBrandColl');
}
public function index(Request $request)
{
return view('backend.config.spp.index');
}
public function add(Request $request)
{
$return = [];
if ($request->isMethod('post')) {
$postData = $request->all();
unset($postData['_token'], $postData['file']);
$addBack = $this->curl('goods/spp/add', $postData);
return $addBack;
}
return view('backend.config.spp.add', ['ruleTypeMap' => $this->ruleTypeMap, 'prodTypeList' => array_to_object($this->prodTypeList), 'prodUsage' => array_to_object($this->prodUsage), 'prodBrandCollList' => array_to_object($this->prodBrandCollList)]);
}
public function get(Request $request)
{
$data = $this->curl('goods/spp/getSppRule', $request->all());
$detail = $data['data'];
return view('backend.config.spp.edit', ['detail' => array_to_object($detail), 'ruleTypeMap' => $this->ruleTypeMap, 'prodTypeList' => array_to_object($this->prodTypeList), 'prodUsage' => array_to_object($this->prodUsage), 'prodBrandCollList' => array_to_object($this->prodBrandCollList)]);
}
public function edit(Request $request)
{
if ($request->isMethod('post')) {
$postData = $request->all();
unset($postData['_token'], $postData['file']);
$response = $this->curl('goods/spp/edit', $postData);
return $response;
}
}
public function del(Request $request)
{
if ($request->isMethod('post')) {
$postData = $request->all();
$changeBack = $this->curl('goods/spp/del', $postData);
return $changeBack;
}
}
public function look(Request $request)
{
$data = $this->curl('goods/spp/getSppRule', $request->all());
$detail = $data['data'];
return view('backend.config.spp.look', ['detail' => array_to_object($detail), 'ruleTypeMap' => $this->ruleTypeMap, 'prodTypeList' => array_to_object($this->prodTypeList), 'prodUsage' => array_to_object($this->prodUsage), 'prodBrandCollList' => array_to_object($this->prodBrandCollList)]);
}
public function list(Request $request)
{
$response = $this->curl('goods/spp/list', request()->all());
return $response['data'];
}
}
<?php
namespace App\Http\Controllers\Backend\Config;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
class SpuController extends Controller
{
protected $prod_default='miniStore/pdt-detail/prod_default.jpg';
protected $model_default='miniStore/pdt-detail/model_default.jpg';
public function index(Request $request)
{
return view('backend.config.spu',['prod_default'=>$this->prod_default,'model_default'=>$this->model_default]);
}
public function upload($img){
$file=$_FILES['file'];
if(isset($file['type'])){
$type=$file['type'];
if($type && !in_array($type, ['image/jpeg','image/pjpeg'])){
return [
'status'=>false,
'message'=>'图片只支持jpg,不支持'.$type
];
}
}
if(isset($file['size'])){
$size=$file['size'];
if($size> 1024*512){
return [
'status'=>false,
'message'=>'图片尺寸不能大于512K'
];
}
}
if(isset($file['error'])){
$error=$file['error'];
if($error> 0 && $error !=4){
$errorMessage=[
0,
'文件大小比php.ini中upload_max_filesize指定值要大',
'上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值',
'文件只有部分被上传',
'没有文件被上传',
'上传文件大小为',
];
return [
'status'=>false,
'message'=>'错误代码:'.$errorMessage[$error]
];
}
}
$ossClient=new \App\Lib\Oss();
if($img == 'prod_default'){
$remotePath= $this->prod_default;
}
if($img == 'model_default'){
$remotePath= $this->model_default;
}
$filePath=realpath($file['tmp_name']);
$true=$ossClient->upload($remotePath,$filePath);
$cdn = new \App\Lib\CDN();
$cdn->refreshFile(env('OSS_DOMAIN').'/'.$remotePath);
if($true){
return [
'status'=>true,
'file'=>$remotePath.'?tockenId='.microtime(true)
];
}else{
return [
'status'=>false,
'message'=>'oss上传错误'
];
}
}
}
<?php
namespace App\Http\Controllers\Backend;
use App\Http\Requests;
use Illuminate\Http\Request;
use App\Model\ConfigOss;
use Validator;
use Exception;
class ConfigController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
$this->middleware('auth');
}
public function oss()
{
$data = ConfigOss::find(1);
return view('backend.config.oss',['data' => $data]);
}
public function ossSave(Request $request)
{
try {
$rules = [
'access_key_id' => 'required|string|size:100',
'access_key_secret' => 'required|string|size:100',
'endpoint' => 'required|string|size:100',
'bucket' => 'required|string|size:50',
];
$messages = [
'required' => 'The :attribute field is required.',
'string' => 'The :attribute must be string',
'size' => 'The :attribute must be :value chars'
];
Validator::make($request->all(), $rules, $messages);
$access_key_id = $request->input('access_key_id');
$access_key_secret = $request->input('access_key_secret');
$endpoint = $request->input('endpoint');
$bucket = $request->input('bucket');
$url = $request->input('url');
$active = $request->input('active', 0);
ConfigOss::query()->updateOrInsert(['id'=>1],compact('access_key_id','access_key_secret','endpoint','bucket','url','active'));
return ['code' => 0, 'message' => '保存成功'];
} catch (Exception $e) {
return ['code' => -1, 'message' => $e->getMessage()];
}
}
public function redis()
{
$items=[];
return view('backend.config.oss',['items'=>$items]);
}
public function save()
{
}
}
<?php
namespace App\Http\Controllers\Backend;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Http\Request;
use App\Lib\Http;
use App\Model\Permission;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
protected $_http;
protected $pageSize;
public function __construct()
{
$this->middleware('auth');
$this->_http = new Http();
$this->pageSize = config('view.page_size');
}
/**
* @param string $url
* @param array $data
*
* @return mixed
*/
public function curl($apiName, $data = [])
{
return $this->_http->curl($apiName, $data);
}
public function tree()
{
$response = $this->curl('category/tree');
return $response;
}
/**
* 处理权限分类.
*/
public function permissionTree($list = [], $pk = 'id', $pid = 'parent_id', $child = '_child', $root = 0)
{
if (empty($list)) {
$list = Permission::get()->toArray();
}
// 创建Tree
$tree = array();
if (is_array($list)) {
// 创建基于主键的数组引用
$refer = array();
foreach ($list as $key => $data) {
$refer[$data[$pk]] = &$list[$key];
}
foreach ($list as $key => $data) {
// 判断是否存在parent
$parentId = $data[$pid];
if ($root == $parentId) {
$tree[] = &$list[$key];
} else {
if (isset($refer[$parentId])) {
$parent = &$refer[$parentId];
$parent[$child][] = &$list[$key];
}
}
}
}
return $tree;
}
public function success($data, $message = 'ok')
{
return [
'code' => 1,
'data' => $data,
];
}
public function error($message = 'fail')
{
return [
'code' => 0,
'error' => [
'code' => 500,
'type' => 'NORMAL',
'message' => 'fail',
],
];
}
public function responseJson($code = 0, $msg = '', $data = [] ,$total = 0)
{
return [
'code' => $code,
'msg' => $msg,
'status' => $code == 200 ? 'success' : 'error',
'count' => $total,
'data' => $data,
];
}
public function redirect($path, $type, $message)
{
request()->session()->flash($type, $message);
return redirect($path);
}
public function alert($msg='qqq',$time=3){
$str='<script type="text/javascript" src="../../../static/admin/js/jquery.min.js"></script><script type="text/javascript" src="../../../static/layer/layer.js"></script>';//加载jquery和layer
$str.='<script>$(document).ready(function(){layer.alert("'.$msg.'");});</script>';//主要方法
echo $str;die;
}
}
<?php
namespace App\Http\Controllers\Backend\Coupon;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
use Illuminate\Support\Facades\DB;
class CouponSendController extends Controller
{
public function edit(Request $request){
$id= $request->get('id');
return view('backend.coupon.couponsend.edit',['id'=>$id]);
}
public function update(){
$response = $this->curl('inner/couponSend',request()->all());
return $response;
}
}
<?php namespace App\Http\Controllers\Backend\Coupon;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
use Illuminate\Support\Arr;
class MyCouponController extends Controller
{
public function index(Request $request){
$uid = $request->get('uid');
return view('backend.coupon.mycoupon.index',['uid'=>$uid]);
}
public function dataList(Request $request){
$response = $this->curl('inner/couponListByPage',request()->all());
return $response;
}
}
<?php
namespace App\Http\Controllers\Backend\Dashboard;
use App\Http\Controllers\Backend\Controller;
use Illuminate\Http\Request;
class AnalysisController extends Controller
{
public function getOrderReportData(Request $request)
{
$postData['viewType'] = $request->viewType;
$postData['dateType'] = $request->dateType;
return $this->curl('order/getOrderReportData', $postData);
}
}
\ No newline at end of file
<?php
namespace App\Http\Controllers\Backend\Dashboard;
use App\Http\Controllers\Backend\Controller;
//use Illuminate\Routing\Controller;
use Illuminate\Http\Request;
use App\Service\DashBoard\Miniapp;
use App\Service\DashBoard\Product;
use App\Lib\Http;
//独立的dashboard页面
class DashboardController extends Controller
{
public function index(Request $request){
return view('backend.dashboard.index');
}
public function allData(Request $request){
$params = $request->all();
$range = $params['range']??'';
$view_type = $params['viewType']??0;//数据类型1,会员数据,2,商品数据,3,小程序数据(包括订单数据)
$view_type = (int) $view_type;
$data_type = $params['dateType']??4;//数据范围4,全部,3,月份,2,7天,1,昨天
$data_type = (int) $data_type;
if($data_type == '1'){
$range = 'day';
}
if($data_type == '2'){
$range = 'week';
}
if($data_type == '3'){
$range = 'month';
}
$start_date = '1970-08-01';
$end_date = date("Y-m-d");
if($range == 'day'){
$start_date = date("Y-m-d",strtotime("-1 day"));
$end_date = date("Y-m-d",strtotime("-1 day"));
}
if($range == 'week'){
$start_date = date("Y-m-d",strtotime("-7 day"));
}
if($range == 'month'){
$start_date = date("Y-m-d",strtotime("last month"));
}
$member_dashboard = (new Http)->curl('member/dashboard',request()->all());
$member_data = $member_dashboard['data'];
if($view_type == 1){
$data['data'] = [
'member_data'=>$member_data,
];
return $this->response($data);
}
$product_data = (new Product())->getData($start_date,$end_date);
if($view_type == 2){
$data['data'] = [
'product_data'=>$product_data,
];
return $this->response($data);
}
$mini_data = (new Miniapp())->getData($start_date,$end_date);
$oms_data = (new Http)->curl('oms/dashboard',request()->all());
$pdt_view_percent = '0%';
$create_order_percent = '0%';
$paid_order_percent = '0%';
if($mini_data['uv']){
$pdt_view_percent = bcdiv($mini_data['pdt_uv'],$mini_data['uv'],2) * 100;
$pdt_view_percent = (int) $pdt_view_percent;
$pdt_view_percent = $pdt_view_percent . '%';
}
if($mini_data['pdt_uv']){
$create_order_percent = bcdiv($oms_data['created_order_uv'],$mini_data['pdt_uv'],2) * 100;
$create_order_percent = (int) $create_order_percent;
$create_order_percent = $create_order_percent. '%';
}
if($oms_data['created_order_uv']){
$paid_order_percent = bcdiv($oms_data['paid_order_uv'],$oms_data['created_order_uv'],2) * 100;
$paid_order_percent = (int) $paid_order_percent;
$paid_order_percent = $paid_order_percent . '%';
}
$oms_data['pdt_view_percent'] = $pdt_view_percent;
$oms_data['pdt_uv'] = $mini_data['pdt_uv'];
$oms_data['create_order_percent'] = $create_order_percent;
$oms_data['paid_percent'] = $paid_order_percent ;
$oms_data['uv'] = $mini_data['uv'];
$oms_data['add_cart_times'] = $product_data['add_cart_times'];
if($view_type == 3){
$data['data'] = [
'mini_data'=>$mini_data,
'oms_data'=>$oms_data,
];
return $this->response($data);
}
//返回全部数据
$data['data'] = [
'mini_data'=>$mini_data,
'product_data'=>$product_data,
'member_data'=>$member_data,
'oms_data'=>$oms_data,
];
return $this->response($data);
}
public function response($data){
return $data;
}
}
\ No newline at end of file
<?php
namespace App\Http\Controllers\Backend\Dashboard;
//use App\Http\Controllers\Backend\Controller;
use Illuminate\Routing\Controller;
use App\Service\DashBoard\Miniapp;
use Illuminate\Http\Request;
class MiniController extends Controller
{
public function getData(Request $request){
$params = $request->all();
$range = $params['range']??'';
$view_type = $params['viewType']??0;//数据类型1,会员数据,2,商品数据,3,小程序数据(包括订单数据)
$view_type = (int) $view_type;
$data_type = $params['dateType']??4;//数据范围4,全部,3,月份,2,7天,1,昨天
$data_type = (int) $data_type;
if($data_type == '1'){
$range = 'day';
}
if($data_type == '2'){
$range = 'week';
}
if($data_type == '3'){
$range = 'month';
}
$start_date = '1970-08-01';
$end_date = date("Y-m-d");
if($range == 'day'){
$start_date = date("Y-m-d",strtotime("-2 day"));
$end_date = date("Y-m-d",strtotime("-1 day"));
}
if($range == 'week'){
$start_date = date("Y-m-d",strtotime("-7 day"));
}
if($range == 'month'){
$start_date = date("Y-m-d",strtotime("last month"));
}
$data = (new Miniapp())->getData($start_date,$end_date);
return $this->response($data);
}
public function response($data){
return $data;
}
}
\ No newline at end of file
<?php
namespace App\Http\Controllers\Backend\Dashboard;
//use App\Http\Controllers\Backend\Controller;
use Illuminate\Routing\Controller;
use App\Service\DashBoard\Product;
use Illuminate\Http\Request;
class ProductController extends Controller
{
public function getData(Request $request){
$params = $request->all();
$range = $params['range']??'';
$view_type = $params['viewType']??0;//数据类型1,会员数据,2,商品数据,3,小程序数据(包括订单数据)
$view_type = (int) $view_type;
$data_type = $params['dateType']??4;//数据范围4,全部,3,月份,2,7天,1,昨天
$data_type = (int) $data_type;
if($data_type == '1'){
$range = 'day';
}
if($data_type == '2'){
$range = 'week';
}
if($data_type == '3'){
$range = 'month';
}
$start_date = '1970-08-01';
$end_date = date("Y-m-d");
if($range == 'day'){
$start_date = date("Y-m-d",strtotime("-2 day"));
$end_date = date("Y-m-d",strtotime("-1 day"));
}
if($range == 'week'){
$start_date = date("Y-m-d",strtotime("-7 day"));
}
if($range == 'month'){
$start_date = date("Y-m-d",strtotime("last month"));
}
$data = (new Product())->getData($start_date,$end_date);
return $this->response($data);
}
public function response($data){
return $data;
}
}
\ No newline at end of file
<?php
namespace App\Http\Controllers\Backend;
use Illuminate\Http\Request;
class FileController extends Controller
{
public function uploadPic()
{
// $path = request()->file->store('dlc_statics');
// $local_path = storage_path().'/app/'.$path;
// $localClient = new \App\Lib\Local();
// return ['code' => 0, 'path' => $localClient->upload($path, $local_path)];
$path = request()->file->store('images');
$local_path = storage_path().'/app/'.$path;
$ossClient = new \App\Lib\Oss();
$ossClient->upload($path, $local_path);
return ['code' => 0, 'path' => env('OSS_DOMAIN').'/'.$path];
}
}
<?php
namespace App\Http\Controllers\Backend\Gold;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
class IndexController extends Controller
{
public function __construct()
{
parent::__construct();
}
public function index(Request $request)
{
return view('backend.gold.index');
}
public function list(Request $request)
{
return $this->curl('goods/gold/list', request()->all());
}
public function changeStatus(Request $request)
{
return $this->curl('goods/gold/changeStatus', $request->all());
}
public function delete(Request $request)
{
return $this->curl('goods/gold/delete', $request->all());
}
public function add(Request $request)
{
return view('backend.gold.add');
}
public function insert(Request $request)
{
return $this->curl('goods/gold/add', $request->all());
}
public function userBalanceLog(Request $request)
{
return view('backend.gold.log');
}
public function getUserBalanceLogs(Request $request)
{
return $this->curl('member/user/getBalanceLogs', $request->all());
}
public function order(Request $request)
{
return view('backend.gold.order');
}
public function userBalanceList(Request $request)
{
return view('backend.gold.userBalance');
}
public function refund(Request $request)
{
return $this->curl('order/goldOrder/refund', $request->all());
}
public function getUserBalanceList(Request $request)
{
return $this->curl('member/user/getUserBalanceList', $request->all());
}
public function exportLog(Request $request)
{
$data = $this->curl('member/user/exportBalanceLogs', $request->all());
$list = $data['data'];
$columns = $list[0];
unset($list['0']);
$data = [
'columns' => $columns,
'value' => array_values($list),
];
return $this->success($data, 'success');
}
public function invoice(Request $request)
{
return $this->curl('member/user/invoice', $request->all());
}
public function recharge(Request $request)
{
return $this->curl('member/balance/recharge', $request->all());
}
}
<?php
namespace App\Http\Controllers\Backend\Goods;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
class CategoryController extends Controller
{
public function __construct()
{
parent::__construct();
}
public function index(Request $request)
{
return view('backend.goods.category.index');
}
public function add(Request $request)
{
$prodTypeList = $this->curl('goods/common/getProdTypelist');
return view('backend.goods.category.add', ['prodTypeList' => array_to_object($prodTypeList)]);
}
public function create(Request $request)
{
if ($request->isMethod('post')) {
$postData = $request->all();
unset($postData['tag_1'], $postData['relatedItemsJson'], $postData['file']);
$result = $this->curl('goods/category/addCate', $postData);
return $result;
}
}
public function get(Request $request)
{
$params = $request->all();
$params['is_all'] = 1;
$detail = $this->curl('goods/category/getCate', $params);
$data = &$detail['data'];
return view('backend.goods.category.edit', ['detail' => array_to_object($data)]);
}
public function relate(Request $request){
$all = $request->all();
unset($all['_url']);
return view('backend.goods.category.relate',
[
'query_string'=>http_build_query($all),
'cat_id'=>$all['cat_id']
]);
}
public function batchChangeSort(Request $request){
$response = $this->curl('goods/category/batchChangeSort', $request->all());
return $response??[];
}
public function getCatProdAndColleList(Request $request){
$response = $this->curl('goods/spu/getCatProdAndColleList', $request->all());
return $response??[];
}
public function updateCatRelation(Request $request){
$response = $this->curl('goods/spu/updateCatRelation', $request->all());
return $response??[];
}
public function getProdAndCollList(Request $request){
$response = $this->curl('goods/spu/getProdAndCollList', $request->all());
return $response??[];
}
public function edit(Request $request)
{
if ($request->isMethod('post')) {
$postData = $request->all();
// unset($postData['_token'], $postData['tag_1'], $postData['relatedItemsJson'], $postData['file']);
$response = $this->curl('goods/category/editCate', $postData);
return $response;
}
}
public function addProducts(Request $request){
$result = $this->curl('goods/category/addProducts', $request->all());
return $result;
}
public function delProduct(Request $request){
$result = $this->curl('goods/category/delProduct', $request->all());
return $result;
}
public function look(Request $request)
{
$prodTypeList = $this->curl('goods/common/getProdTypelist');
$detail = $this->curl('goods/category/getCate', $request->all());
$data = &$detail['data'];
$relatedItems = $data['relatedItems'] ?: [];
$relatedItemsArr = [];
foreach ($relatedItems as $relatedItem) {
$relatedItemsArr[] = $relatedItem['master_catalog_item'];
}
$relatedItemsStr = implode(',', $relatedItemsArr);
$selectedItems = [];
if ($data['selected_items']) {
$selectedItemsRaw = explode(',', $data['selected_items']);
foreach ($selectedItemsRaw as $selKeyRaw => $selectedItemRaw) {
$selectedItems[$selKeyRaw] = ['master_catalog_item' => $selectedItemRaw];
}
unset($selectedItemsRaw);
} else {
$selectedItems = [];
}
$selectedItemsJson = json_encode($selectedItems);
$data['selectedItems'] = $selectedItems;
$data['selectedItemsJson'] = $selectedItemsJson;
$data['selectedItemsStr'] = $data['selected_items'];
$data['relatedItemsStr'] = $relatedItemsStr;
$data['relatedItemsJson'] = json_encode($relatedItems);
$data['initProdsArr'] = empty($data['init_prods']) ? [] : explode(',', $data['init_prods']);
$data['customProdType'] = empty($data['custom_prod_type']) ? [] : explode(',', $data['custom_prod_type']);
return view('backend.goods.category.look', ['detail' => array_to_object($data), 'prodTypeList' => array_to_object($prodTypeList)]);
}
public function calculateProdIds(Request $request)
{
if ($request->isMethod('post')) {
$postData = $request->all();
$response = $this->curl('goods/category/calculateProds', $postData);
return json_encode($response['data']);
}
}
public function relateProds(Request $request)
{
$detail = $this->curl('goods/category/relateProds', request()->all());
return view('backend.goods.category.relate', ['detail' => json_encode($detail['data'])]);
}
public function pCateListNoSub(Request $request)
{
$response = $this->curl('goods/category/pCateListNoSub', request()->all());
return $response['data'];
}
public function editRelateProds(Request $request)
{
$response = $this->curl('goods/category/editRelateProds', request()->all());
return $response;
}
public function list(Request $request)
{
$response = $this->curl('goods/category/list', request()->all());
return $response;
}
public function getProdTypelist(Request $request)
{
$response = $this->curl('goods/common/getProdTypelist', request()->all());
return $response;
}
public function prodList(Request $request)
{
$response = $this->curl('goods/spu/list', request()->all());
return $response['data'];
}
public function pCateList(Request $request)
{
$response = $this->curl('goods/category/pCateList', request()->all());
return $response;
}
public function offCat(Request $request)
{
$response = $this->curl('goods/category/offCat', request()->all());
return $response;
}
public function upCat(Request $request)
{
$response = $this->curl('goods/category/upCat', request()->all());
return $response;
}
public function handleCatSortCsv(Request $request)
{
try{
$file = $_FILES;
$excel_file_path = $file['file']['tmp_name'];
if(!$excel_file_path) return [];
$content = file_get_contents($excel_file_path);
$content_data = explode("\r\n", $content);
$method = '';
$data = [];
foreach($content_data as $k=>$record){
$record = str_replace('\n','',$record);
$fields = explode(',',$record);
if($k == 0) {
// $tmp = explode(' ',trim($fields[0]));
// if(strpos($tmp[0],'Spu') !== false) $method = 'handleSpuCsv';
// if(strpos($tmp[0],'Sku') !== false) $method = 'handleSkuCsv';
// if(strpos($tmp[0],'Spec') !== false) $method = 'handleSpecCsv';
continue;
// $method = 'handle'.$tmp[0].'Csv';
};
$data[] = $fields;
}
// if(!$data || !$method) return ['code'=>0];
$response = $this->curl('goods/category/handleCatSortCsv', ['data'=>json_encode($data)]);
// $response = $this->curl('goods/spu/handleCsv', ['handleMethod'=>$method,'data'=>json_encode($data)]);
return $response;
}catch(\Exception $e){
return $this->error($e->getMessage());
}
}
}
<?php
namespace App\Http\Controllers\Backend\Goods;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
class CollectionController extends Controller
{
public function __construct()
{
parent::__construct();
}
public function index(Request $request)
{
return view('backend.goods.collection.index');
}
public function get(Request $request)
{
$data = $this->curl('goods/collection/get', $request->all());
$detail = $data['data'];
$cats = $detail['cats'];
return view('backend.goods.collection.edit', ['detail' => array_to_object($detail),'cats'=>$cats]);
}
public function update(Request $request)
{
if ($request->isMethod('post')) {
$postData = $request->all();
unset($postData['file']);
$response = $this->curl('goods/collection/update', $postData);
return $response;
}
}
public function add(Request $request){
return view('backend.goods.collection.add');
}
public function getFormatedProductList(Request $request){
$postData = $request->all();
unset($postData['file']);
$response = $this->curl('goods/collection/getFormatedProductList', $postData);
return $response['data'];
}
public function insert(Request $request)
{
if ($request->isMethod('post')) {
$postData = $request->all();
unset($postData['file']);
$response = $this->curl('goods/collection/insert', $postData);
return $response;
}
}
public function changeStatus(Request $request)
{
// if ($request->isMethod('post')) {
$postData = $request->all();
$changeBack = $this->curl('goods/collection/changeStatus', $postData);
return $changeBack;
// }
}
public function list()
{
$response = $this->curl('goods/collection/list', request()->all());
return $response['data'];
}
public function cms(){
$result = $this->curl('goods/collection/getDetail',['id'=>request('id')]);
$kv_images='[]';
$pc='[]';
$wechat='[]';
if($result['code']==1 && isset($result['data']['kv_images'])){
$kv_images=$result['data']['kv_images'];
}
if($result['code']==1 && isset($result['data']['pc'])){
$pc=$result['data']['pc'];
}
if($result['code']==1 && isset($result['data']['wechat'])){
$wechat=$result['data']['wechat'];
}
return view('backend.goods.collection.cms',compact('kv_images','pc','wechat'));
}
public function cmssave(){
$data=[
'id'=>request('id'),
'wechat'=>request('content')['h5'],
'pc'=>request('content')['h5'],
'kv_images'=>request('kv_images',request('kv_images')),
];
$result=$this->curl('goods/collection/saveDetail',$data);
return $result;
}
}
<?php
namespace App\Http\Controllers\Backend\Goods;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
class DoorSkuController extends Controller
{
public function __construct()
{
parent::__construct();
}
public function index(Request $request)
{
return view('backend.goods.doorSku.index');
}
public function get(Request $request)
{
$data = $this->curl('goods/doorSku/getSku', $request->all());
$detail = $data['data'];
return view('backend.goods.doorSku.edit', ['detail' => array_to_object($detail)]);
}
public function edit(Request $request)
{
if ($request->isMethod('post')) {
$postData = $request->all();
unset($postData['_token']);
$editBack = $this->curl('goods/doorSku/editSku', $postData);
return $editBack;
}
}
public function list()
{
$response = $this->curl('goods/doorSku/list', request()->all());
return $response;
}
}
<?php
namespace App\Http\Controllers\Backend\Goods;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
class RecommendController extends Controller
{
public function __construct()
{
parent::__construct();
}
public function index(Request $request)
{
return view('backend.goods.recommend.index');
}
public function add(Request $request){
return view('backend.goods.recommend.add');
}
public function insert(Request $request)
{
// if ($request->isMethod('post')) {
$postData = $request->all();
unset($postData['file']);
$response = $this->curl('goods/recommend/add', $postData);
return $response;
// }
}
public function changeStatus(Request $request)
{
// if ($request->isMethod('post')) {
$postData = $request->all();
$changeBack = $this->curl('goods/recommend/changeStatus', $postData);
return $changeBack;
// }
}
public function list()
{
$response = $this->curl('goods/recommend/list', request()->all());
return $response['data'];
}
}
<?php
namespace App\Http\Controllers\Backend\Goods;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
class SearchController extends Controller
{
public function __construct()
{
parent::__construct();
}
public function blacklist(Request $request)
{
$all = $request->all();
unset($all['_url']);
return view('backend.goods.search.blacklist',[
'query_string'=>http_build_query($all)
]);
}
public function delBlackList(Request $request)
{
$response = $this->curl('goods/search/delBlackList', $request->all());
return $response;
}
public function addBlackList(Request $request)
{
if ($request->isMethod('post')) {
$postData = $request->all();
unset($postData['file']);
$response = $this->curl('goods/search/addBlackList', $postData);
return $response;
}
}
public function getBlackList()
{
$response = $this->curl('goods/search/blacklist', request()->all());
return $response['data'];
}
}
<?php
namespace App\Http\Controllers\Backend\Goods;
use Illuminate\Http\Request;
use App\Http\Controllers\Backend\Controller;
class SkuController extends Controller
{
public function __construct()
{
parent::__construct();
}
public function index(Request $request)
{
$all = $request->all();
unset($all['_url']);
return view('backend.goods.sku.index', [
'query_string' => http_build_query($all)
]);
}
public function get(Request $request)
{
$data = $this->curl('goods/sku/getSku', $request->all());
$detail = $data['data'];
$stock = $detail['stockinfo'];
return view('backend.goods.sku.edit', [
'detail' => array_to_object($detail),
'stockinfo' => $stock
]);
}
public function add(Request $request)
{
$params = [];
$params['virtual'] = ($request->get('type')=='virtual')?1:0;
$params['unreal'] = ($request->get('type')=='unreal')?1:0;
return view('backend.goods.sku.add',$params);
}
public function insert(Request $request)
{
if ($request->isMethod('post')) {
$postData = $request->all();
unset($postData['file']);
$response = $this->curl('goods/sku/add', $postData);
return $response;
}
}
public function edit(Request $request)
{
if ($request->isMethod('post')) {
$postData = $request->all();
unset($postData['_token']);
$editBack = $this->curl('goods/sku/editSku', $postData);
return $editBack;
}
}
public function list()
{
$response = $this->curl('goods/sku/list', request()->all());
return $response;
}
public function getStock()
{
$response = $this->curl('goods/sku/stock', request()->all());
$detail = [];
$detail['inventory'] = $response['inventory'];
$detail['sku_id'] = request()->all()['sku_id'];
return view('backend.goods.sku.stock', ['detail' => array_to_object($detail)]);
}
public function updateStock(Request $request)
{
$sku = $request->get('sku');
$qty = (int)$request->get('qty');
//1赠0减
$increment = ($qty<0)?0:1;
$username = auth()->user()->name;
$params = [
'sku_json'=>json_encode([[$sku,$qty,'']]),
'channel_id'=>1,
'increment'=>$increment,
'note'=>"操作人员:{$username}",
];
$response = $this->curl('outward/update/batchStockForce', $params);
if(($increment==1) && ($response['code']==1)){
$this->curl('inner/arrivalReminder', ['skus_str'=>$sku]);
}
return $response;
}
public function updateSkuSecure(Request $request)
{
if ($request->isMethod('post')) {
$postData = $request->all();
unset($postData['_token']);
$response = $this->curl('goods/channel/updatesecure', $postData);
return $response;
}
}
public function updateChannelStock(Request $request)
{
if ($request->isMethod('post')) {
$postData = $request->all();
unset($postData['_token']);
$response = $this->curl('goods/channel/update', $postData);
return $response;
}
}
public function stockLoglist()
{
$response = $this->curl('goods/stock/log', request()->all());
return $response;
}
public function cms()
{
$result = $this->curl('goods/sku/getDetail', ['id' => request('id')]);
$kv_images = '[]';
if ($result['code'] == 1 && isset($result['data']['kv_images'])) {
$kv_images = json_encode($result['data']['kv_images']);
}
return view('backend.goods.sku.cms', compact('kv_images'));
}
public function cmssave()
{
$data = [
'id' => request('id'),
'kv_images' => request('kv_images', request('kv_images')),
];
$result = $this->curl('goods/sku/saveDetail', $data);
return $result;
}
public function _export(Request $request)
{
$all = $request->all();
unset($all['_url']);
$all['limit'] = 1000;
$data = $this->curl('goods/sku/infoAll', $all);
$list = $data['data'];
$columns = $list[0];
unset($list['0']);
$result = [
'columns' => $columns,
'value' => array_values($list),
];
return $this->success($result, 'success');
}
}
This diff is collapsed. Click to expand it.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment