UserStringCodeOrder.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500
  1. <?php
  2. /**
  3. * 厦门云联储网络科技有限公司
  4. * https://www.baokuaiyun.com
  5. * Copyright (c) 2023 爆块云 All rights reserved.
  6. */
  7. namespace app\models;
  8. use app\constants\OptionSetting;
  9. use yii\behaviors\TimestampBehavior;
  10. use yii\db\ActiveRecord;
  11. use yii\helpers\Json;
  12. use app\plugins\scanCodePay\models\Order as ScanOrder;
  13. /**
  14. * This is the model class for table "{{%user_string_code_order}}".
  15. *
  16. * @property integer $id
  17. * @property integer $store_id
  18. * @property integer $user_id
  19. * @property integer $saas_id
  20. * @property integer $is_scan
  21. * @property integer $order_id
  22. * @property integer $money
  23. * @property integer $status
  24. * @property string $title
  25. * @property string $order_no
  26. * @property string $logo
  27. * @property integer $type
  28. * @property integer $model_val
  29. * @property integer $created_at
  30. * @property integer $updated_at
  31. * @property integer $source_store_id
  32. */
  33. class UserStringCodeOrder extends \yii\db\ActiveRecord
  34. {
  35. const STATUS_WAIT = 0;
  36. const STATUS_SUCCESS = 1;
  37. const TYPE_STORE_REFERRER = 'store_referrer';
  38. const TYPE_SUPRISE_RED = 'suprise_red';
  39. const TYPE_BRAND_USER_STORE_REFERRER = 'brand_user_store_referrer';
  40. // const TYPE_STORE_PARTNER = 'store_partner';
  41. const TYPE_STORE_USER_AFFILIATED = 'store_user_affiliated';
  42. const TYPE_STORE_USER_REFERRER = 'store_user_referrer';
  43. const TYPE_STORE_RED_PACKET = 'store_red_packet';
  44. const TYPE_BRAND_REFERRER = 'brand_referrer';
  45. // const TYPE_BRAND_PARTNER = 'brand_partner';
  46. const TYPE_BRAND_USER_AFFILIATED = 'brand_user_affiliated';
  47. const TYPE_BRAND_USER_REFERRER = 'brand_user_referrer';
  48. const TYPE_BRAND_RED_PACKET = 'brand_red_packet';
  49. const TYPE_BRAND_TEAM_PARTNER = 'brand_team_partner';
  50. const TYPE_STORE_TEAM_PARTNER = 'store_team_partner';
  51. const TYPE_PARTNER = 'partner';
  52. const TYPE_STRING_CODE_STORE_DISTRICT_AGENT_DIVVY = 'string_code_store_district_agent_divvy';
  53. const TYPE_STRING_CODE_STORE_STREET_AGENT_DIVVY = 'string_code_store_street_agent_divvy';
  54. const TYPE_STRING_CODE_STORE_ALL_DISTRICT_AGENT_DIVVY = 'string_code_store_all_district_agent_divvy';
  55. const TYPE_STRING_CODE_BRAND_MAKE_DONCESSIONS = 'string_code_brand_make_doncessions';
  56. const TYPE_STORE_UNION = 'store_union';
  57. const TYPE_UNIT_FOUNDER = 'unit_founder';
  58. const TYPE_EXPAND_MANAGER = 'expand_manager';
  59. const TYPE_BD_AGENT = 'bd_agent';
  60. const TYPE_HOT_UNIT_FOUNDER = 'hot_unit_founder';
  61. const TYPE_AD_HOT = 'string_code_ad_hot';
  62. const TYPE_BRAND_DISTRICT_AGENT = 'string_code_brand_district_agent';
  63. const TYPE_BRAND_CITY_AGENT = 'string_code_brand_city_agent';
  64. const TYPE_BRAND_PROVINCE_AGENT = 'string_code_brand_province_agent';
  65. const TYPE_APPOINT_AWARD = 'appoint_award';
  66. const TYPE_AREA_AWARD = 'area_agent_award';
  67. const TYPE_CONFIG_POOL_AWARD = 'config_pool_award';
  68. const TYPE_CURRENCY_AWARD = 'currency_award';
  69. const TYPE_LEAGUE_POOL_AWARD = 'league_pool_award';
  70. const TYPE_ORDER_FLOW_CANCEL = 'order_flow_cancel';
  71. const TYPE_LIST = [
  72. self::TYPE_STORE_REFERRER => '店铺推荐人',
  73. self::TYPE_CURRENCY_AWARD => '币种奖励',
  74. self::TYPE_SUPRISE_RED => '惊喜红包',
  75. self::TYPE_BRAND_USER_STORE_REFERRER => '商城用户推荐人',
  76. // self::TYPE_STORE_PARTNER => '合伙人',
  77. self::TYPE_STORE_USER_AFFILIATED => '会员所属门店',
  78. self::TYPE_STORE_USER_REFERRER => '联盟推荐人',
  79. self::TYPE_STORE_RED_PACKET => '串码红包',
  80. self::TYPE_BRAND_REFERRER => '店铺推荐人',
  81. self::TYPE_BRAND_TEAM_PARTNER => '品牌团队合伙人',
  82. self::TYPE_STORE_TEAM_PARTNER => '店铺团队合伙人',
  83. // self::TYPE_BRAND_PARTNER => '合伙人',
  84. self::TYPE_BRAND_USER_AFFILIATED => '会员所属品牌',
  85. self::TYPE_BRAND_USER_REFERRER => '用户推荐人',
  86. self::TYPE_BRAND_RED_PACKET => '串码红包',
  87. self::TYPE_PARTNER => '合伙人',
  88. self::TYPE_STRING_CODE_STORE_DISTRICT_AGENT_DIVVY => '授权区县代理商',
  89. self::TYPE_STRING_CODE_STORE_STREET_AGENT_DIVVY => '街道代理商',
  90. self::TYPE_STRING_CODE_STORE_ALL_DISTRICT_AGENT_DIVVY => '所有区县代理商分红',
  91. self::TYPE_STRING_CODE_BRAND_MAKE_DONCESSIONS => '商城让利合伙人',
  92. self::TYPE_STORE_UNION => '联盟商家',
  93. self::TYPE_UNIT_FOUNDER => '联合创始人',
  94. self::TYPE_EXPAND_MANAGER => '拓展经理',
  95. self::TYPE_BD_AGENT => '广告推流推广代理',
  96. self::TYPE_AD_HOT => '授权广告推流',
  97. self::TYPE_BRAND_DISTRICT_AGENT => '品牌区县代理',
  98. self::TYPE_BRAND_CITY_AGENT => '品牌市代理',
  99. self::TYPE_BRAND_PROVINCE_AGENT => '品牌省代理',
  100. self::TYPE_APPOINT_AWARD => '指定账户',
  101. self::TYPE_AREA_AWARD => '区域代理',
  102. self::TYPE_CONFIG_POOL_AWARD => '分红池分红',
  103. self::TYPE_LEAGUE_POOL_AWARD => '联盟券分红池分红',
  104. self::TYPE_ORDER_FLOW_CANCEL => '订单取消',
  105. ];
  106. const TYPE_LEAGUE_PRICE = [
  107. self::TYPE_STORE_REFERRER => 9,
  108. self::TYPE_CURRENCY_AWARD => 34,
  109. self::TYPE_SUPRISE_RED => 10,
  110. self::TYPE_BRAND_USER_STORE_REFERRER => 11,
  111. // self::TYPE_STORE_PARTNER => '合伙人',
  112. self::TYPE_STORE_USER_AFFILIATED => 12,
  113. self::TYPE_STORE_USER_REFERRER => 13,
  114. self::TYPE_STORE_RED_PACKET => 8,
  115. self::TYPE_BRAND_REFERRER => 14,
  116. self::TYPE_BRAND_TEAM_PARTNER => 15,
  117. self::TYPE_STORE_TEAM_PARTNER => 16,
  118. // self::TYPE_BRAND_PARTNER => '合伙人',
  119. self::TYPE_BRAND_USER_AFFILIATED => 17,
  120. self::TYPE_BRAND_USER_REFERRER => 18,
  121. self::TYPE_BRAND_RED_PACKET => 8,
  122. self::TYPE_PARTNER => 19,
  123. self::TYPE_STRING_CODE_STORE_DISTRICT_AGENT_DIVVY => 20,
  124. self::TYPE_STRING_CODE_STORE_STREET_AGENT_DIVVY => 21,
  125. self::TYPE_STRING_CODE_STORE_ALL_DISTRICT_AGENT_DIVVY => 22,
  126. self::TYPE_STRING_CODE_BRAND_MAKE_DONCESSIONS => 23,
  127. self::TYPE_STORE_UNION => 24,
  128. self::TYPE_UNIT_FOUNDER => 25,
  129. self::TYPE_EXPAND_MANAGER => 26,
  130. self::TYPE_BD_AGENT => 27,
  131. self::TYPE_AD_HOT => 28,
  132. self::TYPE_BRAND_DISTRICT_AGENT => 29,
  133. self::TYPE_BRAND_CITY_AGENT => 30,
  134. self::TYPE_BRAND_PROVINCE_AGENT => 31,
  135. self::TYPE_APPOINT_AWARD => 32,
  136. self::TYPE_AREA_AWARD => 33,
  137. self::TYPE_CONFIG_POOL_AWARD => 7,
  138. self::TYPE_LEAGUE_POOL_AWARD => 35,
  139. self::TYPE_ORDER_FLOW_CANCEL => 36,
  140. ];
  141. const STORE_DIRECT_REFERRAL_REWARD = 'store_direct_referral_reward';
  142. const STORE_PROFIT_POOL_DIVIDEND = 'store_profit_pool_dividend';
  143. const STORE_DESIGNATED_PROFIT_SHARING = 'store_designated_profit_sharing';
  144. const STORE_PEER_LEVEL_PROFIT_SHARING = 'store_peer_level_profit_sharing';
  145. const STORE_P_PROFIT_SHARING = 'store_province_regional_profit_sharing';
  146. const STORE_C_PROFIT_SHARING = 'store_city_regional_profit_sharing';
  147. const STORE_A_PROFIT_SHARING = 'store_district_regional_profit_sharing';
  148. const STORE_T_PROFIT_SHARING = 'store_town_regional_profit_sharing';
  149. const STATUS_LIST = [
  150. self::STATUS_WAIT => '待结算',
  151. self::STATUS_SUCCESS => '已结算',
  152. ];
  153. /**
  154. * @inheritdoc
  155. */
  156. public static function tableName()
  157. {
  158. return '{{%user_string_code_order}}';
  159. }
  160. public function behaviors()
  161. {
  162. return [
  163. [
  164. 'class' => TimestampBehavior::class,
  165. 'attributes' => [
  166. ActiveRecord::EVENT_BEFORE_INSERT => ['created_at'],
  167. ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at']
  168. ]
  169. ]
  170. ];
  171. }
  172. /**
  173. * @inheritdoc
  174. */
  175. public function rules()
  176. {
  177. return [
  178. [
  179. [
  180. 'store_id', 'user_id', 'saas_id', 'order_id', 'created_at', 'is_scan', 'updated_at', 'status', 'model_val'
  181. ],
  182. 'integer'
  183. ],
  184. [['title'], 'string', 'max' => 100],
  185. [['type'], 'string', 'max' => 50],
  186. [['logo', 'order_no'], 'string', 'max' => 255],
  187. [['money'], 'number'],
  188. ];
  189. }
  190. /**
  191. * @inheritdoc
  192. */
  193. public function attributeLabels()
  194. {
  195. return [
  196. 'id' => 'ID',
  197. 'store_id' => '店铺id',
  198. 'user_id' => '用户id',
  199. 'saas_id' => '联盟用户id',
  200. 'is_scan' => '订单id',
  201. 'order_id' => '金额',
  202. 'money' => '金额',
  203. 'status' => '状态',
  204. 'title' => '标题',
  205. 'order_no' => '订单号',
  206. 'logo' => 'Logo',
  207. 'type' => '类型',
  208. 'model_val' => '模型',
  209. 'created_at' => '创建时间',
  210. 'updated_at' => '更新时间',
  211. ];
  212. }
  213. public static function set($store_id, $user_id, $saas_id, $is_scan, $order_id, $money, $status, $title, $order_no, $type, $model_val, $source_store_id = 0)
  214. {
  215. $model = new self();
  216. $model->store_id = $store_id;
  217. $model->user_id = $user_id;
  218. $model->saas_id = $saas_id;
  219. $model->is_scan = $is_scan;
  220. $model->order_id = $order_id;
  221. $model->money = $money;
  222. $model->status = $status;
  223. $model->title = $title;
  224. $model->order_no = $order_no;
  225. $model->logo = "https://mall.kcyp.net/web/uploads/images/store_6/2024-11-28/8d6f1d4abbdb46c4a493a9306ebd7c188280e32c.png";
  226. $model->type = $type;
  227. $model->model_val = $model_val;
  228. $model->source_store_id = $source_store_id;
  229. //debug_log([__METHOD__, __LINE__, "====================" . $user_id], "app_debug.log");
  230. return $model->save();
  231. }
  232. // $isSurplus 是否剩余让利用户
  233. public static function transferAddUserWallet($order, $saas_id, $money, $type, $model_val, $isSurplus = false)
  234. {
  235. $order_id = $order->id;
  236. $order_no = $order->order_no;
  237. $is_scan = $order instanceof ScanOrder ? 1 : 0;
  238. //改为大模型下
  239. $store_id = $model_val == UserStringCodePlus::MODEL_ALLIANCE ? UserStringCodePlus::ALLIANCE_STORE_ID : $order->store_id;
  240. // $store_id = UserStringCodePlus::ALLIANCE_STORE_ID;
  241. // $user_id = $model_val == UserStringCodePlus::MODEL_ALLIANCE ? 0 : SaasUser::findUserIdByStoreIdAndSaasId($store_id, $saas_id);
  242. $user_id = SaasUser::findUserIdByStoreIdAndSaasId($order->store_id, $saas_id);
  243. $desc = self::TYPE_LIST[$type];
  244. if (!$saas_id) {
  245. $setting = Option::get(OptionSetting::SHARE_STRING_CODE_DEFAULT_SETTING, $store_id, OptionSetting::SHARE_GROUP_NAME, '{}');
  246. $setting = $setting ? Json::decode($setting['value']) : [];
  247. $user_id = $setting['string_code_transfer_user_id'] ?? 0;
  248. $saas_id = $setting['string_code_transfer_saas_id'] ?? 0;
  249. if ($saas_id) {
  250. //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】,{$desc}分账金额:{$money} 受益人不存在,发放给特殊联盟用户:【{$saas_id}】"], "app_debug.log");
  251. } else {
  252. //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】,{$desc}分账金额:{$money} 受益人不存在,特殊联盟用户也不存在"], "app_debug.log");
  253. return false;
  254. }
  255. }
  256. if (bccomp($money, 0, 6) <= 0) {
  257. //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】,{$desc}分账金额:{$money} 有误"], "app_debug.log");
  258. return false;
  259. }
  260. if ($isSurplus) {
  261. $s_order_log = UserStringCodeOrder::TYPE_LIST[$type] . '剩余让利用户';
  262. } else {
  263. $s_order_log = UserStringCodePlus::MODEL_NAME_LIST[$model_val] . " " . UserStringCodeOrder::TYPE_LIST[$type];
  264. }
  265. $award_type = PluginPoolConfig::getAwardType($order->store_id, $is_scan);
  266. if ($award_type == 2) {
  267. SaaSLeaguePriceLog::addLog($saas_id, $order->store_id, $money, UserStringCodeOrder::TYPE_LEAGUE_PRICE[$type], $order_id, $is_scan, 0, $s_order_log);
  268. } else {
  269. $wallet_user_id = $model_val == UserStringCodePlus::MODEL_ALLIANCE ? $saas_id : $user_id;
  270. if (!$wallet_user_id && $model_val != UserStringCodePlus::MODEL_ALLIANCE) {
  271. $saasUser = SaasUser::findOne($saas_id);
  272. $wallet_user_id = User::findUserByStore($store_id, $saasUser->mobile, $saasUser->name, $saasUser->avatar);
  273. if (!$wallet_user_id) return false;
  274. }
  275. $log_type = $is_scan ? UserWallet::TYPE_SCAN : UserWallet::TYPE_ORDER;
  276. $log_desc = UserWallet::TYPE_NAME_LIST[$log_type] . "【{$order_no}】 发放【{$s_order_log}】红包";
  277. $source_table = $is_scan ? "\app\plugins\scanCodePay\models\Order" : "app\models\Order";
  278. $currency = Currency::findOne(['code' => Currency::CURRENCY_STRING_CODE]);
  279. UserWallet::addLog($currency, $store_id, $wallet_user_id, $money, $log_desc, $log_type, $source_table, $order_id, $store_id, $type);
  280. UserStringCodeOrder::set(
  281. $store_id,
  282. $user_id,
  283. $saas_id,
  284. $is_scan,
  285. $order_id,
  286. $money,
  287. UserStringCodeOrder::STATUS_SUCCESS,
  288. $s_order_log,
  289. $order_no,
  290. $type,
  291. $model_val,
  292. $order->store_id
  293. );
  294. }
  295. return true;
  296. }
  297. public static function configAddUserWallet($order, $saas_id, $money, $type, $model_val, $desc, $isSurplus = false)
  298. {
  299. $order_id = $order->id;
  300. $order_no = $order->order_no;
  301. $is_scan = $order instanceof ScanOrder ? 1 : 0;
  302. //改为大模型下
  303. $store_id = $model_val == UserStringCodePlus::MODEL_ALLIANCE ? UserStringCodePlus::ALLIANCE_STORE_ID : $order->store_id;
  304. // $store_id = UserStringCodePlus::ALLIANCE_STORE_ID;
  305. // $user_id = $model_val == UserStringCodePlus::MODEL_ALLIANCE ? 0 : SaasUser::findUserIdByStoreIdAndSaasId($store_id, $saas_id);
  306. $user_id = SaasUser::findUserIdByStoreIdAndSaasId($order->store_id, $saas_id);
  307. if (!$saas_id) {
  308. $setting = Option::get(OptionSetting::SHARE_STRING_CODE_DEFAULT_SETTING, $store_id, OptionSetting::SHARE_GROUP_NAME, '{}');
  309. $setting = $setting ? Json::decode($setting['value']) : [];
  310. $user_id = $setting['string_code_transfer_user_id'] ?? 0;
  311. $saas_id = $setting['string_code_transfer_saas_id'] ?? 0;
  312. if ($saas_id) {
  313. //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】,{$desc}分账金额:{$money} 受益人不存在,发放给特殊联盟用户:【{$saas_id}】"], "app_debug.log");
  314. } else {
  315. //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】,{$desc}分账金额:{$money} 受益人不存在,特殊联盟用户也不存在"], "app_debug.log");
  316. return false;
  317. }
  318. }
  319. if (bccomp($money, 0, 6) <= 0) {
  320. //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】,{$desc}分账金额:{$money} 有误"], "app_debug.log");
  321. return false;
  322. }
  323. if ($isSurplus) {
  324. $s_order_log = UserStringCodeOrder::TYPE_LIST[$type] . " " . $desc . '剩余让利用户';
  325. } else {
  326. $s_order_log = UserStringCodePlus::MODEL_NAME_LIST[$model_val] . " " . $desc;
  327. }
  328. $award_type = PluginPoolConfig::getAwardType($order->store_id, $is_scan);
  329. if ($award_type == 2) {
  330. SaaSLeaguePriceLog::addLog($saas_id, $order->store_id, $money, UserStringCodeOrder::TYPE_LEAGUE_PRICE[$type], $order_id, $is_scan, 0, $desc);
  331. } else {
  332. $log_type = $is_scan ? UserWallet::TYPE_SCAN : UserWallet::TYPE_ORDER;
  333. $log_desc = UserWallet::TYPE_NAME_LIST[$log_type] . "【{$order_no}】 发放【{$s_order_log}】红包";
  334. $wallet_user_id = $model_val == UserStringCodePlus::MODEL_ALLIANCE ? $saas_id : $user_id;
  335. if (!$wallet_user_id && $model_val != UserStringCodePlus::MODEL_ALLIANCE) {
  336. $saasUser = SaasUser::findOne($saas_id);
  337. $wallet_user_id = User::findUserByStore($store_id, $saasUser->mobile, $saasUser->name, $saasUser->avatar);
  338. if (!$wallet_user_id) return false;
  339. }
  340. $source_table = $is_scan ? "\app\plugins\scanCodePay\models\Order" : "app\models\Order";
  341. $currency = Currency::findOne(['code' => Currency::CURRENCY_STRING_CODE]);
  342. UserWallet::addLog($currency, $store_id, $wallet_user_id, $money, $log_desc, $log_type, $source_table, $order_id, $store_id, $type);
  343. UserStringCodeOrder::set(
  344. $store_id,
  345. $user_id,
  346. $saas_id,
  347. $is_scan,
  348. $order_id,
  349. $money,
  350. UserStringCodeOrder::STATUS_SUCCESS,
  351. $s_order_log,
  352. $order_no,
  353. $type,
  354. $model_val,
  355. $order->store_id
  356. );
  357. }
  358. return true;
  359. }
  360. public static function goCouponAdd($store_id,$saas_id, $money, $type,$order = null)
  361. {
  362. $order_no = $order ? $order->order_no : "";
  363. $is_scan = $order instanceof ScanOrder ? 1 : 0;
  364. $user = SaasUser::findOne($saas_id);
  365. if (!$user) return true;
  366. $mobile = $user->mobile;
  367. if (!$saas_id) {
  368. $setting = Option::get(OptionSetting::SHARE_STRING_CODE_DEFAULT_SETTING, $store_id, OptionSetting::SHARE_GROUP_NAME, '{}');
  369. $setting = $setting ? Json::decode($setting['value']) : [];
  370. $saas_id = $setting['string_code_transfer_saas_id'] ?? 0;
  371. if (!$saas_id) {
  372. return true;
  373. }
  374. $user = SaasUser::findOne($saas_id);
  375. if (!$user) return true;
  376. $mobile = $user->mobile;
  377. }
  378. $shopCoupon = new GoShopCoupon();
  379. $shopCoupon->order_no = $order_no;
  380. $shopCoupon->phone = $mobile;
  381. $shopCoupon->store_id = $store_id;
  382. $shopCoupon->amount = $money;
  383. $shopCoupon->is_scan = $is_scan;
  384. $shopCoupon->idempotent_type = $type;
  385. $shopCoupon->save();
  386. return true;
  387. }
  388. public static function transferAddUserWalletAndStoreid($order, $saas_id, $money, $type, $model_val, $store_id, $isSurplus = false)
  389. {
  390. $order_id = $order->id;
  391. $order_no = $order->order_no;
  392. $is_scan = $order instanceof ScanOrder ? 1 : 0;
  393. //改为大模型下
  394. // $store_id = $model_val == UserStringCodePlus::MODEL_ALLIANCE ? UserStringCodePlus::ALLIANCE_STORE_ID : $order->store_id;
  395. // $store_id = UserStringCodePlus::ALLIANCE_STORE_ID;
  396. // $user_id = $model_val == UserStringCodePlus::MODEL_ALLIANCE ? 0 : SaasUser::findUserIdByStoreIdAndSaasId($store_id, $saas_id);
  397. $user_id = SaasUser::findUserIdByStoreIdAndSaasId($order->store_id, $saas_id);
  398. $desc = self::TYPE_LIST[$type];
  399. if (!$saas_id) {
  400. //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】,{$desc}分账金额:{$money} 受益人不存在,特殊联盟用户也不存在"], "app_debug.log");
  401. return false;
  402. }
  403. if (bccomp($money, 0, 6) <= 0) {
  404. //debug_log([__METHOD__, __LINE__, "串码让利 【{$model_val}】,{$desc}分账金额:{$money} 有误"], "app_debug.log");
  405. return false;
  406. }
  407. if ($isSurplus) {
  408. $s_order_log = UserStringCodeOrder::TYPE_LIST[$type] . '剩余让利用户';
  409. } else {
  410. $s_order_log = UserStringCodePlus::MODEL_NAME_LIST[$model_val] . " " . UserStringCodeOrder::TYPE_LIST[$type];
  411. }
  412. $award_type = PluginPoolConfig::getAwardType($order->store_id, $is_scan);
  413. if ($award_type == 2) {
  414. SaaSLeaguePriceLog::addLog($saas_id, $order->store_id, $money, UserStringCodeOrder::TYPE_LEAGUE_PRICE[$type], $order_id, $is_scan, 0, $s_order_log);
  415. } else {
  416. UserStringCodeOrder::set(
  417. $store_id,
  418. $user_id,
  419. $saas_id,
  420. $is_scan,
  421. $order_id,
  422. $money,
  423. UserStringCodeOrder::STATUS_SUCCESS,
  424. $s_order_log,
  425. $order_no,
  426. $type,
  427. $model_val,
  428. $order->store_id
  429. );
  430. $wallet_user_id = $model_val == UserStringCodePlus::MODEL_ALLIANCE ? $saas_id : $user_id;
  431. $log_type = $is_scan ? UserWallet::TYPE_SCAN : UserWallet::TYPE_ORDER;
  432. $log_desc = UserWallet::TYPE_NAME_LIST[$log_type] . "【{$order_no}】 发放【{$s_order_log}】红包";
  433. $source_table = $is_scan ? "\app\plugins\scanCodePay\models\Order" : "app\models\Order";
  434. $currency = Currency::findOne(['code' => Currency::CURRENCY_STRING_CODE]);
  435. UserWallet::addLog($currency, $store_id, $wallet_user_id, $money, $log_desc, $log_type, $source_table, $order_id, $store_id, $type);
  436. return true;
  437. }
  438. }
  439. public static function getAwardTypeByKey()
  440. {
  441. $data[0] = '商城转赠';
  442. $data[1] = '平台修改';
  443. $data[2] = '下单返利';
  444. $data[3] = '订单取消退回';
  445. $data[4] = '下单抵扣';
  446. $data[5] = '充值';
  447. $data[6] = '商城提现';
  448. foreach (self::TYPE_LIST as $key => $value) {
  449. $data[self::TYPE_LEAGUE_PRICE[$key]] = $value;
  450. }
  451. return $data;
  452. }
  453. }