CommissionService.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. namespace app\admin\service\order;
  3. use app\admin\service\member\MemberService;
  4. use app\model\Member;
  5. use app\model\MemberAccount;
  6. use app\model\MemberAccountList;
  7. use support\Log;
  8. class CommissionService
  9. {
  10. /*
  11. {
  12. "config": {
  13. "name": "名称",
  14. "valid": 365, //有效天
  15. "protocol": 229, //服务协议分类ID
  16. "notice":["", ""] //注意事项数组
  17. },
  18. "goods": {
  19. "goods_id": "", //产品ID
  20. "goods_sku_id": 0, //产品SKUID
  21. "amount": "goods_sales_price" //核算金额字段
  22. },
  23. "commission": {
  24. "direct": 0.2, //直属提成
  25. "indirect": 0.1, //间属提成
  26. "relate-consum": 0.1, //消费关联提成 带客
  27. "invite-non-identity": 0.05, //邀请人非身份会员达成提成
  28. "agent-senior-join": 0.05, //中介加盟合伙人提成
  29. "agent-senior-strategy": 0.05, //中介战略合伙人提成
  30. "account":"CASH" //提成写入账户
  31. },
  32. "account": {
  33. "account":"CASH", //达成金额进入账户 不则为空
  34. "added":0.12 //达成金额增值 不则为0
  35. },
  36. "control": {
  37. "notify": "procMemberPartnerExec", //回调函数
  38. "if_installment": "N", //是否支持分期
  39. "if_commission_out": "Y" //提成是否可提现
  40. }
  41. }
  42. */
  43. public static function commission($config, $memberId, $orderId, $amount, $accountListCategory)
  44. {
  45. Log::info("开始处理提成", ['config' => $config, 'member_id' => $memberId, 'amount' => $amount]);
  46. try {
  47. $member = Member::where('member_id', $memberId)->first();
  48. if (!empty($member->join_invite_member_id)) {
  49. $member1 = Member::where('member_id', $member->join_invite_member_id)->first();
  50. if (!empty($member1->join_invite_member_id)) {
  51. $member2 = Member::where('member_id', $member1->join_invite_member_id)->first();
  52. }
  53. }
  54. // 提成记录JSON
  55. $accountListJson = [
  56. 'line' => 'relate-consum',
  57. 'amount' => $amount,
  58. 'order_id' => $orderId,
  59. 'master_member_id' => $memberId
  60. ];
  61. // 直属提成
  62. if (!empty($member1) && ($member1->member_is_partner == 'Y' || $member1->member_is_referrer == 'Y')) {
  63. $accountListJson['identity'] = MemberService::getIdentity($member1->member_is_partner, $member1->member_is_referrer);
  64. $member1CommissionAmount = $config['commission']['direct'] * $amount;
  65. self::commissionToMember($member1->member_id, $accountListJson, $member1CommissionAmount, $accountListCategory);
  66. }
  67. // 间属提成
  68. if (!empty($member2) && ($member2->member_is_partner == 'Y' || $member2->member_is_referrer == 'Y')) {
  69. $accountListJson['identity'] = MemberService::getIdentity($member2->member_is_partner, $member2->member_is_referrer);
  70. $member2CommissionAmount = $config['commission']['indirect'] * $amount;
  71. self::commissionToMember($member2->member_id, $accountListJson, $member2CommissionAmount, $accountListCategory);
  72. }
  73. } catch (\Exception $e) {
  74. }
  75. }
  76. /**
  77. * @Desc 提成到账户
  78. * @Author Gorden
  79. * @Date 2024/9/25 15:14
  80. *
  81. * @param $memberId
  82. * @param $accountListJson
  83. * @param $money
  84. * @return void
  85. */
  86. private static function commissionToMember($memberId, $accountListJson, $money, $accountListCategory)
  87. {
  88. $account = MemberAccount::where('join_account_member_id', $memberId)->where('member_account_classify', 'CASH')->first();
  89. $account->member_account_income = $account->member_account_income + $money;
  90. $account->member_account_surplus = $account->member_account_surplus + $money;
  91. $account->save();
  92. MemberAccountList::insert([
  93. 'join_list_member_account_nbr' => $memberId . '-CASH',
  94. 'join_member_account_list_member_id' => $memberId,
  95. 'member_account_list_status' => 'ACTIVED',
  96. 'member_account_list_attr' => 'IN',
  97. 'member_account_list_classify' => $accountListJson['identity'],
  98. 'member_account_list_category' => $accountListCategory,
  99. 'member_account_list_datetime' => date('Y-m-d H:i:s'),
  100. 'member_account_list_amount' => $money,
  101. 'member_account_list_json' => json_encode($accountListJson),
  102. 'member_account_list_addtimes' => time()
  103. ]);
  104. }
  105. }