瀏覽代碼

核销加服务人员

gorden 5 月之前
父節點
當前提交
4107e2ba21

+ 55 - 8
app/admin/controller/member/BenefitController.php

@@ -8,11 +8,13 @@ use app\model\Appointment;
 use app\model\Member;
 use app\model\MemberBenefit;
 use app\model\Order;
+use app\model\SysDept;
 use app\model\SysUser;
 use support\Db;
 use support\exception\BusinessException;
 use support\Redis;
 use support\Request;
+use Webman\Event\Event;
 
 class BenefitController extends Curd
 {
@@ -123,7 +125,6 @@ class BenefitController extends Curd
         if ($redisCode != $code) {
             return json_fail("验证码错误,请重新输入");
         }
-        Redis::del($key);
 
         $benefit = MemberBenefit::where('member_benefit_id', $benefitId)
             ->where('join_benefit_member_id', $memberId)
@@ -141,19 +142,29 @@ class BenefitController extends Curd
         Db::beginTransaction();
         try {
             // 减额度
+            $benefitUsed = [];
+            $appointmentIds = [];
             $benefit->member_benefit_used_count = $benefit->member_benefit_used_count + $nbr;
+            if($benefit->member_benefit_used_count >= $benefit->member_benefit_limit_count){
+                $benefit->member_benefit_status = 'DONE';
+                if(!empty($benefit->join_benefit_order_id)){
+                    $benefitUsed[$benefit->join_benefit_order_id][] = $benefitId;
+//                    Order::where('order_id',$benefit->join_benefit_order_id)->update(['order_is_complete'=>'Y','order_status_system'=>'DONE']);
+                }
+            }
             $benefit->save();
             // 记录核销
             $params = [
-                'dept_premises_id' => $request->post('dept_premises_id'),
-                'order_remark'=>$request->post('remark'),
-                'write_off_member_id' => $request->post('write_off_member_id'),
-                'join_order_member_id' => $memberId
+                'dept_premises_id' => $request->post('dept_premises_id',''),
+                'order_remark'=>$request->post('remark',''),
+                'write_off_member_id' => $request->post('write_off_member_id',''),
+                'join_order_member_id' => $memberId,
+                'charge_waiter' => $request->post('charge_waiter'),
             ];
-            $writeOffData = OrderService::generateWriteOffDataByOrderProcess($params);
+            $writeOffData = OrderService::generateWriteOffData($params);
 
             $appointments = Appointment::where('join_appointment_member_benefit_id', $benefitId)
-                ->where('appointment_status', 'INIT')
+                ->whereIn('appointment_status', ['INIT','WAITING','PENDING','DOING'])
                 ->limit($nbr)
                 ->get();
             foreach ($appointments as $appointment) {
@@ -166,13 +177,49 @@ class BenefitController extends Curd
                     'appointment_done_json' => json_encode($writeOffData)
                 ]);
             }
