hospital-applets-api/app/Services/OrderPrescriptionService.php
2023-04-04 18:39:10 +08:00

810 lines
36 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Services;
use App\Constants\HttpEnumCode;
use App\Exception\BusinessException;
use App\Model\PatientFamily;
use App\Model\Product;
use App\Model\UserCaCert;
use App\Model\HospitalDepartmentCustom;
use App\Model\OrderInquiryCase;
use App\Model\OrderPrescription;
use App\Model\OrderPrescriptionIcd;
use App\Model\OrderPrescriptionProduct;
use App\Model\OrderProductItem;
use App\Model\User;
use App\Model\UserDoctor;
use App\Model\UserDoctorInfo;
use App\Model\UserPharmacist;
use App\Model\UserPharmacistInfo;
use App\Utils\Log;
use Extend\Alibaba\Oss;
use Extend\Ca\Ca;
use Extend\Prescription\Prescription;
use Hyperf\Contract\LengthAwarePaginatorInterface;
use Hyperf\Utils\WaitGroup;
use Intervention\Image\ImageManager;
use TCPDF;
class OrderPrescriptionService extends BaseService
{
/**
* 获取医生是否存在被驳回处方
* @param string $doctor_id 医生id
* @return bool
*/
public function getDoctorExistsAuditFail(string $doctor_id): bool
{
$params = array();
$params['doctor_id'] = $doctor_id;
$params['pharmacist_audit_status'] = 2;// 处方审核状态0:审核中 1:审核成功 2:审核驳回)
$params['platform_audit_status'] = 1;// 处方平台审核状态0:审核中 1:审核成功 2:审核驳回)
$params['is_delete'] = 0;// 是否删除0:否 1:是)
return OrderPrescription::getExists($params);
}
/**
* 获取药师待审核处方-分页
* @param string $pharmacist_id 药师id
* @param int $pharmacist_audit_status 药师审核状态0:审核中 1:审核成功 2:审核驳回)
* @param int $platform_audit_status
* @param string|int $page
* @param string|int $per_page
* @return array
*/
public function getPharmacistWaitAuditPage(string $pharmacist_id, int $pharmacist_audit_status, int $platform_audit_status, string|int $page = 1, string|int $per_page = 10): array
{
$params = array();
$params['pharmacist_id'] = $pharmacist_id;
$params['pharmacist_audit_status'] = $pharmacist_audit_status; // 药师审核状态0:审核中 1:审核成功 2:审核驳回)
$params['platform_audit_status'] = $platform_audit_status; // 处方平台审核状态0:审核中 1:审核成功 2:审核驳回)
return OrderPrescription::getPage($params, ['*'], $page, $per_page);
}
/**
* 获取处方中开方药品
* @param string|int $order_prescription_id
* @return array
*/
public function getproductList(string|int $order_prescription_id): array
{
$params = array();
$params['order_prescription_id'] = $order_prescription_id;
$order_prescription_products = OrderPrescriptionProduct::getLimit($params);
if (empty($order_prescription_products)) {
return [];
}
$result = [];
foreach ($order_prescription_products as $order_prescription_product) {
$data = array();
$data['product_id'] = $order_prescription_product['product_id'];
$data['prescription_product_num'] = $order_prescription_product['prescription_product_num'];
$data['product_name'] = $order_prescription_product['product_name'] ?? "";
$data['product_spec'] = $order_prescription_product['product_spec'] ?? "";
$data['single_unit'] = $order_prescription_product['single_unit'] ?? "";
$data['single_use'] = $order_prescription_product['single_use'] ?? "";
$data['packaging_unit'] = $order_prescription_product['packaging_unit'] ?? "";
$data['frequency_use'] = $order_prescription_product['frequency_use'] ?? "";
$data['available_days'] = $order_prescription_product['available_days'] ?? 0;
$result[] = $data;
}
unset($order_product_items);
return $result;
}
/**
* 获取患者某一状态下的处方数量
* @param string $patient_id 患者id
* @param int $prescription_status 处方状态1:待审核 2:待使用 3:已失效 4:已使用)
* @return int
*/
public function getPatientPrescriptionWithStatus(string $patient_id, int $prescription_status): int
{
$params = array();
$params['patient_id'] = $patient_id;
$params['prescription_status'] = $prescription_status;
$params['pharmacist_audit_status'] = 1;
return OrderPrescription::getCount($params);
}
/**
* 开具处方
* 医生-正常开具
* 药师-先开具药师处方,再开具医院签章
* @param string $order_prescription_id
* @param string $user_id
* @return array
*/
public function openPrescription(string $order_prescription_id, string $user_id): array
{
try {
// 获取用户数据
$params = array();
$params['user_id'] = $user_id;
$user = User::getOne($params);
if (empty($user)) {
throw new BusinessException("用户数据错误");
}
if ($user['user_type'] != 2 && $user['user_type'] != 3) {
throw new BusinessException("用户类型错误");
}
// 获取用户info数据
$params = array();
$params['user_id'] = $user['user_id'];
if ($user['user_type'] == 2) {
$user_doctor_info = UserDoctorInfo::getOne($params);
if (empty($user_doctor_info)) {
throw new BusinessException("用户数据错误");
}
$user_sign_image_path = $user_doctor_info['sign_image'];
$user_entity_id = "491925054435950592";
} else {
$user_pharmacist_info = UserPharmacistInfo::getOne($params);
if (empty($user_pharmacist_info)) {
throw new BusinessException("用户数据错误");
}
$user_sign_image_path = $user_pharmacist_info['sign_image'];
$user_entity_id = $user['user_id'];
$hospital_sign_image_path = "basic/file/hospital_signature.png";
$hospital_entity_id = "5345345461";
}
if (empty($user_sign_image_path) || empty($user_entity_id)) {
throw new BusinessException("无签名图片/用户唯一标识");
}
// 去除第一个/ oss不识别
$sign_image_path = substr($user_sign_image_path, 1, strlen($user_sign_image_path) - 1);
// 获取处方数据
$params = array();
$params['order_prescription_id'] = $order_prescription_id;
$order_prescription = OrderPrescription::getOne($params);
if (empty($order_prescription)) {
throw new BusinessException("处方数据错误");
}
if (empty($order_prescription['doctor_created_time'])) {
throw new BusinessException("医生开方日期错误");
}
// 检测处方图片
if ($user['user_type'] == 3 && empty($order_prescription['prescription_img'])) {
throw new BusinessException("处方图片错误");
}
// 获取处方关联疾病数据
$params = array();
$params['order_prescription_id'] = $order_prescription_id;
$order_prescription_icd = OrderPrescriptionIcd::getList($params);
if (empty($order_prescription_icd)) {
throw new BusinessException("处方疾病数据错误");
}
// 获取处方关联商品数据
$params = array();
$params['order_prescription_id'] = $order_prescription_id;
$order_prescription_product = OrderPrescriptionProduct::getList($params);
if (empty($order_prescription_product)) {
throw new BusinessException("处方药品数据错误");
}
// 获取医生数据
$params = array();
$params['doctor_id'] = $order_prescription['doctor_id'];
$user_doctor = UserDoctor::getOne($params);
if (empty($user_doctor)) {
throw new BusinessException("医生数据错误");
}
// 获取医生自定义科室数据
$params = array();
$params['department_custom_id'] = $user_doctor['department_custom_id'];
$hospital_department_custom = HospitalDepartmentCustom::getOne($params);
if (empty($hospital_department_custom)) {
throw new BusinessException("医生自定义数据错误");
}
// 获取处方关联病例数据
$params = array();
$params['order_inquiry_id'] = $order_prescription['order_inquiry_id'];
$order_inquiry_case = OrderInquiryCase::getOne($params);
if (empty($order_inquiry_case)) {
throw new BusinessException("处方病例数据错误");
}
// 处理疾病数据
$icd_name = array_column($order_prescription_icd->toArray(), 'icd_name');
if (!empty($icd_name)) {
if (count($icd_name) > 1) {
$icd_name = implode(';', $icd_name);
} else {
$icd_name = $icd_name[0];
}
} else {
$icd_name = "";
}
$ca = new Ca();
// 获取云证书签名
$data = array();
$data['created_at'] = $order_prescription['doctor_created_time'];
$data['department_custom_name'] = $hospital_department_custom['department_name'] ?: "";
$data['user_name'] = $order_prescription['patient_name'];
$data['sex'] = sexToStringSex($order_prescription['patient_sex']);
$data['age'] = $order_prescription['patient_age'];
$data['allergy_history'] = $order_inquiry_case['allergy_history'] ?: "";
$data['icd_name'] = $icd_name;
$data['doctor_advice'] = $order_prescription['doctor_advice'] ?: "";
// 商品数据
$data['product'] = array();
foreach ($order_prescription_product as $item) {
$product = array();
$product['product_name'] = $item['product_name'] . "(" . $item['product_spec'] . ")"; // 商品名称+商品规格
$product['single_unit'] = $item['single_unit'] ?: ""; // 单次剂量1次1包
$product['frequency_use'] = $item['frequency_use'] ?: ""; // 使用频率(例1天3次)
$product['single_use'] = $item['single_use'] ?: ""; // 单次用法(例:口服)
$product['prescription_product_num'] = $item['prescription_product_num'] . $item['packaging_unit']; // 商品数量 + 基本包装单位(例:盒/瓶)
$data['product'][] = $product;
}
$cert_sign_result = $ca->getCertSign($user_entity_id, $user_entity_id, $data);
// 验证云证书签名-验证无需处理,只要不返回错误即可
$ca->verifyPkcs7($cert_sign_result['signP7'], $data);
dump("云证书签名验证成功");
if ($user['user_type'] == 3) {
$cert_sign_result = $ca->getCertSign($hospital_entity_id, $hospital_entity_id, $data);
// 验证云证书签名-验证无需处理,只要不返回错误即可
$ca->verifyPkcs7($cert_sign_result['signP7'], $data);
dump("医院云证书签名获取成功");
}
$oss = new Oss();
// 医生
if ($user['user_type'] == 2) {
// 下载基础处方图片
$prescription_basic_filename = "basic/file/prescription.jpg";
$prescription_image = $oss->getObjectToRAM($prescription_basic_filename);
dump("下载基础处方图片成功");
$manager = new ImageManager();
$image = $manager->make($prescription_image);
$fontPath = './extend/Ca/msyh.ttf';
// 处方号
$image->text($order_prescription['prescription_code'], 1480, 540, function ($font) use ($fontPath) {
$font->file($fontPath);
$font->size(60);
$font->align('left');
});
// 日期
$image->text(date('Y-m-d', strtotime($order_prescription['doctor_created_time'])), 354, 675, function ($font) use ($fontPath) {
$font->file($fontPath);
$font->size(60);
$font->align('left');
});
// 科室
$image->text($hospital_department_custom['department_name'] ?: "", 1385, 675, function ($font) use ($fontPath) {
$font->file($fontPath);
$font->size(60);
$font->align('left');
});
// 姓名
$image->text($order_prescription['patient_name'], 354, 795, function ($font) use ($fontPath) {
$font->file($fontPath);
$font->size(60);
$font->align('left');
});
// 性别
$image->text(sexToStringSex($order_prescription['patient_sex']), 1385, 790, function ($font) use ($fontPath) {
$font->file($fontPath);
$font->size(60);
$font->align('left');
});
// 年龄
$image->text($order_prescription['patient_age'], 354, 900, function ($font) use ($fontPath) {
$font->file($fontPath);
$font->size(60);
$font->align('left');
});
// 过敏史
$image->text($order_inquiry_case['allergy_history'] ?: "", 405, 1030, function ($font) use ($fontPath) {
$font->file($fontPath);
$font->size(60);
$font->align('left');
});
// 初步诊断
$image->text($icd_name, 445, 1145, function ($font) use ($fontPath) {
$font->file($fontPath);
$font->size(60);
$font->align('left');
});
// 医生建议
$image->text($order_prescription['doctor_advice'] ?: "", 445, 1252, function ($font) use ($fontPath) {
$font->file($fontPath);
$font->size(60);
$font->align('left');
});
// 商品数据
foreach ($order_prescription_product as $key => $item) {
$x_axis = 229;
$y_axis = 1600 + $key * 250;
$x_axis_num = 1900;// 数量使用
// 商品名称
$image->text($item['product_name'], $x_axis, $y_axis, function ($font) use ($fontPath) {
$font->file($fontPath);
$font->size(50);
$font->align('left');
});
$image->text("X" . $item['prescription_product_num'] . $item['packaging_unit'], $x_axis_num, $y_axis, function ($font) use ($fontPath) {
$font->file($fontPath);
$font->size(50);
$font->align('left');
});
// 用量
$image->text("用量:" . $item['single_unit'] . " " . $item['frequency_use'], $x_axis, $y_axis + 70, function ($font) use ($fontPath) {
$font->file($fontPath);
$font->size(50);
$font->align('left');
});
// 用法
$image->text("用法:" . $item['single_use'], $x_axis, $y_axis + 140, function ($font) use ($fontPath) {
$font->file($fontPath);
$font->size(50);
$font->align('left');
});
}
// 生成图片
$img_result = (string)$image->encode('png', 75);
dump("处方图片生成成功");
// 上传处方图片至oss
$prescription_img_oss_filename = "applet/prescription/" . $order_prescription['order_prescription_id'] . '.' . 'jpg';
$prescription_img_url = $oss->putObject($prescription_img_oss_filename, $img_result);
$prescription_img_url = '/' . $prescription_img_url;
dump("处方图片上传oss成功");
// 图片生成pdf
$pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);
$pdf->AddPage();
$pdf->Image('@' . $img_result, 10, 10, 0, 0, '', '', '', false, 300, '', false, false, 0, false, false, false);
$prescription_pdf_local_filename = $order_prescription['order_prescription_id'] . '.' . 'pdf';
// 图片生成的处方pdf存储为本地文件
$pdf->Output(dirname(__DIR__, 2) . "/" . $prescription_pdf_local_filename, "F");
dump("处方图片生成pdf成功");
}
// 药师
if ($user['user_type'] == 3) {
// 下载医生开具的处方pdf
// 去除第一个/ oss不识别
$prescription_pdf_path = substr($order_prescription['prescription_pdf'], 1, strlen($order_prescription['prescription_pdf']) - 1);
$local = "./runtime/" . $order_prescription['order_prescription_id'] . '.' . 'pdf';
$oss->getObjectToLocal($prescription_pdf_path, $local);
dump("下载医生开具的处方pdf成功");
}
// 下载签名图片
$style = "image/resize,m_lfit,w_100,h_350";
$sign_image = $oss->getCusTomObjectToRAM($sign_image_path, $style);
$sign_image = base64_encode($sign_image);
if (!$sign_image) {
throw new BusinessException("签名图片下载失败");
}
dump("下载签名图片成功");
if ($user['user_type'] == 2) {
$sign_param = [
[ // 医生端
"llx" => "120", // 左边底部X坐标
"lly" => "190", // 左边底部Y坐标
"urx" => "190", // 右边上部x坐标
"ury" => "140", // 右边上部y坐标
"pageList" => [1],
"sealImg" => $sign_image
],
];
} else {
$sign_param = [
[ // 药师端
"llx" => "350", // 左边底部X坐标
"lly" => "190", // 左边底部Y坐标
"urx" => "440", // 右边上部x坐标
"ury" => "140", // 右边上部y坐标
"pageList" => [1],
"sealImg" => $sign_image
]
];
}
// 打开处方pdf文件
$pdf_file = fopen("./runtime/" . $order_prescription['order_prescription_id'] . ".pdf", 'r');
if (!$pdf_file) {
throw new BusinessException("处方图片打开失败");
}
// 处方pdf进行签章
$data = array();
$data['sign_param'] = json_encode($sign_param);
$data['pdf_file'] = $pdf_file;
$sign_pdf_result = $ca->addSignPdf($user_entity_id, $data);
if (empty($sign_pdf_result[0]['fileId'])) {
throw new BusinessException("处方签章失败");
}
dump("处方pdf进行签章成功");
// 下载处方签章文件
$file_id = $sign_pdf_result[0]['fileId'];
$prescription_pdf_result = $ca->getSignedFile($user_entity_id, $file_id);
if (empty($prescription_pdf_result)) {
throw new BusinessException("下载处方签章文件失败");
}
dump("下载处方签章文件成功");
// 上传oss
$filename = "applet/prescription/" . $order_prescription['order_prescription_id'] . '.' . 'pdf';
$prescription_pdf_url = $oss->putObject($filename, $prescription_pdf_result);
dump("处方pdf上传pss成功");
if ($user['user_type'] == 3) {
// 药师端时,需要进行系统签章
// 把药师签章的pdf存储至本地文件
$file = fopen("./runtime/" . $order_prescription['order_prescription_id'] . '.' . 'pdf', "w");
fwrite($file, $prescription_pdf_result);
fclose($file);
// 下载医院签名图片
$style = "image/resize,w_300,h_300";
$sign_image = $oss->getCusTomObjectToRAM($hospital_sign_image_path, $style);
$sign_image = base64_encode($sign_image);
if (!$sign_image) {
throw new BusinessException("医院签名图片下载失败");
}
$sign_param = [
[ // 医院签章
"llx" => "370", // 左边底部X坐标 控制左右(越小越左)
"lly" => "210", // 左边底部Y坐标 控制上下(越小越下)
"urx" => "520", // 右边上部x坐标
"ury" => "360", // 右边上部y坐标
"pageList" => [1],
"sealImg" => $sign_image
],
];
// 打开处方pdf文件
unset($pdf_file);
$pdf_file = fopen("./runtime/" . $order_prescription['order_prescription_id'] . ".pdf", 'r');
// 处方pdf进行签章
$data = array();
$data['sign_param'] = json_encode($sign_param);
$data['pdf_file'] = $pdf_file;
$hospital_sign_pdf_result = $ca->addSignPdf($hospital_entity_id, $data);
if (empty($hospital_sign_pdf_result[0]['fileId'])) {
throw new BusinessException("处方签章失败");
}
dump("处方pdf进行医院签章成功");
// 下载处方签章文件
unset($prescription_pdf_result);
$file_id = $hospital_sign_pdf_result[0]['fileId'];
$prescription_pdf_result = $ca->getSignedFile($hospital_entity_id, $file_id);
if (empty($prescription_pdf_result)) {
throw new BusinessException("下载处方签章文件失败");
}
dump("下载医院处方签章文件成功");
// 上传oss
$hospital_filename = "applet/prescription/" . $order_prescription['order_prescription_id'] . '.' . 'pdf';
$prescription_pdf_url = $oss->putObject($hospital_filename, $prescription_pdf_result);
dump("上传医院处方签章文件成功");
}
$result = array();
$result['prescription_img_url'] = $prescription_img_url ?? $order_prescription['prescription_img'];
$result['prescription_pdf_url'] = '/' . $prescription_pdf_url ?: "";
return $result;
} catch (\Exception $e) {
throw new BusinessException($e->getMessage());
}
}
// 上报处方平台
public function reportPrescription(array $order_inquiry, array $order_prescription, array $order_prescription_product, array $order_product)
{
$wg = new WaitGroup();
$wg->add(8);
$user = []; // 就诊患者用户数据
$patient_family = []; // 家庭成员-基本信息
$order_prescription_icd = []; // 处方关联疾病数据
$user_doctor = []; // 医生数据
$user_doctor_info = []; // 医生详情数据
$user_pharmacist = []; // 药师数据
$user_pharmacist_info = []; // 药师详数据
$order_inquiry_case = []; // 病例数据
// 获取就诊患者用户数据
$user_id = $order_inquiry['user_id'];
co(function () use ($wg, &$user, $user_id) {
$params = array();
$params['user_id'] = $user_id;
$user = User::getOne($params)->toArray();
// 计数器减一
$wg->done();
});
// 获取家庭成员-基本信息
$family_id = $order_inquiry['family_id'];
co(function () use ($wg, &$patient_family, $family_id) {
$params = array();
$params['family_id'] = $family_id;
$patient_family = PatientFamily::getOne($params);
// 计数器减一
$wg->done();
});
// 获取处方关联疾病数据
$order_prescription_id = $order_prescription['order_prescription_id'];
co(function () use ($wg, &$order_prescription_icd, $order_prescription_id) {
$params = array();
$params['order_prescription_id'] = $order_prescription_id;
$order_prescription_icd = OrderPrescriptionIcd::getList($params);
// 计数器减一
$wg->done();
});
// 获取医生数据
$doctor_id = $order_prescription['doctor_id'];
co(function () use ($wg, &$user_doctor, $doctor_id) {
$params = array();
$params['doctor_id'] = $doctor_id;
$user_doctor = UserDoctor::getOne($params);
// 计数器减一
$wg->done();
});
// 获取医生详情数据
$doctor_id = $order_prescription['doctor_id'];
co(function () use ($wg, &$user_doctor_info, $doctor_id) {
$params = array();
$params['doctor_id'] = $doctor_id;
$user_doctor_info = UserDoctorInfo::getOne($params);
// 计数器减一
$wg->done();
});
// 获取药师数据
$pharmacist_id = $order_prescription['pharmacist_id'];
co(function () use ($wg, &$user_pharmacist, $pharmacist_id) {
$params = array();
$params['pharmacist_id'] = $pharmacist_id;
$user_pharmacist = UserPharmacist::getOne($params);
// 计数器减一
$wg->done();
});
// 获取药师详情数据
$pharmacist_id = $order_prescription['pharmacist_id'];
co(function () use ($wg, &$user_pharmacist_info, $pharmacist_id) {
$params = array();
$params['pharmacist_id'] = $pharmacist_id;
$user_pharmacist_info = UserPharmacistInfo::getOne($params);
// 计数器减一
$wg->done();
});
// 获取病例数据
$order_inquiry_id = $order_inquiry['order_inquiry_id'];
co(function () use ($wg, &$order_inquiry_case, $order_inquiry_id) {
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
$params['status'] = 1;
$order_inquiry_case = OrderInquiryCase::getOne($params);
// 计数器减一
$wg->done();
});
$wg->wait();
if (empty($user)) {
throw new BusinessException("用户数据错误");
}
if (empty($patient_family)) {
throw new BusinessException("用户家庭成员错误");
}
if (empty($order_prescription_icd)) {
throw new BusinessException("处方疾病数据错误");
}
if (empty($user_doctor)) {
throw new BusinessException("医生数据错误");
}
if (empty($user_doctor_info)) {
throw new BusinessException("医生详情数据错误");
}
if (empty($user_pharmacist)) {
throw new BusinessException("药师数据错误");
}
if (empty($user_pharmacist_info)) {
throw new BusinessException("药师详情数据错误");
}
if (empty($order_inquiry_case)) {
throw new BusinessException("病例数据错误");
}
// 处理疾病数据
$icd_name = array_column($order_prescription_icd->toArray(), 'icd_name');
if (!empty($icd_name)) {
if (count($icd_name) > 1) {
$icd_name = implode(';', $icd_name);
} else {
$icd_name = $icd_name[0];
}
} else {
$icd_name = "";
}
// 获取医生科室
$params = array();
$params['department_custom_id'] = $user_doctor['department_custom_id'];
$hospital_department_custom = HospitalDepartmentCustom::getOne($params);
if (empty($hospital_department_custom)) {
throw new BusinessException("医生科室数据错误");
}
$arg = array();
$arg['terminalCode'] = "ZD-10003";
$arg['orderNo'] = $order_product['order_product_no']; // 订单编号
$arg['transactNo'] = $order_product['escrow_trade_no']; // 流水单号
$arg['payDate'] = $order_product['pay_time']; // 支付时间
$arg['money'] = $order_product['payment_amount_total']; // 订单金额
$arg['freight'] = $order_product['logistics_fee']; // 运费(单位:元)
$arg['takeTypeCode'] = 2; // 取货方式 1 自提 2 快递,目前只支持快递,传固定值 2
$arg['buyerName'] = $order_product['consignee_name'];// 收货人姓名
$arg['buyerPhone'] = $order_product['consignee_tel'];// 收货人联系方式
$arg['buyerAddress'] = $order_product['address'];// 收货人地址
$arg['provinceCode'] = $order_product['province_id']; // 收货地址(省) 编码
$arg['provinceName'] = $order_product['province']; // 收货地址(省) 名称
$arg['cityCode'] = $order_product['city_id']; // 收货地址(市) 编码
$arg['cityName'] = $order_product['city']; // 收货地址(市) 名称
$arg['districtCode'] = $order_product['county_id']; // 收货地址(区 县)编码
$arg['districtName'] = $order_product['county']; // 收货地址(区 县)名称
$arg['presList'][0]['prescriptionNo'] = $order_prescription['prescription_code']; // 处方编号
$arg['presList'][0]['prescriptionSubType'] = 1; // 处方类型 0无类型 1普 通处方 2儿科处 方
$arg['presList'][0]['patientName'] = $order_prescription['patient_name']; // 就诊人姓名
$arg['presList'][0]['patientPhone'] = $user['mobile']; // 就诊人联系方式
$arg['presList'][0]['idCard'] = $patient_family['id_number']; // 身份证号
$arg['presList'][0]['advice'] = $order_prescription['doctor_advice'] ?: ""; // 医嘱
$arg['presList'][0]['diagnosisName'] = $icd_name ?: ""; // 诊断
$arg['presList'][0]['thirdDoctorName'] = $user_doctor['user_name']; // 开方医生姓名
$arg['presList'][0]['thirdDeptName'] = $hospital_department_custom['department_name'] ?: ""; // 开方科室名称
$arg['presList'][0]['thirdDoctorNameImg'] = addAliyunOssWebsite($user_doctor_info['sign_image']); // 开方医生签名链接
$arg['presList'][0]['prescriptionTime'] = $order_prescription['doctor_created_time']; // 开方时间
$arg['presList'][0]['thirdFirstPharmacist'] = $user_pharmacist['user_name']; // 初审药师姓名
$arg['presList'][0]['thirdFirstPharmacistImg'] = addAliyunOssWebsite($user_pharmacist_info['sign_image']); // 初审药师签名链接
$arg['presList'][0]['thirdFirstTime'] = $order_prescription['pharmacist_verify_time']; // 初审时间
$arg['presList'][0]['thirdLastPharmacist'] = $user_pharmacist['user_name']; // 终审药师姓名
$arg['presList'][0]['thirdLastPharmacistImg'] = addAliyunOssWebsite($user_pharmacist_info['sign_image']); // 终审药师签名 链接
$arg['presList'][0]['ThirdLastTime'] = $order_prescription['pharmacist_verify_time']; // 终审时间
$arg['presList'][0]['thirdSignImg'] = addAliyunOssWebsite("/basic/file/hospital_signature.png"); // 处方签章链接
$arg['presList'][0]['referenceCharge'] = $order_product['amount_total']; // 处方费用(不包含运费)
$arg['presList'][0]['chiefComplaint'] = $order_inquiry_case['disease_desc'] ?: ""; // 主诉
$arg['presList'][0]['historyPresent'] = $order_inquiry_case['disease_class_name'] ?: ""; // 现病史
$arg['presList'][0]['pastHistory'] = $order_inquiry_case['family_history'] ?: ""; // 既往史
$arg['presList'][0]['physicalExamination'] = ""; // 体格检查
$arg['presList'][0]['supplementaryExamination'] = ""; // 辅助检查
$arg['presList'][0]['allergicHistory'] = $order_inquiry_case['allergy_history'] ?: ""; // 过敏史
// 药品数据
foreach ($order_prescription_product as $key => $item) {
// 获取商品数据
$pamras = array();
$pamras['product_id'] = $item['product_id'];
$product = Product::getOne($pamras);
if (empty($product)) {
throw new BusinessException("药品数据错误");
}
$arg['presList'][0]['drugList'][$key]['drugCode'] = $product['product_platform_code']; // 药品编码
$arg['presList'][0]['drugList'][$key]['approvalNumber'] = $product['license_number']; // 批准文号
$arg['presList'][0]['drugList'][$key]['drugName'] = $product['product_name']; // 药品名称
$arg['presList'][0]['drugList'][$key]['specifications'] = $product['product_spec']; // 药品规格
$arg['presList'][0]['drugList'][$key]['price'] = $product['product_price']; // 药品单价
$arg['presList'][0]['drugList'][$key]['packingCount'] = $item['prescription_product_num']; // 药品数量
$arg['presList'][0]['drugList'][$key]['surplusPackingCount'] = 0; // 处方药品剩余使用数量
$arg['presList'][0]['drugList'][$key]['packingUnit'] = $product['packaging_unit']; // 药品单位
$arg['presList'][0]['drugList'][$key]['singleDosage'] = 1; // 单次用量
$arg['presList'][0]['drugList'][$key]['singleDosageUnit'] = ""; // 单次用量单位
$arg['presList'][0]['drugList'][$key]['useName'] = $product['single_use']; // 用法名称
$arg['presList'][0]['drugList'][$key]['frequencyName'] = $product['frequency_use']; // 频次名称
$arg['presList'][0]['drugList'][$key]['useDays'] = $product['available_days']; // 使用天数
$arg['presList'][0]['orderDrugList'][$key]['drugCode'] = $product['product_platform_code']; // 药品编码
$arg['presList'][0]['orderDrugList'][$key]['approvalNumber'] = $product['license_number']; // 批准文号
$arg['presList'][0]['orderDrugList'][$key]['drugName'] = $product['product_name']; // 药品名称
$arg['presList'][0]['orderDrugList'][$key]['specifications'] = $product['product_spec']; // 药品规格
$arg['presList'][0]['orderDrugList'][$key]['price'] = $product['product_price']; // 药品单价
$arg['presList'][0]['orderDrugList'][$key]['drugCount'] = $item['prescription_product_num']; // 药品数量
$arg['presList'][0]['orderDrugList'][$key]['packingUnit'] = $product['packaging_unit']; // 药品单位
}
Log::getInstance()->info(json_encode($arg,JSON_UNESCAPED_UNICODE));
dump($arg);
$Prescription = new Prescription();
$result = $Prescription->reportPrescription($arg);
dump($result);
if ($result['resultCode'] != "1000"){
if ($result['resultCode'] == "1008"){
// 没有相关药品或库存不足
}
if(!empty($result['resultDesc'])){
throw new BusinessException($result['resultDesc']);
}
throw new BusinessException("上报处方平台失败");
}
return $arg;
}
}