LevelController.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. <?php
  2. namespace addons\CloudStock\backend\controllers;
  3. use addons\Agent\common\enums\AgentEnum;
  4. use addons\Agent\common\models\AgentLevel;
  5. use addons\CloudStock\common\models\CloudStockAgent;
  6. use addons\CloudStock\common\models\CloudStockAgentQuota;
  7. use addons\CloudStock\common\models\CloudStockLevel;
  8. use addons\CloudStock\common\models\CloudStockPriceDifferenceGiftPackage;
  9. use addons\CloudStock\common\models\CloudStockSms;
  10. use common\enums\AddonsEnum;
  11. use common\enums\StatusEnum;
  12. use common\models\goods\Goods;
  13. use common\models\user\User;
  14. use Yii;
  15. use common\controllers\AddonsController;
  16. use addons\DoubleCopy\common\models\DoubleCopyLevel;
  17. use common\models\mall\MallAddons;
  18. /**
  19. * 默认控制器
  20. *
  21. * Class DefaultController
  22. * @package addons\CloudStock\backend\controllers
  23. */
  24. class LevelController extends BaseController
  25. {
  26. public $enableCsrfValidation = false;
  27. public function actionIndex()
  28. {
  29. if (\Yii::$app->request->isAjax) {
  30. $where[] = ['=', 'mall_id', $this->mall_id];
  31. $where[] = ['in', 'status', [StatusEnum::DISABLED, StatusEnum::ENABLED]];
  32. $params = [
  33. 'where' => $where, 'order' => 'level desc'
  34. ];
  35. $page_data = CloudStockLevel::listPage($params, false);
  36. if (!empty($page_data['list'])) {
  37. foreach ($page_data['list'] as &$item) {
  38. $item['give_quota'] = json_decode($item['give_quota'], true);
  39. $item['give_quota_count'] = count($item['give_quota']) > 0 ? 1 : 0;
  40. }
  41. }
  42. return $this->success('操作成功', $page_data);
  43. }
  44. return $this->render('index', [
  45. ]);
  46. }
  47. public function actionEdit()
  48. {
  49. try {
  50. $request = Yii::$app->request;
  51. if ($request->isAjax) {
  52. if ($request->isGet) {
  53. $id = Yii::$app->request->get('id', '');
  54. $setting = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK, 'basic');
  55. $data = CloudStockLevel::getOne([['id' => $id], ['mall_id' => $this->mall_id], ['status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]]], true);
  56. $configs['setting'] = $setting;
  57. if (!empty($data)) {
  58. $level_list = CloudStockLevel::lists(['where'=>[['mall_id'=>$this->mall_id],['status'=>StatusEnum::ENABLED]],'select'=>'level,name','index'=>'level']);
  59. $data['checked_condition_values'] = json_decode($data['checked_condition_values'], true);
  60. $data['checked_condition_keys'] = json_decode($data['checked_condition_keys'], true);
  61. $data['give_quota'] = json_decode($data['give_quota'], true);
  62. if(!empty($data['give_quota'] )&&is_array($data['give_quota'] )){
  63. foreach ($data['give_quota'] as $key=>&$item){
  64. if(isset($level_list[$item['level']])&&$data['level']>$item['level']){
  65. $item['name'] = $level_list[$item['level']]['name'];
  66. $item['is_use'] = 1;
  67. }else{
  68. $item['is_use'] = 0;
  69. }
  70. }
  71. }
  72. $data['upgrade_goods_list'] = json_decode($data['upgrade_goods_list'], true);
  73. if(!empty(($data['upgrade_goods_list']))){
  74. $goods_ids = array_column($data['upgrade_goods_list']['goods_list'],'goods_id');
  75. $goods_list = Goods::lists(['where'=>[['id'=>$goods_ids]],'select'=>'id,cover_pic,goods_name,price,stock','index'=>'id']);
  76. foreach ($data['upgrade_goods_list']['goods_list'] as &$goods_item){
  77. if(isset($goods_list[$goods_item['goods_id']])){
  78. $goods_item['goods_id'] = $goods_list[$goods_item['goods_id']]['id'];
  79. $goods_item['cover_pic'] = $goods_list[$goods_item['goods_id']]['cover_pic'];
  80. $goods_item['goods_name'] = $goods_list[$goods_item['goods_id']]['goods_name'];
  81. $goods_item['price'] = $goods_list[$goods_item['goods_id']]['price'];
  82. $goods_item['stock'] = $goods_list[$goods_item['goods_id']]['stock'];
  83. }
  84. }
  85. $data['upgrade_goods_list'] = json_encode($data['upgrade_goods_list']);
  86. }
  87. if(!empty($data['checked_condition_values'])){
  88. foreach ($data['checked_condition_values'] as $key => $value) {
  89. if (!empty($value['value'])) {
  90. $goods_ids = array_column($value['value'],'goods_id');
  91. if (empty($goods_ids)) continue;
  92. $goods_list = Goods::lists(['where'=>[['id'=>$goods_ids]],'select'=>'id,cover_pic,goods_name,price,stock','index'=>'id']);
  93. foreach ($value['value'] as&$item){
  94. if(isset($goods_list[$item['goods_id']])){
  95. $item['goods_id'] = $goods_list[$item['goods_id']]['id'];
  96. $item['cover_pic'] = $goods_list[$item['goods_id']]['cover_pic'];
  97. $item['goods_name'] = $goods_list[$item['goods_id']]['goods_name'];
  98. $item['name'] = $goods_list[$item['goods_id']]['goods_name'];
  99. $item['price'] = $goods_list[$item['goods_id']]['price'];
  100. $item['stock'] = $goods_list[$item['goods_id']]['stock'];
  101. }
  102. }
  103. $data['checked_condition_values'][$key] = $value;
  104. }
  105. }
  106. if(isset($data['checked_condition_values'][2]['value'])){
  107. $goods_ids = array_column($data['checked_condition_values'][2]['value'],'id');
  108. // print_r($goods_ids);exit;
  109. $goods_list = Goods::lists(['where'=>[['id'=>$goods_ids]],'select'=>'id,cover_pic,goods_name,price,stock','index'=>'id']);
  110. foreach ($data['checked_condition_values'][2]['value'] as&$item){
  111. if(isset($goods_list[$item['id']])){
  112. $item['id'] = $goods_list[$item['id']]['id'];
  113. $item['cover_pic'] = $goods_list[$item['id']]['cover_pic'];
  114. $item['goods_name'] = $goods_list[$item['id']]['goods_name'];
  115. $item['name'] = $goods_list[$item['id']]['goods_name'];
  116. $item['price'] = $goods_list[$item['id']]['price'];
  117. $item['stock'] = $goods_list[$item['id']]['stock'];
  118. }
  119. }
  120. }
  121. if(isset($data['checked_condition_values'][1]['value'])){
  122. $level_arr = array_column($data['checked_condition_values'][1]['value'],'level');
  123. $level_list = CloudStockLevel::lists(['where'=>[['mall_id'=>$this->mall_id],['level'=>$level_arr],['status'=>[StatusEnum::ENABLED,StatusEnum::DISABLED]]],'index'=>'level']);
  124. foreach ($data['checked_condition_values'][1]['value'] as &$val){
  125. if(isset($level_list[$val['level']])){
  126. $val['name'] = $level_list[$val['level']]['name'];
  127. }
  128. }
  129. }
  130. if(empty($data['checked_condition_values'][5])){
  131. $data['checked_condition_values'][5] = [
  132. 'self_level' => '',
  133. 'level' => '',
  134. 'nums' => 0,
  135. 'c_level' => '',
  136. 'c_nums' => 0,
  137. ];
  138. }
  139. if(empty($data['checked_condition_values'][6])){
  140. $data['checked_condition_values'][6] = [
  141. 'value' => [],
  142. 'num' => 0,
  143. 'level' => '',
  144. 'nums' => 0,
  145. ];
  146. }
  147. if(empty($data['checked_condition_values'][7])){
  148. $data['checked_condition_values'][7] = [
  149. 'nums' => 0,
  150. ];
  151. }
  152. }
  153. $data['fill_min'] =$data['fill_min']??0;
  154. $data['is_open_fill_min'] =$data['is_open_fill_min']??0;
  155. }
  156. return $this->success('操作成功', $data);
  157. }
  158. if ($request->isPost) {
  159. $params = Yii::$app->request->post();
  160. // $res = Yii::$app->services->validate->validate($params, [
  161. // [['level', 'is_auto_upgrade', 'upgrade_type_condition', 'condition_type', 'upgrade_type_goods', 'buy_goods_type', 'goods_type', 'status'], 'integer'],
  162. // [['name'], 'string', 'max' => 45],
  163. // [['explain'], 'string', 'max' => 5000],
  164. // [['id', 'checked_condition_values', 'checked_condition_keys', 'score', 'commission', 'goods_ids', 'goods_list'], 'safe']
  165. // ]);
  166. // if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  167. $params['mall_id'] = $this->mall_id;
  168. $res = CloudStockLevel::setData($params);
  169. if ($res === false) return $this->error(CloudStockLevel::getStaticError());
  170. return $this->success('操作成功');
  171. }
  172. }
  173. } catch (\Exception $e) {
  174. return $this->error($e->getMessage(), []);
  175. }
  176. return $this->render('edit');
  177. }
  178. public function actionUpdateStatus()
  179. {
  180. $params = Yii::$app->request->post();
  181. if (!in_array($params['status'], [StatusEnum::ENABLED, StatusEnum::DISABLED])) {
  182. return $this->error('参数不对');
  183. }
  184. $params['mall_id'] = $this->mall_id;
  185. $res = CloudStockLevel::setData($params);
  186. if ($res === false) return $this->error(CloudStockLevel::getStaticError());
  187. return $this->success('操作成功');
  188. }
  189. public function actionDel()
  190. {
  191. try {
  192. $params = Yii::$app->request->post();
  193. $params['mall_id'] = $this->mall_id;
  194. $params['status'] = StatusEnum::DELETE;
  195. $res = CloudStockLevel::setData($params);
  196. if ($res === false) return $this->error(CloudStockLevel::getStaticError());
  197. $res = CloudStockPriceDifferenceGiftPackage::updateAll(['status' => StatusEnum::DISABLED, 'level' => 0], ['level' => $res['level'], 'mall_id' => $this->mall_id]);
  198. if ($res === false) return $this->error(CloudStockPriceDifferenceGiftPackage::getStaticError());
  199. return $this->success('操作成功');
  200. } catch (\Exception $e) {
  201. return $this->error($e->getMessage());
  202. }
  203. }
  204. //不用验证权限
  205. public function actionGetCanChooseLevelList()
  206. {
  207. $params = Yii::$app->request->get();
  208. $level = isset($params['level']) ? $params['level'] : null;
  209. $can_choose_list = CloudStockLevel::find()->select('level')->where([
  210. 'mall_id' => $this->mall_id,
  211. 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED],
  212. ])->column();
  213. $new_list = [];
  214. for ($i = 1; $i <= 10; $i++) {
  215. $can_choose = 1;
  216. //已经存在的等级为false
  217. if (in_array($i, $can_choose_list)) $can_choose = 0;
  218. //有指定等级,比指定等级小的等级为false
  219. if ($level && $i < $level) $can_choose = 0;
  220. //有指定等级,指定等级为true
  221. if ($level && $i == $level) $can_choose = 1;
  222. $new_list[] = [
  223. 'name' => "等级" . $i,
  224. 'level' => $i,
  225. 'is_can_choose' => $can_choose,
  226. ];
  227. }
  228. return $this->success('操作成功', $new_list);
  229. }
  230. //不用验证权限
  231. public function actionGetLessLevelList()
  232. {
  233. $params = Yii::$app->request->get();
  234. $level = isset($params['level']) ? $params['level'] : 10;
  235. $use_list = CloudStockLevel::find()->select('level')->where([
  236. 'mall_id' => $this->mall_id,
  237. 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED],
  238. ])->column();
  239. $new_list = [];
  240. $list = CloudStockLevel::lists(
  241. [
  242. 'where' => [
  243. ['mall_id' => $this->mall_id,],
  244. ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]],
  245. ],
  246. 'select' => 'name,level',
  247. 'index' => 'level'
  248. ]
  249. );
  250. for ($i = 1; $i <= 10; $i++) {
  251. if (in_array($i, $use_list) && $i <= $level) {
  252. $is_use = 1;
  253. } else {
  254. $is_use = 0;
  255. }
  256. $new_list[] = [
  257. 'name' => $list[$i]['name'] ?? '等级不存在',
  258. 'level' => $i,
  259. 'is_use' => $is_use,
  260. ];
  261. }
  262. return $this->success('操作成功', $new_list);
  263. }
  264. public function actionAgentQuota()
  265. {
  266. if (\Yii::$app->request->isAjax) {
  267. $get = Yii::$app->request->get();
  268. $where[] = ['=', 'mall_id', $this->mall_id];
  269. $where[] = ['=', 'status', StatusEnum::ENABLED];
  270. if (!empty($get['keyword'])) {
  271. $user_list = User::find()->where(['or',
  272. ['id' => $get['keyword']],
  273. ['like', 'mobile', $get['keyword']],
  274. ['like', 'nickname', $get['keyword']]])->select('id')->asArray()->all();
  275. $user_id_arr = array_column($user_list, 'id');
  276. $where[] = ['user_id' => $user_id_arr];
  277. }
  278. if (!empty($get['level'])) $where[] = ['level' => $get['level']];
  279. $mall_id = $this->mall_id;
  280. $params = [
  281. 'where' => $where,
  282. 'with' => ['stockLevel'=>function($query)use($mall_id){
  283. $query->where(['status'=>[StatusEnum::DISABLED,StatusEnum::ENABLED],'mall_id'=>$mall_id]);
  284. }, 'user']
  285. ];
  286. $page_data = CloudStockAgent::listPage($params, false);
  287. if (!empty($page_data['list'])) {
  288. foreach ($page_data['list'] as &$item) {
  289. $item['agent_quota_list'] = CloudStockAgentQuota::lists([
  290. 'where' => [
  291. ['user_id' => $item['user_id']],
  292. ['status'=>StatusEnum::ENABLED]
  293. ],
  294. 'with' => [
  295. 'stockLevel'=>function($query)use($mall_id){
  296. $query->where(['status'=>[StatusEnum::DISABLED,StatusEnum::ENABLED],'mall_id'=>$mall_id]);
  297. }
  298. ]
  299. ], true);
  300. }
  301. }
  302. return $this->success('操作成功', $page_data);
  303. }
  304. return $this->render('agent-quota');
  305. }
  306. public function actionGetLevelList()
  307. {
  308. $data = CloudStockLevel::lists(['where' => [['mall_id' => $this->mall_id], ['status' => StatusEnum::ENABLED]]], true);
  309. return $this->success('操作成功', $data);
  310. }
  311. public function actionGetDoubleCopyLevelList()
  312. {
  313. $data = [];
  314. if(MallAddons::isInstall($this->mall_id,AddonsEnum::ADDONS_NAME_DOUBLE_COPY)){
  315. $data = DoubleCopyLevel::lists(['where' => [['mall_id' => $this->mall_id], ['status' => StatusEnum::ENABLED]],'select'=>'level,name'], true);
  316. }
  317. return $this->success('操作成功', $data);
  318. }
  319. }