PayRewardController.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: weifeng
  5. * Date: 2019-12-20
  6. * Time: 09:44
  7. *
  8. * .--, .--,
  9. * ( ( \.---./ ) )
  10. * '.__/o o\__.'
  11. * {= ^ =}
  12. * > - <
  13. * / \
  14. * // \\
  15. * //| . |\\
  16. * "'\ /'"_.-~^`'-.
  17. * \ _ /--' `
  18. * ___)( )(___
  19. * (((__) (__))) 梦之所想,心之所向.
  20. */
  21. namespace app\frontend\modules\orderPay\controllers;
  22. use app\common\components\ApiController;
  23. use app\common\facades\Setting;
  24. use app\common\models\Order;
  25. use app\common\models\OrderPay;
  26. class PayRewardController extends ApiController
  27. {
  28. public function index()
  29. {
  30. $order_sn = request()->order_sn;
  31. if (empty($order_sn)) {
  32. return $this->errorJson('请传入正确参数');
  33. }
  34. $order_ids = OrderPay::where('pay_sn', $order_sn)->pluck('order_ids')->toArray()[0];
  35. $orders = Order::whereIn('id', $order_ids)->get();
  36. if (empty($orders)) {
  37. return $this->errorJson('订单不存在');
  38. }
  39. $price = 0;
  40. foreach ($orders as $order) {
  41. $price += $this->getChangeValue($order);
  42. }
  43. if (!app('plugins')->isEnabled('pay-reward')) {
  44. return $this->errorJson('支付奖励插件未开启,请开启插件');
  45. }
  46. $set = Setting::get('plugin.pay_reward');
  47. $result['title'] = $set['title'];
  48. $result['price'] = $price;
  49. return $this->successJson('ok', $result);
  50. }
  51. private function getChangeValue($order)
  52. {
  53. $orderGoods = $order->hasManyOrderGoods;
  54. $change_value = 0;
  55. foreach ($orderGoods as $goodsModel)
  56. {
  57. $goodsSaleModel = $goodsModel->hasOneGoods->hasOneSale;
  58. if (!$goodsSaleModel || empty($goodsSaleModel->award_balance)) {
  59. continue;
  60. }
  61. $change_value += $this->proportionMath($goodsModel->payment_amount, $goodsSaleModel->award_balance, $goodsModel->total);
  62. }
  63. return $change_value;
  64. }
  65. private function proportionMath($price, $proportion, $total)
  66. {
  67. if (strexists($proportion, '%')) {
  68. $proportion = str_replace('%', '', $proportion);
  69. return bcdiv(bcmul($price,$proportion,4),100,2);
  70. }
  71. return bcmul($proportion,$total,2);
  72. }
  73. }