StoreSettingController_Copy.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487
  1. <?php
  2. namespace addons\Store\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\Store\common\enums\StoreEnum;
  7. use common\enums\AddonsEnum;
  8. use common\enums\StatusEnum;
  9. use common\models\goods\Goods;
  10. use common\models\mall\MallAddons;
  11. use common\models\user\UserLevel;
  12. class StoreSettingController extends BaseController
  13. {
  14. public function actionIndex()
  15. {
  16. if (!\Yii::$app->request->isAjax) {
  17. return $this->render('/setting/index');
  18. }
  19. $is_install_distribution = MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_DISTRIBUTION);
  20. $is_install_agent = MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_AGENT);
  21. $is_install_boss = MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_BOSS);
  22. $is_install_area = MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_AREA);
  23. if (\Yii::$app->request->isGet) {
  24. $web_url = \Yii::$app->services->setting->mall->get($this->mall_id, 'basic.web_url');
  25. if (empty($web_url)) {
  26. $h5_domain = 'https://h5.qijianshirjcs.com/';
  27. $mall_sign = '';
  28. } else {
  29. $url_info = explode('?', $web_url);
  30. $h5_domain = $url_info[0];
  31. $mall_sign = substr($url_info[1], mb_strlen('sign='));
  32. }
  33. $basic = \Yii::$app->services->setting->addons->get($this->mall_id, StoreEnum::ADDONS_NAME, 'basic');
  34. $cashier = \Yii::$app->services->setting->addons->get($this->mall_id, StoreEnum::ADDONS_NAME, 'cashier');
  35. $enter = \Yii::$app->services->setting->addons->get($this->mall_id, StoreEnum::ADDONS_NAME, 'enter');
  36. $mode = \Yii::$app->services->setting->addons->get($this->mall_id, StoreEnum::ADDONS_NAME, 'mode');
  37. if (!empty($enter['goods_ids'])) {
  38. $goods_ids = json_decode($enter['goods_ids'], true);
  39. $goods = Goods::find()
  40. ->select('id,goods_name,cover_pic')
  41. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $goods_ids])
  42. ->asArray()
  43. ->all();
  44. } else {
  45. $goods_ids = $goods = [];
  46. }
  47. if (empty($enter)) {
  48. $enter = null;
  49. } else {
  50. $enter['goods_ids'] = $goods_ids;
  51. $enter['goods_list'] = $goods;
  52. }
  53. if (empty($basic)) {
  54. $basic = [
  55. 'is_distribution_enable' => $is_install_distribution,
  56. 'is_agent_enable' => $is_install_agent,
  57. 'is_boss_enable' => $is_install_boss,
  58. 'is_area_enable' => $is_install_area,
  59. 'is_basic_null' => true,
  60. ];
  61. } else {
  62. $basic['is_distribution_enable'] = $is_install_distribution;
  63. $basic['is_agent_enable'] = $is_install_agent;
  64. $basic['is_boss_enable'] = $is_install_boss;
  65. $basic['is_area_enable'] = $is_install_area;
  66. }
  67. /* cashier */
  68. /* ---------- 会员等级相关配置处理 start ------ */
  69. $member_levels = UserLevel::find()
  70. ->select('level,name as level_name')
  71. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])
  72. ->asArray()
  73. ->all();
  74. if (empty($member_levels)) {
  75. $member_levels = [
  76. // ['level' => 0, 'level_name' => '默认等级'],
  77. ];
  78. }
  79. if (!empty($cashier['members'])) {
  80. $setting_members = json_decode($cashier['members'], true);
  81. $mem_levels = array_column($setting_members, 'level');
  82. $mem_level_discount_map = array_column($setting_members, 'discount', 'level');
  83. } else {
  84. $mem_levels = [];
  85. $mem_level_discount_map = [];
  86. }
  87. foreach ($member_levels as &$mlevel) {
  88. if (!in_array($mlevel['level'], $mem_levels)) {
  89. $mlevel['discount'] = 0;
  90. } else {
  91. $mlevel['discount'] = floatval($mem_level_discount_map[$mlevel['level']] ?? 0);
  92. }
  93. }
  94. // dd($member_levels);
  95. /* ---------- 会员等级相关配置处理 end ------ */
  96. /* ---------- 分销等级相关配置处理 start ------ */
  97. if (!$is_install_distribution) {
  98. $distribution_settings = [
  99. // ['level' => 0, 'level_name' => '默认等级', 'name' => '佣金', 'commission_rate' => [0, 0]],
  100. ];
  101. $is_distribution_enable = 0;
  102. } else {
  103. $is_distribution_enable = 1;
  104. $distribution_levels = DistributionLevel::find()
  105. ->select('level,name as level_name')
  106. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])
  107. ->asArray()
  108. ->all();
  109. $init_data = ['level'=>0,'level_name'=>'默认等级'];
  110. if (empty($distribution_levels)) {
  111. $distribution_levels = [$init_data,];
  112. }else{
  113. array_unshift($distribution_levels,$init_data);
  114. }
  115. if (!empty($cashier['distribution_settings'])) {
  116. $distribution_settings = json_decode($cashier['distribution_settings'], true);
  117. $distr_levels = array_column($distribution_settings, 'level');
  118. $distr_level_discount_map = array_column($distribution_settings, 'commission_rate', 'level');
  119. } else {
  120. $distr_levels = $distr_level_discount_map = [];
  121. }
  122. foreach ($distribution_levels as &$dlevel) {
  123. if (!in_array($dlevel['level'], $distr_levels)) {
  124. $dlevel['commission_rate'] = [0, 0];
  125. } else {
  126. $dlevel['commission_rate'] = $distr_level_discount_map[$dlevel['level']] ?? [0, 0];
  127. }
  128. }
  129. $distribution_settings = $distribution_levels;
  130. }
  131. /* ---------- 分销等级相关配置处理 end ------ */
  132. /* ---------- 经销等级相关配置处理 start ------ */
  133. if (!$is_install_agent) {
  134. $agent_settings = [
  135. 'team_rewards' => [
  136. // ['level' => 0, 'level_name' => '默认等级', 'commission_rate' => 0],
  137. ],
  138. 'equal_rewards' => [
  139. // ['level' => 0, 'level_name' => '默认等级', 'commission_rate' => 0],
  140. ],
  141. 'over_rewards' => [
  142. // ['level' => 0, 'level_name' => '默认等级', 'commission_rate' => 0],
  143. ],
  144. ];
  145. $is_agent_enable = 0;
  146. } else {
  147. $is_agent_enable = 1;
  148. $agent_levels = AgentLevel::find()
  149. ->select('level,name as level_name')
  150. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])
  151. ->asArray()
  152. ->all();
  153. if (empty($agent_levels)) {
  154. $agent_levels = [
  155. // ['level' => 0, 'level_name' => '默认等级'],
  156. ];
  157. }
  158. if (!empty($cashier['agent_settings'])) {
  159. $agent_settings = json_decode($cashier['agent_settings'], true);
  160. } else {
  161. $agent_settings = [
  162. 'team_rewards' => [
  163. // ['level' => 0, 'level_name' => '默认等级', 'commission_rate' => 0],
  164. ],
  165. 'equal_rewards' => [
  166. // ['level' => 0, 'level_name' => '默认等级', 'commission_rate' => 0],
  167. ],
  168. 'over_rewards' => [
  169. // ['level' => 0, 'level_name' => '默认等级', 'commission_rate' => 0],
  170. ],
  171. ];
  172. }
  173. foreach ($agent_settings as $reward_name => $setting) {
  174. foreach ($setting as $val) {
  175. $agent_settings[$reward_name][$val['level']] = $val;
  176. }
  177. }
  178. $ag_levels = array_column($agent_settings['team_rewards'], 'level');
  179. $agent_level_settings = [];
  180. foreach ($agent_levels as $alevel) {
  181. if (!in_array($alevel['level'], $ag_levels)) {
  182. $arr = $alevel;
  183. $arr['commission_rate'] = 0;
  184. $agent_level_settings['team_rewards'][] = $arr;
  185. $agent_level_settings['equal_rewards'][] = $arr;
  186. $agent_level_settings['over_rewards'][] = $arr;
  187. } else {
  188. $arr = [
  189. 'level' => $alevel['level'],
  190. 'level_name' => $alevel['level_name'],
  191. 'commission_rate' => $agent_settings['team_rewards'][$alevel['level']]['commission_rate'] ?? 0,
  192. ];
  193. $agent_level_settings['team_rewards'][] = $arr;
  194. $arr['commission_rate'] = $agent_settings['equal_rewards'][$alevel['level']]['commission_rate'] ?? 0;
  195. $agent_level_settings['equal_rewards'][] = $arr;
  196. $arr['commission_rate'] = $agent_settings['over_rewards'][$alevel['level']]['commission_rate'] ?? 0;
  197. $agent_level_settings['over_rewards'][] = $arr;
  198. }
  199. }
  200. $agent_settings = $agent_level_settings;
  201. /* ---------- 经销等级相关配置处理 end ------ */
  202. }
  203. if (empty($cashier)) {
  204. $cashier = [
  205. 'service_fee_ratio' => 0,
  206. 'member_status' => 0,
  207. 'is_distribution' => 0,
  208. 'is_agent' => 0,
  209. ];
  210. }
  211. $cashier['deepNames'] = ['一级分销', '二级分销'];
  212. $cashier['members'] = $member_levels;
  213. $cashier['distribution_settings'] = $distribution_settings;
  214. $cashier['is_distribution_enable'] = $is_distribution_enable;
  215. $cashier['agent_settings'] = $agent_settings;
  216. $cashier['is_agent_enable'] = $is_agent_enable;
  217. /* 模式相关设置 */
  218. /* 分销模式设置 ---- start ------ */
  219. // dd($mode);
  220. $mode['is_distribution_enable'] = $is_distribution_enable;
  221. if ($is_install_distribution) {
  222. $dst_commission_details = $dst_score_details = [];
  223. if (!empty($mode['Distribution'])) {
  224. $mode_distribution_settings = json_decode($mode['Distribution'], true);
  225. foreach ($mode_distribution_settings['commission']['detail'] as $detail) {
  226. $dst_commission_details[$detail['level']] = $detail;
  227. }
  228. foreach ($mode_distribution_settings['score']['detail'] as $detail) {
  229. $dst_score_details[$detail['level']] = $detail;
  230. }
  231. }
  232. // dd($dst_commission_details, $dst_score_details, $distribution_levels);
  233. $dst_commission_level_settings = $dst_score_level_settings = [];
  234. foreach ($distribution_levels as &$dlevel) {
  235. if (empty($dst_commission_details[$dlevel['level']])) {
  236. $arr = [
  237. 'level' => $dlevel['level'],
  238. 'level_name' => $dlevel['level_name'],
  239. 'first_prize' => 0,
  240. 'second_prize' => 0,
  241. 'third_prize' => 0
  242. ];
  243. $dst_commission_level_settings[] = $arr;
  244. } else {
  245. $dst_commission_details[$dlevel['level']]['level_name'] = $dlevel['level_name'];
  246. $dst_commission_level_settings[] = $dst_commission_details[$dlevel['level']];
  247. }
  248. if (empty($dst_score_details[$dlevel['level']])) {
  249. $arr = [
  250. 'level' => $dlevel['level'],
  251. 'level_name' => $dlevel['level_name'],
  252. 'first_prize' => 0,
  253. 'second_prize' => 0,
  254. 'third_prize' => 0
  255. ];
  256. $dst_score_level_settings[] = $arr;
  257. } else {
  258. $dst_score_level_settings[] = $dst_score_details[$dlevel['level']];
  259. }
  260. }
  261. if (!empty($dst_commission_level_settings)) {
  262. $mode_distribution_settings['commission']['detail'] = $dst_commission_level_settings;
  263. }
  264. if (!empty($dst_score_level_settings)) {
  265. $mode_distribution_settings['score']['detail'] = $dst_score_level_settings;
  266. }
  267. $mode['Distribution'] = $mode_distribution_settings;
  268. } else {
  269. $mode['Distribution'] = null;
  270. }
  271. /* 分销模式设置 ---- end ------ */
  272. /* 经销模式设置 ---- start ------ */
  273. $mode['is_agent_enable'] = $is_agent_enable;
  274. if ($is_install_agent) {
  275. $ag_commission_details = $ag_score_details = [];
  276. if (!empty($mode['Agent'])) {
  277. $mode_agent_settings = json_decode($mode['Agent'], true);
  278. foreach ($mode_agent_settings['commission']['detail'] as $detail) {
  279. $ag_commission_details[$detail['level']] = $detail;
  280. }
  281. foreach ($mode_agent_settings['score']['detail'] as $detail) {
  282. $ag_score_details[$detail['level']] = $detail;
  283. }
  284. }
  285. $ag_commission_level_settings = $ag_score_level_settings = [];
  286. foreach ($agent_levels as &$alevel) {
  287. if (empty($ag_commission_details[$alevel['level']])) {
  288. $arr = [
  289. 'level' => $alevel['level'],
  290. 'level_name' => $alevel['level_name'],
  291. 'agent_team_prize' => 0,
  292. 'agent_equal_prize' => 0,
  293. 'agent_over_prize' => 0,
  294. 'agent_extra_prize' => 0,
  295. ];
  296. $ag_commission_level_settings[] = $arr;
  297. } else {
  298. $ag_commission_details[$alevel['level']]['level_name'] = $alevel['level_name'];
  299. $ag_commission_level_settings[] = $ag_commission_details[$alevel['level']];
  300. }
  301. if (empty($ag_score_details[$alevel['level']])) {
  302. $arr = [
  303. 'level' => $alevel['level'],
  304. 'level_name' => $alevel['level_name'],
  305. 'agent_team_prize' => 0,
  306. 'agent_equal_prize' => 0,
  307. 'agent_over_prize' => 0,
  308. 'agent_extra_prize' => 0,
  309. ];
  310. $ag_score_level_settings[] = $arr;
  311. } else {
  312. $ag_score_details[$alevel['level']]['level_name'] = $alevel['level_name'];
  313. $ag_score_level_settings[] = $ag_score_details[$alevel['level']];
  314. }
  315. }
  316. if (!empty($ag_commission_level_settings)) {
  317. $mode_agent_settings['commission']['detail'] = $ag_commission_level_settings;
  318. }
  319. if (!empty($ag_score_level_settings)) {
  320. $mode_agent_settings['score']['detail'] = $ag_score_level_settings;
  321. }
  322. $mode['Agent'] = $mode_agent_settings;
  323. } else {
  324. $mode['Agent'] = null;
  325. }
  326. /* 经销模式设置 ---- end ------ */
  327. /* 股东分红模式设置 ---- start ------ */
  328. if ($is_install_boss) {
  329. $mode['is_boss_enable'] = 1;
  330. $bs_details = [];
  331. if (!empty($mode['Boss'])) {
  332. $mode_boss_settings = json_decode($mode['Boss'], true);
  333. if(!empty($mode_boss_settings['detail'])){
  334. foreach ($mode_boss_settings['detail'] as $detail) {
  335. $bs_details[$detail['level']] = $detail;
  336. }
  337. }
  338. }
  339. $boss_levels = AddonsBossLevel::find()
  340. ->select('level,name as level_name')
  341. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])
  342. ->asArray()
  343. ->all();
  344. $bs_level_settings = [];
  345. foreach ($boss_levels as $blevel) {
  346. if (empty($bs_details[$blevel['level']])) {
  347. $arr = [
  348. 'level' => $blevel['level'],
  349. 'level_name' => $blevel['level_name'],
  350. 'prize' => 0,
  351. 'extra_prize' => 0,
  352. ];
  353. $bs_level_settings[] = $arr;
  354. } else {
  355. $bs_details[$blevel['level']]['level_name'] = $blevel['level_name'];
  356. $bs_level_settings[] = $bs_details[$blevel['level']];
  357. }
  358. }
  359. if (!empty($bs_level_settings)) {
  360. $mode_boss_settings['detail'] = $bs_level_settings;
  361. }
  362. $mode['Boss'] = $mode_boss_settings;
  363. } else {
  364. $mode['is_boss_enable'] = 0;
  365. $mode['Boss'] = null;
  366. }
  367. /* 股东分红模式设置 ---- end ------ */
  368. /* 区域分红模式设置 ---- start ------ */
  369. if ($is_install_area) {
  370. $mode['is_area_enable'] = 1;
  371. $area_details = [];
  372. if (!empty($mode['Area'])) {
  373. $mode_area_settings = json_decode($mode['Area'], true);
  374. foreach ($mode_area_settings['detail'] as $detail) {
  375. $area_details[$detail['level']] = $detail;
  376. }
  377. }
  378. $area_levels = [
  379. 1 => ['level' => 1, 'level_name' => '省代'],
  380. 2 => ['level' => 2, 'level_name' => '市代'],
  381. 3 => ['level' => 3, 'level_name' => '区代'],
  382. 4 => ['level' => 4, 'level_name' => '镇代'],
  383. ];
  384. $area_level_settings = [];
  385. foreach ($area_levels as $arlevel) {
  386. if (empty($area_details[$arlevel['level']])) {
  387. $arr = [
  388. 'level' => $arlevel['level'],
  389. 'level_name' => $arlevel['level_name'],
  390. 'prize' => 0,
  391. 'equal_prize' => 0,
  392. ];
  393. $area_level_settings[] = $arr;
  394. } else {
  395. $area_details[$arlevel['level']]['level_name'] = $arlevel['level_name'];
  396. $area_level_settings[] = $area_details[$arlevel['level']];
  397. }
  398. }
  399. if (!empty($area_level_settings)) {
  400. $mode_area_settings['detail'] = $area_level_settings;
  401. }
  402. $mode['Area'] = $mode_area_settings;
  403. } else {
  404. $mode['is_area_enable'] = 0;
  405. $mode['Area'] = null;
  406. }
  407. /* 股东分红模式设置 ---- end ------ */
  408. // dd($mode);
  409. $settings = [
  410. 'basic' => $basic,
  411. 'cashier' => $cashier,
  412. 'enter' => $enter,
  413. 'mode' => $mode,
  414. ];
  415. $group = \Yii::$app->request->get('group');
  416. if (!empty($group)) {
  417. $settings = $settings[$group] ?? [];
  418. }
  419. $settings['h5_domain'] = $h5_domain;
  420. $settings['mall_sign'] = $mall_sign;
  421. return $this->success('success', $settings);
  422. } else {
  423. $post = \Yii::$app->request->post();
  424. // dd($post);
  425. $group = $post['group'] ?? '';
  426. unset($post['_csrf'], $post['group']);
  427. if (empty($group)) {
  428. return $this->error('参数错误');
  429. }
  430. $rules = [
  431. 'basic' => [
  432. [['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'],
  433. [['o2o_url'], 'string', 'max' => 255],
  434. [['goods_auth', 'settle_type', 'risk_management', 'settle_scene', 'store_distribution_status', 'store_agent_status', 'store_area_status', 'store_boss_status'], 'integer'],
  435. [['service_fee', 'platform_ratio', 'risk_management_ratio'], 'number', 'min' => 0, 'max' => 100, 'message' => '比例取值在 0 ~ 100 之间'],
  436. ],
  437. 'cashier' => [
  438. [['service_fee_ratio', 'member_status', 'members', 'is_distribution', 'distribution_settings', 'is_agent', 'agent_settings'], 'required'],
  439. [['member_status', 'is_distribution', 'is_agent'], 'integer'],
  440. [['service_fee_ratio'], 'number', 'min' => 0, 'max' => 100, 'message' => '比例取值在 0 ~ 100 之间'],
  441. ],
  442. 'enter' => [
  443. [['is_enable', 'time_status', 'expired_days', 'store_audit', 'upload_license_image', 'mode'], 'required'],
  444. [['is_enable', 'time_status', 'expired_days', 'store_audit', 'upload_license_image', 'mode'], 'integer'],
  445. [['recruit_title', 'recruit_content', 'recruit_btn_text', 'dow_center_agreement'], 'string'],
  446. ['goods_ids', 'safe'],
  447. ],
  448. 'mode' => [
  449. [['is_enable_mode'], 'required'],
  450. ['is_enable_mode', 'integer'],
  451. [['Distribution', 'Agent', 'Boss','Area'], 'safe'],
  452. ],
  453. ];
  454. $res = \Yii::$app->services->validate->validate($post[$group], $rules[$group]);
  455. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  456. if ('basic' == $group) {
  457. $post[$group]['o2o_url'] = trim($post[$group]['o2o_url']);
  458. } elseif ('enter' == $group) {
  459. if (empty($post[$group]['goods_ids'])) {
  460. $post[$group]['goods_ids'] = '';
  461. } else {
  462. $post[$group]['goods_ids'] = json_encode($post[$group]['goods_ids']);
  463. }
  464. }
  465. // dd($post);
  466. \Yii::$app->services->setting->addons->set($this->mall_id, StoreEnum::ADDONS_NAME, $post);
  467. return $this->success('保存成功');
  468. }
  469. }
  470. }