You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

181 lines
6.8 KiB

  1. <?php
  2. namespace App\Service;
  3. use App\Model\FinancialRecord;
  4. use App\Model\Store;
  5. use App\Model\UserBalance;
  6. use App\Model\Users;
  7. class FinancialRecordService implements FinancialRecordServiceInterface
  8. {
  9. public function ledgerAccounts($source_id, $money, $source_type, $money_type, $desc, $comment='')
  10. {
  11. return $this->record(
  12. FinancialRecord::ACCOUNT_LEDGER,
  13. [
  14. 'user_id' => FinancialRecord::ACCOUNT_LEDGER,
  15. 'user_type' => FinancialRecord::USER_TYPE_LEDGER,
  16. 'money' => $money,
  17. 'money_type' => $money_type,
  18. 'source_id' => $source_id,
  19. 'source_type' => $source_type,
  20. 'desc' => $desc,
  21. 'comment' => $comment,
  22. 'status' => FinancialRecord::STATUS_NORMAL,
  23. ],
  24. true
  25. );
  26. }
  27. public function record($user_id, $record, $isLedger=false)
  28. {
  29. $financialRecord = new FinancialRecord();
  30. if (!$isLedger) {
  31. $mod = bcmod((string)$user_id, '5', 0);
  32. $financialRecord->suffix($mod);
  33. }
  34. return $financialRecord->fill(
  35. [
  36. 'user_id' => $user_id,
  37. 'user_type' => $record['user_type'],
  38. 'money' => $record['money'],
  39. 'money_type' => $record['money_type'],
  40. 'source_id' => $record['source_id'],
  41. 'source_type' => $record['source_type'],
  42. 'desc' => $record['desc'],
  43. 'comment' => $record['comment'],
  44. 'status' => $record['status'],
  45. ]
  46. )->save();
  47. }
  48. /**
  49. * @inheritDoc
  50. */
  51. public function communityAwardByPlatNewUser($user_id, $source_id, $money, $user_type=2, $source_type=1, $money_type=1, $desc='新用户奖励', $comment='社区服务点')
  52. {
  53. $this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
  54. // 维护社区服务点余额
  55. $balance = UserBalance::firstOrNew([
  56. 'user_type' => UserBalance::USER_TYPE_CS,
  57. 'source_id' => $user_id
  58. ]);
  59. $balance->balance = bcadd($balance->balance, $money);
  60. $balance->save();
  61. }
  62. /**
  63. * @inheritDoc
  64. */
  65. public function communityAwardByPlatNewUserFirstOLOrder($user_id, $source_id, $money, $user_type=2, $source_type=1, $money_type=2, $desc='新用户首单奖励', $comment='社区服务点')
  66. {
  67. $this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
  68. // 维护社区服务点余额
  69. $balance = UserBalance::firstOrNew([
  70. 'user_type' => UserBalance::USER_TYPE_CS,
  71. 'source_id' => $user_id
  72. ]);
  73. $balance->balance = bcadd($balance->balance, $money);
  74. $balance->save();
  75. }
  76. /**
  77. * @inheritDoc
  78. */
  79. public function communitySeparateAccountsByOrderComp($user_id, $source_id, $money, $user_type=2, $source_type=1, $money_type=3, $desc='用户订单分成', $comment='社区服务点')
  80. {
  81. $this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
  82. // 维护社区服务点余额
  83. $balance = UserBalance::firstOrNew([
  84. 'user_type' => UserBalance::USER_TYPE_CS,
  85. 'source_id' => $user_id
  86. ]);
  87. $balance->balance = bcadd($balance->balance, $money);
  88. $balance->save();
  89. }
  90. /**
  91. * @inheritDoc
  92. */
  93. public function storeAwardByPlatNewUserOFLOrder($user_id, $source_id, $money, $user_type=1, $source_type=1, $money_type=4, $desc='新用户下单奖励', $comment='用户当面付商户奖励')
  94. {
  95. $this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
  96. // 同时维护钱包
  97. $store = Store::query()->where(['user_id' => $user_id])->first();
  98. $store->award_money = bcadd($store->award_money, $money, 2);
  99. $store->save();
  100. }
  101. /**
  102. * @inheritDoc
  103. */
  104. public function storeAwardByTodayFirstOFLOrder($user_id, $source_id, $money, $user_type=1, $source_type=1, $money_type=5, $desc='用户店铺首单奖励', $comment='用户当面付商户奖励')
  105. {
  106. $this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
  107. // 同时维护钱包
  108. $store = Store::query()->where(['user_id' => $user_id])->first();
  109. $store->award_money = bcadd($store->award_money, $money, 2);
  110. $store->save();
  111. }
  112. public function recordAll($user_id, $source_id, $money, $user_type=1, $source_type=0, $money_type=0, $desc='', $comment='') {
  113. $this->record(
  114. $user_id,
  115. [
  116. 'user_id' => $user_id,
  117. 'user_type' => $user_type,
  118. 'money' => $money,
  119. 'money_type' => $money_type,
  120. 'source_id' => $source_id,
  121. 'source_type' => $source_type,
  122. 'desc' => $desc,
  123. 'comment' => $comment,
  124. 'status' => FinancialRecord::STATUS_NORMAL,
  125. ]
  126. );
  127. $this->ledgerAccounts($source_id, $money, $source_type, $money_type, $desc, $comment);
  128. }
  129. /**
  130. * @inheritDoc
  131. */
  132. public function userByOFLOrderPaid($user_id, $source_id, $money, $user_type=1, $source_type=1, $money_type=100, $desc='用户下单(线下)', $comment='用户下单')
  133. {
  134. $this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
  135. }
  136. /**
  137. * @inheritDoc
  138. */
  139. public function userByOLOrderPaid($user_id, $source_id, $money, $user_type=1, $source_type=1, $money_type=101, $desc='用户下单(线上)', $comment='用户下单')
  140. {
  141. $this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
  142. }
  143. /**
  144. * @inheritDoc
  145. */
  146. public function storeByOLOrderComp($user_id, $source_id, $money, $user_type = 1, $source_type = 1, $money_type = 6, $desc = '线上外卖订单收入', $comment = '用户订单完成')
  147. {
  148. $this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
  149. // 同时维护钱包
  150. $store = Store::query()->where(['user_id' => $user_id])->first();
  151. $store->store_wallet = bcadd($store->store_wallet, $money, 2);
  152. $store->save();
  153. }
  154. /**
  155. * @inheritDoc
  156. */
  157. public function storeByOFLOrderComp($user_id, $source_id, $money, $user_type = 1, $source_type = 1, $money_type = 7, $desc = '线下当面付订单收入', $comment = '用户订单完成')
  158. {
  159. $this->recordAll($user_id, $source_id, $money, $user_type, $source_type, $money_type, $desc, $comment);
  160. }
  161. }