UserLevelController.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <?php
  2. namespace app\api\controller\user;
  3. use app\models\store\StoreBargainUser;
  4. use app\models\store\StoreOrder;
  5. use app\models\store\StorePink;
  6. use app\models\system\SystemUserLevel;
  7. use app\models\system\SystemUserTask;
  8. use app\models\user\UserLevel;
  9. use app\models\user\UserLevelOrder;
  10. use app\Request;
  11. use crmeb\repositories\OrderRepository;
  12. use crmeb\services\UtilService;
  13. /**
  14. * 会员等级类
  15. * Class UserLevelController
  16. * @package app\api\controller\user
  17. */
  18. class UserLevelController
  19. {
  20. /**
  21. * 检测用户是否可以成为会员
  22. * @param Request $request
  23. * @return mixed
  24. * @throws \think\db\exception\DataNotFoundException
  25. * @throws \think\db\exception\ModelNotFoundException
  26. */
  27. public function detection(Request $request)
  28. {
  29. UserLevel::beginTrans();
  30. $res = UserLevel::setLevelComplete($request->uid());
  31. UserLevel::checkTrans($res);
  32. return app('json')->successful($res);
  33. }
  34. /**
  35. * 会员等级列表
  36. * @param Request $request
  37. * @return mixed
  38. */
  39. public function grade(Request $request)
  40. {
  41. $res = UserLevel::setLevelComplete($request->uid());
  42. return app('json')->successful(SystemUserLevel::getLevelList($request->uid()));
  43. }
  44. /**
  45. * 获取等级任务
  46. * @param Request $request
  47. * @param $id
  48. * @return mixed
  49. */
  50. public function task(Request $request, $id)
  51. {
  52. return app('json')->successful(SystemUserTask::getTashList($id, $request->uid()));
  53. }
  54. /**
  55. * 等级购买订单创建
  56. * @param Request $request
  57. * @param $key
  58. * @return mixed
  59. * @throws \think\Exception
  60. * @throws \think\db\exception\DataNotFoundException
  61. * @throws \think\db\exception\ModelNotFoundException
  62. * @throws \think\exception\DbException
  63. */
  64. public function create(Request $request, $level)
  65. {
  66. if (!$level) return app('json')->fail('参数错误!');
  67. $uid = $request->uid();
  68. // if (StoreOrder::be(['order_id|unique' => $key, 'uid' => $uid, 'is_del' => 0]))
  69. // return app('json')->status('extend_order', '订单已生成', ['orderId' => $key, 'key' => $key]);
  70. // list($addressId, $couponId, $payType, $useIntegral, $mark, $combinationId, $pinkId, $seckill_id, $formId, $bargainId, $from, $shipping_type, $real_name, $phone, $storeId) = UtilService::postMore([
  71. // 'addressId', 'couponId', 'payType', ['useIntegral', 0], 'mark', ['combinationId', 0], ['pinkId', 0], ['seckill_id', 0], ['formId', ''], ['bargainId', ''], ['from', 'weixin'],
  72. // ['shipping_type', 1], ['real_name', ''], ['phone', ''], ['store_id', 0]
  73. // ], $request, true);
  74. list($payType,$formId,$from,$level_id) = UtilService::postMore([
  75. 'payType', ['formId', ''], ['from', 'weixin'], ['level', 0]
  76. ], $request, true);
  77. $payType = strtolower($payType);
  78. $isChannel = 1;
  79. if ($from == 'weixin')
  80. $isChannel = 0;
  81. elseif ($from == 'weixinh5')
  82. $isChannel = 2;
  83. $order = UserLevelOrder::CreateOrder($request->uid(), $level_id, $payType);
  84. if ($order === false) return app('json')->fail(UserLevelOrder::getErrorInfo('订单生成失败'));
  85. $orderId = $order['order_id'];
  86. // $info = compact('orderId', 'key');
  87. $info = $orderId;
  88. if ($orderId) {
  89. event('OrderCreated', [$order]); //订单创建成功事件
  90. // event('ShortMssageSend', [$orderId, 'AdminPlaceAnOrder']);//发送管理员通知
  91. switch ($payType) {
  92. case "weixin":
  93. $orderInfo = UserLevelOrder::where('order_id', $orderId)->find();
  94. if (!$orderInfo || !isset($orderInfo['paid'])) return app('json')->fail('支付订单不存在!');
  95. $orderInfo = $orderInfo->toArray();
  96. if ($orderInfo['paid']) return app('json')->fail('支付已支付!');
  97. //支付金额为0
  98. if (bcsub((float)$orderInfo['pay_price'], 0, 2) <= 0) {
  99. //创建订单jspay支付
  100. $payPriceStatus = UserLevelOrder::jsPayPrice($orderId, $uid, $formId);
  101. if ($payPriceStatus)//0元支付成功
  102. return app('json')->status('success', '微信支付成功', $info);
  103. else
  104. return app('json')->status('pay_error', UserLevelOrder::getErrorInfo());
  105. } else {
  106. try {
  107. if ($from == 'routine') {
  108. $jsConfig = OrderRepository::jsPay($orderId); //创建订单jspay
  109. } else if ($from == 'weixinh5') {
  110. $jsConfig = OrderRepository::h5Pay($orderId);
  111. } else {
  112. $jsConfig = OrderRepository::wxPay($orderId);
  113. }
  114. } catch (\Exception $e) {
  115. return app('json')->status('pay_error', $e->getMessage(), $info);
  116. }
  117. $info['jsConfig'] = $jsConfig;
  118. if ($from == 'weixinh5') {
  119. return app('json')->status('wechat_h5_pay', '订单创建成功', $info);
  120. } else {
  121. return app('json')->status('wechat_pay', '订单创建成功', $info);
  122. }
  123. }
  124. break;
  125. case 'yue':
  126. if (UserLevelOrder::yuePay($orderId, $request->uid(), $formId))
  127. return app('json')->status('success', '余额支付成功', $info);
  128. else {
  129. $errorinfo = UserLevelOrder::getErrorInfo();
  130. if (is_array($errorinfo))
  131. return app('json')->status($errorinfo['status'], $errorinfo['msg'], $info);
  132. else
  133. return app('json')->status('pay_error', $errorinfo);
  134. }
  135. break;
  136. case 'offline':
  137. return app('json')->status('success', '订单创建成功', $info);
  138. break;
  139. }
  140. } else return app('json')->fail(UserLevelOrder::getErrorInfo('订单生成失败!'));
  141. }
  142. }