Browse Source

mid service 资源分享

master
unknown 1 year ago
parent
commit
ce9bcc8f48
  1. 52
      app/common.php
  2. 10
      app/controller/ResourceController.php
  3. 2
      app/middleware/LoginMiddleware.php
  4. 31
      app/model/Share.php
  5. 9
      app/model/ShareItem.php
  6. 2
      app/service/ResourceDirService.php
  7. 45
      app/service/ResourceService.php
  8. 22
      app/service/ShareItemService.php
  9. 92
      app/service/ShareService.php
  10. 5
      route/app.php

52
app/common.php

@ -1,5 +1,8 @@
<?php
// 应用公共文件
use think\facade\Request;
/**
* 统一返回json数据
* @param $code
@ -26,7 +29,13 @@ function dataReturn($code, $msg = 'success', $data = [])
return ['code' => $code, 'data' => $data, 'msg' => $msg];
}
// 递归函数来查找父级路径
/**
* 递归查找父级路径
* @param $obj 递归的对象
* @param string $id
* @param array $path 路径数组
* @return array
*/
function findParent($obj, $id, &$path)
{
// 查找当前文件夹的信息
@ -42,3 +51,44 @@ function findParent($obj, $id, &$path)
}
}
}
/**
* 获得分享信息
* @return array
*/
function getResourceShareInfo()
{
$code = uniqid();
$share_link = url('share/index', ['id' => $code])->domain(true);
$password = str_pad(rand(0, 9999), 4, '0', STR_PAD_LEFT);
return [
'code' => $code,
'share_link' => (string)$share_link,
'password' => $password,
];
}
/**
* 将天数转换为毫秒数
*
* @param int $days 天数
* @return int 毫秒数
*/
function daysToMilliseconds($days)
{
// 1天 = 24小时,1小时 = 60分钟,1分钟 = 60秒,1秒 = 1000毫秒
return $days * 24 * 60 * 60 * 1000;
}
/**
* 将天数转换为秒数
*
* @param int $days 天数
* @return int 毫秒数
*/
function daysToSeconds($days)
{
// 1天 = 24小时,1小时 = 60分钟,1分钟 = 60秒,1秒 = 1000毫秒
return $days * 24 * 60 * 60;
}

10
app/controller/ResourceController.php

