where('pay_status', '=', 10); }else if ($postData["state_active"] == 20){ //已付款,进行中 $model = $model->where('order_status', '=', 10)->where('pay_status', '=', 20); }else if ($postData["state_active"] == 30){ //已完成 $model = $model->where('order_status', '=', 30); }else if ($postData["state_active"] == 40){ //已取消 $model = $model->where('order_status', '=', 20); } } if(!empty($postData["keyword"])){ $model = $model->where('project_name', 'like', '%' . trim($postData["keyword"]) . '%'); } if(empty($postData["product_type"])){ //获取需求订单 $model = $model->where('demand_user_id', '=', $user_id); }else{ //获取服务订单 $model = $model->where('supply_user_id', '=', $user_id); } $data = $model->with(['demanduser','supplyuser','project']) ->order(['create_time' => 'desc']) ->paginate($postData); return $data; } /** * 详情 */ public static function detail($id) { if (!$model = parent::detail($id)) { throw new BaseException(['msg' => '信息不存在']); } return $model; } /** * 提交 */ public function submit($user,$params) { $project_id=$params["project_id"]; $pay_type = $params["pay_type"]; //获取项目信息 $project = ProjectModel::detail($project_id); $order_price = $project["price"]; //获取抽成比例 $settlement = Setting::getItem('settlement'); $order_rate = empty($settlement["order_rate"]) ? 0 : $settlement["order_rate"]/100; $order_money = $project["price"]; if($order_rate > 0){ $order_money = $order_money - $order_money*$order_rate; } $project_type = $project["project_type"];//项目类型 if ($order_price == 0) { $pay_type = OrderPayTypeEnum::BALANCE; } if($project["user_id"] == $user["user_id"]){ $this->error = '创建失败'; return false; } if ($pay_type == OrderPayTypeEnum::BALANCE && $user['balance'] < $order_price) { $this->error = '用户余额不足,无法使用余额支付'; return false; } $data = [ 'demand_user_id' => empty($project["product_type"]) ? $project["user_id"] : $user["user_id"], 'supply_user_id' => !empty($project["product_type"]) ? $project["user_id"] : $user["user_id"], 'order_price' => $order_price, 'pay_price' => $order_price, 'pay_type' => $pay_type, 'project_id' => $project["project_id"], 'project_name' => $project["name"], 'project_type' => $project_type, 'money' => floor($order_money*100)/100, 'order_no' => $this->orderNo(), 'app_id' => self::$app_id ]; return $this->transaction(function () use ($data) { // 记录内容 $this->save($data); // 余额支付标记订单已支付 if ($data['pay_type'] == OrderPayTypeEnum::BALANCE) { $this->onPaymentByBalance($data['order_no']); } return $this['id']; }); } /** * 生成订单号 */ public function orderNo() { return OrderService::createOrderNo(); } /** * 余额支付标记订单已支付 */ public function onPaymentByBalance($orderNo) { // 获取订单详情 $PaySuccess = new ReleasePaySuccessService($orderNo); // 发起余额支付 return $PaySuccess->onPaySuccess(OrderPayTypeEnum::BALANCE); } /** * 构建支付请求的参数 */ public static function onOrderPayment($user, $order, $payType, $pay_source) { //如果来源是h5,首次不处理,payH5再处理 if ($pay_source == 'h5') { return []; } if ($payType == OrderPayTypeEnum::WECHAT) { return self::onPaymentByWechat($user, $order, $pay_source); } return []; } /** * 构建微信支付请求 */ protected static function onPaymentByWechat($user, $order, $pay_source) { return PaymentService::wechat( $user, $order["order_no"], OrderTypeEnum::RELEASE, $pay_source, $order["pay_price"], 0, ); } /** * 供应方创建订单,不需要支付 */ public function createOrder($user,$params) { $project_id=$params["project_id"]; $pay_type = 10; //获取项目信息 $project = ProjectModel::detail($project_id); $order_price = $project["price"]; //获取抽成比例 $settlement = Setting::getItem('settlement'); $order_rate = empty($settlement["order_rate"]) ? 0 : $settlement["order_rate"]/100; $order_money = $project["price"]; if($order_rate > 0){ $order_money = $order_money - $order_money*$order_rate; } $project_type = $project["project_type"];//项目类型 if($project["user_id"] == $user["user_id"]){ $this->error = '创建失败'; return false; } $data = [ 'demand_user_id' => empty($project["product_type"]) ? $project["user_id"] : $user["user_id"], 'supply_user_id' => !empty($project["product_type"]) ? $project["user_id"] : $user["user_id"], 'order_price' => $order_price, 'pay_price' => $order_price, 'pay_type' => $pay_type, 'project_id' => $project["project_id"], 'project_name' => $project["name"], 'project_type' => $project_type, 'money' => floor($order_money*100)/100, 'order_no' => $this->orderNo(), 'app_id' => self::$app_id ]; return $this->save($data); } /** * 完成 */ public function finish($params) { return $this->transaction(function () use ($params) { //给供应方发放金钱 (new SupplyUserModel())->where("user_id","=",$this["supply_user_id"])->inc("money",$this["money"])->update(); $data["order_status"] = 30; $data["evaluate_content"] = $params["evaluate_content"]; $data["server_score"] = $params["server_score"]; $data["score"] = empty($params["score"]) ? 10 : $params["score"]; $data["finish_time"] = time(); return $this->save($data); }); } /** * 取消订单 */ public function cancel($user) { if ($this['order_status'] == 30) { $this->error = '已完成不可取消'; return false; } //订单不能取消 if($this['order_status'] != 10){ $this->error = '该订单已取消'; return false; } // 订单取消事件 return $this->transaction(function () use ($user) { // 订单是否已支付 $isPay = $this['pay_status'] == 20; // 更新订单状态 return $this->save(['order_status' => $isPay ? 21 : 20]); }); } }