123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- <?php
- /**
- *
- * User: anyluck
- * Date: 2020/6/3
- * Time: 10:55
- */
- namespace app\web\model;
- use app\common\controller\Orde;
- use app\common\model\Mining;
- use app\common\model\Order;
- use app\common\model\OrderFrequency;
- use app\common\model\Quotation;
- use app\common\model\System;
- use app\common\model\User;
- use app\common\model\UserMessage;
- use app\common\model\VendibilityFinance;
- use Ramsey\Uuid\Uuid;
- use think\facade\Db;
- class Orders
- {
- // todo 订单
- /** 发布订单列表
- * @param $type 0买入数据 1卖出数据 2我的购买数据 3我的卖出数据
- * @param int $user_id 用户id
- * @param int $status 0 未匹配 1 已匹配或待支付 2已上传数据 3 已完成 4 已撤销 5 交易失败
- * @param int $page
- * @param int $limit
- * @param int $num 交易区块
- * @throws \think\db\exception\DbException
- */
- public static function order_list($type, $user_id = 0, $status = 0, $page = 1, $limit = 10,$num=0)
- {
- $where = [];
- switch ($type) {
- case 0 :// 求购数据
- $where[]=["push_user","=","0"];
- break;
- case 1:// 我的购买数据
- $where[] = ["buy_user", "=", $user_id];
- break;
- case 2:// 我的卖出数据
- $where[] = ["push_user", "=", $user_id];
- break;
- }
- if ($num){//交易区块 大小
- $where[]=["number","=",$num];
- }
- switch ($status){
- case 1:// 进行中的
- $where[]=["status","in",[0,1]];
- break;
- case 2:// 已完成
- $where[]=["status","in",[2,3,4,5]];
- break;
- }
- $order = Order::where($where)->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;
- }
- // 系统开关
- public static function open_system()
- {
- $list = Db::name('system')
- ->where(["type"=>"open"])
- ->field('name,value')
- ->column('value','name');
- return $list;
- }
- // 开盘控制
- public static function open_systems()
- {
- $day=date("w");
- $day=(int)$day;
- if ($day==0){
- $day=7;
- }
- $where["id"]=$day;
- $quer=Quotation::where($where)->find();
- if ($quer["status"]==1){
- json_result(400,"已经关盘,请等待开盘");
- }
- $now=date("H");
- if ($quer["stat"]>$now||$quer["end"]<$now){
- json_result(400,"开盘时间是".$quer["stat"]."点到".$quer["end"]."点");
- }
- return true;
- }
- /** 买入和卖出
- * @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)
- {
- // 查看用户是否添加收账信息
- $userMeesage=UserMessage::where(["user_id"=>$user_id])->find();
- if (!$userMeesage){
- json_result(400,"请完善收账信息");
- }
- if ($type==0){// 直接卖出 更新原有数据
- $open_system=self::open_systems();
- // // 查看是否是否开盘
- // if (!$open_system["open"]){
- // json_result(400,"已经关盘,请等待开盘");
- // }
- // $now=date("H");
- // if ($open_system["open_start"]>$now||$open_system["open_end"]<$now){
- // json_result(400,"开盘时间是".$open_system["open_start"]."点到".$open_system["open_end"]."点");
- // }
- $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{// 下单买入
- if (!$user["phone"]){
- json_result(310,"请绑定手机号码");
- }
- if (!$user["urgent_name"]||!$user["urgent_phone"]){
- json_result(320,"请完善紧急联系人");
- }
- $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();
- $order=getordernum();
- $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,"处理成功");
- }
- //手机号和邮箱注册次数
- public static function phone_email()
- {
- $phone_email=System::where(["name"=>"phone_email"])->value("value");
- if ($phone_email){
- return $phone_email;
- }else{
- return 1;
- }
- }
- /** 减去账号余额 或添加 并加加记录
- * @param $user_id 用户
- * @param $jian 0 加 1减
- * @param $zi 哪个字段
- * @param $money 金额
- * @param $content 说明
- */
- public static function user_find($user_id,$jian,$zi,$money,$content)
- {
- }
- }
|