You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

254 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace App\Http\Controllers\Admin;
use App\Exports\BaseExport;
use App\Helpers\ResponseCode;
use App\Models\AppointmentType;
use App\Models\Book;
use App\Models\Calendar;
use App\Models\Company;
use App\Models\CourseContentEvaluationAsk;
use App\Models\CourseContentEvaluationForm;
use App\Models\CustomForm;
use App\Models\CustomFormField;
use App\Models\EmailTemplate;
use App\Models\SupplyDemand;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Maatwebsite\Excel\Facades\Excel;
use Rap2hpoutre\FastExcel\FastExcel;
class CompanyController extends BaseController
{
/**
* 构造函数
*/
public function __construct()
{
parent::__construct(new Company());
}
/**
* @OA\Get(
* path="/api/admin/company/index",
* tags={"公司管理"},
* summary="列表",
* description="",
* @OA\Parameter(name="is_export", in="query", @OA\Schema(type="string"), required=false, description="是否导出0否1是"),
* @OA\Parameter(name="export_fields", in="query", @OA\Schema(type="string"), required=false, description="需要导出的字段数组"),
* @OA\Parameter(name="filter", in="query", @OA\Schema(type="string"), required=false, description="查询条件。数组"),
* @OA\Parameter(name="show_relation", in="query", @OA\Schema(type="string"), required=false, description="需要输出的关联关系数组包括teachercourseSettingscoursePeriods"),
* @OA\Parameter(name="page_size", in="query", @OA\Schema(type="string"), required=false, description="每页显示的条数"),
* @OA\Parameter(name="page", in="query", @OA\Schema(type="string"), required=false, description="页码"),
* @OA\Parameter(name="sort_name", in="query", @OA\Schema(type="string"), required=false, description="排序字段名字"),
* @OA\Parameter(name="sort_type", in="query", @OA\Schema(type="string"), required=false, description="排序类型"),
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Response(
* response="200",
* description="暂无"
* )
* )
*/
public function index()
{
$all = request()->all();
$list = $this->model->with(['users' => function ($query) {
$query->whereHas('courseSigns', function ($q) {
$q->where('status', 1);
})->with('courseSigns.course');
}])->where(function ($query) use ($all) {
if (isset($all['filter']) && !empty($all['filter'])) {
foreach ($all['filter'] as $condition) {
$key = $condition['key'] ?? null;
$op = $condition['op'] ?? null;
$value = $condition['value'] ?? null;
if (!isset($key) || !isset($op) || !isset($value)) {
continue;
}
if ($key == 'company_tag' && $value == '被投企业') {
$query->where('is_yh_invested', 1);
continue;
}
// 等于
if ($op == 'eq') {
$query->where($key, $value);
}
// 不等于
if ($op == 'neq') {
$query->where($key, '!=', $value);
}
// 大于
if ($op == 'gt') {
$query->where($key, '>', $value);
}
// 大于等于
if ($op == 'egt') {
$query->where($key, '>=', $value);
}
// 小于
if ($op == 'lt') {
$query->where($key, '<', $value);
}
// 小于等于
if ($op == 'elt') {
$query->where($key, '<=', $value);
}
// 模糊搜索
if ($op == 'like') {
$query->where($key, 'like', '%' . $value . '%');
}
// 否定模糊搜索
if ($op == 'notlike') {
$query->where($key, 'not like', '%' . $value . '%');
}
// 范围搜索
if ($op == 'range') {
list($from, $to) = explode(',', $value);
if (empty($from) || empty($to)) {
continue;
}
$query->whereBetween($key, [$from, $to]);
}
}
}
})->orderBy($all['sort_name'] ?? 'id', $all['sort_type'] ?? 'desc');
if (isset($all['is_export']) && !empty($all['is_export'])) {
$list = $list->get()->toArray();
$export_fields = $all['export_fields'] ?? [];
// 导出文件名字
$tableName = $this->model->getTable();
$filename = (new CustomForm())->getTableComment($tableName);
return Excel::download(new BaseExport($export_fields, $list, $tableName), $filename . date('YmdHis') . '.xlsx');
} else {
// 输出
$list = $list->paginate($all['page_size'] ?? 20);
}
return $this->success($list);
}
/**
* @OA\Get(
* path="/api/admin/company/show",
* tags={"公司管理"},
* summary="详情",
* description="",
* @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=true, description="id"),
* @OA\Parameter(name="show_relation", in="query", @OA\Schema(type="string"), required=false, description="需要输出的关联关系数组,填写输出指定数据"),
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Response(
* response="200",
* description="暂无"
* )
* )
*/
public function show()
{
$all = \request()->all();
$messages = [
'id.required' => 'Id必填',
];
$validator = Validator::make($all, [
'id' => 'required'
], $messages);
if ($validator->fails()) {
return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
}
$detail = $this->model->with(['users' => function ($query) {
$query->whereHas('courseSigns', function ($q) {
$q->where('status', 1);
})->with('courseSigns.course');
}])->find($all['id']);
return $this->success($detail);
}
/**
* @OA\Post(
* path="/api/admin/company/save",
* tags={"公司管理"},
* summary="保存",
* description="",
* @OA\Parameter(name="id", in="query", @OA\Schema(type="int"), required=true, description="Id(存在更新,不存在新增)"),
* @OA\Parameter(name="company_name", in="query", @OA\Schema(type="string", nullable=true), description="企业名字"),
* @OA\Parameter(name="company_attribute", in="query", @OA\Schema(type="string", nullable=true), description="行业类型"),
* @OA\Parameter(name="company_tag", in="query", @OA\Schema(type="string", nullable=true), description="标签"),
* @OA\Parameter(name="company_scale", in="query", @OA\Schema(type="string", nullable=true), description="企业规模"),
* @OA\Parameter(name="company_date", in="query", @OA\Schema(type="string", format="date", nullable=true), description="成立时间"),
* @OA\Parameter(name="company_legal_representative", in="query", @OA\Schema(type="string", nullable=true), description="法人代表"),
* @OA\Parameter(name="company_shareholder", in="query", @OA\Schema(type="string", nullable=true), description="股东信息"),
* @OA\Parameter(name="management_platform", in="query", @OA\Schema(type="string", nullable=true), description="管理平台"),
* @OA\Parameter(name="project_manager", in="query", @OA\Schema(type="string", nullable=true), description="项目经理"),
* @OA\Parameter(name="market_value", in="query", @OA\Schema(type="integer", format="int64", nullable=true), description="市值"),
* @OA\Parameter(name="company_fund", in="query", @OA\Schema(type="integer", format="int64", nullable=true), description="公司融资情况"),
* @OA\Parameter(name="valuation", in="query", @OA\Schema(type="integer", format="int64", nullable=true), description="估值"),
* @OA\Parameter(name="company_address", in="query", @OA\Schema(type="string", nullable=true), description="公司地址"),
* @OA\Parameter(name="company_area", in="query", @OA\Schema(type="string", nullable=true), description="公司区域"),
* @OA\Parameter(name="company_city", in="query", @OA\Schema(type="string", nullable=true), description="公司城市"),
* @OA\Parameter(name="company_market", in="query", @OA\Schema(type="string", nullable=true), description="是否上市0否1是"),
* @OA\Parameter(name="company_industry", in="query", @OA\Schema(type="string", nullable=true), description="公司所属行业"),
* @OA\Parameter(name="is_schoolmate", in="query", @OA\Schema(type="string", nullable=true), description="是否校友企业-0非校友1校友"),
* @OA\Parameter(name="company_need_fund", in="query", @OA\Schema(type="string", nullable=true), description="公司是否需要融资-0否1是"),
* @OA\Parameter(name="company_introduce", in="query", @OA\Schema(type="string", format="textarea", nullable=true), description="公司简介"),
* @OA\Parameter(name="company_other", in="query", @OA\Schema(type="string", nullable=true), description="其他"),
* @OA\Parameter(name="company_product", in="query", @OA\Schema(type="string", format="textarea", nullable=true), description="产品"),
* @OA\Parameter(name="overseas_experience", in="query", @OA\Schema(type="string", nullable=true), description="海外经验"),
* @OA\Parameter(name="sales_volume", in="query", @OA\Schema(type="string", nullable=true), description="销售额"),
* @OA\Parameter(name="tag", in="query", @OA\Schema(type="string", nullable=true), description="标签,千企走访这类的数据"),
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="认证token"),
* @OA\Response(
* response="200",
* description="操作成功"
* )
* )
*/
public function save()
{
$all = \request()->all();
DB::beginTransaction();
try {
if (isset($all['id'])) {
$model = $this->model->find($all['id']);
if (empty($model)) {
return $this->fail([ResponseCode::ERROR_BUSINESS, '数据不存在']);
}
} else {
$model = $this->model;
$all['admin_id'] = $this->getUserId();
$all['department_id'] = $this->getUser()->department_id;
}
$original = $model->getOriginal();
$model->fill($all);
$model->save();
DB::commit();
// 记录日志
$this->saveLogs($original, $model);
return $this->success($model);
} catch (\Exception $exception) {
DB::rollBack();
return $this->fail([$exception->getCode(), $exception->getMessage()]);
}
}
/**
* @OA\Get(
* path="/api/admin/company/destroy",
* tags={"公司管理"},
* summary="删除",
* description="",
* @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=true, description="id"),
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Response(
* response="200",
* description="暂无"
* )
* )
*/
public function destroy()
{
return parent::destroy();
}
}