Browse Source

完善功能

gorden 9 months ago
parent
commit
635c8c2580
2 changed files with 161 additions and 84 deletions
  1. 138 84
      app/admin/controller/order/WholeController.php
  2. 23 0
      app/model/ClientConfig.php

+ 138 - 84
app/admin/controller/order/WholeController.php

@@ -9,6 +9,7 @@ use app\admin\validate\order\OrderExpressValidate;
 use app\admin\validate\order\OrderValidate;
 use app\controller\Curd;
 use app\model\Appointment;
+use app\model\ClientConfig;
 use app\model\Coupon;
 use app\model\Device;
 use app\model\Goods;
@@ -24,6 +25,7 @@ use app\model\Premises;
 use app\model\Supplier;
 use app\model\SysDept;
 use app\model\SysSerial;
+use app\model\SysUser;
 use support\Db;
 use support\exception\BusinessException;
 use support\Redis;
@@ -115,8 +117,8 @@ class WholeController extends Curd
         foreach ($items as &$item) {
             if (!empty($item['sheet'])) {
                 $goods = Goods::where('goods_id', $item['sheet']['join_sheet_goods_id'])->first();
-                $item['sheet']['goods_name'] =$goods->goods_name;
-                $item['sheet']['goods_classify'] =$goods->goods_classify;
+                $item['sheet']['goods_name'] = $goods->goods_name;
+                $item['sheet']['goods_classify'] = $goods->goods_classify;
             }
         }
 
@@ -143,13 +145,15 @@ class WholeController extends Curd
             },
             'memberInfo',
             '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');
+            '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();
+
+        $express = OrderExpress::where('join_express_order_id', $orderId)->first();
         foreach ($orderSheet as &$item) {
             $item['goods']['goods_cover'] = getenv('STORAGE_DOMAIN') . $item['goods']['goods_cover'];
             if (!empty($item['goods']) && $item['goods']['goods_classify'] == 'PACKAGE') {
@@ -175,10 +179,10 @@ 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);
+            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)) {
@@ -187,19 +191,67 @@ class WholeController extends Curd
                                 $skuName = $skuName . ' ' . $skuSpecs . ';';
                             }
                         }
-                        $item['skus'][$k]['goods_sku_title'] = rtrim($skuName,';');
+                        $item['skus'][$k]['goods_sku_title'] = rtrim($skuName, ';');
+                    }
+
+                }
+
+            }
+            if ($item['goods']['goods_classify'] == 'SERVICE') {
+                $benifit = MemberBenefit::where('join_benefit_member_id', $item['join_sheet_member_id'])
+                    ->where('join_benefit_goods_id', $item['goods']['goods_id'])
+                    ->first();
+                $item['benefit'] = [
+                    'total' => intval($benifit->member_benefit_limit_count),
+                    'used' => intval($benifit->member_benefit_used_count),
+                    'cut' => $benifit->member_benefit_limit_count - $benifit->member_benefit_used_count,
+                ];
+                $appontments = Appointment::where('join_appointment_member_benefit_id', $benifit->member_benefit_id)
+//                    ->where('appointment_status', 'DONE')
+                    ->select('appointment_id', 'appointment_done_datetime', 'appointment_done_json')
+                    ->get()
+                    ->toArray();
+                $item['appontment'] = [];
+                foreach ($appontments as $appontment) {
+                    $doneJson = [];
+                    $username = '';
+                    if (!empty($appontment['appointment_done_json'])) {
+                        $doneJson = json_decode($appontment['appointment_done_json'], true);
+                        if (isset($doneJson['charge'])) {
+                            $username = SysUser::where('user_id', $doneJson['charge']['charge_user_id'])->value('user_name');
+                        }
+                    }
+                    $item['appontment'][] = [
+                        'member' => ($item['cert']['member_cert_name'] ? $item['cert']['member_cert_name'] . '-' : '') . $item['member']['member_mobile'],
+                        'goods_name' => $item['goods']['goods_name'],
+                        'premisses' => isset($doneJson['charge']) ? $doneJson['charge']['charge_premises'] : '',
+                        'username' => $username,
+                        'nbr' => 1,
+                        'done_time' => $appontment['appointment_done_datetime']
+                    ];
+                }
+            }
+            if (!empty($item['order_sheet_extend_json']) && !$express) {
+                $extendJson = json_decode($item['order_sheet_extend_json'], true);
+                if (isset($extendJson['address_id'])) {
+                    $address = ClientConfig::where('client_config_id', $extendJson['address_id'])->first();
+                    if (!empty($address)) {
+                        $valJson = json_decode($address->client_config_val_json, true);
+                        $express = [
+                            'order_express_address' => $valJson['address'] . ($valJson['numbers'] ?? ''),
+                            'order_express_city' => $valJson['city'],
+                            'order_express_mobile' => $valJson['mobile'],
+                            'order_express_person' => $valJson['person']
+                        ];
                     }
-                    
                 }
-                
             }
         }
 
         $order = Order::where('order_id', $orderId)->first();
