Commit 4883b7d1 by lujunyi

处方打印

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