Commit 831471fd by 杨昕

Merge branch 'test' into 'master'

Test

See merge request !36
parents fc81ccec fdc5adc3
Pipeline #14125 passed with stages
in 8 minutes 19 seconds
<?php
namespace App\Exports;
use App\Model\MediaModel;
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithColumnWidths;
class MediasExport implements WithHeadings,FromArray,WithColumnWidths
{
use Exportable;
public function __construct($params)
{
$this->media_ids = $params;
}
public function columnWidths(): array
{
return [
'A' => 30,
'B' => 55,
'C' => 45,
'D' => 45,
'E' => 55
];
}
/**
* 设置表头
* @return array
*/
public function headings(): array
{
return [
'媒资编号',
"名称",
'视频名称',
"永久播放地址",
"全屏预览地址",
];
}
public function array(): array
{
return $this->media_ids;
}
}
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithColumnWidths;
use Maatwebsite\Excel\Concerns\WithStyles;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
class MubanExport implements WithColumnWidths,WithHeadings,FromArray,WithStyles
{
use Exportable;
public function headings(): array
{
return [
'名称',
'媒资编号',
];
}
/**
* 设置表头
* @return array
*/
public function columnWidths(): array
{
return [
'A' => 55,
'B' => 45,
];
}
public function array(): array
{
return [
["【第一章马克思主义哲学是科学的世界观和方法论第一节哲学及其基本问题】.mp4", "mda-250f994a93f2688ba225532c641b2a34"],
["【19课堂】2021.03.02-月半时政-脱贫攻坚-公基-李浩祥】.mp4", "mda-a4c0ad458d3592ff798277a42cb57be6"],
["视频名称是必填项","媒资编号为必填项"]
];
}
public function styles(Worksheet $sheet)
{
return [
'A4' => ['font' => ['bold' => true]],
'B4' => ['font' => ['bold' => true]],
];
}
}
......@@ -376,14 +376,19 @@ function getRbac($request,$url='api/ram',$appid = '' ,$type='base'){
$staffNo = $request->username;
$rbac_url = $rbac.'/rbac/'.$url.'?t='.$time.'&sign='.$sign.'&ak='.$rbac_ak.'&staffNo='.$staffNo;
break;
#清除CND缓存
case 'clear_cache':
$rbac_url = $rbac.'/cdn/'.$url.'?t='.$time.'&sign='.$sign.'&ak='.$rbac_ak;
break;
#获取单个视频永久播放链接地址
case 'play_m3u8':
$rbac_url = $rbac.'/chain/'.$url.'?t='.$time.'&sign='.$sign.'&ak='.$rbac_ak.'&mediaId='.$appid.'&pathForever=1';
break;
#批量获取获取多个永久播放链接地址
case 'mul_play_m3u8':
$rbac_url = $rbac.'/chain/'.$url.'?t='.$time.'&sign='.$sign.'&ak='.$rbac_ak.'&pathForever=1';
break;
default:
$rbac_url = $rbac.'/rbac/'.$url.'?t='.$time.'&sign='.$sign.'&ak='.$rbac_ak.'&appid='.$appid.'&uid='.$mis_uid;
......
......@@ -46,7 +46,7 @@ class MediaCategoryController extends Controller
SrsHookValidate::srsHookCallback($request,[
'name' => 'required',
'media_category_id' => '',
'media_category_id' => 'required',
'status' => '',
'description' => ''
]);
......@@ -85,11 +85,12 @@ class MediaCategoryController extends Controller
SrsHookValidate::srsHookCallback($request,[
'name' => 'required',
'media_category_id' => '',
'media_category_id' => 'required',
'status' => '',
'description' => '',
]);
MediaCategoryModel::updateMediaCatg($request,$id);
});
......@@ -97,4 +98,26 @@ class MediaCategoryController extends Controller
}
/**
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @throws \App\Exceptions\ControllerException
*/
public function disable(Request $request)
{
handler_drive(function () use($request){
$id = $request->id;
SrsHookValidate::srsHookCallback($request,[
'status' => '',
]);
MediaCategoryModel::disable($request,$id);
});
return success();
}
}
......@@ -2,12 +2,20 @@
namespace App\Http\Controllers\Web;
use App\Exports\MediasExport;
use App\Exports\MubanExport;
use App\Imports\MediasImport;
use App\Model\DownloadRecord;
use App\Model\MediaCategoryModel;
use App\Model\MediaModel;
use App\Tool\SrsHookValidate;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\App;
use Maatwebsite\Excel\Facades\Excel;
use Qiniu\Auth;
class MediaController extends Controller
{
......@@ -27,19 +35,19 @@ class MediaController extends Controller
// php 特殊字符转义,实现字符串安全存入数据库,
SrsHookValidate::srsHookCallback($request,[
'media_name' => '',
'username' => '',
'page' => 'integer',
'media_id' => '',
'description' => '',
'sort' => '',
'page_size' => 'integer',
'start_time' => 'date',
'end_time' => 'date',
'category_id' => '',
'appid' => ''
]);
// SrsHookValidate::srsHookCallback($request,[
// 'media_name' => '',
// 'username' => '',
// 'page' => 'integer',
// 'media_id' => '',
// 'description' => '',
// 'sort' => '',
// 'page_size' => 'integer',
// 'start_time' => 'date',
// 'end_time' => 'date',
// 'category_id' => '',
// 'appid' => ''
// ]);
$medias = MediaModel::mediaList($request);
......@@ -221,4 +229,134 @@ class MediaController extends Controller
return success($res);
}
/**
* @param Request $request
* @param $type
* @return \Symfony\Component\HttpFoundation\BinaryFileResponse
*/
public function export_batch_media(Request $request){
$type = $request->type??'media';
$data = null;
switch ($type){
case 'media':
$data = new MediasExport(["mda-f72b5ea1c0dfc7203bf7ac522cd8baf9","mda-f6eb263d99752afc"]);
break;
case 'muban':
$data = new MubanExport();
break;
default:
$data = new MediasExport(["mda-f72b5ea1c0dfc7203bf7ac522cd8baf9","mda-f6eb263d99752afc"]);
break;
}
return Excel::download($data,$type.'.xlsx');
}
/**
* 展示批处理文件
* @param Request $request
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function batch_media(Request $request){
return view('admin.media.batch_media',$request->all());
}
/**
* 批量导出永久地址
* @param Request $request
* @return \Symfony\Component\HttpFoundation\BinaryFileResponse
* @throws \App\Exceptions\ControllerException
*/
public function import_batch_media(Request $request){
// $type = $request->type??'media';
$data = handler_drive(function () use($request){
$file = $request->file('uploadFile');
#将文件内容转化为数组
$sheet = (new MediasImport())->toArray($file);
$orginal_data = null;
foreach ($sheet as $k => $v){
if (!empty($v)){
$orginal_data = $v;
break;
}
}
if (empty($orginal_data)){
throw new \Exception("文件格式有误");
}
$temp = [];
foreach ($orginal_data as $key => $item){
if (!isset($item["媒资编号"]) || !isset($item["名称"])){
throw new \Exception("文件格式有误");
}
$temp[$item['媒资编号']] = [
'media_id' => $item["媒资编号"],
'name' => $item['名称']
];
}
$data = [];
if (!empty($orginal_data)){
#批量获取永久播放链接地址
$mediaInfos = MediaModel::batchGetMediaForverM3u8($request,$temp);
$data = new MediasExport(array_values($mediaInfos));
}
$record = md5(json_encode($data));
DownloadRecord::addRecord($record,$data);
return $record;
});
return success($data);
}
/**
* @param Request $request
* @param $keyId
* @return \Symfony\Component\HttpFoundation\BinaryFileResponse
* @throws \App\Exceptions\ControllerException
*/
public function download(Request $request,$keyId){
$data = handler_drive(function () use($keyId){
$record = DownloadRecord::getRecord($keyId);
if (empty($record)){
throw new \Exception("数据不存在");
}
$content = json_decode($record['content'],true);
DownloadRecord::delRecord($keyId);
return new MediasExport($content);
});
return Excel::download($data,'media.xlsx');
}
}
......@@ -25,7 +25,6 @@ class MemberController extends Controller
* users跟新验证
*/
protected $users_update_verify = [
'_id' => 'required',
'name' => 'required',
'status' => ''
];
......@@ -125,6 +124,7 @@ class MemberController extends Controller
{
handler_drive(function () use ($request,$id) {
SrsHookValidate::srsHookCallback($request, $this->users_update_verify);
if (!$this->checkOwnHandle($id)) {
......@@ -135,7 +135,7 @@ class MemberController extends Controller
throw new \App\Exceptions\FormException('你不能操作你自己');
}
UserModel::createOrUpdateUser($request);
UserModel::createOrUpdateUser($request,$id);
});
......@@ -242,10 +242,12 @@ class MemberController extends Controller
$user = Auth::user();
if ($user->name != config('custom.supper_admin.name')) {
$result = UserModel::find($user_id);
if ($result === null) {
return false;
}
......@@ -255,6 +257,7 @@ class MemberController extends Controller
return false;
}
}
return true;
}
......
......@@ -18,10 +18,19 @@ class PrivilegeController extends Controller
*/
public function index(Request $request)
{
$user = Auth::user();
if ($user->name == config("custom.supper_admin")['name']){
$url = getRbac($request);
$data['url'] = $url;
return view('admin.privilege.list',$data);
}
$url = getRbac($request,'api/open/check');
$data['appid'] = $request->appid;
$data['uid'] = Auth::user()->mis_uid;
$data['uid'] = $user->mis_uid;
$data['tree'] = 1;
......@@ -31,6 +40,7 @@ class PrivilegeController extends Controller
$data
);
$result = json_decode($result,true);
if (empty($result['data'])){
......
......@@ -10,6 +10,9 @@ class TestController extends Controller
//
function index(Request $request){
phpinfo();
// $staffNo = $request->username??"yf60144";
// $url = 'http://api-mis.offcn.com/index.php/applogin/isworking';
// $data = sign($staffNo);
......@@ -25,24 +28,24 @@ class TestController extends Controller
// $userInfo = json_decode($result,true);
$staffNo = $request->username??"yf60144";;
$url = 'http://api-mis.offcn.com/index.php/applogin/isworking';
$data = sign($staffNo);
$data['type'] = 6;
$data['username'] = $staffNo;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$result = curl_exec($ch);
$userInfo = json_decode($result,true);
var_dump($userInfo);
// $staffNo = $request->username??"yf60144";;
// $url = 'http://api-mis.offcn.com/index.php/applogin/isworking';
// $data = sign($staffNo);
// $data['type'] = 6;
// $data['username'] = $staffNo;
// $ch = curl_init();
// curl_setopt($ch, CURLOPT_URL, $url);
// curl_setopt($ch, CURLOPT_POST, true);
// curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
// curl_setopt($ch, CURLOPT_HEADER, false);
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// curl_setopt($ch, CURLOPT_TIMEOUT, 10);
// $result = curl_exec($ch);
//
// $userInfo = json_decode($result,true);
//
//
// var_dump($userInfo);
}
......
......@@ -3,6 +3,7 @@
namespace App\Http\Middleware;
use App\Exceptions\ControllerException;
use App\Model\MediaCategoryModel;
use Closure;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Auth;
......@@ -34,6 +35,13 @@ class ApiMiddleware
$user = Auth::user();
if ($request->category_id){
$mediaCatg = MediaCategoryModel::where("_id",$request->category_id)->first();
$request->replace(array_merge($request->all(),['catetory_name'=>$mediaCatg->name]));
}
if (isset($user->mis_uid)){
$request->replace(array_merge($request->all(),['mis_uid'=>$user->mis_uid]));
}
......
......@@ -15,6 +15,7 @@ class MediaCategoryRoute extends AuthenRoute
public function map(Registrar $router,$callback){
parent::map($router,function() use ($router){
$router->resource('media_category','MediaCategoryController');
$router->post('media_category/disable','MediaCategoryController@disable');
});
}
......
......@@ -19,6 +19,19 @@ class MediaRoute extends AuthenRoute
$router->get('video_preview/{media_num}','MediaController@media_preview');
$router->post('set_media_num','MediaController@setMediaNum');
$router->get('clear_cdn_cache/{media_id}','MediaController@clearCdnCache');
#导入待处理media编号excel表格
$router->post('media_manager/import_batch_media','MediaController@import_batch_media');
#展示批处理页面
$router->get('media_manager/batch_media','MediaController@batch_media');
#导出展示批处理
$router->get('media_manager/export_batch_media','MediaController@export_batch_media');
$router->get("/media_manager/download/{keyId}",'MediaController@download');
});
}
......
<?php
namespace App\Imports;
use Maatwebsite\Excel\Concerns\Importable;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Concerns\RegistersEventListeners;
class MediasImport implements WithHeadingRow,WithEvents{
use Importable,RegistersEventListeners;
}
\ No newline at end of file
<?php
namespace App\Model;
use App\Exceptions\DatabaseException;
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
use MongoDB\BSON\UTCDateTime;
class DownloadRecord extends Eloquent
{
protected $collection = "download_record";
protected $connection = 'mongodb'; //使用mongodb
protected $primaryKey = '_id';
/**
* @param $keyId
* @param $data
* @return mixed
* @throws DatabaseException
*/
public static function addRecord($keyId,$data){
try{
$record = self::getRecord($keyId);
if (empty($record)){
$create_time = new UTCDateTime(time() * 1000);;
$data = [
'key_id' => $keyId,
'content' => json_encode($data),
'create_time' => $create_time,
];
$id = DownloadRecord::insertGetId($data);
}else{
$id = $record['id'];
}
}catch (\Exception $exception){
throw new DatabaseException($exception->getMessage());
}
return $id;
}
/**
* @param $keyId
* @return mixed
* @throws DatabaseException
*/
public static function getRecord($keyId){
try{
$record = DownloadRecord::where("key_id",$keyId)->first();
}catch (\Exception $exception){
throw new DatabaseException($exception->getMessage());
}
return $record;
}
/**
* 删除记录
* @param $keyId
* @return mixed
* @throws DatabaseException
*/
public static function delRecord($keyId){
try{
$flag = DownloadRecord::where("key_id",$keyId)->delete();
}catch (\Exception $exception){
throw new DatabaseException($exception->getMessage());
}
return $flag;
}
}
......@@ -3,8 +3,10 @@
namespace App\Model;
use App\Exceptions\DatabaseException;
use App\Tool\Constant;
use http\Env\Request;
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
use MongoDB\BSON\UTCDateTime;
class MediaCategoryModel extends Eloquent
{
......@@ -31,17 +33,22 @@ class MediaCategoryModel extends Eloquent
/**
* 获取用户业务线及对应业务线的权限
*/
$catgList = MediaCategoryModel::where('status',0)->limit(20)->get()->toArray();
$appids = array_column($catgList,"media_category_id");
#需要传一个默认的appid,否则接口会报参数缺失错误
$url = getRbac($request,'api/open/getPlatform','ec8747abc5dbe8288e64f327a76ac517');
$result = http_request_code($url,
array(
"Content-Type: application/json"
),
'POST',
json_encode(array())
json_encode($appids)
);
LogModel::addlog(['获取商店列表'=>json_decode($result)]);
$catgs = json_decode($result,true);
if (!isset($catgs['data'])){
......@@ -49,13 +56,8 @@ class MediaCategoryModel extends Eloquent
throw new \Exception("获取商店列表失败");
}
$catgList = MediaCategoryModel::get()->toArray();
$appids = array_column($catgs['data'],"appid");
$tmp = [];
foreach ($catgList as $catg){
......@@ -64,7 +66,6 @@ class MediaCategoryModel extends Eloquent
}
}
}catch (\Exception $exception){
throw new DatabaseException($exception->getMessage());
}
......@@ -86,7 +87,7 @@ class MediaCategoryModel extends Eloquent
$where['name'] = $request->name;
}
$catgList = MediaCategoryModel::where($where)->paginate(10);
$catgList = MediaCategoryModel::where($where)->orderBy("create_time",Constant::SORT_DESC)->paginate(10);
}catch (\Exception $exception){
throw new DatabaseException("类别不存在");
......@@ -104,11 +105,14 @@ class MediaCategoryModel extends Eloquent
public static function addMediaCatg($request){
try{
$create_time = new UTCDateTime(time() * 1000);;
$data = [
'name' => $request->name,
'status' => 0,
'media_category_id' => $request->media_category_id??'',
'description' => $request->description??''
'description' => $request->description??'',
'create_time' => $create_time,
];
$mediaCatg = MediaCategoryModel::where('name',$request->name)->first();
......@@ -162,4 +166,38 @@ class MediaCategoryModel extends Eloquent
}
return $flag;
}
/**
* 禁用媒资店铺
* @param $request
* @param $id
* @return mixed
* @throws DatabaseException
*/
public static function disable($request,$id){
try{
$data = [
'status' => $request->status??0,
];
$mediaCatg = MediaCategoryModel::where('_id',$id)->first();
if (empty($mediaCatg)){
throw new \Exception('媒资类别不存在');
}
$flag = MediaCategoryModel::where("_id",$id)->update($data);
if (!$flag){
throw new \Exception("媒资类别更新失败");
}
}catch (\Exception $exception){
throw new DatabaseException($exception->getMessage());
}
return $flag;
}
}
......@@ -24,6 +24,8 @@ class MediaModel extends Eloquent
public $timestamps = false;
public static $max_page_size = 500;
public function media_category()
......@@ -46,8 +48,8 @@ class MediaModel extends Eloquent
$limit = (isset($request->page_size) ? (int)($request->page_size) : Constant::PAGE_NUMBER) ;
if ($limit >500){
$limit = 500;
if ($limit >self::$max_page_size){
$limit = self::$max_page_size;
}
$page = $request->page??1;
......@@ -60,42 +62,45 @@ class MediaModel extends Eloquent
$sort = 1;
}
$match = [
'status' => ["\$in" => [null,"1"]],
"media_url" => ["\$ne" => 'null']
];
if (isset($request->media_id) && !empty($request->media_id)){
$aggregate[]['$match']['_id'] = $request->media_id;
$match['_id'] = $request->media_id;
}
if (isset($request->category_id) && !empty($request->category_id)){
$aggregate[]['$match']['media_type_id'] = $request->category_id;
$match['media_type_id'] = $request->category_id;
}
// status:代表未转码
$aggregate[]['$match']['status'] = ["\$ne" => '0'];
$aggregate[]['$match']['media_url'] = ["\$ne" => 'null'];
// $aggregate[]['$match']['_id'] = 'mda-864371b9a82d1e21';
if (isset($request->media_name) && !empty($request->media_name)){
$aggregate[]['$match']['media_name'] = ['$regex' => addslashes($request->media_name) ];
$match['media_name'] = ['$regex' => addslashes($request->media_name) ];
}
if (isset($request->username) && !empty($request->username)){
$aggregate[]['$match']['username'] = ['$regex' => addslashes($request->username) ];
$match['username'] = ['$regex' => addslashes($request->username) ];
}
if (isset($request->description) && !empty($request->description)){
$aggregate[]['$match']['description'] = ['$regex' => $request->description ];
$match['description'] = ['$regex' => $request->description ];
}
if (isset($request->start_time)&& !empty($request->start_time)){
$start_time = new UTCDateTime(strtotime($request->start_time) * 1000);
$aggregate[]['$match']['start_time'] = ['$gt' => $start_time ];
$match['start_time'] = ['$gt' => $start_time ];
}
if (isset($request->end_time)&& !empty($request->end_time)){
$end_time = new UTCDateTime(strtotime($request->end_time) * 1000);;
$aggregate[]['$match']['end_time'] = ['$lt' => $end_time ];
$match['$match']['end_time'] = ['$lt' => $end_time ];
}
$aggregate[]['$match'] = $match;
$aggregate1 = $aggregate;
$aggregate[]['$sort'] = ['start_time' => $sort];
......@@ -105,6 +110,7 @@ class MediaModel extends Eloquent
'count'=>array('$sum'=>1)
];
$count = $collection->aggregate($aggregate1)->toArray();
if (isset($count[0])){
......@@ -858,6 +864,49 @@ class MediaModel extends Eloquent
return $flag;
}
public static function multiplySetMediaNum($request){
try{
$media_ids = $request->media_ids;
//$flag = MediaModel::whereIn("_id",$media_ids)->get($data,['multiple'=>true]);
$medias = MediaModel::whereIn("_id",$media_ids)->limit(self::$max_page_size)->get();
$multiplied = collect($medias)->map(function ($item, $key) {
return $item * 2;
});
$collection = collect([1, 2, 3, 4, 5]);
$collection->contains(function ($key, $value) {
return $value <= 5;
//true
});
$media_id = $request->media_id;
$data = [
'media_num' => md5(md5($media_id)),
];
$flag = MediaModel::whereIn("_id",$media_id)->update($data,['multiple'=>true]);
}catch (\Exception $exception){
throw new DatabaseException($exception->getMessage());
}
return $flag;
}
/**
* 根据媒资编号获取媒资随机码
* @param $request
......@@ -902,6 +951,10 @@ class MediaModel extends Eloquent
$url = getRbac($request,$call_back,$mediaCatg['media_category_id'] ,$type='clear_cache');
http_request_code($url,null,'POST',['mediaId'=>$media_id]);
}catch (\Exception $exception){
throw new DatabaseException($exception->getMessage());
}
......@@ -953,4 +1006,82 @@ class MediaModel extends Eloquent
return $result['data'];
}
/**
* @param $request
* @param string $media_ids
* @return array
* @throws DatabaseException
*/
public static function batchGetMediaForverM3u8($request,array $orginal_data){
try{
$ids = implode(',',array_keys($orginal_data));
#生成批量处理地址
$url = getRbac($request,'video/infos','' ,$type='mul_play_m3u8');
$res = http_request_code($url,null,'POST',array('mediaIds'=>$ids));
$result = json_decode($res,true);
if (empty($result)){
return [];
}
if ($result['code'] != 0){
LogModel::addlog($result);
throw new \Exception("获取数据失败");
}
return self::mediaExportFormat($result['data'],$orginal_data);
}catch (\Exception $exception){
throw new DatabaseException($exception->getMessage());
}
}
/**
* 构造导出数据格式
* @param array $data
* @param $media_ids
* @return mixed
*/
private static function mediaExportFormat(array $data,$orginal_data){
foreach ($orginal_data as $key => &$item){
if (empty($data[$key])){
$item['media_id'] = $key;
$item['media_name'] = '未查到相关数据';
$item['forvery_url'] = '未查到相关数据';
$item['is_full_url'] = "未查到相关数据";
}else{
$media_id = $item['media_id'];
$media = MediaModel::select('media_name')->where('_id',$media_id)->first();
$media_num = md5(md5($media_id));
$item['media_name'] = $media['media_name'];
$tmp = [
'media_num' => $media_num,
];
MediaModel::where("_id",$media_id)->update($tmp);
$url = getenv('preview_domain')?getenv('preview_domain'):"https://xue.t.eoffcn.com/preview/temp/";
$item['forvery_url'] = $data[$key]['url'];
$item['is_full_url'] = $url."player".'/'.$media_num;
}
}
return $orginal_data;
}
}
......@@ -3,6 +3,7 @@
namespace App\Model;
use App\Exceptions\DatabaseException;
use Carbon\Carbon;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Facades\DB;
use Jenssegers\Mongodb\Auth\User as Authenticatable;
......@@ -46,10 +47,9 @@ class UserModel extends Authenticatable
}
$users = DB::connection('mongodb')->collection('users')->where($where)
->where("is_del","!=",1)
->paginate(10);
// foreach ( $users as $user){
// $idArr = ($user['_id'])->jsonSerialize();
// $user['_id'] = $idArr['$oid'];
......@@ -111,9 +111,7 @@ class UserModel extends Authenticatable
* @return mixed
* @throws DatabaseException
*/
public static function createOrUpdateUser($request){
$id = $request->id;
public static function createOrUpdateUser($request,$id){
try{
$user = UserModel::find($id);
......@@ -147,9 +145,9 @@ class UserModel extends Authenticatable
if (empty($user)){
throw new \Exception('用户不存在');
}
$flag = UserModel::where('_id',$id)->delete();
$flag = UserModel::where('_id',$id)->update(["is_del"=>1]);
RecycleModel::addRecycle($id,"users");
//RecycleModel::addRecycle($id,"user");
}catch (\Exception $exception){
throw new \Exception($exception->getMessage());
......@@ -171,13 +169,13 @@ class UserModel extends Authenticatable
if (!empty($user)){
throw new \Exception("用户已存在");
}
$create_time = new UTCDateTime(time() * 1000);
$data = [
'name' => $request->name,
'password' => md5($request->password),
'organization_id' => 0,
'status' => 0,
'create_time' => date('Y-m-d H:i:s',time()),
'create_time' => $create_time,
'user_type' => 1
];
......
......@@ -15,6 +15,7 @@
"jenssegers/mongodb": "^3.4.1",
"laravel/framework": "5.7.*",
"laravel/tinker": "^1.0",
"maatwebsite/excel": "^3.1",
"qiniu/php-sdk": "^7.2"
},
"require-dev": {
......
......@@ -182,6 +182,7 @@ return [
* 自定义
*/
Jenssegers\Mongodb\MongodbServiceProvider::class,
Maatwebsite\Excel\ExcelServiceProvider::class,
],
......@@ -239,6 +240,7 @@ return [
*/
'Mongo' => Jenssegers\Mongodb\MongodbServiceProvider::class,
'Moloquent' => 'Jenssegers\Mongodb\Eloquent\Model',
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
],
......
......@@ -10,7 +10,7 @@
"sort": 1,
"key_name": "member_manager_block",
"son": [{
"id": 10,
"id": 201,
"pid": 2,
"name": "修改密码",
"icon": "",
......@@ -21,7 +21,7 @@
"sort": 25,
"key_name": "member_modify_pwd"
}, {
"id": 9,
"id": 202,
"pid": 2,
"name": " 用户列表",
"icon": "",
......@@ -32,7 +32,7 @@
"sort": 25,
"key_name": "member_manager"
}, {
"id": 8,
"id": 203,
"pid": 2,
"name": "会员删除",
"icon": "",
......@@ -43,7 +43,7 @@
"sort": 25,
"key_name": "member_destroy"
}, {
"id": 7,
"id": 204,
"pid": 2,
"name": "会员启用-停用",
"icon": "",
......@@ -54,7 +54,7 @@
"sort": 25,
"key_name": "member_disable"
}, {
"id": 6,
"id": 205,
"pid": 2,
"name": "编辑保存",
"icon": "",
......@@ -65,7 +65,7 @@
"sort": 25,
"key_name": "member_update"
}, {
"id": 5,
"id": 206,
"pid": 2,
"name": "会员编辑",
"icon": "",
......@@ -76,7 +76,7 @@
"sort": 25,
"key_name": "member_edit"
}, {
"id": 4,
"id": 207,
"pid": 2,
"name": "添加保存",
"icon": "",
......@@ -87,7 +87,7 @@
"sort": 25,
"key_name": "member_add"
}, {
"id": 3,
"id": 208,
"pid": 2,
"name": "会员添加",
"icon": "",
......@@ -110,7 +110,7 @@
"sort": 2,
"key_name": "manager_media",
"son": [{
"id": 15,
"id": 1101,
"pid": 11,
"name": "媒资列表",
"icon": "",
......@@ -121,7 +121,7 @@
"sort": 25,
"key_name": "media_model_list"
},{
"id": 23,
"id": 1102,
"pid": 11,
"name": "媒资删除",
"icon": "",
......@@ -132,7 +132,7 @@
"sort": 25,
"key_name": "media_model_destroy"
}, {
"id": 22,
"id": 1103,
"pid": 11,
"name": "媒资添加保存",
"icon": "",
......@@ -143,7 +143,7 @@
"sort": 25,
"key_name": "media_store"
}, {
"id": 21,
"id": 1104,
"pid": 11,
"name": "媒资修改保存",
"icon": "",
......@@ -154,7 +154,7 @@
"sort": 25,
"key_name": "media_update"
}, {
"id": 18,
"id": 1105,
"pid": 11,
"name": "媒资编辑",
"icon": "",
......@@ -165,7 +165,7 @@
"sort": 25,
"key_name": "media_edit"
}, {
"id": 17,
"id": 1106,
"pid": 11,
"name": "媒资添加",
"icon": "",
......@@ -175,6 +175,18 @@
"show": 0,
"sort": 25,
"key_name": "media_create"
}, {
"id": 1107,
"pid": 11,
"name": "媒资批处理",
"icon": "",
"link": "/media_manager/batch_media",
"slug": "media_manager.batch_media",
"description": "",
"show": 1,
"sort": 25,
"key_name": "batch_media",
"have":1
}]
},{
"id": 3,
......@@ -188,7 +200,7 @@
"sort": 2,
"key_name": "media_category",
"son": [{
"id": 31,
"id": 301,
"pid": 3,
"name": "媒资类别列表",
"icon": "",
......@@ -199,7 +211,7 @@
"sort": 25,
"key_name": "media_list"
},{
"id": 31,
"id": 302,
"pid": 3,
"name": "媒资类别删除",
"icon": "",
......@@ -210,7 +222,7 @@
"sort": 25,
"key_name": "media_destroy"
}, {
"id": 33,
"id": 303,
"pid": 3,
"name": "媒资类别添加保存",
"icon": "",
......@@ -221,7 +233,7 @@
"sort": 25,
"key_name": "media_store"
}, {
"id": 34,
"id": 304,
"pid": 3,
"name": "媒资类别修改保存",
"icon": "",
......@@ -232,7 +244,7 @@
"sort": 25,
"key_name": "media_update"
}, {
"id": 35,
"id": 305,
"pid": 3,
"name": "媒资类别编辑",
"icon": "",
......@@ -243,7 +255,7 @@
"sort": 25,
"key_name": "media_edit"
}, {
"id": 36,
"id": 306,
"pid": 3,
"name": "媒资类别添加",
"icon": "",
......
......@@ -10,7 +10,7 @@
"sort": 1,
"key_name": "member_manager_block",
"son": [{
"id": 10,
"id": 201,
"pid": 2,
"name": "修改密码",
"icon": "",
......@@ -22,7 +22,7 @@
"key_name": "member_modify_pwd"
}, {
"id": 9,
"pid": 2,
"pid": 202,
"name": " 用户列表",
"icon": "",
"link": "/member",
......@@ -32,7 +32,7 @@
"sort": 25,
"key_name": "member_manager"
}, {
"id": 8,
"id": 203,
"pid": 2,
"name": "会员删除",
"icon": "",
......@@ -43,7 +43,7 @@
"sort": 25,
"key_name": "member_destroy"
}, {
"id": 7,
"id": 204,
"pid": 2,
"name": "会员启用-停用",
"icon": "",
......@@ -54,7 +54,7 @@
"sort": 25,
"key_name": "member_disable"
}, {
"id": 6,
"id": 205,
"pid": 2,
"name": "编辑保存",
"icon": "",
......@@ -65,7 +65,7 @@
"sort": 25,
"key_name": "member_update"
}, {
"id": 5,
"id": 206,
"pid": 2,
"name": "会员编辑",
"icon": "",
......@@ -76,7 +76,7 @@
"sort": 25,
"key_name": "member_edit"
}, {
"id": 4,
"id": 207,
"pid": 2,
"name": "添加保存",
"icon": "",
......@@ -87,7 +87,7 @@
"sort": 25,
"key_name": "member_add"
}, {
"id": 3,
"id": 208,
"pid": 2,
"name": "会员添加",
"icon": "",
......@@ -111,7 +111,7 @@
"key_name": "manager_media",
"have":1,
"son": [{
"id": 15,
"id": 1101,
"pid": 11,
"name": "媒资列表",
"icon": "",
......@@ -124,7 +124,7 @@
"is_show":1,
"have":1
},{
"id": 23,
"id": 1102,
"pid": 11,
"name": "媒资删除",
"icon": "",
......@@ -137,7 +137,7 @@
"is_show":0,
"have":0
}, {
"id": 22,
"id": 1103,
"pid": 11,
"name": "媒资添加保存",
"icon": "",
......@@ -149,7 +149,7 @@
"key_name": "media_store",
"have":0
}, {
"id": 21,
"id": 1104,
"pid": 11,
"name": "媒资修改保存",
"icon": "",
......@@ -161,7 +161,7 @@
"key_name": "media_update",
"have":0
}, {
"id": 18,
"id": 1105,
"pid": 11,
"name": "媒资编辑",
"icon": "",
......@@ -173,7 +173,7 @@
"key_name": "media_edit",
"have":0
}, {
"id": 17,
"id": 1106,
"pid": 11,
"name": "媒资添加",
"icon": "",
......@@ -184,6 +184,18 @@
"sort": 25,
"key_name": "media_create",
"have":0
}, {
"id": 1107,
"pid": 11,
"name": "媒资批处理",
"icon": "",
"link": "/media_manager/batch_media",
"slug": "media_manager.batch_media",
"description": "",
"show": 1,
"sort": 25,
"key_name": "batch_media",
"have":1
}]
},{
"id": 3,
......@@ -196,9 +208,8 @@
"show": 0,
"sort": 2,
"key_name": "media_category",
"have":0,
"son": [{
"id": 31,
"id": 301,
"pid": 3,
"name": "媒资类别列表",
"icon": "",
......@@ -207,9 +218,10 @@
"description": "",
"show": 1,
"sort": 25,
"key_name": "media_list"
"key_name": "media_list",
"have":1
},{
"id": 31,
"id": 302,
"pid": 3,
"name": "媒资类别删除",
"icon": "",
......@@ -218,9 +230,10 @@
"description": "",
"show": 0,
"sort": 25,
"key_name": "media_destroy"
"key_name": "media_destroy",
"have":1
}, {
"id": 33,
"id": 303,
"pid": 3,
"name": "媒资类别添加保存",
"icon": "",
......@@ -229,9 +242,10 @@
"description": "",
"show": 0,
"sort": 25,
"key_name": "media_store"
"key_name": "media_store",
"have":1
}, {
"id": 34,
"id": 304,
"pid": 3,
"name": "媒资类别修改保存",
"icon": "",
......@@ -240,9 +254,10 @@
"description": "",
"show": 0,
"sort": 25,
"key_name": "media_update"
"key_name": "media_update",
"have":1
}, {
"id": 35,
"id": 305,
"pid": 3,
"name": "媒资类别编辑",
"icon": "",
......@@ -251,9 +266,10 @@
"description": "",
"show": 0,
"sort": 25,
"key_name": "media_edit"
"key_name": "media_edit",
"have":1
}, {
"id": 36,
"id": 306,
"pid": 3,
"name": "媒资类别添加",
"icon": "",
......@@ -262,10 +278,11 @@
"description": "",
"show": 0,
"sort": 25,
"key_name": "media_create"
"key_name": "media_create",
"have":1
}]
},{
"id": 2,
"id": 4,
"pid": 0,
"name": "权限管理",
"icon": "&#xe623;",
......
<?php
phpinfo();
\ No newline at end of file
......@@ -5,8 +5,8 @@
font-family: "dashboard";
src:url("https://file.myfontastic.com/da58YPMQ7U5HY8Rb6UxkNf/fonts/1494891667.eot");
src:url("https://file.myfontastic.com/da58YPMQ7U5HY8Rb6UxkNf/fonts/1494891667.eot?#iefix") format("embedded-opentype"),
url("https://file.myfontastic.com/da58YPMQ7U5HY8Rb6UxkNf/fonts/1494891667.woff") format("woff"),
url("https://file.myfontastic.com/da58YPMQ7U5HY8Rb6UxkNf/fonts/1494891667.ttf") format("truetype"),
/*url("https://file.myfontastic.com/da58YPMQ7U5HY8Rb6UxkNf/fonts/1494891667.woff") format("woff"),*/
/*url("https://file.myfontastic.com/da58YPMQ7U5HY8Rb6UxkNf/fonts/1494891667.ttf") format("truetype"),*/
url("https://file.myfontastic.com/da58YPMQ7U5HY8Rb6UxkNf/fonts/1494891667.svg#1494891667") format("svg");
font-weight: normal;
font-style: normal;
......
......@@ -25,7 +25,9 @@
</div>
<ul class="nav-menu list-unstyled d-flex flex-md-row align-items-md-center">
<!-- Expand-->
{{--<li class="nav-item d-flex align-items-center full_scr_exp"><a class="nav-link" href="#"><img src=" {{ asset('xadmin/img/expand.png')}}" ')}}onclick="toggleFullScreen(document.body)" class="img-fluid" alt=""></a></li>--}}
@if(\Illuminate\Support\Facades\Request::Input("category_id"))
<li class="nav-item d-flex"><a class="nav-link" href="javascript:;">当前店铺为:{{\Illuminate\Support\Facades\Request::all()['catetory_name']}}</a></li>
@endif
<!-- Search-->
{{--<li class="nav-item d-flex align-items-center"><a id="search" class="nav-link" href="#"><i class="icon-search"></i></a></li>
<li class="nav-item d-flex align-items-center">
......@@ -256,6 +258,7 @@
</header>
<script>
function logout() {
$.removeCookie('media_category_id')
$.removeCookie('appid')
......
<!DOCTYPE html>
<html>
@include('admin.common.commonMedia')
<link rel="stylesheet" href="{{asset('xadmin/extra/date/datepicker.css')}}">
<script src="{{ asset('xadmin/extra/date/datepicker.js')}}"></script>
<script src="{{ asset('xadmin/extra/date/datepicker.zh-CN.js')}}"></script>
<body>
<!--====================================================
MAIN NAVBAR
======================================================-->
@include('admin.common.header')
<!--====================================================
PAGE CONTENT
======================================================-->
<div class="page-content d-flex align-items-stretch">
<!--***** SIDE NAVBAR *****-->
@include('admin.common.left')
<div class="content-inner chart-cont">
<div class="card form">
<div class="card-header">
<h3><i class="fa fa-user-circle"></i> 批处理</h3>
</div>
<br>
<!--***** CONTENT *****-->
<div class="row ml20 batch-list">
<form>
{{ method_field('POST')}}
<input type="hidden" name="_token" value="{{csrf_token()}}"/>
<div class="item-name">批量导出预览视频连接</div>
<div class="form-group">
<input type="file" class="btn btn-info" id="uploadFile" name="uploadFile" accept=".xls,.xlsx">
</div>
<button class="btn btn-info batch-media" type="button" id="batch-media" disabled onclick="test()" >导出</button>
</form>
<div class="muban">
<span class="btn btn-info btn-small"><a href="{{asset('/web/media_manager/export_batch_media?type=muban')}}">模板文件</a></span>
</div>
<div class="notice">
注意事项:
<ul>
<li>导入数据最多不超过200条,超出部分自动被过滤掉!</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!--Global Javascript -->
@include('admin.common.foot')
<!--Core Javascript -->
<script src="{{ asset('xadmin/extra/toast/js/toast.js')}}"></script>
<style>
.form{
min-height: 734px;
}
.batch-list{
font-size: 18px;
font-weight: 400;
}
.batch-media{
margin-top: 10px;
}
.muban{
padding-top: 30px;
padding-left: 10px;
}
.muban a{
color: #eee;
}
.notice{
padding-left: 20%;
color: #ff5f75;
font-size: 14px;
}
</style>
<script>
/**
* 点击上传文件,触发input type="file"
*/
$("#uploadFile").change(function () {
$("#batch-media").removeAttr("disabled");
var fileInput = $('#uploadFile').get(0).files[0];
if (fileInput === undefined){
$("#batch-media").attr("disabled",true);
}
})
/**
* 清空页面属性
*/
function test() {
var formData = new FormData();
formData.append("uploadFile",$("#uploadFile")[0].files[0]);
$.ajax({
url:'/web/media_manager/import_batch_media', /*接口域名地址*/
type:'post',
data: formData,
processData: false,
contentType: false,
success:function(res){
if(res.code === 200){
$('body').toast({
position: 'fixed',
content: '导入成功,数据处理中......',
duration: 3000,
top: '50%'
});
window.location.href = "/web/media_manager/download/"+res.data
}else {
$('body').toast({
position: 'fixed',
content: res.msg,
duration: 3000,
top: '50%'
});
}
$("#batch-media").attr("disabled",true);
$("#uploadFile").val("")
}
})
// $('body').toast({
// position: 'fixed',
// content: '导入成功,数据处理中......',
// duration: 3000,
// top: '50%'
// });
// setTimeout(function () {
// $("#batch-media").attr("disabled",true);
// $("#uploadFile").val("")
// }, 2000)
}
</script>
</body>
</html>
\ No newline at end of file
......@@ -54,15 +54,15 @@
<div class="col-md-12">
<div class="form-group">
<label for="name">appID</label>
<input type="text" class="form-control" name="media_category_id" value="{{$mediaCatg['media_category_id']}}" id="media_category_id" placeholder="appID" disabled>
<label for="media_category_id">appID</label>
<input type="text" class="form-control" name="media_category_id" value="{{$mediaCatg['media_category_id']}}" id="media_category_id" placeholder="appID" readonly>
</div>
</div>
<div class="col-md-12">
<div class="form-group">
<label for="is_dynamic">启用:</label>
<label for="status">启用:</label>
<input type="radio" id="status" name="status" @if($mediaCatg['status']=='0') checked @endif value="0">
<input type="radio" id="status" name="status" @if($mediaCatg['status']=='1') checked @endif value="1">
</div>
......@@ -124,7 +124,6 @@
fetch_response('POST', "/web/media_category/{{$mediaCatg['id']}}", formdata).then(function (res) {
if (res.code == 200) {
console.log('dsfsfsd',res)
$('body').toast({
position: 'fixed',
content: res.msg,
......
......@@ -2,13 +2,7 @@
<html>
@include('admin.common.commonMedia')
<link rel="stylesheet" href="{{ asset('xadmin/extra/datepicker/css/daterangepicker.css')}}">
<link rel="stylesheet" href="{{ asset('xadmin/extra/datepicker/css/htmleaf-demo.css')}}">
<script src="{{ asset('xadmin/extra/datepicker/js/moment.js')}}"></script>
<script src="{{ asset('xadmin/extra/datepicker/js/daterangepicker.js')}}"></script>
<body>
<!--====================================================
......@@ -201,7 +195,7 @@
if(title == '停用'){
//发异步把用户状态进行更改
opts.append('id',id);
opts.append('status',0);
opts.append('status',1);
fetch_response('POST','/web/media_category/disable',opts).then(function(res){
if(res.code == 200){
$(obj).attr('title','启用')
......@@ -215,7 +209,7 @@
top: '50%'
});
setTimeout(function () {
window.location.href = '/web/member';
window.location.href = '/web/media_category';
}, 2000)
......@@ -230,7 +224,7 @@
});
}else{
opts.append('id',id);
opts.append('status',1);
opts.append('status',0);
fetch_response('POST','/web/media_category/disable',opts).then(function(res){
if(res.code == 200){
$(obj).attr('title','停用')
......
......@@ -3,12 +3,7 @@
@include('admin.common.commonMedia')
<link rel="stylesheet" href="{{ asset('xadmin/extra/datepicker/css/daterangepicker.css')}}">
<link rel="stylesheet" href="{{ asset('xadmin/extra/datepicker/css/htmleaf-demo.css')}}">
<script src="{{ asset('xadmin/extra/datepicker/js/moment.js')}}"></script>
<script src="{{ asset('xadmin/extra/datepicker/js/daterangepicker.js')}}"></script>
{{--<script src="{{ asset('xadmin/extra/datepicker/js/moment.js')}}"></script>--}}
<body>
<!--====================================================
......@@ -280,35 +275,6 @@
});
}
updateConfig();
function updateConfig() {
var options = {};
options.locale = {
// direction: $('#rtl').is(':checked') ? 'rtl' : 'ltr',
// format: 'MM/DD/YYYY HH:mm',
format: 'YYYY/MM/DD',
separator: ' - ',
applyLabel: '确定',
cancelLabel: '取消',
fromLabel: 'From',
toLabel: 'To',
customRangeLabel: 'Custom',
daysOfWeek: ['日', '一', '二', '三', '四', '五','六'],
monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
firstDay: 1,
autoApply:false,
};
$('#endDate').daterangepicker(options, function(start, end) {
console.log('New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') );
});
}
</script>
......
No preview for this file type
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