Ver código fonte

评价管理

gorden 7 meses atrás
pai
commit
67049fde46

+ 180 - 0
app/admin/controller/client/EvaluateController.php

@@ -4,7 +4,9 @@ namespace app\admin\controller\client;
 
 use app\controller\Curd;
 use app\model\ClientFavorite;
+use app\model\Goods;
 use app\model\GoodsEvaluate;
+use support\exception\BusinessException;
 use support\Request;
 use support\Response;
 
@@ -17,9 +19,24 @@ class EvaluateController extends Curd
 
     public function select(Request $request): Response
     {
+        $goodsName = $request->get('goods_name','');
+        $searchTimes = $request->get('goods_evaluate_addtimes',[]);
+
         [$where, $format, $limit, $field, $order] = $this->selectInput($request);
         $order = $request->get('order', 'desc');
         $field = $field ?? 'goods_evaluate_addtimes';
+
+        if ($goodsName != ''){
+            $goodsIds = Goods::where('goods_name','like','%'.$goodsName.'%')->pluck('goods_id')->toArray();
+            $where['join_evaluate_goods_id'] = ['in',implode(',',$goodsIds)];
+        }
+        if(!empty($searchTimes)){
+            $searchTimes[0] = !empty($searchTimes[0]) ? strtotime($searchTimes[0]) : time();
+            $searchTimes[1] = !empty($searchTimes[1]) ? strtotime($searchTimes[1]) : time();
+
+            $where['goods_evaluate_addtimes'] = $searchTimes;
+        }
+
         $query = $this->doSelect($where, $field, $order);
         return $this->doFormat($query, $format, $limit);
     }
@@ -70,4 +87,167 @@ class EvaluateController extends Curd
         }
         return $model;
     }
+
+    public function afterQuery($items)
+    {
+        foreach ($items as &$item){
+            if (!empty($item->goods_evaluate_json)){
+                $imagesStr = '';
+                $goodsEvaluateJson = json_decode($item->goods_evaluate_json,true);
+                if (isset($goodsEvaluateJson['images'])){
+                    foreach ($goodsEvaluateJson['images'] as $images){
+                        $imagesStr = $imagesStr .= getenv('STORAGE_DOMAIN').$images.',';
+                    }
+                }
+                $item->goods_evaluate_json = rtrim($imagesStr,',');
+            }
+        }
+        return $items;
+    }
+
+    public function info(Request $request):Response
+    {
+        $goodsEvaluateId = $request->get('goods_evaluate_id','');
+        if (!$goodsEvaluateId){
+            return json_fail('参数异常');
+        }
+
+        $evaluate = GoodsEvaluate::with([
+            'member'=>function($query){
+                $query->select('member_id','member_mobile');
+            },
+            'cert' => function ($query){
+                $query->select('join_cert_member_id','member_cert_name');
+            },
+            'info' => function ($query){
+                $query->select('join_info_member_id','member_info_nickname','member_info_headimg');
+            },
+            'goods' => function($query){
+                $query->select('goods_id','goods_name','goods_cover','goods_sales_price');
+            },
+            'order' => function($query){
+                $query->select('order_id','order_amount_pay','order_is_complete','order_status_system','order_status_payment','order_addtimes');
+            }
+        ])->where('goods_evaluate_id',$goodsEvaluateId)
+            ->first();
+
+        if (!empty($evaluate->goods_evaluate_json)){
+            $imagesStr = '';
+            $originStr = '';
+            $goodsEvaluateJson = json_decode($evaluate->goods_evaluate_json,true);
+            if (isset($goodsEvaluateJson['images'])){
+                foreach ($goodsEvaluateJson['images'] as $images){
+                    $imagesStr = $imagesStr .= getenv('STORAGE_DOMAIN').$images.',';
+                    $originStr = $originStr .= str_replace('/thumb','',$imagesStr);
+                }
+            }
+            $evaluate->goods_evaluate_json_origin = rtrim($originStr,',');
+            $evaluate->goods_evaluate_json = rtrim($imagesStr,',');
+        }
+
+        if (!empty($evaluate->info)){
+            $evaluate->info->member_info_headimg = $evaluate->info->member_info_headimg ?? getenv('STORAGE_DOMAIN').'/images/avatar_default.png';
+            $evaluate->info->member_info_nickname ?? substr($evaluate->member->member_mobile,-4).'用户';
+        }
+        if (!empty($evaluate->goods)){
+            $evaluate->goods->goods_cover = getenv('STORAGE_DOMAIN').$evaluate->goods->goods_cover;
+            $evaluate->goods->goods_cover_origin = str_replace('/thumb','',$evaluate->goods->goods_cover);
+        }
+
+        return json_success('success',$evaluate);
+    }
+
+    /**
+     * 添加
+     * @param Request $request
+     * @return Response
+     * @throws BusinessException
+     */
+    public function insert(Request $request): Response
+    {
+        try {
+            $data = $this->insertInput($request);
+            $this->doInsert($data);
+            
+        } catch (BusinessException $customException) {
+            return json_fail($customException->getMessage());
+        } catch (\Exception $e) {
+            dump($e->getMessage());
+            return json_fail('数据写入失败');
+        }
+        return json_success('success');
+    }
+
+    /**
+     * 插入前置方法
+     * @param Request $request
+     * @return array
+     * @throws BusinessException
+     */
+    protected function insertInput(Request $request): array
+    {
+        $data = $this->inputFilter($request->post());
+
+        if (!empty($data['goods_evaluate_json'])){
+            $goodsEvaluateJson = explode(',',$data['goods_evaluate_json']);
+            foreach ($goodsEvaluateJson as $key => $item){
+                $goodsEvaluateJson[$key] = str_replace(getenv('STORAGE_DOMAIN'), '', $item);
+            }
+
+            $data['goods_evaluate_json'] = json_encode(['images'=>$goodsEvaluateJson]);
+        }
+        
+        return $data;
+    }
+
+    /**
+     * 更新
+     * @param Request $request
+     * @return Response
+     * @throws BusinessException
+     */
+    public function update(Request $request): Response
+    {
+        try {
+            [$id, $data] = $this->updateInput($request);
+            $this->doUpdate($id, $data);
+        } catch (BusinessException $e) {
+            return json_fail($e->getMessage());
+        } catch (\Exception $e) {
+            dump($e->getMessage());
+            return json_fail('数据更新失败');
+        }
+
+        return json_success('success');
+    }
+
+    /**
+     * 更新前置方法
+     * @param Request $request
+     * @return array
+     * @throws BusinessException
+     */
+    protected function updateInput(Request $request): array
+    {
+        $primary_key = $this->model->getKeyName();
+        $id = $request->post($primary_key);
+        $data = $this->inputFilter($request->post());
+        $model = $this->model->find($id);
+        if (!$model) {
+            throw new BusinessException('记录不存在', 2);
+        }
+
+        if (!empty($data['goods_evaluate_json'])){
+            $goodsEvaluateJson = explode(',',$data['goods_evaluate_json']);
+            foreach ($goodsEvaluateJson as $key => $item){
+                $goodsEvaluateJson[$key] = str_replace(getenv('STORAGE_DOMAIN'), '', $item);
+            }
+
+            $data['goods_evaluate_json'] = json_encode(['images'=>$goodsEvaluateJson]);
+        }
+
+        unset($data[$primary_key]);
+        return [$id, $data];
+    }
+
 }