+            // 订单服务是否用完了
+            foreach ($benefitUsed as $key => $item) {
+                $orderUsedComplete = 'Y';
+                $orderBenefits = MemberBenefit::where('join_benefit_order_id', $key)->get()->toArray();
+                foreach ($orderBenefits as $orderBenefit) {
+                    if ($orderBenefit['member_benefit_used_count'] >= $orderBenefit['member_benefit_limit_count']) {
+                        continue;
+                    }
+                    if (!in_array($orderBenefit['member_benefit_id'], $item)) {
+                        $orderUsedComplete = 'N';
+                    }
+                }
+                if ($orderUsedComplete == 'Y') {
+                    Order::where('order_id', $key)->update(['order_is_complete' => 'Y', 'order_status_system' => 'DONE']);
+                }
+            }
+
+            // 核销服务回写process
+            $dept = [];
+            if (!empty($request->post('dept_premises_id'))) {
+                $dept = SysDept::where('dept_id', $request->post('dept_premises_id'))
+                    ->orWhere('dept_name', $request->post('dept_premises_id'))
+                    ->select('dept_id', 'dept_name', 'dept_status', 'dept_category', 'dept_super_id', 'dept_super_path')
+                    ->first();
+            }
+            $params['charge_amount'] = $nbr;
+            $params['goods_id'] = !empty($benefit->join_benefit_goods_id) ? $benefit->join_benefit_goods_id : (!empty($benefit->join_benefit_package_id) ? $benefit->join_benefit_package_id : '');
+            $params['goods_sku_id'] = $benefit->join_benefit_goods_sku_id;
+            $params['order_id'] = $benefit->join_benefit_order_id;
+            $params['appointment_ids'] = $appointmentIds;
+            $params['dept'] = $dept;
+            $params['write_off_data'] = OrderService::generateWriteOffDataByOrderProcess($params);
+            // 触发事件
+            Event::dispatch('order.write_off', $params);
+
+            Redis::del($key);
 
             Db::commit();
 
             _syslog("核销","核销成功");
             return json_success('核销成功');
         } catch (\Exception $e) {
-            dump($e->getMessage());
+            dump($e->getMessage().$e->getLine());
             Db::rollBack();
             _syslog("核销","核销失败");
             return json_fail('核销失败');

+ 74 - 18
app/admin/controller/order/WholeController.php

@@ -44,7 +44,6 @@ use support\Response;
 use Tinywan\Jwt\JwtToken;
 use Webman\Event\Event;
 use Yansongda\Pay\Pay;
-use function Qiniu\Http\Middleware\compose;
 
 class WholeController extends Curd
 {
@@ -819,13 +818,17 @@ class WholeController extends Curd
 
         $systemStatus = 'SENDING';  // 待发货
         // 立即结算
-        if (in_array($params['goods_classify'], ['SERVICE', 'CHNMED', 'CHNNCD', 'MEALS', 'VIP'])) {
+        if (in_array($params['goods_classify'], ['MEALS', 'VIP'])) {
             $order->order_is_complete = 'Y';
             $systemStatus = 'DONE';
         }
-        if ($params['goods_classify'] == 'PACKAGE' && $params['delivery'] == 'ARRIVAL') {
+        if (in_array($params['goods_classify'], ['SERVICE', 'CHNMED', 'CHNNCD', 'PACKAGE']) && $params['delivery'] == 'ARRIVAL') {
+            $params['order_is_complete'] = 'N';
             $systemStatus = "WAITING";
         }
+//        if ($params['goods_classify'] == 'PACKAGE' && $params['delivery'] == 'ARRIVAL') {
+//            $systemStatus = "WAITING";
+//        }
         Db::beginTransaction();
         try {
             // 使用优惠券
@@ -1423,11 +1426,12 @@ class WholeController extends Curd
 
         $systemStatus = 'SENDING';  // 待发货
         // 立即结算
-        if (in_array($params['goods_classify'], ['SERVICE', 'CHNMED', 'CHNNCD', 'MEALS', 'VIP'])) {
+        if (in_array($params['goods_classify'], ['MEALS', 'VIP'])) {
             $order->order_is_complete = 'Y';
             $systemStatus = 'DONE';
         }
-        if ($params['goods_classify'] == 'PACKAGE' && $params['delivery'] == 'ARRIVAL') {
+        if (in_array($params['goods_classify'], ['SERVICE', 'CHNMED', 'CHNNCD', 'PACKAGE']) && $params['delivery'] == 'ARRIVAL') {
+            $params['order_is_complete'] = 'N';
             $systemStatus = "WAITING";
         }
         $payDetail = PayDetail::where('join_pay_order_id', $order->order_groupby)->first();
@@ -1989,11 +1993,12 @@ class WholeController extends Curd
             $systemStatus = 'SENDING';  // 待发货
             // 立即结算
             if ($params['settlement_now'] == 'Y') {
-                if (in_array($params['goods_classify'], ['SERVICE', 'CHNMED', 'CHNNCD', 'MEALS', 'VIP'])) {
+                if (in_array($params['goods_classify'], ['MEALS', 'VIP'])) {
                     $params['order_is_complete'] = 'Y';
                     $systemStatus = 'DONE';
                 }
-                if ($params['goods_classify'] == 'PACKAGE' && $params['delivery'] == 'ARRIVAL') {
+                if (in_array($params['goods_classify'], ['SERVICE', 'CHNMED', 'CHNNCD', 'PACKAGE']) && $params['delivery'] == 'ARRIVAL') {
+                    $params['order_is_complete'] = 'N';
                     $systemStatus = "WAITING";
                 }
             }
@@ -2365,7 +2370,7 @@ class WholeController extends Curd
             if ($params['order_status_payment'] == 'SUCCESS') {
                 foreach ($params['goodsContentList'] as $goods) {
                     $params['join_sheet_goods_id'] = $goods['goods_id'];
-                    if (isset($goods['goods_classify']) && in_array($goods['goods_classify'], ['SERVICE', 'CHNMED', 'CHNNCD'])) {
+                    if (isset($goods['goods_classify']) && in_array($goods['goods_classify'], ['SERVICE', 'CHNMED', 'CHNNCD']) && $params['delivery'] == 'ARRIVAL') {
                         $params['benefitId'] = 'BF' . date('ymdHi') . random_string(4, 'up');
                         $params['join_sheet_goods_sku_id'] = $goods['sku_id'];
                         $params['goods_id'] = $goods['goods_id'];
@@ -2380,7 +2385,7 @@ class WholeController extends Curd
                         $goods['category'] = $goods['goods_classify'];
                         // 权益表
                         $this->insertMemberBenefit($params, $goods);
-                    } elseif (isset($goods['goods_classify']) && $goods['goods_classify'] == 'PACKAGE') {  // 一个套餐买多个
+                    } elseif (isset($goods['goods_classify']) && $goods['goods_classify'] == 'PACKAGE' && $params['delivery'] == 'ARRIVAL') {  // 一个套餐买多个
                         $params['packageId'] = $goods['goods_id'];
                         $components = GoodsComponent::with([
                             'goods' => function ($query) {
@@ -2595,11 +2600,12 @@ class WholeController extends Curd
             $systemStatus = 'SENDING';  // 待发货
             // 立即结算
             if ($params['settlement_now'] == 'Y') {
-                if (in_array($params['goods_classify'], ['SERVICE', 'CHNMED', 'CHNNCD', 'MEALS', 'VIP'])) {
+                if (in_array($params['goods_classify'], ['MEALS', 'VIP'])) {
                     $params['order_is_complete'] = 'Y';
                     $systemStatus = 'DONE';
                 }
-                if ($params['goods_classify'] == 'PACKAGE' && $params['delivery'] == 'ARRIVAL') {
+                if (in_array($params['goods_classify'], ['SERVICE', 'CHNMED', 'CHNNCD', 'PACKAGE']) && $params['delivery'] == 'ARRIVAL') {
+                    $params['order_is_complete'] = 'N';
                     $systemStatus = "WAITING";
                 }
             }
@@ -2849,7 +2855,7 @@ class WholeController extends Curd
             if ($params['order_status_payment'] == 'SUCCESS') {
                 foreach ($params['goodsContentList'] as $goods) {
                     $params['join_sheet_goods_id'] = $goods['goods_id'];
-                    if (isset($goods['goods_classify']) && in_array($goods['goods_classify'], ['SERVICE', 'CHNMED', 'CHNNCD'])) {
+                    if (isset($goods['goods_classify']) && in_array($goods['goods_classify'], ['SERVICE', 'CHNMED', 'CHNNCD']) && $params['delivery'] == 'ARRIVAL') {
                         $params['benefitId'] = 'BF' . date('ymdHi') . random_string(4, 'up');
                         $params['join_sheet_goods_sku_id'] = $goods['sku_id'];
                         $params['goods_id'] = $goods['goods_id'];
@@ -2864,7 +2870,7 @@ class WholeController extends Curd
                         $goods['category'] = $goods['goods_classify'];
                         // 权益表
                         $this->insertMemberBenefit($params, $goods);
-                    } elseif (isset($goods['goods_classify']) && $goods['goods_classify'] == 'PACKAGE') {  // 一个套餐买多个
+                    } elseif (isset($goods['goods_classify']) && $goods['goods_classify'] == 'PACKAGE' && $params['delivery'] == 'ARRIVAL') {  // 一个套餐买多个
                         $params['packageId'] = $goods['goods_id'];
                         $components = GoodsComponent::with([
                             'goods' => function ($query) {
@@ -3793,27 +3799,34 @@ class WholeController extends Curd
                 'dept_premises_id' => $request->post('dept_premises_id'),
                 'order_remark' => $request->post('remark'),
                 'write_off_member_id' => $request->post('write_off_member_id'),
-                'join_order_member_id' => $memberId
+                'join_order_member_id' => $memberId,
+                'charge_waiter' => $request->post('charge_waiter'),
             ];
             $writeOffData = OrderService::generateWriteOffData($params);
 
             // 开始减额度
+            $benefitUsed = [];
+            $appointmentIds = [];
             foreach ($benefits as $benefit) {
                 foreach ($benefitList as $list) {
                     if ($list['member_benefit_id'] == $benefit['member_benefit_id']) {
                         $usedCount = $benefit['member_benefit_used_count'] + intval($list['nbr']);
+                        $benefitUpdateData = ['member_benefit_used_count' => $usedCount];
                         // 用完了
                         if ($benefit['member_benefit_limit_count'] <= $usedCount && !empty($benefit['join_benefit_order_id'])) {
-                            Order::where('order_id', $benefit['join_benefit_order_id'])->update(['order_status_system' => 'DONE']);
+                            $benefitUpdateData['member_benefit_status'] = 'DONE';
+                            $benefitUsed[$benefit['join_benefit_order_id']][] = $benefit['member_benefit_id'];
+//                            Order::where('order_id', $benefit['join_benefit_order_id'])->update(['order_status_system' => 'DONE']);
                         }
                         // 更新benefit 表
-                        MemberBenefit::where('member_benefit_id', $benefit['member_benefit_id'])->update(['member_benefit_used_count' => $usedCount]);
+                        MemberBenefit::where('member_benefit_id', $benefit['member_benefit_id'])->update($benefitUpdateData);
                         // 更新Appointment 表
                         $appointments = Appointment::where('join_appointment_member_benefit_id', $benefit['member_benefit_id'])
                             ->where('appointment_status', 'INIT')
                             ->limit(intval($list['nbr']))
                             ->get();
                         foreach ($appointments as $appointment) {
+                            $appointmentIds[] = $appointment->appointment_id;
                             Appointment::where('appointment_id', $appointment->appointment_id)->update([
                                 'appointment_status' => 'DONE',
                                 'appointment_datetime' => $times,
@@ -3826,6 +3839,46 @@ class WholeController extends Curd
                     }
                 }
             }
+            // 订单服务是否用完了
+            foreach ($benefitUsed as $key => $item) {
+                $orderUsedComplete = 'Y';
+                $orderBenefits = MemberBenefit::where('join_benefit_order_id', $key)->get()->toArray();
+                foreach ($orderBenefits as $orderBenefit) {
+                    if ($orderBenefit['member_benefit_used_count'] >= $orderBenefit['member_benefit_limit_count']) {
+                        continue;
+                    }
+                    if (!in_array($orderBenefit['member_benefit_id'], $item)) {
+                        $orderUsedComplete = 'N';
+                    }
+                }
+                if ($orderUsedComplete == 'Y') {
+                    Order::where('order_id', $key)->update(['order_is_complete' => 'Y', 'order_status_system' => 'DONE']);
+                }
+            }
+
+            // 核销服务回写process
+            foreach ($benefits as $benefit) {
+                foreach ($benefitList as $list) {
+                    if ($list['member_benefit_id'] == $benefit['member_benefit_id'] && (!empty($benefit['join_benefit_goods_id']) || !empty($benefit['join_benefit_package_id'])) && !empty($benefit['join_benefit_order_id'])) {
+                        $dept = [];
+                        if (!empty($params['dept_premises_id'])) {
+                            $dept = SysDept::where('dept_id', $params['dept_premises_id'])
+                                ->orWhere('dept_name', $params['dept_premises_id'])
+                                ->select('dept_id', 'dept_name', 'dept_status', 'dept_category', 'dept_super_id', 'dept_super_path')
+                                ->first();
+                        }
+                        $params['charge_amount'] = $list['nbr'];
+                        $params['goods_id'] = !empty($benefit['join_benefit_goods_id']) ? $benefit['join_benefit_goods_id'] : (!empty($benefit['join_benefit_package_id']) ? $benefit['join_benefit_package_id'] : '');
+                        $params['goods_sku_id'] = $benefit['join_benefit_goods_sku_id'];
+                        $params['order_id'] = $benefit['join_benefit_order_id'];
+                        $params['appointment_ids'] = $appointmentIds;
+                        $params['dept'] = $dept;
+                        $params['write_off_data'] = OrderService::generateWriteOffDataByOrderProcess($params);
+                        // 触发事件
+                        Event::dispatch('order.write_off', $params);
+                    }
+                }
+            }
 
             Redis::del($key);
 
@@ -3834,7 +3887,7 @@ class WholeController extends Curd
             _syslog("订单", "核销成功");
             return json_success('核销成功');
         } catch (\Exception $e) {
-            dump($e->getMessage());
+            dump($e->getMessage() . $e->getLine());
             Db::rollBack();
             _syslog("订单", "核销失败");
             return json_fail('核销失败');
@@ -4240,7 +4293,7 @@ class WholeController extends Curd
             ])
             ->select('order_id', 'join_order_member_id', 'order_is_complete', 'order_status_system')
             ->where("order_is_complete", 'N')
-            ->whereIn("order_category", ['NORMAL', 'SYSTEM'])
+//            ->whereIn("order_category", ['NORMAL', 'SYSTEM'])
             ->orderBy('order_addtimes', 'DESC')
             ->get()
             ->toArray();
@@ -4255,6 +4308,9 @@ class WholeController extends Curd
             foreach ($order['benefit'] as $benefit) {
                 $benefit['member_benefit_limit_count'] = intval($benefit['member_benefit_limit_count']);
                 $benefit['member_benefit_used_count'] = intval($benefit['member_benefit_used_count']);
+                if ($benefit['member_benefit_used_count'] >= $benefit['member_benefit_limit_count']) {
+                    continue;
+                }
                 $benefit['unused'] = $benefit['member_benefit_limit_count'] - $benefit['member_benefit_used_count'];
                 $orderOne['benefit'] = $benefit;
                 $orderOne['member_benefit_id'] = $benefit['member_benefit_id'];

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

@@ -185,6 +185,7 @@ class OrderService
                 'charge_content' => $params['order_remark'] ?? '',
                 'charge_user_id' => $params['write_off_member_id'],
                 'charge_premises' => $params['dept_premises_id'],
+                'charge_waiter' => $params['charge_waiter'] ?? ''
             ],
             'member_id' => $params['join_order_member_id']
         ];
@@ -204,6 +205,7 @@ class OrderService
             'charge' => [
                 'charge_amount' => $params['charge_amount'],
                 'charge_content' => $params['order_remark'] ?? '',
+                'charge_waiter' => $params['charge_waiter'] ?? '',
                 'charge_user_id' => $params['write_off_member_id'],
                 'charge_premises' => $params['dept_premises_id'],
                 'charge_premises_info' => $params['dept'] ?? ''

+ 1 - 0
route/admin.php

@@ -713,6 +713,7 @@ Route::group('/admin', function () {
             Route::get('/my', [\app\admin\controller\member\BenefitController::class, 'my']);
             Route::get('/service', [\app\admin\controller\member\BenefitController::class, 'service']);
             Route::post('/add', [\app\admin\controller\member\BenefitController::class, 'insert']);
+            Route::post('/writeOff', [\app\admin\controller\member\BenefitController::class, 'writeOff']);
             Route::post('/update', [\app\admin\controller\member\BenefitController::class, 'update']);
             Route::delete('/delete', [\app\admin\controller\member\BenefitController::class, 'delete']);
         })->middleware([