request->isAjax) { $params = Yii::$app->request->get(); $where[] = ['=', 'mall_id', $this->mall_id]; $where[] = ['in', 'status', [StatusEnum::DISABLED, StatusEnum::ENABLED]]; if (!empty($params['keyword'])) { $user_list = User::find()->where(['or', ['id' => $params['keyword']], ['mobile' => $params['keyword']], ['nickname' => $params['keyword']]])->select('id')->asArray()->all(); $user_id_arr = array_column($user_list, 'id'); $where[] = ['user_id' => $user_id_arr]; } if (!empty($params['level'])) $where[] = ['level' => $params['level']]; if (!empty($params['start'])) $where[] = ['>=', 'created_at', strtotime($params['start'] . ' 00:00:00')]; if (!empty($params['end'])) $where[] = ['>=', 'created_at', strtotime($params['end'] . ' 00:00:00')]; $params['where'] = $where; $params['order'] = 'id desc'; $params['with'] = ['user']; $page_data = CloudStockTwoAgent::listPage($params, false); if (!empty($page_data['list'])) { $level_arr = array_column($page_data['list'], 'level'); $parent_id_arr = []; $supplier_id_arr = []; foreach ($page_data['list'] as $val) { $parent_id_arr[] = $val['user']['parent_id']; $parent_agent = CloudStockTwoAgent::getUserParentAgent($val['user_id'], $val['level']); if (!empty($parent_agent)) { $supplier_id_arr[$val['user_id']] = $parent_agent['user_id']; } } $parent_arr = User::lists(['where' => [['id' => $parent_id_arr]], 'index' => 'id', 'select' => 'id,nickname,avatar_url,mobile,parent_id']); $before_level_arr = array_column($page_data['list'], 'before_level'); $level_list = CloudStockTwoLevel::lists(['where' => [['mall_id' => $this->mall_id], ['level' => $level_arr],['status'=>[StatusEnum::DISABLED,StatusEnum::ENABLED]]], 'index' => 'level']); $before_level_arr_list = CloudStockTwoLevel::lists(['where' => [['mall_id' => $this->mall_id], ['level' => $before_level_arr],['status'=>[StatusEnum::DISABLED,StatusEnum::ENABLED]]], 'index' => 'level']); $user_ids = array_column($page_data['list'], 'user_id'); $agent_goods_arr = CloudStockTwoAgentGoods::lists(['where' => [['user_id' => $user_ids]], 'select' => 'sum(num) num,user_id', 'group' => 'user_id', 'index' => 'user_id']); foreach ($page_data['list'] as &$item) { $item['level_name'] = $level_list[$item['level']]['name'] ?? ''; $item['before_level_name'] = $before_level_arr_list[$item['before_level']]['name'] ?? ''; $item['goods_stock'] = $agent_goods_arr[$item['user_id']]['num'] ?? 0; $item['parent_name'] = '平台'; if (isset($parent_arr[$item['user']['parent_id']])) { $item['parent_name'] = $parent_arr[$item['user']['parent_id']]['nickname'] ? $parent_arr[$item['user']['parent_id']]['nickname'] : $item['user']['parent_id']; } $item['supplier_name'] = '平台'; if (isset($supplier_id_arr[$item['user_id']])) { $supplier_id = $supplier_id_arr[$item['user_id']]; $item['supplier_name'] = !empty($parent_arr[$supplier_id]['nickname']) ? $parent_arr[$supplier_id]['nickname'] : '供货商:' . $supplier_id; } } } return $this->success('操作成功', $page_data); } return $this->render('index', [ ]); } public function actionEdit() { try { $request = Yii::$app->request; if ($request->isAjax) { if ($request->isGet) { $id = Yii::$app->request->get('id', ''); $setting = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK_TWO, 'basic'); $data = CloudStockTwoLevel::getOne([['id' => $id], ['mall_id' => $this->mall_id], ['status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]]], true); $configs['setting'] = $setting; if (!empty($data)) { $data['checked_condition_values'] = json_decode($data['checked_condition_values'], true); $data['checked_condition_keys'] = json_decode($data['checked_condition_keys'], true); $data['give_quota'] = json_decode($data['give_quota'], true); } return $this->success('操作成功', $data); } if ($request->isPost) { $params = Yii::$app->request->post(); $res = Yii::$app->services->validate->validate($params, [ [['level', 'user_id'], 'required'], ]); if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $params['mall_id'] = $this->mall_id; $params['upgrade_status'] = CloudStockTwoEnum::UPGRADE_STATUS_MANUAL; $params['upgrade_at'] = time(); $res = CloudStockTwoAgent::getOne([['mall_id' => $this->mall_id], ['user_id' => $params['user_id']], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]]); if ($res) return $this->error('该会员已是代理商'); $res = CloudStockTwoAgent::setData($params); if ($res === false) return $this->error(CloudStockTwoAgent::getStaticError()); return $this->success('操作成功'); } } } catch (\Exception $e) { return $this->error($e->getMessage(), []); } return $this->render('edit'); } public function actionRemarksEdit() { if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isPost) { $params = \Yii::$app->request->post(); $res = Yii::$app->services->validate->validate($params, [ [['id'], 'required'], [['remarks'], 'safe'] ]); if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $params['mall_id'] = $this->mall_id; $res = CloudStockTwoAgent::setData($params); if ($res === false) return $this->error(CloudStockTwoAgent::getStaticError()); return $this->success('操作成功'); } } return $this->error(); } public function actionDelete() { if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isPost) { $params = \Yii::$app->request->post(); $res = Yii::$app->services->validate->validate($params, [ [['id'], 'required'], [['id'], 'integer'] ]); if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $params['mall_id'] = $this->mall_id; $params['status'] = StatusEnum::DELETE; $res = CloudStockTwoAgent::setData($params); if ($res === false) return $this->error(CloudStockTwoAgent::getStaticError()); return $this->success('操作成功'); } } return $this->error(); } public function actionLevelChange() { if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isPost) { $params = \Yii::$app->request->post(); $res = Yii::$app->services->validate->validate($params, [ [['id', 'level'], 'required'], [['level'], 'integer'] ]); if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $params['mall_id'] = $this->mall_id; $params['upgrade_status'] = CloudStockTwoEnum::UPGRADE_STATUS_MANUAL; $res = CloudStockTwoAgent::setData($params); if ($res === false) return $this->error(CloudStockTwoAgent::getStaticError()); return $this->success('操作成功'); } } return $this->error(); } //不用验证权限 public function actionGetLevelList() { $list = CloudStockTwoLevel::lists(['where' => [['mall_id' => $this->mall_id], ['status' => StatusEnum::ENABLED]],'order'=>'level asc']); return $this->success('操作成功', $list); } //不用验证权限 public function actionSearchUser() { if (\Yii::$app->request->isAjax) { $keyword = \Yii::$app->request->get('keyword', ''); $list['list'] = User::searchUser(['keyword' => $keyword, 'mall_id' => $this->mall_id]); return $this->success('操作成功', $list); } return $this->error(); } public function actionStock() { if (\Yii::$app->request->isAjax) { $params = Yii::$app->request->get(); $where[] = ['=', 'mall_id', $this->mall_id]; $where[] = ['in', 'status', [StatusEnum::DISABLED, StatusEnum::ENABLED]]; if (!empty($params['keyword'])) { $user_list = User::find()->where(['or', ['id' => $params['keyword']], ['like', 'mobile', $params['keyword']], ['like', 'nickname', $params['keyword']]])->select('id')->asArray()->all(); $user_id_arr = array_column($user_list, 'id'); $where[] = ['user_id' => $user_id_arr]; } if (!empty($params['level'])) $where[] = ['level' => $params['level']]; if (!empty($params['start'])) $where[] = ['>=', 'created_at', strtotime($params['start'] . ' 00:00:00')]; if (!empty($params['end'])) $where[] = ['>=', 'created_at', strtotime($params['end'] . ' 00:00:00')]; $params['where'] = $where; $params['order'] = 'level desc'; $params['with'] = 'user'; $page_data = CloudStockTwoAgent::listPage($params, false); if (!empty($page_data['list'])) { $level_arr = array_column($page_data['list'], 'level'); $user_ids = array_column($page_data['list'], 'user_id'); $where = [['in', 'user_id', $user_ids]]; $level_list = CloudStockTwoLevel::lists(['where' => [['mall_id' => $this->mall_id], ['level' => $level_arr], ['status' => StatusEnum::ENABLED]], 'index' => 'level']); $agent_goods_list = CloudStockTwoAgentGoods::lists(['where' => [['user_id' => $user_ids]], 'select' => 'sum(num) num ,user_id', 'group' => 'user_id', 'index' => 'user_id']); foreach ($page_data['list'] as &$item) { $item['level_name'] = $level_list[$item['level']]['name'] ?? ''; $item['total_stock_num'] = 0; if (isset($agent_goods_list[$item['user_id']])) $item['total_stock_num'] = $agent_goods_list[$item['user_id']]['num']; } } return $this->success('操作成功', $page_data); } return $this->render('stock'); } public function actionStockLog() { if (\Yii::$app->request->isAjax) { $params = Yii::$app->request->get(); $where[] = ['=', 'mall_id', $this->mall_id]; $where[] = ['=', 'status', StatusEnum::ENABLED]; if (!empty($params['keyword'])) { $user_list = User::find()->where(['or', ['id' => $params['keyword']], ['like', 'mobile', $params['keyword']], ['like', 'nickname', $params['keyword']]])->select('id')->asArray()->all(); $user_id_arr = array_column($user_list, 'id'); // $where[] = ['user_id' => $user_id_arr]; $company_list = SalesCompany::lists(['where' => [['mall_id' => $this->mall_id], [ 'or', ['user_id' => $params['keyword']], ['like', 'name', $params['keyword']], ]]]); $company_id_arr = array_column($company_list, 'id'); $where[] = [ 'or', ['user_id' => $user_id_arr], ['company_id' => $company_id_arr], ]; } else { if ($params['keyword'] != '') { $where[] = ['user_id' => 0]; } } if (!empty($params['goods_name'])) { $goods_list = Goods::find()->where([ 'like', 'goods_name', $params['goods_name']])->select('id')->asArray()->all(); $goods_list_arr = array_column($goods_list, 'id'); $where[] = ['goods_id' => $goods_list_arr]; } if (!empty($params['order_id'])) $where[] = ['order_id' => $params['order_id']]; if (!empty($params['changes_type'])) $where[] = ['changes_type' => $params['changes_type']]; if (!empty($params['start'])) $where[] = ['>=', 'created_at', strtotime($params['start'] . ' 00:00:00')]; if (!empty($params['end'])) $where[] = ['>=', 'created_at', strtotime($params['end'] . ' 00:00:00')]; if(isset($params['order_type']) && !empty($params['order_type'])){ $where[] = ['order_type' => $params['order_type']]; } $params['order'] = 'id desc'; $params['with'] = ['goods', 'user']; $params['where'] = $where; if ($params['log_type'] == 'add') { $page_data = CloudStockTwoIncreaseDetail::listPage($params, false); } else { $page_data = CloudStockTwoDeductionDetail::listPage($params, false); } if (!empty($page_data['list'])) { foreach ($page_data['list'] as &$item) { if (isset($item['user']['id'])) { $item['agent_user_id'] = $item['user']['id']; $item['agent_user_avatar_url'] = $item['user']['avatar_url']; $item['agent_user_nickname'] = $item['user']['nickname']; } else { $item['agent_user_id'] = $item['user_id']; $item['agent_user_avatar_url'] = ''; if($item['is_sales'] && $item['company_id']){ $salesCompany = SalesCompany::findOne(['id'=>$item['company_id']]); $item['agent_user_id'] = $salesCompany ? $salesCompany->user_id : 0; $item['agent_user_nickname'] = $salesCompany ? $salesCompany->name : ''; }else{ $item['agent_user_nickname'] = '平台'; } } } } return $this->success('操作成功', $page_data); } return $this->render('stock-log'); } //不用验证权限 public function actionGetChangesTypeList() { $data = [ [ 'increase' => [ ['value' => 100, 'desc' => '向上级补货',], ['value' => 101, 'desc' => '上级给自己配货',], ['value' => 102, 'desc' => '退货退库存',], ['value' => 103, 'desc' => '系统添加',], ['value' => 104, 'desc' => '平台补货赠送',], ['value' => 105, 'desc' => '购买礼包赠送',] ], 'deduction' => [ ['value' => 200, 'desc' => '会员买货',], ['value' => 201, 'desc' => '给下级配货',], ['value' => 202, 'desc' => '下级向自己补货',], ['value' => 203, 'desc' => '自提货到线下',], ['value' => 204, 'desc' => '系统扣减',] ] ] ]; return $this->success('success', $data); } public function actionPriceLog() { CapitalLog::$capitalType = 'commission'; if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isPost) { $filename = '佣金列表-' . date('YmdHis') . '_' . rand(10000, 99999); $data = \Yii::$app->request->post(); $data['table'] = 'commission'; $data['mall_id'] = $this->mall_id; $data['from_type'] = CloudStockTwoEnum::ADDONS_NAME; $res = CsvExportHelper::exportDownLoadCenter($this->mall_id, $filename, DownloadEnum::TYPE_ASSETS, CapitalLog::class, 'exportAssets', $data); if ($res === false) return $this->error('加入导出任务失败' . CsvExportHelper::getStaticError()); return $this->success('添加导出任务成功,任务完成后请在下载中心进行下载!'); } $page = \Yii::$app->request->get('page') ?? 1; $limit = \Yii::$app->request->get('page_size') ?? $this->pageSize; $get = \Yii::$app->request->get(); $params[] = ['log.mall_id' => $this->mall_id]; if ($get['status'] == 0) { //查询冻结表,未结算数据 $params[] = ['in', 'log.status', [-1, 0]]; CapitalLog::$capitalType = 'commission_frozen'; } if (!empty($get['capital_type'])) $params[] = ['log.capital_type' => $get['capital_type']]; if (!empty($get['remark'])) $params[] = ['like', 'log.desc', $get['remark']]; if (!empty($get['keyword'])){ $user_list = User::lists([ 'where'=>[ ['or', ['like', 'nickname', $get['keyword']], ['like', 'mobile', $get['keyword']] ] ], 'select'=>'id', ]); $user_ids = array_column($user_list,'id'); } if(isset($user_ids)) $params[] = ['log.user_id' => $user_ids]; if (!empty($get['user_id'])) $params[] = ['log.user_id' => $get['user_id']]; $date = 0; if (!empty($get['date'])) { $start = strtotime(date($get['date'] . '-01')); $end = strtotime(date($get['date'] . '-t')); $params[] = ['>=', 'log.created_at', $start]; $params[] = ['<=', 'log.created_at', $end]; if (isset($params['end']) && $params['end'] != '') { $where[] = ['<', 'pl.created_at', strtotime($params['end'])]; } } $params[] = ['log.from_type' => CloudStockTwoEnum::ADDONS_NAME]; $params = [ 'alias' => 'log', 'select' => 'log.id,log.created_at,log.mall_id,log.user_id,log.change_type,log.change_num,log.current_num,log.desc,log.from_type, log.capital_type,log.created_at', 'where' => $params, 'order' => 'id desc', 'page' => $page, 'limit' => $limit, ]; $list = CapitalLog::listPage($params, false, true); $commission_map = UserWalletEnum::getCommissionMap(); $list['date'] = ''; $capital_type_map = UserWalletEnum::getCapitalTypeMapByCommission(); if (!empty($list['list'])) { $user_id_arr = array_column($list['list'],'user_id'); $user_arr = User::lists([ 'where'=>[ ['id'=>$user_id_arr] ], 'index'=>'id', ]); foreach ($list['list'] as &$lv) { $lv['source_text'] = ($commission_map[$lv['from_type']] ?? '') . ($capital_type_map[$lv['capital_type']] ? '-' . $capital_type_map[$lv['capital_type']] : ''); $lv['created_at'] = date('Y-m-d H:i:s', $lv['created_at']); $lv['nickname'] = ''; $lv['avatar_url'] = ''; $lv['mobile'] = ''; $lv['username'] = ''; if(isset($user_arr[$lv['user_id']])){ $lv['nickname'] = $user_arr[$lv['user_id']]['nickname']; $lv['avatar_url'] = $user_arr[$lv['user_id']]['avatar_url']; $lv['mobile'] = $user_arr[$lv['user_id']]['mobile']; $lv['username'] = $user_arr[$lv['user_id']]['username']; } } } // 业务类型 $list['commissionFromTypeList'] = $commission_map;//来源类型 $list['incomeCapitalTypeList'] = $capital_type_map;//佣金类型 // 导出字段列表 $list['export_list'] = CommissionLog::EXPORT_FIELD_LIST; CapitalLog::$capitalType = 'commission_frozen'; $frozen_capital_total = CapitalLog::find()->where(['mall_id' => $this->mall_id, 'from_type' => CloudStockTwoEnum::ADDONS_NAME, 'status' => 0])->sum('change_num'); $statistics_data['frozen_capital_total'] = 0; $statistics_data['commission_total'] = 0; if (!empty($frozen_capital_total)) $statistics_data['frozen_capital_total'] = bcsub($frozen_capital_total,1,2); CapitalLog::$capitalType = 'commission'; $commission_total = CapitalLog::find()->where(['mall_id' => $this->mall_id, 'from_type' => CloudStockTwoEnum::ADDONS_NAME,'change_type'=>'add'])->sum('change_num'); if(!empty($commission_total)) $statistics_data['commission_total'] = $commission_total; $statistics_data['commission_total']+=$statistics_data['frozen_capital_total']; $list['statistics_data'] = $statistics_data; $list['export_list'] = CapitalLog::exportFieldsList(); return $this->success('操作成功', $list); } else { $flag = \Yii::$app->request->post('flag'); if (empty($flag)) { return $this->render('price-log'); } else { // 导出数据 } } return $this->render('price-log'); } public function actionSettlement() { $wallet_type = 'commission'; CapitalLog::$capitalType = "{$wallet_type}_frozen"; $res = false; if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isPost) { $params = \Yii::$app->request->post(); $res = UserWalletService::unfrozen($params['id'], $wallet_type); } } return $this->success('成功', $res); } public function actionChangeGoodsStock() { if (\Yii::$app->request->isAjax) { if (\Yii::$app->request->isPost) { $params = \Yii::$app->request->post(); $res = Yii::$app->services->validate->validate($params, [ [['user_id', 'changes_dir', 'goods_id', 'num'], 'required'], [['remark'], 'safe'], ]); if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); if ($params['changes_dir'] == CloudStockTwoEnum::STOCK_CHANGE_ADD) { $changes_dir = CloudStockTwoEnum::CHANGE_TYPE_INCREASE_PLATFORM; } elseif ($params['changes_dir'] == CloudStockTwoEnum::STOCK_CHANGE_SUB) { $changes_dir = CloudStockTwoEnum::CHANGE_TYPE_DEDUTION_PLATFORM; } else { return $this->error("changes_dir错误"); } if ($params['num'] < 1) { return $this->error('操作数量最小值为0'); } $stock_params = [ 'goods_id' => $params['goods_id'], 'number' => $params['num'], 'user_id' => $params['user_id'], 'order_id' => 0, 'remark' => $params['remark'], ]; $res_handle_stock = CloudStockTwoGoodsStockLog::stockHandle($this->mall_id, $stock_params, $changes_dir); if (false === $res_handle_stock) return $this->error(CloudStockTwoGoodsStockLog::getStaticError()); return $this->success('操作成功', $res_handle_stock); } } return $this->error(); } }