PaymentReceived.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?php
  2. namespace app\models\order;
  3. use crmeb\traits\ModelTrait;
  4. use crmeb\basic\BaseModel;
  5. use think\Exception;
  6. use app\models\user\{User,UserBill};
  7. use crmeb\services\PHPExcelService;
  8. /**
  9. * B子订单详情
  10. * Class ArticleCategory
  11. * @package app\models\article
  12. */
  13. class PaymentReceived extends BaseModel
  14. {
  15. use ModelTrait;
  16. protected function getTypeAttr($value)
  17. {
  18. switch($value)
  19. {
  20. case 0:
  21. return '余额';
  22. break;
  23. case 1:
  24. return '消费券';
  25. break;
  26. case 2:
  27. return '积分';
  28. break;
  29. }
  30. }
  31. /**
  32. * 生成订单唯一id
  33. * @param $uid 用户uid
  34. * @return string
  35. */
  36. public static function getNewOrderId()
  37. {
  38. list($msec, $sec) = explode(' ', microtime());
  39. $msectime = number_format((floatval($msec) + floatval($sec)) * 1000, 0, '', '');
  40. $orderId = 'qr_' . $msectime . mt_rand(10000, 99999);
  41. while (self::be(['order_id' => $orderId])) $orderId = 'qr_' . $msectime . mt_rand(10000, 99999);
  42. return $orderId;
  43. }
  44. /**
  45. * 创建支付
  46. * @param $pay_type
  47. * @param $code
  48. * @param $pay_uid
  49. * @param $collect_uid
  50. * @param $amount
  51. */
  52. public static function Create_Payment($pay_type,$code,$pay_uid,$collect_uid,$amount,$type=0)
  53. {
  54. self::beginTrans();
  55. $order_id = self::getNewOrderId();
  56. $add_time = time();
  57. $pay_user = User::find($pay_uid);
  58. $collect_user = User::find($collect_uid);
  59. try {
  60. switch ($type)
  61. {
  62. case 0:
  63. $field ="now_money";
  64. $title = "余额";
  65. break;
  66. case 1:
  67. $field ="consumer";
  68. $title = "消费券";
  69. break;
  70. case 2:
  71. $field ="integral";
  72. $title = "积分";
  73. break;
  74. }
  75. if (bcsub($pay_user[$field], $amount, 2) < 0) return self::setErrorInfo($title.'不足!', true);
  76. $paid = 1;
  77. $pay_time = time();
  78. $transfer = bcdiv(bcmul($amount, sys_config('pay_collection_commission'),2),100,2);
  79. $service_charge = $transfer;
  80. $res = self::create(compact('pay_type', 'pay_uid', 'code', 'collect_uid', 'amount', 'order_id', 'add_time', 'paid', 'pay_time','service_charge','type'));
  81. if ($res) {
  82. $now_money = bcsub($amount, $transfer, 2);
  83. @file_put_contents("pay.txt",'uid:'.$pay_uid.'collect_uid:'.$collect_uid.'--'.$amount.'--'.$transfer.'--'.$now_money);
  84. User::where('uid', $collect_uid)->inc($field, $now_money)->update();
  85. User::where('uid', $pay_uid)->dec($field, $amount)->update();
  86. $str = sprintf("收到%s用户%.2f%s,到账:%.2f%s,手续费:%.2f", $pay_user['nickname'], $amount,$title, $now_money,$title, $transfer);
  87. $res1 = UserBill::income('扫码收款-'.$title, $collect_uid, 'now_money', 'qr_add_'.$field, $now_money, $res['id'], bcadd($collect_user[$field], $now_money, 2), $str);
  88. $res2 = UserBill::expend("扫码付款-".$title, $pay_uid, 'now_money', 'qr_des_'.$field, $amount, $res['id'], bcsub($pay_user[$field], $amount, 2), '支付给' . $collect_user['nickname'] . $amount . $title, 1);
  89. }
  90. if ($res && $res1 && $res2) {
  91. self::commitTrans();
  92. } else {
  93. self::rollbackTrans();
  94. }
  95. return $res;
  96. }catch (Exception $e)
  97. {
  98. echo $e->getMessage();
  99. self::rollbackTrans();
  100. }
  101. return false;
  102. }
  103. /**
  104. * 获取支付信息
  105. * @param $order_id
  106. */
  107. public static function getPayment($order_id)
  108. {
  109. $info = self::where('order_id',$order_id)->find();
  110. if($info)
  111. {
  112. $info = $info->toArray();
  113. $info['pay_user'] = User::find($info['pay_uid'])->toarray();
  114. $info['collect_user'] = User::find($info['collect_uid'])->toarray();
  115. }
  116. return $info;
  117. }
  118. /**
  119. * 获取列表
  120. * @param $where
  121. */
  122. public static function lst($where)
  123. {
  124. $model = new self;
  125. if(isset($where['data']) && $where['data']!='') $model = $model->getModelTime($where,$model);
  126. if(isset($where['pay_type']) && $where['pay_type']>-1) $model = $model->where('pay_type',$where['pay_type']);
  127. if(isset($where['way'])&&isset($where['way'])!='')
  128. {
  129. switch ($where['way'])
  130. {
  131. case 'pay':
  132. if (isset($where['uid']) && $where['uid'] > 0) $model = $model->where('pay_uid', $where['uid']);
  133. break;
  134. case 'collect':
  135. if (isset($where['uid']) && $where['uid'] > 0) $model = $model->where('collect_uid', $where['uid']);
  136. break;
  137. }
  138. }
  139. else {
  140. if (isset($where['uid']) && $where['uid'] > 0) $model = $model->where('pay_uid|collect_uid', $where['uid']);
  141. }
  142. if(isset($where['is_tip']) && $where['is_tip']>-1) $model = $model->where('is_tip',$where['is_tip']);
  143. $count = $model->count();
  144. $data = $model->page($where['page'],$where['limit'])->select();
  145. $data = $data?$data->toArray():[];
  146. foreach ($data as &$v)
  147. {
  148. $v['pay_user'] = User::find($v['pay_uid'])->toarray();
  149. $v['collect_user'] = User::find($v['collect_uid'])->toarray();
  150. }
  151. if(isset($where['excel']) && $where['excel'] == 1)
  152. {
  153. $pay_type = ['收款码','扫付款码'];
  154. foreach ($data as $index => $item) {
  155. $export[] = [
  156. $item['order_id'],
  157. $item['pay_name'] => $item['pay_user']['real_name'].":".$item['pay_user']['uid'],
  158. $item['amount'],
  159. $item['collect_name'] => $item['collect_user']['real_name'].":".$item['collect_user']['uid'],
  160. $item['add_time'],
  161. $item['pay_type']=> $pay_type[$item['pay_type']],
  162. ];
  163. }
  164. PHPExcelService::setExcelHeader(['订单号','付款人', '金额','收款人', '时间', '方式','类型'])
  165. ->setExcelTile('收付码', '收付码列表' . time(), ' 生成时间:' . date('Y-m-d H:i:s', time()))
  166. ->setExcelContent($export)
  167. ->ExcelSave();
  168. }
  169. return compact('count','data');
  170. }
  171. public static function collection($uid)
  172. {
  173. $card_no = User::where('uid',$uid)->value('merchant_no');
  174. if(empty(trim($card_no)))
  175. {
  176. $card_no = User::max('merchant_no');
  177. if (intval($card_no) < 10000000000) {
  178. $card_no = "10000000001";
  179. } else {
  180. $card_no = str_pad(bcadd($card_no, 1), 11, "0", STR_PAD_LEFT);
  181. }
  182. User::edit(['merchant_no' => $card_no],$uid);
  183. }
  184. return $card_no;
  185. }
  186. }