cqp 2 недель назад
Родитель
Сommit
c03b7293be

+ 76 - 0
app/Http/Controllers/Api/UserGuideController.php

@@ -0,0 +1,76 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+use App\Service\UserGuideService;
+use Illuminate\Http\Request;
+
+class UserGuideController extends BaseController
+{
+    public function userGuideEdit(Request $request)
+    {
+        $service = new UserGuideService();
+        $user = $request->userData;
+        list($status,$data) = $service->quantizationEdit($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function userGuideAdd(Request $request)
+    {
+        $service = new UserGuideService();
+        $user = $request->userData;
+        list($status,$data) = $service->quantizationAdd($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+    public function userGuideDel(Request $request)
+    {
+        $service = new UserGuideService();
+        $user = $request->userData;
+        list($status,$data) = $service->quantizationDel($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+    public function userGuideList(Request $request)
+    {
+        $service = new UserGuideService();
+        $user = $request->userData;
+        list($status,$data) = $service->quantizationList($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function userGuideDetail(Request $request)
+    {
+        $service = new UserGuideService();
+        $user = $request->userData;
+        list($status,$data) = $service->quantizationDetail($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+}

+ 3 - 13
app/Http/Middleware/OssFileDeal.php

@@ -38,20 +38,10 @@ class OssFileDeal
                 $service = new FileUploadService();
 
                 if(! empty($result['file'])){
+                    //添加oss
                     $file = $result['file'];
-                    if(! isset($result['is_batch'])){
-                        //添加oss
-                        if(! empty($file['new'])){
-                            $service->createOssUpload($file['new']);
-                        }
-                    }else{
-                        if(! empty($file['new']['origin']) && ! empty($file['new']['img_list'])){
-                            $service->createOssUploadBatch($file['new']);
-                        }else{
-                            foreach ($file['new'] as $value){
-                                $service->createOssUploadBatch($value);
-                            }
-                        }
+                    if(! empty($file['new'])){
+                        $service->createOssUpload($file['new']);
                     }
 
                     //编辑|删除oss

+ 13 - 0
app/Model/UserGuide.php

@@ -0,0 +1,13 @@
+<?php
+
+namespace App\Model;
+
+class UserGuide extends UseScopeBaseModel
+{
+    protected $table = "user_guide"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+    public static $field = ['title','id','crt_time','crt_id'];
+}

+ 19 - 0
app/Model/UserGuideDetails.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+class UserGuideDetails extends UseScopeBaseModel
+{
+    protected $guarded = [];
+    protected $table = "user_guide_details"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+    const type_one = 1; //文字
+    const type_two = 2; // 图片
+    public static $type = [
+        self::type_one,
+        self::type_two,
+    ];
+}

+ 2 - 22
app/Service/FileUploadService.php

@@ -27,8 +27,8 @@ class FileUploadService extends Service
 
     const tmp_dir = 'upload_occ';
     const string = '/api/uploadFiles/';
-    const string2 = 't9|';
-    const string3 = 't9/';
+    const string2 = 'xlkj|';
+    const string3 = 'xlkj/';
 
     public function uploadFile($file){
         if(empty($file)) return [false, '请上传文件'];
@@ -152,24 +152,4 @@ class FileUploadService extends Service
             }
         }
     }
-
-    public function createOssUploadBatch($file){
-        if(empty($file['origin']) || empty($file['img_list'])) return;
-        $from = $file['origin'];
-        $filename = str_replace(FileUploadService::string.FileUploadService::string2,'', $from);
-        $timestamp = substr($filename, 0, 8); // 截取前八位数字
-        $date = \DateTime::createFromFormat('Ymd', $timestamp);
-        $date = $date->format('Y-m-d');
-        $dir = FileUploadService::tmp_dir . '/' . $date . '/' . $filename;
-        if(! Storage::disk('public')->exists($dir)) return;
-
-        $realPath = storage_path() . "/app/public/" . $dir;
-        foreach ($file['img_list'] as $filename){
-            $filename_tmp = str_replace(FileUploadService::string.FileUploadService::string2,'', $filename);
-            $savePath = self::string3 . $date . '/' . $filename_tmp;
-            list($status,$msg) = (new OssService())->uploadFile($realPath,$savePath);
-        }
-
-        Storage::disk('public')->delete($dir);
-    }
 }

+ 231 - 0
app/Service/UserGuideService.php

@@ -0,0 +1,231 @@
+<?php
+
+namespace App\Service;
+
+use App\Model\Employee;
+use App\Model\UserGuide;
+use App\Model\UserGuideDetails;
+use Illuminate\Support\Facades\DB;
+
+class UserGuideService extends Service
+{
+    public function edit($data,$user){
+        list($status,$msg) = $this->uRule($data, $user, false);
+        if(!$status) return [$status,$msg];
+
+        try {
+            DB::beginTransaction();
+
+            $model = UserGuide::where('id',$data['id'])->first();
+            $model->title = $data['title'] ?? '';
+            $model->save();
+
+            $time = time();
+            $old = UserGuideDetails::where('del_time',0)
+                ->where('user_guide_id',$data['id'])
+                ->whereIn('type',[UserGuideDetails::type_two])
+                ->pluck('content')
+                ->all();
+            UserGuideDetails::where('del_time',0)
+                ->where('user_guide_id', $data['id'])
+                ->update(['del_time' => $time]);
+
+            list($new, $old) = $this->saveDetail($model->id, $time, $data, $old);
+
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
+
+        return [true, ['file' => ['new' => $new, 'old' => $old]]];
+    }
+
+    public function add($data,$user){
+        list($status,$msg) = $this->uRule($data, $user);
+        if(!$status) return [$status,$msg];
+
+        try {
+            DB::beginTransaction();
+
+            $model = new UserGuide();
+            $model->title = $data['title'] ?? '';
+            $model->crt_id = $user['id'];
+            $model->save();
+
+            $time = time();
+            $this->saveDetail($model->id, $time, $data);
+            list($new) = $this->saveDetail($model->id, $time, $data);
+
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
+
+        return [true, ['file' => ['new' => $new]]];
+    }
+
+    private function saveDetail($id, $time, $data, $old = []){
+        $oldMap = array_flip($old);
+        $insert = [];
+        $new = [];
+
+        foreach ($data['details'] as $value) {
+            $content = $value['content'];
+            $type = $value['type'];
+
+            // 构造插入数据
+            $insert[] = [
+                'user_guide_id' => $id,
+                'content'       => $content,
+                'type'          => $type,
+                'sort'          => $value['sort'],
+                'crt_time'      => $time,
+            ];
+
+            // 处理 type_two 的逻辑
+            if ($type == UserGuideDetails::type_two) {
+                if (isset($oldMap[$content])) {
+                    // 如果存在,从 map 中移除,等同于原逻辑的 unset
+                    unset($oldMap[$content]);
+                } else {
+                    // 如果不存在,记录为新内容
+                    $new[] = $content;
+                }
+            }
+        }
+        $old = array_keys($oldMap);
+
+        if(! empty($insert)) UserGuideDetails::insert($insert);
+
+        return [$new, $old];
+    }
+
+    private function getDetail($id){
+        // 查所有数据
+        $all = UserGuideDetails::where('user_guide_id', $id)
+            ->where('del_time', 0)
+            ->orderBy('sort','asc')
+            ->get()
+            ->toArray();
+
+        $fileUploadService = new FileUploadService();
+        foreach ($all as $key => $value){
+            $url = "";
+            if($value['type'] == UserGuideDetails::type_two && $value['content']) $url = $fileUploadService->getFileShow($value['content']);
+            $all[$key]['show_content'] = $url;
+        }
+
+        return $all;
+    }
+
+    public function del($data){
+        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
+
+        try {
+            DB::beginTransaction();
+            $time = time();
+
+            UserGuide::where('del_time',0)
+                ->whereIn('id',$data['id'])
+                ->update(['del_time' => $time]);
+
+            $old = UserGuideDetails::where('del_time',0)
+                ->whereIn('user_guide_id',$data['id'])
+                ->whereIn('type',[UserGuideDetails::type_two])
+                ->pluck('content')
+                ->all();
+
+            UserGuideDetails::where('del_time',0)
+                ->whereIn('user_guide_id', $data['id'])
+                ->update(['del_time' => $time]);
+
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
+
+        return [true, ['file' => ['old' => $old]]];
+    }
+
+    public function detail($data,$user){
+        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
+        $customer = UserGuide::where('del_time',0)
+            ->where('id',$data['id'])
+            ->first();
+        if(empty($customer)) return [false,'用户指南不存在或已被删除'];
+        $customer = $customer->toArray();
+
+        $details = $this->getDetail($customer['id']);
+        $customer['details'] = $details;
+        $customer['crt_name'] = Employee::where('id',$customer['crt_id'])->value('emp_name');
+        $customer['crt_time'] = $customer['crt_time'] ? date("Y-m-d H:i:s",$customer['crt_time']): '';
+
+        return [true, $customer];
+    }
+
+    public function uCommon($data,$user, $field = []){
+        if(empty($field)) $field = UserGuide::$field;
+
+        $model = UserGuide::where('del_time',0)
+            ->select($field)
+            ->orderby('id', 'desc');
+
+        if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
+        if(! empty($data['id'])) $model->whereIn('id', $data['id']);
+        if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
+            $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
+            $model->where('crt_time','>=',$return[0]);
+            $model->where('crt_time','<=',$return[1]);
+        }
+
+        return $model;
+    }
+
+    public function list($data,$user){
+        $model = $this->uCommon($data, $user);
+        $list = $this->limit($model,'',$data);
+        $list = $this->fillData($list,$user);
+
+        return [true, $list];
+    }
+
+    public function uRule(&$data, $user, $is_add = true){
+        if(empty($data['title'])) return [false, '用户指南名称不能为空'];
+        if(empty($data['details'])) return [false, '评价明细不能为空'];
+        foreach ($data['details'] as $key => $value) {
+            $rowNum = $key + 1;
+            if (empty($value['type']) || ! in_array($value['type'], UserGuideDetails::$type)) return [false, "第{$rowNum}行的图文类型不能为空或类型错误"];
+            if (empty($value['content'])) return [false, "第{$rowNum}行的内容不能为空"];
+        }
+
+        if($is_add){
+            $bool = UserGuide::where('title',$data['title'])
+                ->where('del_time',0)
+                ->exists();
+        }else{
+            if(empty($data['id'])) return [false,'ID不能为空'];
+            $bool = UserGuide::where('title',$data['title'])
+                ->where('id','<>',$data['id'])
+                ->where('del_time',0)
+                ->exists();
+        }
+        if($bool) return [false,'用户指南名称已存在'];
+
+        return [true, ''];
+    }
+
+    public function fillData($data, $user){
+        if(empty($data['data'])) return $data;
+
+        $emp = (new EmployeeService())->getEmployeeMap(array_unique(array_column($data['data'],'crt_id')));
+        foreach ($data['data'] as $key => $value){
+            $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
+            $data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? '';
+        }
+
+        return $data;
+    }
+}

+ 4 - 4
config/aliyun.php

@@ -1,9 +1,9 @@
 <?php
 
 return [
-    "accessKeyId" => "",
-    "accessKeySecret" => "",
-    "endpoint" => "",
-    "ossBucket" => "",
+    "accessKeyId" => env('ALIYUN_ACCESS_KEY_ID'),
+    "accessKeySecret" => env('ALIYUN_ACCESS_KEY_SECRET'),
+    "endpoint" => env('ALIYUN_ENDPOINT'),
+    "ossBucket" => env('ALIYUN_OSSBUCKET'),
 ];
 

+ 21 - 0
config/header/82.php

@@ -0,0 +1,21 @@
+<?php
+/**
+ * '菜单ID' => [
+ *     '字段英文名' =》 '字段中文名'
+ * ]
+ */
+
+return [
+    [
+        'key' =>'title',
+        'value' => '用户指引标题',
+    ],
+    [
+        'key' =>'crt_name',
+        'value' => '创建人',
+    ],
+    [
+        'key' =>'crt_time',
+        'value' => '创建时间',
+    ],
+];

+ 1 - 0
config/header/common.php

@@ -23,4 +23,5 @@ return [
     78 => ['has_detail' => true, 'is_jump' => false], // 量化档案
     80 => ['has_detail' => true, 'is_jump' => false], // 人物记忆
     81 => ['has_detail' => true, 'is_jump' => false], // 费用档案
+    82 => ['has_detail' => true, 'is_jump' => false], // 用户指引
 ];

+ 7 - 0
routes/api.php

@@ -157,6 +157,13 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('costManagementDel', 'Api\CostManagementController@costManagementDel');
     $route->any('costManagementDetail', 'Api\CostManagementController@costManagementDetail');
 
+    //用户指引
+    $route->any('userGuideList', 'Api\UserGuideController@userGuideList');
+    $route->any('userGuideEdit', 'Api\UserGuideController@userGuideEdit')->middleware('OssFileDeal');
+    $route->any('userGuideAdd', 'Api\UserGuideController@userGuideAdd')->middleware('OssFileDeal');
+    $route->any('userGuideDel', 'Api\UserGuideController@userGuideDel')->middleware('OssFileDeal');
+    $route->any('userGuideDetail', 'Api\UserGuideController@userGuideDetail');
+
     //报表
     $route->any('valueStatistics', 'Api\StatisticsController@valueStatistics');