feat:完成产品列表模块、公共Tool类排序换位处理方法逻辑修改
This commit is contained in:
parent
60692fa902
commit
3e6631044d
225
app/admin/controller/Works/Works.php
Normal file
225
app/admin/controller/Works/Works.php
Normal file
@ -0,0 +1,225 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\controller\Works;
|
||||
|
||||
use app\BaseController;
|
||||
use app\common\model\Works\Works as ModelWorks;
|
||||
use app\Request;
|
||||
use think\Validate;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Filesystem;
|
||||
use app\common\arw\adjfut\src\Excel;
|
||||
use app\common\arw\adjfut\src\UploadFile;
|
||||
use app\common\exception\Tool;
|
||||
use think\facade\Db;
|
||||
use think\facade\Env;
|
||||
|
||||
|
||||
class Works extends BaseController
|
||||
{
|
||||
/**
|
||||
* 获取作品列表接口
|
||||
*
|
||||
* @param Request request
|
||||
* @return array
|
||||
* @date 2023-04-18
|
||||
* @author xjh
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function getWorksList(Request $request): array
|
||||
{
|
||||
$query = ModelWorks::where(
|
||||
Tool::getOptionalQuery(
|
||||
['works.works_name', 'LIKE'],
|
||||
['works.works_author', 'LIKE'],
|
||||
['works.works_type_guid'],
|
||||
['works.classes_guid'],
|
||||
)
|
||||
)->field([
|
||||
'works.works_id',
|
||||
'works.works_guid',
|
||||
'works.works_img',
|
||||
'works.works_name',
|
||||
'works.works_author',
|
||||
'works.classes_guid',
|
||||
'works.works_intro',
|
||||
'works.works_likes_count',
|
||||
'works.works_order',
|
||||
'works.works_type_guid',
|
||||
'works_type.works_type_name',
|
||||
'classes.classes_name',
|
||||
])->leftJoin('works_type', 'works_type.works_type_guid = works.works_type_guid')
|
||||
->leftJoin('classes', 'classes.classes_guid = works.classes_guid')
|
||||
->order('works_order', 'asc');
|
||||
|
||||
return msg("获取作品列表成功!", $query);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑作品接口
|
||||
*
|
||||
* @param Request request
|
||||
* @return array
|
||||
* @date 2023-04-18
|
||||
* @author xjh
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function editWorks(Request $request): array
|
||||
{
|
||||
$params = $request->param();
|
||||
$this->validate($params, [
|
||||
'works_img|作品图片' => 'require',
|
||||
'works_guid|作品guid' => 'require',
|
||||
'works_intro|作品介绍' => 'require',
|
||||
'works_likes_count|作品点赞数' => 'require',
|
||||
'works_order|排序' => 'require',
|
||||
'works_type_guid|作品类型guid' => 'require',
|
||||
'works_name|作品名称' => 'require',
|
||||
'works_author|作品作者' => 'require',
|
||||
'classes_guid|班型guid' => 'require',
|
||||
]);
|
||||
$model = ModelWorks::where('works_guid', $params['works_guid'])->find();
|
||||
if (!$model) throwErrorMsg("该作品不存在", 1);
|
||||
$model->allowField([
|
||||
'works_update_user_guid',
|
||||
'works_img',
|
||||
'works_intro',
|
||||
'works_likes_count',
|
||||
'works_type_guid',
|
||||
'works_order',
|
||||
'works_name',
|
||||
'works_author',
|
||||
'classes_guid',
|
||||
])->save($params);
|
||||
return msg('编辑成功!');
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加作品接口
|
||||
*
|
||||
* @param Request request
|
||||
* @return array
|
||||
* @date 2023-04-18
|
||||
* @author xjh
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function addWorks(Request $request): array
|
||||
{
|
||||
$params = $request->param();
|
||||
$this->validate($params, [
|
||||
'works_img|作品图片' => 'require',
|
||||
'works_intro|作品介绍' => 'require',
|
||||
'works_likes_count|作品点赞数' => 'require',
|
||||
'works_order|排序' => 'require',
|
||||
'works_type_guid|作品类型guid' => 'require',
|
||||
'works_name|作品名称' => 'require',
|
||||
'works_author|作品作者' => 'require',
|
||||
'classes_guid|班型guid' => 'require',
|
||||
]);
|
||||
ModelWorks::create($params, [
|
||||
'works_guid',
|
||||
'works_create_user_guid',
|
||||
'works_update_user_guid',
|
||||
'works_img',
|
||||
'works_intro',
|
||||
'works_likes_count',
|
||||
'works_type_guid',
|
||||
'works_order',
|
||||
'classes_guid',
|
||||
'works_author',
|
||||
'works_name',
|
||||
]);
|
||||
return msg('添加成功!');
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除作品接口
|
||||
*
|
||||
* @param Request request
|
||||
* @return array
|
||||
* @date 2023-04-18
|
||||
* @author xjh
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function deleteWorks(Request $request): array
|
||||
{
|
||||
$params = $request->param();
|
||||
$this->validate($params, [
|
||||
'works_guid' => 'require',
|
||||
]);
|
||||
$works = ModelWorks::where([
|
||||
'works_guid' => explode(',', $params['works_guid'])
|
||||
])->select();
|
||||
$works->delete();
|
||||
return msg('删除成功!');
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出Excel接口
|
||||
*
|
||||
* @param Request request
|
||||
* @return array
|
||||
* @date 2023-04-18
|
||||
* @author xjh
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function exportExcel(Request $request): void
|
||||
{
|
||||
$params = $request->param();
|
||||
$con = [
|
||||
['works_type_delete_time', 'NULL', null],
|
||||
['classes_delete_time', 'NULL', null],
|
||||
];
|
||||
if (isset($params['works_guids']) && $params['works_guids']) {
|
||||
$con['works.works_guid'] = explode(',', $params['works_guids']);
|
||||
}
|
||||
$select = ModelWorks::where($con)
|
||||
->leftJoin('works_type', 'works_type.works_type_guid = works.works_type_guid')
|
||||
->leftJoin('classes', 'classes.classes_guid = works.classes_guid')
|
||||
->order('works_order', 'asc')
|
||||
->select()
|
||||
->toArray();
|
||||
|
||||
ModelWorks::exportExcel($select);
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载导入模板接口
|
||||
*
|
||||
* @param Request request
|
||||
* @return array
|
||||
* @date 2023-04-18
|
||||
* @author xjh
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function downloadTemplate(Request $request)
|
||||
{
|
||||
$data = [
|
||||
array_values(ModelWorks::IMPORTEXCELFIELD),
|
||||
['素描', '龙与虎', '张三', '色彩班', "0", "0"]
|
||||
];
|
||||
$excel = (new Excel())->exporTsheet($data);
|
||||
$excel->save('作品导入模板.xlsx');
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入excel接口
|
||||
*
|
||||
* @param Request request
|
||||
* @return array
|
||||
* @date 2023-04-18
|
||||
* @author xjh
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function importExcel(Request $request)
|
||||
{
|
||||
$file = new UploadFile('uploads', 'fileExt:xlsx');
|
||||
$file->putFile('works');
|
||||
|
||||
$msg = ModelWorks::importExcel($file);
|
||||
return [
|
||||
'code' => 0,
|
||||
'msg' => $msg
|
||||
];
|
||||
}
|
||||
}
|
@ -179,7 +179,7 @@ class WorksType extends BaseController
|
||||
* @author xjh
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function exportExcel(Request $request)
|
||||
public function exportExcel(Request $request):void
|
||||
{
|
||||
$params = $request->param();
|
||||
$con = [];
|
||||
|
@ -365,17 +365,20 @@ class Tool
|
||||
$guld_field = $model->db()->getPk();
|
||||
//排序字段名
|
||||
$order_field_name = $model->order_field;
|
||||
//当前数据原排序号
|
||||
//当前数据原信息
|
||||
$original_oreder_find = $model->where($guld_field, $guid)->find();
|
||||
if (!$original_oreder_find) throwErrorMsg('Tool::sortEditProc() : 找不到该数据原排序号', 444);
|
||||
//查找当前数据所想更换的新排序号是否已有数据占用
|
||||
//已被占用,则将它们的排序号互换
|
||||
if ($model->where($order_field_name, $order)->where($extra_wheres)->find()) {
|
||||
Db::name($table_name)->where($order_field_name, $order)->where($extra_wheres)->update([
|
||||
$order_field_name => $original_oreder_find[$order_field_name],
|
||||
$model->parent_guid_field => $original_oreder_find[$model->parent_guid_field],
|
||||
$model->ancestors_guid_field => $original_oreder_find[$model->ancestors_guid_field],
|
||||
]);
|
||||
$update_data = [$order_field_name => $original_oreder_find[$order_field_name]];
|
||||
if (isset($model->parent_guid_field)) {
|
||||
$update_data[$model->parent_guid_field] = $original_oreder_find[$model->parent_guid_field];
|
||||
}
|
||||
if (isset($model->ancestors_guid_field)) {
|
||||
$update_data[$model->ancestors_guid_field] = $original_oreder_find[$model->ancestors_guid_field];
|
||||
}
|
||||
Db::name($table_name)->where($order_field_name, $order)->where($extra_wheres)->update($update_data);
|
||||
}
|
||||
}
|
||||
|
||||
|
180
app/common/model/Works/Works.php
Normal file
180
app/common/model/Works/Works.php
Normal file
@ -0,0 +1,180 @@
|
||||
<?php
|
||||
|
||||
namespace app\common\model\Works;
|
||||
|
||||
use app\common\arw\adjfut\src\Validate;
|
||||
use app\BaseModel;
|
||||
use think\model\concern\SoftDelete;
|
||||
use app\common\arw\adjfut\src\Excel;
|
||||
use app\Request;
|
||||
use app\common\exception\Tool;
|
||||
use think\facade\Db;
|
||||
use app\common\model\Works\WorksType as ModelWorksType;
|
||||
use app\common\model\Enrol\Classes as ModelClasses;
|
||||
|
||||
class Works extends BaseModel
|
||||
{
|
||||
use SoftDelete;
|
||||
// 删除字段
|
||||
protected $deleteTime = 'works_delete_time';
|
||||
// 设置主键名
|
||||
protected $pk = 'works_guid';
|
||||
// 设置废弃字段
|
||||
protected $disuse = [];
|
||||
// 设置字段信息
|
||||
protected $schema = [
|
||||
"works_id" => "int",
|
||||
"works_guid" => "string",
|
||||
"works_name" => "string",
|
||||
"works_author" => "string",
|
||||
"classes_guid" => "string",
|
||||
"works_img" => "string",
|
||||
"works_intro" => "string",
|
||||
"works_type_guid" => "string",
|
||||
"works_likes_count" => "int",
|
||||
"works_order" => "int",
|
||||
"works_create_time" => "datetime",
|
||||
"works_create_user_guid" => "string",
|
||||
"works_update_time" => "datetime",
|
||||
"works_update_user_guid" => "string",
|
||||
"works_delete_time" => "datetime",
|
||||
"works_delete_user_guid" => "string",
|
||||
];
|
||||
// 设置json类型字段
|
||||
protected $json = [''];
|
||||
// 开启自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = 'datetime';
|
||||
// 创建时间
|
||||
protected $createTime = 'works_create_time';
|
||||
// 修改时间
|
||||
protected $updateTime = 'works_update_time';
|
||||
|
||||
//排序字段
|
||||
public $order_field = 'works_order';
|
||||
|
||||
// excel导出模板表头
|
||||
public const EXPORTEXCELFIELD = [
|
||||
'works_type_name' => '作品类型',
|
||||
'works_img' => '作品图片',
|
||||
'works_name' => '作品名称',
|
||||
'works_author' => '作品作者',
|
||||
'classes_name' => '班型名称',
|
||||
'works_likes_count' => '点赞数',
|
||||
];
|
||||
// excel导入/下载模板表头
|
||||
public const IMPORTEXCELFIELD = [
|
||||
'works_type_name' => '*作品类型',
|
||||
'works_name' => '*作品名称',
|
||||
'works_author' => '*作品作者',
|
||||
'classes_name' => '*班型名称',
|
||||
'works_likes_count' => '作品点赞数',
|
||||
'works_order' => '排序',
|
||||
];
|
||||
|
||||
/**
|
||||
* 新增前
|
||||
*/
|
||||
public static function onBeforeInsert(self $model): void
|
||||
{
|
||||
Tool::sortInsertProc(self::class, $model->works_order);
|
||||
$model->completeCreateField();
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新前
|
||||
*/
|
||||
public static function onBeforeUpdate(self $model): void
|
||||
{
|
||||
Tool::sortEditProc(self::class, $model->works_guid, $model->works_order);
|
||||
$model->completeUpdateField();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除前
|
||||
*/
|
||||
public static function onBeforeDelete(self $model): void
|
||||
{
|
||||
Tool::sortDeleteProc(self::class, $model->works_guid);
|
||||
$model->completeDeleteField();
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出Excel
|
||||
*
|
||||
* @param array $select导出的数据集合
|
||||
*/
|
||||
public static function exportExcel(array $select): void
|
||||
{
|
||||
$data = [array_values(self::EXPORTEXCELFIELD)];
|
||||
foreach ($select as $key => $val) {
|
||||
foreach (array_keys(self::EXPORTEXCELFIELD) as $field_name) {
|
||||
$value = $val[$field_name];
|
||||
if ($field_name == 'works_img') $value = Excel::ExportImgFiled($value);
|
||||
$data[$key + 1][$field_name] = $value;
|
||||
}
|
||||
}
|
||||
$excel = (new Excel())->exporTsheet($data);
|
||||
$excel->save('作品.xlsx');
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入excel
|
||||
*
|
||||
* @param \app\common\arw\adjfut\src\UploadFile $file excel
|
||||
*/
|
||||
public static function importExcel(\app\common\arw\adjfut\src\UploadFile $file): string
|
||||
{
|
||||
$msg = [];
|
||||
|
||||
Db::startTrans();
|
||||
try {
|
||||
$excel = new Excel($file);
|
||||
$data = $excel->parseExcel(
|
||||
Tool::getExcelRule(self::IMPORTEXCELFIELD),
|
||||
['titleLine' => [1]]
|
||||
);
|
||||
if (!$data) throwErrorMsg('excel无数据', 1);
|
||||
$msg = [];
|
||||
foreach ($data as $line => $value) {
|
||||
try {
|
||||
self::importExcelInit($value);
|
||||
$msg[] = "{$line} <span style='color:#27af49'>新增成功!</span><br>";
|
||||
} catch (\Throwable $th) {
|
||||
$msg[] = "{$line} <span style='color:red'>{$th->getMessage()}</span><br>";
|
||||
}
|
||||
}
|
||||
Db::commit();
|
||||
return implode(', ', $msg);
|
||||
} catch (\Throwable $th) {
|
||||
Db::rollback();
|
||||
throw $th;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入excel初始化
|
||||
*/
|
||||
public static function importExcelInit($value): void
|
||||
{
|
||||
$works_type_name = $value['works_type_name'];
|
||||
$works_name = $value['works_name'];
|
||||
$works_author = $value['works_author'];
|
||||
$classes_name = $value['classes_name'];
|
||||
$works_likes_count = $value['works_likes_count'] ?? 0;
|
||||
$works_order = $value['works_order'] ?? 0;
|
||||
|
||||
$works_type = ModelWorksType::where("works_type_name", $works_type_name)->find();
|
||||
if (!$works_type) throwErrorMsg("作品类型不存在!");
|
||||
$classes = ModelClasses::where("classes_name", $classes_name)->find();
|
||||
if (!$classes) throwErrorMsg("班型不存在!");
|
||||
|
||||
self::create([
|
||||
'works_type_guid' => $works_type->works_type_guid,
|
||||
'classes_guid' => $classes->classes_guid,
|
||||
'works_name' => $works_name,
|
||||
'works_author' => $works_author,
|
||||
'works_likes_count' => $works_likes_count,
|
||||
'works_order' => $works_order,
|
||||
]);
|
||||
}
|
||||
}
|
@ -124,7 +124,7 @@ class WorksType extends BaseModel
|
||||
/**
|
||||
* 导入excel
|
||||
*
|
||||
* @param \app\common\arw\adjfut\src\UploadFile $file 导入excel下载后的地址
|
||||
* @param \app\common\arw\adjfut\src\UploadFile $file excel
|
||||
*/
|
||||
public static function importExcel(\app\common\arw\adjfut\src\UploadFile $file): string
|
||||
{
|
||||
@ -135,9 +135,7 @@ class WorksType extends BaseModel
|
||||
$excel = new Excel($file);
|
||||
$data = $excel->parseExcel(
|
||||
Tool::getExcelRule(self::EXCELFIELD),
|
||||
[
|
||||
'titleLine' => [1]
|
||||
]
|
||||
['titleLine' => [1]]
|
||||
);
|
||||
if (!$data) throwErrorMsg('excel无数据', 1);
|
||||
$msg = [];
|
||||
|
Loading…
Reference in New Issue
Block a user