Browse Source

海工商新后台首版

master
小菜逼 2 years ago
parent
commit
fc464d0c74
  1. 42
      app/Admin/Actions/Form/ImportExcelLoanForm.php
  2. 41
      app/Admin/Actions/Form/ImportExcelOldStudentForm.php
  3. 2
      app/Admin/Actions/Form/ImportExcelStudentForm.php
  4. 84
      app/Admin/Actions/Grid/ImportExcelLoan.php
  5. 83
      app/Admin/Actions/Grid/ImportExcelOldStudent.php
  6. 132
      app/Admin/Controllers/AdmissionNewStudentController.php
  7. 5
      app/Admin/Controllers/AllocationDormitoryBedController.php
  8. 3
      app/Admin/Controllers/HomeController.php
  9. 174
      app/Admin/Controllers/LoanStudentsListController.php
  10. 159
      app/Admin/Controllers/OrderController.php
  11. 32
      app/Admin/Controllers/UsersMemberController.php
  12. 43
      app/Admin/CustomButton/CompletedOffLineStepButton.php
  13. 44
      app/Admin/CustomButton/CompletedOnLineStepButton.php
  14. 44
      app/Admin/CustomButton/UserBaseInfoButton.php
  15. 14
      app/Admin/Extensions/Exporter/ImportBedExporter.php
  16. 143
      app/Admin/Extensions/Exporter/ImportCompletedOfflineStep.php
  17. 79
      app/Admin/Extensions/Exporter/ImportCompletedOnLineStepView.php
  18. 87
      app/Admin/Extensions/Exporter/ImportLoanExporter.php
  19. 153
      app/Admin/Extensions/Exporter/ImportOrder.php
  20. 149
      app/Admin/Extensions/Exporter/ImportStudentExporter.php
  21. 156
      app/Admin/Extensions/Exporter/ImportUserBaseInfo.php
  22. 4
      app/Admin/Metrics/Examples/AdmissionExcelUsers.php
  23. 142
      app/Admin/Metrics/Examples/AdmissionOnLineUser.php
  24. 2
      app/Admin/Metrics/Examples/AdmissionRegisterUsers.php
  25. 30
      app/Admin/Metrics/Examples/AdmissionStepUsers.php
  26. 64
      app/Admin/Renderable/StudentInfoTable.php
  27. 1
      app/Admin/routes.php
  28. 34
      app/Imports/FirstSheetImport.php
  29. 25
      app/Imports/LoanDataExcel.php
  30. 120
      app/Imports/LoanFirstSheetImport.php
  31. 25
      app/Imports/OldStudentDataExcel.php
  32. 165
      app/Imports/OldStudentFirstSheetImport.php
  33. 6
      app/Models/AdmissionNewStudents.php
  34. 15
      app/Models/CompletedOnLineStepView.php
  35. 23
      app/Models/LoanStudentsList.php
  36. 33
      app/Services/BaseServices.php
  37. 32
      app/Services/PublicServices.php
  38. 2
      config/admin.php
  39. 832
      dcat_admin_ide_helper.php
  40. 6
      resources/lang/zh_CN/admission-new-student.php
  41. 23
      resources/lang/zh_CN/loan-students-list.php
  42. 13
      resources/lang/zh_CN/order.php
  43. 1
      resources/lang/zh_CN/users-member.php
  44. 12
      routes/api.php

42
app/Admin/Actions/Form/ImportExcelLoanForm.php

@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
<?php
namespace App\Admin\Actions\Form;
use App\Imports\LoanDataExcel;
use Dcat\Admin\Widgets\Form;
use Symfony\Component\HttpFoundation\Response;
use App\Imports\DataExcel;
use Maatwebsite\Excel\Facades\Excel;
use Maatwebsite\Excel\Validators\ValidationException;
use Throwable;
class ImportExcelLoanForm extends Form
{
public function handle(array $input)
{
$file = env('APP_URL').'/upload/'.$input['file'];
try {
Excel::import(new LoanDataExcel(time()), $input['file'],'public');
//dcat-2.0版本写法
return $this->response()
->success('导入成功')
->redirect('/loan_students_list');
} catch (ValidationException $validationException) {
return Response::withException($validationException);
} catch (Throwable $throwable) {
//dcat 2.0写法
$this->response()->error(false);
return $this->response()->error($throwable->getMessage())->refresh();
}
}
public function form()
{
$this->file('file', '上传Excel')->rules('required', ['required' => '文件不能为空']);
}
}

41
app/Admin/Actions/Form/ImportExcelOldStudentForm.php

@ -0,0 +1,41 @@ @@ -0,0 +1,41 @@
<?php
namespace App\Admin\Actions\Form;
use App\Imports\OldStudentDataExcel;
use Dcat\Admin\Widgets\Form;
use Symfony\Component\HttpFoundation\Response;
use Maatwebsite\Excel\Facades\Excel;
use Maatwebsite\Excel\Validators\ValidationException;
use Throwable;
class ImportExcelOldStudentForm extends Form
{
public function handle(array $input)
{
$file = env('APP_URL').'/upload/'.$input['file'];
try {
Excel::import(new OldStudentDataExcel(time()), $input['file'],'public');
//dcat-2.0版本写法
return $this->response()
->success('导入成功')
->redirect('/admission_new_students');
} catch (ValidationException $validationException) {
return Response::withException($validationException);
} catch (Throwable $throwable) {
//dcat 2.0写法
$this->response()->error(false);
return $this->response()->error($throwable->getMessage())->refresh();
}
}
public function form()
{
$this->file('file', '上传Excel')->rules('required', ['required' => '文件不能为空']);
}
}

2
app/Admin/Actions/Form/ImportExcelStudentForm.php

@ -33,7 +33,7 @@ class ImportExcelStudentForm extends Form @@ -33,7 +33,7 @@ class ImportExcelStudentForm extends Form
public function form()
{
$this->file('file', '上传新生数据(Excel')->rules('required', ['required' => '文件不能为空']);
$this->file('file', '上传Excel')->rules('required', ['required' => '文件不能为空']);
}

84
app/Admin/Actions/Grid/ImportExcelLoan.php

@ -0,0 +1,84 @@ @@ -0,0 +1,84 @@
<?php
namespace App\Admin\Actions\Grid;
use App\Admin\Actions\Form\Import;
use App\Admin\Actions\Form\ImportExcelLoanForm;
use App\Admin\Actions\Form\ImportExcelStudentForm;
use Dcat\Admin\Admin;
use Dcat\Admin\Grid\Tools\AbstractTool;
use Dcat\Admin\Traits\HasPermissions;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
class ImportExcelLoan extends AbstractTool
{
/**
* @return string
*/
protected $title = 'Title';
public function render()
{
$id = "reset-pwd-{$this->getKey()}";
// 模态窗
$this->modal($id);
return <<<HTML
<span class="grid-expand" data-toggle="modal" data-target="#{$id}">
<a href="javascript:void(0)"><button class="btn btn-primary ">导入贷款名单</button></a>
</span>
HTML;
}
protected function modal($id)
{
$form = new ImportExcelLoanForm();
Admin::script('Dcat.onPjaxComplete(function () {
$(".modal-backdrop").remove();
$("body").removeClass("modal-open");
}, true)');
// 通过 Admin::html 方法设置模态窗HTML
Admin::html(
<<<HTML
<div class="modal fade" id="{$id}">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">导入数据</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
</div>
<div class="modal-body">
{$form->render()}
</div>
</div>
</div>
</div>
HTML
);
}
/**
* @param Model|Authenticatable|HasPermissions|null $user
*
* @return bool
*/
protected function authorize($user): bool
{
return true;
}
/**
* @return array
*/
protected function parameters()
{
return [];
}
}

83
app/Admin/Actions/Grid/ImportExcelOldStudent.php

@ -0,0 +1,83 @@ @@ -0,0 +1,83 @@
<?php
namespace App\Admin\Actions\Grid;
use App\Admin\Actions\Form\Import;
use App\Admin\Actions\Form\ImportExcelOldStudentForm;
use Dcat\Admin\Admin;
use Dcat\Admin\Grid\Tools\AbstractTool;
use Dcat\Admin\Traits\HasPermissions;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
class ImportExcelOldStudent extends AbstractTool
{
/**
* @return string
*/
protected $title = 'Title';
public function render()
{
$id = "reset-pwd-{$this->getKey()}-old";
// 模态窗
$this->modal($id);
return <<<HTML
<span class="grid-expand" data-toggle="modal" data-target="#{$id}">
<a href="javascript:void(0)"><button class="btn btn-primary ">导入老生名单</button></a>
</span>
HTML;
}
protected function modal($id)
{
$form = new ImportExcelOldStudentForm();
Admin::script('Dcat.onPjaxComplete(function () {
$(".modal-backdrop").remove();
$("body").removeClass("modal-open");
}, true)');
// 通过 Admin::html 方法设置模态窗HTML
Admin::html(
<<<HTML
<div class="modal fade" id="{$id}">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">导入数据</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
</div>
<div class="modal-body">
{$form->render()}
</div>
</div>
</div>
</div>
HTML
);
}
/**
* @param Model|Authenticatable|HasPermissions|null $user
*
* @return bool
*/
protected function authorize($user): bool
{
return true;
}
/**
* @return array
*/
protected function parameters()
{
return [];
}
}

132
app/Admin/Controllers/AdmissionNewStudentController.php