-        $payDetail = PayDetail::where('join_pay_order_id',$order->order_groupby)
-            ->select('pay_id','pay_category')
+        $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,
@@ -214,7 +266,7 @@ class WholeController extends Curd
     {
         $params = $request->post();
 
-        try{
+        try {
             Db::beginTransaction();
 
             // 修改主订单
@@ -223,7 +275,7 @@ class WholeController extends Curd
             Db::commit();
 
             return json_success('修改订单成功');
-        }catch(\Exception $e){
+        } catch (\Exception $e) {
             Db::rollBack();
             return json_fail('修改订单失败');
         }
@@ -236,19 +288,19 @@ class WholeController extends Curd
         try {
             Db::beginTransaction();
 
-            $order = Order::where('order_id',$params['order_id'])
-                ->where('order_category','SYSTEM')
-                ->whereIn('order_status_system',['WAITING','SENDING'])
+            $order = Order::where('order_id', $params['order_id'])
+                ->where('order_category', 'SYSTEM')
+                ->whereIn('order_status_system', ['WAITING', 'SENDING'])
                 ->first();
-            if(!$order){
+            if (!$order) {
                 return json_fail('订单异常');
             }
 
-            $payDetail = PayDetail::where('join_pay_order_id',$order->order_groupby)->first();
+            $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')
+            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;
@@ -257,16 +309,16 @@ class WholeController extends Curd
             // 删支付记录
             $payDetail->delete();
             // 删收货信息
-            OrderExpress::where('join_express_order_id',$params['order_id'])->delete();
+            OrderExpress::where('join_express_order_id', $params['order_id'])->delete();
             // 删订单详情
-            OrderSheet::where('join_sheet_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){
+        } catch (\Exception $e) {
             dump($e->getMessage());
             Db::rollBack();
 
@@ -313,7 +365,7 @@ class WholeController extends Curd
 
             $writeOffDate = [];
             // 服务已完成,生成核销数据
-            if($params['order_status_system'] == 'DONE' && in_array($goods['goods_classify'],['SERVICE','PACKAGE'])){
+            if ($params['order_status_system'] == 'DONE' && in_array($goods['goods_classify'], ['SERVICE', 'PACKAGE'])) {
                 $writeOffDate = OrderService::generateWriteOffData($params);
             }
 
@@ -322,14 +374,14 @@ class WholeController extends Curd
             $params['benefitId'] = 'BF' . date('YmdHis') . random_string(6, 'up');
 
             // 配送方式
-            if($params['delivery'] == 'PICKUP'){ // 自提
+            if ($params['delivery'] == 'PICKUP') { // 自提
                 $params['order_express_json'] = json_encode([
-                    'express'=>'S',
-                    'premises'=>$params['dept_premises_id']
+                    'express' => 'S',
+                    'premises' => $params['dept_premises_id']
                 ]);
-            }else if($params['delivery'] == 'LOGISTICS'){
+            } else if ($params['delivery'] == 'LOGISTICS') {
                 $params['order_express_json'] = json_encode([
-                    'express'=>'Y',
+                    'express' => 'Y',
                 ]);
             }
 
@@ -340,9 +392,9 @@ class WholeController extends Curd
             // 支付记录
             $this->insertPayDetail($params);
 
-            
-            $params['order_express_goods'] = json_encode(['sheet'=>[$sheetId]]);
-            if($params['delivery'] == 'LOGISTICS'){
+
+            $params['order_express_goods'] = json_encode(['sheet' => [$sheetId]]);
+            if ($params['delivery'] == 'LOGISTICS') {
                 // 入配送
                 $this->saveExpress($params);
             }
@@ -352,7 +404,7 @@ class WholeController extends Curd
                 for ($i = 0; $i < intval($params['order_sheet_num']); $i++) {
                     $params['appointmentId'] = 'AP' . date('YmdHis') . random_string(6, 'up');
                     // 入预约记录
-                    $this->insertAppointment($params,$writeOffDate);
+                    $this->insertAppointment($params, $writeOffDate);
                 }
                 $goods['skuId'] = $params['join_sheet_goods_sku_id'];
                 $goods['category'] = 'SERVICE';
@@ -378,7 +430,7 @@ class WholeController extends Curd
                     for ($i = 0; $i < intval($params['order_sheet_num']); $i++) {
                         $params['appointmentId'] = 'AP' . date('YmdHis') . random_string(8, 'up');
                         // 入预约记录
-                        $this->insertAppointment($params,$writeOffDate);
+                        $this->insertAppointment($params, $writeOffDate);
                     }
                     $goods['goods_id'] = $component['join_component_goods_id'];
                     $goods['goods_name'] = $component['goods']['goods_name'];
@@ -458,7 +510,7 @@ class WholeController extends Curd
                 'order_sheet_price' => $params['order_sheet_price'],
                 'order_sheet_amount' => $params['order_sheet_amount'],
                 'order_sheet_pay' => $params['order_sheet_pay'],
-                'order_sheet_remark'=>$params['order_remark'] ?? '',
+                'order_sheet_remark' => $params['order_remark'] ?? '',
                 'order_sheet_addtimes' => time()
             ];
             return OrderSheet::insertGetId($data);
@@ -487,7 +539,7 @@ class WholeController extends Curd
                 'pay_amount' => $params['order_sheet_pay'],
                 'pay_prepayid' => 0,
                 'pay_paytimes' => date('Y-m-d H:i:s'),
-                'pay_remark'=>$params['order_remark'] ?? '',
+                'pay_remark' => $params['order_remark'] ?? '',
                 'pay_addtimes' => time()
             ];
 
@@ -506,7 +558,7 @@ class WholeController extends Curd
      * @return void
      * @throws BusinessException
      */
-    public function insertAppointment($params,$writeOffDate)
+    public function insertAppointment($params, $writeOffDate)
     {
         try {
             $data = [
@@ -520,7 +572,7 @@ class WholeController extends Curd
                 'appointment_status' => $params['order_status_system'] == 'DONE' ? 'DONE' : 'INIT',
                 'appointment_category' => 'NORMAL',
                 'appointment_addtimes' => time(),
-                'appointment_done_datetime'=>$params['order_status_system'] == 'DONE' ? date('Y-m-d H:i:s') : '',
+                'appointment_done_datetime' => $params['order_status_system'] == 'DONE' ? date('Y-m-d H:i:s') : '',
                 'appointment_remark' => $params['order_remark'] ?? '',
                 'appointment_done_json' => $params['order_status_system'] == 'DONE' && $writeOffDate ? json_encode($writeOffDate) : '[]'
             ];
@@ -571,24 +623,24 @@ 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_goods'] = json_encode(['sheet' => [$params['sheet_id']]]);
+        if ($params['delivery'] == 'PICKUP') { // 自提
             $params['order_express_json'] = json_encode([
-                'express'=>'S',
-                'premises'=>$params['dept_premises_id']
+                'express' => 'S',
+                'premises' => $params['dept_premises_id']
             ]);
-        }else if($params['delivery'] == 'LOGISTICS'){
+        } else if ($params['delivery'] == 'LOGISTICS') {
             $params['order_express_json'] = json_encode([
-                'express'=>'Y',
+                '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){
+        try {
+            Order::where('order_id', $params['order_id'])->update(['order_express_json' => $params['order_express_json']]);
+        } catch (\Exception $e) {
             throw new BusinessException('修改订单失败');
         }
     }
@@ -598,34 +650,34 @@ class WholeController extends Curd
         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();
             // 订单包含的产品
             // $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){
+            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_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'
+                    'order_status_system' => 'CONFIRM',
+                    'order_status_storage' => 'EXPRESSING'
                 ];
 
                 // 7天后自动完成
@@ -634,47 +686,47 @@ class WholeController extends Curd
                 $redis->sadd($key, $params['order_id']);
 
                 $model = new OrderExpress();
-            }else{
+            } else {
                 $orderData = [
-                    'order_status_system'=>'RECVING',
-                    'order_status_storage'=>'EXPRESSING'
+                    '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();
+                $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'];
-            if (isset($params['order_express_goods'])){
+            if (isset($params['order_express_goods'])) {
                 $model->order_express_goods = $params['order_express_goods'];
             }
-            if (isset($params['order_express_type'])){
+            if (isset($params['order_express_type'])) {
                 $model->order_express_type = $params['order_express_type'];
             }
-            if (isset($params['order_express_code'])){
+            if (isset($params['order_express_code'])) {
                 $model->order_express_code = $params['order_express_code'];
             }
-            if (isset($params['order_express_city'])){
+            if (isset($params['order_express_city'])) {
                 $model->order_express_city = $params['order_express_city'];
             }
-            if (isset($params['order_express_address'])){
+            if (isset($params['order_express_address'])) {
                 $model->order_express_address = $params['order_express_address'];
             }
-            if (isset($params['order_express_mobile'])){
+            if (isset($params['order_express_mobile'])) {
                 $model->order_express_mobile = $params['order_express_mobile'];
             }
-            if (isset($params['order_express_telephone'])){
+            if (isset($params['order_express_telephone'])) {
                 $model->order_express_telephone = $params['order_express_telephone'];
             }
-            if (isset($params['order_express_person'])){
+            if (isset($params['order_express_person'])) {
                 $model->order_express_person = $params['order_express_person'];
             }
             $model->order_express_remark = $params['order_express_remark'] ?? null;
@@ -691,7 +743,8 @@ class WholeController extends Curd
         }
     }
 
-    public function writeOff(Request $request){
+    public function writeOff(Request $request)
+    {
         $memberId = $request->post('member_id', '');
         $benefitId = $request->post('benefit_id', '');
         $nbr = $request->post('nbr');
@@ -728,10 +781,10 @@ class WholeController extends Curd
             // 减额度
             $benefit->member_benefit_used_count = $benefit->member_benefit_used_count + $nbr;
             // 用完了
-            if($benefit->member_benefit_limit_count <= $benefit->member_benefit_used_count){
+            if ($benefit->member_benefit_limit_count <= $benefit->member_benefit_used_count) {
                 $benefit->member_benefit_status = 'DONE';
-                if(!empty($benefit->join_benefit_order_id)){
-                    Order::where('order_id',$benefit->join_benefit_order_id)->update(['order_status_system'=>'DONE']);
+                if (!empty($benefit->join_benefit_order_id)) {
+                    Order::where('order_id', $benefit->join_benefit_order_id)->update(['order_status_system' => 'DONE']);
                 }
             }
 
@@ -739,7 +792,7 @@ class WholeController extends Curd
             // 记录核销
             $params = [
                 'dept_premises_id' => $request->post('dept_premises_id'),
-                'order_remark'=>$request->post('remark'),
+                'order_remark' => $request->post('remark'),
                 'write_off_member_id' => $request->post('write_off_member_id'),
                 'join_order_member_id' => $memberId
             ];
@@ -826,8 +879,9 @@ class WholeController extends Curd
         return json_success('', ['order' => $sheet, 'appointment' => $appointments]);
     }
 
-    public function saveExpress($params){
-        try{
+    public function saveExpress($params)
+    {
+        try {
             $express = new OrderExpress();
             $express->join_express_order_id = $params['orderId'];
             $express->order_express_goods = $params['order_express_goods'];
@@ -837,7 +891,7 @@ class WholeController extends Curd
             $express->order_express_person = $params['order_express_person'];
             $express->order_express_addtimes = time();
             $express->save();
-        }catch(\Exception $e){
+        } catch (\Exception $e) {
             dump($e->getMessage());
             throw new BusinessException('物流信息保存失败');
         }

+ 23 - 0
app/model/ClientConfig.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace app\model;
+
+use support\Model;
+
+class ClientConfig extends Model
+{
+    protected $table = 'client_config';
+
+    protected $primaryKey = 'client_config_id';
+
+    protected $dateFormat = 'U';
+
+    const CREATED_AT = 'client_config_addtimes';
+
+    const UPDATED_AT = null;
+
+    public function serializeDate(\DateTimeInterface $date)
+    {
+        return $date->format('Y-m-d H:i:s');
+    }
+}