Orders.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. <?php
  2. /**
  3. *
  4. * User: anyluck
  5. * Date: 2020/6/3
  6. * Time: 10:55
  7. */
  8. namespace app\web\model;
  9. use app\common\controller\Orde;
  10. use app\common\model\Mining;
  11. use app\common\model\Order;
  12. use app\common\model\OrderFrequency;
  13. use app\common\model\User;
  14. use app\common\model\UserMessage;
  15. use app\common\model\VendibilityFinance;
  16. use Ramsey\Uuid\Uuid;
  17. class Orders
  18. {
  19. // todo 订单
  20. /** 发布订单列表
  21. * @param $type 0买入数据 1卖出数据 2我的购买数据 3我的卖出数据
  22. * @param int $user_id 用户id
  23. * @param int $status 0 未匹配 1 已匹配或待支付 2已上传数据 3 已完成 4 已撤销 5 交易失败
  24. * @param int $page
  25. * @param int $limit
  26. * @param int $num 交易区块
  27. * @throws \think\db\exception\DbException
  28. */
  29. public static function order_list($type, $user_id = 0, $status = 0, $page = 1, $limit = 10,$num=0)
  30. {
  31. $where = [];
  32. switch ($type) {
  33. case 0 :// 求购数据
  34. $where[]=["push_user","=","0"];
  35. break;
  36. case 1:// 我的购买数据
  37. $where[] = ["buy_user", "=", $user_id];
  38. break;
  39. case 2:// 我的卖出数据
  40. $where[] = ["push_user", "=", $user_id];
  41. break;
  42. }
  43. if ($num){//交易区块 大小
  44. $where[]=["num","=",$num];
  45. }
  46. switch ($status){
  47. case 1:// 进行中的
  48. $where[]=["status","in",[0,1]];
  49. break;
  50. case 2:// 已完成
  51. $where[]=["status","in",[2,3,4,5]];
  52. break;
  53. }
  54. $order = Order::where($where)->order("status asc,id asc")->paginate(['list_rows' => $limit, 'page' => $page])->each(function ($item) use ($type) {
  55. if ($item["status"] == 0) {// 未支付结算时间计算
  56. if (time() > $item["add_time"]) {
  57. $item["stat_time"] = time() - $item["add_time"];
  58. } else {
  59. $item["stat_time"] = 0;
  60. }
  61. } else {
  62. $item["stat_time"] = 0;
  63. }
  64. $item["image"]=$item["image"]?:"";
  65. // 添加时间
  66. $item["add_times"] = date("Y-m-d H:i", $item["add_time"]);
  67. if ($item["end_time"]) {
  68. $item["end_time"] = date("Y-m-d H:i", $item["end_time"]);
  69. }
  70. return $item;
  71. })->toArray();
  72. return $order;
  73. }
  74. /** 买入和卖出
  75. * @param $user 用户数据
  76. * @param $user_id 用户id
  77. * @param int $type 0 卖出 1 买入
  78. * @param int $qit_id // 卖出传买入的id
  79. * @param int $ming_id // 买入传 区块id
  80. * @throws \think\db\exception\DataNotFoundException
  81. * @throws \think\db\exception\DbException
  82. * @throws \think\db\exception\ModelNotFoundException
  83. */
  84. public static function push_order($user,$user_id,$type=0,$qit_id=0,$ming_id=0)
  85. {
  86. // todo 未完成卖出订单时间控制,
  87. // 查看用户是否添加收账信息
  88. $userMeesage=UserMessage::where(["user_id"=>$user_id])->find();
  89. if (!$userMeesage){
  90. json_result(400,"请完善收账信息");
  91. }
  92. if ($type==0){// 直接卖出 更新原有数据
  93. $where["id"]=$qit_id;
  94. $order=Order::where($where)->find();
  95. if (!$order){
  96. json_result(400,"买入订单id错误");
  97. }
  98. // 查看订单是否已经被买入
  99. if ($order->status!=0){// 这个可以加入redis 控制并发问题
  100. json_result(400,"该交易订单已经被卖出,或者取消");
  101. }
  102. // 查看交易是否是自己的
  103. if ($order->buy_user==$user_id){
  104. json_result(400,"自己买入的订单不能卖出");
  105. }
  106. // 查看矿区
  107. $mining=Mining::where(["id"=>$order->mining_id])->find();
  108. if ($user->money<$mining->tong_money){
  109. json_result(400,"通证余额不足");
  110. }
  111. if ($user->push_money<$order->number){
  112. json_result(400,"可售额度不足");
  113. }
  114. // 查看未完成订单
  115. $where_status[]=["status","in",[0,1,2]];
  116. $where_status[]=["push_user","=",$user_id];
  117. $count_order=Order::where($where_status)->count();
  118. // 查看该矿区交易次数
  119. $order_frequency=OrderFrequency::where(["user_id"=>$user_id,"mining_id"=>$order->mining_id])->find();
  120. if ($order_frequency){// 因为后台交易不加次数
  121. $count_order=$order_frequency->push+$count_order;
  122. if ($count_order==5){
  123. json_result(400,"每个区块只能卖出5次");
  124. }
  125. }else{
  126. if ($count_order==5){
  127. json_result(400,"每个区块只能卖出5次");
  128. }
  129. }
  130. if ($count_order+1==5){
  131. $sxf_money=$order->out_game;
  132. if ($user->money<$order->out_game){
  133. json_result(400,"通证余额不足");
  134. }
  135. }else{
  136. $sxf_money=$mining->tong_money;
  137. }
  138. // 订单处理
  139. Orde::push_order($user,$qit_id,$user_id,$order,$count_order,$sxf_money);
  140. }else{// 下单买入
  141. $where_ming["id"]=$ming_id;
  142. $mining=Mining::where($where_ming)->find();
  143. if (!$mining){
  144. json_result(400,"交易区块id错误");
  145. }
  146. // 查看矿区
  147. $mining=Mining::where(["id"=>$ming_id])->find();
  148. if ($user->ensure_money<$mining->ensure_money){
  149. json_result(400,"保证金不足");
  150. }
  151. // 查看未完成订单
  152. $where_status[]=["status","in",[0,1,2]];
  153. $where_status[]=["buy_user","=",$user_id];
  154. $count_order=Order::where($where_status)->count();
  155. // 查看该矿区交易次数
  156. $order_frequency=OrderFrequency::where(["user_id"=>$user_id,"mining_id"=>$ming_id])->find();
  157. if ($order_frequency){// 因为后台交易不加次数
  158. $count_order=$order_frequency->buy+$count_order;
  159. if ($count_order==4){
  160. json_result(400,"每个区块只能买入4次");
  161. }
  162. }else{
  163. if ($count_order==4){
  164. json_result(400,"每个区块只能买入4次");
  165. }
  166. }
  167. // // 查看当前账号的通证是否满足
  168. // if ($user->money<$mining["num"]){
  169. // json_result(400,"当前账号通证不足");
  170. // }
  171. $uuid = Uuid::uuid4(time());
  172. $order = $uuid->getHex();
  173. $add["type"]=0;
  174. $add["buy_user"]=$user_id;
  175. $add["push_user"]="";
  176. $add["number"]=$mining["num"];
  177. $add["enlarge_quota"]=$mining["enlarge_quota"];
  178. $add["order"]=$order;
  179. $add["mining_id"]=$ming_id;
  180. $add["status"]=0;
  181. $add["add_time"]=time();
  182. $add["out_game"]=$mining["out_game"];
  183. $add["tong_money"]=$mining["tong_money"];
  184. $add["ensure_money"]=$mining["ensure_money"];
  185. Order::create($add);
  186. // // 账号操作 去除保证金
  187. // $ensure_money=$user->ensure_money-$mining->ensure_money;
  188. // Orde::buy_order($user_id,$ensure_money,$mining->ensure_money);
  189. }
  190. json_result(200,"操作成功");
  191. }
  192. // 订单详情
  193. public static function order_show($order,$user_id)
  194. {
  195. $data=[];
  196. if ($order->buy_user==$user_id){// 买入人是自己
  197. $data["type"]=0;// 查看卖出人信息
  198. $where_user["id"]=$order->buy_user;
  199. }else{// 卖出人
  200. $data["type"]=1;// 查看买入人信息
  201. $where_user["id"]=$order->push_user;
  202. }
  203. $user=User::where($where_user)->find();
  204. $user_message=UserMessage::where(["user_id"=>$where_user["id"]])->find();
  205. $data["number"]=$order->number;// bts数量
  206. $data["id"]=$order->id;// 订单id
  207. $data["msg"]=$order->msg?:"";// 失败原因
  208. $data["status"]=$order->status?:"";// 失败原因
  209. $data["order"]=$order->order;// 订单编号
  210. $data["add_time"]=date("Y-m-d H:i:s",$order->add_time);// 下单时间
  211. $data["adds_time"]=$order->add_time;// 下单时间戳
  212. $data["stat_time"]=$order->stat_time;// 下单结束时间戳
  213. if ($order->stat_time>$order->add_time){
  214. $data["time"]=$order->stat_time-$order->add_time;// 下单剩余多少秒
  215. }else{
  216. $data["time"]="";
  217. }
  218. if ($order->end_time){
  219. $data["end_time"]=date("Y-m-d H:i",$order->end_time);// 订单结束时间
  220. }else{
  221. $data["end_time"]="";
  222. }
  223. $data["image"]=$order->image?:"";// 支付凭据 图片 ,拼接
  224. if ( $data["type"]==0){//卖出人信息
  225. $data["user_name"]=$user->name;// 账号
  226. $data["user_phone"]=$user_message->phone;// 手机号
  227. $data["name"]=$user_message->name;//银行卡持卡人
  228. $data["bank_name"]=$user_message->bank_name;//银行卡名称
  229. $data["bank_number"]=$user_message->bank_number;//银行卡号
  230. $data["bank_branch"]=$user_message->bank_branch;//开户支行
  231. $data["ali_pay"]=$user_message->ali_pay;//支付宝账号
  232. $data["wx_pay"]=$user_message->wx_pay;//微信账号
  233. $data["ali_pay_image"]=$user_message->ali_pay_image;//支付宝收款码
  234. $data["wx_pay_image"]=$user_message->wx_pay_image;//微信收款码
  235. }else{// 买入人信息
  236. $data["user_name"]=$user->name;// 账号
  237. $data["user_phone"]=$user_message->phone;// 手机号
  238. $data["name"]="";//银行卡持卡人
  239. $data["bank_name"]="";//银行卡名称
  240. $data["bank_number"]="";//银行卡号
  241. $data["bank_branch"]="";//开户支行
  242. $data["ali_pay"]="";//支付宝账号
  243. $data["wx_pay"]="";//微信账号
  244. $data["ali_pay_image"]="";//支付宝收款码
  245. $data["wx_pay_image"]="";//微信收款码
  246. }
  247. json_result(200,"",$data);
  248. }
  249. /**处理订单失败
  250. * @param $user_id 用户id
  251. * @param $msg 失败原因
  252. */
  253. public static function order_fail($msg,$order_id)
  254. {
  255. $order=Order::where(["id"=>$order_id])->find();
  256. if (!$order){
  257. json_result(400,"订单不存在");
  258. }
  259. if ($order->status!=2){
  260. json_result(400,"还没有上传证明");
  261. }
  262. Orde::order_fail($msg,$order);
  263. json_result(200,"处理成功");
  264. }
  265. /** 减去账号余额 或添加 并加加记录
  266. * @param $user_id 用户
  267. * @param $jian 0 加 1减
  268. * @param $zi 哪个字段
  269. * @param $money 金额
  270. * @param $content 说明
  271. */
  272. public static function user_find($user_id,$jian,$zi,$money,$content)
  273. {
  274. }
  275. }