@ -2,13 +2,18 @@ @@ -2,13 +2,18 @@
namespace App\Admin\Controllers;
use App\Admin\Actions\Grid\ImportExcelOldStudent;
use App\Admin\Actions\Grid\ImportExcelStudent;
use App\Admin\CustomButton\CompletedOffLineStepButton;
use App\Admin\CustomButton\CompletedOnLineStepButton;
use App\Admin\CustomButton\UserBaseInfoButton;
use App\Admin\Extensions\Exporter\ImportCompletedOnLineStepView;
use App\Admin\Extensions\Exporter\ImportStudentExporter;
use App\Admin\Metrics\Examples\AdmissionExcelUsers;
use App\Admin\Metrics\Examples\AdmissionPayUsers;
use App\Admin\Metrics\Examples\AdmissionOnLineUser;
use App\Admin\Metrics\Examples\AdmissionRegisterUsers;
use App\Admin\Metrics\Examples\AdmissionStepUsers;
use App\Admin\Metrics\Examples\Sessions;
use App\Admin\Renderable\StudentInfoTable;
use App\Models\AdmissionNewStudents;
use App\Models\Config;
use App\Models\SecondaryCollege;
@ -20,7 +25,6 @@ use Dcat\Admin\Layout\Content; @@ -20,7 +25,6 @@ use Dcat\Admin\Layout\Content;
use Dcat\Admin\Layout\Row;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class AdmissionNewStudentController extends AdminController
@ -33,7 +37,7 @@ class AdmissionNewStudentController extends AdminController @@ -33,7 +37,7 @@ class AdmissionNewStudentController extends AdminController
->body(function (Row $row) {
$row->column(3, new AdmissionExcelUsers());
$row->column(3, new AdmissionRegisterUsers());
$row->column(3, new AdmissionPayUsers());
$row->column(3, new AdmissionOnLineUser());
$row->column(3, new AdmissionStepUsers());
})
->body($this->grid());
@ -55,6 +59,12 @@ class AdmissionNewStudentController extends AdminController @@ -55,6 +59,12 @@ class AdmissionNewStudentController extends AdminController
$grid->export(new ImportStudentExporter());
$grid->column('id')->sortable();
$grid->column('is_new_student')->display(function () {
return $this->is_new_student == 1 ? "新生" : "老生";
});
$grid->column('day_student')->display(function () {
return $this->day_student == 1 ? "否" : "是";
});
$grid->column('mobile');
$grid->column('name');
$grid->column('idCard');
@ -77,6 +87,9 @@ class AdmissionNewStudentController extends AdminController @@ -77,6 +87,9 @@ class AdmissionNewStudentController extends AdminController
return $info->speciality_name;
}
})->help("未显示专业时请检查是否已经分配专业");
$grid->column("student_info")->display('详细信息')->expand( function (){
return StudentInfoTable::make()->payload(["id"=>$this->id]);
})->help("对应收费系统相应代码");
$grid->column('sex')->display(function () {
return $this->sex == 0 ? "未知" : ($this->sex == 1 ? "男" : "女");
});
@ -88,11 +101,12 @@ class AdmissionNewStudentController extends AdminController @@ -88,11 +101,12 @@ class AdmissionNewStudentController extends AdminController
return "未注册";
})->help("此注册指是否已使用该身份证在迎新小程序上注册登录");
$grid->column('resuming_school')->display(function (){
if($this->resuming_school == AdmissionNewStudents::RESUMING_SCHOOL_ZERO) return "普通学生";
if($this->resuming_school == AdmissionNewStudents::RESUMING_SCHOOL_ONE) return "退伍复学";
if($this->resuming_school == AdmissionNewStudents::RESUMING_SCHOOL_TWO) return "普通复学";
})->help("区分统招或复学");;
$grid->column('annual_session');
$grid->column('is_push')->display(function (){
if($this->is_push == AdmissionNewStudents::IS_PUSH_NO) return "未推送";
if($this->is_push == AdmissionNewStudents::IS_PUSH_YES) return "已推送";
})->help("是否已推送到收费系统");;
$grid->column('is_test')->display(function (){
if($this->is_test == UsersMember::IS_TEST_YES){
return "是";
@ -110,6 +124,19 @@ class AdmissionNewStudentController extends AdminController @@ -110,6 +124,19 @@ class AdmissionNewStudentController extends AdminController
$filter->equal('mobile');
$filter->equal('name');
$filter->equal('idCard');
$filter->equal('annual_session');
$filter->where("secondary_college_id", function ($query) {
$specialityIds = Speciality::query()->where("secondary_college_id", $this->input)->get()->toArray();
if(!empty($specialityIds)){
$specialityIds = array_column($specialityIds, "id");
}
$query->whereIn('speciality_id', $specialityIds);
})->select(function(){
return SecondaryCollege::query()->pluck("name", "id");
});
$filter->equal('speciality_id')->select(function (){
$list = Speciality::query()->where("status", Speciality::STATUS_YES)->get()->toArray();
if(empty($list)){
@ -142,13 +169,9 @@ class AdmissionNewStudentController extends AdminController @@ -142,13 +169,9 @@ class AdmissionNewStudentController extends AdminController
"2" => "已注册"
];
});
$filter->equal('resuming_school')->select(function (){
return [
"0" => "普通学生",
"1" => "退伍复学",
"2" => "普通复学"
];
});
$filter->equal('is_new_student')->select([1 => "新生", 2 => "老生"]);
$filter->equal('day_student')->select([1 => "否", 2 => "是"]);
$filter->equal('is_push')->select([1 => "否", 2 => "是"]);
$filter->equal('status')->select([1 => "正常", 2 => "禁用"]);
$filter->between('create_time')->datetime()->toTimestamp();
});
@ -163,9 +186,14 @@ class AdmissionNewStudentController extends AdminController @@ -163,9 +186,14 @@ class AdmissionNewStudentController extends AdminController
$grid->tools(function (Grid\Tools $tools) {
// excle 导入
$tools->append(new ImportExcelStudent());
$tools->append(new ImportExcelOldStudent());
$tools->append(new CompletedOnLineStepButton());
$tools->append(new CompletedOffLineStepButton());
$tools->append(new UserBaseInfoButton());
});
//下载模版
$grid->tools('<a href="/storage/excelTemplate/studentTemplate.xlsx" download="studentTemplate.xlsx" target="_blank"><button class="btn btn-success ">下载新生模版</button></a>');
$grid->tools('<a href="/storage/excelTemplate/newStudentTemplate.xlsx" download="newStudentTemplate.xlsx" target="_blank"><button class="btn btn-success ">下载新生模版</button></a>');
$grid->tools('<a href="/storage/excelTemplate/oldStudentTemplate.xlsx" download="oldStudentTemplate.xlsx" target="_blank"><button class="btn btn-danger ">下载老生模版</button></a>');
});
}
@ -209,7 +237,7 @@ class AdmissionNewStudentController extends AdminController @@ -209,7 +237,7 @@ class AdmissionNewStudentController extends AdminController
$form->text('mobile');
$form->text('name')->required();
$form->text('idCard')->required();
$form->text('admission_code');
$form->text('admission_code')->required();
$form->select('sex')->options([0 => "未知", 1 => '男', 2 => '女'])->required();
$form->select("speciality_id")->options(function () {
@ -227,12 +255,43 @@ class AdmissionNewStudentController extends AdminController @@ -227,12 +255,43 @@ class AdmissionNewStudentController extends AdminController
})->required();
$form->select('status', '状态')->options([1 => '正常', 2 => '禁用'])->required();
$form->select('is_test', '测试账号')->options([1 => '否', 2 => '是'])->required();
$form->select('resuming_school')->options([
"0" => "普通学生",
"1" => "退伍复学",
"2" => "普通复学"
$form->select('day_student')->options([1 => '否', 2 => '是'])->required();
$form->select('is_new_student')
->when(1, function (Form $form) {
// 值为1时显示
$form->text('nj', "年级")->rules('required_if:is_new_student,1', ['required_if' => '年级字段不能为空']);
$form->text('xydm', "学院代码")->rules('required_if:is_new_student,1', ['required_if' => '学院代码字段不能为空']);
$form->text('zydm',"专业代码")->rules('required_if:is_new_student,1', ['required_if' => '专业代码字段不能为空']);
$form->text('bjdm', "班级代码");
$form->text('xz', "学制代码")->rules('required_if:is_new_student,1', ['required_if' => '学制代码字段不能为空']);
$form->text('xslbdm', "学生类别代码")->rules('required_if:is_new_student,1', ['required_if' => '学生类别代码字段不能为空']);
$form->text('xjztdm', "学籍状态代码")->rules('required_if:is_new_student,1', ['required_if' => '学籍状态代码字段不能为空']);
$form->select('sfzx', "是否在校代码")->options([
0 => "否",
1 => "是"
])->rules('required_if:is_new_student,1', ['required_if' => '是否在校代码字段不能为空']);
$form->select('is_equivalent', "考生类型")->options([
1 => "统招生",
2 => "单招生",
])->rules('required_if:is_new_student,1', ['required_if' => '考生类型字段不能为空']);
$form->select('is_four_type', "考生分类")->options([
1 => "高职本科3+2",
2 => "四类人员",
3 => "普通考生",
4 => "中职3+2",
])->rules('required_if:is_new_student,1', ['required_if' => '考生分类字段不能为空']);
$form->text('province', "招生省份")->rules('required_if:is_new_student,1', ['required_if' => '招生省份字段不能为空']);
})->when(2, function (Form $form) {
$form->text('old_student_bed_info', "床位信息(老生)")->rules('required_if:is_new_student,2', ['required_if' => '床位信息(老生)字段不能为空']);
})->options([1 => '新生', 2 => '老生'])->required();
$form->select('is_five_year', "是否为五年制一贯制")->options([
1 => "否",
2 => "是",
])->required();
$form->hidden("annual_session");
$form->hidden("create_time");
$form->hidden("update_time");
@ -276,6 +335,7 @@ class AdmissionNewStudentController extends AdminController @@ -276,6 +335,7 @@ class AdmissionNewStudentController extends AdminController
// 删除用户提交的数据
$form->deleteInput('admission_code');
}
}else{
$form->update_time =time();
if(!$form->mobile){
@ -288,6 +348,32 @@ class AdmissionNewStudentController extends AdminController @@ -288,6 +348,32 @@ class AdmissionNewStudentController extends AdminController
}
}
//检测是新生或老生
if($form->is_new_student == AdmissionNewStudents::IS_NEW_STUDENT_YES){
//新生时
// 删除用户提交的数据
$form->deleteInput('old_student_bed_info');
if(!$form->bjdm){
$form->deleteInput('bjdm');
}
}
if($form->is_new_student == AdmissionNewStudents::IS_NEW_STUDENT_NO){
//老生时
// 删除用户提交的数据
$form->deleteInput('nj');
$form->deleteInput('xydm');
$form->deleteInput('zydm');
$form->deleteInput('bjdm');
$form->deleteInput('xz');
$form->deleteInput('xslbdm');
$form->deleteInput('xjztdm');
$form->deleteInput('sfzx');
$form->deleteInput('is_equivalent');
$form->deleteInput('is_four_type');
$form->deleteInput('province');
}
//初始化专业名及二级学院名
$specialityName = "";

5
app/Admin/Controllers/AllocationDormitoryBedController.php

@ -19,16 +19,13 @@ use App\Models\MultipleWorld; @@ -19,16 +19,13 @@ use App\Models\MultipleWorld;
use App\Models\SecondaryCollege;
use App\Models\SelectedDormitory;
use App\Models\Speciality;
use App\Models\UsersMember;
use Dcat\Admin\Actions\Action;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Layout\Content;
use Dcat\Admin\Layout\Row;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Widgets\Metrics\Card;
use Illuminate\Support\MessageBag;
class AllocationDormitoryBedController extends AdminController
{

3
app/Admin/Controllers/HomeController.php

@ -4,6 +4,7 @@ namespace App\Admin\Controllers; @@ -4,6 +4,7 @@ namespace App\Admin\Controllers;
use App\Admin\Metrics\Examples;
use App\Admin\Metrics\Examples\AdmissionExcelUsers;
use App\Admin\Metrics\Examples\AdmissionOnLineUser;
use App\Admin\Metrics\Examples\AdmissionPayUsers;
use App\Admin\Metrics\Examples\AdmissionStepUsers;
use App\Admin\Metrics\Examples\SelectedDormitoryTotal;
@ -29,7 +30,7 @@ class HomeController extends Controller @@ -29,7 +30,7 @@ class HomeController extends Controller
$row->column(6, new Examples\NewUsers());
$row->column(6, new TotalUsers());
$row->column(6, new AdmissionExcelUsers());
$row->column(6, new AdmissionPayUsers());
$row->column(6, new AdmissionOnLineUser());
$row->column(6, new AdmissionStepUsers());
$row->column(6, new SelectedDormitoryTotal());
});

174
app/Admin/Controllers/LoanStudentsListController.php

@ -0,0 +1,174 @@ @@ -0,0 +1,174 @@
<?php
namespace App\Admin\Controllers;
use App\Admin\Actions\Grid\ImportExcelLoan;
use App\Admin\Extensions\Exporter\ImportLoanExporter;
use App\Models\Config;
use App\Models\LoanStudentsList;
use Dcat\Admin\Actions\Action;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
class LoanStudentsListController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new LoanStudentsList(), function (Grid $grid) {
//开启边框模式
$grid->withBorder();
// 开启字段选择器功能
$grid->showColumnSelector();
//开启导出功能
$grid->export(new ImportLoanExporter());
$grid->column('id')->sortable();
$grid->column('sfzh');
$grid->column('xh');
$grid->column('xm');
$grid->column('annual_session');
$grid->column('fylx')->display(function(){
if($this->fylx == LoanStudentsList::FYLX_JH) return "贷款计划";
if($this->fylx == LoanStudentsList::FYLX_DZ) return "贷款到账";
});
$grid->column('total');
$grid->column('xfje')->help("程序计算出来的学费抵扣金额");
$grid->column('zsje')->help("程序计算出来的住宿费抵扣金额");
$grid->column('is_five_year')->display(function(){
if($this->is_push == LoanStudentsList::IS_FIVE_YEAR_YES) return "是";
if($this->is_push == LoanStudentsList::IS_FIVE_YEAR_NO) return "否";
});
$grid->column('is_push')->display(function(){
if($this->is_push == LoanStudentsList::IS_PUSH_YES) return "已推送";
if($this->is_push == LoanStudentsList::IS_PUSH_NO) return "未推送";
});
$grid->column('create_time')->display(function (){
if(!empty($this->create_time)){
return date("Y-m-d H:i:s", $this->create_time);
}
})->sortable();
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('sfzh');
$filter->equal('xh');
$filter->equal('xm');
$filter->equal('annual_session');
$filter->equal('fylx')->select(function (){
return [
LoanStudentsList::FYLX_JH => "贷款计划",
LoanStudentsList::FYLX_DZ => "贷款到账"
];
});
});
//禁用批量操作按钮
$grid->disableBatchDelete();
// 禁用详情按钮
$grid->disableViewButton();
$grid->tools(function (Grid\Tools $tools) {
// excle 导入
$tools->append(new ImportExcelLoan());
});
//下载模版
$grid->tools('<a href="/storage/excelTemplate/loanTemplate.xlsx" download="loanTemplate.xlsx" target="_blank"><button class="btn btn-success ">下载贷款名单模版</button></a>');
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new LoanStudentsList(), function (Show $show) {
$show->field('id');
$show->field('sfzh');
$show->field('xh');
$show->field('xm');
$show->field('annual_session');
$show->field('fylx');
$show->field('total');
$show->field('xfje');
$show->field('zsje');
$show->field('is_push');
$show->field('create_time');
$show->field('update_time');
$show->field('is_five_year');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new LoanStudentsList(), function (Form $form) {
$form->display('id');
$form->text('sfzh')->required();
$form->text('xh')->required();
$form->text('xm')->required();
$form->select('fylx')->options([
LoanStudentsList::FYLX_JH => "贷款计划",
LoanStudentsList::FYLX_DZ => "贷款到账"
])->required();
$form->select('is_five_year')->options([
LoanStudentsList::IS_FIVE_YEAR_YES => "是",
LoanStudentsList::IS_FIVE_YEAR_NO => "否"
])->required();
$form->number('total')->required();
$form->hidden("annual_session");
$form->hidden("create_time");
$form->hidden("update_time");
// 去除删除按钮
$form->disableDeleteButton();
// 去除跳转详情按钮
$form->disableViewButton();
$form->footer(function ($footer) {
// 去掉`查看`checkbox
$footer->disableViewCheck();
// 去掉`继续编辑`checkbox
$footer->disableEditingCheck();
// 去掉`继续创建`checkbox
$footer->disableCreatingCheck();
});
//保存前回调
$form->saving(function (Form $form) {
if ($form->isCreating()) {
$config = Config::query()->where([
"unique_identification" => "annual_session"
])->first();
$form->annual_session = $config->data;
$form->create_time =time();
// 删除用户提交的数据
$form->deleteInput('update_time');
}else{
$form->update_time =time();
}
});
});
}
}

159
app/Admin/Controllers/OrderController.php

@ -2,11 +2,18 @@ @@ -2,11 +2,18 @@
namespace App\Admin\Controllers;
use App\Admin\Extensions\Exporter\ImportOrder;
use App\Admin\Renderable\PayProjectTable;
use App\Models\Order;
use App\Models\PaymentList;
use App\Models\SecondaryCollege;
use App\Models\Speciality;
use App\Models\UsersMember;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Widgets\Table;
class OrderController extends AdminController
{
@ -18,30 +25,146 @@ class OrderController extends AdminController @@ -18,30 +25,146 @@ class OrderController extends AdminController
protected function grid()
{
return Grid::make(new Order(), function (Grid $grid) {
//开启边框模式
$grid->withBorder();
// 开启字段选择器功能
$grid->showColumnSelector();
//开启导出功能
$grid->export(new ImportOrder());
$grid->column('id')->sortable();
$grid->column('products_name');
$grid->column('unique_number');
$grid->column('annual_session')->help("对应缴费年份,如2022-2023则表示缴纳该年份的费用");
$grid->column('idcard')->display(function($info){
$info = UsersMember::query()->where("unique_number", $this->unique_number)->first();
if(!empty($info)){
return $info->idcard;
}
})->help("不显示时代表未找到该用户");
$grid->column('mobile')->display(function($info){
$info = UsersMember::query()->where("unique_number", $this->unique_number)->first();
if(!empty($info)){
return $info->mobile;
}
})->help("不显示时代表未找到该用户");
$grid->column('user_name')->display(function(){
$info = UsersMember::query()->where("unique_number", $this->unique_number)->first();
if(!empty($info)){
$str = '';
if($info->is_test == 2){
$str = "(测试)";
}
return $info->name.$str;
}
})->help("不显示时代表未找到该用户");
$grid->column('sex', __('性别'))->display(function(){
$info = UsersMember::query()->where("unique_number", $this->unique_number)->first();
if(empty($info)){
return "不存在此账号";
}
if($info->sex == 1){
return "男";
}
if($info->sex == 2){
return "女";
}
return "未知";
});
$grid->column('speciality_id')->display(function(){
$info = UsersMember::query()->where("unique_number", $this->unique_number)->first();
if(!empty($info)){
$speciality = Speciality::query()->where("id", $info->speciality_id)->first();
if(!empty($speciality)){
$college = SecondaryCollege::query()->where("id", $speciality->secondary_college_id)->first();
if(!empty($college)){
return $speciality->speciality_name."({$college->name})";
}
}
}
})->limit(20);;
$grid->column('orders_num');
$grid->column('amounts_price');
$grid->column('transaction_id')->limit(10);
$grid->column('price');
$grid->column('transaction_id');
$grid->column('pay_type');
$grid->column('pay_time');
$grid->column('create_time');
$grid->column('update_time');
$grid->column('status');
$grid->column('annual_session');
$grid->column('payment_data');
$grid->column('source');
$grid->column('source_orders_num');
$grid->column('dormitory_price');
$grid->column('source_pay_time');
$grid->column('msg');
$grid->column('pay_type')->display(function(){
$msg = "未知";
if($this->pay_type == Order::PAY_TYPE_WECHAT) $msg = "微信支付";
return $msg;
});
$grid->column('pay_time')->display(function (){
$time_msg = "未支付";
if(!empty($this->pay_time)) $time_msg = date("Y-m-d H:i:s", $this->pay_time);
return $time_msg;
});
$grid->column('status')->display(function(){
if($this->status == Order::STATUS_UNPAID) return "未支付";
if($this->status == Order::STATUS_PAID) return "已支付";
if($this->status == Order::STATUS_CANCEL) return "已取消";
});
$grid->column('is_new_student_order')->display(function(){
if($this->is_new_student_order == Order::IS_NEW_STUDENT_ORDER_NEW) return "新生订单";
if($this->is_new_student_order == Order::IS_NEW_STUDENT_ORDER_NO) return "老生订单";
});
$grid->column("payment_data")->display('缴费项目')->modal( function (){
$resultData = [];
$nameData = [];
$data = json_decode($this->payment_data, true);
$payKeys = array_keys($data);
$payMentList = PaymentList::query()->where([
"unique_number" => $this->unique_number,
"annual_session" => $this->annual_session
])->whereIn("project_code", $payKeys)->get()->toArray();
if(!empty($payMentList)){
$payMentList = array_column($payMentList, null, "project_code");
foreach($data as $key => $item){
array_push($resultData, $item);
array_push($nameData, $payMentList[$key]['project_name']);
}
}
return Table::make($nameData, [$resultData]);
});
$grid->column('msg')->limit(10);
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
$filter->where("unique_number", function ($query) {
$unique_number = "";
$userInfo = UsersMember::query()->where('mobile', $this->input)->orWhere('idcard', $this->input)->orWhere('name', $this->input)->first(['unique_number']);
if(!empty($userInfo)){
$unique_number = $userInfo->unique_number;
}
$query->where('unique_number', $unique_number);
}, '手机号/身份证/姓名');
$filter->equal('annual_session');
$filter->equal('is_new_student_order')->select(function (){
return [
Order::IS_NEW_STUDENT_ORDER_NEW => "新生",
Order::IS_NEW_STUDENT_ORDER_NO => "老生"
];
});
$filter->equal('status')->select(function (){
return [
Order::STATUS_UNPAID => "未支付",
Order::STATUS_PAID => "已支付",
Order::STATUS_CANCEL => "已取消"
];
});
$filter->between('pay_time')->datetime()->toTimestamp();
});
// 禁用创建按钮
$grid->disableCreateButton();
// 禁用删除按钮
$grid->disableDeleteButton();
//禁用批量操作按钮
$grid->disableBatchDelete();
// 禁用详情按钮
$grid->disableViewButton();
});
}

32
app/Admin/Controllers/UsersMemberController.php

