request->param('site_id', ''); $site_name = Site::where('site_id', $site_id)->value('site_name');//获取站点信息 //获取微信公众号id $we_chat_pay_app_id = Config::where('site_id', $site_id)->value('we_chat_pay_app_id'); $res = [ 'site_id' => $site_id, 'site_name' => $site_name, 'we_chat_pay_app_id' => $we_chat_pay_app_id, ]; return success($res); } //获取用户信息 public function getUser() { $site_id = $this->request->param('site_id', ''); $role = $this->request->param('role', '');//身份//wx=微信 zfb=支付宝 $openid = $this->request->param('openid', ''); if (!$site_id || !in_array($role, ['wx', 'zfb']) || !$openid) { return fail('确少参数'); } $user = User::where('site_id', $site_id); if ($role == 'wx') { $user = $user->where('wx_openid', $openid); } else { $user = $user->where('zfb_openid', $openid); } $user = $user->find(); //创建用户 if (!$user) { if ($role == 'wx') { $wx_openid = $openid; $name = "微信用户{$openid}"; } else { $zfb_openid = $openid; $name = "微信用户{$openid}"; } $data = [ 'name' => $name, 'site_id' => $site_id, 'wx_openid' => $wx_openid ?? null, 'zfb_openid' => $zfb_openid ?? null, 'is_show' => 1, 'pid' => 0, 'level' => 1, ]; $user_data = User::create($data); $res = [ 'user_id' => $user_data['id'] ]; } else { $res = [ 'user_id' => $user['id'] ]; } return success($res); } //获取用户拥有的优惠券 public function getUserCoupons() { $user_id = $this->request->param('user_id', ''); $site_id = $this->request->param('site_id', ''); $original_price = $this->request->param('original_price', '');//订单总金额 if (!$user_id || !$site_id) { return fail('确少参数'); } $time = time(); $data = UserCoupons::where('site_id', $site_id) ->where('user_id', $user_id) ->where('is_show', 1)//是否可用1=是,0=否 ->with([ 'coupons' => function ($q) use ($original_price) { $q->where('is_obsolete', 0); } ]) ->select()->toArray(); $userCoupons = []; foreach($data as $v){ if (!empty($v['coupons'])){ if ($v['coupons']['is_long_term_valid'] == 1){ //长期有效 $userCoupons[] = [ 'id'=>$v['id'], 'name'=>"{$v['coupons']['name']}(长期有效)", 'nominal_value'=>$v['coupons']['nominal_value'] ?? 0, 'coupons'=>$v['coupons'] ?? [], ]; }elseif($v['coupons']['valid_from'] <= $time && $v['coupons']['valid_until'] >= $time){ //在有效期之内 $data_1 = date('Y-m-d',$v['coupons']['valid_from']); $data_2 = date('Y-m-d',$v['coupons']['valid_until']); $userCoupons[] = [ 'id'=>$v['id'], 'name'=>"{$v['coupons']['name']}({$data_1}~{$data_2})", 'nominal_value'=>$v['coupons']['nominal_value'] ?? 0, 'coupons'=>$v['coupons'] ?? [], ]; } } } if ($userCoupons){ // 定义自定义排序函数 // 使用匿名函数作为回调函数进行排序 usort($userCoupons, function($a, $b) { return $b['coupons']['nominal_value'] - $a['coupons']['nominal_value']; }); } return success($userCoupons); } //获取可领取的优惠券 public function getReceiveCouponsList() { $site_id = $this->request->param('site_id', ''); $data = Coupons::where('site_id', $site_id) ->where('stock', '>', 0) ->where('is_show', 1) ->select(); $res = $data->toArray(); return success($res); } //创建订单 public function addOrder() { $site_id = $this->request->param('site_id', ''); $user_id = $this->request->param('user_id', ''); $pay_type = $this->request->param('pay_type', ''); $original_price = $this->request->param('original_price', '');//订单总价格 $user_coupons_id = $this->request->param('user_coupons_id', '');//用户优惠券中间表id $original_price = bcmul($original_price,1,2); if (!$site_id || !$user_id || !in_array($pay_type, [1, 2, 3, 4, 5, 6, 7, 8]) || !$original_price) { return fail('缺少参数'); } $order_num = time() . rand(1111, 9999); $price = $original_price; //计算优惠劵 if ($user_coupons_id) { $user_coupons = UserCoupons::where('id', $user_coupons_id) ->where('is_show',1) ->with(['coupons']) ->find(); if (empty($user_coupons['coupons']) || $user_coupons['coupons']['is_obsolete'] != 0){ return fail('优惠券信息不存在'); } if ($user_coupons['coupons']['is_long_term_valid'] != 1){ //不是长期有效 $time = time(); if ($user_coupons['coupons']['valid_from'] > $time || $user_coupons['coupons']['valid_until'] < $time){ return fail('优惠券已过期'); } } //判断优惠券面值是否大于支付面值 if ($user_coupons['coupons']['nominal_value'] >= $original_price){ return fail("优惠券面值需要小于{$original_price}"); } $price = $original_price - $user_coupons['coupons']['nominal_value']; if ($price <= 0) { return fail("满减后或支付金额不能为0元"); } } $create_data = [ 'site_id' => $site_id,// 'user_id' => $user_id,// 'order_num' => $order_num,// 'pay_type' => $pay_type,// 'original_price' => $original_price,//订单原价(元)|优惠前的金额 'price' => $price,//订单应付金额(元)|(优惠后的金额)精确到`分` 'user_coupons_id' => $user_coupons['id'],//用户优惠券中间表id ]; Db::startTrans(); try { $res = TransactionHistory::create($create_data); Db::commit(); } catch (\Exception $exception) { Db::rollback(); return fail('系统繁忙'); } if ($res) { return success($res->toArray()); } else { return fail('系统繁忙'); } } //获取广告列表 public function getAdvertising() { $site_id = $this->request->param('site_id', '');//站点id if (!$site_id) { return fail('缺少参数'); } $field = 'id,img_url,skip_url,sort,site_id'; $res = Advertising::order('sort', 'desc') ->field($field) ->where('site_id', $site_id) ->select() ->toArray(); if ($res) { foreach ($res as &$v) { if ($v['img_url']) { $v['img_url'] = get_file_url($v['img_url']); } } } return success($res); } }