Browse Source

完善功能

gorden 9 months ago
parent
commit
2fe1b0553a

+ 2 - 2
app/admin/controller/member/MemberController.php

@@ -96,9 +96,9 @@ class MemberController
 
     public function selectMemberAllQuota(Request $request)
     {
-        $memberId = 'ME0000000000000148XFI3BZ';//$request->get('member_id','');
+        $memberId = $request->get('member_id','');
         $orderId = $request->get('order_id', '');
-        $goodsId = 'GD20240401142209006641';//$request->get('goods_id','');
+        $goodsId = $request->get('goods_id','');
         $person = $request->get('person', '');
         $selectType = $request->get('select_type', 'ALL');
 

+ 180 - 41
app/admin/controller/order/WholeController.php

@@ -69,7 +69,7 @@ class WholeController extends Curd
     {
         $model = $this->model->with([
             'sheet' => function ($query) {
-                $query->select('join_sheet_order_id', 'join_sheet_goods_id');
+                $query->select('join_sheet_order_id', 'order_sheet_id', 'join_sheet_goods_id');
             },
             'member' => function ($query) {
                 $query->select('member_id', 'member_mobile');
@@ -140,7 +140,11 @@ class WholeController extends Curd
                 $query->select('goods_id', 'goods_name', 'goods_cover', 'goods_market_price', 'goods_sales_price', 'goods_classify');
             },
             'memberInfo',
-            'cert'
+            'cert',
+            'skus' => function($query){
+                $query->where('goods_sku_status','ON')
+                ->select('goods_sku_id','join_sku_goods_id','goods_sku_specs_json','goods_sku_sales_price');
+            }
         ])->where('join_sheet_order_id', $orderId)
             ->get()
             ->toArray();
@@ -169,33 +173,104 @@ class WholeController extends Curd
 
                 $item['goods']['components'] = $goodsArr;
             }
+            if (!empty($item['skus'])){
+                foreach($item['skus'] as $k => $sku){
+                    if(!empty($sku['goods_sku_specs_json'])){
+                        $specsJson = json_decode($sku['goods_sku_specs_json'],true);
+                        $skuName = '';
+                        foreach ($specsJson as $specsKey => $skuSpecs) {
+                            if (is_array($skuSpecs)) {
+                                $skuName = $skuName . ' ' . implode(' ', $skuSpecs) . ';';
+                            } else {
+                                $skuName = $skuName . ' ' . $skuSpecs . ';';
+                            }
+                        }
+                        $item['skus'][$k]['goods_sku_title'] = rtrim($skuName,';');
+                    }
+                    
+                }
+                
+            }
         }
 
         $order = Order::where('order_id', $orderId)->first();
+        $payDetail = PayDetail::where('join_pay_order_id',$order->order_groupby)
+            ->select('pay_id','pay_category')
+            ->first();
         $express = OrderExpress::where('join_express_order_id', $orderId)->first();
         $data = [
             'order' => $order,
             'sheet' => $orderSheet,
-            'express' => $express
+            'express' => $express,
+            'payDetail' => $payDetail
         ];
 
         return json_success('', $data);
     }
 
-//    protected function updateInput(Request $request): array
-//    {
-//        $primary_key = $this->model->getKeyName();
-//        $id = $request->post($primary_key);
-//        $data = $this->inputFilter($request->post());
-//        $data['coupon_begindate'] = strtotime($data['coupon_begindate']);
-//        $data['coupon_enddate'] = strtotime($data['coupon_enddate']);
-//        $model = $this->model->find($id);
-//        if (!$model) {
-//            throw new BusinessException('记录不存在', 2);
-//        }
-//        unset($data[$primary_key]);
-//        return [$id, $data];
-//    }
+    public function update(Request $request): Response
+    {
+        $params = $request->post();
+
+        try{
+            Db::beginTransaction();
+
+            // 修改主订单
+            $this->updateMain($params);
+
+            Db::commit();
+
+            return json_success('修改订单成功');
+        }catch(\Exception $e){
+            Db::rollBack();
+            return json_fail('修改订单失败');
+        }
+    }
+
+    public function delete(Request $request): Response
+    {
+        $params = $request->post();
+
+        try {
+            Db::beginTransaction();
+
+            $order = Order::where('order_id',$params['order_id'])
+                ->where('order_category','SYSTEM')
+                ->whereIn('order_status_system',['WAITING','SENDING'])
+                ->first();
+            if(!$order){
+                return json_fail('订单异常');
+            }
+
+            $payDetail = PayDetail::where('join_pay_order_id',$order->order_groupby)->first();
+            dump($payDetail);
+            if($payDetail->pay_category == 'CASH'){
+                $memberAccount = MemberAccount::where('join_account_member_id',$payDetail->join_pay_member_id)
+                    ->where('member_account_classify','CASH')
+                    ->first();
+                $memberAccount->member_account_expend = $memberAccount->member_account_expend - $payDetail->pay_amount;
+                $memberAccount->member_account_surplus = $memberAccount->member_account_surplus + $payDetail->pay_amount;
+                $memberAccount->save();
+            }
+            // 删支付记录
+            $payDetail->delete();
+            // 删收货信息
+            OrderExpress::where('join_express_order_id',$params['order_id'])->delete();
+            // 删订单详情
+            OrderSheet::where('join_sheet_order_id',$params['order_id'])->delete();
+            // 删主订单
+            $order->delete();
+
+            Db::commit();
+
+            return json_success('删除订单成功');
+        }catch(\Exception $e){
+            dump($e->getMessage());
+            Db::rollBack();
+
+            return json_fail('删除订单失败');
+        }
+    }
 
     public function insert(Request $request): Response
     {
@@ -254,17 +329,21 @@ class WholeController extends Curd
                 $params['order_express_json'] = json_encode([
                     'express'=>'Y',
                 ]);
-                $this->saveExpress($params);
             }
 
             // 写入主订单
             $this->insertMain($params);
             // 订单详情
-            $this->insertSheet($params);
+            $sheetId = $this->insertSheet($params);
             // 支付记录
             $this->insertPayDetail($params);
 
-
+            
+            $params['order_express_goods'] = json_encode(['sheet'=>[$sheetId]]);
+            if($params['delivery'] == 'LOGISTICS'){
+                // 入配送
+                $this->saveExpress($params);
+            }
             // 买的单个服务
             if ($goods['goods_classify'] == 'SERVICE') {
                 // 预约表
@@ -338,11 +417,12 @@ class WholeController extends Curd
                 'order_name' => date('Y-m-d H:i:s') . '-订单',
                 'order_amount_total' => $params['order_sheet_amount'],
                 'order_amount_pay' => $params['order_sheet_pay'],
-                'order_category' => 'NORMAL',
+                'order_category' => 'SYSTEM',
                 'order_status_system' => $params['order_status_system'],
                 'order_status_payment' => $params['order_status_payment'],
                 'order_status_storage' => $params['order_status_storage'],
                 'order_remark' => $params['order_remark'] ?? '',
+                'order_express_json' => $params['order_express_json'],
                 'order_addtimes' => time()
             ];
 
@@ -379,7 +459,7 @@ class WholeController extends Curd
                 'order_sheet_remark'=>$params['order_remark'] ?? '',
                 'order_sheet_addtimes' => time()
             ];
-            OrderSheet::insert($data);
+            return OrderSheet::insertGetId($data);
         } catch (\Exception $e) {
             throw new BusinessException('订单创建失败');
         }
@@ -484,52 +564,111 @@ class WholeController extends Curd
         }
     }
 
