order("status asc,id asc")->paginate(['list_rows' => $limit, 'page' => $page])->each(function ($item) use ($type) { if ($item["status"] == 0) {// 未支付结算时间计算 if (time() > $item["add_time"]) { $item["stat_time"] = time() - $item["add_time"]; } else { $item["stat_time"] = 0; } } else { $item["stat_time"] = 0; } $item["image"]=$item["image"]?:""; // 添加时间 $item["add_times"] = date("Y-m-d H:i", $item["add_time"]); if ($item["end_time"]) { $item["end_time"] = date("Y-m-d H:i", $item["end_time"]); } return $item; })->toArray(); return $order; } /** 买入和卖出 * @param $user 用户数据 * @param $user_id 用户id * @param int $type 0 卖出 1 买入 * @param int $qit_id // 卖出传买入的id * @param int $ming_id // 买入传 区块id * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public static function push_order($user,$user_id,$type=0,$qit_id=0,$ming_id=0) { // todo 未完成卖出订单时间控制, // 查看用户是否添加收账信息 $userMeesage=UserMessage::where(["user_id"=>$user_id])->find(); if (!$userMeesage){ json_result(400,"请完善收账信息"); } if ($type==0){// 直接卖出 更新原有数据 $where["id"]=$qit_id; $order=Order::where($where)->find(); if (!$order){ json_result(400,"买入订单id错误"); } // 查看订单是否已经被买入 if ($order->status!=0){// 这个可以加入redis 控制并发问题 json_result(400,"该交易订单已经被卖出,或者取消"); } // 查看交易是否是自己的 if ($order->buy_user==$user_id){ json_result(400,"自己买入的订单不能卖出"); } // 查看矿区 $mining=Mining::where(["id"=>$order->mining_id])->find(); if ($user->money<$mining->tong_money){ json_result(400,"通证余额不足"); } if ($user->push_money<$order->number){ json_result(400,"可售额度不足"); } // 查看未完成订单 $where_status[]=["status","in",[0,1,2]]; $where_status[]=["push_user","=",$user_id]; $count_order=Order::where($where_status)->count(); // 查看该矿区交易次数 $order_frequency=OrderFrequency::where(["user_id"=>$user_id,"mining_id"=>$order->mining_id])->find(); if ($order_frequency){// 因为后台交易不加次数 $count_order=$order_frequency->push+$count_order; if ($count_order==5){ json_result(400,"每个区块只能卖出5次"); } }else{ if ($count_order==5){ json_result(400,"每个区块只能卖出5次"); } } if ($count_order+1==5){ $sxf_money=$order->out_game; if ($user->money<$order->out_game){ json_result(400,"通证余额不足"); } }else{ $sxf_money=$mining->tong_money; } // 订单处理 Orde::push_order($user,$qit_id,$user_id,$order,$count_order,$sxf_money); }else{// 下单买入 $where_ming["id"]=$ming_id; $mining=Mining::where($where_ming)->find(); if (!$mining){ json_result(400,"交易区块id错误"); } // 查看矿区 $mining=Mining::where(["id"=>$ming_id])->find(); if ($user->ensure_money<$mining->ensure_money){ json_result(400,"保证金不足"); } // 查看未完成订单 $where_status[]=["status","in",[0,1,2]]; $where_status[]=["buy_user","=",$user_id]; $count_order=Order::where($where_status)->count(); // 查看该矿区交易次数 $order_frequency=OrderFrequency::where(["user_id"=>$user_id,"mining_id"=>$ming_id])->find(); if ($order_frequency){// 因为后台交易不加次数 $count_order=$order_frequency->buy+$count_order; if ($count_order==4){ json_result(400,"每个区块只能买入4次"); } }else{ if ($count_order==4){ json_result(400,"每个区块只能买入4次"); } } // // 查看当前账号的通证是否满足 // if ($user->money<$mining["num"]){ // json_result(400,"当前账号通证不足"); // } $uuid = Uuid::uuid4(time()); $order = $uuid->getHex(); $add["type"]=0; $add["buy_user"]=$user_id; $add["push_user"]=""; $add["number"]=$mining["num"]; $add["enlarge_quota"]=$mining["enlarge_quota"]; $add["order"]=$order; $add["mining_id"]=$ming_id; $add["status"]=0; $add["add_time"]=time(); $add["out_game"]=$mining["out_game"]; $add["tong_money"]=$mining["tong_money"]; $add["ensure_money"]=$mining["ensure_money"]; Order::create($add); // // 账号操作 去除保证金 // $ensure_money=$user->ensure_money-$mining->ensure_money; // Orde::buy_order($user_id,$ensure_money,$mining->ensure_money); } json_result(200,"操作成功"); } // 订单详情 public static function order_show($order,$user_id) { $data=[]; if ($order->buy_user==$user_id){// 买入人是自己 $data["type"]=0;// 查看卖出人信息 $where_user["id"]=$order->buy_user; }else{// 卖出人 $data["type"]=1;// 查看买入人信息 $where_user["id"]=$order->push_user; } $user=User::where($where_user)->find(); $user_message=UserMessage::where(["user_id"=>$where_user["id"]])->find(); $data["number"]=$order->number;// bts数量 $data["id"]=$order->id;// 订单id $data["msg"]=$order->msg?:"";// 失败原因 $data["status"]=$order->status?:"";// 失败原因 $data["order"]=$order->order;// 订单编号 $data["add_time"]=date("Y-m-d H:i:s",$order->add_time);// 下单时间 $data["adds_time"]=$order->add_time;// 下单时间戳 $data["stat_time"]=$order->stat_time;// 下单结束时间戳 if ($order->stat_time>$order->add_time){ $data["time"]=$order->stat_time-$order->add_time;// 下单剩余多少秒 }else{ $data["time"]=""; } if ($order->end_time){ $data["end_time"]=date("Y-m-d H:i",$order->end_time);// 订单结束时间 }else{ $data["end_time"]=""; } $data["image"]=$order->image?:"";// 支付凭据 图片 ,拼接 if ( $data["type"]==0){//卖出人信息 $data["user_name"]=$user->name;// 账号 $data["user_phone"]=$user_message->phone;// 手机号 $data["name"]=$user_message->name;//银行卡持卡人 $data["bank_name"]=$user_message->bank_name;//银行卡名称 $data["bank_number"]=$user_message->bank_number;//银行卡号 $data["bank_branch"]=$user_message->bank_branch;//开户支行 $data["ali_pay"]=$user_message->ali_pay;//支付宝账号 $data["wx_pay"]=$user_message->wx_pay;//微信账号 $data["ali_pay_image"]=$user_message->ali_pay_image;//支付宝收款码 $data["wx_pay_image"]=$user_message->wx_pay_image;//微信收款码 }else{// 买入人信息 $data["user_name"]=$user->name;// 账号 $data["user_phone"]=$user_message->phone;// 手机号 $data["name"]="";//银行卡持卡人 $data["bank_name"]="";//银行卡名称 $data["bank_number"]="";//银行卡号 $data["bank_branch"]="";//开户支行 $data["ali_pay"]="";//支付宝账号 $data["wx_pay"]="";//微信账号 $data["ali_pay_image"]="";//支付宝收款码 $data["wx_pay_image"]="";//微信收款码 } json_result(200,"",$data); } /**处理订单失败 * @param $user_id 用户id * @param $msg 失败原因 */ public static function order_fail($msg,$order_id) { $order=Order::where(["id"=>$order_id])->find(); if (!$order){ json_result(400,"订单不存在"); } if ($order->status!=2){ json_result(400,"还没有上传证明"); } Orde::order_fail($msg,$order); json_result(200,"处理成功"); } /** 减去账号余额 或添加 并加加记录 * @param $user_id 用户 * @param $jian 0 加 1减 * @param $zi 哪个字段 * @param $money 金额 * @param $content 说明 */ public static function user_find($user_id,$jian,$zi,$money,$content) { } }