feat:完成产品列表模块、公共Tool类排序换位处理方法逻辑修改

This commit is contained in:
xjh 2023-04-19 00:11:32 +08:00
parent 60692fa902
commit 3e6631044d
5 changed files with 417 additions and 11 deletions

View 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
];
}
}

View File

@ -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 = [];

View File

@ -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);
}
}

View 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,
]);
}
}

View File

@ -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 = [];