@ -6,8 +6,6 @@ namespace App\Admin\Controllers; @@ -6,8 +6,6 @@ namespace App\Admin\Controllers;
use App\Admin\Extensions\Exporter\StudentExporter;
use App\Admin\Metrics\Examples\NewUsers;
use App\Admin\Metrics\Examples\TotalUsers;
use App\Admin\Renderable\OnLineStepTable;
use App\Admin\Renderable\UserFamilyInfoTable;
use App\Admin\Renderable\UserFamilyMeberTable;
use App\Admin\Renderable\UserFamilyTable;
use App\Models\AdmissionNewStudents;
@ -18,6 +16,7 @@ use App\Models\SecondaryCollege; @@ -18,6 +16,7 @@ use App\Models\SecondaryCollege;
use App\Models\Speciality;
use App\Models\Step;
use App\Models\UsersMember;
use App\Services\PublicServices;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Layout\Content;
@ -58,6 +57,10 @@ class UsersMemberController extends AdminController @@ -58,6 +57,10 @@ class UsersMemberController extends AdminController
$grid->export(new StudentExporter());
$grid->column('id')->sortable();
$grid->column('identity')->display(function () {
$iden = PublicServices::getInstance()->checkIsNewOldStudent($this->idcard);
return $iden == 1 ? "新生" : "老生";
});
$grid->column('mobile');
$grid->column('unique_number');
$grid->column('name');
@ -152,6 +155,31 @@ class UsersMemberController extends AdminController @@ -152,6 +155,31 @@ class UsersMemberController extends AdminController
$filter->equal('name');
$filter->equal('idcard');
$filter->equal('status')->select([1 => "正常", 2 => "禁用"]);
$filter->where("identity", function ($query){
$studentsIds = AdmissionNewStudents::query()->where([
"is_new_student" => $this->input
])->get()->toArray();
if(!empty($studentsIds)){
$studentsIds = array_column($studentsIds,"idCard");
}
$query->whereIn('idcard', $studentsIds);
})->select([
"1" => "新生",
"2" => "老生"
]);
$filter->where("secondary_college_id", function ($query) {
$specialityIds = Speciality::query()->where("secondary_college_id", $this->input)->get()->toArray();
if(!empty($specialityIds)){
$specialityIds = array_column($specialityIds, "id");
}
$query->whereIn('speciality_id', $specialityIds);
})->select(function(){
return SecondaryCollege::query()->pluck("name", "id");
});
$filter->equal('speciality_id')->select(function (){
$list = Speciality::query()->where("status", Speciality::STATUS_YES)->get()->toArray();
if(empty($list)){

43
app/Admin/CustomButton/CompletedOffLineStepButton.php

@ -0,0 +1,43 @@ @@ -0,0 +1,43 @@
<?php
namespace App\Admin\CustomButton;
use Dcat\Admin\Grid\Tools\AbstractTool;
use Dcat\Admin\Traits\HasPermissions;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
class CompletedOffLineStepButton extends AbstractTool
{
public function render()
{
$id = "reset-completed-off-line-{$this->getKey()}";
// 返回自定义按钮的HTML代码
return <<<HTML
<span class="grid-expand" data-toggle="modal" data-target="#{$id}">
<a href="/api/import/completedOffLineStep" target="_blank"><button class="btn btn-info ">导出线下报到明细</button></a>
</span>
HTML;
}
/**
* @param Model|Authenticatable|HasPermissions|null $user
*
* @return bool
*/
protected function authorize($user): bool
{
return true;
}
/**
* @return array
*/
protected function parameters()
{
return [];
}
}

44
app/Admin/CustomButton/CompletedOnLineStepButton.php

@ -0,0 +1,44 @@ @@ -0,0 +1,44 @@
<?php
namespace App\Admin\CustomButton;
use App\Admin\Extensions\Exporter\ImportCompletedOnLineStepView;
use Dcat\Admin\Grid\Tools\AbstractTool;
use Dcat\Admin\Traits\HasPermissions;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
class CompletedOnLineStepButton extends AbstractTool
{
public function render()
{
$id = "reset-completed-on-line-{$this->getKey()}";
// 返回自定义按钮的HTML代码
return <<<HTML
<span class="grid-expand" data-toggle="modal" data-target="#{$id}">
<a href="/api/import/completedOnLineStep" target="_blank"><button class="btn btn-warning ">导出已完成线上步骤名单</button></a>
</span>
HTML;
}
/**
* @param Model|Authenticatable|HasPermissions|null $user
*
* @return bool
*/
protected function authorize($user): bool
{
return true;
}
/**
* @return array
*/
protected function parameters()
{
return [];
}
}

44
app/Admin/CustomButton/UserBaseInfoButton.php

@ -0,0 +1,44 @@ @@ -0,0 +1,44 @@
<?php
namespace App\Admin\CustomButton;
use App\Admin\Extensions\Exporter\ImportCompletedOnLineStepView;
use Dcat\Admin\Grid\Tools\AbstractTool;
use Dcat\Admin\Traits\HasPermissions;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
class UserBaseInfoButton extends AbstractTool
{
public function render()
{
$id = "reset-user-base-info-{$this->getKey()}";
// 返回自定义按钮的HTML代码
return <<<HTML
<span class="grid-expand" data-toggle="modal" data-target="#{$id}">
<a href="/api/import/userBaseInfoExcel" target="_blank"><button class="btn btn-danger ">导出学生基本信息</button></a>
</span>
HTML;
}
/**
* @param Model|Authenticatable|HasPermissions|null $user
*
* @return bool
*/
protected function authorize($user): bool
{
return true;
}
/**
* @return array
*/
protected function parameters()
{
return [];
}
}

14
app/Admin/Extensions/Exporter/ImportBedExporter.php

@ -50,6 +50,7 @@ class ImportBedExporter extends AbstractExporter implements WithMapping, WithHea @@ -50,6 +50,7 @@ class ImportBedExporter extends AbstractExporter implements WithMapping, WithHea
"mobile" => "手机号",
"idcard" => "身份证"
];
parent::__construct();
}
@ -66,8 +67,6 @@ class ImportBedExporter extends AbstractExporter implements WithMapping, WithHea @@ -66,8 +67,6 @@ class ImportBedExporter extends AbstractExporter implements WithMapping, WithHea
// return collect($this->buildData());
//取出床位详细信息
// $dormitoryBed = AllocationDormitoryBed::query()->where("id", $id)->first();
//宿舍类型
$dormitoryTypeInfo = DormitoryType::query()->get()->toArray();
@ -119,6 +118,8 @@ class ImportBedExporter extends AbstractExporter implements WithMapping, WithHea @@ -119,6 +118,8 @@ class ImportBedExporter extends AbstractExporter implements WithMapping, WithHea
if(!empty($selectList)){
$selectListIds = array_column($selectList, null, "allocation_dormitory_id");
$userList = UsersMember::query()->whereIn("unique_number", array_column($selectList, "unique_number"))->get()->toArray();
$userList = array_column($userList, null, "unique_number");
}
$chunk_list = array_chunk($this->buildData(), 1000);
@ -134,10 +135,11 @@ class ImportBedExporter extends AbstractExporter implements WithMapping, WithHea @@ -134,10 +135,11 @@ class ImportBedExporter extends AbstractExporter implements WithMapping, WithHea
if(!empty($selectListIds)){
if(array_key_exists($item["id"], $selectListIds)){
$userInfo = UsersMember::query()->where("unique_number", $selectListIds[$item["id"]]["unique_number"])->first();
$mobile = $userInfo->mobile;
$name = $userInfo->name;
$idcard = $userInfo->idcard;
if(array_key_exists($selectListIds[$item["id"]]["unique_number"], $userList)){
$mobile = $userList[$selectListIds[$item["id"]]["unique_number"]]["mobile"];
$name = $userList[$selectListIds[$item["id"]]["unique_number"]]["name"];
$idcard = $userList[$selectListIds[$item["id"]]["unique_number"]]["idcard"];
}
}
}

143
app/Admin/Extensions/Exporter/ImportCompletedOfflineStep.php

@ -0,0 +1,143 @@ @@ -0,0 +1,143 @@
<?php
namespace App\Admin\Extensions\Exporter;
use App\Models\CompletedOfflineStep;
use App\Models\Config;
use App\Models\SecondaryCollege;
use App\Models\Speciality;
use App\Models\UsersMember;
use Dcat\Admin\Grid\Exporters\AbstractExporter;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
class ImportCompletedOfflineStep extends AbstractExporter implements WithMapping, WithHeadings, FromCollection
{
use Exportable;
protected $fileName = '线下报到明细';
protected $titles = [];
public function __construct()
{
$this->fileName = $this->fileName.'_'.time().'.xlsx';//拼接下载文件名称
$this->titles = [
"name" => '姓名',
"mobile" => '手机',
"idcard" => '身份证',
"sex" => '性别',
"zb" => '招办签到',
"xy" => '二级学院签到',
"sg" => '宿管办签到',
"speciality_name" => '专业',
"conllege_name" => '二级学院',
"annual_session" => '年份',
];
parent::__construct();
}
public function export()
{
// TODO: Implement export() method.
$this->download($this->fileName)->prepare(request())->send();
exit;
}
public function collection()
{
// TODO: Implement collection() method.
// return collect($this->buildData());
//取出当前年份
$config = Config::query()->where([
"unique_identification" => "annual_session"
])->first();
$list = CompletedOfflineStep::query()->where([
"annual_session" => $config->data,
])->get()->toArray();
if(!empty($list)){
//专业信息
$specialityList = Speciality::query()->get()->toArray();
$specialityList = array_column($specialityList, null,"id");
//二级学院
$secondary_college = SecondaryCollege::query()->get()->toArray();
$secondary_college = array_column($secondary_college, null,"id");
$numberList = array_unique(array_column($list, "unique_number"));
$userList = UsersMember::query()->whereIn("unique_number", $numberList)->get()->toArray();
$userList = array_column($userList, null, "unique_number");
$data = [];
foreach($list as $item){
if(array_key_exists($item["unique_number"], $data)){
if(!in_array($item["step_id"], $data[$item["unique_number"]])){
array_push($data[$item["unique_number"]], $item["step_id"]);
}
}else{
$data[$item["unique_number"]][] = $item["step_id"];
}
}
$addList = [];
foreach($data as $key => $item){
$zb = "否";
$xy = "否";
$sg = "否";
if(in_array(2, $item)) $zb = "是";
if(in_array(3, $item)) $xy = "是";
if(in_array(4, $item)) $sg = "是";
$add = [
"name" => $userList[$key]["name"],
"mobile" => $userList[$key]["mobile"],
"idcard" => $userList[$key]["idcard"],
"sex" => $userList[$key]["sex"] == 1 ? "男" : "女",
"zb" => $zb,
"xy" => $xy,
"sg" => $sg,
"speciality_name" => $specialityList[$userList[$key]["speciality_id"]]["speciality_name"],
"conllege_name" => $secondary_college[$specialityList[$userList[$key]["speciality_id"]]['secondary_college_id']]['name'],
"annual_session" => $config->data,
];
array_push($addList, $add);
}
return collect($addList);
}
}
public function headings(): array
{
// TODO: Implement headings() method.
return $this->titles();
}
public function map($row): array
{
// TODO: Implement map() method.
return [
$row["name"],
$row["mobile"],
"'".$row['idcard'].'',
$row["sex"],
$row["zb"],
$row["xy"],
$row["sg"],
$row["speciality_name"],
$row["conllege_name"],
$row["annual_session"],
];
}
}

79
app/Admin/Extensions/Exporter/ImportCompletedOnLineStepView.php

@ -0,0 +1,79 @@ @@ -0,0 +1,79 @@
<?php
namespace App\Admin\Extensions\Exporter;
use App\Models\CompletedOnLineStepView;
use App\Models\Config;
use Dcat\Admin\Grid\Exporters\AbstractExporter;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
class ImportCompletedOnLineStepView extends AbstractExporter implements WithMapping, WithHeadings, FromCollection
{
use Exportable;
protected $fileName = '已完成线上报到名单';
protected $titles = [];
public function __construct()
{
$this->fileName = $this->fileName.'_'.time().'.xlsx';//拼接下载文件名称
$this->titles = [
'name'=> '姓名',
'mobile'=> '手机',
'idcard'=> '身份证',
'sex'=> '性别',
'speciality_name'=> '专业',
'conllege_name'=> '二级学院',
'annual_session'=> '年份',
];
parent::__construct();
}
public function export()
{
// TODO: Implement export() method.
$this->download($this->fileName)->prepare(request())->send();
exit;
}
public function collection()
{
// TODO: Implement collection() method.
// return collect($this->buildData());
//取出当前年份
$config = Config::query()->where([
"unique_identification" => "annual_session"
])->first();
$list = CompletedOnLineStepView::query()->where([
"annual_session" => $config->data,
])->get()->toArray();
return collect($list);
}
public function headings(): array
{
// TODO: Implement headings() method.
return $this->titles();
}
public function map($row): array
{
// TODO: Implement map() method.
return [
$row["name"],
$row["mobile"],
"'".$row['idcard'].'',
$row["sex"],
$row["speciality_name"],
$row["conllege_name"],
$row["annual_session"],
];
}
}

87
app/Admin/Extensions/Exporter/ImportLoanExporter.php

@ -0,0 +1,87 @@ @@ -0,0 +1,87 @@
<?php
namespace App\Admin\Extensions\Exporter;
use App\Models\LoanStudentsList;
use Dcat\Admin\Grid\Exporters\AbstractExporter;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
class ImportLoanExporter extends AbstractExporter implements WithMapping, WithHeadings, FromCollection
{
use Exportable;
protected $fileName = '已导入贷款名单';
protected $titles = [];
public function __construct()
{
$this->fileName = $this->fileName.'_'.time().'.xlsx';//拼接下载文件名称
$this->titles = [
'sfzh'=>'身份证',
'xh'=>'学号',
'xm'=>'姓名',
'annual_session'=>'年份',
'fylx'=>'费用类型',
'total'=>'贷款总额',
'xfje'=>'抵扣学费金额',
'zsje'=>'抵扣住宿费金额',
'is_push'=>'是否已推送',
'is_five_year'=>'是否为五年制一贯制',
"create_time" => "导入时间",
];
parent::__construct();
}
public function export()
{
// TODO: Implement export() method.
$this->download($this->fileName)->prepare(request())->send();
exit;
}
public function collection()
{
// TODO: Implement collection() method.
return collect($this->buildData());
}
public function headings(): array
{
// TODO: Implement headings() method.
return $this->titles();
}
public function map($row): array
{
$fylx = "贷款计划";
if($row['fylx'] == LoanStudentsList::FYLX_DZ) $fylx = "贷款到账";
$is_push = "未推送";
if($row['is_push'] == LoanStudentsList::IS_PUSH_YES) $is_push = "已推送";
$is_five_year = "否";
if($row['is_five_year'] == LoanStudentsList::IS_FIVE_YEAR_YES) $is_five_year = "是";
// TODO: Implement map() method.
return [
"'".$row['sfzh'].'',
$row["xh"],
$row["xm"],
$row["annual_session"],
$fylx,
$row["total"],
$row["xfje"],
$row["zsje"],
$is_push,
$is_five_year,
date("Y-m-d H:i:s", $row['create_time']),
];
}
}

153
app/Admin/Extensions/Exporter/ImportOrder.php

@ -0,0 +1,153 @@ @@ -0,0 +1,153 @@
<?php
namespace App\Admin\Extensions\Exporter;
use App\Models\LoanStudentsList;
use App\Models\Order;
use App\Models\PaymentList;
use App\Models\SecondaryCollege;
use App\Models\Speciality;
use App\Models\UsersMember;
use Dcat\Admin\Grid\Exporters\AbstractExporter;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
class ImportOrder extends AbstractExporter implements WithMapping, WithHeadings, FromCollection
{
use Exportable;
protected $fileName = '订单明细';
protected $titles = [];
public function __construct()
{
$this->fileName = $this->fileName.'_'.time().'.xlsx';//拼接下载文件名称
$this->titles = [
'id'=> '订单ID',
'orders_num'=> '订单号',
'price'=> '实付金额',
'transaction_id'=> '流水单号',
'pay_time'=> '支付时间',
'status'=> '状态',
'annual_session'=> '年份',
'is_new_student_order'=> '新老生订单',
'payment_data'=> '缴费项目',
'msg'=> '订单备注',
'name'=> '姓名',
'mobile'=> '手机',
'idcard'=> '身份证',
'sex'=> '性别',
'speciality_name'=> '专业',
'conllege_name'=> '二级学院',
];
parent::__construct();
}
public function export()
{
// TODO: Implement export() method.
$this->download($this->fileName)->prepare(request())->send();
exit;
}
public function collection()
{
// TODO: Implement collection() method.
$payMentList = DB::select('SELECT DISTINCT(project_code),project_name FROM payment_list');
$payMentListInfo = [];
foreach($payMentList as $item){
$payMentListInfo[$item->project_code] = $item->project_name;
}
$orderList = $this->buildData();
//专业信息
$specialityList = Speciality::query()->get()->toArray();
$specialityList = array_column($specialityList, null,"id");
//二级学院
$secondary_college = SecondaryCollege::query()->get()->toArray();
$secondary_college = array_column($secondary_college, null,"id");
$numberList = array_unique(array_column($orderList, "unique_number"));
$userList = UsersMember::query()->whereIn("unique_number", $numberList)->get()->toArray();
$userList = array_column($userList, null, "unique_number");
$addList = [];
foreach($orderList as $item){
$status = "未支付";
if($item["status"] == Order::STATUS_PAID) $status = "已支付";
if($item["status"] == Order::STATUS_CANCEL) $status = "已取消";
$is_new_student_order = "新生订单";
if($item['is_new_student_order'] == Order::IS_NEW_STUDENT_ORDER_NO) $is_new_student_order = "老生订单";
$sex = "男";
if($userList[$item["unique_number"]]['sex'] == 2) $sex = "女";
$payment_data = "";
foreach(json_decode($item["payment_data"]) as $k => $v){
$payment_data .= $payMentListInfo[$k].":".$v."|";
}
$arr = [
'id'=> $item['id'],
'orders_num'=> $item['orders_num'],
'price'=> $item['price'],
'transaction_id'=> $item['transaction_id'],
'pay_time'=> date("Y-m-d H:i:s", $item['pay_time']),
'status'=> $status,
'annual_session'=> $item['annual_session'],
'is_new_student_order'=> $is_new_student_order,
'payment_data' => rtrim($payment_data, "|"),
'msg'=> $item["msg"],
'name'=> $userList[$item["unique_number"]]['name'],
'mobile'=> $userList[$item["unique_number"]]['mobile'],
'idcard'=> $userList[$item["unique_number"]]['idcard'],
'sex'=> $sex,
'speciality_name'=> $specialityList[$userList[$item["unique_number"]]["speciality_id"]]["speciality_name"],
'conllege_name'=> $secondary_college[$specialityList[$userList[$item["unique_number"]]["speciality_id"]]['secondary_college_id']]['name'],
];
array_push($addList, $arr);
}
return collect($addList);
}
public function headings(): array
{
// TODO: Implement headings() method.
return $this->titles();
}
public function map($row): array
{
// TODO: Implement map() method.
return [
$row["id"],
$row["orders_num"],
$row["price"],
$row["transaction_id"],
$row["pay_time"],
$row["status"],
$row["annual_session"],
$row["is_new_student_order"],
$row["payment_data"],
$row["msg"],
$row["name"],
$row["mobile"],
"'".$row['idcard'].'',
$row["sex"],
$row["speciality_name"],
$row["conllege_name"],
];
}
}

149
app/Admin/Extensions/Exporter/ImportStudentExporter.php

@ -4,9 +4,6 @@ @@ -4,9 +4,6 @@
namespace App\Admin\Extensions\Exporter;
use App\Models\CompletedOfflineStep;
use App\Models\Speciality;
use App\Models\UsersMember;
use Dcat\Admin\Grid\Exporters\AbstractExporter;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromCollection;
@ -27,16 +24,31 @@ class ImportStudentExporter extends AbstractExporter implements WithMapping, Wit @@ -27,16 +24,31 @@ class ImportStudentExporter extends AbstractExporter implements WithMapping, Wit
'name'=>'姓名',
'idCard'=>'身份证',
'sex' => "性别",
"admission_code" => "录取编码",
"admission_code" => "录取编码(学号)",
"admission_college" => "二级学院",
"admitted_major" => "录取专业",
"resuming_school" => "复学类型",
"status" => "状态",
"is_register" => "是否已注册",
"annual_session" => "年份",
"is_test" => "测试账号",
"nj" => "年级",
"xydm" => "学院代码",
"zydm" => "专业代码",
"bjdm" => "班级代码",
"xz" => "学制代码",
"xslbdm" => "学生类别代码",
"xjztdm" => "学籍状态代码",
"sfzx" => "是否在校代码",
"is_push" => "是否已推送",
"is_five_year" => "是否为五年制一贯制",
"is_equivalent" => "考生类型",
"is_four_type" => "考生分类",
"province" => "招生省份",
"is_new_student" => "是否为新生",
"old_student_bed_info" => "老生床位信息",
"day_student" => "是否为走读生",
"create_time" => "导入时间",
"zhaoshengban" => "招生办报到",
"erjixueyuan" => "二级学院报到",
"suguan" => "宿管办报到",
"is_test" => "测试账号"
];
parent::__construct();
}
@ -52,56 +64,7 @@ class ImportStudentExporter extends AbstractExporter implements WithMapping, Wit @@ -52,56 +64,7 @@ class ImportStudentExporter extends AbstractExporter implements WithMapping, Wit
{
// TODO: Implement collection() method.
// return collect($this->buildData());
$chunk_list = array_chunk($this->buildData(), 1000);
$newList = [];
$userList = UsersMember::query()->get()->toArray();
$userList = array_column($userList, null, "idcard");
foreach($chunk_list as $value){
foreach ($value as $item){
$resuming_school = "普通学生";
if($item["resuming_school"] == 1) $resuming_school = "退伍复学";
if($item["resuming_school"] == 2) $resuming_school = "普通复学";
$is_test = "否";
if($item["is_test"] == 2) $is_test = "是";
$zhaoshengban = "否";
$erjixueyuan = "否";
$suguan = "否";
if(array_key_exists($item["idCard"], $userList)){
$step = CompletedOfflineStep::query()->where("unique_number", $userList[$item["idCard"]]["unique_number"])->get()->toArray();
if(!empty($step)){
$step = array_column($step, null, "step_id");
if(array_key_exists(2, $step)) $zhaoshengban = "是";
if(array_key_exists(3, $step)) $erjixueyuan = "是";
if(array_key_exists(4, $step)) $suguan = "是";
}
}
$arr = [
"sex" => $item['sex'] == 1 ? "男" : "女",
"resuming_school" => $resuming_school,
"is_test" => $is_test,
"zhaoshengban" => $zhaoshengban,
"erjixueyuan" => $erjixueyuan,
"suguan" => $suguan,
"mobile" => $item["mobile"],
"name" => $item["name"],
"idCard" => $item["idCard"],
"admission_code" => $item["admission_code"],
"admission_college" => $item["admission_college"],
"admitted_major" => $item["admitted_major"],
"annual_session" => $item["annual_session"],
"create_time" => date("Y-m-d H:i:s", $item['create_time']),
];
array_push($newList, $arr);
}
}
return collect($newList);
return collect($this->buildData());
}
public function headings(): array
@ -112,38 +75,64 @@ class ImportStudentExporter extends AbstractExporter implements WithMapping, Wit @@ -112,38 +75,64 @@ class ImportStudentExporter extends AbstractExporter implements WithMapping, Wit
public function map($row): array
{
$sex = "女";
if($row['sex'] == 1) $sex = "男";
$status = "正常";
if($row['status'] == 2) $status = "禁用";
$is_register = "未注册";
if($row['is_register'] == 2) $status = "已注册";
$is_test = "否";
if($row['is_test'] == 2) $status = "是";
$sfzx = "否";
if($row['sfzx'] == 1) $sfzx = "是";
$is_push = "未推送";
if($row['is_push'] == 2) $is_push = "已推送";
$is_five_year = "否";
if($row['is_five_year'] == 2) $is_five_year = "是";
$is_equivalent = "统招生";
if($row['is_equivalent'] == 2) $is_equivalent = "单招生";
$is_four_type = "";
if($row['is_four_type'] == 1) $is_four_type = "高职本科3+2";
if($row['is_four_type'] == 2) $is_four_type = "四类人员";
if($row['is_four_type'] == 3) $is_four_type = "普通考生";
if($row['is_four_type'] == 4) $is_four_type = "中职3+2";
$is_new_student = "新生";
if($row['is_new_student'] == 2) $is_new_student = "老生";
$day_student = "否";
if($row['day_student'] == 2) $day_student = "是";
// TODO: Implement map() method.
return [
$row['mobile'],
$row['name'],
"'".$row['idCard'].'',
$row['sex'],
$sex,
$row['admission_code'],
$row['admission_college'],
$row['admitted_major'],
$row['resuming_school'],
$status,
$is_register,
$row['annual_session'],
$row['create_time'],
$row["zhaoshengban"],
$row["erjixueyuan"],
$row["suguan"],
$row["is_test"],
$is_test,
$row['nj'],
$row['xydm'],
$row['zydm'],
$row['bjdm'],
$row['xz'],
$row['xslbdm'],
$row['xjztdm'],
$sfzx,
$is_push,
$is_five_year,
$is_equivalent,
$is_four_type,
$row['province'],
$is_new_student,
$row['old_student_bed_info'],
$day_student,
date("Y-m-d H:i:s", $row['create_time']),
];
}
public function getSpecialityAndCollegeNameById($id)
{
$nameInfo = Speciality::query()->where("speciality.id", $id)->leftJoin("secondary_college as b", "speciality.secondary_college_id", "=", "b.id")->first();
if(empty($nameInfo)){
return [
"name" => "",
"speciality_name" => ""
];
}
return $nameInfo->toArray();
}
}

