PointLog.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Author: 芸众商城 www.yunzshop.com
  5. * Date: 2017/4/10
  6. * Time: 下午5:47
  7. */
  8. namespace app\common\models\finance;
  9. use app\common\models\BaseModel;
  10. use app\common\models\Member;
  11. use app\common\models\Order;
  12. use app\common\observers\point\PointChangeObserver;
  13. use app\common\services\finance\PointService;
  14. /**
  15. * @method static self searchMember($search = [])
  16. * Class PointLog
  17. * @package app\common\models\finance
  18. */
  19. class PointLog extends BaseModel
  20. {
  21. protected $table = 'yz_point_log';
  22. protected $guarded = [''];
  23. protected $search_fields = ['id'];
  24. protected $appends = ['source_name'];
  25. public static function boot()
  26. {
  27. parent::boot();
  28. self::observe(PointChangeObserver::class);
  29. }
  30. public function hasOneOrder()
  31. {
  32. return $this->hasOne(Order::class, 'id', 'order_id');
  33. }
  34. public function member()
  35. {
  36. return $this->belongsTo(Member::class, 'member_id', 'uid');
  37. }
  38. public function getSourceNameAttribute()
  39. {
  40. return $this->getSourceNameComment($this->attributes['point_mode']);
  41. }
  42. public function getSourceNameComment($sourceAttribute)
  43. {
  44. return isset($this->sourceComment()[$sourceAttribute]) ? $this->sourceComment()[$sourceAttribute] : "未知变动";
  45. }
  46. /**
  47. * @param static $query
  48. * @param array $search
  49. */
  50. public function scopeSearch($query, $search = [])
  51. {
  52. if ($search['source']) {
  53. $query->where("point_mode", $search['source']);
  54. }
  55. if ($search['income_type']) {
  56. $query->where("point_income_type", $search['income_type']);
  57. }
  58. if ($search['search_time']) {
  59. $query->whereBetween('created_at', [strtotime($search['time']['start']), strtotime($search['time']['end'])]
  60. );
  61. }
  62. $query->searchMember($search);
  63. }
  64. /**
  65. * @param static $query
  66. * @param array $search
  67. */
  68. public function scopeSearchMember($query, $search = [])
  69. {
  70. if ($search['member'] || $search['level_id'] || $search['group_id'] || $search['member_id']) {
  71. $query->whereHas('member', function ($query) use ($search) {
  72. /**
  73. * @var Member $query
  74. */
  75. $query->search($search);
  76. });
  77. }
  78. }
  79. /**
  80. * todo 原有机制优化,临时使用,可以优化为 Key => value,自动加载模式
  81. *
  82. * @return array
  83. */
  84. public function sourceComment()
  85. {
  86. return [
  87. PointService::POINT_MODE_GOODS => '商品赠送',
  88. PointService::POINT_MODE_ORDER => '订单赠送',
  89. PointService::POINT_MODE_POSTER => '超级海报',
  90. PointService::POINT_MODE_ARTICLE => '文章营销',
  91. PointService::POINT_MODE_ADMIN => '后台充值',
  92. PointService::POINT_MODE_BY => '购物抵扣',
  93. PointService::POINT_MODE_TEAM => '团队奖励',
  94. PointService::POINT_MODE_LIVE => '生活缴费奖励',
  95. PointService::POINT_MODE_AIR => '飞机票奖励',
  96. PointService::POINT_MODE_CASHIER => '收银台奖励',
  97. PointService::POINT_MODE_STORE => '门店奖励',
  98. PointService::POINT_MODE_HOTEL_CASHIER => '酒店收银台奖励',
  99. PointService::POINT_MODE_HOTEL => '酒店奖励',
  100. PointService::POINT_MODE_RECHARGE => '话费充值奖励',
  101. PointService::POINT_MODE_FLOW => '流量充值奖励',
  102. PointService::POINT_MODE_TRANSFER => '转让-转出',
  103. PointService::POINT_MODE_RECIPIENT => '转让-转入',
  104. PointService::POINT_MODE_ROLLBACK => '返还',
  105. PointService::POINT_MODE_COUPON_DEDUCTION_AWARD => '优惠券抵扣奖励',
  106. PointService::POINT_MODE_TRANSFER_LOVE => $this->transferLoveName(),
  107. PointService::POINT_MODE_RECHARGE_CODE => '充值码充值',
  108. PointService::POINT_MODE_TASK_REWARD => '任务奖励',
  109. PointService::POINT_MODE_SIGN_REWARD => $this->signAwardName(),
  110. PointService::POINT_MODE_COURIER_REWARD => '快递单奖励',
  111. PointService::POINT_MODE_FROZE_AWARD => $this->frozeAwardName(),
  112. PointService::POINT_MODE_COMMUNITY_REWARD => '圈子签到奖励',
  113. PointService::POINT_MODE_CREATE_ACTIVITY => '创建活动',
  114. PointService::POINT_MODE_ACTIVITY_OVERDUE => '活动失效',
  115. PointService::POINT_MODE_RECEIVE_ACTIVITY => '领取活动',
  116. PointService::POINT_MODE_RECEIVE_OVERDUE => '领取失效',
  117. PointService::POINT_MODE_COMMISSION_TRANSFER => '分销佣金转入',
  118. PointService::POINT_MODE_EXCEL_RECHARGE => 'EXCEL充值',
  119. PointService::POINT_MODE_CARD_VISIT_REWARD => '名片访问奖励',
  120. PointService::POINT_MODE_CARD_REGISTER_REWARD => '名片新增会员奖励',
  121. PointService::POINT_MODE_PRESENTATION => '推荐客户奖励',
  122. PointService::POINT_MODE_LOVE_WITHDRAWAL_DEDUCTION => $this->loveDeductionName(),
  123. PointService::POINT_MODE_FIGHT_GROUPS_TEAM_SUCCESS => '拼团活动团长奖励',
  124. PointService::POINT_MODE_DRAW_CHARGE_GET => '抽奖获得',
  125. PointService::POINT_MODE_DRAW_CHARGE_DEDUCTION => '抽奖使用扣除',
  126. PointService::POINT_MODE_DRAW_REWARD_GET => '抽奖奖励',
  127. PointService::POINT_MODE_CONVERT => '兑换',
  128. PointService::POINT_MODE_THIRD => '第三方变动',
  129. PointService::POINT_MODE_CONSUMPTION_POINTS => '消费充值奖励',
  130. PointService::POINT_MODE_ROOM_MEMBER_ACTIVITY_POINTS => '直播会员观看奖励',
  131. PointService::POINT_MODE_ROOM_ACTIVITY_POINTS => '直播间会员奖励',
  132. PointService::POINT_MODE_ROOM_ANCHOR_ACTIVITY_POINTS => '直播主播奖励',
  133. PointService::POINT_MODE_ROOM_REWARD_TRANSFER_POINTS => '直播打赏-支出',
  134. PointService::POINT_MODE_ROOM_REWARD_RECIPIENT_POINTS => '直播打赏-收入',
  135. PointService::POINT_AUCTION_REWARD_RECIPIENT_POINTS => '拍卖奖励',
  136. PointService::POINT_INCOME_WITHDRAW_AWARD => '收入提现奖励',
  137. PointService::POINT_MODE_TRANSFER_BALANCE => "自动转入余额",
  138. PointService::POINT_MODE_BIND_MOBILE => "绑定手机号奖励",
  139. PointService::POINT_MODE_LAYER_CHAIN => "关系链等级奖励",
  140. PointService::POINT_MODE_LAYER_CHAIN_RECHARGE => "层链充值",
  141. PointService::POINT_MODE_DRAW_NEW_MEMBER_PRIZE => '新人奖奖励',
  142. PointService::POINT_MODE_LAYER_CHAIN_QUESTIONNAIRE => "问卷奖励",
  143. PointService::POINT_MODE_HEALTH_ASSESSMENT => "健康测评奖励",
  144. PointService::POINT_MODE_MICRO_COMMUNITIES => "微社区发帖奖励",
  145. PointService::POINT_MODE_CONFERENCE => "会务活动签到奖励",
  146. PointService::POINT_INCOME_WITHDRAW_AWARD_SCALE => "收入提现奖励比例",
  147. PointService::POINT_MODE_STORE_SHAREHOLDER => "门店股东升级奖励",
  148. PointService::POINT_MODE_ANSWER_REWARD => "短视频答题奖励",
  149. PointService::POINT_MODE_ANSWER_REWARD_PARENT => "短视频答题上级奖励",
  150. PointService::POINT_MODE_POINT_EXCHANGE => "蓝牛积分兑换",
  151. PointService::POINT_MODE_SNATCH_REGIMENT => "抢团奖励",
  152. PointService::POINT_MODE_FIGHT_GROUPS_LOTTERY_WIN => "拼团抽奖成功奖励",
  153. PointService::POINT_MODE_FIGHT_GROUPS_LOTTERY_LOSER => "拼团抽奖失败奖励",
  154. PointService::POINT_MODE_COMMUNITY_RELAY => "社群接龙奖励",
  155. PointService::POINT_MODE_REGISTRATION_REWARDS_PARENT => "分享会员注册奖励上级",
  156. PointService::POINT_MODE_REGISTRATION_AWARD => "会员注册奖励",
  157. PointService::POINT_MODE_OPEN_GROUP_DEDUCTION => "拼团开团扣除",
  158. PointService::POINT_MODE_STAR_SPELL => "星拼乐奖励",
  159. PointService::POINT_MODE_STAR_LOST_SPELL => "星拼乐参团抵扣",
  160. PointService::POINT_MODE_CPS => (defined('CPS_PLUGIN_NAME') ? CPS_PLUGIN_NAME : '聚合CPS') ."奖励",
  161. PointService::POINT_MODE_LOCK_DRAW_REWARD => "抽奖奖励",
  162. PointService::TEAM_POINTS_REWARD => "经销商积分奖励",
  163. PointService::POINT_MODE_CIRCLE_ADD_REWARD => "加入圈子奖励",
  164. PointService::POINT_MODE_BLIND_BOX_LOST => "盲盒提示抵扣",
  165. PointService::POINT_MODE_CONSUMER_REWARD => "消费奖励",
  166. PointService::POINT_MODE_LINK_SERVICE_REWARD => "积分对接奖励",
  167. PointService::POINT_MODE_DEPOSIT_LADDER_REWARD => "定金阶梯团定金奖励",
  168. PointService::POINT_MODE_STORE_RESERVE => "门店预约商品",
  169. PointService::POINT_MODE__ZHUZHER_CREDIT_REWARD => "酒店积分对接",
  170. PointService::POINT_MODE_ZHP_LOST => "珍惠拼",
  171. PointService::POINT_MODE_TEAM_DIVIDEND => "经销商提成",
  172. PointService::POINT_MODE_FIGHT_GROUP_LOTTERY_COMFORT_REWARD => "拼团抽奖安慰余额",
  173. PointService::POINT_MODE_LOVE_REDPACK => "拼团抽奖安慰余额",
  174. PointService::CPS_SUB_PLATFORM => "芸CPS奖励",
  175. PointService::POINT_MODE_NEW_MEDIA_LIKE => '新媒体-点赞奖励',
  176. PointService::POINT_MODE_NEW_MEDIA_ATTENTION => '新媒体-关注奖励',
  177. PointService::POINT_MODE_NEW_MEDIA_READ => '新媒体-阅读奖励',
  178. PointService::POINT_MODE_NEW_MEDIA_FORWARD => '新媒体-转发奖励',
  179. PointService::POINT_MODE_NEW_MEDIA_FAVORITES => '新媒体-收藏奖励',
  180. PointService::POINT_MODE_NEW_MEDIA_COMMENT => '新媒体-评论奖励',
  181. PointService::POINT_MODE_NEW_MEDIA_REWARD => '新媒体-打赏奖励',
  182. PointService::POINT_MODE_NEW_MEDIA_SUPERIOR => '新媒体-上级奖励',
  183. PointService::POINT_MODE_NEW_MEDIA_EXCHANGE => '新媒体-兑换流量值',
  184. PointService::GROUP_WORK_AWARD => '拼团等级未中奖励',
  185. PointService::GROUP_WORK_HEAD_AWARD => '拼团等级限制团长奖励',
  186. PointService::GROUP_WORK_PARENT_AWARD => '拼团等级限制未中上级奖励',
  187. PointService::POINT_MODE_VIDEO_WATCH_REWARD => '视频奖励-观看视频',
  188. PointService::POINT_MODE_VIDEO_TEAM_REWARD => '视频奖励-团队上级奖励',
  189. PointService::POINT_MODE_FLYERS_ADVERTISE => 'APP广告-广告奖励',
  190. PointService::POINT_MODE_GOODS_REFUND => '商品赠送退回',
  191. PointService::POINT_MODE_ORDER_REFUND => '订单赠送退回',
  192. PointService::POINT_MODE_POINT_MIDDLE_SYNC => '积分中台-积分同步',
  193. PointService::POINT_MODE_LOVE_TRANSFER => $this->loveTransferName(),
  194. PointService::POINT_MODE_QQ_ADVERTISE_POINT => '优量汇-奖励扣除',
  195. PointService::POINT_MODE_BALANCE_RECHARGE_REWARD => '余额充值奖励',
  196. PointService::POINT_MODE_ORDER_SHOPKEEPER_REWARD => '门店消费奖励店长',
  197. PointService::POINT_MODE_HAND_SIGN_PROTOCOL => '手签协议奖励',
  198. PointService::POINT_MODE_GROUP_CHAT_ACTIVITY_REWARD => '群拓客活动奖励',
  199. PointService::INTEGRAL_POINT => $this->integralTransferName(),
  200. PointService::YS_SYSTEM_POINT_SYNC => '线下同步',
  201. PointService::POINT_MODE_VIDEO_WATCH_TAKE => '视频奖励-扣除积分',
  202. PointService::POINT_MODE_PARKING_PAY_COUPON => '停车缴费兑换优惠券',
  203. PointService::POINT_MODE_LOVE_WITHDRAW_FINAL_REDUCE => $this->loveActualReceipt(),
  204. PointService::POINT_MODE_STORE_BALANCE_RECHARGE => '门店余额充值奖励',
  205. PointService::POINT_MODE_LOVE_BUY_DEDUCTE_REDUCE => $this->LoveBuyDeductName(),
  206. PointService::POINT_MODE_YWM_FIGHT_GROUPS_TEAM_SUCCESS => '(新拼团)拼团活动团长奖励',
  207. PointService::POINT_MODE_LOVE_FROZE_ACTIVE => $this->LoveFrozeActiveName(),
  208. PointService::POINT_MODE_ROOM_RED_PACK_SEND => '直播发送拼手气红包扣除',
  209. PointService::POINT_MODE_ROOM_RED_PACK_RECEIVE => '直播领取拼手气红包',
  210. PointService::POINT_MODE_ROOM_RED_PACK_REFUND => '直播拼手气红包返还',
  211. PointService::POINT_MODE_SUBSCRIPTION => "认购-认购活动",
  212. PointService::POINT_MODE_NEWCOMER_FISSION_ACTIVE => "新客裂变",
  213. PointService::POINT_MODE_TRANSFER_INTEGRAL => $this->pointTransferIntegralName(),
  214. PointService::POINT_MODE_BLB_CASHIER => "收银系统积分同步",
  215. PointService::FACE_TO_FACE_BUY => "面对面服务购买",
  216. PointService::FACE_TO_FACE_MEMBER_GIFT => "面对面服务购买赠送",
  217. PointService::FACE_TO_FACE_MERCHANT_GIFT => "面对面服务出售",
  218. PointService::POINT_MODE_FIRST_PARENT_REWARD => "购物赠送上级(一级)",
  219. PointService::POINT_MODE_SECOND_PARENT_REWARD => "购物赠送上级(二级)",
  220. PointService::POINT_MODE_FIRST_PARENT_REFUND => "商品退款上级(一级)赠送回退",
  221. PointService::POINT_MODE_SECOND_PARENT_REFUND => "商品退款上级(二级)赠送回退",
  222. PointService::POINT_MODE_POINT_EXCHANGE_LOVE => "手动转入".(LOVE_NAME ? : '爱心值'),
  223. PointService::POINT_MODE_COUPON_STORE_REWARD => (defined('COUPON_STORE_PLUGIN_NAME') ? COUPON_STORE_PLUGIN_NAME : '消费券联盟').'核销奖励',
  224. PointService::POINT_MODE_POOL_RESET => $this->poolResetName(),
  225. PointService::ACTIVITY_REWARD_INTEGRAL => '拓客活动奖励',
  226. PointService::POINT_MODE_AREA_DIVIDEND => '区域分红转入',
  227. PointService::POINT_EXCHANGE_OUT => PointService::POINT_EXCHANGE_OUT_ATTACHED,
  228. PointService::POINT_EXCHANGE_IN => PointService::POINT_EXCHANGE_IN_ATTACHED,
  229. PointService::POINT_MODE_LOVE_SPEED_POOL_CLEAR => $this->poolClearName(),
  230. PointService::SIGN_BUY_ALLOWANCE => '签到购物津贴',
  231. PointService::POINT_MODE_MEMBER_MERGE => '会员合并转入',
  232. PointService::POINT_MODE_NEW_BLIND_BOX_EXCHANGE => '新盲盒兑换',
  233. PointService::POINT_MODE_AREA_DIVIDEND_AWARD => PointService::POINT_MODE_AREA_DIVIDEND_AWARD_ATTACHED,
  234. PointService::POINT_MODE_AREA_MERCHANT_AWARD => PointService::POINT_MODE_AREA_MERCHANT_AWARD_ATTACHED,
  235. PointService::POINT_MODE_FACE_TO_FACE_AWARD => PointService::POINT_MODE_FACE_TO_FACE_AWARD_ATTACHED,
  236. PointService::STAFF_AUDIT_REWARD => PointService::STAFF_AUDIT_REWARD_ATTACHED,
  237. PointService::STATIC_POINT_DIVIDEND => (defined('STATIC_POINT_DIVIDEND_NAME') ? STATIC_POINT_DIVIDEND_NAME : '静态积分分红'),
  238. ] + PointService::$otherSource;
  239. }
  240. private function transferLoveName()
  241. {
  242. return app('plugins')->isEnabled('love') ? '转入' . LOVE_NAME : '转入爱心值';
  243. }
  244. private function loveDeductionName()
  245. {
  246. return app('plugins')->isEnabled('love') ? LOVE_NAME . '提现扣除' : '爱心值提现扣除';
  247. }
  248. private function LoveBuyDeductName()
  249. {
  250. return app('plugins')->isEnabled('love') ? LOVE_NAME . '购物抵扣扣除' : '爱心值购物抵扣扣除';
  251. }
  252. private function loveTransferName()
  253. {
  254. return app('plugins')->isEnabled('love') ? LOVE_NAME . '转赠-转入' : '爱心值转赠-转入';
  255. }
  256. private function loveActualReceipt()
  257. {
  258. return app('plugins')->isEnabled('love') ? LOVE_NAME . '提现扣除(实际到账)' : '爱心值提现扣除(实际到账)';
  259. }
  260. private function signAwardName()
  261. {
  262. return app('plugins')->isEnabled('sign') ? trans('Yunshop\Sign::sign.plugin_name') . '奖励' : '签到奖励';
  263. }
  264. private function frozeAwardName()
  265. {
  266. return app('plugins')->isEnabled('sign') ? trans('Yunshop\Froze::froze.name') . '奖励' : '冻结币奖励';
  267. }
  268. private function integralTransferName()
  269. {
  270. $point_name = \Setting::get('shop.shop')['credit1'] ?: '积分';
  271. return app('plugins')->isEnabled('integral') ? INTEGRAL_NAME . "转化{$point_name}" : '消费积分转化积分';
  272. }
  273. private function pointTransferIntegralName()
  274. {
  275. $point_name = \Setting::get('shop.shop')['credit1'] ?: '积分';
  276. return app('plugins')->isEnabled('integral') ? $point_name . '转化' . INTEGRAL_NAME : "{$point_name}转化消费积分";
  277. }
  278. private function LoveFrozeActiveName()
  279. {
  280. return app('plugins')->isEnabled('love') ? '冻结'.LOVE_NAME.'激活' : '冻结爱心值激活';
  281. }
  282. private function poolResetName()
  283. {
  284. $point_name = \Setting::get('shop.shop')['credit1'] ?: '积分';
  285. return '清零设置-' . $point_name . '清零';
  286. }
  287. private function poolClearName()
  288. {
  289. $point_name = \Setting::get('shop.shop')['credit1'] ?: '积分';
  290. return "加速池扣除({$point_name}消耗)";
  291. }
  292. //todo----------------------------- 以下代码可以优化模型使用 --------------------------------
  293. public function hasOneMember()
  294. {
  295. return $this->hasOne(Member::class, 'uid', 'member_id');
  296. }
  297. public static function getPointLogList($search)
  298. {
  299. return PointLog::lists($search);
  300. }
  301. public function scopeLists($query, $search)
  302. {
  303. $query->search($search);
  304. $builder = $query->with([
  305. 'hasOneMember',
  306. ]);
  307. return $builder;
  308. }
  309. }