gorden 8 месяцев назад
Родитель
Сommit
93fa7e643e

+ 184 - 0
app/admin/controller/order/WholeController.php

@@ -1097,6 +1097,110 @@ class WholeController extends Curd
         }
         }
     }
     }
 
 
+    
+    public function writeOffBenefit(Request $request)
+    {
+        $memberId = $request->post('member_id', '');
+        $benefitList = $request->post('benefitList', []);
+        $times = $request->post('times', '');
+        $code = $request->post('sms_code', '');
+
+        if (!$memberId || empty($benefitList)) {
+            return json_fail('参数异常');
+        }
+        $benefitIds = [];
+        foreach($benefitList as $benefit){
+            if(isset($benefit['nbr']) && intval($benefit['nbr']) > 0){
+                $benefitIds[] = $benefit['member_benefit_id'];
+            }
+        }
+        if(empty($benefitIds)){
+            return json_fail("请填写有效的核销数量");
+        }
+
+        // $member = Member::find($memberId);
+        // $mobile = $member->member_mobile;
+        // $key = "SMS:CODE:QUOTA:" . $mobile;
+        // $redisCode = Redis::get($key);
+        // if ($redisCode != $code) {
+        //     return json_fail("验证码错误,请重新输入");
+        // }
+        // Redis::del($key);
+
+        $benefits = MemberBenefit::whereIn('member_benefit_id', $benefitIds)
+            ->where('join_benefit_member_id', $memberId)
+            ->get()
+            ->toArray();
+
+        foreach($benefits as $benefit){
+            foreach($benefitList as $list){
+                if ($list['member_benefit_id'] == $benefit['member_benefit_id'] && intval($list['nbr'] > ($benefit['member_benefit_limit_count'] - $benefit['member_benefit_used_count']))){
+                    return json_fail('可核销数量不足');
+                }
+            }
+        }
+
+        if (!$times) {
+            $times = date('Y-m-d H:i:s');
+        } else {
+            $times = date('Y-m-d H:i:s', strtotime($times));
+        }
+
+        try {
+            Db::beginTransaction();
+            
+            // 核销数据
+            $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
+            ];
+            $writeOffData = OrderService::generateWriteOffData($params);
+
+            // 开始减额度
+            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']);
+                        // 用完了
+                        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']);
+                        }
+                        // 更新benefit 表
+                        MemberBenefit::where('member_benefit_id',$benefit['member_benefit_id'])->update(['member_benefit_used_count'=>$usedCount]);
+                        // 更新Appointment 表
+                        $appointments = Appointment::where('join_appointment_member_benefit_id', $benefit['join_benefit_order_id'])
+                            ->where('appointment_status', 'INIT')
+                            ->limit($list['nbr'])
+                            ->get();
+                        foreach ($appointments as $appointment) {
+                            Appointment::where('appointment_id', $appointment->appointment_id)->update([
+                                'appointment_status' => 'DONE',
+                                'appointment_datetime' => $times,
+                                'appointment_apply_datetime' => $times,
+                                'appointment_doing_datetime' => $times,
+                                'appointment_done_datetime' => $times,
+                                'appointment_done_json' => json_encode($writeOffData)
+                            ]);
+                        }
+                    }
+                }
+            }
+
+            
+            Db::commit();
+
+            _syslog("订单","核销成功");
+            return json_success('核销成功');
+        } catch (\Exception $e) {
+            dump($e->getMessage());
+            Db::rollBack();
+            _syslog("订单","核销失败");
+            return json_fail('核销失败');
+        }
+    }
+
     public function myOrder(Request $request)
     public function myOrder(Request $request)
     {
     {
         $page = $request->get('page',1);
         $page = $request->get('page',1);
@@ -1445,6 +1549,86 @@ class WholeController extends Curd
         return call_user_func([$this, $format_function], $items, $total);
         return call_user_func([$this, $format_function], $items, $total);
     }
     }
 
 
