'未发放', self::SEND_STATUS_SUCCESS => '已发放', ]; /** * @inheritdoc */ public static function tableName() { return '{{%user_string_code_order_history}}'; } public function behaviors() { return [ [ 'class' => TimestampBehavior::class, 'attributes' => [ ActiveRecord::EVENT_BEFORE_INSERT => ['created_at'], ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'] ] ] ]; } /** * @inheritdoc */ public function rules() { return [ [ [ 'store_id', 'user_id', 'saas_id', 'order_id', 'created_at', 'is_scan', 'updated_at', 'is_send', 'model_val' ], 'integer' ], [['order_pv'], 'number'], ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'id' => 'ID', 'store_id' => '店铺id', 'user_id' => '用户id', 'saas_id' => '联盟用户id', 'is_scan' => '是否当面付', 'order_id' => '订单id', 'order_no' => '订单号', 'order_pv' => '订单PV', 'is_send' => '状态', 'created_at' => '创建时间', 'updated_at' => '更新时间', ]; } public static function set($store_id, $user_id, $saas_id, $is_scan, $order_id, $order_no, $order_pv, $model_val, $is_send = 0) { $model = new self(); $model->store_id = $store_id; $model->user_id = $user_id; $model->saas_id = $saas_id; $model->is_scan = $is_scan; $model->order_id = $order_id; $model->order_pv = $order_pv; $model->model_val = $model_val; $model->is_send = $is_send; $model->order_no = $order_no; return $model->save(); } public static function sendRedPacket($store_id, $user_id, $model_val, $order_id = 0, $order_no = '', $is_scan = 0) { $store = Store::findOne($store_id); $saas_id = SaasUser::findSaasIdByUserId($user_id); $saas_user = SaasUser::findOne($saas_id); $oldSaasId = $saas_id; $model_name = UserStringCodePlus::MODEL_NAME_LIST[$model_val]; if ($model_val == UserStringCodePlus::MODEL_SHOP) { $to_store_id = $store_id; $to_user_id = $user_id; } else { $to_store_id = UserStringCodePlus::ALLIANCE_STORE_ID; $to_user_id = SaasUser::findSaasIdByUserId($user_id); } $order_pv = UserStringCodeOrderHistory::find() ->where(['store_id' => $store_id, 'model_val' => $model_val, 'saas_id' => $saas_id, 'order_id' => $order_id, 'is_send' => self::SEND_STATUS_WAIT]) ->select(['sum(order_pv) as total'])->scalar(); // if (bccomp($order_pv, 0, 2) <= 0) { if (bccomp($order_pv, 0, 6) <= 0) { //debug_log([__METHOD__, __LINE__, "用户第一次加入节点红包发放 【{$model_name}】,店铺:【{$store_id}】,订单总PV值【{$order_pv}】:有误"], "app_debug.log"); return false; } // 获取所有上层节点 $parent_list = UserStringCodePlus::getAllParentNodeIds($to_store_id, $to_user_id); if (!$parent_list) { return false; } $parent_list_desc = array_reverse($parent_list); //debug_log([__METHOD__, __LINE__, "用户第一次加入节点红包发放 【{$model_name}】节点列表:" . json_encode($parent_list_desc)], "app_debug.log"); $sys_setting = Option::get(OptionSetting::SHARE_STRING_CODE_DEFAULT_SETTING, UserStringCodePlus::ALLIANCE_STORE_ID, OptionSetting::SHARE_GROUP_NAME, '{}'); $sys_setting = $sys_setting ? Json::decode($sys_setting['value']) : []; $setting = Option::get(OptionSetting::SHARE_STRING_CODE_DEFAULT_SETTING, $store_id, OptionSetting::SHARE_GROUP_NAME, '{}'); $setting = $setting ? Json::decode($setting['value']) : []; $sale_setting = Option::get(OptionSetting::SHARE_STRING_CODE_SALE_SETTING, UserStringCodePlus::ALLIANCE_STORE_ID, OptionSetting::SHARE_GROUP_NAME, '{}'); $sale_setting = $sale_setting ? Json::decode($sale_setting['value']) : []; $string_code_pv_scale = $model_val == UserStringCodePlus::MODEL_SHOP ? $setting['string_code_pv_scale_0'] : $setting['string_code_pv_scale_1']; //debug_log([__METHOD__, __LINE__, "用户第一次加入节点红包发放 【{$model_name}】PV比例:{$string_code_pv_scale}"], "app_debug.log"); // 总待分账金额 $transfer_money = bcmul($order_pv, $string_code_pv_scale / 100, 2); //debug_log([__METHOD__, __LINE__, "用户第一次加入节点红包发放 【{$model_name}】总待分账金额:{$transfer_money}"], "app_debug.log"); //debug_log([__METHOD__, __LINE__, "串码红包JOB 【{$model_name}】门店:{$sale_setting['string_code_store_red_packet']} 品牌:{$sale_setting['string_code_brand_red_packet']}"], "app_debug.log"); if ($store->store_type == Store::TYPE_STORE) { $transfer_money = bcmul($transfer_money, $sale_setting['string_code_store_red_packet'] / 100, 2); } else { $transfer_money = bcmul($transfer_money, $sale_setting['string_code_brand_red_packet'] / 100, 2); } //debug_log([__METHOD__, __LINE__, "用户第一次加入节点红包发放 【{$model_name}】红包分账金额:{$transfer_money}"], "app_debug.log"); $alliance_setting = Option::get(OptionSetting::SHARE_STRING_CODE_DEFAULT_SETTING, UserStringCodePlus::ALLIANCE_STORE_ID, OptionSetting::SHARE_GROUP_NAME, '{}'); $alliance_setting = $alliance_setting ? Json::decode($alliance_setting['value']) : []; if ($model_val == UserStringCodePlus::MODEL_SHOP) { $max_layer = $setting['string_code_max_layer']; } else { $max_layer = $alliance_setting['string_code_max_layer']; } $bonus_money = bcdiv($transfer_money, $max_layer, 2); //debug_log([__METHOD__, __LINE__, "用户第一次加入节点红包发放 【{$model_name}】节点红包金额:{$bonus_money},最大层级:{$max_layer}"], "app_debug.log"); if (bccomp($bonus_money, 0, 6) <= 0) { //debug_log([__METHOD__, __LINE__, "用户第一次加入节点红包发放 【{$model_name}】节点红包金额:{$bonus_money} 错误"], "app_debug.log"); return false; } for ($i = 0; $i < $max_layer; $i++) { $parent_id = $parent_list_desc[$i]; if ($parent_id) { if ($store->store_type == Store::TYPE_STORE) { $s_order_log_type = UserStringCodeOrder::TYPE_STORE_RED_PACKET; } else { $s_order_log_type = UserStringCodeOrder::TYPE_BRAND_RED_PACKET; } if ($model_val == UserStringCodePlus::MODEL_ALLIANCE) { $user_id = SaasUser::findUserIdByStoreIdAndSaasId(-1, $parent_id); $saas_id = $parent_id; } else { $parent_saas_id = SaasUser::findSaasIdByUserId($parent_id); $user_id = $parent_id; $saas_id = $parent_saas_id; } $s_order_log = "串码红包 【{$saas_user['name']}】加入节点奖励"; UserStringCodeOrder::set( $to_store_id, $user_id, $saas_id, $is_scan, $order_id, $bonus_money, UserStringCodeOrder::STATUS_SUCCESS, $s_order_log, $order_no, $s_order_log_type, $model_val, $store_id ); $wallet_store_id = $model_val == UserStringCodePlus::MODEL_ALLIANCE ? UserStringCodePlus::ALLIANCE_STORE_ID : $store_id; $wallet_user_id = $model_val == UserStringCodePlus::MODEL_ALLIANCE ? $saas_id : $user_id; $log_desc = "串码用户:【{$saas_user['name']}】 第一次加入节点发放红包"; $currency = Currency::findOne(['code' => Currency::CURRENCY_STRING_CODE]); UserWallet::addLog($currency, $wallet_store_id, $wallet_user_id, $bonus_money, $log_desc, UserWallet::TYPE_RED_PACKET,$store_id,UserWallet::TYPE_RED_PACKET); } else { // 多余的都发根结点用户 if ($model_val == UserStringCodePlus::MODEL_ALLIANCE) { // $string_code_transfer_user_id=isset($sys_setting['string_code_transfer_user_id']) && $sys_setting['string_code_transfer_user_id'] > 0 ? $sys_setting['string_code_transfer_user_id'] : 0; // $string_code_transfer_saas_id=$string_code_transfer_user_id; // $store=SaasUser::findOne($string_code_transfer_saas_id); // $string_code_transfer_user_id=SaasUser::findUserIdByStoreIdAndSaasId($store->id,$string_code_transfer_user_id); $string_code_transfer_user_id = isset($sys_setting['string_code_transfer_user_id']) && $sys_setting['string_code_transfer_user_id'] > 0 ? $sys_setting['string_code_transfer_user_id'] : 0; $string_code_transfer_saas_id = isset($sys_setting['string_code_transfer_saas_id']) && $sys_setting['string_code_transfer_saas_id'] > 0 ? $sys_setting['string_code_transfer_saas_id'] : 0; } else { // $string_code_transfer_user_id=isset($setting['string_code_transfer_user_id']) && $setting['string_code_transfer_user_id'] > 0 ? $setting['string_code_transfer_user_id'] : 0; // $string_code_transfer_saas_id=$string_code_transfer_user_id; // $store=SaasUser::findOne($string_code_transfer_saas_id); // $string_code_transfer_user_id=SaasUser::findUserIdByStoreIdAndSaasId($store->id,$string_code_transfer_user_id); $string_code_transfer_user_id = isset($setting['string_code_transfer_user_id']) && $setting['string_code_transfer_user_id'] > 0 ? $setting['string_code_transfer_user_id'] : 0; $string_code_transfer_saas_id = isset($setting['string_code_transfer_saas_id']) && $setting['string_code_transfer_saas_id'] > 0 ? $setting['string_code_transfer_saas_id'] : 0; } //debug_log([__METHOD__, __LINE__, "串码红包JOB 【{$model_name}】店铺id{$store_id} 默认让利人user:{$string_code_transfer_user_id},默认让利人saas:{$string_code_transfer_saas_id}"], "app_debug.log"); if ($string_code_transfer_user_id > 0) { if ($store->store_type == Store::TYPE_STORE) { $s_order_log_type = UserStringCodeOrder::TYPE_STORE_RED_PACKET; } else { $s_order_log_type = UserStringCodeOrder::TYPE_BRAND_RED_PACKET; } $s_order_log = "串码红包 【{$saas_user['name']}】加入节点奖励"; UserStringCodeOrder::set( UserStringCodePlus::ALLIANCE_STORE_ID, $string_code_transfer_user_id, $string_code_transfer_saas_id, $is_scan, $order_id, $bonus_money, UserStringCodeOrder::STATUS_SUCCESS, $s_order_log, $order_no, $s_order_log_type, $model_val, $store_id ); $wallet_store_id = UserStringCodePlus::ALLIANCE_STORE_ID; $wallet_user_id = $string_code_transfer_user_id; $log_desc = "串码用户:【{$saas_user['name']}】 第一次加入节点发放红包"; $currency = Currency::findOne(['code' => Currency::CURRENCY_STRING_CODE]); UserWallet::addLog($currency, $wallet_store_id, $wallet_user_id, $bonus_money, $log_desc, UserWallet::TYPE_RED_PACKET,$store_id,UserWallet::TYPE_RED_PACKET); } } } //store_user_referrer store_user_affiliated store_referrer $UserStringCodeOrderlist = UserStringCodeOrder::findAll([ 'order_id' => $order_id, 'is_scan' => $is_scan, 'type' => [UserStringCodeOrder::TYPE_STORE_RED_PACKET,UserStringCodeOrder::TYPE_BRAND_RED_PACKET] ]); if (count($UserStringCodeOrderlist) > 0) { UserStringCodeOrderHistory::updateAll( ['is_send' => self::SEND_STATUS_SUCCESS], ['store_id' => $store_id, 'model_val' => $model_val, 'saas_id' => $oldSaasId, 'order_id' => $order_id, 'is_send' => self::SEND_STATUS_WAIT] ); } } }