| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745 |
- <?php
- /**
- * 厦门云联储网络科技有限公司
- * https://www.baokuaiyun.com
- * Copyright (c) 2023 爆块云 All rights reserved.
- */
- namespace app\models;
- use app\constants\OptionSetting;
- use app\plugins\scanCodePay\models\Order as ScanOrder;
- use Yii;
- use yii\base\Exception;
- use yii\behaviors\TimestampBehavior;
- use yii\db\ActiveRecord;
- use yii\helpers\Json;
- /**
- * This is the model class for table "{{%salesman}}".
- *
- * @property integer $id
- * @property integer $saas_user_id
- * @property integer $admin_id
- * @property integer $type
- * @property integer $is_delete
- * @property integer $created_at
- * @property integer $updated_at
- * @property integer $status
- */
- class Salesman extends \yii\db\ActiveRecord
- {
- const TYPE_DEFAULT = 0; //默认类型
- const TYPE_BD = 1; //推广代理下业务员
- /**
- * @inheritdoc
- */
- public static function tableName()
- {
- return '{{%salesman}}';
- }
- 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 [
- [['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());
- }
- }
- }
|