+    public function benefitList(Request $request)
+    {
+        $orderIds = $request->get('order_ids',[]);
+        if(empty($orderIds)){
+            return json_fail("请选择需要核销的订单");
+        }
+        $orders = order::whereIn('order_id',$orderIds)
+            ->with([
+                'benefit'=>function($query){
+                    $query->select('join_benefit_order_id','member_benefit_id','member_benefit_name','member_benefit_limit_count','member_benefit_used_count');
+                },
+                'member'=>function($query){
+                    $query->select('member_id','member_mobile');
+                },
+                // 'sheets'=>function($query){
+                //     $query->select('join_sheet_order_id','join_sheet_goods_id');
+                // }
+                // 'goods'=>function($query){
+                //     $query->select('goods_id','goods_name');
+                // }
+            ])
+            ->select('order_id','join_order_member_id','order_is_complete','order_status_system')
+            ->where("order_is_complete",'N')
+            ->where("order_category",'NORMAL')
+            ->orderBy('order_addtimes','DESC')
+            ->get()
+            ->toArray();
+        $memberId = array_unique(array_column($orders,'join_order_member_id'));
+        if(count($memberId) > 1){
+            return json_fail("不可同时核销多人订单");
+        }
+
+        $data = [];
+        foreach($orders as $order){
+            $orderOne = $order;
+            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']);
+                $benefit['unused'] = $benefit['member_benefit_limit_count'] - $benefit['member_benefit_used_count'];
+                $orderOne['benefit'] = $benefit;
+                $orderOne['member_benefit_id'] = $benefit['member_benefit_id'];
+                $data[] = $orderOne;
+            }
+        }
+        if(empty($data)){
+            return json_fail("您选择的产品没有可核销的服务");
+        }
+
+        return json_success('',$data);
+    }
+
+    public function chooseBenefitList(Request $request)
+    {
+        $benefitIds = $request->get('benefit_ids',[]);
+        $memberId = $request->get('member_id',[]);
+        if(empty($benefitIds)){
+            return json_fail('请选择需要核销的服务');
+        }
+        if(empty($memberId)){
+            return json_fail('没有会员信息,请联系管理员');
+        }
+
+        $benefits = MemberBenefit::whereIn('member_benefit_id',$benefitIds)
+            ->where('member_benefit_status','ACTIVED')
+            ->where('join_benefit_member_id',$memberId)
+            ->select('join_benefit_order_id','member_benefit_id','member_benefit_name','member_benefit_limit_count','member_benefit_used_count')
+            ->orderBy('member_benefit_addtimes','DESC')
+            ->get()
+            ->toArray();
+        foreach($benefits as &$benefit){
+            $benefit['member_benefit_limit_count'] = intval($benefit['member_benefit_limit_count']);
+            $benefit['member_benefit_used_count'] = intval($benefit['member_benefit_used_count']);
+            $benefit['unused'] = $benefit['member_benefit_limit_count'] - $benefit['member_benefit_used_count'];
+        }
+
+        $member = Member::where('member_id',$memberId)->select('member_id','member_mobile')->first()->toArray();
+
+        return json_success('',['benefits'=>$benefits,'member'=>$member]);
+    }
+
     protected function exportAfterQuery($items)
     protected function exportAfterQuery($items)
     {
     {
         $data = [];
         $data = [];

+ 30 - 0
app/admin/controller/sms/SmsController.php

@@ -108,6 +108,36 @@ class SmsController
         }
         }
 
 
 
 
+        return json_success('success');
+    }
+
+    
+    public function sendSmsCodeByWriteOff(Request $request)
+    {
+        $memberId = $request->post('member_id', '');
+        
+        try {
+            $member = Member::find($memberId);
+            $mobile = $member->member_mobile;
+
+            $code = random_string(6, 'number');
+            $key = self::KEY_PREFIX . 'WRITE_OFF:' . $mobile;
+            Redis::set($key, $code);
+            Redis::expire($key, 600);
+
+            Sms::app()->send($mobile, [
+                'template' => 'SMS_240865706',
+                'data' => [
+                    'code' => $code
+                ],
+            ]);
+
+        } catch (\Exception $e) {
+            dump($e->getMessage());
+            return json_fail("短信发送失败,请稍后重试");
+        }
+
+
         return json_success('success');
         return json_success('success');
     }
     }
 }
 }

