where(['id'=>$id])->visible([ 'id','title','image','start_time','end_time','type','equity_id', 'participant_num','origin_price','price','form_time_limit' ])->findOrEmpty()->toArray(); if(!empty($detail)){ $detail['price'] = explode(",",$detail['price']); $detail['participant_num'] = explode(",",$detail['participant_num']); } return $detail; } /** * @notes 拼团订单详情 */ public static function orderDetail($sn,$userId){ $detail = GroupOrder::where(['sn'=>$sn])->findOrEmpty()->toArray(); if(!empty($detail)){ $detail['activity'] = GroupActivity::with('goods')->where(['id'=>$detail['group_activity_id']])->findOrEmpty()->toArray(); $detail['users'] = GroupUserOrder::alias('a') ->leftJoin('user b','a.user_id=b.id') ->where(['a.sn'=>$sn,'a.status'=>1]) ->visible(['a.id','a.user_id','a.status','a.create_time','b.avatar','b.nickname']) ->select() ->toArray(); } return $detail; } /** * @notes 用户订单详情 */ public static function userOrderDetail($sn,$userId){ $detail = GroupUserOrder::where(['sn'=>$sn, 'user_id' => $userId])->findOrEmpty()->toArray(); return $detail; } /** * 提交订单 * @param array $params * @return array|false */ public static function submitOrder($params) { Db::startTrans(); try { // 订单位置是否在服务区内 $area = ServiceArea::serviceArea(['lon'=>$params['lon'],'lat'=>$params['lat']]); if (!$area) { throw new Exception('已超出服务区域!-1001'); } if(empty($params['mobile'])){ throw new Exception('请先补充您的联系方式后在提交订单'); } $is_join = GroupUserOrder::where('status','<>',4)->where(['group_activity_id' => $params['group_activity_id'], 'user_id' => $params['user_id']])->value('id'); if ($is_join) { throw new Exception('您已参加过该活动!'); } //校验拼团活动 if (empty($params['sn'])) { //新开团 $activity = GroupActivity::findOrEmpty($params['group_activity_id']); //活动详情 if ($activity->isEmpty()) { throw new Exception('拼团活动不存在!'); //拼团活动不存在 } //校验活动时间 if (time() < strtotime($activity['start_time'])) { throw new Exception('拼团活动未开始!'); //拼团活动未开始 } if (time() > strtotime($activity['end_time'])) { throw new Exception('拼团活动已结束!'); //拼团活动已结束 } $order_amount = explode(",",$activity['price'])[0]; //生成拼团单 $data = [ 'sn' => generate_sn(GroupOrder::class, 'sn'), 'group_activity_id' => $params['group_activity_id'], 'goods_id' => $activity['goods_id'], 'user_id' => $params['user_id'], 'origin_price' => $activity['origin_price'], 'price' => $order_amount, 'create_time' => time(), 'end_time' => time() + $activity['form_time_limit'] * 60, ]; $group_order = GroupOrder::create($data); } else { //加入已开的拼团单 $group_order = GroupOrder::where(['group_activity_id' => $params['group_activity_id'], 'sn' => $params['sn']])->findOrEmpty()->toArray(); if (empty($group_order)) { throw new Exception('拼团订单不存在!'); //拼团活动不存在 } if ($group_order['status'] != 0) { throw new Exception('拼团活动已结束!'); //拼团活动已结束 } if (strtotime($group_order['end_time']) < time()) { throw new Exception('拼团活动已结束!'); //拼团活动已结束 } if ($group_order['num'] >= 100) { throw new Exception('拼团人数已满!'); //拼团人数已满 } $order_amount = $group_order['price']; } //生成用户拼单订单 $data = [ 'sn' => $group_order['sn'], 'group_order_id' => $group_order['id'], 'group_activity_id' => $params['group_activity_id'], 'user_id' => $params['user_id'], 'real_name' => $params['real_name'], 'mobile' => $params['mobile'], 'address' => $params['address'], 'lon' => $params['lon'], 'lat' => $params['lat'], 'province' => $areas['province']??0, 'city' => $areas['city']??0, 'area_name' => $areas['area_name']??'', 'service_area_id' => $areas['id']??0, 'order_amount' => $order_amount, ]; $group_user_order = GroupUserOrder::create($data); Db::commit(); } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } return [ 'order_id' => (int)$group_user_order['id'], 'sn' => $group_order['sn'] ]; } /** * 取消订单 * @param $params * @return false|void */ public static function cancelOrder($params) { Db::startTrans(); try { $detail = GroupUserOrder::where([ 'user_id' => $params['user_id'], 'sn'=>$params['sn'] ])->file('id,status')->findOrEmpty()->toArray(); if(empty($detail)){ throw new Exception('订单不存在'); } if($detail['status'] == 1){ throw new Exception('已支付订单不能取消'); } if($detail['status'] != 0){ throw new Exception('当前订单不能取消'); } //将用户订单状态更新为已取消 GroupUserOrder::where('id',$detail['id'])->update(['status' => 4, 'pay_status' => 2]); Db::commit(); } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } }