Browse Source

核销加备注

gorden 6 months ago
parent
commit
897830dfa1

+ 109 - 50
app/admin/controller/member/WriteOffController.php

@@ -3,7 +3,9 @@
 namespace app\admin\controller\member;
 
 use app\controller\Curd;
+use app\model\Appointment;
 use app\model\MemberBenefit;
+use app\model\MemberQuota;
 use app\model\RuleAddedComponent;
 use app\model\SysUser;
 use support\Db;
@@ -20,55 +22,54 @@ class WriteOffController extends Curd
     {
         $page = $request->get('page', 1);
         $pageSize = $request->get('pageSize', 50);
-        $keywords = $request->get('keywords','');
-        $userId = $request->get('user_id','');
-        $premises = $request->get('premises','');
-        $date = $request->get('date',[]);
+        $keywords = $request->get('keywords', '');
+        $userId = $request->get('user_id', '');
+        $premises = $request->get('premises', '');
+        $date = $request->get('date', []);
 
         $appointmentList = Db::table('appointment')
-            ->leftJoin('member','member.member_id' ,'=','appointment.join_appointment_member_id')
-            ->leftJoin('member_cert','member_cert.join_cert_member_id' ,'=','appointment.join_appointment_member_id')
-            ->select('appointment.appointment_id as quota_id', 'appointment.join_appointment_member_id as member_id','appointment.appointment_classify as classify', 'appointment.appointment_done_json as used_json', 'appointment.appointment_done_datetime as used_time','appointment.join_appointment_member_benefit_id as benefit_id',
-                'member.member_mobile','member_cert.member_cert_name'
+            ->leftJoin('member', 'member.member_id', '=', 'appointment.join_appointment_member_id')
+            ->leftJoin('member_cert', 'member_cert.join_cert_member_id', '=', 'appointment.join_appointment_member_id')
+            ->select('appointment.appointment_id as quota_id', 'appointment.join_appointment_member_id as member_id', 'appointment.appointment_classify as classify', 'appointment.appointment_done_json as used_json', 'appointment.appointment_done_datetime as used_time', 'appointment.join_appointment_member_benefit_id as benefit_id',
+                'member.member_mobile', 'member_cert.member_cert_name','appointment_extend_json as extend_json'
             )
-            ->when($keywords != '',function($query) use ($keywords){
-                $query->where('member.member_mobile','like','%'.$keywords.'%');
-            })->when(!empty($date),function($query) use ($date){
-                $date[0] = date('Y-m-d',strtotime($date[0])).' 00:00:00';
-                $date[1] = date('Y-m-d',strtotime($date[1])). ' 23:59:59';
-                $query->whereBetween('appointment.appointment_done_datetime',$date);
+            ->when($keywords != '', function ($query) use ($keywords) {
+                $query->where('member.member_mobile', 'like', '%' . $keywords . '%');
+            })->when(!empty($date), function ($query) use ($date) {
+                $date[0] = date('Y-m-d', strtotime($date[0])) . ' 00:00:00';
+                $date[1] = date('Y-m-d', strtotime($date[1])) . ' 23:59:59';
+                $query->whereBetween('appointment.appointment_done_datetime', $date);
             })
-            ->when($userId != '',function($query) use ($userId){
-                $query->whereJsonContains('appointment.appointment_done_json->charge->charge_user_id',$userId);
+            ->when($userId != '', function ($query) use ($userId) {
+                $query->whereJsonContains('appointment.appointment_done_json->charge->charge_user_id', $userId);
             })
-            ->when($premises != '',function($query) use ($premises){
-                $query->whereJsonContains('appointment.appointment_done_json->charge->charge_premises',$premises);
+            ->when($premises != '', function ($query) use ($premises) {
+                $query->whereJsonContains('appointment.appointment_done_json->charge->charge_premises', $premises);
             })
             ->where('appointment_status', 'DONE');
         $quotaList = Db::table('member_quota')
-            ->leftJoin('member','member.member_id' ,'=','member_quota.join_quota_member_id')
-            ->leftJoin('member_cert','member_cert.join_cert_member_id' ,'=','member_quota.join_quota_member_id')
-            ->select('member_quota.member_quota_id as quota_id', 'member_quota.join_quota_member_id as member_id','member_quota.member_quota_category as classify', 'member_quota.member_quota_used_json as used_json', "member_quota.member_quota_extend_json->writeOffTime as used_time","member_quota.join_member_rule_added_component_id as benefit_id",
-                'member.member_mobile','member_cert.member_cert_name')
-                
-            ->when($keywords != '',function($query) use ($keywords){
-                $query->where('member.member_mobile','like','%'.$keywords.'%');
-            })->when(!empty($date),function($query) use ($date){
-                $date[0] = date('Y-m-d',strtotime($date[0])).' 00:00:00';
-                $date[1] = date('Y-m-d',strtotime($date[1])). ' 23:59:59';
-                $query->whereBetween('member_quota.member_quota_extend_json->writeOffTime',$date);
+            ->leftJoin('member', 'member.member_id', '=', 'member_quota.join_quota_member_id')
+            ->leftJoin('member_cert', 'member_cert.join_cert_member_id', '=', 'member_quota.join_quota_member_id')
+            ->select('member_quota.member_quota_id as quota_id', 'member_quota.join_quota_member_id as member_id', 'member_quota.member_quota_category as classify', 'member_quota.member_quota_used_json as used_json', "member_quota.member_quota_extend_json->writeOffTime as used_time", "member_quota.join_member_rule_added_component_id as benefit_id",
+                'member.member_mobile', 'member_cert.member_cert_name','member_quota_extend_json as extend_json')
+            ->when($keywords != '', function ($query) use ($keywords) {
+                $query->where('member.member_mobile', 'like', '%' . $keywords . '%');
+            })->when(!empty($date), function ($query) use ($date) {
+                $date[0] = date('Y-m-d', strtotime($date[0])) . ' 00:00:00';
+                $date[1] = date('Y-m-d', strtotime($date[1])) . ' 23:59:59';
+                $query->whereBetween('member_quota.member_quota_extend_json->writeOffTime', $date);
             })
-            ->when($userId != '',function($query) use ($userId){
-                $query->whereJsonContains('member_quota.member_quota_used_json->charge->charge_user_id',$userId);
+            ->when($userId != '', function ($query) use ($userId) {
+                $query->whereJsonContains('member_quota.member_quota_used_json->charge->charge_user_id', $userId);
             })
-            ->when($premises != '',function($query) use ($premises){
-                $query->whereJsonContains('member_quota.member_quota_used_json->charge->charge_premises',$premises);
+            ->when($premises != '', function ($query) use ($premises) {
+                $query->whereJsonContains('member_quota.member_quota_used_json->charge->charge_premises', $premises);
             })
             ->where('member_quota_status', 'USED')
             ->union($appointmentList);
-            $total = $quotaList->count('*');
+        $total = $quotaList->count('*');
 
-            $quotaList = $quotaList->orderBy('used_time', 'DESC')
+        $quotaList = $quotaList->orderBy('used_time', 'DESC')
             ->forPage($page, $pageSize)
             ->get();
 
@@ -78,23 +79,30 @@ class WriteOffController extends Curd
             $premises = '';
             $benefitName = '';
             if (!empty($item->used_json)) {
-                $usedJson = json_decode($item->used_json,true);
-                if (isset($usedJson['charge']) && isset($usedJson['charge']['charge_user_id'])){
-                    $username = SysUser::where('user_id',$usedJson['charge']['charge_user_id'])->value('user_name');
+                $usedJson = json_decode($item->used_json, true);
+                if (isset($usedJson['charge']) && isset($usedJson['charge']['charge_user_id'])) {
+                    $username = SysUser::where('user_id', $usedJson['charge']['charge_user_id'])->value('user_name');
                 }
-                if (isset($usedJson['charge']) && isset($usedJson['charge']['charge_premises'])){
+                if (isset($usedJson['charge']) && isset($usedJson['charge']['charge_premises'])) {
                     $premises = $usedJson['charge']['charge_premises'];
                 }
-                if (substr($item->quota_id,0,2) == 'AP'){
-                    $benefitName = MemberBenefit::where('member_benefit_id',$item->benefit_id)->value('member_benefit_name');
-                }elseif (substr($item->quota_id,0,2) == 'MQ'){
-                    $benefitName = RuleAddedComponent::where('rule_added_component_id',$item->benefit_id)->value('rule_added_component_name');
+                if (substr($item->quota_id, 0, 2) == 'AP') {
+                    $benefitName = MemberBenefit::where('member_benefit_id', $item->benefit_id)->value('member_benefit_name');
+                } elseif (substr($item->quota_id, 0, 2) == 'MQ') {
+                    $benefitName = RuleAddedComponent::where('rule_added_component_id', $item->benefit_id)->value('rule_added_component_name');
+                }
+            }
+            $remark = [];
+            if (!empty($item->extend_json)){
+                $extendJson = json_decode($item->extend_json,true);
+                if (isset($extendJson['remark'])){
+                    $remark = $extendJson['remark'];
                 }
             }
             $classify = "SERVICE";
-            if(substr($item->quota_id,0,2) == "MQ"){
+            if (substr($item->quota_id, 0, 2) == "MQ") {
                 $classify = "QUOTA";
-            }elseif(!empty($item->classify) && $item->classify == 'PACKAGE'){
+            } elseif (!empty($item->classify) && $item->classify == 'PACKAGE') {
                 $classify = "PACKAGE";
             }
             $rows[] = [
@@ -102,15 +110,66 @@ class WriteOffController extends Curd
                 'username' => $username,
                 'premises' => $premises,
                 'benefit_name' => $benefitName,
-                'used_time'=>$item->used_time,
-                'member_name' => $item->member_cert_name ?  $item->member_cert_name.'-' : '',
-                'member_mobile' => $item->member_mobile ?  $item->member_mobile : '',
-                'classify'=>$classify,
-                'nbr'=>1
+                'used_time' => $item->used_time,
+                'member_name' => $item->member_cert_name ? $item->member_cert_name : '',
+                'member_mobile' => $item->member_mobile ? $item->member_mobile : '',
+                'classify' => $classify,
+                'nbr' => 1,
+                'remark'=>$remark
             ];
 
         }
 
         return json_success('', compact('rows', 'page', 'pageSize', 'total'));
     }
+
+    /**
+     * @Desc 核销备注
+     * @Author Gorden
+     * @Date 2024/9/4 17:05
+     *
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function remark(Request $request)
+    {
+        $quotaId = $request->post('quota_id', '');
+        if (!$quotaId) {
+            return json_fail('参数异常');
+        }
+        $extendJson = [];
+        if (substr($quotaId, 0, 2) == 'AP') {
+            $appointment = Appointment::where('appointment_id', $quotaId)->first();
+            if (!empty($appointment->appointment_extend_json)) {
+                $extendJson = json_decode($appointment->appointment_extend_json, true);
+            }
+        } elseif (substr($quotaId, 0, 2) == 'MQ') {
+            $quota = MemberQuota::where('member_quota_id', $quotaId)->first();
+            if (!empty($quota->member_quota_extend_json)) {
+                $extendJson = json_decode($quota->member_quota_extend_json, true);
+            }
+        }
+        if (empty($appointment) && empty($quota)) {
+            return json_fail("数据异常");
+        }
+        try {
+            $extendJson['remark'] = [
+                'premises_id' => $request->post('premises_id', ''),
+                'premises_name' => $request->post('premises_name', ''),
+                'business' => $request->post('business', ''),
+                'service' => $request->post('service', '')
+            ];
+            if (!empty($appointment)){
+                $appointment->appointment_extend_json = json_encode($extendJson,JSON_UNESCAPED_UNICODE);
+                $appointment->save();
+            }elseif (!empty($quota)){
+                $quota->member_quota_extend_json = json_encode($extendJson,JSON_UNESCAPED_UNICODE);
+                $quota->save();
+            }
+
+            return json_success('success');
+        } catch (\Exception $e) {
+            return json_fail('备注保存失败');
+        }
+    }
 }

+ 14 - 3
app/admin/controller/order/WholeController.php

@@ -512,6 +512,9 @@ class WholeController extends Curd
                 if (isset($orderExtendJson['cancel_times'])) {
                     $order->cancel_times = $orderExtendJson['cancel_times'];
                 }
+                if (isset($orderExtendJson['free_remark'])) {
+                    $order->free_remark = $orderExtendJson['free_remark'];
+                }
             }
             $discount = ['coupon_name' => '', 'classify' => '', 'value' => 0];
             if (!empty($order->order_discount_json)) {
@@ -4306,7 +4309,7 @@ class WholeController extends Curd
                 'order_status_system' => !empty($systemStatus) ? $systemStatus : self::$systemStatus[$item['order_status_system']],
                 'order_status_payment' => self::$paymentStatus[$item['order_status_payment']],
                 'pay_way' => $item['order_status_payment'] == 'SUCCESS' ? ($payWay ?? '') : '',
-                'pay_times' => $item['order_status_payment'] == 'SUCCESS' ? ($payTimes ?? '') : '',
+                'pay_times' => $item['order_status_payment'] == 'SUCCESS' || $item['order_status_payment'] == 'FREE' ? ($payTimes ?? '') : '',
                 'order_addtimes' => date('Y-m-d H:i:s', strtotime($item['order_addtimes'])),
             ];
         }
@@ -4402,8 +4405,9 @@ class WholeController extends Curd
     {
         $orderId = $request->post('order_id', '');
         $orderStatusPayment = $request->post('order_status_payment', '');
+        $freeRemark = $request->post('free_remark', '');
         $order = Order::where('order_id', $orderId)
-            ->select('order_id', 'order_groupby', 'order_status_payment', 'order_config_json', 'order_amount_total')
+            ->select('order_id', 'order_groupby', 'order_status_payment', 'order_config_json', 'order_amount_total', 'order_discount_json', 'order_extend_json')
             ->first();
         Db::beginTransaction();
         try {
@@ -4435,7 +4439,13 @@ class WholeController extends Curd
                     'coupon_detail_id' => ['免单'],
                     'coupon_classify_en' => ['free']
                 ];
+                $orderExtendJson = [];
+                if (!empty($order->order_extend_json)) {
+                    $orderExtendJson = json_decode($order->order_extend_json, true);
+                }
+                $orderExtendJson['free_remark'] = $freeRemark;
                 $order->order_discount_json = json_encode($orderDiscountJson, JSON_UNESCAPED_UNICODE);
+                $order->order_extend_json = json_encode($orderExtendJson, JSON_UNESCAPED_UNICODE);
                 $order->order_is_complete = 'Y';
                 $order->order_status_system = 'DONE';
                 $order->order_amount_pay = 0;
@@ -4536,6 +4546,7 @@ class WholeController extends Curd
         'PENDING' => "待支付",
         'CANCEL' => "取消支付",
         'SUCCESS' => "支付成功",
-        'AWAITING' => "挂账"
+        'AWAITING' => "挂账",
+        'FREE' => "免单"
     ];
 }

+ 1 - 0
route/admin.php

@@ -670,6 +670,7 @@ Route::group('/admin', function () {
         ]);
         Route::group('/writeOff',function(){
             Route::get('/list',[\app\admin\controller\member\WriteOffController::class,'list']);
+            Route::post('/remark',[\app\admin\controller\member\WriteOffController::class,'remark']);
         })->middleware([
             \app\middleware\AdminAuthCheck::class
         ]);