156
app/Admin/Extensions/Exporter/ImportUserBaseInfo.php

@ -0,0 +1,156 @@ @@ -0,0 +1,156 @@
<?php
namespace App\Admin\Extensions\Exporter;
use App\Models\AdmissionNewStudents;
use App\Models\BasicFamilyInformation;
use App\Models\Config;
use App\Models\Order;
use App\Models\SecondaryCollege;
use App\Models\Speciality;
use App\Models\UserBasicInfo;
use App\Models\UsersMember;
use Dcat\Admin\Grid\Exporters\AbstractExporter;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
class ImportUserBaseInfo extends AbstractExporter implements WithMapping, WithHeadings, FromCollection
{
use Exportable;
protected $fileName = '用户基本信息';
protected $titles = [];
public function __construct()
{
$this->fileName = $this->fileName.'_'.time().'.xlsx';//拼接下载文件名称
$this->titles = [
"family_name" => '联系人',
"family_mobile" => '联系号码',
"relationship" => '关系',
"address" => '家庭住址',
"postal_code" => '邮政编码',
"native" => '籍贯',
"email" => '邮箱',
"name" => '学生姓名',
"mobile" => '学生号码',
"idcard" => '学生身份证',
"sex" => '学生性别',
"speciality_name" => '专业',
"conllege_name" => '二级学院',
"annual_session" => '年份',
];
parent::__construct();
}
public function export()
{
// TODO: Implement export() method.
$this->download($this->fileName)->prepare(request())->send();
exit;
}
public function collection()
{
// TODO: Implement collection() method.
//取出当前年份
$config = Config::query()->where([
"unique_identification" => "annual_session"
])->first();
//专业信息
$specialityList = Speciality::query()->get()->toArray();
$specialityList = array_column($specialityList, null,"id");
//二级学院
$secondary_college = SecondaryCollege::query()->get()->toArray();
$secondary_college = array_column($secondary_college, null,"id");
$studentsList = AdmissionNewStudents::query()->where([
"annual_session" => $config->data,
"is_new_student" => AdmissionNewStudents::IS_NEW_STUDENT_YES
])->get()->toArray();
$userList = UsersMember::query()->whereIn("idcard", array_column($studentsList, "idCard"))->get()->toArray();
$userList = array_column($userList, null, "unique_number");
$basicFamilyInfoList = BasicFamilyInformation::query()->whereIn("unique_number", array_column($userList, "unique_number"))->get()->toArray();
if(empty($basicFamilyInfoList)){
return collect([]);
}
$userBasicInfoList = UserBasicInfo::query()->whereIn("unique_number", array_column($userList, "unique_number"))->get()->toArray();
if(empty($userBasicInfoList)){
return collect([]);
}
$userBasicInfoList = array_column($userBasicInfoList, null, "unique_number");
$addList = [];
foreach($basicFamilyInfoList as $item){
$address = "";
$postal_code = "";
$native = "";
$email = "";
if(array_key_exists($item["unique_number"], $userBasicInfoList)){
$address = $userBasicInfoList[$item["unique_number"]]['province_city_area'].'--'.$userBasicInfoList[$item["unique_number"]]['address'];
$postal_code = $userBasicInfoList[$item["unique_number"]]['postal_code'];
$native = $userBasicInfoList[$item["unique_number"]]['native'];
$email = $userBasicInfoList[$item["unique_number"]]['email'];
}
$arr = [
"family_name" => $item["name"],
"family_mobile" => $item["mobile"],
"relationship" => $item["relationship"],
"address" => $address,
"postal_code" => $postal_code,
"native" => $native,
"email" => $email,
"name" => $userList[$item["unique_number"]]["name"],
"mobile" => $userList[$item["unique_number"]]["mobile"],
"idcard" => $userList[$item["unique_number"]]["idcard"],
"sex" => $userList[$item["unique_number"]]["sex"] == 1 ? "男" : "女",
"speciality_name" => $specialityList[$userList[$item["unique_number"]]["speciality_id"]]["speciality_name"],
"conllege_name" => $secondary_college[$specialityList[$userList[$item["unique_number"]]["speciality_id"]]['secondary_college_id']]['name'],
"annual_session" => $config->data,
];
array_push($addList, $arr);
}
return collect($addList);
}
public function headings(): array
{
// TODO: Implement headings() method.
return $this->titles();
}
public function map($row): array
{
// TODO: Implement map() method.
return [
$row["family_name"],
$row["family_mobile"],
$row["relationship"],
$row["address"],
$row["postal_code"],
$row["native"],
$row["email"],
$row["name"],
$row["mobile"],
"'".$row['idcard'].'',
$row["sex"],
$row["speciality_name"],
$row["conllege_name"],
$row["annual_session"],
];
}
}

