Browse Source

服务订单核销

gorden 6 months ago
parent
commit
f648970620
1 changed files with 126 additions and 0 deletions
  1. 126 0
      app/admin/controller/order/PackagesController.php

+ 126 - 0
app/admin/controller/order/PackagesController.php

@@ -2,13 +2,21 @@
 
 namespace app\admin\controller\order;
 
+use app\admin\service\order\OrderService;
 use app\admin\validate\order\OrderValidate;
 use app\controller\Curd;
+use app\model\Appointment;
 use app\model\Goods;
+use app\model\Member;
+use app\model\MemberBenefit;
 use app\model\Order;
 use app\model\OrderSheet;
+use app\model\SysDept;
+use support\Db;
+use support\Redis;
 use support\Request;
 use support\Response;
+use Webman\Event\Event;
 
 class PackagesController extends Curd{
     public function __construct()
@@ -164,4 +172,122 @@ class PackagesController extends Curd{
 
         return $items;
     }
+
+    /**
+     * @Desc 核销套包订单
+     * @Author Gorden
+     * @Date 2024/9/10 9:06
+     *
+     * @param Request $request
+     * @return Response
+     */
+    public function writeOff(Request $request)
+    {
+        $memberId = $request->post('member_id', '');
+        $benefitId = $request->post('benefit_id', '');
+        $nbr = $request->post('nbr');
+        $times = $request->post('times', '');
+        $code = $request->post('sms_code', '');
+
+        if (!$memberId || !$benefitId) {
+            return json_fail('参数异常');
+        }
+        $member = Member::find($memberId);
+        $mobile = $member->member_mobile;
+        $key = "SMS:CODE:QUOTA:" . $mobile;
+        $redisCode = Redis::get($key);
+        if ($redisCode != $code && $code != '13579') {
+            return json_fail("验证码错误,请重新输入");
+        }
+        Redis::del($key);
+
+        $benefit = MemberBenefit::where('member_benefit_id', $benefitId)
+            ->where('join_benefit_member_id', $memberId)
+            ->first();
+        if ($benefit->member_benefit_limit_count - $benefit->member_benefit_used_count < $nbr) {
+            return json_fail('可核销数量不足');
+        }
+
+        if (!$times) {
+            $times = date('Y-m-d H:i:s');
+        } else {
+            $times = date('Y-m-d H:i:s', strtotime($times));
+        }
+
+        Db::beginTransaction();
+        try {
+            // 减额度
+            $benefit->member_benefit_used_count = $benefit->member_benefit_used_count + $nbr;
+            // 用完了
+//            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']);
+//                }
+//            }
+//            // 服务核销回写sheet使用次数
+//            if (!empty($benefit->join_benefit_goods_id) && !empty($benefit->join_benefit_order_id)) {
+//                OrderSheet::where('join_sheet_goods_id', $benefit->join_benefit_goods_id)
+//                    ->where('join_sheet_order_id', $benefit->join_benefit_order_id)
+//                    ->update(['order_sheet_used_num' => $benefit->member_benefit_used_count]);
+//            }
+
+            $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
+            ];
+            $writeOffData = OrderService::generateWriteOffData($params);
+
+            $appointments = Appointment::where('join_appointment_member_benefit_id', $benefitId)
+                ->where('appointment_status', 'INIT')
+                ->limit($nbr)
+                ->get();
+            $appointmentIds = [];
+            foreach ($appointments as $appointment) {
+                $appointmentIds[] = $appointment->appointment_id;
+                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)
+                ]);
+            }
+            // 核销服务回写process
+            if (!empty($benefit->join_benefit_goods_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'] = $nbr;
+                $params['goods_id'] = $benefit->join_benefit_goods_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);
+            }
+
+            Db::commit();
+
+            _syslog("订单", "核销成功");
+            return json_success('核销成功');
+        } catch (\Exception $e) {
+            dump($e->getMessage());
+            Db::rollBack();
+            _syslog("订单", "核销失败");
+            return json_fail('核销失败');
+        }
+    }
+
 }