Commit bb5a2b18 by 赵增煜
parents 853c6828 d0eb5135
......@@ -60,7 +60,7 @@ protected function grid()
// 工具栏普通按钮
$grid->tools(function ($tools) {
$tools->append(new DrugImportAction()); // 导入发货信息
$tools->append(new DrugImportAction()); // 导入药品信息
});
// 快捷搜索
......
......@@ -2,18 +2,24 @@
namespace App\Admin\Controllers;
use App\Admin\Extensions\ToolBar\Actions\PharmacyImportAction;
use App\Admin\Repositories\PharmacyRepository;
use App\Models\DosageModel;
use App\Models\PharmacistModel;
use App\Models\PharmacyDrugModel;
use App\Models\PharmacyModel;
use App\Models\User;
use Box\Spout\Common\Entity\Style\Color;
use Box\Spout\Writer\Common\Creator\Style\StyleBuilder;
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Models\Administrator;
use Dcat\Admin\Models\Role;
use Dcat\Admin\Show;
use Dcat\EasyExcel\Excel;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
// 药店
......@@ -55,6 +61,11 @@ protected function grid()
$grid->column('created_at');
$grid->column('updated_at')->sortable();
// 工具栏普通按钮
$grid->tools(function ($tools) {
$tools->append(new PharmacyImportAction()); // 导入药店信息
});
// 快捷搜索
$grid->quickSearch(['name', 'mobile'])->placeholder('请输入[药店名称|管理员手机号]')->width(25);
......@@ -215,4 +226,25 @@ protected function form()
$form->disableViewButton(); // 去掉跳转详情页按钮
});
}
/**
* 药店导入模板
*
* @return \Symfony\Component\HttpFoundation\BinaryFileResponse
*/
public function exportPharmacyTemplate(Request $request)
{
$sheet1Head = ['药店名称', '地区', '详细地址', '药店管理员手机号', '营业开始时间', '营业结束时间'];
$sheet1Data = [['江阴康麦医药有限公司', '江苏省/无锡市/江阴市', '利港街道 利南街41号', '13012345678', '06:30:00', '21:30:00']];
$sheet1 = Excel::createSheet($sheet1Data, '药店信息', $sheet1Head)->row(function (array $row) {
$style = (new StyleBuilder)
->setBackgroundColor(Color::YELLOW)
->build();
return WriterEntityFactory::createRowFromArray($row, $style);
});
return Excel::export([$sheet1])->headings(false)->download('药店导入模板.xlsx');
}
}
<?php
namespace App\Admin\Extensions\ToolBar\Actions;
use App\Admin\Extensions\ToolBar\Forms\PharmacyImportForm;
use Dcat\Admin\Grid\Tools\AbstractTool;
use Dcat\Admin\Widgets\Modal;
class PharmacyImportAction extends AbstractTool
{
public $title = '导入药店';
public function html(): Modal
{
return Modal::make()
->lg()
->title($this->title)
->body(new PharmacyImportForm())
->button("<button class='btn btn-success'><i class='feather icon-upload'></i>&nbsp;{$this->title}</button>");
}
}
......@@ -120,14 +120,14 @@ public function form()
{
$this->file('import_file', '文件')
->disk('local')
->accept('xls,xlsx,csv')
->accept('xlsx,csv')
->maxSize(1024 * 30)
->autoUpload()
->uniqueName()
->required()
->help("导入要求:<br />
<span style='color:red;'>
1、支持xls、xlsx、csv三种格式<br \>
1、支持xlsx、csv两种格式<br \>
2、更新的时候根据本位码唯一更新药品信息
</span>");
$downloadUrl = admin_url('drug-template');
......
<?php
namespace App\Admin\Extensions\ToolBar\Forms;
use App\Models\PharmacyModel;
use Dcat\Admin\Http\JsonResponse;
use Dcat\Admin\Widgets\Form;
use Dcat\EasyExcel\Excel;
use Dcat\EasyExcel\Support\SheetCollection;
use Exception;
set_time_limit(1800);
ini_set('memory_limit', '-1');
ini_set('max_execution_time', 10800);
ini_set('max_input_time', 10800);
class PharmacyImportForm extends Form
{
/**
* 处理表单提交逻辑.
*/
public function handle(array $input): JsonResponse
{
// 表单参数
$file = $input['import_file'];
$filePath = storage_path('app/'.$file);
try {
// 每100行数据为一批数据进行读取
$chunkSize = 10;
$successNum = 0;
$failNum = 0;
Excel::import($filePath)->first()->chunk($chunkSize, function (SheetCollection $collection) use (&$successNum) {
// 此处的数组下标依然是excel表中数据行的行号
$rows = $collection->toArray();
foreach ($rows as $row) {
$item = array_map(function ($value) {
return is_string($value) ? trim($value) : $value;
}, $row);
$pharmacyModel = null;
if (isset($item['药店管理员手机号']) && $item['药店管理员手机号']) {
$pharmacyModel = PharmacyModel::where('mobile', $item['药店管理员手机号'])->first();
}
if (! $pharmacyModel) {
$pharmacyModel = new PharmacyModel;
}
$pharmacyModel->name = $item['药店名称'] ?? 0;
$pharmacyModel->area = $item['地区'];
$pharmacyModel->address = $item['详细地址'];
$pharmacyModel->mobile = $item['药店管理员手机号'];
$pharmacyModel->business_start = $item['营业开始时间'];
$pharmacyModel->business_end = $item['营业结束时间'];
if ($pharmacyModel->save()) {
$successNum++;
}
}
});
$return = $this->response()->success("导入成功{$successNum}条")->refresh();
unlink($filePath);
} catch (Exception $e) {
$return = $this->response()->error("导入失败{$failNum}条:".$e->getMessage());
}
return $return;
}
/**
* 构造表单.
*/
public function form()
{
$this->file('import_file', '文件')
->disk('local')
->accept('xlsx,csv')
->maxSize(1024 * 30)
->autoUpload()
->uniqueName()
->required()
->help("导入要求:<br />
<span style='color:red;'>
1、支持xlsx、csv两种格式<br \>
</span>");
$downloadUrl = admin_url('pharmacy-template');
$this->html("<a target='_blank' href='{$downloadUrl}'>下载药店导入模板</a>");
}
}
......@@ -42,6 +42,8 @@
$router->resource('pharmacist', 'PharmacistController');
// 药店-药店纠错
$router->resource('pharmacy-correction', 'PharmacyCorrectionController');
// 下载导出模板
$router->get('pharmacy-template', 'PharmacyController@exportPharmacyTemplate');
// 处方-处方列表
$router->resource('prescription', 'PrescriptionController');
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment