From 3e6631044dc80c45de6805597ff8ce3d793f1d9b Mon Sep 17 00:00:00 2001
From: xjh <2423579486@qq.com>
Date: Wed, 19 Apr 2023 00:11:32 +0800
Subject: [PATCH] =?UTF-8?q?feat:=E5=AE=8C=E6=88=90=E4=BA=A7=E5=93=81?=
=?UTF-8?q?=E5=88=97=E8=A1=A8=E6=A8=A1=E5=9D=97=E3=80=81=E5=85=AC=E5=85=B1?=
=?UTF-8?q?Tool=E7=B1=BB=E6=8E=92=E5=BA=8F=E6=8D=A2=E4=BD=8D=E5=A4=84?=
=?UTF-8?q?=E7=90=86=E6=96=B9=E6=B3=95=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/admin/controller/Works/Works.php | 225 +++++++++++++++++++++++
app/admin/controller/Works/WorksType.php | 2 +-
app/common/exception/Tool.php | 15 +-
app/common/model/Works/Works.php | 180 ++++++++++++++++++
app/common/model/Works/WorksType.php | 6 +-
5 files changed, 417 insertions(+), 11 deletions(-)
create mode 100644 app/admin/controller/Works/Works.php
create mode 100644 app/common/model/Works/Works.php
diff --git a/app/admin/controller/Works/Works.php b/app/admin/controller/Works/Works.php
new file mode 100644
index 0000000..2b14dae
--- /dev/null
+++ b/app/admin/controller/Works/Works.php
@@ -0,0 +1,225 @@
+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
+ ];
+ }
+}
diff --git a/app/admin/controller/Works/WorksType.php b/app/admin/controller/Works/WorksType.php
index 4d99f1e..d8a5d63 100644
--- a/app/admin/controller/Works/WorksType.php
+++ b/app/admin/controller/Works/WorksType.php
@@ -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 = [];
diff --git a/app/common/exception/Tool.php b/app/common/exception/Tool.php
index ecb4f69..e4ccb50 100644
--- a/app/common/exception/Tool.php
+++ b/app/common/exception/Tool.php
@@ -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);
}
}
diff --git a/app/common/model/Works/Works.php b/app/common/model/Works/Works.php
new file mode 100644
index 0000000..132650d
--- /dev/null
+++ b/app/common/model/Works/Works.php
@@ -0,0 +1,180 @@
+ "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} 新增成功!
";
+ } catch (\Throwable $th) {
+ $msg[] = "{$line} {$th->getMessage()}
";
+ }
+ }
+ 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,
+ ]);
+ }
+}
diff --git a/app/common/model/Works/WorksType.php b/app/common/model/Works/WorksType.php
index 6c75a77..c0a9ebc 100644
--- a/app/common/model/Works/WorksType.php
+++ b/app/common/model/Works/WorksType.php
@@ -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 = [];