OrderLib.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. declare (strict_types=1);
  3. // +----------------------------------------------------------------------
  4. // | [ WE CAN DO IT MORE SIMPLE ]
  5. // +----------------------------------------------------------------------
  6. // | Copyright (c) 2018-2020 rights reserved.
  7. // +----------------------------------------------------------------------
  8. // | 支付结算
  9. // +----------------------------------------------------------------------
  10. // | Date: 2020-08-25 17:23
  11. // +----------------------------------------------------------------------
  12. namespace app\lib;
  13. use app\model\api\PayTrade;
  14. use app\model\api\Order;
  15. use app\model\api\ActivityOrder;
  16. use app\model\api\OrderInfo;
  17. use app\model\api\Goods;
  18. use app\model\api\User as UserModel;
  19. use app\model\api\UserDetail as UserDetailModel;
  20. use app\model\api\UserScoreDetail;
  21. use app\model\api\Sys as SysModel;
  22. use think\facade\Db;
  23. class OrderLib
  24. {
  25. /**
  26. * 支付反馈
  27. * @param $orderId
  28. * @return bool|string
  29. * @throws \think\db\exception\DataNotFoundException
  30. * @throws \think\db\exception\DbException
  31. * @throws \think\db\exception\ModelNotFoundException
  32. */
  33. public function orderPay($payOn,$payDataInfo="")
  34. {
  35. $payTradeData = (new PayTrade)->where('pay_no', $payOn)->find();
  36. if (empty($payTradeData)) {
  37. return false;
  38. }
  39. //已支付
  40. if ($payTradeData['status'] == 1) {
  41. return false;
  42. }
  43. //处理支付成功
  44. PayTrade::beginTrans();
  45. $userData = (new UserModel)->where('uid', $payTradeData['uid'])->find();
  46. try {
  47. (new PayTrade)->where('id', $payTradeData['id'])->update(['status' => 1, 'pay_time' => time(),'pay_json' => $payDataInfo]);
  48. if($payTradeData['type']=="activity"){
  49. //活动报名
  50. (new ActivityOrder)->where("id",$payTradeData['o_id'])->update(['status' => 1, 'pay_time' => time()]);
  51. PayTrade::commitTrans();
  52. return true;
  53. }else{
  54. //商城下单
  55. (new Order)->where("id",$payTradeData['o_id'])->update(['status' => 1, 'pay_time' => time()]);
  56. }
  57. //商城下单普通商品增加积分
  58. if ($payTradeData['type'] == 'pro') {
  59. $json = unserialize($payTradeData['d_json']);
  60. //添加购买用户的积分
  61. if($json['give_score']>0){
  62. (new UserScoreDetail)->incomeScore($payTradeData['uid'], $json['give_score'], $payOn,"income_score",["o_id"=>$payTradeData['o_id']]);
  63. }
  64. }
  65. PayTrade::commitTrans();
  66. } catch (DbException $dbException) {
  67. PayTrade::rollbackTrans();
  68. return false;
  69. }
  70. //后台管理人员支付直接返回
  71. if($payTradeData["pay_type"]=="system"){
  72. return true;
  73. }
  74. //判断普通商品购买如果商品已被买断则在此处计算收益
  75. $memData = $userData;
  76. $orderData = (new Order)->where("id",$payTradeData['o_id'])->find();
  77. $orderInfoData=null;
  78. $proData=null;
  79. if(!empty($orderData)){
  80. $orderInfoData = (new OrderInfo)->where("o_id",$orderData['id'])->find()->toArray();
  81. }
  82. if(!empty($orderInfoData)){
  83. $proData = (new Goods)->where("id",$orderInfoData["p_id"])->find();
  84. }
  85. //ip买断
  86. if(!empty($proData) && $orderData["is_ip_buy"]==1 && empty($proData["uid"]) && $proData["is_ip"]==1){
  87. (new Goods)->where("id",$proData["id"])->update(["uid"=>$memData["uid"],"uip"=>$memData["uip"]]);
  88. }
  89. // return true;//暂时关闭分成
  90. //系统信息
  91. $sysData = (new SysModel)->where("id",1)->find();
  92. if($orderData["is_ip_buy"]==0){
  93. //上级用户
  94. if($memData["parent_uid"]>0){
  95. //一级用户
  96. $parentData = (new UserModel)->where("uid",$memData["parent_uid"])->where("status",1)->find();
  97. if(!empty($parentData) && $sysData['tree_income_per']>0 && $sysData['tree_income_per']<=100){
  98. $treepermono = "推广用户购买商品获得分成";//分成内容
  99. $treePerMoney = $payTradeData["money"]*((int)$sysData['tree_income_per']/100);//分成收益金额
  100. if($treePerMoney>0){
  101. // return true;//暂时关闭分成
  102. (new UserDetailModel)->goodsIncome($memData["parent_uid"],$treePerMoney,"tree_per_income",$treepermono,["cash_uid"=>$memData["uid"],"p_id"=>$proData["id"],"o_id"=>$orderData["id"]]);
  103. }
  104. }
  105. //二级用户
  106. if(!empty($parentData) && $parentData["parent_uid"] > 0 && $sysData['tree_income_per_two']>0 && $sysData['tree_income_per_two']<=100){
  107. $treepermonoTwo = "二级推广用户购买商品获得分成";//分成内容
  108. $treePerMoneyTwo = $payTradeData["money"]*((int)$sysData['tree_income_per_two']/100);//分成收益金额
  109. if($treePerMoneyTwo>0){
  110. // return true;//暂时关闭分成
  111. (new UserDetailModel)->goodsIncome($parentData["parent_uid"],$treePerMoneyTwo,"tree_per_income",$treepermonoTwo,["cash_uid"=>$memData["uid"],"p_id"=>$proData["id"],"o_id"=>$orderData["id"]]);
  112. }
  113. }
  114. }
  115. }
  116. //普通商品购买计算分成
  117. if(!empty($proData) && $orderData["is_ip_buy"]==0 && !empty($proData["uid"]) && $proData["is_ip"]==1){
  118. // $sysPer=$sysData['ip_income_per'];//分成比例,后台设置
  119. $sysPer=$proData['ip_income_per'];//如果是单个商品则用这条
  120. if($sysPer<=0 || $sysPer>100){
  121. return true;
  122. }
  123. $money = $payTradeData["money"];//支付金额
  124. $permono = "用户购买商品获得分成";//分成内容
  125. $perMoney = $money*((int)$sysPer/100);//分成收益金额
  126. //增加用户收益
  127. if($perMoney>0){
  128. (new UserDetailModel)->goodsIncome($proData["uid"],$perMoney,"per_income",$permono,["cash_uid"=>$memData["uid"],"p_id"=>$proData["id"],"o_id"=>$orderData["id"]]);
  129. }
  130. }
  131. return true;
  132. }
  133. }