is_change = $event->is_change; $point_data = $event->changeData; $this->point_data = $point_data; $this->point_data['point'] = round($this->point_data['point'], 2); //$member = Member::getMemberById($point_data['member_id']); $this->member = $this->getMemberModel(); $this->member_point = $this->member->credit1 ? $this->member->credit1 : 0; //会员信息有可能找不到,默认给个0 } public static function addSource($key, $value) { if (!empty(self::getModeAttribute($key))) { throw new ShopException('积分常量重复【' . $key . '--' . $value . '】'); } self::$otherSource[$key] = $value; } private function getMemberModel() { $member_id = $this->point_data['member_id']; $memberModel = Member::uniacid()->where('uid', $member_id)->lockForUpdate()->first(); return $memberModel; } /** * Update member credit1. * * @return PointLog|bool * @throws ShopException */ public function changePoint($relation_id = '') { if ($relation_id) { $this->point_data['relation_id'] = $relation_id; } $point = floor($this->point_data['point'] * 100) / 100; if ($this->point_data['point_income_type'] == self::POINT_INCOME_LOSE) { $point = floor(abs($this->point_data['point']) * 100) / 100; } if ($point < 0.01) { return false; } if (!$this->is_change) { \Log::debug('会员等级积分限制不修改', $this->point_data); return true; } $this->getAfterPoint(); Member::updateMemberInfoById(['credit1' => $this->member_point], $this->point_data['member_id']); return $this->addLog(); } /** * 该方法处理扣除积分大于剩余积分按积分归零算。不抛出异常需要积分明细记录 */ public function deductPoint() { $point = floor(abs($this->point_data['point']) * 100) / 100; if (bccomp($point, 0.01, 2) === -1) { return false; } $this->point_data['before_point'] = $this->member_point; $this->member_point = max(bcadd($this->member_point, $this->point_data['point'], 2), 0); $this->point_data['after_point'] = round($this->member_point, 2); Member::updateMemberInfoById(['credit1' => $this->member_point], $this->point_data['member_id']); return $this->addLog(); } public function addLog() { //$this->point_data['uniacid'] = \YunShop::app()->uniacid; $uniacid = \YunShop::app()->uniacid; $this->point_data['thirdStatus'] = empty($this->point_data['thirdStatus']) ? 1 : $this->point_data['thirdStatus']; $this->point_data['uniacid'] = !empty($uniacid) ? $uniacid : $this->point_data['uniacid']; $point_model = PointLog::create($this->point_data); if (!isset($point_model)) { return false; } event( new MemberPointChangeEvent( $this->member, $this->point_data, $this->getModeAttribute($this->point_data['point_mode']) ) ); $this->messageNotice(); $this->checkFloorNotice(); return $point_model; } public function messageNotice() { if ($this->point_data['point'] == 0) { return; } $template_id = \Setting::get('shop.notice')['point_change']; $point_status = $this->getModeAttribute($this->point_data['point_mode']); $pointNotice = new PointChangeNotice($this->member, $this->point_data, $point_status); $pointNotice->sendMessage(); return; if (!$template_id) { return; } $params = [ ['name' => '商城名称', 'value' => \Setting::get('shop.shop')['name']], ['name' => '昵称', 'value' => $this->member['nickname']], ['name' => '时间', 'value' => date('Y-m-d H:i', time())], ['name' => '积分变动金额', 'value' => $this->point_data['point']], ['name' => '积分变动类型', 'value' => $this->getModeAttribute($this->point_data['point_mode'])], ['name' => '变动后积分数值', 'value' => $this->point_data['after_point']] ]; $news_link = MessageTemp::find($template_id)->news_link; $news_link = $news_link ?: ''; event(new MessageEvent($this->member->uid, $template_id, $params, $url = $news_link)); } /** * 检测是否超过设置的下限并发送消息通知 * @return bool */ public function checkFloorNotice() { try { if ($this->point_data['point'] == 0) { return true; } $template_id = \Setting::get('shop.notice')['point_deficiency']; if (!$template_id) { return true; } $set = Setting::get('point.set'); if (!$set['point_floor']) { return true; } if ($set['point_floor_on'] == 0 || empty($set['point_message_type']) == true || in_array( $set['point_message_type'], [1, 2, 3] ) != true) { return true; } //指定会员分组 if ($set['point_message_type'] == 3) { if ($this->member->yzMember->group_id != $set['group_type']) { return true; } } //指定会员等级 if ($set['point_message_type'] == 2) { //这个会员属于当前的这个等级 if ($this->member->yzMember->level_id != $set['level_limit']) { return true; } } //指定会员 if ($set['point_message_type'] == 1) { if (in_array($this->member->uid, explode(',', $set['uids'])) != true) { return true; } } $pointNotice = new PointDeficiencyNotice($this->member, $this->point_data); $pointNotice->sendMessage(); return; if ($this->point_data['after_point'] > $set['point_floor']) { $params = [ ['name' => '商城名称', 'value' => \Setting::get('shop.shop')['name']], ['name' => '昵称', 'value' => $this->member['nickname']], ['name' => '时间', 'value' => date('Y-m-d H:i', time())], ['name' => '通知额度', 'value' => $set['point_floor']], ['name' => '当前积分', 'value' => $this->point_data['after_point']], ]; $news_link = MessageTemp::find($template_id)->news_link; $news_link = $news_link ?: ''; event(new MessageEvent($this->member->uid, $template_id, $params, $url = $news_link)); } else { return true; } } catch (\Exception $e) { \Log::debug('抛异常了'); return true; } } /** * 获取变化之后的积分 * * @throws ShopException */ public function getAfterPoint() { $this->point_data['before_point'] = $this->member_point; $this->member_point += $this->point_data['point']; if ($this->member_point < PointService::POINT) { throw new ShopException('积分不足!!!'); //$this->member_point = PointService::POINT; } $this->point_data['after_point'] = round($this->member_point, 2); } public function getModeAttribute($mode) { $mode_attribute = ''; switch ($mode) { case (1): $mode_attribute = self::POINT_MODE_GOODS_ATTACHED; break; case (2): $mode_attribute = self::POINT_MODE_ORDER_ATTACHED; break; case (3): $mode_attribute = self::POINT_MODE_POSTER_ATTACHED; break; case (4): $mode_attribute = self::POINT_MODE_ARTICLE_ATTACHED; break; case (5): $mode_attribute = self::POINT_MODE_ADMIN_ATTACHED; break; case (6): $mode_attribute = self::POINT_MODE_BY_ATTACHED; break; case (7): $mode_attribute = self::POINT_MODE_TEAM_ATTACHED; break; case (8): $mode_attribute = self::POINT_MODE_LIVE_ATTACHED; break; case (9): $mode_attribute = self::POINT_MODE_CASHIER_ATTACHED; break; case (10): $mode_attribute = self::POINT_MODE_AIR_ATTACHED; break; case (11): $mode_attribute = self::POINT_MODE_RECHARGE_ATTACHED; break; case (12): $mode_attribute = self::POINT_MODE_FlOW_ATTACHED; break; case (13): $mode_attribute = self::POINT_MODE_TRANSFER_ATTACHED; break; case (14): $mode_attribute = self::POINT_MODE_RECIPIENT_ATTACHED; break; case (15): $mode_attribute = self::POINT_MODE_ROLLBACK_ATTACHED; break; case (16): $mode_attribute = self::POINT_MODE_COUPON_DEDUCTION_AWARD_ATTACHED; break; case (17): $mode_attribute = self::POINT_MODE_TASK_REWARD_ATTACHED; break; case (18): $mode_attribute = self::POINT_MODE_TRANSFER_LOVE_ATTACHED; break; case (19): $mode_attribute = trans('Yunshop\Sign::sign.plugin_name') ? trans( 'Yunshop\Sign::sign.plugin_name' ) . '奖励' : self::POINT_MODE_SIGN_REWARD_ATTACHED; break; case (20): $mode_attribute = self::POINT_MODE_COURIER_REWARD_ATTACHED; break; case (22): $mode_attribute = self::POINT_MODE_COMMUNITY_REWARD_ATTACHED; break; case (23): $mode_attribute = self::POINT_MODE_CREATE_ACTIVITY_ATTACHED; break; case (24): $mode_attribute = self::POINT_MODE_ACTIVITY_OVERDUE_ATTACHED; break; case (25): $mode_attribute = self::POINT_MODE_RECEIVE_ACTIVITY_ATTACHED; break; case (26): $mode_attribute = self::POINT_MODE_RECEIVE_OVERDUE_ATTACHED; break; case (27): $mode_attribute = self::POINT_MODE_COMMISSION_TRANSFER_ATTACHED; break; case (28): $mode_attribute = self::POINT_MODE_HOTEL_CASHIER_ATTACHED; break; case (29): $mode_attribute = self::POINT_MODE_EXCEL_RECHARGE_ATTACHED; break; case (92): $mode_attribute = self::POINT_MODE_RECHARGE_CODE_ATTACHED; break; case (93): $mode_attribute = self::POINT_MODE_STORE_ATTACHED; break; case (94): $mode_attribute = self::POINT_MODE_HOTEL_ATTACHED; break; case (30): $mode_attribute = self::POINT_MODE_CARD_VISIT_REWARD_ATTACHED; break; case (31): $mode_attribute = self::POINT_MODE_CARD_REGISTER_REWARD_ATTACHED; break; case (32): $mode_attribute = self::POINT_MODE_PRESENTATION_ATTACHED; break; case (33): if (app('plugins')->isEnabled('love')) { $mode_attribute = \Yunshop\Love\Common\Services\SetService::getLoveName() ? \Yunshop\Love\Common\Services\SetService::getLoveName() . '提现扣除' : self::POINT_MODE_LOVE_WITHDRAWAL_DEDUCTION_ATTACHED; } else { $mode_attribute = self::POINT_MODE_LOVE_WITHDRAWAL_DEDUCTION_ATTACHED; } break; case (34): $mode_attribute = self::POINT_MODE_FIGHT_GROUPS_TEAM_SUCCESS_ATTACHED; break; case (35): $mode_attribute = self::POINT_MODE_DRAW_CHARGE_GRT_ATTACHED; break; case (36): $mode_attribute = self::POINT_MODE_DRAW_CHARGE_DEDUCTION_ATTACHED; break; case (37): $mode_attribute = self::POINT_MODE_DRAW_REWARD_GRT_ATTACHED; break; case (38): $mode_attribute = self::POINT_MODE_CONVERT_ATTACHED; break; case (39): $mode_attribute = self::POINT_MODE_THIRD_ATTACHED; break; case (40): $mode_attribute = self::POINT_MODE_CONSUMPTION_POINTS_ATTACHED; break; case (41): $mode_attribute = self::POINT_MODE_ROOM_MEMBER_ACTIVITY_POINTS_ATTACHED; break; case (42): $mode_attribute = self::POINT_MODE_ROOM_ACTIVITY_POINTS_ATTACHED; break; case (43): $mode_attribute = self::POINT_MODE_ROOM_ANCHOR_ACTIVITY_POINTS_ATTACHED; break; case (44): $mode_attribute = self::POINT_MODE_ROOM_REWARD_TRANSFER_POINTS_ATTACHED; break; case (45): $mode_attribute = self::POINT_MODE_ROOM_REWARD_RECIPIENT_POINTS_ATTACHED; break; case (46): $mode_attribute = self::POINT_AUCTION_REWARD_RECIPIENT_POINTS_ATTACHED; break; case (47): $mode_attribute = self::POINT_INCOME_WITHDRAW_AWARD_ATTACHED; break; case (48): $mode_attribute = self::POINT_MODE_TRANSFER_BALANCE_ATTACHED; break; case (49): $mode_attribute = self::POINT_MODE_BIND_MOBILE_ATTACHED; break; case 50: $mode_attribute = self::POINT_MODE_LAYER_CHAIN_ATTACHED; break; case 51: $mode_attribute = self::POINT_MODE_LAYER_CHAIN_RECHARGE_ATTACHED; break; case 52: $mode_attribute = self::POINT_MODE_DRAW_NEW_MEMBER_PRIZE_ATTACHED; break; case 53: $mode_attribute = self::POINT_MODE_LAYER_CHAIN_QUESTIONNAIRE_ATTACHED; break; case 54: $mode_attribute = self::POINT_MODE_HEALTH_ASSESSMENT_ATTACHED; break; case 55: $mode_attribute = self::POINT_INCOME_WITHDRAW_AWARD_ATTACHED_SCALE; break; case 56: $mode_attribute = self::POINT_MODE_MICRO_COMMUNITIES_REWARD; break; case 57: $mode_attribute = self::POINT_MODE_CONFERENCE_REWARD; break; case 58: $mode_attribute = self::POINT_MODE_STORE_SHAREHOLDER_ATTACHED; break; case 59: $mode_attribute = self::POINT_MODE_ANSWER_REWARD_ATTACHED; break; case 60: $mode_attribute = self::POINT_MODE_ANSWER_REWARD_PARENT_ATTACHED; break; case 61: $mode_attribute = self::POINT_MODE_POINT_EXCHANGE_ATTACHED; break; case 62: $mode_attribute = self::POINT_MODE_SNATCH_REGIMENT_ATTACHED; break; case 63: $mode_attribute = self::POINT_MODE_FIGHT_GROUPS_LOTTERY_WIN_ATTACHED; break; case 64: $mode_attribute = self::POINT_MODE_FIGHT_GROUPS_LOTTERY_LOSER_ATTACHED; break; case 65: $mode_attribute = self::POINT_MODE_COMMUNITY_RELAY_ATTACHED; break; case 66: $mode_attribute = self::POINT_MODE_REGISTRATION_REWARDS_PARENT_ATTACHED; break; case 67: $mode_attribute = self::POINT_MODE_REGISTRATION_AWARD_ATTACHED; break; case 68: $mode_attribute = self::POINT_MODE_OPEN_GROUP_DEDUCTION_ATTACHED; break; case 69: $mode_attribute = self::POINT_MODE_EXCHANGE_REDPACK_CHALLENGE_ATTACHED; break; case 70: $mode_attribute = self::POINT_MODE_CPS_ATTACHED; break; case 71: $mode_attribute = self::POINT_MODE_STAR_SPELL_ATTACHED; break; case 72: $mode_attribute = self::POINT_MODE_STAR_SPELL_LOST_ATTACHED; break; case 73: $mode_attribute = self::TEAM_POINTS_REWARD_ATTACHED; break; case 74: $mode_attribute = self::POINT_MODE_LOCK_DRAW_ATTACHED; break; case 75: $mode_attribute = self::POINT_MODE_BLIND_BOX_LOST; break; case 76: $mode_attribute = self::POINT_MODE_CIRCLE_ADD_ATTACHED; break; case 77: $mode_attribute = self::POINT_MODE_LINK_SERVICE_ATTACHED; break; case 78: $mode_attribute = self::POINT_MODE_STORE_RESERVE_ATTACHED; break; case 80: $mode_attribute = self::POINT_MODE_ZHUZHER_CREDIT_LOST_ATTACHED; break; case 84: $mode_attribute = self::POINT_MODE_ZHP_LOST_ATTACHED; break; case 82: $mode_attribute = self::POINT_MODE_FIGHT_GROUP_LOTTERY_COMFORT_ATTACHED; break; case 83: $mode_attribute = self::POINT_MODE_LOVE_REDPACK_ATTACHED; break; case 85: $mode_attribute = self::POINT_MODE_TEAM_DIVIDEND_ATTACHED; break; case 86: $mode_attribute = self::CPS_SUB_PLATFORM_ATTACHED; break; case 87: $mode_attribute = self::CPS_CANCAL_ATTACHED; break; case (88): $mode_attribute = self::POINT_MODE_COUPON_STORE_REWARD_ATTACHED; break; case 90: $mode_attribute = self::POINT_MODE_NEW_MEDIA_LIKE_ATTACHED; break; case 91: $mode_attribute = self::POINT_MODE_NEW_MEDIA_ATTENTION_ATTACHED; break; case 95: $mode_attribute = self::POINT_MODE_NEW_MEDIA_COMMENT_ATTACHED; break; case 96: $mode_attribute = self::POINT_MODE_NEW_MEDIA_REWARD_ATTACHED; break; case 97: $mode_attribute = self::POINT_MODE_NEW_MEDIA_SUPERIOR_ATTACHED; break; case 98: $mode_attribute = self::POINT_MODE_NEW_MEDIA_EXCHANGE_ATTACHED; break; case 99: $mode_attribute = self::POINT_MODE_NEW_MEDIA_READ_ATTACHED; break; case 100: $mode_attribute = self::POINT_MODE_NEW_MEDIA_FORWARD_ATTACHED; break; case 101: $mode_attribute = self::POINT_MODE_NEW_MEDIA_FAVORITES_ATTACHED; break; case (102): $mode_attribute = self::GROUP_WORK_AWARD_ATTACHED; break; case (103): $mode_attribute = self::GROUP_WORK_HEAD_AWARD_ATTACHED; break; case (104): $mode_attribute = self::GROUP_WORK_PARENT_AWARD_ATTACHED; break; case (105): $mode_attribute = self::POINT_MODE_VIDEO_WATCH_REWARD_ATTACHED; break; case (106): $mode_attribute = self::POINT_MODE_VIDEO_TEAM_REWARD_ATTACHED; break; case (107): $mode_attribute = self::POINT_MODE_FLYERS_ADVERTISE_ATTACHED; break; case (108): $mode_attribute = self::POINT_MODE_POINT_MIDDLE_SYNC_ATTACHED; break; case (109): $mode_attribute = self::POINT_MODE_GOODS_REFUND_ATTACHED; break; case (110): $mode_attribute = self::POINT_MODE_ORDER_REFUND_ATTACHED; break; case (112): $mode_attribute = self::POINT_MODE_QQ_ADVERTISE_POINT_ATTACHED; break; case (111): $mode_attribute = self::POINT_MODE_LOVE_TRANSFER_ATTACHED; break; case (113): $mode_attribute = self::POINT_MODE_BALANCE_RECHARGE_REWARD_ATTACHED; break; case (114): $mode_attribute = self::POINT_MODE_ORDER_SHOPKEEPER_REWARD_ATTACHED; break; case (115): $mode_attribute = self::POINT_MODE_HAND_SIGN_PROTOCOL_ATTACHED; break; case (116): $mode_attribute = self::POINT_MODE_GROUP_CHAT_ACTIVITY_REWARD_ATTACHED; break; case (117): $mode_attribute = self::POINT_MODE_CUSTOMER_INCREASE_REWARD_ATTACHED; break; case (118): $mode_attribute = self::INTEGRAL_POINT_ATTACHED; break; case (119): $mode_attribute = self::YS_SYSTEM_POINT_SYNC_NAME; break; case (120): $mode_attribute = self::POINT_MODE_VIDEO_WATCH_TAKE_ATTACHED; break; case(121): $mode_attribute = self::POINT_MODE_PARKING_PAY_COUPON_ATTACHED; break; case(122): $mode_attribute = self::POINT_MODE_LOVE_WITHDRAW_FINAL_REDUCE_ATTACHED; break; case(123): $mode_attribute = self::POINT_MODE_STORE_BALANCE_RECHARGE_ATTACHED; break; case(124): $mode_attribute = self::POINT_MODE_YWM_FIGHT_GROUPS_TEAM_SUCCESS_ATTACHED; break; case(125): $mode_attribute = self::POINT_MODE_LOVE_BUY_DEDUCTE_REDUCE_ATTACHED; break; case(126): $mode_attribute = self::POINT_MODE_SUBSCRIPTION_ATTACHED; break; break; case(127): $mode_attribute = self::POINT_MODE_ROOM_RED_PACK_RECEIVE_ATTACHED; break; case(128): $mode_attribute = self::POINT_MODE_ROOM_RED_PACK_REFUND_ATTACHED; break; case(129): $mode_attribute = self::POINT_MODE_ROOM_RED_PACK_SEND_ATTACHED; break; case(130): $mode_attribute = self::POINT_MODE_LOVE_FROZE_ACTIVE_ATTACHED; break; case(131): $mode_attribute = self::POINT_MODE_NEWCOMER_FISSION_ACTIVE_ATTACHED; break; case(132): $mode_attribute = self::POINT_MODE_TRANSFER_INTEGRAL_ATTACHED; break; case(133): $mode_attribute = self::POINT_MODE_BLB_CASHIER_ATTACHED; break; case(139): $mode_attribute = self::POINT_EXCHANGE_OUT_ATTACHED; break; case(140): $mode_attribute = self::POINT_EXCHANGE_IN_ATTACHED; break; case (141): $mode_attribute = self::POINT_MODE_FIRST_PARENT_REWARD_ATTACHED; break; case (142): $mode_attribute = self::POINT_MODE_SECOND_PARENT_REWARD_ATTACHED; break; case (143): $mode_attribute = self::POINT_MODE_FIRST_PARENT_REFUND_ATTACHED; break; case (144): $mode_attribute = self::POINT_MODE_SECOND_PARENT_REFUND_ATTACHED; break; case (145): $mode_attribute = self::POINT_MODE_POINT_EXCHANGE_LOVE_ATTACHED; break; case(134): $mode_attribute = self::FACE_TO_FACE_BUY_ATTACHED; break; case(135): $mode_attribute = self::FACE_TO_FACE_MEMBER_GIFT_ATTACHED; break; case(136): $mode_attribute = self::FACE_TO_FACE_MERCHANT_GIFT_ATTACHED; break; case(146): $mode_attribute = self::POINT_MODE_POOL_RESET_ATTACHED; break; case(147): $mode_attribute = self::ACTIVITY_REWARD_INTEGRAL_ATTACHED; break; case(148): $mode_attribute = self::POINT_MODE_AREA_DIVIDEND_ATTACHED; break; case(149): $mode_attribute = self::POINT_MODE_LOVE_SPEED_POOL_CLEAR_ATTACHED; break; case(156): $mode_attribute = self::SIGN_BUY_ALLOWANCE_NAME; break; case(150): $mode_attribute = self::POINT_MODE_MEMBER_MERGE_ATTACHED; break; case(151): $mode_attribute = self::POINT_MODE_NEW_BLIND_BOX_EXCHANGE_ATTACHED; case (153): $mode_attribute = self::POINT_MODE_AREA_DIVIDEND_AWARD_ATTACHED; break; case (154): $mode_attribute = self::POINT_MODE_AREA_MERCHANT_AWARD_ATTACHED; break; case (155): $mode_attribute = self::POINT_MODE_FACE_TO_FACE_AWARD_ATTACHED; break; case (157): $mode_attribute = self::STAFF_AUDIT_REWARD_ATTACHED; break; case (158): $mode_attribute = self::STATIC_POINT_DIVIDEND_ATTACHED; break; default: $mode_attribute = self::$otherSource[$mode]; } return $mode_attribute; } }