BrokeragePayServices.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\services\pay;
  12. use app\services\BaseServices;
  13. use app\services\order\OtherOrderServices;
  14. use app\services\order\StoreOrderSuccessServices;
  15. use app\services\user\UserBrokerageServices;
  16. use app\services\user\UserMoneyServices;
  17. use app\services\user\UserServices;
  18. use crmeb\exceptions\ApiException;
  19. /**
  20. * 贡献值支付
  21. * Class YuePayServices
  22. * @package app\services\pay
  23. */
  24. class BrokeragePayServices extends BaseServices
  25. {
  26. /**
  27. * 订单贡献值支付
  28. * @param $order_id
  29. * @param $uid
  30. * @return bool
  31. */
  32. public function BrokerageOrderPay(array $orderInfo, $uid)
  33. {
  34. if (!$orderInfo) {
  35. throw new ApiException(410173);
  36. }
  37. if ($orderInfo['paid']) {
  38. throw new ApiException(410174);
  39. }
  40. $type = 'pay_product';
  41. if (isset($orderInfo['member_type'])) {
  42. $type = 'pay_member';
  43. }
  44. /** @var UserServices $services */
  45. $services = app()->make(UserServices::class);
  46. $userInfo = $services->getUserInfo($uid);
  47. if ($userInfo['brokerage_price'] < $orderInfo['pay_price']) {
  48. return ['status' => 'pay_brokerage_deficiency', 'msg' => '贡献值不足' . floatval($orderInfo['pay_price'])];
  49. }
  50. $this->transaction(function () use ($services, $orderInfo, $userInfo, $type) {
  51. $res = false !== $services->bcDec($userInfo['uid'], 'brokerage_price', $orderInfo['pay_price'], 'uid');
  52. /** @var UserBrokerageServices $userBrokerageServices */
  53. $userBrokerageServices = app()->make(UserBrokerageServices::class);
  54. //写入余额记录
  55. $brokerage_price = bcsub((string)$userInfo['brokerage_price'], (string)$orderInfo['pay_price'], 2);
  56. $number = $orderInfo['pay_price'];
  57. switch ($type) {
  58. case 'pay_product'://商品余额
  59. $res = $res && $userBrokerageServices->income('pay_brokerage_product', $userInfo['uid'], $number, $brokerage_price, $orderInfo['id']);
  60. /** @var StoreOrderSuccessServices $orderServices */
  61. $orderServices = app()->make(StoreOrderSuccessServices::class);
  62. $res = $res && $orderServices->paySuccess($orderInfo, PayServices::BROKERAGE_PAY);//余额支付成功
  63. break;
  64. case 'pay_member'://会员卡支付
  65. $res = $res && $userBrokerageServices->income('pay_member', $userInfo['uid'], $number, $brokerage_price, $orderInfo['id']);
  66. /** @var OtherOrderServices $OtherOrderServices */
  67. $OtherOrderServices = app()->make(OtherOrderServices::class);
  68. $res = $res && $OtherOrderServices->paySuccess($orderInfo, PayServices::BROKERAGE_PAY);//余额支付成功
  69. break;
  70. }
  71. if (!$res) {
  72. throw new ApiException(410279);
  73. }
  74. });
  75. return ['status' => true];
  76. }
  77. }