Commit 4883b7d1 by lujunyi

处方打印

parent e8005877
...@@ -144,17 +144,15 @@ protected function form() ...@@ -144,17 +144,15 @@ protected function form()
$form->hidden('pharmacist_license_number'); $form->hidden('pharmacist_license_number');
$form->hidden('pharmacist_signed_pic'); $form->hidden('pharmacist_signed_pic');
// $form->multipleSelect('inquiry_info')->options(InquiryModel::all()->pluck('question', 'id'))->width(4)->saving(function ($v) {
// return json_encode($v);
// });
$form->table('inquiry_info', function ($table) { $form->table('inquiry_info', function ($table) {
$table->select('inquiry', '问题项')->options(InquiryModel::all()->pluck('question', 'id'))->width(3); $table->select('inquiry', '问题项')->options(InquiryModel::all()->pluck('question', 'id'));
$table->radio('selected', '选择项')->options([1 => '是', 0 => '否'])->width(43); $table->radio('selected', '选择项')->options([1 => '是', 0 => '否']);
})->saveAsJson(); })->saveAsJson();
$form->multipleSelect('drug_info')->options(PharmacyDrugModel::with('drug')->get()->pluck('drug')->pluck('name', 'id'))->width(4)->saving(function ($v) { $form->table('drug_info', function ($table) {
return json_encode($v); $table->select('pharmacy_drug', '药品')->options(PharmacyDrugModel::with('drug')->get()->pluck('drug.name', 'id'))->width(3);
}); $table->number('num', '数量')->min(1)->default(1)->width(4);
})->saveAsJson();
$form->switch('is_voided')->width(4); $form->switch('is_voided')->width(4);
$form->display('created_at')->width(4); $form->display('created_at')->width(4);
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
namespace App\Admin\Controllers; namespace App\Admin\Controllers;
use App\Models\PatientModel;
use App\Models\PharmacyDrugModel;
use App\Models\PrescriptionModel; use App\Models\PrescriptionModel;
use Dcat\Admin\Http\Controllers\AdminController; use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Layout\Content; use Dcat\Admin\Layout\Content;
...@@ -34,8 +36,7 @@ public function search() ...@@ -34,8 +36,7 @@ public function search()
]); ]);
} }
try { // try {
// 获取处方信息 // 获取处方信息
$prescription = PrescriptionModel::where('id', $prescriptionNo)->first(); $prescription = PrescriptionModel::where('id', $prescriptionNo)->first();
if (! $prescription) { if (! $prescription) {
...@@ -55,11 +56,10 @@ public function search() ...@@ -55,11 +56,10 @@ public function search()
// 处方背景图宽1653,高2339 // 处方背景图宽1653,高2339
$img = Image::read(public_path('static/images/chufangdan.jpg')); $img = Image::read(public_path('static/images/chufangdan.jpg'));
// 医院
$imageWidth = 1653; $imageWidth = 1653;
// 手动调整 X 坐标以居中 $centerX = $imageWidth / 2; // 手动调整 X 坐标以居中
$centerX = $imageWidth / 2; // 医院
$img->text('江阴康恒诊所处方', $centerX, 70, function ($font) { $img->text($prescription->doctor_online_hospital_name, $centerX, 70, function ($font) {
$font->filename(public_path('static/fonts/SimHei.ttf')); $font->filename(public_path('static/fonts/SimHei.ttf'));
$font->size(72); $font->size(72);
$font->color('#000000'); $font->color('#000000');
...@@ -67,70 +67,63 @@ public function search() ...@@ -67,70 +67,63 @@ public function search()
$font->valign('top'); // 确保文本垂直对齐方式 $font->valign('top'); // 确保文本垂直对齐方式
}); });
// 处方单编号 // 处方单编号
$img->text('处方单编号:10000001', 1170, 190, function ($font) { $img->text($prescription->id, 1170, 190, function ($font) {
$font->filename(public_path('static/fonts/SimHei.ttf')); $font->filename(public_path('static/fonts/SimHei.ttf'));
$font->size(24); $font->size(24);
$font->color('#000000'); $font->color('#000000');
}); });
// 姓名 // 姓名
$img->text('周永福', 410, 260, function ($font) { $img->text($prescription->patient_name, 410, 260, function ($font) {
$font->filename(public_path('static/fonts/SimHei.ttf')); $font->filename(public_path('static/fonts/SimHei.ttf'));
$font->size(32); $font->size(32);
$font->color('#000000'); $font->color('#000000');
}); });
// 性别 // 性别
$img->text('男', 890, 260, function ($font) { $gender = PatientModel::SEX_MAP[$prescription->patient_gender];
$img->text($gender, 890, 260, function ($font) {
$font->filename(public_path('static/fonts/SimHei.ttf')); $font->filename(public_path('static/fonts/SimHei.ttf'));
$font->size(32); $font->size(32);
$font->color('#000000'); $font->color('#000000');
}); });
// 年龄 // 年龄
$img->text('65岁', 1270, 260, function ($font) { $img->text("{$prescription->patient_age}岁", 1270, 260, function ($font) {
$font->filename(public_path('static/fonts/SimHei.ttf')); $font->filename(public_path('static/fonts/SimHei.ttf'));
$font->size(32); $font->size(32);
$font->color('#000000'); $font->color('#000000');
}); });
// 日期 // 日期
$img->text('2024-10-23', 1215, 330, function ($font) { $date = \Carbon\Carbon::parse($prescription->created_at)->format('Y-m-d');
$img->text($date, 1215, 330, function ($font) {
$font->filename(public_path('static/fonts/SimHei.ttf')); $font->filename(public_path('static/fonts/SimHei.ttf'));
$font->size(32); $font->size(32);
$font->color('#000000'); $font->color('#000000');
}); });
// 诊断 // 诊断
$img->text('呼吸道感染', 330, 460, function ($font) { $img->text($prescription->diagnosis_name, 330, 460, function ($font) {
$font->filename(public_path('static/fonts/SimHei.ttf')); $font->filename(public_path('static/fonts/SimHei.ttf'));
$font->size(32); $font->size(32);
$font->color('#000000'); $font->color('#000000');
}); });
// 假设 $prescription->medicines 是一个包含药品信息的数组 $drugInfo = $prescription->drug_info; // 每个元素包含 'pharmacy_drug', 'num'
// $medicines = $prescription->drug_info; // 每个元素包含 'name', 'spec', 'box', 'sig' $drugInfo = json_decode($drugInfo, true);
$medicines = [ $medicines = [];
[ foreach ($drugInfo as $v) {
'name' => '阿莫西林胶囊', $pharmacyDrug = PharmacyDrugModel::with(['drug', 'dosage'])->find($v['pharmacy_drug']);
'spec' => '0.5g*20粒', $medicines[] = [
'box' => 2, 'name' => $pharmacyDrug->drug->name,
'sig' => '每日三次,每次两粒,饭后服用', 'spec' => $pharmacyDrug->drug->spec,
], 'num' => $v['num'],
[ 'sig' => $pharmacyDrug->dosage->dosage_desc,
'name' => '布洛芬片',
'spec' => '0.2g*30片',
'box' => 1,
'sig' => '每日两次,每次一片,必要时服用',
],
[
'name' => '维生素C片',
'spec' => '100mg*100片',
'box' => 1,
'sig' => '每日一次,每次一片,早晨服用',
],
]; ];
}
// 初始 Y 坐标 // 初始 Y 坐标
$yCoordinate = 650; // 根据需要调整初始 Y 坐标 $yCoordinate = 650; // 根据需要调整初始 Y 坐标
foreach ($medicines as $medicine) { foreach ($medicines as $medicine) {
// 打印药品名称、规格和盒数 // 打印药品名称、规格和盒数
$medicineText = "{$medicine['name']} {$medicine['spec']} {$medicine['box']}"; $medicineText = "{$medicine['name']} {$medicine['spec']} {$medicine['num']}{$pharmacyDrug->unit}";
$img->text($medicineText, 550, $yCoordinate, function ($font) { $img->text($medicineText, 550, $yCoordinate, function ($font) {
$font->filename(public_path('static/fonts/SimHei.ttf')); $font->filename(public_path('static/fonts/SimHei.ttf'));
$font->size(32); $font->size(32);
...@@ -167,16 +160,16 @@ public function search() ...@@ -167,16 +160,16 @@ public function search()
// 医师签名图片 // 医师签名图片
if ($prescription->doctor_signed_pic) { if ($prescription->doctor_signed_pic) {
$doctorSignData = base64_decode($prescription->doctor_signed_pic); $pharmacistSignPath = Storage::url($prescription->doctor_signed_pic);
$doctorSign = Image::read($doctorSignData); $doctorSign = Image::read(file_get_contents($pharmacistSignPath));
$doctorSign->rotate(90); $doctorSign->rotate(90);
$doctorSign->resize(150, 100); $doctorSign->resize(150, 100);
$img->place($doctorSign, 'bottom-left', 400, 410); $img->place($doctorSign, 'bottom-left', 400, 410);
} }
// 药师签名图片 // 药师签名图片
if ($prescription->pharmacist_signed_pic) { if ($prescription->pharmacist_signed_pic) {
$pharmacistSignData = base64_decode($prescription->pharmacist_signed_pic); $pharmacistSignPath = Storage::url($prescription->pharmacist_signed_pic);
$pharmacistSign = Image::read($pharmacistSignData); $pharmacistSign = Image::read(file_get_contents($pharmacistSignPath));
$pharmacistSign->rotate(90); $pharmacistSign->rotate(90);
$pharmacistSign->resize(150, 100); $pharmacistSign->resize(150, 100);
$img->place($pharmacistSign, 'bottom-left', 870, 410); $img->place($pharmacistSign, 'bottom-left', 870, 410);
...@@ -204,11 +197,11 @@ public function search() ...@@ -204,11 +197,11 @@ public function search()
'img_url' => Storage::url($cosPath), 'img_url' => Storage::url($cosPath),
], ],
]); ]);
} catch (\Exception $e) { // } catch (\Exception $e) {
return response()->json([ // return response()->json([
'status' => false, // 'status' => false,
'message' => '处方生成失败:'.$e->getMessage(), // 'message' => '处方生成失败:'.$e->getMessage(),
]); // ]);
} // }
} }
} }
...@@ -35,11 +35,12 @@ public function handle(array $input) ...@@ -35,11 +35,12 @@ public function handle(array $input)
return $this->response()->error('请选择药品')->refresh(); return $this->response()->error('请选择药品')->refresh();
} }
foreach ($ids as $id) { foreach ($ids as $id) {
// $drug = DrugModel::find($id); $drug = DrugModel::find($id);
$where = ['drug_id' => $id]; $where = ['drug_id' => $id];
$data = [ $data = [
'pharmacy_id' => Admin::user()->pharmacy_id, 'pharmacy_id' => Admin::user()->pharmacy_id,
'drug_id' => $id, 'drug_id' => $id,
'unit' => $drug->unit,
]; ];
PharmacyDrugModel::updateOrCreate($where, $data); PharmacyDrugModel::updateOrCreate($where, $data);
} }
......
...@@ -13,7 +13,7 @@ class PharmacyDrugModel extends Model ...@@ -13,7 +13,7 @@ class PharmacyDrugModel extends Model
protected $table = 'pharmacy_drug'; protected $table = 'pharmacy_drug';
public $fillable = ['pharmacy_id', 'drug_id']; public $fillable = ['pharmacy_id', 'drug_id', 'unit'];
// 关联药品池 // 关联药品池
public function drug() public function drug()
......
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