4
app/Admin/Metrics/Examples/AdmissionExcelUsers.php

@ -43,7 +43,7 @@ class AdmissionExcelUsers extends Card @@ -43,7 +43,7 @@ class AdmissionExcelUsers extends Card
"unique_identification" => "annual_session"
])->first();
//注册总人数
//总人数
$allCount = AdmissionNewStudents::query()->where([
"annual_session" => $config->data,
])->count();
@ -66,7 +66,7 @@ class AdmissionExcelUsers extends Card @@ -66,7 +66,7 @@ class AdmissionExcelUsers extends Card
public function up($percent)
{
return $this->footer(
"<i class=\"feather icon-trending-up text-success\"></i> {$percent}人 为当前年份已导入人数"
"<i class=\"feather icon-trending-up text-success\"></i> {$percent}人 为当前年份已导入新老生人数"
);
}

142
app/Admin/Metrics/Examples/AdmissionOnLineUser.php

@ -0,0 +1,142 @@ @@ -0,0 +1,142 @@
<?php
namespace App\Admin\Metrics\Examples;
use App\Models\CompletedStep;
use App\Models\Config;
use App\Models\Step;
use Dcat\Admin\Widgets\Metrics\Card;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
class AdmissionOnLineUser extends Card
{
/**
* 卡片底部内容.
*
* @var string|Renderable|\Closure
*/
protected $footer;
/**
* 初始化卡片.
*/
protected function init()
{
parent::init();
$this->title('线上报到人数');
//取出线上步骤
$stepList = Step::query()->pluck("title", "id");
$downList = [];
foreach($stepList as $key => $item){
$downList[$key] = $item;
}
$this->dropdown($downList);
}
/**
* 处理请求.
*
* @param Request $request
*
* @return void
*/
public function handle(Request $request)
{
$stepId = $request->get('option');
//取出当前年份
$config = Config::query()->where([
"unique_identification" => "annual_session"
])->first();
$where = [
"annual_session" => $config->data,
];
if(!empty($stepId)){
$where["step_id"] = $stepId;
}
//缴费总人数
$allCount = CompletedStep::query()
->where($where)->distinct("unique_number")->count();
$this->content($allCount);
if($allCount > 0){
$this->up($allCount);
}else{
$this->down($allCount);
}
}
/**
* @param int $percent
*
* @return $this
*/
public function up($percent)
{
return $this->footer(
"<i class=\"feather icon-trending-up text-success\"></i> {$percent}人 为当前年份线上报到人数"
);
}
/**
* @param int $percent
*
* @return $this
*/
public function down($percent)
{
return $this->footer(
"<i class=\"feather icon-trending-down text-danger\"></i> {$percent}人 为当前年份线上报到人数"
);
}
/**
* 设置卡片底部内容.
*
* @param string|Renderable|\Closure $footer
*
* @return $this
*/
public function footer($footer)
{
$this->footer = $footer;
return $this;
}
/**
* 渲染卡片内容.
*
* @return string
*/
public function renderContent()
{
$content = parent::renderContent();
return <<<HTML
<div class="d-flex justify-content-between align-items-center mt-1" style="margin-bottom: 2px">
<h2 class="ml-1 font-lg-1">{$content}</h2>
</div>
<div class="ml-1 mt-1 font-weight-bold text-80">
{$this->renderFooter()}
</div>
HTML;
}
/**
* 渲染卡片底部内容.
*
* @return string
*/
public function renderFooter()
{
return $this->toString($this->footer);
}
}

2
app/Admin/Metrics/Examples/AdmissionRegisterUsers.php

@ -67,7 +67,7 @@ class AdmissionRegisterUsers extends Card @@ -67,7 +67,7 @@ class AdmissionRegisterUsers extends Card
public function up($percent)
{
return $this->footer(
"<i class=\"feather icon-trending-up text-success\"></i> {$percent}人 为当前年份已注册人数"
"<i class=\"feather icon-trending-up text-success\"></i> {$percent}人 为当前年份已注册新老生人数"
);
}

