hospital-applets-api/app/Services/PatientFamilyService.php
2023-02-17 17:10:16 +08:00

215 lines
7.4 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\Model\BasicJob;
use App\Model\BasicNation;
use App\Model\PatientFamily as PatientFamilyModel;
use App\Utils\Mask;
use Extend\VerifyDun\IdCard;
use Hyperf\DbConnection\Db;
use Hyperf\Validation\Contract\ValidatorFactoryInterface;
/**
* 家庭成员
*/
class PatientFamilyService extends BaseService
{
/**
* 获取家庭成员列表
* @return array
*/
public function getFamilyList(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
$params['status'] = 1;
$field = [
'family_id',
'patient_id',
'relation',
'is_default',
'card_name',
'card_name_mask',
'sex',
'age',
];
$patient_familys = PatientFamilyModel::getList($params, $field);
return empty($patient_familys) ? success() : success($patient_familys->toArray());
}
/**
* 新增家庭成员
* @return array
*/
public function addFamily(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$request_params = $this->request->all();
// 获取全部家庭成员
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
$params['status'] = 1;
$patient_familys = PatientFamilyModel::getList($params);
if (!empty($patient_familys)) {
foreach ($patient_familys as $patient_family) {
// 检测该家庭成员是否已存在
if ($patient_family['type'] == $request_params['type'] && $patient_family['id_number'] == $request_params['id_number']) {
return fail(HttpEnumCode::HTTP_ERROR, "证件号码重复");
}
// 检测姓名是否重复
if ($patient_family['card_name'] == $request_params['card_name']) {
return fail(HttpEnumCode::HTTP_ERROR, "姓名重复");
}
// 检测是否默认字段是否重复
if (isset($request_params['is_default'])) {
if ($request_params['is_default'] == 1 && $patient_family['is_default'] == 1) {
// 记录原默认id
$is_default_id = $patient_family['family_id'];
}
}
}
}
// 检测省市区
if (!empty($request_params['county_id']) ){
if (empty($request_params['city_id']) || empty($request_params['province_id'])){
// 区县存在时需和城市、省份在一块
return fail(HttpEnumCode::CLIENT_HTTP_ERROR);
}
}
if (!empty($request_params['city_id']) ){
if (empty($request_params['province_id'])){
// 城市存在时需和省份在一块
return fail(HttpEnumCode::CLIENT_HTTP_ERROR);
}
}
if (!empty($request_params['province_id'])){
$areaService = new AreaService();
$req = $areaService->checkAreaById($request_params['province_id'],$request_params['city_id'],$request_params['county_id']);
if(empty($req)){
return fail(HttpEnumCode::HTTP_ERROR,"地区选择错误");
}
}
if ($request_params['type'] == 1) {
// 解析年龄、性别字段
$age = getIdCardAge($this->request->input('id_number'));
$sex = getIdCardSex($this->request->input('id_number'));
}
// 民族
if (!empty($request_params['nation_id'])){
$params = array();
$params['nation_id'] = $request_params['nation_id'];
$nation = BasicNation::getOne($params);
if (empty($nation)){
return fail(HttpEnumCode::HTTP_ERROR,"民族选择错误");
}
}
// 职业
if (!empty($request_params['job_id'])){
$params = array();
$params['job_id'] = $request_params['job_id'];
$job = BasicJob::getOne($params);
if (empty($job)){
return fail(HttpEnumCode::HTTP_ERROR,"职位选择错误");
}
}
// 实人认证-生产环境开启
if (env("APP_ENV") == "prod"){
$IdCard = new IdCard();
$params =array();
$params['name'] = $request_params['card_name'];
$params['cardNo'] = $request_params['id_number'];
$res = $IdCard->checkIdCard($params);
if (!empty($res)){
return fail(HttpEnumCode::HTTP_ERROR,$res);
}
}
Db::beginTransaction();
try {
// 修改是否默认
if (isset($is_default_id)) {
$params = array();
$params['family_id'] = $is_default_id;
$data = array();
$data['is_default'] = 0;
$data['updated_at'] = date('Y-m-d H:i:s', time());
$res = PatientFamilyModel::edit($params, $data);
if (!$res) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
}
// 新增 患者家庭成员信息表-基本信息patient_family
$data = array();
$data['patient_id'] = $user_info['client_user_id'];
$data['relation'] = $request_params['relation'];
$data['status'] = 1;
$data['is_default'] = empty($request_params['is_default']) ? 0 : 1;
$data['card_name'] = $request_params['card_name'];
$data['card_name_mask'] = Mask::maskNameStr($request_params['card_name']);
$data['mobile'] = $request_params['mobile'];
$data['mobile_mask'] = Mask::maskPhoneStr($request_params['mobile']);
$data['type'] = $request_params['type'];
$data['id_number'] = $request_params['id_number'];
$data['sex'] = $sex ?? 0;
$data['age'] = empty($age) ? null : $age;
if (isset($area)) {
$data['province_id'] = $request_params['province_id'];
$data['province'] = $area['province']['area_name'];
$data['city_id'] = $request_params['city_id'];
$data['city'] = $area['city']['area_name'];
$data['county_id'] = $request_params['county_id'];
$data['county'] = $area['county']['area_name'];
}
$data['marital_status'] = $request_params['marital_status'] ?? 0;
$data['nation_id'] = $request_params['nation_id'] ?? null;
$data['nation_name'] = $nation['nation_name'] ?? "";
$data['job_id'] = $request_params['job_id'] ?? null;
$data['job_name'] = $job['job_name'] ?? "";
$patient_family = PatientFamilyModel::addPatientFamily($data);
if (empty($patient_family)) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
Db::commit();
} catch (\Exception $e) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage());
}
$result = array();
$result['family_id'] = $patient_family['family_id'];
return success($result);
}
}