CommissionEvent.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. namespace app\event\order;
  3. use app\model\Member;
  4. use app\model\MemberAccount;
  5. use app\model\MemberAccountList;
  6. use app\model\Order;
  7. use app\model\SysConfig;
  8. use support\Db;
  9. use support\exception\BusinessException;
  10. use support\Log;
  11. class CommissionEvent
  12. {
  13. //{
  14. //"config": {
  15. //"name": "名称",
  16. //"valid": 365, //有效天
  17. //"protocol": 229, //服务协议分类ID
  18. //"notice":["", ""] //注意事项数组
  19. //},
  20. //"goods": {
  21. // "goods_id": "", //产品ID
  22. // "goods_sku_id": 0, //产品SKUID
  23. // "amount": "goods_sales_price" //核算金额字段
  24. // },
  25. // "commission": {
  26. // "direct": 0.2, //直属提成
  27. // "indirect": 0.1, //间属提成
  28. // "relate-consum": 0.1, //消费关联提成 带客
  29. // "invite-non-identity": 0.05, //邀请人非身份会员达成提成
  30. // "agent-senior-join": 0.05, //中介加盟合伙人提成
  31. // "agent-senior-strategy": 0.05, //中介战略合伙人提成
  32. // "account":"CASH" //提成写入账户
  33. // },
  34. // "account": {
  35. // "account":"CASH", //达成金额进入账户 不则为空
  36. // "added":0.12 //达成金额增值 不则为0
  37. // },
  38. // "control": {
  39. // "notify": "procMemberPartnerExec", //回调函数
  40. // "if_installment": "N", //是否支持分期
  41. // "if_commission_out": "Y" //提成是否可提现
  42. // }
  43. //}
  44. public function order($params)
  45. {
  46. Log::info("计算消费提成",$params);
  47. Db::beginTransaction();
  48. try {
  49. $order = Order::where('order_id', $params['orderId'])->where('order_status_payment', 'SUCCESS')->first();
  50. // 有传过来的
  51. if (!empty($params['join_invite_member_id'])) {
  52. $inviteMemberId = $params['join_invite_member_id'];
  53. } else {
  54. // 下单人
  55. $member = Member::where('member_id', $order->join_order_member_id)->first();
  56. if (empty($member->join_invite_member_id)) {
  57. throw new BusinessException("没有直属上级");
  58. }
  59. $inviteMemberId = $member->join_invite_member_id;
  60. }
  61. // 上级
  62. $memberUp = Member::where('member_id', $inviteMemberId)->first();
  63. if ($memberUp->member_is_partner == 'Y') {
  64. $identity = 'PARTNER';
  65. // 提成设置
  66. $config = SysConfig::where('config_key', 'app-identity-partner-config')->first();
  67. } elseif ($memberUp->member_is_referrer == 'Y') {
  68. $identity = 'REFERRER';
  69. // 提成设置
  70. $config = SysConfig::where('config_key', 'app-identity-referrer-config')->first();
  71. // $configParams = json_decode($config->config_value_json, true);
  72. }else{
  73. throw new BusinessException("直属上级非合伙人或者推荐官");
  74. }
  75. $configParams = json_decode($config->config_value_json, true);
  76. // 记录的JSON
  77. $accountListJson = [
  78. 'line' => 'relate-consum',
  79. 'amount' => $order->order_amount_pay,
  80. 'identity' => $identity,
  81. 'order_id' => $order->order_id,
  82. 'master_member_id' => $order->join_order_member_id
  83. ];
  84. Log::info("提成参数",$accountListJson);
  85. // 提成
  86. $this->commissionToMember($inviteMemberId, $accountListJson, round($configParams['commission']['relate-consum'] * $order->order_amount_pay, 2), '消费');
  87. Db::commit();
  88. _syslog("提成", "计算提成成功");
  89. } catch (BusinessException $e) {
  90. Db::rollBack();
  91. _syslog("提成", "计算提成失败:" . $e->getMessage());
  92. } catch (\Exception $e) {
  93. dump($e->getMessage());
  94. Db::rollBack();
  95. _syslog("提成", "计算提成失败");
  96. }
  97. }
  98. /**
  99. * @Desc
  100. * @Author Gorden
  101. * @Date 2024/9/25 15:14
  102. *
  103. * @param $memberId
  104. * @param $accountListJson
  105. * @param $money
  106. * @return void
  107. */
  108. private function commissionToMember($memberId, $accountListJson, $money, $accountListCategory)
  109. {
  110. try {
  111. $account = MemberAccount::where('join_account_member_id', $memberId)->where('member_account_classify', 'CASH')->first();
  112. $account->member_account_income = $account->member_account_income + $money;
  113. $account->member_account_surplus = $account->member_account_surplus + $money;
  114. $account->save();
  115. MemberAccountList::insert([
  116. 'join_list_member_account_nbr' => $memberId . '-CASH',
  117. 'join_member_account_list_member_id' => $memberId,
  118. 'member_account_list_status' => 'ACTIVED',
  119. 'member_account_list_attr' => 'IN',
  120. 'member_account_list_classify' => $accountListJson['identity'],
  121. 'member_account_list_category' => $accountListCategory,
  122. 'member_account_list_datetime' => date('Y-m-d H:i:s'),
  123. 'member_account_list_amount' => $money,
  124. 'member_account_list_json' => json_encode($accountListJson),
  125. 'member_account_list_addtimes' => time()
  126. ]);
  127. }catch (\Exception $e){
  128. Log::error("提成入账失败",['msg'=>$e->getMessage()]);
  129. }
  130. }
  131. }