30
app/Admin/Metrics/Examples/AdmissionStepUsers.php

@ -2,10 +2,9 @@ @@ -2,10 +2,9 @@
namespace App\Admin\Metrics\Examples;
use App\Models\AdmissionNewStudents;
use App\Models\CompletedOfflineStep;
use App\Models\Config;
use App\Models\Order;
use App\Models\OfflineStep;
use Dcat\Admin\Widgets\Metrics\Card;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
@ -26,8 +25,15 @@ class AdmissionStepUsers extends Card @@ -26,8 +25,15 @@ class AdmissionStepUsers extends Card
{
parent::init();
$this->title('报到人数');
$this->title('线下报到人数');
//取出线下步骤
$stepList = OfflineStep::query()->pluck("title", "id");
$downList = [];
foreach($stepList as $key => $item){
$downList[$key] = $item;
}
$this->dropdown($downList);
}
/**
@ -39,14 +45,22 @@ class AdmissionStepUsers extends Card @@ -39,14 +45,22 @@ class AdmissionStepUsers extends Card
*/
public function handle(Request $request)
{
$stepId = $request->get('option');
//取出当前年份
/*$config = Config::query()->where([
$config = Config::query()->where([
"unique_identification" => "annual_session"
])->first();*/
])->first();
$where = [
"annual_session" => $config->data,
];
if(!empty($stepId)){
$where["step_id"] = $stepId;
}
//报到总人数
$allCount = CompletedOfflineStep::query()
$allCount = CompletedOfflineStep::query()->where($where)
->distinct("unique_number")->count();
$this->content($allCount);
@ -67,7 +81,7 @@ class AdmissionStepUsers extends Card @@ -67,7 +81,7 @@ class AdmissionStepUsers extends Card
public function up($percent)
{
return $this->footer(
"<i class=\"feather icon-trending-up text-success\"></i> {$percent}人 为当前年份报到人数"
"<i class=\"feather icon-trending-up text-success\"></i> {$percent}人 为当前年份线下报到人数"
);
}
@ -79,7 +93,7 @@ class AdmissionStepUsers extends Card @@ -79,7 +93,7 @@ class AdmissionStepUsers extends Card
public function down($percent)
{
return $this->footer(
"<i class=\"feather icon-trending-down text-danger\"></i> {$percent}人 为当前年份报到人数"
"<i class=\"feather icon-trending-down text-danger\"></i> {$percent}人 为当前年份线下报到人数"
);
}

64
app/Admin/Renderable/StudentInfoTable.php

@ -0,0 +1,64 @@ @@ -0,0 +1,64 @@
<?php
namespace App\Admin\Renderable;
use App\Models\AdmissionNewStudents;
use Dcat\Admin\Grid;
use Dcat\Admin\Grid\LazyRenderable;
use Illuminate\Database\Eloquent\Model;
class StudentInfoTable extends LazyRenderable
{
public function grid(): Grid
{
return Grid::make(new AdmissionNewStudents(), function (Grid $grid) {
# 接收参数
$id = $this->payload['id'] ?? null;
if (!empty($id)) {
$grid->model()->where('id', $id);
}
$grid->column('nj', "年级");
$grid->column('xydm', "学院代码");
$grid->column('zydm',"专业代码");
$grid->column('bjdm', "班级代码");
$grid->column('xz', "学制代码");
$grid->column('xslbdm', "学生类别代码");
$grid->column('xjztdm', "学籍状态代码");
$grid->column('sfzx', "是否在校代码")->display(function(){
if($this->sfzx == 0) return "否";
if($this->sfzx == 1) return "是";
});
$grid->column('is_five_year', "是否为五年制一贯制")->display(function(){
if($this->is_five_year == 1) return "否";
if($this->is_five_year == 2) return "是";
});
$grid->column('is_equivalent', "考生类型")->display(function(){
if($this->is_equivalent == 1) return "统招生";
if($this->is_equivalent == 2) return "单招生";
});
$grid->column('is_four_type', "考生分类")->display(function(){
if($this->is_four_type == 1) return "高职本科3+2";
if($this->is_four_type == 2) return "四类人员";
if($this->is_four_type == 3) return "普通考生";
if($this->is_four_type == 4) return "中职3+2";
});
$grid->column('province', "招生省份");
$grid->column('old_student_bed_info', "床位信息(老生)");
//禁用批量操作按钮
$grid->disableBatchDelete();
//禁用创建按钮
$grid->disableCreateButton();
//禁用操作按钮
$grid->disableActions();
//禁用刷新按钮
$grid->disableRefreshButton();
$grid->paginate(10);
});
}
}

1
app/Admin/routes.php