+    /**
+     * 修改主订单
+     */
+    public function updateMain($params)
+    {
+        $params['order_express_goods'] = json_encode(['sheet'=>[$params['sheet_id']]]);
+        if($params['delivery'] == 'PICKUP'){ // 自提
+            $params['order_express_json'] = json_encode([
+                'express'=>'S',
+                'premises'=>$params['dept_premises_id']
+            ]);
+        }else if($params['delivery'] == 'LOGISTICS'){
+            $params['order_express_json'] = json_encode([
+                'express'=>'Y',
+            ]);
+            $params['orderId'] = $params['order_id'];
+
+            $this->saveExpress($params);
+        }
+
+        try{
+            Order::where('order_id',$params['order_id'])->update(['order_express_json'=>$params['order_express_json']]);
+        }catch(\Exception $e){
+            throw new BusinessException('修改订单失败');
+        }
+    }
+
     public function delivery(Request $request)
     {
         if (!Order::where('order_id', $request->post('order_id'))->where('order_status_system', 'SENDING')->exists()) {
             return json_fail('订单状态异常');
         }
-
+        
         // 验证
         $validate = new OrderExpressValidate();
         if (!$validate->scene('delivery')->check($request->post())) {
             return json_fail($validate->getError());
         }
+        
+        $params = $request->post();
+        
         try {
             Db::beginTransaction();
-            // 该订单状态
-            Order::where('order_id', $request->post('order_id'))->update(['order_status_system' => 'RECVING', 'order_status_storage' => 'EXPRESSING']);
             // 订单包含的产品
-            $sheet = OrderSheet::where('join_sheet_order_id', $request->post('order_id'))
-                ->select('join_sheet_goods_id')
-                ->get();
-            // 入配送记录表
-            $params = $request->post();
-            $model = OrderExpress::where('join_express_order_id',$params['order_id'])->first();
+            // $sheet = OrderSheet::where('join_sheet_order_id', $request->post('order_id'))
+            //     ->select('join_sheet_goods_id')
+            //     ->get();
+            if($params['express_type'] == 'S'){
+                $premises = SysDept::where('dept_name',$params['order_express_premises'])->first();
+                if(!$premises){
+                    return json_fail("门店不存在,请重新填写");
+                }
+                $params['order_express_city'] = str_replace(',',' ',$premises->dept_city);
+                $params['order_express_address'] = $premises->dept_address;
+                $params['order_express_code'] = '';
+                $params['order_express_addtimes'] = strtotime($params['order_express_addtimes']);
+
+                $orderData = [
+                    'order_status_system'=>'CONFIRM',
+                    'order_status_storage'=>'EXPRESSING'
+                ];
+
+                // 7天后自动完成
+                $redis = Redis::connection();
+                $key = Order::AUTOMATIC_COMPLETE_PREFIX . date('Ymd', strtotime("+7 days"));
+                $redis->sadd($key, $params['order_id']);
+
+                $model = new OrderExpress();
+            }else{
+                $orderData = [
+                    'order_status_system'=>'RECVING',
+                    'order_status_storage'=>'EXPRESSING'
+                ];
+                
+                // 15天后自动确认收货
+                $redis = Redis::connection();
+                $key = Order::AUTOMATIC_RECEIPT_PREFIX . date('Ymd', strtotime("+15 days"));
+                $redis->sadd($key, $params['order_id']);
+
+                $model = OrderExpress::where('join_express_order_id',$params['order_id'])->first();
+            }
+            
+            // 该订单状态
+            Order::where('order_id', $request->post('order_id'))->update($orderData);
+            
+            // 入配送记录表            
             $model->join_express_order_id = $params['order_id'];
-            $model->order_express_goods = $sheet;
+            $model->order_express_goods = $params['order_express_goods'];
             $model->order_express_type = $params['order_express_type'];
             $model->order_express_code = $params['order_express_code'];
             $model->order_express_city = $params['order_express_city'];
             $model->order_express_address = $params['order_express_address'];
-            $model->order_express_mobile = $params['order_express_mobile'];
+            $model->order_express_mobile = $params['order_express_mobile'] ?? '';
             $model->order_express_telephone = $params['order_express_telephone'] ?? null;
             $model->order_express_person = $params['order_express_person'] ?? null;
             $model->order_express_remark = $params['order_express_remark'] ?? null;
-            $model->order_express_addtimes = time();
+            $model->order_express_addtimes = $params['order_express_addtimes'] ?? time();
             $model->save();
 
-            // 15天后自动确认收货
-            $redis = Redis::connection();
-            $key = Order::AUTOMATIC_RECEIPT_PREFIX . date('Ymd', strtotime("+15 days"));
-            $redis->sadd($key, $params['order_id']);
-
             Db::commit();
 
             return json_success('发货成功');
         } catch (\Exception $e) {
             Db::rollBack();
-
+            dump($e->getMessage());
             return json_fail('发货失败');
         }
     }
