StoreSettingController.php 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611
  1. <?php
  2. namespace addons\Mch\backend\controllers;
  3. use addons\Agent\common\models\AgentLevel;
  4. use addons\Boss\common\models\AddonsBossLevel;
  5. use addons\Distribution\common\models\DistributionLevel;
  6. use addons\Mch\common\enums\MchEnum;
  7. use common\enums\AddonsEnum;
  8. use common\enums\StatusEnum;
  9. use common\globals\GlobalInvoke;
  10. use common\models\goods\Goods;
  11. use common\models\mall\MallAddons;
  12. use common\models\user\UserLevel;
  13. class StoreSettingController extends BaseController
  14. {
  15. public function actionIndex()
  16. {
  17. if (!\Yii::$app->request->isAjax) {
  18. return $this->render('/setting/index');
  19. }
  20. $is_install_distribution = MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_DISTRIBUTION);
  21. $is_install_agent = MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_AGENT);
  22. $is_install_boss = MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_BOSS);
  23. $is_install_area = MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_AREA);
  24. if (\Yii::$app->request->isGet) {
  25. $web_url = \Yii::$app->services->setting->mall->get($this->mall_id, 'basic.web_url');
  26. if (empty($web_url)) {
  27. $h5_domain = 'https://h5.qijianshirjcs.com/';
  28. $mall_sign = '';
  29. } else {
  30. $url_info = explode('?', $web_url);
  31. $h5_domain = $url_info[0];
  32. $mall_sign = substr($url_info[1], mb_strlen('sign='));
  33. }
  34. $basic = \Yii::$app->services->setting->addons->get($this->mall_id, MchEnum::ADDONS_NAME, 'basic');
  35. $cashier = \Yii::$app->services->setting->addons->get($this->mall_id, MchEnum::ADDONS_NAME, 'cashier');
  36. $enter = \Yii::$app->services->setting->addons->get($this->mall_id, MchEnum::ADDONS_NAME, 'enter');
  37. $mode = \Yii::$app->services->setting->addons->get($this->mall_id, MchEnum::ADDONS_NAME, 'mode');
  38. if (!empty($enter['goods_ids'])) {
  39. $goods_ids = json_decode($enter['goods_ids'], true);
  40. $goods = Goods::find()
  41. ->select('id,goods_name,cover_pic')
  42. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $goods_ids])
  43. ->asArray()
  44. ->all();
  45. } else {
  46. $goods_ids = $goods = [];
  47. }
  48. if (empty($enter)) {
  49. $enter = null;
  50. } else {
  51. $enter['goods_ids'] = $goods_ids;
  52. $enter['goods_list'] = $goods;
  53. }
  54. if (empty($basic)) {
  55. $basic = null;
  56. } else {
  57. $basic['is_distribution_enable'] = $is_install_distribution;
  58. $basic['is_agent_enable'] = $is_install_agent;
  59. $basic['is_boss_enable'] = $is_install_boss;
  60. $basic['is_area_enable'] = $is_install_area;
  61. }
  62. /* cashier */
  63. /* ---------- 会员等级相关配置处理 start ------ */
  64. $member_levels = UserLevel::find()
  65. ->select('level,name as level_name')
  66. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])
  67. ->asArray()
  68. ->all();
  69. if (empty($member_levels)) {
  70. $member_levels = [];
  71. }
  72. if (!empty($cashier['members'])) {
  73. $setting_members = json_decode($cashier['members'], true);
  74. $mem_levels = array_column($setting_members, 'level');
  75. $mem_level_discount_map = array_column($setting_members, 'discount', 'level');
  76. } else {
  77. $mem_levels = [];
  78. $mem_level_discount_map = [];
  79. }
  80. foreach ($member_levels as &$mlevel) {
  81. if (!in_array($mlevel['level'], $mem_levels)) {
  82. $mlevel['discount'] = 0;
  83. } else {
  84. $mlevel['discount'] = floatval($mem_level_discount_map[$mlevel['level']] ?? 0);
  85. }
  86. }
  87. // dd($member_levels);
  88. /* ---------- 会员等级相关配置处理 end ------ */
  89. /* 模式相关设置 */
  90. /* 分销模式设置 ---- start ------ */
  91. $currency_arr = ['commission' => '佣金', 'score' => '积分'];
  92. $mode['distribution_currency'] = $currency_arr;
  93. $currency = array_keys($currency_arr);
  94. // $addons_currency_arr = GlobalInvoke::exec(GlobalInvoke::INVOKE_COMMISSION_TYPE, $this->mall_id, ['mall_id' => $this->mall_id]);
  95. $addons_currency_arr = [];
  96. $addons_currency = [];
  97. $all_addons_currency = [];
  98. foreach ($addons_currency_arr as $v) {
  99. $mode['distribution_currency'] = array_merge($mode['distribution_currency'], array_column($v, 'label', 'name'));
  100. $temp_currency = array_column($v, 'name');
  101. $currency = array_merge($currency, $temp_currency);
  102. $addons_currency = array_merge($addons_currency, $temp_currency);
  103. $all_addons_currency = array_merge($all_addons_currency, array_column($v, 'label', 'name'));
  104. }
  105. $mode['agent_currency'] = $mode['distribution_currency'];
  106. $mode['is_distribution_enable'] = 0;
  107. if ($is_install_distribution) {
  108. $mode['is_distribution_enable'] = 1;
  109. $distribution_levels = DistributionLevel::find()
  110. ->select('level,name as level_name')
  111. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])
  112. ->asArray()
  113. ->all();
  114. $init_data = ['level' => 0, 'level_name' => '默认等级'];
  115. if (empty($distribution_levels)) {
  116. $distribution_levels = [$init_data];
  117. } else {
  118. array_unshift($distribution_levels, $init_data);
  119. }
  120. if (!empty($mode['Distribution'])) {
  121. // $mode_distribution_settings = json_decode($mode['Distribution'], true);
  122. // $dst_commission_details = $dst_score_details = [];
  123. // foreach ($mode_distribution_settings['commission']['detail'] as $detail) {
  124. // $dst_commission_details[$detail['level']] = $detail;
  125. // }
  126. // foreach ($mode_distribution_settings['score']['detail'] as $detail) {
  127. // $dst_score_details[$detail['level']] = $detail;
  128. // }
  129. // $dst_commission_level_settings = $dst_score_level_settings = [];
  130. // foreach ($distribution_levels as &$dlevel) {
  131. // if (empty($dst_commission_details[$dlevel['level']])) {
  132. // $arr = [
  133. // 'level' => $dlevel['level'],
  134. // 'level_name' => $dlevel['level_name'],
  135. // 'first_prize' => 0,
  136. // 'second_prize' => 0,
  137. // 'third_prize' => 0
  138. // ];
  139. // $dst_commission_level_settings[] = $arr;
  140. // } else {
  141. // $dst_commission_details[$dlevel['level']]['level_name'] = $dlevel['level_name'];
  142. // $dst_commission_level_settings[] = $dst_commission_details[$dlevel['level']];
  143. // }
  144. // if (empty($dst_score_details[$dlevel['level']])) {
  145. // $arr = [
  146. // 'level' => $dlevel['level'],
  147. // 'level_name' => $dlevel['level_name'],
  148. // 'first_prize' => 0,
  149. // 'second_prize' => 0,
  150. // 'third_prize' => 0
  151. // ];
  152. // $dst_score_level_settings[] = $arr;
  153. // } else {
  154. // $dst_score_level_settings[] = $dst_score_details[$dlevel['level']];
  155. // }
  156. // }
  157. // if (!empty($dst_commission_level_settings)) {
  158. // $mode_distribution_settings['commission']['detail'] = $dst_commission_level_settings;
  159. // }
  160. // if (!empty($mode_distribution_settings)) {
  161. // $mode_distribution_settings['score']['detail'] = $dst_score_level_settings;
  162. // }
  163. // $mode['Distribution'] = $mode_distribution_settings;
  164. // $mode['Distribution'] = $this->getAddonsData($mode[AddonsEnum::ADDONS_NAME_DISTRIBUTION] ?? '', $distribution_levels, $currency, AddonsEnum::ADDONS_NAME_DISTRIBUTION, 1, [], ['is_enable' => 0, 'is_percent' => 0]);
  165. } else {
  166. // $mode_distribution_settings = [];
  167. // $mode_distribution_settings['commission'] = ['is_enable' => 0, 'is_percent' => 0];
  168. // $mode_distribution_settings['score'] = ['is_enable' => 0, 'is_percent' => 0];
  169. // foreach ($distribution_levels as $item) {
  170. // $mode_distribution_settings['commission']['detail'][] = [
  171. // "first_prize" => 0,
  172. // "second_prize" => 0,
  173. // "third_prize" => 0,
  174. // "level" => $item['level'],
  175. // "level_name" => $item['level_name'],
  176. // ];
  177. // $mode_distribution_settings['score']['detail'][] = [
  178. // "first_prize" => 0,
  179. // "second_prize" => 0,
  180. // "third_prize" => 0,
  181. // "level" => $item['level'],
  182. // "level_name" => $item['level_name'],
  183. // ];
  184. // }
  185. // $mode['Distribution'] = $mode_distribution_settings;
  186. }
  187. $mode['Distribution'] = $this->getAddonsData($mode[AddonsEnum::ADDONS_NAME_DISTRIBUTION] ?? '', $distribution_levels, $currency, AddonsEnum::ADDONS_NAME_DISTRIBUTION, 1, [], ['is_enable' => 0, 'is_percent' => 0]);
  188. } else {
  189. }
  190. /* 分销模式设置 ---- end ------ */
  191. /* 经销模式设置 ---- start ------ */
  192. $mode['is_agent_enable'] = 0;
  193. if ($is_install_agent) {
  194. $mode['is_agent_enable'] = 1;
  195. $agent_levels = AgentLevel::find()
  196. ->select('level,name as level_name')
  197. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])
  198. ->asArray()
  199. ->all();
  200. if (empty($agent_levels)) {
  201. $agent_levels = [];
  202. }
  203. if (!empty($mode['Agent'])) {
  204. // $mode_agent_settings = json_decode($mode['Agent'], true);
  205. // $ag_commission_details = $ag_score_details = [];
  206. // if (!empty($mode_agent_settings['commission']['detail'])) {
  207. // foreach ($mode_agent_settings['commission']['detail'] as $detail) {
  208. // $ag_commission_details[$detail['level']] = $detail;
  209. // }
  210. // }
  211. // if (!empty($mode_agent_settings['score']['detail'])) {
  212. // foreach ($mode_agent_settings['score']['detail'] as $detail) {
  213. // $ag_score_details[$detail['level']] = $detail;
  214. // }
  215. // }
  216. // $ag_commission_level_settings = $ag_score_level_settings = [];
  217. // foreach ($agent_levels as &$alevel) {
  218. // if (empty($ag_commission_details[$alevel['level']])) {
  219. // $arr = [
  220. // 'level' => $alevel['level'],
  221. // 'level_name' => $alevel['level_name'],
  222. // 'agent_team_prize' => 0,
  223. // 'agent_equal_prize' => 0,
  224. // 'agent_over_prize' => 0,
  225. // 'agent_extra_prize' => 0,
  226. // ];
  227. // $ag_commission_level_settings[] = $arr;
  228. // } else {
  229. // $ag_commission_details[$alevel['level']]['level_name'] = $alevel['level_name'];
  230. // $ag_commission_level_settings[] = $ag_commission_details[$alevel['level']];
  231. // }
  232. // if (empty($ag_score_details[$alevel['level']])) {
  233. // $arr = [
  234. // 'level' => $alevel['level'],
  235. // 'level_name' => $alevel['level_name'],
  236. // 'agent_team_prize' => 0,
  237. // 'agent_equal_prize' => 0,
  238. // 'agent_over_prize' => 0,
  239. // 'agent_extra_prize' => 0,
  240. // ];
  241. // $ag_score_level_settings[] = $arr;
  242. // } else {
  243. // $ag_score_level_settings[] = $ag_score_details[$alevel['level']];
  244. // }
  245. // }
  246. // if (!empty($ag_commission_level_settings)) {
  247. // $mode_agent_settings['commission']['detail'] = $ag_commission_level_settings;
  248. // }
  249. // if (!empty($mode_agent_settings)) {
  250. // $mode_agent_settings['score']['detail'] = $ag_score_level_settings;
  251. // }
  252. // $mode['Agent'] = $mode_agent_settings;
  253. } else {
  254. // $mode_agent_settings = [];
  255. // $mode_agent_settings['commission'] = [
  256. // "is_enable" => 1,
  257. // "is_percent_equal" => 0,
  258. // "is_percent_extra" => 0,
  259. // "is_percent_over" => 0,
  260. // "is_percent_team" => 0,
  261. // ];
  262. // $mode_agent_settings['score'] = [
  263. // "is_enable" => 1,
  264. // "is_percent_equal" => 0,
  265. // "is_percent_extra" => 0,
  266. // "is_percent_over" => 0,
  267. // "is_percent_team" => 0,
  268. // ];
  269. // foreach ($agent_levels as $item) {
  270. // $mode_agent_settings['commission']['detail'][] = [
  271. // "agent_equal_prize" => 0,
  272. // "agent_extra_prize" => 0,
  273. // "agent_over_prize" => 0,
  274. // "agent_team_prize" => 0,
  275. // "level" => $item['level'],
  276. // "level_name" => $item['level_name'],
  277. // ];
  278. // $mode_agent_settings['score']['detail'][] = [
  279. // "agent_equal_prize" => 0,
  280. // "agent_extra_prize" => 0,
  281. // "agent_over_prize" => 0,
  282. // "agent_team_prize" => 0,
  283. // "level" => $item['level'],
  284. // "level_name" => $item['level_name'],
  285. // ];
  286. // }
  287. // $mode['Agent'] = $mode_agent_settings;
  288. }
  289. $mode['Agent'] = $this->getAddonsData($mode[AddonsEnum::ADDONS_NAME_AGENT] ?? '', $agent_levels, $currency, AddonsEnum::ADDONS_NAME_AGENT, 1, [], ['remaining_ratio' => 0, 'is_enable' => 0, 'is_percent_over' => 0, 'is_percent_equal' => 0, 'is_percent_team' => 0, 'is_percent_extra' => 0]);
  290. } else {
  291. }
  292. /* 经销模式设置 ---- end ------ */
  293. /* 股东分红模式设置 ---- start ------ */
  294. $area_currency_arr = ['detail' => '佣金'];
  295. $mode['area_currency'] = array_merge($area_currency_arr, $all_addons_currency);
  296. $area_currency = array_keys($area_currency_arr);
  297. $area_currency = array_merge($area_currency, $addons_currency);
  298. if ($is_install_area) {
  299. $mode['is_area_enable'] = 1;
  300. $area_levels = [
  301. 6 => ['level' => 6, 'level_name' => '大区代'],
  302. 1 => ['level' => 1, 'level_name' => '省代'],
  303. 2 => ['level' => 2, 'level_name' => '市代'],
  304. 3 => ['level' => 3, 'level_name' => '区代'],
  305. 4 => ['level' => 4, 'level_name' => '镇代'],
  306. 5 => ['level' => 5, 'level_name' => '小区代']
  307. ];
  308. if (!empty($mode['Area'])) {
  309. // $mode_area_settings = json_decode($mode['Area'], true);
  310. // $area_details = [];
  311. // foreach ($mode_area_settings['detail'] as $detail) {
  312. // $area_details[$detail['level']] = $detail;
  313. // }
  314. // $area_level_settings = [];
  315. // foreach ($area_levels as $arlevel) {
  316. // if (empty($area_details[$arlevel['level']])) {
  317. // $arr = [
  318. // 'level' => $arlevel['level'],
  319. // 'level_name' => $arlevel['level_name'],
  320. // 'prize' => 0,
  321. // 'equal_prize' => 0,
  322. // ];
  323. // $area_level_settings[] = $arr;
  324. // } else {
  325. // $area_details[$arlevel['level']]['level_name'] = $arlevel['level_name'];
  326. // $area_level_settings[] = $area_details[$arlevel['level']];
  327. // }
  328. // }
  329. // if (!empty($area_level_settings)) {
  330. // $mode_area_settings['detail'] = $area_level_settings;
  331. // }
  332. // $mode['Area'] = $mode_area_settings;
  333. } else {
  334. // $area_level_settings = [];
  335. // foreach ($area_levels as $arlevel) {
  336. // $arr = [
  337. // 'level' => $arlevel['level'],
  338. // 'level_name' => $arlevel['level_name'],
  339. // 'prize' => 0,
  340. // 'equal_prize' => 0,
  341. // ];
  342. // $area_level_settings[] = $arr;
  343. // }
  344. // $mode['Area'] = [
  345. // 'is_enable' => 0,
  346. // 'is_extra' => 0,
  347. // 'detail' => $area_level_settings,
  348. // ];
  349. }
  350. $mode['Area'] = $this->getAddonsData($mode[AddonsEnum::ADDONS_NAME_AREA] ?? '', $area_levels, $area_currency, AddonsEnum::ADDONS_NAME_AREA, 0, ['remaining_ratio']);
  351. } else {
  352. $mode['is_area_enable'] = 0;
  353. $mode['Area'] = [];
  354. }
  355. $boss_currency_arr = ['commission' => '佣金', 'digital' => '数字币'];
  356. $mode['boss_currency'] = array_merge($boss_currency_arr, $all_addons_currency);
  357. $boss_currency = array_keys($boss_currency_arr);
  358. $boss_currency = array_merge($boss_currency, $addons_currency);
  359. if ($is_install_boss) {
  360. $mode['is_boss_enable'] = 1;
  361. $boss_levels = AddonsBossLevel::find()
  362. ->select('level,name as level_name')
  363. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])
  364. ->orderBy('level asc')
  365. ->asArray()
  366. ->all() ?: [];
  367. $mode['Boss'] = $this->getAddonsData($mode[AddonsEnum::ADDONS_NAME_BOSS] ?? '', $boss_levels, $boss_currency, AddonsEnum::ADDONS_NAME_BOSS, 1);
  368. } else {
  369. $mode['is_boss_enable'] = 0;
  370. $mode['Boss'] = [];
  371. }
  372. //货款设置
  373. $basic['payment_settle_info'] = json_decode($basic['payment_settle_info'],true) ?? [];
  374. $basic['payment_settle'] = array_column($basic['payment_settle_info'],'type');
  375. $payment_settle_info = [
  376. ['type' => 'settle_judge_yes','value' => 0],
  377. ['type' => 'settle_judge_no','value' => 0]
  378. ];
  379. if(!empty($payment_settle_info) && !empty($basic['payment_settle_info'])){
  380. foreach($payment_settle_info as &$info){
  381. foreach($basic['payment_settle_info'] as $item){
  382. if($item['type'] == $info['type']){
  383. $info['value'] = $item['value'];
  384. }
  385. }
  386. }
  387. }
  388. $basic['payment_settle_info'] = $payment_settle_info;
  389. $settings = [
  390. 'basic' => $basic,
  391. 'cashier' => $cashier,
  392. 'enter' => $enter,
  393. 'mode' => $mode,
  394. ];
  395. $group = \Yii::$app->request->get('group');
  396. if (!empty($group)) {
  397. $settings = $settings[$group] ?? [];
  398. }
  399. $settings['h5_domain'] = $h5_domain;
  400. $settings['mall_sign'] = $mall_sign;
  401. $settings['basic']['o2o_url'] = 'plugins/Mch/store/storeindex';
  402. return $this->success('success', $settings);
  403. } else {
  404. $post = \Yii::$app->request->post();
  405. // dd($post);
  406. $group = $post['group'] ?? '';
  407. unset($post['_csrf'], $post['group']);
  408. if (empty($group)) {
  409. return $this->error('参数错误');
  410. }
  411. $rules = [
  412. 'basic' => [
  413. [['o2o_url', 'goods_auth', 'service_fee', 'settle_type', 'platform_ratio', 'risk_management', 'risk_management_ratio', 'settle_scene', 'store_distribution_status', 'store_agent_status', 'store_area_status', 'store_boss_status'], 'required'],
  414. [['o2o_url'], 'string', 'max' => 255],
  415. [['goods_auth', 'settle_type', 'risk_management', 'settle_scene', 'store_distribution_status', 'store_agent_status', 'store_area_status', 'store_boss_status'], 'integer'],
  416. [['service_fee', 'platform_ratio', 'risk_management_ratio'], 'number', 'min' => 0, 'max' => 100, 'message' => '比例取值在 0 ~ 100 之间'],
  417. [['payment_settle_info','payment_settle','balance_cash_service_fee'],'safe'],
  418. ],
  419. 'cashier' => [
  420. [['service_fee_ratio', 'member_status', 'members', 'is_distribution', 'distribution_settingRecruit s', 'is_agent', 'agent_settings'], 'required'],
  421. [['member_status', 'is_distribution', 'is_agent'], 'integer'],
  422. [['service_fee_ratio'], 'number', 'min' => 0, 'max' => 100, 'message' => '比例取值在 0 ~ 100 之间'],
  423. ],
  424. 'enter' => [
  425. [[
  426. 'is_enable', 'time_status', 'expired_days', 'store_audit', 'upload_license_image', 'mode',
  427. // 'recruit_title', 'recruit_content',
  428. // 'recruit_btn_text', 'dow_center_agreement', 'goods_ids'
  429. ], 'required'],
  430. [['is_enable', 'time_status', 'expired_days', 'store_audit', 'upload_license_image', 'mode'], 'integer'],
  431. [['recruit_title', 'recruit_content', 'recruit_btn_text', 'dow_center_agreement'], 'string'],
  432. [['goods_ids'], 'safe'],
  433. ],
  434. 'mode' => [
  435. [['is_enable_mode'], 'required'],
  436. [['is_enable_mode', 'enable_agent_goods_deduct'], 'integer'],
  437. [['Distribution', 'Agent', 'Area', 'Boss'], 'safe'],
  438. ],
  439. ];
  440. $res = \Yii::$app->services->validate->validate($post[$group], $rules[$group]);
  441. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  442. if ('basic' == $group) {
  443. $post[$group]['o2o_url'] = trim($post[$group]['o2o_url']);
  444. $post[$group]['o2o_url'] = trim($post[$group]['o2o_url']);
  445. if (!empty($post[$group]['payment_settle'])) {
  446. foreach($post[$group]['payment_settle_info'] as $key => $item){
  447. if(!in_array($item['type'],$post[$group]['payment_settle'])){
  448. unset($post[$group]['payment_settle_info'][$key]);
  449. }
  450. }
  451. }else{
  452. $post[$group]['payment_settle_info'] = [];
  453. }
  454. unset($post[$group]['payment_settle']);
  455. } elseif ('enter' == $group) {
  456. if (empty($post[$group]['goods_ids'])) {
  457. $post[$group]['goods_ids'] = '';
  458. } else {
  459. $post[$group]['goods_ids'] = json_encode($post[$group]['goods_ids']);
  460. }
  461. }
  462. // dd($post);
  463. \Yii::$app->services->setting->addons->set($this->mall_id, MchEnum::ADDONS_NAME, $post);
  464. return $this->success('保存成功');
  465. }
  466. }
  467. /**
  468. * @Description: 处理插件模式数据
  469. * @Author: qi
  470. * @DateTime 2022-11-10 09:59:45
  471. * @param string $init_data
  472. * @param array $level_data
  473. * @param array $currencys
  474. * @param string $addons_name
  475. * @param integer $level
  476. * @param array $append_fields
  477. * @param array $base_fields
  478. * @return array
  479. */
  480. protected function getAddonsData($init_data, $level_data, $currencys, $addons_name, $level = 1, $append_fields = [], $base_fields = [])
  481. {
  482. $settings = [];
  483. $container_arr = [];
  484. if (!empty($init_data)) {
  485. // 已存储的数据
  486. $settings = json_decode($init_data, true);
  487. if($currencys){
  488. foreach ($currencys as $currency) {
  489. if (!isset($settings[$currency])) continue;
  490. $currency_detail = $level == 1 ? $settings[$currency]['detail'] : $settings[$currency];
  491. if(!$currency_detail) continue;
  492. foreach ($currency_detail as $detail) {
  493. // 币种对应的等级数据
  494. if (!isset($detail['level'])) {
  495. continue;
  496. }
  497. $container_arr[$currency . '_' . $detail['level']] = $detail;
  498. }
  499. }
  500. }
  501. } else {
  502. foreach ($currencys as $currency) {
  503. $settings[$currency]['is_enable'] = 0;
  504. }
  505. }
  506. $method_name = 'get' . $addons_name . 'InitData';
  507. foreach ($currencys as $item) {
  508. $level_settings = [];
  509. // 不存在该等级数据就初始化,存在该等级则更新等级名称
  510. foreach ($level_data as $dlevel) {
  511. if (!isset($container_arr[$item . '_' . $dlevel['level']])) {
  512. $arr = [
  513. 'level' => $dlevel['level'],
  514. 'level_name' => $dlevel['level_name'],
  515. ];
  516. $arr = array_merge($arr, $this->$method_name());
  517. $level_settings[] = $arr;
  518. } else {
  519. // 更新对应等级名称
  520. $container_arr[$item . '_' . $dlevel['level']]['level_name'] = $dlevel['level_name'];
  521. $level_settings[] = $container_arr[$item . '_' . $dlevel['level']];
  522. }
  523. }
  524. if (!empty($level_settings)) {
  525. if (!isset($settings[$item])) {
  526. $settings[$item] = $base_fields;
  527. }
  528. if ($level == 1) {
  529. $settings[$item]['detail'] = $level_settings;
  530. } else {
  531. $settings[$item] = $level_settings;
  532. }
  533. }
  534. }
  535. foreach ($currencys as $v) {
  536. foreach ($append_fields as $field) {
  537. if (isset($settings[$v . '_' . $field])) continue;
  538. $settings[$v . '_' . $field] = 0;
  539. }
  540. }
  541. unset($container_arr);
  542. return $settings;
  543. }
  544. protected function getDistributionInitData()
  545. {
  546. return [
  547. 'first_prize' => 0,
  548. 'second_prize' => 0,
  549. 'third_prize' => 0,
  550. 'is_percent' => 0,
  551. 'remaining_ratio' => 0
  552. ];
  553. }
  554. protected function getAgentInitData()
  555. {
  556. return [
  557. 'agent_team_prize' => 0,
  558. 'agent_equal_prize' => 0,
  559. 'agent_over_prize' => 0,
  560. 'agent_extra_prize' => 0,
  561. ];
  562. }
  563. protected function getAreaInitData()
  564. {
  565. return [
  566. 'prize' => 0,
  567. 'equal_prize' => 0,
  568. ];
  569. }
  570. protected function getBossInitData()
  571. {
  572. return [
  573. 'prize' => 0,
  574. 'is_extra' => 0,
  575. 'extra_prize' => 0
  576. ];
  577. }
  578. }