@ -37,4 +37,5 @@ Route::group([ @@ -37,4 +37,5 @@ Route::group([
$router->resource("/wechat_app", "WechatAppController");
$router->resource("/wechat_app_config", "WechatAppConfigController");
$router->resource("/security_user", "SecurityUserController");
$router->resource("/loan_students_list", "LoanStudentsListController");
});

34
app/Imports/FirstSheetImport.php

@ -70,6 +70,19 @@ class FirstSheetImport implements ToCollection, WithBatchInserts, WithChunkReadi @@ -70,6 +70,19 @@ class FirstSheetImport implements ToCollection, WithBatchInserts, WithChunkReadi
"idCard" => trim($item["身份证"]),
"admission_college" => trim($item["录取学院"]),
"admitted_major" => trim($item["录取专业"]),
"admission_code" => trim($item["学号"]),
"nj" => trim($item["年级"]),
"xydm" => trim($item["学院代码"]),
"zydm" => trim($item["专业代码"]),
"bjdm" => trim($item["班级代码"]),
"xz" => trim($item["学制代码"]),
"xslbdm" => trim($item["学生类别代码"]),
"xjztdm" => trim($item["学籍状态代码"]),
"sfzx" => trim($item["是否在校代码"]),
"is_five_year" => trim($item["是否五年一贯制"]),
"is_equivalent" => trim($item["考生类型"]),
"is_four_type" => trim($item["考生分类"]),
"province" => trim($item["省份"]),
"create_time" => time(),
"annual_session" => $config->data
];
@ -80,14 +93,6 @@ class FirstSheetImport implements ToCollection, WithBatchInserts, WithChunkReadi @@ -80,14 +93,6 @@ class FirstSheetImport implements ToCollection, WithBatchInserts, WithChunkReadi
$arr["sex"] = 2;
}
if(!empty($item["复学类型"])){
if(trim($item["复学类型"]) == "退伍复学"){
$arr["resuming_school"] = 1;
}else if(trim($item["复学类型"]) == "普通复学"){
$arr["resuming_school"] = 2;
}
}
//检测专业
//取出所有二级学院
$secondaryCollegeList = SecondaryCollege::query()->where([
@ -130,12 +135,23 @@ class FirstSheetImport implements ToCollection, WithBatchInserts, WithChunkReadi @@ -130,12 +135,23 @@ class FirstSheetImport implements ToCollection, WithBatchInserts, WithChunkReadi
foreach ($chunk_list as $new_list) {
$add = AdmissionNewStudents::query()->insert($new_list);
if($add != count($insertData)){
if($add != count($new_list)){
throw new \Exception("导入数据失败,请重试");
}
}
DB::commit();
}catch (\PDOException $e){
DB::rollBack();
if ($e->getCode() === '23000') {
// 唯一性约束错误处理逻辑
$errorMessage = "导入表格中存在已入库学生信息,请勿重复导入";
// 可以根据需要进行相关处理
throw new \Exception($errorMessage);
} else {
// 其他类型的错误处理逻辑
throw new \Exception("导入数据失败,请重试");
}
}catch (\Exception $e){
DB::rollBack();
throw new \Exception("导入数据失败,请重试");

25
app/Imports/LoanDataExcel.php

@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
<?php
namespace App\Imports;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
class LoanDataExcel implements WithMultipleSheets
{
private $round;
public function __construct(int $round)
{
$this->round = $round;
}
public function sheets(): array
{
return [
new LoanFirstSheetImport($this->round),
];
}
}

120
app/Imports/LoanFirstSheetImport.php

@ -0,0 +1,120 @@ @@ -0,0 +1,120 @@
<?php
namespace App\Imports;
use App\Models\Config;
use App\Models\LoanStudentsList;
use Illuminate\Support\Collection;
use Illuminate\Database\Eloquent\Model;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithBatchInserts;
use Maatwebsite\Excel\Concerns\WithChunkReading;
use Maatwebsite\Excel\Imports\HeadingRowFormatter;
use Illuminate\Support\Facades\DB;
HeadingRowFormatter::
default('none');
class LoanFirstSheetImport implements ToCollection, WithBatchInserts, WithChunkReading, WithHeadingRow, ToModel
{
private $round;
public function __construct(int $round)
{
$this->round = $round;
}
/**
* @param array $row
*
* @return Model|Model[]|null
*/
public function model(array $row)
{
// // 数据库对应的字段
return null;
}
public function collection(Collection $rows)
{
//导入的表格所有数据都在此处显示
$list = $rows->toArray();
if(empty($list)){
throw new \Exception("请勿上传空文件");
}
//取出当前年份
$config = Config::query()->where([
"unique_identification" => "annual_session"
])->first();
if(empty($config)){
throw new \Exception("相关配置信息不能为空");
}
//入库
$insertData = [];
foreach($list as $key => $item){
$arr = [
"sfzh" => trim($item["身份证"]),
"xh" => trim($item["学号"]),
"xm" => trim($item["姓名"]),
"fylx" => trim($item["费用类型"]),
"total" => trim($item["贷款总金额"]),
"is_five_year" => trim($item["五年一贯制"]),
"create_time" => time(),
"annual_session" => $config->data
];
array_push($insertData, $arr);
}
DB::beginTransaction();
try {
$chunk_list = array_chunk($insertData, 1000);
foreach ($chunk_list as $new_list) {
$add = LoanStudentsList::query()->insert($new_list);
if($add != count($new_list)){
throw new \Exception("导入数据失败,请重试");
}
}
DB::commit();
}catch (\PDOException $e){
DB::rollBack();
if ($e->getCode() === '23000') {
// 唯一性约束错误处理逻辑
$errorMessage = "导入表格中存在已入库学生贷款信息,请勿重复导入";
// 可以根据需要进行相关处理
throw new \Exception($errorMessage);
} else {
// 其他类型的错误处理逻辑
throw new \Exception("导入数据失败,请重试");
}
}catch (\Exception $e){
DB::rollBack();
throw new \Exception("导入数据失败,请重试");
}
}
//批量导入1000条
public function batchSize(): int
{
return 1000;
}
//以1000条数据基准切割数据
public function chunkSize(): int
{
return 1000;
}
}

25
app/Imports/OldStudentDataExcel.php

@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
<?php
namespace App\Imports;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
class OldStudentDataExcel implements WithMultipleSheets
{
private $round;
public function __construct(int $round)
{
$this->round = $round;
}
public function sheets(): array
{
return [
new OldStudentFirstSheetImport($this->round),
];
}
}

165
app/Imports/OldStudentFirstSheetImport.php

@ -0,0 +1,165 @@ @@ -0,0 +1,165 @@
<?php
namespace App\Imports;
use App\Models\AdmissionNewStudents;
use App\Models\Config;
use App\Models\SecondaryCollege;
use App\Models\Speciality;
use Illuminate\Support\Collection;
use Illuminate\Database\Eloquent\Model;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithBatchInserts;
use Maatwebsite\Excel\Concerns\WithChunkReading;
use Maatwebsite\Excel\Imports\HeadingRowFormatter;
use Illuminate\Support\Facades\DB;
use Throwable;
HeadingRowFormatter::
default('none');
class OldStudentFirstSheetImport implements ToCollection, WithBatchInserts, WithChunkReading, WithHeadingRow, ToModel
{
private $round;
public function __construct(int $round)
{
$this->round = $round;
}
/**
* @param array $row
*
* @return Model|Model[]|null
*/
public function model(array $row)
{
//写导入的逻辑关系
// $user = Orderuser::where('phone', '=', $row['电话'])->where('name', '=',$row['姓名'])->first();
// dd($row);
// // 数据库对应的字段
return null;
}
public function collection(Collection $rows)
{
//导入的表格所有数据都在此处显示
$list = $rows->toArray();
if(empty($list)){
throw new \Exception("请勿上传空文件");
}
//入库
$insertData = [];
foreach($list as $key => $item){
$arr = [
"mobile" => trim($item["手机号"]),
"name" => trim($item["姓名"]),
"idCard" => trim($item["身份证"]),
"admission_college" => trim($item["录取学院"]),
"admitted_major" => trim($item["录取专业"]),
"admission_code" => trim($item["学号"]),
"is_five_year" => trim($item["是否五年一贯制"]),
"create_time" => time(),
"annual_session" => trim($item["学年"]),
"is_new_student" => AdmissionNewStudents::IS_NEW_STUDENT_NO,
"old_student_bed_info" => trim($item["床位信息"]),
"is_push" => AdmissionNewStudents::IS_PUSH_YES, //老生标记已推送
"is_register" => AdmissionNewStudents::REGISTER_YES, //老生标记已注册
];
//检测必有字段是否为空
if(empty($arr["annual_session"]) || empty($arr["old_student_bed_info"])){
throw new \Exception("学年及床位信息字段不能为空");
}
//检测性别
if(trim($item["性别"]) == "男"){
$arr["sex"] = 1;
}else if(trim($item["性别"]) == "女"){
$arr["sex"] = 2;
}
//检测专业
//取出所有二级学院
$secondaryCollegeList = SecondaryCollege::query()->where([
"status" => SecondaryCollege::STATUS_YES
])->get()->toArray();
if(empty($secondaryCollegeList)){
throw new \Exception("识别失败,二级学院信息为空");
}
//以学院名作为键
$secondaryCollegeList = array_column($secondaryCollegeList, null, "name");
//初识化专业id
$speciality_id = 0;
//取出指定学院下面的专业
$specialityInfo = Speciality::query()->where([
"secondary_college_id" => $secondaryCollegeList[trim($item["录取学院"])]["id"],
"speciality_name" => trim($item["录取专业"]),
"status" => Speciality::STATUS_YES
])->first();
if(!empty($specialityInfo)){
$speciality_id = $specialityInfo->id;
}
//专业ID为空时提示
if(empty($speciality_id)){
throw new \Exception("识别失败,请检查二级学院或专业名称是否和后台录入的一致");
}
$arr["speciality_id"] = $speciality_id;
array_push($insertData, $arr);
}
DB::beginTransaction();
try {
$chunk_list = array_chunk($insertData, 1000);
foreach ($chunk_list as $new_list) {
$add = AdmissionNewStudents::query()->insert($new_list);
if($add != count($new_list)){
throw new \Exception("导入数据失败,请重试");
}
}
DB::commit();
}catch (\PDOException $e){
DB::rollBack();
if ($e->getCode() === '23000') {
// 唯一性约束错误处理逻辑
$errorMessage = "导入表格中存在已入库学生信息,请勿重复导入";
// 可以根据需要进行相关处理
throw new \Exception($errorMessage);
} else {
// 其他类型的错误处理逻辑
throw new \Exception("导入数据失败,请重试");
}
}catch (\Exception $e){
DB::rollBack();
throw new \Exception("导入数据失败,请重试");
}
}
//批量导入1000条
public function batchSize(): int
{
return 1000;
}
//以1000条数据基准切割数据
public function chunkSize(): int
{
return 1000;
}
}

6
app/Models/AdmissionNewStudents.php

@ -19,4 +19,10 @@ class AdmissionNewStudents extends Model @@ -19,4 +19,10 @@ class AdmissionNewStudents extends Model
const RESUMING_SCHOOL_ZERO = 0;
const RESUMING_SCHOOL_ONE = 1;
const RESUMING_SCHOOL_TWO = 2;
const IS_NEW_STUDENT_YES = 1; //是否为新生 1是
const IS_NEW_STUDENT_NO = 2; //2老生
const IS_PUSH_NO = 1; //未推送
const IS_PUSH_YES = 2; //已推送
}

15
app/Models/CompletedOnLineStepView.php

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
<?php
namespace App\Models;
use Dcat\Admin\Traits\HasDateTimeFormatter;
use Illuminate\Database\Eloquent\Model;
class CompletedOnLineStepView extends Model
{
use HasDateTimeFormatter;
protected $table = 'completed_on_line_step_view';
public $timestamps = false;
}

23
app/Models/LoanStudentsList.php

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
<?php
namespace App\Models;
use Dcat\Admin\Traits\HasDateTimeFormatter;
use Illuminate\Database\Eloquent\Model;
class LoanStudentsList extends Model
{
use HasDateTimeFormatter;
protected $table = 'loan_students_list';
public $timestamps = false;
const IS_PUSH_YES = 2; //已推送
const IS_PUSH_NO = 1; //未推送
const IS_FIVE_YEAR_YES = 2; //五年制
const IS_FIVE_YEAR_NO = 1; //非五年制
const FYLX_JH = 0; //费用类型:0贷款计划 1贷款到账
const FYLX_DZ = 1;
}

33
app/Services/BaseServices.php

@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
<?php
/**
* 弄成单例模式
*/
namespace App\Services;
class BaseServices
{
protected static $instance;
/**
* @return static
*/
public static function getInstance()
{
if(static::$instance instanceof static){
return static::$instance;
}
static::$instance = new static();
return static::$instance;
}
private function __construct()
{
}
private function __clone()
{
}
}

32
app/Services/PublicServices.php

@ -0,0 +1,32 @@ @@ -0,0 +1,32 @@
<?php
namespace App\Services;
use App\Models\AdmissionNewStudents;
class PublicServices extends BaseServices
{
/**
* 返回指定身份证学生新老生身份
* @param $idcard
* @return \Illuminate\Database\Eloquent\HigherOrderBuilderProxy|mixed
*/
public function checkIsNewOldStudent($idcard)
{
$count = AdmissionNewStudents::query()->where([
"idCard" => $idcard
])->count();
//出现两条数据以上时必为老生
if($count > 1){
return AdmissionNewStudents::IS_NEW_STUDENT_NO;
}
//为一条数据时检测是否为老生
$studentInfo = AdmissionNewStudents::query()->where([
"idCard" => $idcard
])->first();
return $studentInfo->is_new_student;
}
}

2
config/admin.php

@ -201,7 +201,7 @@ return [ @@ -201,7 +201,7 @@ return [
|--------------------------------------------------------------------------
*/
'helpers' => [
'enable' => false,
'enable' => true,
],
/*

832
dcat_admin_ide_helper.php

File diff suppressed because it is too large Load Diff

6
resources/lang/zh_CN/admission-new-student.php

@ -19,7 +19,11 @@ return [ @@ -19,7 +19,11 @@ return [
'speciality_id' => '入库专业',
'secondary_college_id' => '入库学院',
'is_test' => '测试账号',
'resuming_school' => '复学类型',
'is_new_student' => '学生身份',
'day_student' => '是否为走读生',
'annual_session' => '学年',
'student_info' => '详细信息',
'is_push' => '是否推送',
],
'options' => [
],

23
resources/lang/zh_CN/loan-students-list.php

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
<?php
return [
'labels' => [
'LoanStudentsList' => '贷款名单',
'loan-students-list' => '贷款名单',
],
'fields' => [
'sfzh' => '身份证号',
'xh' => '学号',
'xm' => '姓名',
'annual_session' => '年份',
'fylx' => '费用类型',
'total' => '贷款总额',
'xfje' => '抵扣学费金额',
'zsje' => '抵扣住宿费金额',
'is_push' => '是否已推送',
'create_time' => '创建时间',
'update_time' => '修改时间',
'is_five_year' => '是否为五年制一贯制',
],
'options' => [
],
];

13
resources/lang/zh_CN/order.php

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<?php
<?php
return [
'labels' => [
'Order' => '订单列表',
@ -13,16 +13,21 @@ return [ @@ -13,16 +13,21 @@ return [
'transaction_id' => '流水单号',
'pay_type' => '支付方式',
'pay_time' => '支付时间',
'create_time' => 'create_time',
'update_time' => 'update_time',
'create_time' => '新增时间',
'update_time' => '修改时间',
'status' => '状态',
'annual_session' => '年',
'annual_session' => '年',
'payment_data' => '缴纳项目',
'source' => '订单来源',
'source_orders_num' => '推送订单号',
'dormitory_price' => '宿舍费用',
'source_pay_time' => '推送支付时间',
'msg' => '订单备注',
'idcard' => '身份证',
'mobile' => '手机',
'speciality_id' => '专业',
'user_name' => '姓名',
'is_new_student_order' => '学生身份',
],
'options' => [
],

1
resources/lang/zh_CN/users-member.php

@ -19,6 +19,7 @@ return [ @@ -19,6 +19,7 @@ return [
'is_test' => '测试账号',
'family_address' => '家庭住址',
'family_member' => '家庭成员',
'identity' => '学生身份',
],
'options' => [
],

12
routes/api.php

@ -1,5 +1,8 @@ @@ -1,5 +1,8 @@
<?php
use App\Admin\Extensions\Exporter\ImportCompletedOfflineStep;
use App\Admin\Extensions\Exporter\ImportCompletedOnLineStepView;
use App\Admin\Extensions\Exporter\ImportUserBaseInfo;
use App\Http\Controllers\AllocationDormitoryApi;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
@ -46,3 +49,12 @@ Route::any("getFloorLoad", [AllocationDormitoryApi::class, "getFloorLoad"]); @@ -46,3 +49,12 @@ Route::any("getFloorLoad", [AllocationDormitoryApi::class, "getFloorLoad"]);
Route::any("getDormitoryNumberLoad", [AllocationDormitoryApi::class, "getDormitoryNumberLoad"]);
Route::any("getBedLoad", [AllocationDormitoryApi::class, "getBedLoad"]);
/**
* 数据导出
*/
Route::prefix("import")->group(function(){
Route::any("completedOnLineStep", [ImportCompletedOnLineStepView::class, "export"]);
Route::any("completedOffLineStep", [ImportCompletedOfflineStep::class, "export"]);
Route::any("userBaseInfoExcel", [ImportUserBaseInfo::class, "export"]);
});

Loading…
Cancel
Save