Log.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. <?php
  2. namespace app\admin\model\shopro\commission;
  3. use app\admin\model\shopro\Common;
  4. use addons\shopro\library\Operator;
  5. use app\admin\model\shopro\user\User as UserModel;
  6. class Log extends Common
  7. {
  8. protected $name = 'shopro_commission_log';
  9. protected $updateTime = false;
  10. protected $append = [
  11. 'event_text',
  12. 'oper_type_text'
  13. ];
  14. /**
  15. * 添加分销记录
  16. *
  17. * @param object $agentId 分销商ID
  18. * @param string $event 事件类型
  19. * @param array $ext 扩展信息
  20. * @param object $oper 操作人
  21. * @param string $remark 自定义备注
  22. *
  23. */
  24. public static function add($agentId, $event, $ext = [], $oper = NULL, $remark = '')
  25. {
  26. if ($remark === '') {
  27. switch ($event) {
  28. case 'agent':
  29. $remark = self::setAgentEvent($ext);
  30. break;
  31. case 'share':
  32. $remark = self::setShareEvent($ext);
  33. break;
  34. case 'bind':
  35. $remark = self::setBindEvent($ext);
  36. break;
  37. case 'order':
  38. $remark = self::setOrderEvent($ext);
  39. break;
  40. case 'reward':
  41. $remark = self::setRewardEvent($ext);
  42. break;
  43. }
  44. }
  45. if ($remark !== '') {
  46. $oper = Operator::get($oper);
  47. $log = [
  48. 'agent_id' => $agentId,
  49. 'event' => $event,
  50. 'remark' => $remark,
  51. 'oper_type' => $oper['type'],
  52. 'oper_id' => $oper['id'],
  53. 'createtime' => time()
  54. ];
  55. return self::create($log);
  56. }
  57. return NULL;
  58. }
  59. public static function setAgentEvent($ext)
  60. {
  61. switch ($ext['type']) {
  62. case 'status': // 变更状态
  63. switch ($ext['value']) {
  64. case Agent::AGENT_STATUS_PENDING:
  65. $remark = "您的资料已提交,等待管理员审核";
  66. break;
  67. case Agent::AGENT_STATUS_FORBIDDEN:
  68. $remark = "您的账户已被禁用";
  69. break;
  70. case Agent::AGENT_STATUS_NORMAL:
  71. $remark = "恭喜您成为分销商";
  72. break;
  73. case Agent::AGENT_STATUS_FREEZE:
  74. $remark = "您的账户已被冻结";
  75. break;
  76. case Agent::AGENT_STATUS_REJECT:
  77. $remark = "您的申请已被拒绝,请重新申请";
  78. break;
  79. }
  80. break;
  81. case 'level': // 变更等级
  82. $remark = "您的等级已变更为[{$ext['level']['name']}]";
  83. break;
  84. case 'apply_info':
  85. $remark = '您的分销商资料信息已更新';
  86. break;
  87. }
  88. return $remark ?? "";
  89. }
  90. public static function setShareEvent($ext)
  91. {
  92. $remark = "您已成为用户[{$ext['user']['nickname']}]的推荐人";
  93. return $remark;
  94. }
  95. public static function setBindEvent($ext)
  96. {
  97. $remark = "";
  98. if ($ext['user']) {
  99. $remark = "用户[{$ext['user']['nickname']}]已绑定为您的推荐人";
  100. }
  101. return $remark;
  102. }
  103. public static function setOrderEvent($ext)
  104. {
  105. switch ($ext['type']) {
  106. case 'paid':
  107. $goodsName = $ext['item']['goods_title'];
  108. if (mb_strlen($goodsName) > 9) {
  109. $goodsName = mb_substr($goodsName, 0, 5) . '...' . mb_substr($goodsName, -3);
  110. }
  111. if ($ext['order']['self_buy'] == 1) {
  112. $remark = "您购买了{$goodsName},为您新增业绩{$ext['order']['amount']}元, +1分销订单";
  113. } else {
  114. $remark = "用户{$ext['buyer']['nickname']}购买了{$goodsName},为您新增业绩{$ext['order']['amount']}元, +1分销订单";
  115. }
  116. break;
  117. case 'refund':
  118. $remark = "用户{$ext['buyer']['nickname']}已退款,扣除业绩{$ext['order']['amount']}元, -1分销订单";
  119. break;
  120. case 'admin':
  121. $remark = "扣除业绩{$ext['order']['amount']}元, -1分销订单";
  122. break;
  123. }
  124. return $remark;
  125. }
  126. public static function setRewardEvent($ext)
  127. {
  128. $actionStr = '';
  129. $remark = '';
  130. switch ($ext['type']) {
  131. case 'paid':
  132. $actionStr = '支付成功';
  133. break;
  134. case 'confirm':
  135. $actionStr = '已确认收货';
  136. break;
  137. case 'finish':
  138. $actionStr = '已完成订单';
  139. break;
  140. }
  141. if ($actionStr !== '') {
  142. $remark = "用户{$actionStr}, ";
  143. }
  144. switch ($ext['reward']['status']) {
  145. case Reward::COMMISSION_REWARD_STATUS_PENDING:
  146. $rewardStatus = '待入账';
  147. break;
  148. case Reward::COMMISSION_REWARD_STATUS_ACCOUNTED:
  149. $rewardStatus = '已入账';
  150. break;
  151. case Reward::COMMISSION_REWARD_STATUS_BACK:
  152. $rewardStatus = '已扣除';
  153. break;
  154. case Reward::COMMISSION_REWARD_STATUS_CANCEL:
  155. $rewardStatus = '已取消';
  156. break;
  157. }
  158. $remark .= "您有{$ext['reward']['commission']}元佣金{$rewardStatus}";
  159. return $remark;
  160. }
  161. public function eventList()
  162. {
  163. return [
  164. 'agent' => '分销商',
  165. 'order' => '订单',
  166. 'reward' => '佣金',
  167. 'share' => '推荐',
  168. 'bind' => '绑定',
  169. ];
  170. }
  171. public function operTypeList()
  172. {
  173. return [
  174. 'user' => '用户',
  175. 'admin' => '管理员',
  176. 'system' => '系统',
  177. ];
  178. }
  179. /**
  180. * 事件类型
  181. *
  182. * @param string $value
  183. * @param array $data
  184. * @return string
  185. */
  186. public function getEventTextAttr($value, $data)
  187. {
  188. $value = $value ?: ($data['event'] ?? null);
  189. $list = $this->eventList();
  190. return isset($list[$value]) ? $list[$value] : '-';
  191. }
  192. /**
  193. * 操作人类型
  194. *
  195. * @param string $value
  196. * @param array $data
  197. * @return string
  198. */
  199. public function getOperTypeTextAttr($value, $data)
  200. {
  201. $value = $value ?: ($data['oper_type'] ?? null);
  202. $list = $this->operTypeList();
  203. return isset($list[$value]) ? $list[$value] : '';
  204. }
  205. public function agent()
  206. {
  207. return $this->belongsTo(UserModel::class, 'agent_id', 'id')->field('id, username, nickname, avatar, gender');
  208. }
  209. }