CardOrder.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <?php
  2. /**
  3. *
  4. * @author: xaboy<365615158@qq.com>
  5. * @day: 2017/11/02
  6. */
  7. namespace app\admin\model\card;
  8. use app\admin\model\store\StoreProduct;
  9. use app\admin\model\system\SystemAdmin;
  10. use app\admin\model\user\UserCard;
  11. use app\models\article\ArticleContent;
  12. use app\models\user\User;
  13. use app\models\user\UserBill;
  14. use app\models\user\WechatUser;
  15. use crmeb\services\MiniProgramService;
  16. use crmeb\services\WechatService;
  17. use crmeb\traits\ModelTrait;
  18. use crmeb\basic\BaseModel;
  19. /**
  20. * 图文管理 Model
  21. * Class WechatNews
  22. * @package app\admin\model\wechat
  23. */
  24. class CardOrder extends BaseModel
  25. {
  26. use ModelTrait;
  27. protected $pk = 'id';
  28. protected $name = 'card_order';
  29. protected $autoWriteTimestamp = true;
  30. public static function list($where)
  31. {
  32. $model = self::alias('a')
  33. ->field('a.*,b.nickname,c.name')
  34. ->leftJoin('user b', 'a.uid = b.uid')
  35. ->leftJoin('card c', 'c.id = a.card_id')
  36. ->order('a.id DESC');
  37. if ($where['name'])$model->where('b.nickname|b.uid|a.order_id' , 'like', '%'.$where['name'].'%');
  38. if ($where['type']){
  39. if ($where['type'] == 1){
  40. $model->where('paid', 0);
  41. }else{
  42. $model->where('paid', 1);
  43. }
  44. }
  45. $data['count'] = $model->count();
  46. if ($where['page'] && $where['limit']){
  47. $model->page($where['page'], $where['limit']);
  48. }else{
  49. $model->page(20, 1);
  50. }
  51. $list = $model->select()->toArray();
  52. $data['data'] = $list;
  53. return $data;
  54. }
  55. public static function addCard($uid, $card_id, $pay_type)
  56. {
  57. $order_id = self::getNewOrderId();
  58. if (!$order_id) return self::setErrorInfo('订单生成失败!');
  59. $card = Card::find($card_id);
  60. if (!$card) return self::setErrorInfo('没有该优惠卡');
  61. $add_time = time();
  62. return self::create([
  63. 'order_id' => $order_id,
  64. 'uid' => $uid,
  65. 'card_id' => $card_id,
  66. 'time' => $card['time'],
  67. 'pay_type' => $pay_type,
  68. 'price' => $card['price'],
  69. 'create_time' => $add_time
  70. ]);
  71. }
  72. /**
  73. * 生成订单唯一id
  74. * @param $uid 用户uid
  75. * @return string
  76. */
  77. public static function getNewOrderId()
  78. {
  79. do {
  80. list($msec, $sec) = explode(' ', microtime());
  81. $msectime = number_format((floatval($msec) + floatval($sec)) * 1000, 0, '', '');
  82. $orderId = 'wx' . $msectime . mt_rand(10000, 99999);
  83. } while (self::be(['order_id' => $orderId]));// $orderId = 'wx' . $msectime . mt_rand(10000, 99999);
  84. return $orderId;
  85. }
  86. /**
  87. * 充值js支付
  88. * @param $orderInfo
  89. * @return array|string
  90. * @throws \Exception
  91. */
  92. public static function jsPay($orderInfo)
  93. {
  94. return MiniProgramService::jsPay(WechatUser::uidToOpenid($orderInfo['uid']), $orderInfo['order_id'], $orderInfo['price'], 'user_card', '用户购买优惠卡');
  95. }
  96. /**
  97. * 微信H5支付
  98. * @param $orderInfo
  99. * @return mixed
  100. */
  101. public static function wxH5Pay($orderInfo)
  102. {
  103. return WechatService::paymentPrepare(null, $orderInfo['order_id'], $orderInfo['price'], 'user_card', '用户购买优惠卡', '', 'MWEB');
  104. }
  105. /**
  106. * 公众号支付
  107. * @param $orderInfo
  108. * @return array|string
  109. * @throws \Exception
  110. */
  111. public static function wxPay($orderInfo)
  112. {
  113. return WechatService::jsPay(WechatUser::uidToOpenid($orderInfo['uid'], 'openid'), $orderInfo['order_id'], $orderInfo['price'], 'user_card', '用户购买优惠卡');
  114. }
  115. /**
  116. * 会员卡购买成功
  117. * @param $orderId
  118. * @return bool
  119. * @throws \think\db\exception\DataNotFoundException
  120. * @throws \think\db\exception\DbException
  121. * @throws \think\db\exception\ModelNotFoundException
  122. */
  123. public static function rechargeSuccess($orderId)
  124. {
  125. $order = self::where('order_id', $orderId)->where('paid', 0)->find();
  126. if (!$order) return false;
  127. $user = User::getUserInfo($order['uid']);
  128. self::beginTrans();
  129. $res1 = self::where('order_id', $order['order_id'])->update(['paid' => 1, 'pay_time' => time()]);
  130. $card = Card::where('id', $order['card_id'])->find();
  131. $mark = '购买优惠卡'.$card['name'];
  132. $res2 = UserBill::income('购买优惠卡', $order['uid'], 'now_money', 'discount', $order['price'], $order['id'], $user['now_money'], $mark);
  133. $res3 = UserCard::create([
  134. 'card_id' => $order['card_id'],
  135. 'uid' => $order['uid'],
  136. 'card' => self::getRandPass(12),
  137. 'pwd' => self::getRandPass(12),
  138. ]);
  139. $res = $res1 && $res2 && $res3;
  140. self::checkTrans($res);
  141. // event('RechargeSuccess', [$order]);
  142. return $res;
  143. }
  144. public static function getRandPass($length = 6){
  145. $password = '';
  146. $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  147. $char_len = strlen($chars);
  148. for ($i=0;$i < $length;$i++){
  149. $loop = mt_rand(0, ($char_len - 1));
  150. $password .= $chars[$loop];
  151. }
  152. return $password;
  153. }
  154. }