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