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 } 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) { $allSource = self::getAllSourceName(); $mode_attribute = $allSource[$mode]; return $mode_attribute?:'类型:'.$mode; } public static function getBalanceName() { return \Setting::get('shop.shop')['credit'] ?: '余额'; } public static function getAllSourceName() { //业务类型 $activity_mode = [ 1 => self::POINT_MODE_GOODS_ATTACHED, 2 => self::POINT_MODE_ORDER_ATTACHED, 3 => self::POINT_MODE_POSTER_ATTACHED, 4 => self::POINT_MODE_ARTICLE_ATTACHED, 5 => self::POINT_MODE_ADMIN_ATTACHED, 6 => self::POINT_MODE_BY_ATTACHED, 7 => self::POINT_MODE_TEAM_ATTACHED, 8 => self::POINT_MODE_LIVE_ATTACHED, 9 => self::POINT_MODE_CASHIER_ATTACHED, 13 => self::POINT_MODE_TRANSFER_ATTACHED, 14 => self::POINT_MODE_RECIPIENT_ATTACHED, 15 => self::POINT_MODE_ROLLBACK_ATTACHED, 16 => self::POINT_MODE_COUPON_DEDUCTION_AWARD_ATTACHED, 17 => self::POINT_MODE_TASK_REWARD_ATTACHED, 18 => (app('plugins')->isEnabled('love')) ? '转入' . \Yunshop\Love\Common\Services\SetService::getLoveName() : self::POINT_MODE_TRANSFER_LOVE_ATTACHED, 19 => (app('plugins')->isEnabled('sign')) ? trans('Yunshop\Sign::sign.plugin_name') . '奖励' : self::POINT_MODE_SIGN_REWARD_ATTACHED, 20 => self::POINT_MODE_COURIER_REWARD_ATTACHED, 21 => (app('plugins')->isEnabled('froze')) ? \Yunshop\Froze\Common\Services\SetService::getFrozeName() . '奖励' : self::POINT_MODE_FROZE_AWARD_ATTACHED, 23 => self::POINT_MODE_CREATE_ACTIVITY_ATTACHED, 24 => self::POINT_MODE_ACTIVITY_OVERDUE_ATTACHED, 25 => self::POINT_MODE_RECEIVE_ACTIVITY_ATTACHED, 26 => self::POINT_MODE_RECEIVE_OVERDUE_ATTACHED, 27 => self::POINT_MODE_COMMISSION_TRANSFER_ATTACHED, 28 => self::POINT_MODE_HOTEL_CASHIER_ATTACHED, 29 => self::POINT_MODE_EXCEL_RECHARGE_ATTACHED, 92 => self::POINT_MODE_RECHARGE_CODE_ATTACHED, 93 => self::POINT_MODE_STORE_ATTACHED, 94 => self::POINT_MODE_HOTEL_ATTACHED, 22 => self::POINT_MODE_COMMUNITY_REWARD_ATTACHED, 30 => self::POINT_MODE_CARD_VISIT_REWARD_ATTACHED, 31 => self::POINT_MODE_CARD_REGISTER_REWARD_ATTACHED, 32 => self::POINT_MODE_PRESENTATION_ATTACHED, 33 => (app('plugins')->isEnabled('love')) ? \Yunshop\Love\Common\Services\SetService::getLoveName() . '提现扣除' : self::POINT_MODE_LOVE_WITHDRAWAL_DEDUCTION_ATTACHED, 34 => self::POINT_MODE_FIGHT_GROUPS_TEAM_SUCCESS_ATTACHED, 35 => self::POINT_MODE_DRAW_CHARGE_GRT_ATTACHED, 36 => self::POINT_MODE_DRAW_CHARGE_DEDUCTION_ATTACHED, 37 => self::POINT_MODE_DRAW_REWARD_GRT_ATTACHED, 38 => self::POINT_MODE_CONVERT_ATTACHED, 40 => self::POINT_MODE_CONSUMPTION_POINTS_ATTACHED, 41 => self::POINT_MODE_ROOM_MEMBER_ACTIVITY_POINTS_ATTACHED, 42 => self::POINT_MODE_ROOM_ACTIVITY_POINTS_ATTACHED, 43 => self::POINT_MODE_ROOM_ANCHOR_ACTIVITY_POINTS_ATTACHED, 44 => self::POINT_MODE_ROOM_REWARD_TRANSFER_POINTS_ATTACHED, 45 => self::POINT_MODE_ROOM_REWARD_RECIPIENT_POINTS_ATTACHED, 46 => self::POINT_AUCTION_REWARD_RECIPIENT_POINTS_ATTACHED, 47 => self::POINT_INCOME_WITHDRAW_AWARD_ATTACHED, 48 => self::POINT_MODE_TRANSFER_BALANCE_ATTACHED, 49 => self::POINT_MODE_BIND_MOBILE_ATTACHED, 50 => self::POINT_MODE_LAYER_CHAIN_ATTACHED, 51 => self::POINT_MODE_LAYER_CHAIN_RECHARGE_ATTACHED, 52 => self::POINT_MODE_HEALTH_ASSESSMENT_ATTACHED, 53 => self::POINT_MODE_LAYER_CHAIN_QUESTIONNAIRE_ATTACHED, 54 => self::POINT_MODE_HEALTH_ASSESSMENT_ATTACHED, 55 => self::POINT_INCOME_WITHDRAW_AWARD_ATTACHED_SCALE, 56 => self::POINT_MODE_MICRO_COMMUNITIES_REWARD, 57 => self::POINT_MODE_CONFERENCE_REWARD, 58 => self::POINT_MODE_STORE_SHAREHOLDER_ATTACHED, 59 => self::POINT_MODE_ANSWER_REWARD_ATTACHED, 60 => self::POINT_MODE_ANSWER_REWARD_PARENT_ATTACHED, 61 => self::POINT_MODE_POINT_EXCHANGE_ATTACHED, 62 => self::POINT_MODE_SNATCH_REGIMENT_ATTACHED, 63 => self::POINT_MODE_FIGHT_GROUPS_LOTTERY_WIN_ATTACHED, 64 => self::POINT_MODE_FIGHT_GROUPS_LOTTERY_LOSER_ATTACHED, 65 => self::POINT_MODE_COMMUNITY_RELAY_ATTACHED, 66 => self::POINT_MODE_REGISTRATION_REWARDS_PARENT_ATTACHED, 67 => self::POINT_MODE_REGISTRATION_AWARD_ATTACHED, 68 => self::POINT_MODE_OPEN_GROUP_DEDUCTION_ATTACHED, 69 => self::POINT_MODE_EXCHANGE_REDPACK_CHALLENGE_ATTACHED, 71 => self::POINT_MODE_STAR_SPELL_ATTACHED, 72 => self::POINT_MODE_STAR_SPELL_LOST_ATTACHED, 73 => self::TEAM_POINTS_REWARD_ATTACHED, 74 => self::POINT_MODE_LOCK_DRAW_ATTACHED, 75 => self::POINT_MODE_BLIND_BOX_LOST_ATTACHED, 76 => self::POINT_MODE_CIRCLE_ADD_ATTACHED, 78 => self::POINT_MODE_CONSUMER_REWARD_ATTACHED, 77 => self::POINT_MODE_LINK_SERVICE_ATTACHED, 79 => self::POINT_MODE_STORE_RESERVE_ATTACHED, 80 => self::POINT_MODE_ZHUZHER_CREDIT_LOST_ATTACHED, 81 => self::POINT_MODE_DEPOSIT_LADDER_REWARD, 82 => self::POINT_MODE_FIGHT_GROUP_LOTTERY_COMFORT_ATTACHED, 83 => self::POINT_MODE_LOVE_REDPACK_ATTACHED, 84 => self::POINT_MODE_ZHP_LOST_ATTACHED, 85 => self::POINT_MODE_TEAM_DIVIDEND_ATTACHED, 86 => self::CPS_SUB_PLATFORM_ATTACHED, 88 => self::POINT_MODE_COUPON_STORE_REWARD_ATTACHED, 90 => self::POINT_MODE_NEW_MEDIA_LIKE_ATTACHED, 91 => self::POINT_MODE_NEW_MEDIA_ATTENTION_ATTACHED, 95 => self::POINT_MODE_NEW_MEDIA_COMMENT_ATTACHED, 96 => self::POINT_MODE_NEW_MEDIA_REWARD_ATTACHED, 97 => self::POINT_MODE_NEW_MEDIA_SUPERIOR_ATTACHED, 98 => self::POINT_MODE_NEW_MEDIA_EXCHANGE_ATTACHED, 99 => self::POINT_MODE_NEW_MEDIA_READ_ATTACHED, 100 => self::POINT_MODE_NEW_MEDIA_FORWARD_ATTACHED, 101 => self::POINT_MODE_NEW_MEDIA_FAVORITES_ATTACHED, 102 => self::GROUP_WORK_AWARD_ATTACHED, 103 => self::GROUP_WORK_HEAD_AWARD_ATTACHED, 104 => self::GROUP_WORK_PARENT_AWARD_ATTACHED, 105 => self::POINT_MODE_VIDEO_WATCH_REWARD_ATTACHED, 106 => self::POINT_MODE_VIDEO_TEAM_REWARD_ATTACHED, 107 => self::POINT_MODE_FLYERS_ADVERTISE_ATTACHED, 108 => self::POINT_MODE_POINT_MIDDLE_SYNC_ATTACHED, 112 => self::POINT_MODE_QQ_ADVERTISE_POINT_ATTACHED, 111 => self::POINT_MODE_LOVE_TRANSFER_ATTACHED, 115 => self::POINT_MODE_GROUP_CHAT_ACTIVITY_REWARD_ATTACHED, 117 => self::POINT_MODE_CUSTOMER_INCREASE_REWARD_ATTACHED, 118 => self::INTEGRAL_POINT_ATTACHED, 119 => self::YS_SYSTEM_POINT_SYNC_NAME, 120 => self::POINT_MODE_VIDEO_WATCH_TAKE_ATTACHED, 121 => self::POINT_MODE_PARKING_PAY_COUPON_ATTACHED, 122 => self::POINT_MODE_LOVE_WITHDRAW_FINAL_REDUCE_ATTACHED, 123 => self::POINT_MODE_STORE_BALANCE_RECHARGE_ATTACHED, 124 => self::POINT_MODE_YWM_FIGHT_GROUPS_TEAM_SUCCESS_ATTACHED, 125 => self::POINT_MODE_LOVE_BUY_DEDUCTE_REDUCE_ATTACHED, 126 => self::POINT_MODE_SUBSCRIPTION_ATTACHED, 127 => self::POINT_MODE_ROOM_RED_PACK_RECEIVE_ATTACHED, 128 => self::POINT_MODE_ROOM_RED_PACK_REFUND_ATTACHED, 129 => self::POINT_MODE_ROOM_RED_PACK_SEND_ATTACHED, 130 => (app('plugins')->isEnabled('love')) ? '冻结'.\Yunshop\Love\Common\Services\SetService::getLoveName().'激活' : self::POINT_MODE_LOVE_FROZE_ACTIVE_ATTACHED, 131 => self::POINT_MODE_NEWCOMER_FISSION_ACTIVE_ATTACHED, 132 => self::POINT_MODE_TRANSFER_INTEGRAL_ATTACHED, 133 => self::POINT_MODE_BLB_CASHIER_ATTACHED, 134 => self::FACE_TO_FACE_BUY_ATTACHED, 135 => self::FACE_TO_FACE_MEMBER_GIFT_ATTACHED, 136 => self::FACE_TO_FACE_MERCHANT_GIFT_ATTACHED, 139 => self::POINT_EXCHANGE_OUT_ATTACHED, 140 => self::POINT_EXCHANGE_IN_ATTACHED, 141 => self::POINT_MODE_FIRST_PARENT_REWARD_ATTACHED, 142 => self::POINT_MODE_SECOND_PARENT_REWARD_ATTACHED, 143 => self::POINT_MODE_FIRST_PARENT_REFUND_ATTACHED, 144 => self::POINT_MODE_SECOND_PARENT_REFUND_ATTACHED, 145 => self::POINT_MODE_POINT_EXCHANGE_LOVE_ATTACHED, 146 => self::POINT_MODE_POOL_RESET_ATTACHED, 147 => self::ACTIVITY_REWARD_INTEGRAL_ATTACHED, 148 => self::POINT_MODE_AREA_DIVIDEND_ATTACHED, 149 => self::POINT_MODE_LOVE_SPEED_POOL_CLEAR_ATTACHED, 153 => self::POINT_MODE_AREA_DIVIDEND_AWARD_ATTACHED, 154 => self::POINT_MODE_AREA_MERCHANT_AWARD_ATTACHED, 155 => self::POINT_MODE_FACE_TO_FACE_AWARD_ATTACHED, 157 => self::STAFF_AUDIT_REWARD_ATTACHED, 158 => self::STATIC_POINT_DIVIDEND_ATTACHED, 159 => self::WISE_YUAN_TRADE_ACTIVITY_GIVE_ATTACHED, 160 => app('plugins')->isEnabled('wise-yuan-trade') ? \Yunshop\WiseYuanTrade\common\WiseYuanTradeSet::instance()->customName('reopen_name').'转入' : self::WISE_YUAN_TRADE_REOPEN_GIVE_ATTACHED, 161 => self::LOVE_TRANSFORMATION_POINT_ATTACHED, 162 => self::FROZE_COUPON_GIVE_ATTACHED, 163 => self::COMMUNITY_MARKETING_REWARD_ATTACHED, 164 => self::PERFORMANCE_ATTACHED, 165 => (app('plugins')->isEnabled('love')) ? \Yunshop\Love\Common\Services\SetService::getLoveName() . '提现扣除(提现数量)' : self::POINT_MODE_LOVE_WITHDRAWAL_NUM_ATTACHED, 166 => self::getBalanceName() . self::BALANCE_WITHDRAW_DEDUCT_PONINT_ATTACHED, 167 => self::getBalanceName() . self::REFUND_WITHDRAW_DEDUCT_PONINT_ATTACHED, 168 => self::getBalanceName() . self::BALANCE_TRANSFER_DEDUCT_PONINT_ATTACHED, 201 => self::POINT_TEAM_DIVIDEND_INCOME_WITHDRAWAL_ATTACHED, 202 => self::POINT_COMMISSION_INCOME_WITHDRAWAL_ATTACHED, 203 => self::POINT_SHARE_HOLDER_DIVIDEND_INCOME_WITHDRAWAL_ATTACHED, ]; $plugin_data = app('ShopAsset')->getData('point'); foreach ($plugin_data as $key => $value) { if (!isset($activity_mode[$key])) { $activity_mode[$key] = call_user_func($value)['name']; } } return $activity_mode; } }