+ 7 - 0
app/admin/service/order/OrderService.php

@@ -133,8 +133,15 @@ class OrderService
                 // 订单详情表
                 OrderSheet::where('join_sheet_order_id', $order->order_id)->update(['order_sheet_status' => 'CANCEL']);
                 // 支付表
+                $payDetail = PayDetail::where('pay_id', $order->order_groupby)->first();
+                $payExtendJson = [];
+                if (!empty($payDetail->pay_extend_json)){
+                    $payExtendJson = json_decode($payDetail->pay_extend_json,true);
+                }
+                $payExtendJson['cancel_times'] = date('Y-m-d H:i:s'); 
                 PayDetail::where('pay_id', $order->order_groupby)->update([
                     'pay_status' => 'CANCEL',
+                    'pay_extend_json' => json_encode($payExtendJson)
                 ]);
             }
 

+ 13 - 0
app/model/GoodsEvaluate.php

@@ -42,6 +42,11 @@ class GoodsEvaluate extends Model
         return $this->hasOne(MemberCert::class, 'join_cert_member_id', 'join_evaluate_member_id');
     }
 
+    public function info()
+    {
+        return $this->hasOne(MemberInfo::class, 'join_info_member_id', 'join_evaluate_member_id');
+    }
+
     /**
      * @Desc 关联商品
      * @Author Gorden
@@ -53,4 +58,12 @@ class GoodsEvaluate extends Model
     {
         return $this->hasOne(Goods::class, 'goods_id', 'join_evaluate_goods_id');
     }
+
+    /**
+     * 关联订单
+     */
+    public function order()
+    {
+        return $this->hasOne(Order::class, 'order_id', 'join_evaluate_order_id');
+    }
 }

+ 11 - 1
route/admin.php

@@ -952,7 +952,7 @@ Route::group('/admin', function () {
             // 我的积分
             Route::get('/points/list', [\app\admin\controller\client\PointsController::class, 'select']);
             // 我的评价
-            Route::get('/evaluate/list', [\app\admin\controller\client\EvaluateController::class, 'select']);
+            // Route::get('/evaluate/list', [\app\admin\controller\client\EvaluateController::class, 'select']);
             // 我的购物车
             Route::get('/cart/list', [\app\admin\controller\client\CartController::class, 'select']);
             // 我的优惠券
@@ -962,6 +962,16 @@ Route::group('/admin', function () {
         })->middleware([
             \app\middleware\AdminAuthCheck::class
         ]);
+        
+        /* 评价管理 */
+        Route::group('/evaluate', function () {
+            Route::get('/list', [\app\admin\controller\client\EvaluateController::class, 'select']);
+            Route::post('/add', [\app\admin\controller\client\EvaluateController::class, 'insert']);
+            Route::post('/update', [\app\admin\controller\client\EvaluateController::class, 'update']);
+            Route::delete('/delete', [\app\admin\controller\client\EvaluateController::class, 'delete']);
+        })->middleware([
+            \app\middleware\AdminAuthCheck::class
+        ]);;
         /* 消息管理 */
         Route::group('/message', function () {
             Route::group('', function () {