RechargeController.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: king
  5. * Date: 2018/10/12
  6. * Time: 下午4:40
  7. */
  8. namespace app\backend\modules\balance\controllers;
  9. use app\backend\modules\balance\services\BalanceRechargeService;
  10. use app\backend\modules\finance\models\BalanceRechargeRecords;
  11. use app\backend\modules\member\models\Member;
  12. use app\common\components\BaseController;
  13. use app\common\events\finance\BalanceRechargedEvent;
  14. use app\common\exceptions\ShopException;
  15. use app\common\helpers\Url;
  16. use app\common\services\credit\ConstService;
  17. use app\common\services\finance\BalanceChange;
  18. class RechargeController extends BaseController
  19. {
  20. /**
  21. * @var Member
  22. */
  23. private $memberModel;
  24. /**
  25. * @var BalanceRechargeRecords
  26. */
  27. private $rechargeModel;
  28. public function index()
  29. {
  30. $this->memberModel = $this->getMemberModel();
  31. //todo 加速开发,暂时不提独立模型
  32. if (request()->ajax()) {
  33. if (!request()->num || !is_numeric(request()->num)) {
  34. return $this->errorJson('请输入充值金额');
  35. }
  36. $balanceRechargeService = new BalanceRechargeService();
  37. if ($balanceRechargeService->chargeCheckOpen()) {//需要进行审核
  38. try {
  39. $balanceRechargeService->rechargeStart($this->getRechargeCheckData());
  40. return $this->successJson('充值提交成功,等待审核通过即可完成充值');
  41. } catch (\Exception $e) {
  42. return $this->errorJson($e->getMessage());
  43. }
  44. }
  45. $result = $this->rechargeStart();
  46. if ($result === true) {
  47. return $this->successJson('余额充值成功');
  48. }
  49. return $this->errorJson($result);
  50. }
  51. return view('finance.balance.recharge_new', $this->getResultData())->render();
  52. }
  53. /**
  54. * @return array
  55. */
  56. private function getResultData()
  57. {
  58. return [
  59. 'rechargeMenu' => $this->getRechargeMenu(),
  60. 'memberInfo' => $this->memberModel,
  61. 'charge_check_swich' => \Setting::get('finance.balance.charge_check_swich') ? 1 : 0
  62. ];
  63. }
  64. private function rechargeStart()
  65. {
  66. $this->rechargeModel = new BalanceRechargeRecords();
  67. $this->rechargeModel->fill($this->getRechargeData());
  68. $validator = $this->rechargeModel->validator();
  69. if ($validator->fails()) {
  70. return $validator->messages();
  71. }
  72. if ($this->rechargeModel->save()) {
  73. $data = $this->getChangeBalanceData();
  74. if ($this->rechargeModel->money > 0 ) {
  75. $data['change_value'] = $this->rechargeModel->money;
  76. $result = (new BalanceChange())->recharge($data);
  77. } else {
  78. $data['change_value'] = -$this->rechargeModel->money;
  79. $result = (new BalanceChange())->rechargeMinus($data);
  80. }
  81. return $result === true ? $this->updateRechargeStatus() : $result;
  82. }
  83. return '充值记录写入出错,请联系管理员';
  84. }
  85. private function updateRechargeStatus()
  86. {
  87. $this->rechargeModel->status = BalanceRechargeRecords::PAY_STATUS_SUCCESS;
  88. if ($this->rechargeModel->save()) {
  89. event(new BalanceRechargedEvent($this->rechargeModel));
  90. return true;
  91. }
  92. return '充值状态修改失败';
  93. }
  94. private function getRechargeCheckData()
  95. {
  96. return array(
  97. 'member_id' => $this->memberModel->uid,
  98. 'money' => $this->getPostNum(),
  99. 'type' => BalanceRechargeRecords::PAY_TYPE_SHOP,
  100. 'recharge_remark' => $this->getPostRemark(),
  101. 'remark' => '后台充值' . $this->getPostNum() . "元",
  102. 'source' => ConstService::SOURCE_RECHARGE,
  103. 'operator' => ConstService::OPERATOR_SHOP,
  104. 'operator_id' => \YunShop::app()->uid,
  105. 'explain' => trim(\YunShop::request()->explain),
  106. 'enclosure' => \YunShop::request()->enclosure,
  107. );
  108. }
  109. private function getChangeBalanceData()
  110. {
  111. return array(
  112. 'member_id' => $this->rechargeModel->member_id,
  113. 'remark' => '后台充值' . $this->rechargeModel->money . "元",
  114. 'source' => ConstService::SOURCE_RECHARGE,
  115. 'relation' => $this->rechargeModel->ordersn,
  116. 'operator' => ConstService::OPERATOR_SHOP,
  117. 'operator_id' => \YunShop::app()->uid
  118. );
  119. }
  120. /**
  121. * @return array
  122. */
  123. private function getRechargeData()
  124. {
  125. return array(
  126. 'uniacid' => \YunShop::app()->uniacid,
  127. 'member_id' => $this->memberModel->uid,
  128. 'old_money' => $this->memberModel->credit2,
  129. 'money' => $this->getPostNum(),
  130. 'new_money' => $this->getNewMoney(),
  131. 'type' => BalanceRechargeRecords::PAY_TYPE_SHOP,
  132. 'ordersn' => BalanceRechargeRecords::createOrderSn('RV','ordersn'),
  133. 'status' => BalanceRechargeRecords::PAY_STATUS_ERROR,
  134. 'remark' => $this->getPostRemark()
  135. );
  136. }
  137. /**
  138. * @return float
  139. */
  140. private function getNewMoney()
  141. {
  142. $new_value = bcadd( $this->memberModel->credit2, $this->getPostNum(), 2);
  143. return $new_value > 0 ? $new_value : 0;
  144. }
  145. /**
  146. * @return Member
  147. * @throws ShopException
  148. */
  149. private function getMemberModel()
  150. {
  151. $member_id = $this->getPostMemberId();
  152. $memberModel = Member::getMemberInfoById($member_id);
  153. if (!$memberModel) {
  154. throw new ShopException('会员信息错误');
  155. }
  156. return $memberModel;
  157. }
  158. /**
  159. * @return int
  160. * @throws ShopException
  161. */
  162. private function getPostMemberId()
  163. {
  164. $member_id = \YunShop::request()->member_id;
  165. if (!$member_id) {
  166. throw new ShopException('请输入正确的参数');
  167. }
  168. return (int)$member_id;
  169. }
  170. /**
  171. * @return float
  172. */
  173. private function getPostNum()
  174. {
  175. return trim(\YunShop::request()->num);
  176. }
  177. /**
  178. * @return string
  179. */
  180. private function getPostRemark()
  181. {
  182. return trim(\YunShop::request()->remark);
  183. }
  184. /**
  185. * @return array
  186. */
  187. private function getRechargeMenu()
  188. {
  189. return array(
  190. 'title' => '余额充值',
  191. 'name' => '粉丝',
  192. 'profile' => '会员信息',
  193. 'old_value' => '当前余额',
  194. 'charge_value' => '充值金额',
  195. 'type' => 'balance'
  196. );
  197. }
  198. }