@ -4,6 +4,7 @@ namespace app\controller;
use app\model\Resource;
use app\service\ResourceService;
use app\service\ShareService;
use app\validate\ResourceValidate;
use think\facade\Db;
use think\facade\Lang;
@ -97,19 +98,22 @@ class ResourceController
/**
* 资源 分享
*/
public function share(Resource $resource, Request $request)
public function share(Request $request)
{
try {
validate(ResourceValidate::class)->scene('share')->check($request->param());
} catch (ValidateException $e) {
return jsonReturn(-1, $e->getError());
}
Db::startTrans();
try {
$resource->addResourceShare($request->param(), $request->user_id);
return jsonReturn(0, Lang::get('成功'));
$res = (new ShareService())->addResourceShare($request->param(), $request->user_id);
Db::commit();
} catch (\Exception $e) {
Db::rollback();
return jsonReturn(-5, $e->getMessage());
}
return json($res);
}
/**

2
app/middleware/LoginMiddleware.php

@ -21,7 +21,7 @@ class LoginMiddleware
*/
public function handle($request, \Closure $next)
{
$userId = 2;
$userId = 1;
$request->user_id = $userId;
// 继续处理请求

31
app/model/Share.php

@ -6,4 +6,35 @@ use app\exception\ModelException;
class Share extends Model
{
const EXPIRE_TYPE_MAP = [
1 => 7,
2 => 30,
3 => 365 * 30, //永久有效
];
public function user()
{
return $this->belongsTo(User::class);
}
public function shareItem()
{
return $this->hasMany(shareItem::class, 'share_id');
}
/**
* @param $type 类型
* 根据分享的type 生成不同的操作对象 (资源/内容)
*/
public static function getObjByType($type)
{
switch ($type) {
case 1:
$obj = new Resource;
break;
case 2:
$obj = new Content;
}
return $obj;
}
}

9
app/model/ShareItem.php

@ -0,0 +1,9 @@
<?php
namespace app\model;
use app\exception\ModelException;
class ShareItem extends Model
{
}

2
app/service/ResourceDirService.php

@ -46,7 +46,7 @@ class ResourceDirService extends Service
* @param $resource_dir_id 移入/移出的文件夹id
* @param $resource_dir_id method + 移入 - 移除
* @return array
* 将一资源移入或者移出文件夹 文件夹修改资源数量 资源大小
* 将一普通资源移入或者移出文件夹 文件夹修改资源数量 资源大小
*/
public function changeDirSizeAndCount($resource, $resource_dir_id, $method = '+')
{

45
app/service/ResourceService.php

@ -13,7 +13,7 @@ class ResourceService extends Service
/**
* @param $param 前端提交的参数
* @return array
* 添加资源
* 添加普通资源
*/
public function addResource($param): array
{
@ -40,7 +40,7 @@ class ResourceService extends Service
/**
* @param $resource 资源对象
* @return array
* 添加资源后的的操作
* 添加普通资源后的的操作
*/
public function afterAddResource($resource)
{
@ -82,8 +82,8 @@ class ResourceService extends Service
/**
* @param $ids 需要复制的资源ids
* @param $to_id 文件夹id
* @param $ids 需要复制的普通资源ids
* @param $to_id 文件夹资源id
* @return array
* 移动操作
*/
@ -93,10 +93,10 @@ class ResourceService extends Service
//复制需要 需要复制里面所有的素材
$resource = Resource::with(['files', 'accredit_files'])->find($resource_id);
//1.创建一个新资源
//1.创建一个新普通资源
$this->copyResource($resource->toArray(), $to_id);
//2 更新 新的文件夹 以及所有父文件夹 大小和数量
//2 更新 新的文件夹资源 以及所有父文件夹资源 大小和数量
(new ResourceDirService())->changeDirSizeAndCount($resource, $to_id, '+');
}
return dataReturn($this->sucCode, $this->copyMsg);
@ -139,7 +139,7 @@ class ResourceService extends Service
/**
* @param $resource 资源对象
* @return array
* 获取一个资源的大小(所有素材大小的总和) 和包含的素材数量
* 通过素材 获取一个普通资源的大小(所有素材大小的总和) 和包含的素材数量
*/
public function getFileSizeAndCount($resource)
{
@ -158,20 +158,25 @@ class ResourceService extends Service
}
/**
* @param $param 提交参数
* @param $user_id 用户id
*
* @return array
*通过字段 获得一个资源大小文件数量
*/
public function addResourceShare($param, $user_id)
{
$param['user_id'] = $user_id;
$param['code'] = $this->getResourceShareInfo(); //获取访问链接和密码
dd($param);
$resource = Share::create($param);
}
public function getResourceShareInfo()
public function getResourceSizeAndCount($resource)
{
switch ($resource->type) {
case 1:
//普通资源
$count = $resource->file_count;
$size = $resource->file_size;
break;
case 2;
//文件夹资源
$count = $resource->resource_count;
$size = $resource->resource_size;
break;
}
return [
'count' => $count,
'size' => $size,
];
}
}

22
app/service/ShareItemService.php

@ -0,0 +1,22 @@
<?php
namespace app\service;
class ShareItemService extends Service
{
/**
* @param $share 分享对象
* @param $ids 分享id数组
* @param $type 分享类型 1 资源 2 内容
* 添加 授权素材
*/
public function addShareItem($share, $ids, $type)
{
foreach ($ids as $id) {
$share_item['type'] = $type;
$share_item['target_id'] = $id;
$share_item_array[] = $share_item;
}
$share->shareItem()->saveAll($share_item_array);
}
}

92
app/service/ShareService.php

@ -0,0 +1,92 @@
<?php
namespace app\service;
use app\exception\ModelException;
use app\model\Resource;
use app\model\ResourceDir;
use app\model\Share;
class ShareService extends Service
{
/**
* @param $param 提交参数
* @param $user_id 用户id
*
* @return array
*/
public function addResourceShare($param, $user_id)
{
try {
$resource_share_info = (getResourceShareInfo());
$param['code'] = $resource_share_info['code'];
$param['password'] = $resource_share_info['password'];
$param['share_link'] = $resource_share_info['share_link'];
$expire_time_info = $this->getExpireTimeInfoByExpireType($param['expire_type']);
$param['expire_time'] = $expire_time_info['milliseconds'];
$param['share_start_time'] = date('Y-m-d H:i:s');
$param['share_end_time'] = $this->getShareEndTime($param['share_start_time'], $expire_time_info['seconds']);
$param['user_id'] = $user_id;
$param['size'] = $this->getShareSize($param['ids'], $param['type']);
$share = Share::create($param);
//插入分享详情表
(new ShareItemService())->addShareItem($share, $param['ids'], $param['type']);
//这里关联关系无法预加载 这样写可以实现 但是感觉怪怪的。。
$share->user = $share->user;
} catch (\Exception $e) {
throw new ModelException($e->getMessage());
}
return dataReturn($this->sucCode, $this->addMsg, $share);
}
/**
* @param $expire_type 过期时间类型
* 通过过期时间类型 获取过期时间
*/
public function getExpireTimeInfoByExpireType($expire_type)
{
$expire_type_map = Share::EXPIRE_TYPE_MAP;
return [
'milliseconds' => daysToMilliseconds($expire_type_map[$expire_type]),
'seconds' => daysToSeconds($expire_type_map[$expire_type]),
];
}
/**
* @param $share_start_time 分享开始时间
* @param $expire_time_seconds 分享过起秒数
* 计算分享结束时间
*/
public function getShareEndTime($share_start_time, $expire_time_seconds)
{
return date('Y-m-d H:i:s', strtotime($share_start_time) + $expire_time_seconds);
}
/**
* @param $ids 分享ids
* @param $type 分享类型1 资源 2 内容
*
* 获取分享的大小
*/
public function getShareSize($ids, $type)
{
switch ($type) {
case 1:
//分享的是资源
$resources = Resource::whereIn('id', $ids)->select();
$size = 0;
foreach ($resources as $resource) {
$size += (new ResourceService())->getResourceSizeAndCount($resource)['size'];
}
break;
case 2:
//分享的是内容
}
return $size;
}
}

5
route/app.php

@ -27,6 +27,11 @@ Route::group('resource', function () {
Route::post('/copy_to', 'copyTo');
})->prefix('resource/')->middleware('login');
//资源
Route::group('share', function () {
Route::get('/index', 'index');
})->prefix('share/');
//文件夹
Route::group('resourceDir', function () {
Route::get('/index/[:id]', 'index');

Loading…
Cancel
Save