+ 4 - 0
app/model/Order.php

@@ -56,4 +56,8 @@ class Order extends Model
     public function express(){
     public function express(){
         return $this->hasOne(OrderExpress::class, 'join_express_order_id','order_id');
         return $this->hasOne(OrderExpress::class, 'join_express_order_id','order_id');
     }
     }
+
+    public function benefit(){
+        return $this->hasMany(MemberBenefit::class,'join_benefit_order_id','order_id');
+    }
 }
 }

+ 4 - 0
app/model/OrderSheet.php

@@ -108,4 +108,8 @@ class OrderSheet extends Model
     {
     {
         return $this->hasOne(GoodsSku::class, 'goods_sku_id', 'join_sheet_goods_sku_id');
         return $this->hasOne(GoodsSku::class, 'goods_sku_id', 'join_sheet_goods_sku_id');
     }
     }
+    
+    public function benefit(){
+        return $this->hasMany(MemberBenefit::class,'join_benefit_order_id','join_sheet_order_id');
+    }
 }
 }

+ 4 - 0
route/admin.php

@@ -15,6 +15,7 @@ Route::group('/admin', function () {
     Route::group('/sms', function () {
     Route::group('/sms', function () {
         Route::post('/quotaWriteOffCode', [\app\admin\controller\sms\SmsController::class, 'sendSmsCodeByQuota']);
         Route::post('/quotaWriteOffCode', [\app\admin\controller\sms\SmsController::class, 'sendSmsCodeByQuota']);
         Route::post('/benefitWriteOffCode', [\app\admin\controller\sms\SmsController::class, 'sendSmsCodeByBenefit']);
         Route::post('/benefitWriteOffCode', [\app\admin\controller\sms\SmsController::class, 'sendSmsCodeByBenefit']);
+        Route::post('/writeOffCode', [\app\admin\controller\sms\SmsController::class, 'sendSmsCodeByWriteOff']);
     });
     });
     /* 鉴权 */
     /* 鉴权 */
     Route::group('/auth', function () {
     Route::group('/auth', function () {
@@ -810,6 +811,9 @@ Route::group('/admin', function () {
             Route::post('/doRefund', [\app\admin\controller\order\WholeController::class, 'doRefund']);
             Route::post('/doRefund', [\app\admin\controller\order\WholeController::class, 'doRefund']);
             Route::post('/writeOffDishes', [\app\admin\controller\order\WholeController::class, 'writeOffDishes']);
             Route::post('/writeOffDishes', [\app\admin\controller\order\WholeController::class, 'writeOffDishes']);
             Route::get('/exportOrder', [\app\admin\controller\order\WholeController::class, 'exportOrder']);
             Route::get('/exportOrder', [\app\admin\controller\order\WholeController::class, 'exportOrder']);
+            Route::get('/benefitList', [\app\admin\controller\order\WholeController::class, 'benefitList']);
+            Route::get('/chooseBenefitList', [\app\admin\controller\order\WholeController::class, 'chooseBenefitList']);
+            Route::post('/writeOffBenefit', [\app\admin\controller\order\WholeController::class, 'writeOffBenefit']);
         })->middleware([
         })->middleware([
             \app\middleware\AdminAuthCheck::class
             \app\middleware\AdminAuthCheck::class
         ]);
         ]);

+ 7 - 0
start.php

@@ -1,4 +1,11 @@
 #!/usr/bin/env php
 #!/usr/bin/env php
 <?php
 <?php
+// 允许所有域名进行访问
+header('Access-Control-Allow-Origin: *');
+// 允许的HTTP方法
+header('Access-Control-Allow-Methods: GET, POST, PUT');
+// 允许的头信息
+header('Access-Control-Allow-Headers: X-Requested-With, Content-Type');
+
 require_once __DIR__ . '/vendor/autoload.php';
 require_once __DIR__ . '/vendor/autoload.php';
 support\App::run();
 support\App::run();