@@ -673,7 +812,7 @@ class WholeController extends Curd
         try{
             $express = new OrderExpress();
             $express->join_express_order_id = $params['orderId'];
-            $express->order_express_goods = json_encode(['sheet'=>'']);
+            $express->order_express_goods = $params['order_express_goods'];
             $express->order_express_city = $params['order_express_city'];
             $express->order_express_address = $params['order_express_address'];
             $express->order_express_mobile = $params['order_express_mobile'];

+ 1 - 0
app/admin/service/goods/GoodsService.php

@@ -149,6 +149,7 @@ class GoodsService
             $categoryPath = SysCategory::where('category_id', $categoryId)->value('category_super_path');
             $categoryPath .= '#' . $categoryId . '#';
             $categoryIds = SysCategory::where('category_super_path', 'like', $categoryPath . '%')->pluck('category_id')->toArray();
+            $categoryIds[] = $categoryId;
             if (!empty($categoryIds)) {
                 $categoryId = $categoryIds;
             } else {

+ 6 - 1
app/admin/service/order/OrderService.php

@@ -29,11 +29,16 @@ class OrderService
             foreach ($orders as $order) {
                 // 订单主表
                 Order::where('order_id', $order->order_id)->update([
-                    'order_is_complete' => 'Y',
+                    // 'order_is_complete' => 'Y',
                     'order_status_system' => 'CONFIRM'
                 ]);
                 // 订单详情表
                 OrderSheet::where('join_sheet_order_id', $order->order_id)->update(['order_sheet_status' => 'CONFIRM']);
+                
+                // 7天后自动完成 order_is_complete=Y
+                $redis = Redis::connection();
+                $key = Order::AUTOMATIC_COMPLETE_PREFIX . date('Ymd', strtotime("+7 days"));
+                $redis->sadd($key, $order->order_id);
             }
             Db::commit();
         } catch (\Exception $e) {

+ 7 - 9
app/admin/validate/order/OrderExpressValidate.php

@@ -8,17 +8,15 @@ class OrderExpressValidate extends Validate
 {
     protected $rule = [
         'order_id' => 'require|alphaDash',
-        'order_express_type|配送方式' => 'require|in:自营物流,顺丰速递',
-        'order_express_code|快递单号' => 'require|alphaDash',
-        'order_express_city|省市县区' => 'require',
-        'order_express_address|具体地址' => 'require',
-        'order_express_mobile|联系电话' => 'require|mobile',
-        'order_express_telephone|备用电话' => 'mobile',
-        'order_express_person|收件人信息' => 'require',
+        'order_express_code|快递单号' => 'alphaDash',
+        // 'order_express_city|省市县区' => 'require',
+        // 'order_express_address|具体地址' => 'require',
+        // 'order_express_mobile|联系电话' => 'mobile',
+        // 'order_express_telephone|备用电话' => 'mobile',
+        // 'order_express_person|收件人信息' => 'require',
     ];
 
     protected $scene = [
-        'delivery' => ['order_id', 'order_express_type', 'order_express_code', 'order_express_city', 'order_express_address',
-            'order_express_mobile', 'order_express_telephone', 'order_express_person']
+        'delivery' => ['order_id', 'order_express_type', 'order_express_code']
     ];
 }

+ 2 - 0
app/model/Order.php

@@ -21,6 +21,8 @@ class Order extends Model
 
     const AUTOMATIC_RECEIPT_PREFIX = 'ORDER:AUTOMATIC:RECEIPT:';
 
+    const AUTOMATIC_COMPLETE_PREFIX = 'ORDER:AUTOMATIC:COMPLETE:';
+
     public function serializeDate(DateTimeInterface $date)
     {
         return $date->format('Y-m-d H:i:s');

+ 4 - 0
app/model/OrderSheet.php

@@ -100,6 +100,10 @@ class OrderSheet extends Model
             ->select('join_running_goods_id', 'goods_running_storage', 'goods_running_sale');
     }
 
+    public function skus(){
+        return $this->hasMany(GoodsSku::class,'join_sku_goods_id','join_sheet_goods_id');
+    }
+
     public function sku()
     {
         return $this->hasOne(GoodsSku::class, 'goods_sku_id', 'join_sheet_goods_sku_id');

+ 1 - 0
route/admin.php

@@ -761,6 +761,7 @@ Route::group('/admin', function () {
             Route::post('/delivery', [\app\admin\controller\order\WholeController::class, 'delivery']);
             Route::get('/myOrder', [\app\admin\controller\order\WholeController::class, 'myOrder']);
             Route::post('/add', [\app\admin\controller\order\WholeController::class, 'insert']);
+            Route::post('/delete', [\app\admin\controller\order\WholeController::class, 'delete']);
 
         })->middleware([
             \app\middleware\AdminAuthCheck::class