LevelController.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
  1. <?php
  2. namespace addons\Agent\backend\controllers;
  3. use addons\Agent\common\enums\AgentEnum;
  4. use addons\Agent\common\event\AgentLevelEvent;
  5. use addons\Agent\common\models\Agent;
  6. use addons\Agent\common\models\AgentLevel;
  7. use addons\PointUpperLimit\common\service\SettingService;
  8. use addons\Store\common\models\StoreGoods;
  9. use common\enums\AddonsEnum;
  10. use common\enums\StatusEnum;
  11. use common\models\goods\Goods;
  12. use common\models\mall\MallAddons;
  13. use Exception;
  14. use Yii;
  15. use common\models\common\UpgradeCondition;
  16. class LevelController extends BaseController
  17. {
  18. public $enableCsrfValidation = false;
  19. /**
  20. * @desc:首页
  21. * @Author: hua
  22. * @Date: 2021/10/20
  23. * @Time: 16:26
  24. * @Copyright: copyright (c) 2021 广东七件事集团
  25. * @return mixed|string|void
  26. */
  27. public function actionIndex()
  28. {
  29. $request = Yii::$app->request;
  30. if ($request->isAjax) {
  31. // 查询参数
  32. $get = \Yii::$app->request->get();
  33. $where[] = ['=', 'mall_id', $this->mall_id];
  34. $where[] = ['in', 'status', [StatusEnum::DISABLED, StatusEnum::ENABLED]];
  35. $where[] = ['or', ['like', 'name', $get['keyword']], ['like', 'level', $get['keyword']]];
  36. $params = array('where' => $where, 'order' => 'id desc', 'limit' => $request->get('limit', 12));
  37. $mall_id = $this->mall_id;
  38. $params['with'] = ['commissionLevelSetting'=>function($query)use($mall_id){
  39. $query->where(['commission_type'=>'commission','from_type'=>AgentEnum::ADDONS_NAME,'mall_id'=>$mall_id,'status'=>StatusEnum::ENABLED]);
  40. }];
  41. $params['order'] = 'level asc';
  42. $page_data = AgentLevel::listPage($params, false);
  43. return $this->success('操作成功', $page_data);
  44. }
  45. return $this->render($this->action->id);
  46. }
  47. /**
  48. * @desc:修改状态
  49. * @Author: hua
  50. * @Date: 2021/10/23
  51. * @Time: 16:31
  52. * @Copyright: copyright (c) 2021 广东七件事集团
  53. * @return mixed|void
  54. * @throws Exception
  55. */
  56. public function actionSwitchStatus()
  57. {
  58. if (\Yii::$app->request->isAjax) {
  59. if (\Yii::$app->request->isPost) {
  60. $params = \Yii::$app->request->post();
  61. $res = Yii::$app->services->validate->validate($params, [
  62. [['id'], 'required'],
  63. [['status'], 'integer']
  64. ]);
  65. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  66. $params['mall_id'] = $this->mall_id;
  67. $res = AgentLevel::setData($params);
  68. if ($res === false) return $this->error(AgentLevel::getStaticError());
  69. $event = new AgentLevelEvent($this->mall_id);
  70. $data = [
  71. 'mall_id'=>$this->mall_id,
  72. 'level'=>$res['level'],
  73. 'level_name'=>$res['name'],
  74. 'status'=>$res['status'],
  75. 'id'=>$res['id'],
  76. 'type'=>'edit',
  77. ];
  78. \Yii::$app->services->events->dispatch($event,$data , $event->listeners);
  79. return $this->success('操作成功');
  80. }
  81. }
  82. return $this->error();
  83. }
  84. /**
  85. * @desc:删除等级
  86. * @Author: hua
  87. * @Date: 2021/10/23
  88. * @Time: 16:43
  89. * @Copyright: copyright (c) 2021 广东七件事集团
  90. * @return mixed|void
  91. * @throws Exception
  92. */
  93. public function actionDelete()
  94. {
  95. if (\Yii::$app->request->isAjax) {
  96. if (\Yii::$app->request->isPost) {
  97. $params = \Yii::$app->request->post();
  98. $res = Yii::$app->services->validate->validate($params, [
  99. [['id'], 'required'],
  100. ]);
  101. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  102. $params['mall_id'] = $this->mall_id;
  103. $params['status'] = StatusEnum::DELETE;
  104. $res = AgentLevel::del($params);
  105. if ($res === false) return $this->error(AgentLevel::getStaticError());
  106. return $this->success('操作成功');
  107. }
  108. }
  109. return $this->error();
  110. }
  111. /**
  112. * @desc:设置升级条件
  113. * @Author: hua
  114. * @Date: 2021/10/20
  115. * @Time: 18:50
  116. * @Copyright: copyright (c) 2021 广东七件事集团
  117. * @return mixed|string|void
  118. */
  119. public function actionCondition()
  120. {
  121. if (\Yii::$app->request->isAjax) {
  122. try {
  123. if (\Yii::$app->request->isGet) {
  124. $upgrade_condition_ids = UpgradeCondition::$agent_condition_ids;
  125. if (MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK)) {
  126. $upgrade_condition_ids = array_merge($upgrade_condition_ids, UpgradeCondition::$cloud_stock_install_condition_ids);
  127. }
  128. $data['upgrade_condition'] = UpgradeCondition::getData($upgrade_condition_ids);
  129. $agentUpgradeCondition = Yii::$app->services->setting->addons->get($this->mall_id, AgentEnum::ADDONS_NAME, 'upgrade_condition');
  130. $data['checked_condition_keys'] = !empty($agentUpgradeCondition['agent_level_upgrade_condition']) ? json_decode($agentUpgradeCondition['agent_level_upgrade_condition'], true) : [];
  131. $upgrade_condition_ids = array_column($data['upgrade_condition'],'id');
  132. $checked_condition_keys = [];
  133. foreach($data['checked_condition_keys'] as $item){
  134. if(in_array($item,$upgrade_condition_ids)){
  135. $checked_condition_keys[] = $item;
  136. }
  137. }
  138. $data['checked_condition_keys'] = $checked_condition_keys;
  139. $data['level_down'] = $agentUpgradeCondition['level_down'] ?? 0;
  140. return $this->success('操作成功', $data);
  141. } else {
  142. $postData = Yii::$app->request->post();
  143. $res = Yii::$app->services->validate->validate($postData, [
  144. [['checked_condition_keys'], 'required'],
  145. [['level_down'], 'integer'],
  146. ]);
  147. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  148. $data['upgrade_condition'] = [
  149. 'agent_level_upgrade_condition' => json_encode($postData['checked_condition_keys']),
  150. 'level_down' => $postData['level_down'],
  151. ];
  152. Yii::$app->services->setting->addons->set($this->mall_id, AgentEnum::ADDONS_NAME, $data);
  153. UpgradeCondition::clear($postData['checked_condition_keys'], 'addons\Agent\common\models\AgentLevel', $this->mall_id);
  154. return $this->success('操作成功');
  155. }
  156. } catch (\Exception $e) {
  157. return $this->error($e->getMessage());
  158. }
  159. }
  160. return $this->render('condition');
  161. }
  162. /**
  163. * @desc:编辑等级
  164. * @Author: hua
  165. * @Date: 2021/10/20
  166. * @Time: 15:51
  167. * @Copyright: copyright (c) 2021 广东七件事集团
  168. * @return mixed|string|void
  169. */
  170. public function actionEdit()
  171. {
  172. try {
  173. $request = Yii::$app->request;
  174. if ($request->isAjax) {
  175. if ($request->isGet) {
  176. $id = Yii::$app->request->get('id', '');
  177. $mall_id = $this->mall_id;
  178. $data = [];
  179. $repurchase_subsidy_condition = AgentEnum::getRepurchaseSubsidyConditionInitValue();
  180. if (!empty($id)) {
  181. $model = AgentLevel::getOne([['id' => $id]], true, ['commissionLevelSettingList'=>function($query)use($mall_id){
  182. $query->where(['mall_id'=>$mall_id]);
  183. }]);
  184. $model['checked_condition_values'] = json_decode($model['checked_condition_values'], true) ?? [];
  185. if (empty($model['checked_condition_values'])) unset($model['checked_condition_values']);
  186. $model['checked_condition_keys'] = json_decode($model['checked_condition_keys'], true) ?? [];
  187. $model['goods_ids'] = json_decode($model['goods_ids'], true) ?? [];
  188. $model['goods_list'] = json_decode($model['goods_list'], true) ?? [];
  189. if(!empty($model['goods_ids'])){
  190. $copyGoodsList = $model['goods_list'];
  191. $model['goods_list'] = Goods::lists(['where'=>[['id'=>$model['goods_ids']]],'select'=>'id,cover_pic,goods_name as name,price,stock', 'index' => 'id']);
  192. foreach ($copyGoodsList as $item) {
  193. isset($model['goods_list'][$item['id']]) && $model['goods_list'][$item['id']]['condition_num'] = $item['condition_num'];
  194. }
  195. $model['goods_list'] = array_values($model['goods_list']);
  196. }
  197. $model['store_goods_ids'] = json_decode($model['store_goods_ids'],true) ?? [];
  198. $model['store_goods_list'] = json_decode($model['store_goods_list'],true) ?? [];
  199. if(!empty($model['store_goods_list']) && MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_STORE) ){
  200. $store_goods_ids = array_column($model['store_goods_list'],'id');
  201. $store_goods_list = StoreGoods::lists(['where'=>[['id'=>$store_goods_ids]],'select'=>'id,cover_pic,goods_name,price,stock','index'=>'id']);
  202. foreach ($model['store_goods_list'] as&$item){
  203. if(isset($store_goods_list[$item['id']])){
  204. $item['cover_pic'] = $store_goods_list[$item['id']]['cover_pic'];
  205. $item['name'] = $store_goods_list[$item['id']]['goods_name'];
  206. $item['price'] = $store_goods_list[$item['id']]['price'];
  207. $item['stock'] = $store_goods_list[$item['id']]['stock'];
  208. }
  209. }
  210. }
  211. unset($model['updated_at'], $model['created_at']);
  212. $setting = \Yii::$app->services->setting->addons->get($this->mall_id, AgentEnum::ADDONS_NAME, 'basic');
  213. $equal_prize_deep = $setting['equal_prize_deep'] ?? 0;
  214. if($equal_prize_deep > AgentEnum::ALONE_EQUAL_DEEP) $equal_prize_deep = AgentEnum::ALONE_EQUAL_DEEP;
  215. if (!empty($model['commissionLevelSettingList'])) {
  216. foreach ($model['commissionLevelSettingList'] as $val){
  217. $val['alone_agent_equal_prize_info'] = $val['alone_agent_equal_prize_info'] ? json_decode($val['alone_agent_equal_prize_info'],true) : [];
  218. $val['repurchase_subsidy_condition'] = $val['repurchase_subsidy_condition'] ? json_decode($val['repurchase_subsidy_condition'],true) : $repurchase_subsidy_condition;
  219. if(!empty($val['repurchase_subsidy_condition']['condition_goods_ids'])){
  220. $val['repurchase_subsidy_condition']['condition_goods_list'] = Goods::lists(['where'=>[['id'=>$val['repurchase_subsidy_condition']['condition_goods_ids']]],'select'=>'id,cover_pic,goods_name as name,price,stock',]);
  221. }
  222. $model[$val['commission_type']] = $val;
  223. }
  224. } else {
  225. $alone_info = [];
  226. $model['score'] = [
  227. 'is_percent_team' => 0,
  228. 'is_percent_equal' => 0,
  229. 'agent_team_prize' => 0,
  230. 'agent_equal_prize' => 0,
  231. 'agent_over_prize' => 0,
  232. 'is_alone_agent_equal_prize' => 0,
  233. 'alone_agent_equal_prize_info' => $alone_info,
  234. 'is_repurchase_subsidy' => 0,
  235. 'repurchase_subsidy_condition' => $repurchase_subsidy_condition,
  236. ];
  237. $model['commission'] = [
  238. 'is_percent_team' => 0,
  239. 'is_percent_equal' => 0,
  240. 'agent_team_prize' => 0,
  241. 'agent_equal_prize' => 0,
  242. 'agent_over_prize' => 0,
  243. 'is_alone_agent_equal_prize' => 0,
  244. 'alone_agent_equal_prize_info' => $alone_info,
  245. 'is_repurchase_subsidy' => 0,
  246. 'repurchase_subsidy_condition' => $repurchase_subsidy_condition,
  247. ];
  248. $model['digital'] = [
  249. 'is_percent_team' => 0,
  250. 'is_percent_equal' => 0,
  251. 'agent_team_prize' => 0,
  252. 'agent_equal_prize' => 0,
  253. 'agent_over_prize' => 0,
  254. 'is_repurchase_subsidy' => 0,
  255. 'repurchase_subsidy_condition' => $repurchase_subsidy_condition,
  256. ];
  257. $model['additional_score'] = [
  258. 'channel_reward_additional_type' => 0,
  259. 'channel_reward_additional' => 0,
  260. 'channel_reward_additional_leap' => 0,
  261. 'same_reward_additional_type' => 0,
  262. 'same_reward_additional' => 0,
  263. 'is_enable_independent_same_reward' => 0,
  264. 'alone_agent_equal_prize_info' => $alone_info,
  265. 'is_repurchase_subsidy' => 0,
  266. 'repurchase_subsidy_condition' => $repurchase_subsidy_condition,
  267. ];
  268. }
  269. $from_type_arr = ['commission' => [
  270. 'alone_agent_equal_prize_info'
  271. ],'score' => [
  272. 'alone_agent_equal_prize_info',
  273. ], 'additional_score' => [
  274. 'alone_agent_equal_prize_info',
  275. ]];
  276. foreach($from_type_arr as $from_type => $fields){
  277. foreach ($fields as $field) {
  278. if(empty($model[$from_type][$field]) || !is_array($model[$from_type][$field])){
  279. $model[$from_type][$field] = [];
  280. }
  281. $count = count($model[$from_type][$field]);
  282. if($count != $equal_prize_deep){
  283. $diff = $equal_prize_deep - $count;
  284. if($diff > 0){
  285. if($equal_prize_deep > 0){
  286. $deep = $count;
  287. for($i=0;$i<$diff;$i++){
  288. $deep++;
  289. $model[$from_type][$field][] = [
  290. 'deep' => $deep,
  291. 'prize' => 0,
  292. ];
  293. }
  294. }
  295. }else{
  296. $model[$from_type][$field] = array_slice($model[$from_type][$field],0,$equal_prize_deep);
  297. }
  298. }
  299. }
  300. }
  301. $data['detail'] = $model;
  302. }
  303. $data['weights'] = AgentLevel::getLevelWeights($this->mall_id);
  304. return $this->success('操作成功', $data);
  305. }
  306. if ($request->isPost) {
  307. $params = Yii::$app->request->post()['form'];
  308. $res = Yii::$app->services->validate->validate($params, [
  309. [['level', 'name'], 'required'],
  310. [['id', 'is_auto_upgrade', 'score', 'commission', 'checked_condition_values',
  311. 'checked_condition_keys', 'condition_type', 'upgrade_type_goods', 'goods_list', 'upgrade_type_condition', 'goods_ids', 'goods_type',
  312. 'buy_goods_type','explain','is_open_equal_settle_type','equal_settle_type','status','digital', 'additional_score'], 'safe'],
  313. [['store_goods_ids', 'store_goods_type',
  314. 'buy_store_goods_type','store_goods_list','upgrade_type_store_goods', 'is_custom_condition_num'],'safe']
  315. ]);
  316. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  317. if(!empty($params['id'])){
  318. $distribution_level = AgentLevel::findOne(['id'=>$params['id'],'mall_id'=>$this->mall_id,'status'=>[StatusEnum::DISABLED,StatusEnum::ENABLED]]);
  319. if($distribution_level&&$distribution_level->level!=$params['level']){
  320. $res = Agent::findOne(['mall_id'=>$this->mall_id,'level'=>$distribution_level->level,'status'=>[StatusEnum::DISABLED,StatusEnum::ENABLED]]);
  321. if($res) return $this->error('该等级关联了经销商,等级不能修改');
  322. }
  323. }
  324. $params['mall_id'] = $this->mall_id;
  325. $res = AgentLevel::setData($params);
  326. if ($res === false) throw new Exception(AgentLevel::getStaticCodeError()['error']);
  327. $event = new AgentLevelEvent($this->mall_id);
  328. $data = [
  329. 'mall_id'=>$this->mall_id,
  330. 'level'=>$params['level'],
  331. 'level_name'=>$params['name'],
  332. 'status'=>$res['status'],
  333. 'id'=>$res['id'],
  334. 'type'=>!empty($params['id'])?'edit':'add',
  335. ];
  336. \Yii::$app->services->events->dispatch($event,$data , $event->listeners);
  337. return $this->success('操作成功');
  338. }
  339. }
  340. } catch (\Exception $e) {
  341. return $this->error($e->getMessage(), []);
  342. }
  343. $agentUpgradeCondition = \Yii::$app->services->setting->addons->get($this->mall_id, AgentEnum::ADDONS_NAME, 'upgrade_condition');
  344. $list = [];
  345. if (!empty($agentUpgradeCondition['agent_level_upgrade_condition'])) {
  346. $ids = json_decode($agentUpgradeCondition['agent_level_upgrade_condition'], true);
  347. if(!empty($ids)) {
  348. $list = UpgradeCondition::getData($ids);
  349. }
  350. }
  351. $upgrade_condition_data = UpgradeCondition::getUpgradeConditionData($this, $this->mall_id, $list);
  352. // 是否显示额外积分设置
  353. $is_show_additional_score = StatusEnum::DISABLED;
  354. if (MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_POINT_UPPER_LIMIT)) {
  355. $is_show_additional_score = (new SettingService())->isEnable($this->mall_id);
  356. }
  357. $upgrade_condition_data['is_show_additional_score'] = $is_show_additional_score;
  358. $upgrade_condition_data['is_show_store_upgrade'] = 0;
  359. if(MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_STORE)){
  360. $upgrade_condition_data['is_show_store_upgrade'] = 1;
  361. }
  362. return $this->render('edit', $upgrade_condition_data);
  363. }
  364. /**
  365. * @desc:权重
  366. * @Author: hua
  367. * @Date: 2021/10/23
  368. * @Time: 15:56
  369. * @Copyright: copyright (c) 2021 广东七件事集团
  370. * @return mixed|void
  371. */
  372. public function actionSetting()
  373. {
  374. if (\Yii::$app->request->isAjax) {
  375. $weights = AgentLevel::getLevelWeights($this->mall_id);
  376. $enable_level_list = [];
  377. foreach ($weights as $k) {
  378. if ($k['disabled'] == true) {
  379. unset($k['disabled']);
  380. array_push($enable_level_list, $k);
  381. }
  382. }
  383. return $this->success('操作成功', ['weights' => $weights, 'enable_level_list' => $enable_level_list]);
  384. }
  385. return $this->error();
  386. }
  387. }