like-shop/application/admin/logic/FileNewLogic.php
2024-01-16 13:06:20 +08:00

242 lines
8.0 KiB
PHP

<?php
namespace app\admin\logic;
use app\common\model\FileCate;
use app\common\server\UrlServer;
use think\Db;
class FileNewLogic
{
public static function lists($get)
{
$field = 'id,name,uri';
$where = [
'del' => 0,
'partner_id' => $get['partner_id'],
'type' => FileCate::getTypeNumber($get['type']),
'cate_id' => $get['cate_id']
];
$lists = Db::name('file')->field($field)->where($where)->page($get['page_no'], $get['page_size'])->select();
$count = Db::name('file')->where($where)->count();
foreach($lists as &$item) {
$item['uri'] = UrlServer::getFileUrl($item['uri']);
}
return ['lists'=>$lists, 'count'=>$count];
}
public static function pagelists($get)
{
$field = 'id,name,uri';
$where = [
['del', '=', 0],
['partner_id', '=', $get['partner_id']],
['type', '=', FileCate::getTypeNumber($get['type'])]
];
if($get['cate_id']) {
// 查找子分类,属于当前分类或当前分类下的子分类的文件都显示出来
$child = self::getChildren($get['cate_id']);
$child[] = intval($get['cate_id']);
$where[] = ['cate_id', 'in', $child];
}
$lists = Db::name('file')->field($field)->where($where)->page($get['page_no'], $get['page_size'])->select();
$count = Db::name('file')->where($where)->count();
foreach($lists as &$item) {
$item['uri'] = UrlServer::getFileUrl($item['uri']);
}
return ['lists'=>$lists, 'count'=>$count, 'page_no'=>$get['page_no'], 'page_size'=>$get['page_size']];
}
public static function addCate($post)
{
// 同级别不允许有同名分类
$fileCate = FileCate::where([
'del' => 0,
'name' => $post['name'],
'pid' => $post['pid']
])->select()->toArray();
if($fileCate) {
return ['flag'=>false, 'msg'=>'同级别下已存在同名分类'];
}
// 分类不允许超过3级
if(!empty($post['pid'])) {
$level = FileCate::where(['id'=>$post['pid']])->value('level');
if($level > 2) {
return ['flag'=>false, 'msg'=>'分类不允许超过3级'];
}
$level = $level + 1;
}else{
$post['pid'] = 0;
$level = 1;
}
switch($post['type']) {
case 'video':
$post['type'] = 2;
break;
}
$post['level'] = $level;
$post['create_time'] = time();
$result = FileCate::create($post);
if($result) {
return ['flag'=>true, 'msg'=>'添加成功'];
}else{
return ['flag'=>false, 'msg'=>'添加失败'];
}
}
public static function editCate($post)
{
if(empty($post['pid'])) {
$post['pid'] = 0;
$pidLevel = 1;
}
// 同级分类下不允许重名
$pidChildren = FileCate::where([
['pid', '=', $post['pid']],
['del', '=', 0],
['id', '<>', $post['id']],
['name', '=', $post['name']]
])->select()->toArray();
if($pidChildren) {
return ['flag'=>false, 'msg'=>'同级下已存在该名称的分类'];
}
// 上级不能是自身或自己的子分类
$children = self::getChildren($post['id']);
if($post['pid'] == $post['id'] || in_array($post['pid'], $children)) {
return ['flag'=>false, 'msg'=>'上级分类不能为自身或自己的子分类'];
}
// 分类层级不能超过3级
$level = self::calcLevel($post['id']);
$pidLevel = FileCate::where('id', $post['pid'])->value('level');
if($level + $pidLevel > 3) {
return ['flag'=>false, 'msg'=>'分类层级不允许超过3级'];
}
FileCate::where('id', $post['id'])->update([
'name'=>trim($post['name']),
'sort' => $post['sort'],
'pid' => $post['pid'],
'update_time' => time()
]);
self::updateLevel($post['id']);
return ['flag'=>true, 'msg'=>'编辑成功'];
}
public static function delCate($post)
{
// 分类下还有子分类不允许删除
$children = FileCate::where([
'del' => 0,
'pid' => $post['id']
])->select()->toArray();
if($children) {
return ['flag'=>false, 'msg'=>'该分类下还有子分类不允许删除'];
}
// 有文件正在使用该分类不允许删除
$files = Db::name('file')->where(['del'=>0, 'cate_id'=>$post['id']])->select();
if($files) {
return ['flag'=>false, 'msg'=>'有文件正在使用该分类不允许删除'];
}
FileCate::where(['id'=>$post['id']])->update(['del'=>1, 'update_time'=>time()]);
return ['flag'=>true, 'msg'=>'删除成功'];
}
public static function getChildren($id)
{
$child = [];
$firstChild = FileCate::where(['del'=>0, 'pid'=>$id])->column('id');
$child = $firstChild;
foreach($firstChild as $firstId) {
$secordChild = FileCate::where(['del'=>0, 'pid'=>$firstId])->column('id');
$child = array_merge($child, $secordChild);
}
return $child;
}
public static function calcLevel($id)
{
$level = 1;
$two_ids = FileCate::where(['pid' => $id, 'del' => 0])->column('id');
if ($two_ids) {
$level = 2;
$three_ids = FileCate::where([
['del', '=', 0],
['pid', 'in', $two_ids]
])->column('id');
if ($three_ids) $level = 3;
}
return $level;
}
/**
* 更新自己及后代分类的level
*/
public static function updateLevel($id)
{
$me = FileCate::find($id);
if($me['pid'] == 0) { // 上级为顶级分类
FileCate::update([
'id' => $id,
'level' => 1,
'update_time' => time()
]);
$two_ids = FileCate::where([
'pid' => $id,
'del' => 0
])->column('id');
if($two_ids) {
FileCate::where('id', 'in', $two_ids)->update([
'level' => 2,
'update_time' => time()
]);
$three_ids = FileCate::where([
['pid', 'in', $two_ids],
['del', '=', 0]
])->column('id');
if($three_ids) {
FileCate::where('id', 'in', $three_ids)->update([
'level' => 3,
'update_time' => time()
]);
}
}
}else{
$parent = FileCate::find($me['pid']);
if($parent['level'] == 1) {
FileCate::update([
'id' => $id,
'level' => 2,
'update_time' => time()
]);
$three_ids = FileCate::where([
'pid' => $id,
'del' => 0
])->column('id');
if($three_ids) {
FileCate::where('id', 'in', $three_ids)->update([
'level' => 3,
'update_time' => time()
]);
}
}else if($parent['level'] == 2){
FileCate::update([
'id' => $id,
'level' => 3,
'update_time' => time()
]);
}
}
}
public static function delFile($post)
{
try{
$result = Db::name('file')->where('id', 'in', $post['ids'])->update([
'del' => 1
]);
return true;
}catch(\Exception $e) {
return false;
}
}
}