TimestampBehavior::class, 'attributes' => [ ActiveRecord::EVENT_BEFORE_INSERT => ['created_at'], ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'] ] ] ]; } /** * @inheritdoc */ public function rules() { return [ [['id', 'saas_user_id', 'admin_id', 'type', 'is_delete', 'created_at', 'updated_at', 'status'], 'integer'], ]; } public function beforeSave($insert) { if (parent::beforeSave($insert)) { if ($insert) { //业务员类型,默认新业务员类型(2023-02-06版本以后为新类型) $this->type = self::TYPE_BD; } return true; } return false; } public static function getBdId($store_id) { $salesman_id = Store::find()->where(['id' => $store_id])->select(['salesman_id'])->asArray()->scalar() ?: null; $salesman = Salesman::findOne(['id' => $salesman_id, 'is_delete' => 0, 'status' => 1]); if (empty($salesman) || !$salesman->admin_id) return false; $admin = Admin::findOne(['id' => $salesman->admin_id, 'is_delete' => 0]); if (empty($admin) || $admin->type != 'bd_agent') return false; return $admin->id; } public static function transfer($order) { if (!$order->is_pay) return false; $store_id = $order->store_id; $setting = Option::getDecode(OptionSetting::SHARE_STRING_CODE_DEFAULT_SETTING, $store_id, OptionSetting::SHARE_GROUP_NAME); $is_scan = $order instanceof ScanOrder ? 1 : 0; if (!$is_scan) return false; $t = \Yii::$app->db->beginTransaction(); try { $bd_id = self::getBdId($store_id); $config = Option::getDecode(OptionSetting::SHARE_STRING_CODE_SALE_SETTING_BD, $bd_id, OptionSetting::SHARE_GROUP_NAME); if (empty($config)) throw new \Exception('无配置'); self::transferByModel($order, $setting, $is_scan); $UserStringCodeOrderlist = UserStringCodeOrder::findAll([ 'order_id' => $order->id, 'is_scan' => $is_scan, 'type' => [ UserStringCodeOrder::TYPE_STORE_USER_REFERRER, UserStringCodeOrder::TYPE_STORE_USER_AFFILIATED, UserStringCodeOrder::TYPE_STORE_REFERRER, UserStringCodeOrder::TYPE_BRAND_USER_REFERRER, UserStringCodeOrder::TYPE_BRAND_USER_AFFILIATED, UserStringCodeOrder::TYPE_BRAND_REFERRER, UserStringCodeOrder::TYPE_AREA_AWARD, UserStringCodeOrder::TYPE_BRAND_USER_STORE_REFERRER, UserStringCodeOrder::TYPE_SUPRISE_RED, ] // 用数组指定多个类型 ]); $league_arr = UserStringCodeOrder::TYPE_LEAGUE_PRICE; $Leaguelist = SaaSLeaguePriceLog::findAll([ 'order_id' => $order->id, 'is_scan' => $is_scan, 'type' => [ $league_arr[UserStringCodeOrder::TYPE_STORE_USER_REFERRER], $league_arr[UserStringCodeOrder::TYPE_STORE_USER_AFFILIATED], $league_arr[UserStringCodeOrder::TYPE_STORE_REFERRER], $league_arr[UserStringCodeOrder::TYPE_BRAND_USER_REFERRER], $league_arr[UserStringCodeOrder::TYPE_BRAND_USER_AFFILIATED], $league_arr[UserStringCodeOrder::TYPE_BRAND_REFERRER], $league_arr[UserStringCodeOrder::TYPE_AREA_AWARD], $league_arr[UserStringCodeOrder::TYPE_BRAND_USER_STORE_REFERRER], $league_arr[UserStringCodeOrder::TYPE_SUPRISE_RED], ] ]); if (count($UserStringCodeOrderlist) > 0 || count($Leaguelist) > 0) { $order->team_reward_status = 1; $order->save(); } //self::sendDistrictStreetAgentDivvy($order); $t->commit(); } catch (\Exception $e) { $t->rollBack(); ActionLog::addLog(1, '/PluginPoolConfig/transfer', $e->getMessage()); } catch (\Throwable $e) { $t->rollBack(); ActionLog::addLog(1, '/PluginPoolConfig/transfer', $e->getMessage()); } } public static function transferByModel($order, $string_code_setting, $is_scan) { $store_id = $order->store_id; //$setting = Option::getShareSaleSetting(self::ALLIANCE_STORE_ID); $admin_id = Salesman::getBdId($order->store_id); $setting = Option::getDecode(OptionSetting::SHARE_STRING_CODE_SALE_SETTING_BD, $admin_id, OptionSetting::SHARE_GROUP_NAME); ActionLog::addLog(1, '/configPoolPush/salesman', 'admin_id : ' . $admin_id .'setting : ' . Json::encode($setting)); $order_pv = $order->pay_price + $order->take_price; if (isset($setting['string_code_store_partner']) && $setting['string_code_store_partner'] > 0) { //debug_log([__METHOD__, __LINE__, "门店合伙人分红比例 : " . ($string_code_setting['scan_qr_code_percent'])], "app_debug.log"); self::stringCodeStorPartner($order, $order_pv, $string_code_setting['scan_qr_code_percent'], $setting['string_code_store_partner'], $setting, $is_scan, $string_code_setting['string_code_model'], $store_id, 0); } self::unionUintFounder($order, $order_pv, $string_code_setting['scan_qr_code_percent'], $setting, $string_code_setting['string_code_model'], $store_id, $is_scan, 0); if (isset($setting['string_code_brand_partner']) && $setting['string_code_brand_partner'] > 0) { //debug_log([__METHOD__, __LINE__, "品牌合伙人分红比例 : " . ($string_code_setting['alliance_scan_qr_code_percent'])], "app_debug.log"); self::stringCodeStorPartner($order, $order_pv, $string_code_setting['alliance_scan_qr_code_percent'], $setting['string_code_brand_partner'], $setting, $is_scan, $string_code_setting['string_code_model'], $store_id, 1); } self::unionUintFounder($order, $order_pv, $string_code_setting['alliance_scan_qr_code_percent'], $setting, $string_code_setting['string_code_model'], $store_id, $is_scan, 1); self::configPoolPush($setting, $order, $string_code_setting, $order_pv, 0);//插入池子 self::appointAward($setting,$order,$order_pv,0); //debug_log([__METHOD__, __LINE__, "串码让利 订单金额:{$order_pv} pv:{$string_code_setting['string_code_make_concessions_scan']}"], "app_debug.log"); //debug_log([__METHOD__, __LINE__, "串码让利 店铺推荐人:{$setting['string_code_store_referrer']} 合伙人分红:{$setting['string_code_make_concessions_scan']} 会员所属门店:{$setting['string_code_store_user_affiliated']} 用户推荐人:{$setting['string_code_store_user_referrer']}"], "app_debug.log"); } public static function configPoolPush($config, $order, $setting, $pv0, $pv1) { try { if (!isset($config['pools']) || empty($config['pools'])) throw new \Exception('无配置分红池'); foreach ($config['pools'] as $p) { $pool = PluginPoolConfig::find()->where(['status' => 1, 'is_delete' => 0, 'id' => $p['config_id']])->one(); if (empty($pool)) continue; if (!isset($p['rate']) || $p['rate'] <= 0) continue; ActionLog::addLog(1, '/configPoolPush/salesman', 'config_id : ' . $p['config_id'] .'$pv0 : ' . $pv0); self::pushCP($p['config_id'], $order, $pv0, $setting['string_code_pv_scale_0'], $p['rate'], $setting['string_code_model'], 0); //self::pushCP($p['config_id'], $order, $pv1, $setting['string_code_pv_scale_1'], $p['rate'], $setting['string_code_model'], 1); } } catch (\Exception $e) { ActionLog::addLog(1, '/configPoolPush/salesman', $e->getMessage()); } } public static function pushCP($config_id, $order, $order_pv, $code_percent, $rate, $string_code_model, $model_val) { try { if ($order_pv <= 0) throw new \Exception('PV:'.$order_pv); if (in_array($model_val, $string_code_model)) { //debug_log([__METHOD__, __LINE__, "大模型比例 : " . ($code_percent / 100)], "app_debug.log"); $add_money = bcmul($order_pv, $code_percent / 100, 4); $money = bcmul($add_money, $rate / 100, 4); if (bccomp($money, 0, 4) > 0) { $desc = PluginPoolConfig::MODEL_NAME_LIST[$model_val] . " " . "订单号:【{$order->order_no}】分红增加"; PluginPool::poolPush($config_id, $order, $money, $desc, $order_pv, $rate, $code_percent, $model_val, $add_money); } } } catch (\Exception $e) { ActionLog::addLog(1, 'pushCP/salesman', $e->getMessage()); } } public static function stringCodeStorPartner($order, $order_pv, $scan_qr_code_percent, $rate, $setting, $is_scan, $string_code_model, $store_id, $model_val) { if ($order_pv <= 0) throw new \Exception('PV:'.$order_pv); if (in_array($model_val, $string_code_model)) { ////debug_log([__METHOD__, __LINE__, "大模型比例 : " . ($scan_qr_code_percent / 100)], "app_debug.log"); $add_money = bcmul($order_pv, $scan_qr_code_percent / 100, 4); $money = bcmul($add_money, $rate / 100, 4); ////debug_log([__METHOD__, __LINE__, "大模型:order_pv : " . $order_pv . ',$add_money:' . $add_money . ',$money:' . $money], "app_debug.log"); if (bccomp($money, 0, 4) > 0) { $desc = UserStringCodePlus::MODEL_NAME_LIST[$model_val] . " " . "订单号:【{$order->order_no}】合伙人分红增加"; PartnerPool::poolPush($order, $money, $desc, $order_pv, $rate, $scan_qr_code_percent, $model_val, $add_money); } } } public static function unionUintFounder($order, $order_pv, $scan_qr_code_percent, $setting, $string_code_model, $store_id, $is_scan, $model_val) { if (!in_array($model_val, $string_code_model)) return false; //debug_log([__METHOD__, __LINE__, "大模型比例 : " . ($scan_qr_code_percent / 100) . ',Store_id:' . $order->store_id, ',order_id:' . $order->id], "app_debug.log"); $add_money = bcmul($order_pv, $scan_qr_code_percent / 100, 4); $money = bcmul($add_money, $setting['string_code_alliance_merchant'] / 100, 4); //debug_log([__METHOD__, __LINE__, "大模型:order_pv : " . $order_pv . ',$add_money:' . $add_money . ',$money:' . $money], "app_debug.log"); $desc = UserStringCodePlus::MODEL_NAME_LIST[$model_val] . " " . "订单号:【{$order->order_no}】分红增加"; if (bccomp($money, 0, 4) > 0) { StoreUnionPool::poolPush($order, $money, $desc, $order_pv, $setting['string_code_alliance_merchant'], $scan_qr_code_percent, $model_val, $add_money); } $money = bcmul($add_money, $setting['string_code_brand_cofounder'] / 100, 4); //debug_log([__METHOD__, __LINE__, "大模型:order_pv : " . $order_pv . ',$add_money:' . $add_money . ',$money:' . $money], "app_debug.log"); if (bccomp($money, 0, 4) > 0) { UnitFounderPool::poolPush($order, $money, $desc, $order_pv, $setting['string_code_brand_cofounder'], $scan_qr_code_percent, $model_val, $add_money); } if (bccomp($add_money, 0, 4) > 0) { self::supriseRed($order, $setting, $order_pv, $model_val); self::hotAwardSend($setting['string_code_hot_district_agent'], $setting['string_code_ad_hot'], $setting['string_code_store_district_agent_divvy'], $add_money, $model_val, $order); self::adAwardSend($order->store_id, $add_money, $setting['string_code_ad_brand'], $setting['string_code_expansion_manager'], $model_val, $order, $setting['string_code_store_push_id']); self::areaAwardSend($order->store_id, $order, $add_money, $model_val, 1);//品牌区县代理 self::areaAwardSend($order->store_id, $order, $add_money, $model_val, 2);//品牌市代理 self::areaAwardSend($order->store_id, $order, $add_money, $model_val, 3);//品牌省代理 self::stringCodeStoreReferrer($order, $setting, $store_id, $add_money, $model_val); self::stringCodeStoreUserAffiliated($order, $setting, $add_money, $model_val); self::stringCodeStoreUserReferrer($order, $setting, $add_money, $model_val); $store = Store::findOne($store_id); self::sendMakeConcessionsScan($order, $setting, $is_scan, $store, $model_val); } } private static function adAwardSend($store_id, $order_pv, $rate, $manager, $model, $order, $string_code_store_push_id) { $store = Store::find()->where(['id' => $store_id])->select(['salesman_id', 'district_id'])->asArray()->one(); $salesman_id = $store['salesman_id']; //debug_log([__METHOD__, __LINE__, "============拓展经理:($salesman_id),广告推流店铺id:" . $store_id], "app_debug.log"); if ($order_pv <= 0) return false; $salesman = Salesman::findOne(['id' => $salesman_id, 'is_delete' => 0, 'status' => 1]); $admin = Admin::findOne(['id' => $salesman->admin_id, 'is_delete' => 0]); $manager_money = $order_pv * $manager / 100; if ($manager && $salesman->saas_user_id) { //debug_log([__METHOD__, __LINE__, "============拓展经理金额 : " . ($manager_money)], "app_debug.log"); UserStringCodeOrder::transferAddUserWallet($order, $salesman->saas_user_id, $manager_money, UserStringCodeOrder::TYPE_EXPAND_MANAGER, $model); } else { if ($string_code_store_push_id) { UserStringCodeOrder::transferAddUserWallet($order, $string_code_store_push_id, $manager_money, UserStringCodeOrder::TYPE_EXPAND_MANAGER, $model); } } if ($rate <= 0) return false; $money = $order_pv * $rate / 100; if ($admin->advert_push_user_id) { //debug_log([__METHOD__, __LINE__, "============广告推流金额 : " . ($money)], "app_debug.log"); UserStringCodeOrder::transferAddUserWallet($order, $admin->advert_push_user_id, $money, UserStringCodeOrder::TYPE_BD_AGENT, $model); } else { if ($string_code_store_push_id) { UserStringCodeOrder::transferAddUserWallet($order, $string_code_store_push_id, $money, UserStringCodeOrder::TYPE_BD_AGENT, $model); } } return true; } private static function hotAwardSend($saas_id, $rate, $founder, $order_pv, $model, $order) { $money = $order_pv * $rate / 100; //debug_log([__METHOD__, __LINE__, "============热动代理人金额 : " . ($money)], "app_debug.log"); if ($saas_id && $money > 0) { UserStringCodeOrder::transferAddUserWallet($order, $saas_id, $money, UserStringCodeOrder::TYPE_AD_HOT, $model); } $money = $order_pv * $founder / 100; //debug_log([__METHOD__, __LINE__, "============热动广告推流金额 : " . ($money)], "app_debug.log"); if ($saas_id && $money > 0) { UserStringCodeOrder::transferAddUserWallet($order, $saas_id, $money, UserStringCodeOrder::TYPE_STRING_CODE_STORE_DISTRICT_AGENT_DIVVY, $model); } } private static function areaAwardSend($store_id, $order, $order_pv, $model, $area_level) { if ($order_pv <= 0) return false; $setting = Option::getShareSaleSetting(OptionSetting::ALLIANCE_STORE_ID); $store = Store::find()->where(['id' => $store_id])->select(['salesman_id', 'district_id', 'city_id', 'province_id'])->asArray()->one(); $salesman_id = $store['salesman_id']; //debug_log([__METHOD__, __LINE__, "============拓展经理:($salesman_id),,广告推流店铺id:" . $store_id], "app_debug.log"); $salesman = Salesman::findOne(['id' => $salesman_id, 'is_delete' => 0, 'status' => 1]); $admin = Admin::findOne(['id' => $salesman->admin_id, 'is_delete' => 0]); $query = Admin::find()->select('saas_user_id')->where(['agent_id' => $salesman->admin_id, 'is_enable' => 1, 'is_delete' => 0]); switch ($area_level) { case 1: $area = $setting['string_code_brand_district_agent']; $type = UserStringCodeOrder::TYPE_BRAND_DISTRICT_AGENT; $d_query = clone $query; $agent_id = $d_query->andWhere(['district_id' => $store['district_id'], 'area_level' => 1])->scalar() ?: null; if ($agent_id) break; //debug_log([__METHOD__, __LINE__, "============没找到区县代理"], "app_debug.log"); case 2: if ($area_level == 2) { $type = UserStringCodeOrder::TYPE_BRAND_CITY_AGENT; $area = $setting['string_code_brand_city_agent']; } $c_query = clone $query; $agent_id = $c_query->andWhere(['city_id' => $store['city_id'], 'area_level' => 2])->scalar() ?: null; if ($agent_id) break; //debug_log([__METHOD__, __LINE__, "============没找到市代理"], "app_debug.log"); case 3: if ($area_level == 3) { $type = UserStringCodeOrder::TYPE_BRAND_PROVINCE_AGENT; $area = $setting['string_code_brand_province_agent']; } $p_query = clone $query; $agent_id = $p_query->andWhere(['province_id' => $store['province_id'], 'area_level' => 3])->scalar() ?: null; break; default: $area = 0; break; } if ($area && $salesman->admin_id) { $area_money = $order_pv * $area / 100; $agent_id = $agent_id ?: ($admin->advert_push_user_id ?: $setting['string_code_store_push_id']); //debug_log([__METHOD__, __LINE__, "============区县代理商:" . $agent_id . "金额 : " . ($area_money)], "app_debug.log"); if ($agent_id) { UserStringCodeOrder::transferAddUserWallet($order, $agent_id, $area_money, $type, $model); } } return true; } public static function stringCodeStoreReferrer($order, $setting, $store_id, $transfer_money, $model_val) { $referrer = 0; if ($order instanceof ScanOrder) { if (isset($setting['string_code_store_referrer']) && $setting['string_code_store_referrer'] > 0) { $referrer = $setting['string_code_store_referrer']; } } else { if (isset($setting['string_code_brand_referrer']) && $setting['string_code_brand_referrer'] > 0) { $referrer = $setting['string_code_brand_referrer']; } } if ($referrer > 0) { $store_referral = SaasStoreReferral::findOne(['store_id' => $store_id]); $saas_id = $store_referral['referral_id']; $money = bcmul($transfer_money, $referrer / 100, 4); $type = UserStringCodeOrder::TYPE_STORE_REFERRER; UserStringCodeOrder::transferAddUserWallet($order, $saas_id, $money, $type, $model_val); } } public static function stringCodeStoreUserAffiliated($order, $setting, $transfer_money, $model_val) { $affiliated = 0; if ($order instanceof ScanOrder) { if (isset($setting['string_code_store_user_affiliated']) && $setting['string_code_store_user_affiliated'] > 0) { $affiliated = $setting['string_code_store_user_affiliated']; } } else { if (isset($setting['string_code_brand_user_affiliated']) && $setting['string_code_brand_user_affiliated'] > 0) { $affiliated = $setting['string_code_brand_user_affiliated']; } } if ($affiliated > 0) { $first_store_id = SaasUser::findFirstStoreIdByUserId($order->user_id); $store_admin = Admin::findOne(['type' => 'store', 'type_id' => $first_store_id, 'is_delete' => 0]); $saas_id = $store_admin['saas_user_id']; $money = bcmul($transfer_money, $affiliated / 100, 4); $type = UserStringCodeOrder::TYPE_STORE_USER_AFFILIATED; UserStringCodeOrder::transferAddUserWallet($order, $saas_id, $money, $type, $model_val); } } public static function stringCodeStoreUserReferrer($order, $setting, $transfer_money, $model_val) { $referrer = 0; if ($order instanceof ScanOrder) { if (isset($setting['string_code_store_user_referrer']) && $setting['string_code_store_user_referrer'] > 0) { $referrer = $setting['string_code_store_user_referrer']; } } else { if (isset($setting['string_code_brand_user_referrer']) && $setting['string_code_brand_user_referrer'] > 0) { $referrer = $setting['string_code_brand_user_referrer']; } } if ($referrer > 0) { $user = User::findOne($order->user_id); if ($user->id > 0) { $saas_id = SaasUser::findSaasParentIdByUserId($order->user_id); $money = bcmul($transfer_money, $referrer / 100, 4); $type = UserStringCodeOrder::TYPE_STORE_USER_REFERRER; UserStringCodeOrder::transferAddUserWallet($order, $saas_id, $money, $type, $model_val); } } } public static function sendDistrictStreetAgentDivvy($order, $model_val = 1, $modelType = '街道代理商') { $setting = Option::get(OptionSetting::SHARE_STRING_CODE_SALE_SETTING, UserStringCodePlus::ALLIANCE_STORE_ID, OptionSetting::SHARE_GROUP_NAME, '{}'); $setting = $setting ? Json::decode($setting['value']) : []; //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】店铺推荐人:{$setting['string_code_store_referrer']} 合伙人分红:{$setting['string_code_store_partner']} 会员所属门店:{$setting['string_code_store_user_affiliated']} 用户推荐人:{$setting['string_code_store_user_referrer']}"], "app_debug.log"); $transfer_money = 0; if ($order instanceof ScanOrder) { $transfer_money = UserStringCodePlus::countOrderPvBonus($order); } if ($transfer_money <= 0.01) { //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】{$modelType}总待分账金额:{$transfer_money} 小于0.01不分账"], "app_debug.log"); return; } /*if (isset($setting['string_code_store_district_agent_divvy']) && $setting['string_code_store_district_agent_divvy'] > 0) { $money = bcmul($transfer_money, $setting['string_code_store_district_agent_divvy'] / 100, 4); //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】{$modelType}总待分账金额:{$transfer_money} 门店区县代理商待分账金额:{$money}"], "app_debug.log"); if ($money > 0) { self::getAgentSaasIdByOrder($order, UserStringCodeOrder::TYPE_STRING_CODE_STORE_DISTRICT_AGENT_DIVVY, $money, $model_val, $modelType); } }*/ if (isset($setting['string_code_store_street_agent_divvy']) && $setting['string_code_store_street_agent_divvy'] > 0) { $money = bcmul($transfer_money, $setting['string_code_store_street_agent_divvy'] / 100, 4); //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】{$modelType}总待分账金额:{$transfer_money} 门店街道代理商待分账金额:{$money}"], "app_debug.log"); if ($money > 0) { self::getAgentSaasIdByOrder($order, UserStringCodeOrder::TYPE_STRING_CODE_STORE_STREET_AGENT_DIVVY, $money, $model_val, $modelType); } } } public static function getAgentSaasIdByOrder($order, $agentType, $money, $model_val, $modelType) { $commission = 0.00; $agent = UserStringCodeOrder::TYPE_LIST[UserStringCodeOrder::TYPE_STRING_CODE_STORE_DISTRICT_AGENT_DIVVY]; //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】{$modelType} {$agent}待分账金额:{$money} 门店:{$order->store_id} ------start-----"], "app_debug.log"); //获取店铺 $store = Store::findOne($order->store_id); if (empty($store)) { //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】{$modelType} {$agent}待分账金额:{$money} 门店:{$order->store_id} 不存在"], "app_debug.log"); return $commission; } switch ($agentType) { case UserStringCodeOrder::TYPE_STRING_CODE_STORE_DISTRICT_AGENT_DIVVY: //区县代理商 $store['district_id'] $where['district_id'] = $store['district_id']; $where['area_level'] = 1; $order->district_agent_status = 1; break; case UserStringCodeOrder::TYPE_STRING_CODE_STORE_STREET_AGENT_DIVVY: //街道代理商 $store['street_id'] $where['street_id'] = $store['street_id']; $where['area_level'] = 4; $order->street_agent_status = 1; break; default: //所有区县代理商分红 $store['district_id'] $where['area_level'] = 1; $order->all_district_agent_status = 1; break; } $where['is_delete'] = 0; $where['is_enable'] = 1; $admin = Admin::find()->where($where)->asArray()->all(); $agentNum = count($admin); if ($agentNum > 0) { $order->save(); $commissionMoney = bcdiv($money, $agentNum, 4); if ($commissionMoney <= 0) { //debug_log([__METHOD__, __LINE__, "代理商平均分红 【{$commissionMoney}】小于0.01不分红"], "app_debug.log"); } foreach ($admin as $item) { if ($item['saas_user_id']) { $res = UserStringCodeOrder::transferAddUserWallet($order, $item['saas_user_id'], $commissionMoney, $agentType, $model_val); if ($res) { $commission += $commissionMoney; } //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】{$modelType} {$agent}分账金额:{$commissionMoney} 门店:{$order->store_id} {{$agent}}ID:{$item['saas_user_id']}"], "app_debug.log"); } else { //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】{$modelType} {$agent}分账金额:{$commissionMoney} 门店:{$order->store_id} {{$agent}}未绑定 SaasId不分红"], "app_debug.log"); } } } else { //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】{$modelType} {$agent}不存在"], "app_debug.log"); } //分红金额小于待分红金额,则分给指定用户 if ($money > $commission) { $commissionMoney = $money - $commission; $setting = Option::get(OptionSetting::SHARE_STRING_CODE_SALE_SETTING, UserStringCodePlus::ALLIANCE_STORE_ID, OptionSetting::SHARE_GROUP_NAME, '{}'); $setting = $setting ? Json::decode($setting['value']) : []; if ($setting['string_code_store_push_id']) { UserStringCodeOrder::transferAddUserWallet($order, $setting['string_code_store_push_id'], $commissionMoney, $agentType, $model_val, true); //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】{$modelType} {$agent}分账剩余金额:{$commissionMoney} 代理商剩余让利用户ID:{$setting['string_code_store_push_id']}"], "app_debug.log"); } else { //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】{$modelType} {$agent}分账剩余金额:{$commissionMoney} 代理商剩余让利用户不存在不继续分红"], "app_debug.log"); return $commission; } } return $money; } public static function sendMakeConcessionsScan($order, $setting, $is_scan, $store, $model_val) { $temp_store = json_encode($setting['string_make_doncessions_userlist']); //debug_log([__METHOD__, __LINE__, "串码让利 商城让利合伙人 【商城让利是否开启:{$setting['string_make_doncessions_switch']} 商城订单是否开启:{$setting['string_make_doncessions_order']} 扫码订单是否开启:{$setting['string_make_doncessions_scan']} 商城让利人员:{$temp_store}"], "app_debug.log"); //debug_log([__METHOD__, __LINE__, "串码让利 商城让利合伙人 【商城串码模型:{$setting['string_code_model']}"], "app_debug.log"); if (empty($setting['string_code_make_concessions'])) { //debug_log([__METHOD__, __LINE__, "串码让利 商城让利合伙人 【商城让利人比例:{$setting['string_code_make_concessions']} 未设置"], "app_debug.log"); return; } if ($setting['string_code_make_concessions'] <= 0) { //debug_log([__METHOD__, __LINE__, "串码让利 商城让利合伙人 【商城让利人比例:{$setting['string_code_make_concessions']} 设置不正确"], "app_debug.log"); return; } //执行小模型前验证 if (is_array($setting['string_make_doncessions_userlist']) && !empty($setting['string_make_doncessions_userlist'])) { self::sendMakeConcessionsByOrderStore($order, $setting, $is_scan, $model_val); } else { if (empty($setting['string_code_make_concessions_saas_id'])) { //debug_log([__METHOD__, __LINE__, "串码让利 商城让利合伙人 小模型 【商城剩余让利人{$setting['string_code_make_concessions']} 未设置 以及 店铺商城让利合伙人 未设置"], "app_debug.log"); } else { self::sendMakeConcessionsByOrderStore($order, $setting, $is_scan, $model_val); } } //检测是否有发放 有直接更新订单状态 $UserStringCodeOrderlist = UserStringCodeOrder::findAll([ 'order_id' => $order->id, 'is_scan' => $is_scan, 'type' => [UserStringCodeOrder::TYPE_STRING_CODE_BRAND_MAKE_DONCESSIONS] ]); $temp_count = count($UserStringCodeOrderlist); //debug_log([__METHOD__, __LINE__, "串码让利 商城让利合伙人 执行记录有:{$temp_count}"], "app_debug.log"); if (count($UserStringCodeOrderlist) > 0) { $temp_order = json_encode($order); //debug_log([__METHOD__, __LINE__, "串码让利 商城让利合伙人 订单信息:{$temp_order}"], "app_debug.log"); $order->make_concessions_status = 1; if ($order->save()) { //debug_log([__METHOD__, __LINE__, "串码让利 商城让利合伙人 状态修改失败"], "app_debug.log"); } // 计算合并结果的总金额 $ModelMoney = 0; foreach ($UserStringCodeOrderlist as $ordertempr) { if ($ordertempr['status'] == 1) { $ModelMoney += $ordertempr['money']; // 累加金额 } } try { if ($order->is_use_platform_mch == 1 && ($order->pay_type == 1 || in_array($order->pay_type, array_keys(Order::HUIFU_PAYMENT_PAY_TYPE)))) { //扣除店铺金额 $subMoney = Store::subStoreMoney($store, $ModelMoney, '扣商城让利合伙人分红', $order->id, $order->user_id); if (!$subMoney) { //debug_log([__METHOD__, __LINE__, $order->order_no . "店铺:" . $store->name . " 扣商城让利合伙人分红:" . $ModelMoney . " 失败"], "app_debug.log"); } //debug_log([__METHOD__, __LINE__, $order->order_no . "店铺:" . $store->name . " 扣商城让利合伙人分红:" . $ModelMoney . " 成功"], "app_debug.log"); } else { //debug_log([__METHOD__, __LINE__, $order->order_no . "店铺:" . $store->name . " 已分账,不用扣商城让利合伙人分红 成功"], "app_debug.log"); } } catch (\Exception $e) { //debug_log([__METHOD__, __LINE__, "扣商城让利合伙人分红:{$e->getMessage()}"], "app_debug.log"); } } //debug_log([__METHOD__, __LINE__, "串码让利 商城让利合伙人 执行完成"], "app_debug.log"); } public static function sendMakeConcessionsByOrderStore($order, $setting, $is_scan, $model_val) { if (empty($setting['string_make_doncessions_switch'])) { //debug_log([__METHOD__, __LINE__, "串码让利 商城让利合伙人 商城让利合伙人模式未设置"], "app_debug.log"); return; } if ($setting['string_make_doncessions_switch'] == 0) { //debug_log([__METHOD__, __LINE__, "串码让利 商城让利合伙人 商城让利合伙人模式未开启"], "app_debug.log"); return; } if ($is_scan == 0) { //商城订单 if (empty($setting['string_make_doncessions_order']) || $setting['string_make_doncessions_order'] == 0) { //debug_log([__METHOD__, __LINE__, "串码让利 商城让利合伙人 商城订单商城让利合伙人状态未设置"], "app_debug.log"); } else { //debug_log([__METHOD__, __LINE__, "执行 商城让利人分红"], "app_debug.log"); /*$order_pv = OrderDetail::find() ->andWhere(['order_id' => $order['id'], 'is_delete' => 0]) ->select([ 'sum(pv_0)', ])->scalar(); self::sendMakeConcessionsByOrderGrant($order, $order_pv, $setting['string_code_make_concessions'], $setting['string_code_make_concessions_saas_id'], $setting['string_make_doncessions_userlist'], 0); $order_pv = OrderDetail::find() ->andWhere(['order_id' => $order['id'], 'is_delete' => 0]) ->select([ 'sum(pv_1)', ])->scalar();*/ self::sendMakeConcessionsByOrderGrant($order, $order->pay_price, $setting['string_code_make_concessions'], $setting['string_code_make_concessions_saas_id'], $setting['string_make_doncessions_userlist'], $model_val); //debug_log([__METHOD__, __LINE__, "执行 商城让利人分红:" . $setting['string_code_make_concessions'] . '======'], "app_debug.log"); } } else { //扫码订单 if (empty($setting['string_make_doncessions_scan']) || $setting['string_make_doncessions_scan'] == 0) { //debug_log([__METHOD__, __LINE__, "串码让利 商城让利合伙人 商城订单商城让利合伙人状态未设置"], "app_debug.log"); } else { //debug_log([__METHOD__, __LINE__, "执行 扫码分红"], "app_debug.log"); self::sendMakeConcessionsByOrderGrant($order, $order->pay_price, $setting['string_code_make_concessions_scan'], $setting['string_code_make_concessions_saas_id'], $setting['string_make_doncessions_userlist'], $model_val); } } } public static function sendMakeConcessionsByOrderGrant($order, $transfer_money, $string_code_make_concessions, $push_saas_id, $string_make_doncessions_userlist, $model_val) { $money = bcmul($transfer_money, $string_code_make_concessions / 100, 4); if ($string_make_doncessions_userlist) { $moneytran_temp = 0; if (is_array($string_make_doncessions_userlist)) { $string_make_doncessions_userlist = self::NewUserList($string_make_doncessions_userlist); foreach ($string_make_doncessions_userlist as $item) { $moneytran = 0; //debug_log([__METHOD__, __LINE__, "div1===" . bcmul(bcmul($money, $item['percent'], 8), $item['weight'], 8)], "app_debug.log"); if ($item['total_weight'] > 0 && bcmul(bcmul($money, $item['percent'], 8), $item['weight'], 8) > 0) { $moneytran = bcmul( bcdiv( bcmul($money, $item['percent'], 8), $item['total_weight'], 8 ), $item['weight'], 8 ); } //debug_log([__METHOD__, __LINE__, "div2====" . $moneytran] . '====' . $item['total_weight'] . '===' . $item['weight'] . '===' . $item['percent'], "app_debug.log"); $moneytran = sprintf("%.4f", $moneytran); //debug_log([__METHOD__, __LINE__, "串码让利 商城让利合伙人 总的{$money} 当前商城没设置参与人员:{$item['saas_id']} 获得:{$moneytran}"], "app_debug.log"); UserStringCodeOrder::transferAddUserWalletAndStoreid($order, $item['saas_id'], $moneytran, UserStringCodeOrder::TYPE_STRING_CODE_BRAND_MAKE_DONCESSIONS, $model_val, $order->store_id, false); $moneytran_temp = bcadd($moneytran_temp, $moneytran, 4); } } $moneytran_sy = $money - $moneytran_temp; if ($moneytran_sy > 0) { //debug_log([__METHOD__, __LINE__, "串码让利 商城让利合伙人 总的{$money} 平分后还有剩余:{$moneytran_sy} 直接给剩余让利人{$push_saas_id} "], "app_debug.log"); UserStringCodeOrder::transferAddUserWalletAndStoreid($order, $push_saas_id, $moneytran_sy, UserStringCodeOrder::TYPE_STRING_CODE_BRAND_MAKE_DONCESSIONS, $model_val, $order->store_id, true); } } else { //debug_log([__METHOD__, __LINE__, "串码让利 商城让利合伙人总的{$money} 当前商城没设置参与人员 全部给剩余让利人:{$push_saas_id}"], "app_debug.log"); UserStringCodeOrder::transferAddUserWalletAndStoreid($order, $push_saas_id, $money, UserStringCodeOrder::TYPE_STRING_CODE_BRAND_MAKE_DONCESSIONS, $model_val, $order->store_id, true); } } public static function NewUserList($data) { foreach ($data as &$value) { $level_info = \Yii::$app->db->createCommand('select * from cyy_store_partner_level where id=:id')->bindValue(':id', $value['level_id'])->queryOne(); $value['percent'] = $level_info['profit_rate'] / 100; //debug_log([__METHOD__, __LINE__, "div2====" . $level_info['name'] . '=user_id:' . $value['saas_id']], "app_debug.log"); } $total_weights = []; foreach ($data as $item) { $level_id = $item['level_id']; $weight = (int)$item['weight']; // 确保 weight 是整数 if (!isset($total_weights[$level_id])) { $total_weights[$level_id] = 0; } $total_weights[$level_id] += $weight; } // Step 2: 将 total_weight 添加到每个数组元素中 foreach ($data as &$item) { $level_id = $item['level_id']; $item['total_weight'] = $total_weights[$level_id]; } // 释放引用 unset($item); return $data; } public static function supriseRed($order, $setting, $transfer_money, $model_val) { $referrer = $setting['suprise_red']; $saas_id = SaasUser::findSaasIdByUserId($order->user_id); if ($saas_id > 0 && $referrer > 0) { $money = bcmul($transfer_money, $referrer / 100, 4); $type = UserStringCodeOrder::TYPE_SUPRISE_RED; UserStringCodeOrder::transferAddUserWallet($order, $saas_id, $money, $type, $model_val); } } public static function appointAward($config, $order, $pv0, $pv1) { try { if (!isset($config['users']) || empty($config['users'])) throw new \Exception('无配置分红池'); foreach ($config['users'] as $p) { if (!isset($p['rate']) || $p['rate'] <= 0 || !isset($p['saas_id']) || !$p['saas_id'] || !isset($p['remark']) || !$p['remark']) continue; $money = bcmul($pv0, $p['rate'] / 100, 6); if ($money > 0){ UserStringCodeOrder::configAddUserWallet($order, $p['saas_id'], $money, UserStringCodeOrder::TYPE_APPOINT_AWARD, 0, $p['remark']); } $money = bcmul($pv1, $p['rate'] / 100, 6); if ($money > 0){ UserStringCodeOrder::configAddUserWallet($order, $p['saas_id'], $money, UserStringCodeOrder::TYPE_APPOINT_AWARD, 1, $p['remark']); } } } catch (\Exception $e) { //ActionLog::addLog(1, 'appointAward', $e->getMessage()); } } }