初始化提交

This commit is contained in:
2023-02-17 17:10:16 +08:00
commit 4ca844f470
152 changed files with 20390 additions and 0 deletions
+114
View File
@@ -0,0 +1,114 @@
<?php
namespace App\Services;
use App\Model\Area as AreaModel;
class AreaService extends BaseService
{
/**
* 检测省市区省市区
* @param string $province_id
* @param string $city_id
* @param string $county_id
* @return bool
*/
public function checkAreaById(string $province_id, string $city_id, string $county_id): bool
{
// 检测省份
if (!empty($province_id)){
$province = $this->getAreaByAreaId($province_id);
if (empty($province['data'])){
return false;
}
}
// 检测城市
if (!empty($city_id) && !empty($province_id)){
$city = $this->getAreaByAreaId($city_id,$province_id);
if (empty($city['data'])){
return false;
}
}
// 检测区县
if (!empty($county_id) && !empty($city_id)){
$county = $this->getAreaByAreaId($county_id,$city_id);
if (empty($county['data'])){
return false;
}
}
if (!empty($province['data']) || !empty($city['data']) || !empty($county['data'])){
return true;
}
return false;
}
/**
* 获取省份列表
* @return array
*/
public function getProvince(): array
{
$params = array();
$params['parent_id'] = 1;
$params['area_type'] = 2;
$province = AreaModel::getList($params);
return empty($province) ? success() : success($province->toArray());
}
/**
* 获取城市列表
* @return array
*/
public function getCity(): array
{
$area_id = $this->request->input('area_id');
return $this->getAreaByParentId($area_id);
}
/**
* 获取区县信息
* @return array
*/
public function getCounty(): array
{
$area_id = $this->request->input('area_id');
return $this->getAreaByParentId($area_id);
}
/**
* 查询省市区-地区id
* @param string $area_id
* @param string $parent_id
* @return array
*/
protected function getAreaByAreaId(string $area_id, string $parent_id = ""): array
{
$params = array();
$params['area_id'] = $area_id;
if (!empty($parent_id)){
$params['parent_id'] = $parent_id;
}
$area = AreaModel::getOne($params);
return empty($area) ? success() : success($area->toArray());
}
/**
* 查询省市区-父级id
* @param string $parent_id
* @return array
*/
protected function getAreaByParentId(string $parent_id = ""): array
{
$params = array();
$params['parent_id'] = $parent_id;
$area = AreaModel::getList($params);
return empty($area) ? success() : success($area->toArray());
}
}
+21
View File
@@ -0,0 +1,21 @@
<?php
namespace App\Services;
use App\Constants\HttpEnumCode;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Contract\ResponseInterface;
use Psr\Container\ContainerInterface;
use Hyperf\Di\Annotation\Inject;
class BaseService
{
#[Inject]
protected ContainerInterface $container;
#[Inject]
protected RequestInterface $request;
}
+76
View File
@@ -0,0 +1,76 @@
<?php
namespace App\Services;
use App\Model\Hospital;
use App\Model\HospitalDepartmentCustom;
/**
* 基础数据服务类
*/
class BasicDataService extends BaseService
{
/**
* 获取医院数据
* @return array
*/
public function getHospital(): array
{
$hospital_name = $this->request->input('hospital_name');
$province_id = $this->request->input('province_id');
$city_id = $this->request->input('city_id');
$county_id = $this->request->input('county_id');
$params = array();
$params[] = ['hospital_status', '=', 1];
if (!empty($hospital_name)) {
$params[] = ['hospital_name', 'like', '%' . $hospital_name . '%'];
}
if (!empty($province_id)) {
$params[] = ['province_id', '=', $province_id];
}
if (!empty($city_id)) {
$params[] = ['city_id', '=', $city_id];
}
if (!empty($county_id)) {
$params[] = ['county_id', '=', $county_id];
}
$fields = [
'hospital_id',
'hospital_name',
];
$hospital = Hospital::getList($params,$fields);
if (empty($hospital)){
return success();
}
return success($hospital->toArray());
}
/**
* 获取自定义科室数据
* @return array
*/
public function getCustomDepartment(): array
{
$params = array();
$params['department_status'] = 1;
$fields = [
'department_custom_id',
'department_custom_name',
];
$hospital_department_custom = HospitalDepartmentCustom::getList($params,$fields);
if (empty($hospital_department_custom)){
return success();
}
return success($hospital_department_custom->toArray());
}
}
+68
View File
@@ -0,0 +1,68 @@
<?php
namespace App\Services;
use App\Constants\HttpEnumCode;
use Extend\Alibaba\Dysms;
use Hyperf\Redis\Redis;
use Hyperf\Snowflake\IdGeneratorInterface;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
/**
* 验证码
*/
class CodeService extends BaseService
{
/**
* 获取登陆验证码
* 5分钟内同一手机号请求三次
* @return array
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function getLoginPhoneCode(): array
{
$phone = $this->request->input('phone');
$redis = $this->container->get(Redis::class);
$redis_key = "login_code_count" . $phone;
$result = $redis->get($redis_key);
if (!empty($result)){
if ( $result > 3){
// 超出规定时间内最大获取次数
return fail(HttpEnumCode::PHONE_MAXIMUM);
}
}
$generator = $this->container->get(IdGeneratorInterface::class);
$template_code = "SMS_243055263";
$template_param = array();
$template_param['code'] = (int)substr($generator->generate(),-4);
// 发送短信
Dysms::sendSms($phone,$template_param,$template_code,1);
if (empty($result)){
$redis_value = 1;
}else{
$redis_value = $result + 1;
}
$res = $redis->set($redis_key,$redis_value,60*5);
if (!$res){
return fail(HttpEnumCode::SERVER_ERROR);
}
// 设置有效期
$res = $redis->set("login_code" . $phone,$template_param['code'],60*30);
if (!$res){
return fail(HttpEnumCode::SERVER_ERROR);
}
return success();
}
}
+96
View File
@@ -0,0 +1,96 @@
<?php
namespace App\Services;
use App\Model\Coupon;
use App\Model\UserCoupon;
/**
* 优惠卷
*/
class CouponService extends BaseService
{
/**
* 获取用户可用优惠卷
* @param string|int $user_id 用户id
* @param string|int $inquiry_type 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
* @param int $coupon_client 使用平台(1:小程序)
* @return array
*/
public function getUserUsableCoupon(string|int $user_id,string|int $inquiry_type,int $coupon_client = 1): array
{
// 问诊类型需加1
$inquiry_type = $inquiry_type + 1;
$params = array();
$params[] = ['user_id','=',$user_id];
$params[] = ['user_coupon_status','=',0];// 状态(0:未使用 1:已使用 3:已过期)
$params[] = ['valid_start_time','>',date('Y-m-d H:i:s',time())]; // 有效使用时间
$params[] = ['valid_end_time','<',date('Y-m-d H:i:s',time())]; // 过期使用时间
$coupon_params = array();
$coupon_params[] = ['coupon_client','=',$coupon_client];
$coupon_params[] = ['coupon_status','=',1]; // 状态(1:正常 2:强制失效 3:结束 4:删除)
$coupon_params[] = ['application_scope','in',[1,$inquiry_type]]; // 适用范围(1:全部 2:快速问诊 3:专家问诊 4:公益问诊 5:问诊购药)
$user_coupon = UserCoupon::getWithCouponList($params,$coupon_params);
if (empty($user_coupon)){
return array();
}
return $user_coupon->toArray();
}
/**
* 发放用户优惠卷
* @param int $distribution_object 发放对象(1:新注册用户 2:会员 3:近期消费 4:近期购药)
* @param string $user_id
* @param string $patient_id
* @param int $coupon_client 使用平台(1:小程序)
* @return bool
*/
public function DistributeCoupon(int $distribution_object,string $user_id,string $patient_id,int $coupon_client = 1): bool
{
$params = array();
$params['coupon_client'] = $coupon_client;
$params['coupon_status'] = 1;
$params['distribution_object'] = $distribution_object; // 发放对象(1:新注册用户 2:会员 3:近期消费 4:近期购药)
$coupon = Coupon::getList($params);
if (empty($coupon)){
return true;
}
foreach ($coupon as $key => $value){
// 判断发放数量
if ($value['coupon_count'] == $value['coupon_take_count']){
continue;
}
// 进行发放
$data = array();
$data['user_id'] = $user_id;
$data['patient_id'] = $patient_id;
$data['coupon_id'] = $value['coupon_id'];
if ($value['valid_type'] == 1){
// 有效类型(1:绝对时效,xxx-xxx时间段有效 2:相对时效 n天内有效)
$data['valid_start_time'] = $value['valid_start_time']; // 有效使用时间
$data['valid_end_time'] = $value['valid_end_time']; // 过期使用时间
}elseif ($value['valid_type'] == 2){
// 有效类型(1:绝对时效,xxx-xxx时间段有效 2:相对时效 n天内有效)
$data['valid_start_time'] = date('Y-m-d H:i:s',time()); // 有效使用时间
$data['valid_end_time'] = date("Y-m-d H:i:s",strtotime($value['valid_days'] . " day"));
}else{
return false;
}
$res = UserCoupon::addUserCoupon($data);
if (empty($res)){
return false;
}
}
return true;
}
}
+53
View File
@@ -0,0 +1,53 @@
<?php
namespace App\Services;
use App\Model\DiseaseClass;
use App\Model\DiseaseClassExpertise;
use App\Request\DiseaseRequest;
use App\Request\PatientFamilyRequest;
class DiseaseService extends BaseService
{
/**
* 专长列表
* @return array
*/
public function getDiseaseExpertiseList(): array
{
$disease_class_expertise = DiseaseClassExpertise::getOrderList();
return success($disease_class_expertise);
}
/**
* 搜索疾病分类
* @return array
*/
public function getDiseaseSearch(): array
{
$disease_class_name = $this->request->input('disease_class_name');
$params = array();
$params[] = ["disease_class_status",1];
$params[] = ["disease_class_enable",1];
$params[] = ['disease_class_name', 'like', '%' . $disease_class_name . '%'];
$disease_class = DiseaseClass::getList($params);
return empty($disease_class) ? success() : success($disease_class->toArray()) ;
}
/**
* 获取常见疾病分类
* @return array
*/
public function getDiseaseHot(): array
{
$params = array();
$params[] = ["disease_class_status",1];
$params[] = ["disease_class_enable",1];
$params[] = ['is_hot', 1];
$disease_class = DiseaseClass::getLimit($params,10);
return empty($disease_class) ? success() : success($disease_class->toArray()) ;
}
}
+646
View File
@@ -0,0 +1,646 @@
<?php
namespace App\Services;
use App\Constants\DoctorTitleCode;
use App\Constants\HttpEnumCode;
use App\Model\DoctorExpertise;
use App\Model\Hospital;
use App\Model\HospitalDepartmentCustom;
use App\Model\UserDoctor;
use App\Model\UserDoctorInfo;
use App\Utils\Mask;
use App\Utils\PcreMatch;
use Extend\VerifyDun\IdCard;
use GuzzleHttp\Exception\GuzzleException;
use Hyperf\DbConnection\Db;
/**
* 医生认证
*/
class DoctorAuthService extends BaseService
{
/**
* 获取实名认证信息
* @return array
*/
public function getAuthReal(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
// 获取医生数据
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
// 实名认证状态(0:未认证 1:认证通过 2:认证失败)
if ($doctor['idcard_status'] == 0) {
return success();
}
// 获取医生详情数据
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$params['card_type'] = 1;
$fields = [
'doctor_info_id',
'doctor_id',
'card_type',
'card_name',
'card_name_mask',
'card_num',
'card_num_mask',
];
$user_doctor_info = UserDoctorInfo::getOne($params, $fields);
if (empty($user_doctor_info)) {
return success();
}
return success($user_doctor_info->toArray());
}
/**
* 新增实名认证
* @return array
* @throws GuzzleException
*/
public function addAuthReal(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$card_name = $this->request->input('card_name');
$card_num = $this->request->input('card_num');
// 身份证验证
$card_num = PcreMatch::pregIdCard($card_num);
if (empty($card_num)) {
return fail();
}
// 身份证最后一位x转换为大写
$card_num = PcreMatch::pregIdCardX($card_num);
if (empty($card_num)) {
return fail();
}
// 身份证掩码
$card_num_mask = Mask::maskIdCard($card_num);
// 姓名掩码
$card_name_mask = Mask::maskNameStr($card_name);
// 获取医生数据
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
// 实名认证状态(0:未认证 1:认证通过 2:认证失败)
if ($doctor['idcard_status'] == 1) {
return fail(HttpEnumCode::HTTP_ERROR, "不可修改");
}
// 网易易盾认证
// 实人认证-生产环境开启
if (env("APP_ENV") == "prod") {
$IdCard = new IdCard();
$params = array();
$params['name'] = $card_name;
$params['cardNo'] = $card_num;
$res = $IdCard->checkIdCard($params);
if (!empty($res)) {
return fail(HttpEnumCode::HTTP_ERROR, $res);
}
}
Db::beginTransaction();
try {
// 获取医生详情数据
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$user_doctor_info = UserDoctorInfo::getOne($params);
if (empty($user_doctor_info)) {
// 新增医生详情
$data = array();
$data['doctor_id'] = $user_info['client_user_id'];
$data['card_type'] = 1;
$data['card_name'] = $card_name;
$data['card_name_mask'] = $card_name_mask;
$data['card_num'] = $card_num;
$data['card_num_mask'] = $card_num_mask;
$user_doctor_info = UserDoctorInfo::addUserDoctorInfo($data);
if (empty($user_doctor_info)) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
// 修改医生实名认证状态
$data = array();
$data['idcard_status'] = 1;
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$res = UserDoctor::editUserDoctor($params, $data);
if (!$res) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
} else {
if (!empty($user_doctor_info['card_name']) || !empty($user_doctor_info['card_num'])) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, "不可修改");
}
// 已存在详情表数据,进行添加
$data = array();
$data['card_type'] = 1;
$data['card_name'] = $card_name;
$data['card_name_mask'] = $card_name_mask;
$data['card_num'] = $card_num;
$data['card_num_mask'] = $card_num_mask;
$data['updated_at'] = date('Y-m-d H:i:s', time());
$params = array();
$params['doctor_info_id'] = $user_doctor_info['doctor_info_id'];
$res = UserDoctorInfo::editUserDoctorInfo($params, $data);
if (!$res) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
// 修改医生实名认证状态
$data = array();
$data['idcard_status'] = 1;
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$res = UserDoctor::editUserDoctor($params, $data);
if (!$res) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
}
Db::commit();
} catch (\Exception $e) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage());
}
return success();
}
/**
* 获取身份认证信息
* @return array
*/
public function getAuthIden(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
// 获取医生数据
$fields = [
'doctor_id',
'user_id',
'idcard_status',
'iden_auth_status',
'iden_auth_fail_reason',
'avatar',
'hospital_id',
'department_custom_id',
'department_custom_name',
'department_custom_mobile',
'doctor_title',
'brief_introduction',
'be_good_at',
];
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params, $fields);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
// 实名认证状态(0:未认证 1:认证通过 2:认证失败)
if ($doctor['idcard_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先实名认证");
}
$result = $doctor->toArray();
// 头像
if (!empty($doctor['avatar'])){
$result['avatar'] = addAliyunOssWebsite($doctor['avatar']);
}
// 职称转换
$result['doctor_title_name'] = empty($doctor['doctor_title']) ? "" : DoctorTitleCode::getMessage($doctor['doctor_title']);
// 获取医生详情数据
$result['license_cert'] = [];
$result['qualification_cert'] = [];
$result['work_cert'] = [];
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$user_doctor_info = UserDoctorInfo::getOne($params);
if (!empty($user_doctor_info)) {
// 医师执业证
if (!empty($user_doctor_info['license_cert'])) {
$license_cert = explode(',', $user_doctor_info['license_cert']);
foreach ($license_cert as &$item){
$item = addAliyunOssWebsite($item);
}
$result['license_cert'] = $license_cert;
}
// 医师职称证
if (!empty($user_doctor_info['qualification_cert'])) {
$qualification_cert = explode(',', $user_doctor_info['qualification_cert']);
foreach ($qualification_cert as &$item){
$item = addAliyunOssWebsite($item);
}
$result['qualification_cert'] = $qualification_cert;
}
// 医师资格证
if (!empty($user_doctor_info['work_cert'])) {
$work_cert = explode(',', $user_doctor_info['work_cert']);
foreach ($work_cert as &$item){
$item = addAliyunOssWebsite($item);
}
$result['work_cert'] = $work_cert;
}
}
// 获取医生医院
$result['hospital'] = [];
$fields = [
'hospital_id',
'hospital_name',
'hospital_level_name',
];
$params = array();
$params['hospital_id'] = $doctor['hospital_id'];
$hospital = Hospital::getOne($params, $fields);
if (!empty($hospital)) {
$result['hospital'] = $hospital;
}
// 获取医生已选择专长
$UserDoctorService = new UserDoctorService();
$result['doctor_expertise'] = $UserDoctorService->getDoctorSelectedExpertise($doctor['doctor_id']);
return success($result);
}
/**
* 新增身份认证信息
* @return array
*/
public function addAuthIden(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$request_params = $this->request->all();
// 获取医生数据
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
// 实名认证状态(0:未认证 1:认证通过 2:认证失败)
if ($doctor['idcard_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先实名认证");
}
// 审核中
if ($doctor['iden_auth_status'] == 2) {
return fail(HttpEnumCode::HTTP_ERROR, "审核中,暂不允许修改");
}
// 组合存储数据
$doctor_data = array();// 医生
$doctor_info_data = array();// 医生详情
// 头像
$request_params['avatar'] = PcreMatch::pregRemoveOssWebsite($request_params['avatar']);
if ($doctor['avatar'] != $request_params['avatar']) {
$doctor_data['avatar'] = $request_params['avatar'];
}
// 职称
if ($doctor['doctor_title'] != $request_params['doctor_title']) {
$doctor_data['doctor_title'] = $request_params['doctor_title'];
}
// 医院
if ($doctor['hospital_id'] != $request_params['hospital_id']) {
$params = array();
$params['hospital_id'] = $request_params['hospital_id'];
$hospital = Hospital::getOne($params);
if (!empty($hospital)) {
return fail(HttpEnumCode::HTTP_ERROR, "医院选择错误");
}
$doctor_data['hospital_id'] = $request_params['hospital_id'];
}
// 科室
if ($doctor['department_custom_id'] != $request_params['department_custom_id']) {
$params = array();
$params['department_custom_id'] = $request_params['department_custom_id'];
$hospital_department_custom = HospitalDepartmentCustom::getOne($params);
if (empty($hospital_department_custom)) {
return fail(HttpEnumCode::HTTP_ERROR, "科室选择错误");
}
$doctor_data['department_custom_id'] = $request_params['department_custom_id'];
$doctor_data['department_custom_name'] = $hospital_department_custom['department_custom_name'];
if (!empty($request_params['department_custom_name'])) {
$doctor_data['department_custom_name'] = $request_params['department_custom_name'];
}
}
// 未认证-认证失败
if ($doctor['iden_auth_status'] == 0 || $doctor['iden_auth_status'] == 3) {
// 获取医生详情数据
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$user_doctor_info = UserDoctorInfo::getOne($params);
if (empty($user_doctor_info)) {
return fail(HttpEnumCode::SERVER_ERROR);
}
// 执业证
$license_cert = implode(',', $request_params['license_cert']);
$license_cert = PcreMatch::pregRemoveOssWebsite($license_cert);
if ($user_doctor_info['license_cert'] != $license_cert) {
$doctor_info_data['license_cert'] = $license_cert;
}
// 医师资格证
$qualification_cert = implode(',', $request_params['qualification_cert']);
$qualification_cert = PcreMatch::pregRemoveOssWebsite($qualification_cert);
if ($user_doctor_info['qualification_cert'] != $qualification_cert) {
$doctor_info_data['qualification_cert'] = $qualification_cert;
}
// 医师工作证
$work_cert = implode(',', $request_params['work_cert']);
$work_cert = PcreMatch::pregRemoveOssWebsite($work_cert);
if ($user_doctor_info['work_cert'] != $work_cert) {
$doctor_info_data['work_cert'] = $work_cert;
}
}
//已选择专长列表
$expertise_ids = [];
// 获取医生专长
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor_expertise = DoctorExpertise::getList($params);
if (!empty($doctor_expertise)) {
$expertise_ids = array_column($doctor_expertise->toArray(),'expertise_id');
}
// 对比已选择专长
// 对比专长是否删除
$is_delete_expertise = array_diff($request_params['doctor_expertise'],$expertise_ids);
if (empty($is_delete_expertise)){
// 对比专长是否新增
$is_add_expertise = array_diff($expertise_ids,$request_params['doctor_expertise']) ;
}
// 专长是否改动:false(未改动) true(已改动)
$expertise_is_change = false;
if (!empty($is_delete_expertise) || !empty($is_add_expertise)){
$expertise_is_change = true;
}
Db::beginTransaction();
try {
// 专长有改动
if ($expertise_is_change){
// 删除原专长
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
DoctorExpertise::deleteDoctorExpertise($params);
// 新增专长
foreach ($request_params['doctor_expertise'] as $item) {
$data = array();
$data['doctor_id'] = $user_info['client_user_id'];
$data['expertise_id'] = $item;
$doctor_expertise = DoctorExpertise::addDoctorExpertise($data);
if (empty($doctor_expertise)) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
}
}
// 医生数据
if (!empty($doctor_data)) {
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor_data['updated_at'] = date('Y-m-d H:i:s', time());
$res = UserDoctor::editUserDoctor($params, $doctor_data);
if (!$res) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
}
// 医生详情数据
if (!empty($doctor_info_data)) {
// 修改医生详情数据
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor_info_data['updated_at'] = date('Y-m-d H:i:s', time());
$res = UserDoctorInfo::editUserDoctorInfo($params, $doctor_info_data);
if (!$res) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
}
// 修改审核状态
if (!empty($doctor_data) || !empty($doctor_info_data) || $expertise_is_change){
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$data = array();
$data['iden_auth_status'] = 2;// 身份认证状态-审核中
$data['iden_auth_fail_reason'] = "";// 身份认证失败原因
$data['updated_at'] = date('Y-m-d H:i:s', time());
$res = UserDoctor::editUserDoctor($params, $data);
if (!$res) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
}
Db::commit();
} catch (\Exception $e) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage());
}
return success();
}
/**
* 获取多点执业认证信息
* @return array
*/
public function getAuthMulti(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
// 获取医生数据
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
// 获取医生详情数据
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$user_doctor_info = UserDoctorInfo::getOne($params);
if (empty($user_doctor_info)){
return success();
}
$result = array();
$result['id_card_front'] = addAliyunOssWebsite($user_doctor_info['id_card_front']);
$result['id_card_back'] = addAliyunOssWebsite($user_doctor_info['id_card_back']);
$result['sign_image'] = addAliyunOssWebsite($user_doctor_info['sign_image']);
$result['multi_point_status'] = $doctor['multi_point_status']; // 医生多点执业认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败)
$result['multi_point_fail_reason'] = $doctor['multi_point_fail_reason']; // 多点执业认证失败原因
return success($result);
}
/**
* 新增多点执业认证信息
* @return array
*/
public function addAuthMulti(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$id_card_front = $this->request->input('id_card_front');
$id_card_back = $this->request->input('id_card_back');
$sign_image = $this->request->input('sign_image');
// 获取医生数据
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
if ($doctor['idcard_status'] != 1){
return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
}
if ($doctor['iden_auth_status'] != 1){
return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证");
}
// 审核中
if ($doctor['multi_point_status'] == 2){
return fail(HttpEnumCode::HTTP_ERROR, "审核中,暂不允许修改");
}
// 获取医生详情数据
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$user_doctor_info = UserDoctorInfo::getOne($params);
if (empty($user_doctor_info)) {
return fail(HttpEnumCode::SERVER_ERROR);
}
$doctor_info_data = array();
// 身份证正面
$id_card_front = PcreMatch::pregRemoveOssWebsite($id_card_front);
if ($id_card_front != $user_doctor_info['id_card_front']){
$doctor_info_data['id_card_front'] = $id_card_front;
}
// 身份证反面
$id_card_back = PcreMatch::pregRemoveOssWebsite($id_card_back);
if ($id_card_back != $user_doctor_info['id_card_back']){
$doctor_info_data['id_card_back'] = $id_card_back;
}
// 签名
$sign_image = PcreMatch::pregRemoveOssWebsite($sign_image);
if ($sign_image != $user_doctor_info['sign_image']){
$doctor_info_data['sign_image'] = $sign_image;
}
if (empty($doctor_info_data)){
return success();
}
Db::beginTransaction();
try {
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$res = UserDoctorInfo::editUserDoctorInfo($params, $doctor_info_data);
if (!$res) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
// 修改审核状态
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$data = array();
$data['multi_point_status'] = 2;// 医生多点执业认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败)
$data['multi_point_fail_reason'] = "";// 多点执业认证失败原因
$data['updated_at'] = date('Y-m-d H:i:s', time());
$res = UserDoctor::editUserDoctor($params, $data);
if (!$res) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
Db::commit();
} catch (\Exception $e) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage());
}
return success();
}
}
+335
View File
@@ -0,0 +1,335 @@
<?php
namespace App\Services;
use App\Constants\HttpEnumCode;
use App\Model\DoctorInquiryConfig;
use App\Model\DoctorInquiryPriceRecord;
use App\Model\SystemInquiryConfig;
use App\Model\UserDoctor;
use Hyperf\DbConnection\Db;
/**
* 医生问诊
*/
class DoctorInquiryService extends BaseService
{
/**
* 获取医生问诊配置
* @return array
*/
public function getInquiryConfig(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$inquiry_type = $this->request->input('inquiry_type');// 接诊类型(1:专家问诊 2:快速问诊 3:公益问诊)
$inquiry_mode = $this->request->input('inquiry_mode');// 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员)
$result = array();
$result['info'] = array(); // 配置信息
$result['config'] = array(); // 系统配置
// 获取医生信息
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
if ($doctor['idcard_status'] != 1){
return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
}
if ($doctor['idcard_status'] != 1){
return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
}
if ($doctor['iden_auth_status'] != 1){
return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证");
}
// 接诊开关
$result['info']['is_open'] = 0;
if ($inquiry_type == 1){
// 专家
$result['info']['is_open'] = $doctor['is_img_expert_reception'];
}elseif ($inquiry_type == 2){
// 快速
$result['info']['is_open'] = $doctor['is_img_quick_reception'];
}elseif ($inquiry_type == 3){
// 公益
$result['info']['is_open'] = $doctor['is_img_welfare_reception'];
}
// 接诊价格
$result['info']['inquiry_price'] = 0;
// 接诊人数
$result['info']['work_num_day'] = 30;
// 系统问诊配置表
$params = array();
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = $inquiry_mode;
$system_inquiry_config = SystemInquiryConfig::getOne($params);
if (empty($system_inquiry_config)){
return fail(HttpEnumCode::SERVER_ERROR);
}
// 医生接诊配置表
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = $inquiry_mode;
$doctor_inquiry_config = DoctorInquiryConfig::getOne($params);
if (empty($doctor_inquiry_config)){
// 接诊价格
$result['info']['inquiry_price'] = $system_inquiry_config['inquiry_price'] ?: 0;
if ($inquiry_type == 3){
// 公益问诊,存在价格档次,默认第一档
$inquiry_price = explode(',',$system_inquiry_config['inquiry_price']);
$result['info']['inquiry_price'] = $inquiry_price[0];
}
}else{
// 接诊价格
$result['info']['inquiry_price'] = $doctor_inquiry_config['inquiry_price'] ?: 0;
if ($inquiry_type == 2){
// 快速-系统配置
$result['info']['inquiry_price'] = $system_inquiry_config['inquiry_price'];
}
$result['info']['work_num_day'] = $doctor_inquiry_config['work_num_day'] ?: 0;
}
// 每日最大接诊数量
$result['config']['max_work_num_day'] = $system_inquiry_config['max_work_num_day'];
// 最低接诊价格(专家问诊)
$result['config']['min_inquiry_price'] = $system_inquiry_config['min_inquiry_price'] ?: 0;
// 最高接诊价格(专家问诊)
$result['config']['max_inquiry_price'] = $system_inquiry_config['max_inquiry_price'] ?: 0;
// 默认价格
$result['config']['default_inquiry_price'] = $system_inquiry_config['max_inquiry_price'] ?: 0;
// 沟通次数(0为不限制次数)
$result['config']['times_number'] = $system_inquiry_config['times_number'];
// 沟通时长(分钟,0为不限制时长)
$result['config']['duration'] = $system_inquiry_config['duration'];
return success($result);
}
/**
* 医生问诊开关
* @return array
*/
public function putInquiryOpen(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$inquiry_type = $this->request->input('inquiry_type');// 接诊类型(1:专家问诊 2:快速问诊 3:公益问诊)
$inquiry_mode = $this->request->input('inquiry_mode');// 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员)
$is_open = $this->request->input('is_open');// 是否开启(1:开启 0:关闭)
// 获取医生信息
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
if ($doctor['idcard_status'] != 1){
return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
}
if ($doctor['idcard_status'] != 1){
return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
}
if ($doctor['iden_auth_status'] != 1){
return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证");
}
// 医生接诊配置表
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = $inquiry_mode;
$doctor_inquiry_config = DoctorInquiryConfig::getOne($params);
if (empty($doctor_inquiry_config)){
if ($inquiry_type != 2){
// 快速问诊可能会存在未创建的情况
return fail(HttpEnumCode::HTTP_ERROR, "请先完善问诊配置");
}
}
Db::beginTransaction();
try {
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$data = array();
if ($inquiry_type == 1){
// 专家
$data['is_img_expert_reception'] = $is_open;
}elseif ($inquiry_type == 2){
// 快速
$data['is_img_quick_reception'] = $is_open;
}elseif ($inquiry_type == 3){
// 公益
$data['is_img_welfare_reception'] = $is_open;
}
UserDoctor::editUserDoctor($params,$data);
if ($inquiry_type == 2){
// 系统问诊配置表
$params = array();
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = $inquiry_mode;
$system_inquiry_config = SystemInquiryConfig::getOne($params);
if (empty($system_inquiry_config)){
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
// 快速问诊,需创建
$data = array();
$data['doctor_id'] = $user_info['client_user_id'];
$data['system_inquiry_config_id'] = $system_inquiry_config['system_inquiry_config_id'];
$data['inquiry_type'] = $inquiry_type;
$data['inquiry_mode'] = $inquiry_mode;
$data['work_num_day'] = $system_inquiry_config['max_work_num_day'] ?: 0;
$data['inquiry_price'] = $system_inquiry_config['inquiry_price'];
$doctor_inquiry_config = DoctorInquiryConfig::addInquiryConfig($data);
if (empty($doctor_inquiry_config)){
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
}
Db::commit();
} catch (\Exception $e) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage());
}
return success();
}
/**
* 修改医生问诊配置
* @return array
*/
public function putInquiryConfig(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$inquiry_type = $this->request->input('inquiry_type');// 接诊类型(1:专家问诊 2:快速问诊 3:公益问诊)
$inquiry_mode = $this->request->input('inquiry_mode');// 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员)
$inquiry_price = $this->request->input('inquiry_price');// 接诊价格
$work_num_day = $this->request->input('work_num_day');// 每日接诊数量
if ($inquiry_type == 2){
// 快速问诊无需配置
return fail();
}
// 获取医生信息
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
if ($doctor['idcard_status'] != 1){
return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
}
if ($doctor['idcard_status'] != 1){
return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
}
if ($doctor['iden_auth_status'] != 1){
return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证");
}
// 系统问诊配置表
$params = array();
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = $inquiry_mode;
$system_inquiry_config = SystemInquiryConfig::getOne($params);
if (empty($system_inquiry_config)){
return fail(HttpEnumCode::SERVER_ERROR);
}
// 验证-每日接诊数量
if ($work_num_day > $system_inquiry_config['max_work_num_day']){
return fail(HttpEnumCode::HTTP_ERROR,"超出每日最大接诊数量");
}
// 验证-问诊价格
// 义诊时不判断,义诊为选择价格,价格后台可调节
if ($inquiry_type == 3){
if (!empty($system_inquiry_config['min_inquiry_price']) && !empty($system_inquiry_config['max_inquiry_price'])){
if ($inquiry_price > $system_inquiry_config['max_inquiry_price'] || $inquiry_price < $system_inquiry_config['min_inquiry_price']){
return fail(HttpEnumCode::HTTP_ERROR,"问诊价格填写错误");
}
}
}
// 开启事务锁
Db::beginTransaction();
try {
// 医生接诊配置表
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = $inquiry_mode;
$doctor_inquiry_config = DoctorInquiryConfig::getOne($params);
if (empty($doctor_inquiry_config)){
// 创建
$data = array();
$data['doctor_id'] = $user_info['client_user_id'];
$data['system_inquiry_config_id'] = $system_inquiry_config['system_inquiry_config_id'];
$data['inquiry_type'] = $inquiry_type;
$data['inquiry_mode'] = $inquiry_mode;
$data['work_num_day'] = $work_num_day;
$data['inquiry_price'] = $inquiry_price;
$doctor_inquiry_config = DoctorInquiryConfig::addInquiryConfig($data);
if (empty($doctor_inquiry_config)){
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
}else{
// 修改
if ($doctor_inquiry_config['work_num_day'] != $work_num_day || $doctor_inquiry_config['inquiry_price'] != $inquiry_price){
$params = array();
$params['inquiry_config_id'] = $doctor_inquiry_config['inquiry_config_id'];
$data = array();
$data['work_num_day'] = $work_num_day;
$data['inquiry_price'] = $inquiry_price;
DoctorInquiryConfig::editInquiryConfig($params,$data);
}
}
Db::commit();
} catch (\Exception $e) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage());
}
return success();
}
}
+325
View File
@@ -0,0 +1,325 @@
<?php
namespace App\Services;
use App\Constants\DoctorTitleCode;
use App\Constants\HttpEnumCode;
use App\Model\Banner as BannerModel;
use App\Model\DoctorInquiryConfig as DoctorInquiryConfigModel;
use App\Model\Module as ModuleModel;
use App\Model\PatientHistoryInquiry as PatientHistoryInquiryModel;
use App\Model\PharmacistAuditStatistic;
use App\Model\UserDoctor as UserDoctorModel;
use App\Model\UserPharmacist;
/**
* 首页模块
*/
class IndexService extends BaseService
{
/**
* 医生端-首页
* @return array
*/
public function getDoctorIndex(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
// 获取医生数据
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$fields = [
"doctor_id",
"user_id",
"user_name",
"open_id",
"status",
"idcard_status",
"iden_auth_status",
"iden_auth_fail_reason",
"multi_point_status",
"is_bind_bank",
"mobile",
"avatar",
"praise_rate",
"avg_response_time",
"number_of_fans",
"is_online",
"is_img_expert_reception",
];
$doctor = UserDoctorModel::getOne($params, $fields);
if (empty($doctor)) {
return fail(HttpEnumCode::USER_STATUS_ERROR);
}
if ($doctor['status'] == 0){
return fail(HttpEnumCode::USER_STATUS_DISABLE);
}
if ($doctor['status'] != 1){
return fail(HttpEnumCode::USER_STATUS_ERROR);
}
$OrderInquiryService = new OrderInquiryService();
$OrderPrescriptionService = new OrderPrescriptionService();
// 获取未接诊患者个数
$not_accepted_inquiry_num = $OrderInquiryService->getDoctorNotAcceptedInquiryNum($doctor['doctor_id']);
// 获取接诊中患者个数
$accepting_inquiry_num = $OrderInquiryService->getDoctorAcceptingInquiryNum($doctor['doctor_id']);
// 获取被驳回处方数据
$reject_prescription_number = $OrderPrescriptionService->getDoctorExistsAuditFail($doctor['doctor_id']);
// 获取医生问诊价格
$params = array();
$params['doctor_id'] = $doctor['doctor_id'];
$params['inquiry_type'] = 1;// 接诊类型(1:专家问诊 2:快速问诊 3:公益问诊)
$params['inquiry_mode'] = 1;// 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员)
$doctor_inquiry_config = DoctorInquiryConfigModel::getOne($params);
// 获取banner
$params = array();
$params["app_type"] = 1;
$params["client_type"] = 2;
$params["banner_place"] = 1;
$params["banner_status"] = 1;
$banner = BannerModel::getList($params);
$info = array();
$info['doctor_id'] = $doctor['doctor_id'];
$info['user_name'] = $doctor['user_name'];
$info['status'] = $doctor['status'];
$info['idcard_status'] = $doctor['idcard_status'];// 实名认证状态(0:未认证 1:认证通过 2:认证失败)
$info['iden_auth_status'] = $doctor['idcard_status'];// 身份认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败)
$info['multi_point_status'] = $doctor['multi_point_status'];// 医生多点执业认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败)
$info['is_bind_bank'] = $doctor['is_bind_bank'];// 是否已绑定结算银行卡(0:否 1:是)
$info['avatar'] = $doctor['avatar'];
$info['is_img_expert_reception'] = $doctor['is_img_expert_reception'];// 是否参加专家图文接诊(0:否 1:是)
$info['praise_rate'] = $doctor['praise_rate'];// 好评率(百分制。回复质量占4、服务态度占3、回复速度占3。每周计算一次)
$info['avg_response_time'] = $doctor['avg_response_time'];// 平均响应时间(分钟制)
$info['number_of_fans'] = $doctor['number_of_fans'];// 被关注数量
$info['inquiry_price'] = $doctor_inquiry_config['inquiry_price'] ?? "";// 在线问诊价格
$info['not_accepted_inquiry_num'] = $not_accepted_inquiry_num ?? 0;// 获取未接诊患者个数
$info['accepting_inquiry_num'] = $accepting_inquiry_num ?? 0;// 获取接诊中患者个数
$info['reject_prescription_number'] = $reject_prescription_number ?? 0;// 获取被驳回处方数据
$data = array();
$data['banner'] = $banner ?? [];// banner
$data['info'] = $info;// 医生数据
return success($data);
}
/**
* 患者端-首页
* @return array
*/
public function getPatientIndex(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
// 获取banner
$params = array();
$params["app_type"] = 1;
$params["client_type"] = 1;
$params["banner_place"] = 1;
$params["banner_status"] = 1;
$banner = BannerModel::getList($params);
// 获取模块
$params = array();
$params["app_type"] = 1;
$params["client_type"] = 1;
$params["module_place"] = 1;
$params["module_status"] = 1;
$module = ModuleModel::getList($params);
// 我的医生
$my_doctor = [];
if (!empty($user_info)) {
$my_doctor = $this->getIndexPatientDoctor($user_info['client_user_id']);
}
// 推荐医生
$recommend_doctor = $this->getIndexRecommendDoctor();
$result = array();
$result["banner"] = $banner ?? [];// banner
$result["recommend_doctor"] = $recommend_doctor['data'] ?? []; // 推荐医生
$result["my_doctor"] = $my_doctor ?? []; // 我的医生
$result["module"] = $module ?? []; // 首页模块
return success($result);
}
/**
* 药师端-首页
* @return array
*/
public function getPharmacistIndex(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
// 获取药师数据
$params = array();
$params['pharmacist_id'] = $user_info['client_user_id'];
$fields = [
"pharmacist_id",
"user_id",
"user_name",
"open_id",
"status",
"avatar",
"is_online",
];
$user_pharmacist = UserPharmacist::getOne($params,$fields);
if (empty($user_pharmacist)) {
return fail(HttpEnumCode::USER_STATUS_ERROR);
}
if ($user_pharmacist['status'] == 0){
return fail(HttpEnumCode::USER_STATUS_DISABLE);
}
if ($user_pharmacist['status'] != 1){
return fail(HttpEnumCode::USER_STATUS_ERROR);
}
// 获取药师审方数量
$params = array();
$params['pharmacist_id'] = $user_pharmacist['pharmacist_id'];
$params['statistics_date'] = date('Y-m-d',time());
$audit_number = PharmacistAuditStatistic::getCount($params);
if (empty($audit_number)){
$audit_number = 0;
}
// 获取药师待审核处方
$OrderPrescriptionService = new OrderPrescriptionService();
$prescription = $OrderPrescriptionService->getPharmacistWaitAuditPage($user_pharmacist['pharmacist_id']);
// 组合返回数据
$data = array();
$data['pharmacist'] = $user_pharmacist;
$data['audit_number'] = $audit_number;
$data['prescription'] = $prescription;
return success($data);
}
/**
* 患者端-首页-我的医生-限制条数
* @param string $patient_id
* @return array
*/
protected function getIndexPatientDoctor(string $patient_id): array
{
$results = array();
$params = array();
$params['patient_id'] = $patient_id;
$params['history_status'] = 1;
$patient_history_doctors = PatientHistoryInquiryModel::getIndexHistoryDoctorLimit($params);
if (!empty($patient_history_doctors)) {
foreach ($patient_history_doctors as $patient_history_doctor) {
if (empty($patient_history_doctor['userDoctor'])) {
continue;
}
// 组合数据
$data = array();
$data['doctor_id'] = $patient_history_doctor['userDoctor']['doctor_id'];
$data['user_name'] = $patient_history_doctor['userDoctor']['user_name'];
$data['avatar'] = $patient_history_doctor['userDoctor']['avatar'];
$data['hospital_name'] = "";
if (!empty($patient_history_doctor['userDoctor']['Hospital'])) {
$data['hospital_name'] = $patient_history_doctor['userDoctor']['Hospital']['hospital_name'];
}
// 按照天来计算,当日为1,前一天为2 未服务过为0
if (empty($patient_history_doctor['created_at'])) {
$data['days'] = 0;
} else {
$data['days'] = ceil((strtotime(date('Y-m-d', strtotime('+1 day'))) - strtotime($patient_history_doctor['created_at'])) / 86400);
}
$results[] = $data;
unset($data);
}
}
return $results;
}
/**
* 患者端-首页-推荐医生-限制条数
* @return array
*/
protected function getIndexRecommendDoctor(): array
{
$results = array();
// 推荐医生
$fields = [
"doctor_id",
"user_id",
"user_name",
"status",
"multi_point_status",
"avatar",
"doctor_title",
"department_custom_name",
"hospital_id",
"is_online",
"is_img_expert_reception",
"be_good_at",
];
$recommend_doctors = UserDoctorModel::getIndexRecommendDoctorLimit(5, $fields);
if (empty($recommend_doctors)) {
return success();
}
foreach ($recommend_doctors as $recommend_doctor) {
$data = array();
$data['doctor_id'] = $recommend_doctor['doctor_id'];
$data['user_id'] = $recommend_doctor['user_id'];
$data['user_name'] = $recommend_doctor['user_name'];
$data['status'] = $recommend_doctor['status'];
$data['multi_point_status'] = $recommend_doctor['multi_point_status']; // 医生多点执业认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败)
$data['avatar'] = $recommend_doctor['avatar'];
$data['doctor_title'] = empty($recommend_doctor['doctor_title']) ? "" : DoctorTitleCode::getMessage($recommend_doctor['doctor_title']);
$data['department_custom_name'] = $recommend_doctor['department_custom_name'];
$data['is_online'] = $recommend_doctor['is_online'];
$data['be_good_at'] = $recommend_doctor['be_good_at'];
$data['hospital_name'] = $recommend_doctor['Hospital']['hospital_name'];
$data['hospital_level_name'] = $recommend_doctor['Hospital']['hospital_level_name'];
// 处理接诊价格
$data['price'] = 0;
$data['free_clinic_price'] = 0;
foreach ($recommend_doctor['DoctorInquiryConfig'] as $doctor_inquiry_config) {
if ($doctor_inquiry_config['inquiry_mode'] == 1){
if ($doctor_inquiry_config['inquiry_type'] == 1) {
// 专家问诊
$data['price'] = $doctor_inquiry_config['inquiry_price'];
}
if ($doctor_inquiry_config['inquiry_type'] == 3) {
// 公益
$data['free_clinic_price'] = $doctor_inquiry_config['inquiry_price'];
}
}
}
$results[] = $data;
unset($data);
}
return success($results);
}
}
+378
View File
@@ -0,0 +1,378 @@
<?php
namespace App\Services;
use App\Constants\HttpEnumCode;
use App\Model\User as UserModel;
use App\Model\UserDoctor as UserDoctorModel;
use App\Model\UserPatient as UserPatientModel;
use App\Model\UserPharmacist as UserPharmacistModel;
use App\Utils\Http;
use App\Utils\Jwt;
use App\Utils\WeChat;
use Hyperf\DbConnection\Db;
use Hyperf\Redis\Redis;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
class LoginService extends BaseService
{
/**
* 微信登陆
* @return array
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function wechatMobileLogin(): array
{
$phone_code = $this->request->input('phone_code');
$wx_code = $this->request->input('wx_code');
$user_type = $this->request->input('user_type');
$weChat = $this->container->get(WeChat::class);
// // 获取手机号
// $phone_info = $weChat->getPhone($phone_code);
// if (empty($phone_info) || empty($phone_info['phone_info']) || empty($phone_info['phone_info']['purePhoneNumber'])){
// return fail(HttpEnumCode::GET_WX_ERROR);
// }
$phone_info['phone_info']['purePhoneNumber'] = "18221234161";
// 获取用户openid
// $wx_info_data = $weChat->codeToSession($wx_code);
$wx_info_data = array(
"session_key" => "SWfpkHtKZRq/G0ONoxigaQ==",
"openid" => "o9gYG441zEAHuYoNX7lwFKiQBzKE",
);
if (empty($wx_info_data['session_key']) || empty($wx_info_data['openid'])) {
return fail(HttpEnumCode::GET_WX_ERROR);
}
Db::beginTransaction();
try {
// 获取用户信息
$params = array();
$params['mobile'] = $phone_info['phone_info']['purePhoneNumber'];
$user = UserModel::getOne($params);
if (empty($user)) {
// 处理药师特殊情况,后台添加,前台不允许注册
if ($user_type == 3) {
return fail(HttpEnumCode::GET_WX_ERROR);
}
// 新增用户表
$data = array();
$data['user_name'] = substr($phone_info['phone_info']['purePhoneNumber'],-4);
$data['mobile'] = $phone_info['phone_info']['purePhoneNumber'];
$data['wx_mobile'] = $phone_info['phone_info']['purePhoneNumber'];
$data['user_type'] = $user_type;
$data['register_method'] = 1;//注册方式(1:小程序授权 2:手机号 )
$data['login_ip'] = (new Http())->getIp() ?? "";// 登陆ip
$data['last_login_at'] = date('Y-m-d H:i:s', time());// 最后登陆时间
$user = UserModel::addUser($data);
if (empty($user)) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
// 新增对应用户数据表
$data = array();
$data['user_id'] = $user->user_id;
$data['user_name'] = $user['user_name'];
$data['open_id'] = $wx_info_data['openid'];
$data['union_id'] = $wx_info_data['unionid'] ?? "";
$data['wx_session_key'] = $wx_info_data['session_key'];
$data['status'] = 1;
$data['mobile'] = $phone_info['phone_info']['purePhoneNumber'];
if ($user['user_type'] == 1) {
// 患者
$user_patient = UserPatientModel::addUserPatient($data);
if (empty($user_patient)) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
$client_user_id = $user_patient['patient_id'];
// 发放用户优惠卷
$CouponService = new CouponService();
$res = $CouponService->DistributeCoupon(1,$user->user_id,$user_patient['patient_id']);
if (!$res){
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
} elseif ($user['user_type'] == 2) {
// 新增医生表
$user_doctor = UserDoctorModel::addUserDoctor($data);
if (empty($user_doctor)) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
$client_user_id = $user_doctor['doctor_id'];
}
} else {
// 已注册用户
// 重复注册不同端
if ($user_type != $user['user_type']) {
Db::rollBack();
$result = UserTypeToString($user['user_type']);
return fail(HttpEnumCode::GET_WX_ERROR, "手机号已在" . $result . "注册");
}
// 获取对应端用户信息
$params = array();
$params['user_id'] = $user->user_id;
if ($user['user_type'] == 1) {
$result = UserPatientModel::getOne($params);
if (!empty($result)){
$client_user_id = $result['patient_id'];
}
} elseif ($user['user_type'] == 2) {
$result = UserDoctorModel::getOne($params);
if (!empty($result)){
$client_user_id = $result['doctor_id'];
}
} elseif ($user['user_type'] == 3) {
$result = UserPharmacistModel::getOne($params);
if (!empty($result)){
$client_user_id = $result['pharmacist_id'];
}
}
if (empty($result)) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
// 判断用户状态
if ($result['status'] != 1) {
Db::rollBack();
return fail(HttpEnumCode::USER_STATUS_ERROR);
}
// 更新session_key
$data = array();
if ($wx_info_data['session_key'] != $result['session_key']) {
$data['wx_session_key'] = $wx_info_data['session_key'];
}
$data['updated_at'] = date('Y-m-d H:i:s', time());
$params = array();
if ($user['user_type'] == 1) {
$params['patient_id'] = $result['patient_id'];
$res = UserPatientModel::editUserPatient($params, $data);
} elseif ($user['user_type'] == 2) {
$params['doctor_id'] = $result['doctor_id'];
$res = UserDoctorModel::editUserDoctor($params, $data);
} elseif ($user['user_type'] == 3) {
$params['pharmacist_id'] = $result['pharmacist_id'];
$res = UserPharmacistModel::editUserPharmacist($params, $data);
}
if (!$res) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
}
// 记录用户登陆记录
$Http = new Http();
$login_ip = $Http->getIp();
$params = array();
$params['user_id'] = $user['user_id'];
$data = array();
$data['login_ip'] = $login_ip ?? "";
$data['last_login_at'] = date('Y-m-d H:i:s', time());
$res = UserModel::editUser($params,$data);
if (!$res){
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
// 组合生成token的数据
$token_user_data = array();
$token_user_data['user_id'] = $user['user_id']; // 用户id
$token_user_data['user_type'] = $user['user_type'];// 用户类型
$token_user_data['open_id'] = $wx_info_data['openid'];// open_id
$token_user_data['client_user_id'] = $client_user_id;// 对应客户端id
// 发放token
$Jwt = new Jwt();
$token = $Jwt->encode($token_user_data);
// 组合返回数据
$data = array();
$data['token'] = $token;
$data['user_id'] = $user['user_id'];
$data['client_user_id'] = $client_user_id;
Db::commit();
return success($data);
} catch (\Exception $e) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage());
}
}
// 手机号登陆
public function mobileLogin(){
$code = $this->request->input('code');
$phone = $this->request->input('phone');
$user_type = $this->request->input('user_type');
$redis = $this->container->get(Redis::class);
// 验证验证码
// $sms_code = $redis->get("login_code" . $phone);
// if (empty($sms_code)){
// return fail(HttpEnumCode::CODE_EXPIRED);
// }
//
// if ($sms_code != $code){
// return fail(HttpEnumCode::CODE_ERROR);
// }
Db::beginTransaction();
try {
// 获取用户信息
$params = array();
$params['mobile'] = $phone;
$user = UserModel::getOne($params);
if (empty($user)) {
// 处理药师特殊情况,后台添加,前台不允许注册
if ($user_type == 3) {
return fail(HttpEnumCode::GET_WX_ERROR);
}
// 新增用户表
$data = array();
$data['user_name'] = substr($phone,-4);
$data['mobile'] = $phone;
$data['wx_mobile'] = $phone;
$data['user_type'] = $user_type;
$data['register_method'] = 2;
$data['login_ip'] = (new Http())->getIp() ?? "";// 登陆ip
$data['last_login_at'] = date('Y-m-d H:i:s', time());// 最后登陆时间
$user = UserModel::addUser($data);
if (empty($user)) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
// 新增对应用户数据表
$data = array();
$data['user_id'] = $user->user_id;
$data['user_name'] = $user['user_name'];
$data['status'] = 1;
$data['mobile'] = $phone;
if ($user['user_type'] == 1) {
// 患者
$user_patient = UserPatientModel::addUserPatient($data);
if (empty($user_patient)) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
$client_user_id = $user_patient['patient_id'];
// 发放用户优惠卷
$CouponService = new CouponService();
$res = $CouponService->DistributeCoupon(1,$user->user_id,$user_patient['patient_id']);
if (!$res){
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
} elseif ($user['user_type'] == 2) {
// 新增医生表
$user_doctor = UserDoctorModel::addUserDoctor($data);
if (empty($user_doctor)) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
$client_user_id = $user_doctor['doctor_id'];
}
} else {
// 已注册用户
if ($user_type != $user['user_type']) {
Db::rollBack();
$result = UserTypeToString($user['user_type']);
return fail(HttpEnumCode::HTTP_ERROR, "手机号为" . $result . "账号");
}
$params = array();
$params['user_id'] = $user->user_id;
if ($user['user_type'] == 1) {
$result = UserPatientModel::getOne($params);
if (!empty($result)){
$client_user_id = $result['patient_id'];
}
} elseif ($user['user_type'] == 2) {
$result = UserDoctorModel::getOne($params);
if (!empty($result)){
$client_user_id = $result['doctor_id'];
}
} elseif ($user['user_type'] == 3) {
$result = UserPharmacistModel::getOne($params);
if (!empty($result)){
$client_user_id = $result['pharmacist_id'];
}
}
if (empty($result)) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
// 判断用户状态
if ($result['status'] != 1) {
Db::rollBack();
return fail(HttpEnumCode::USER_STATUS_ERROR);
}
}
// 记录用户登陆记录
$Http = new Http();
$login_ip = $Http->getIp();
$params = array();
$params['user_id'] = $user['user_id'];
$data = array();
$data['login_ip'] = $login_ip ?? "";
$data['last_login_at'] = date('Y-m-d H:i:s', time());
$res = UserModel::editUser($params,$data);
if (!$res){
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
// 组合生成token的数据
$token_user_data = array();
$token_user_data['user_id'] = $user['user_id']; // 用户id
$token_user_data['user_type'] = $user['user_type'];// 用户类型
$token_user_data['open_id'] = "";// open_id
$token_user_data['client_user_id'] = $client_user_id;// 对应客户端id
// 发放token
$Jwt = new Jwt();
$token = $Jwt->encode($token_user_data);
// 组合返回数据
$data = array();
$data['token'] = $token;
$data['user_id'] = $user['user_id'];
$data['client_user_id'] = $client_user_id;
Db::commit();
return success($data);
} catch (\Exception $e) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage());
}
}
}
+48
View File
@@ -0,0 +1,48 @@
<?php
namespace App\Services;
use App\Constants\HttpEnumCode;
use App\Model\PatientHistoryInquiry;
class MyDoctorService extends BaseService
{
/**
* 删除我的医生
* 首页-个人中心
* @return array
*/
public function deleteMyDoctor(): array
{
$history_inquiry_id = $this->request->route('history_inquiry_id');
$user_info = $this->request->getAttribute("userInfo") ?? [];
$params = array();
$params['history_inquiry_id'] = $history_inquiry_id;
$params['patient_id'] = $user_info['client_user_id'];
$patient_history_inquiry = PatientHistoryInquiry::getOne($params);
if (empty($patient_history_inquiry)){
return fail(HttpEnumCode::HTTP_ERROR, "数据不存在");
}
if ($patient_history_inquiry['history_status'] == 0){
return success();
}
$params = array();
$patient_history_inquiry['history_inquiry_id'] = $history_inquiry_id;
$data = array();
$data['history_status'] = 0;
$res = PatientHistoryInquiry::edit($params,$data);
if (!$res){
return fail(HttpEnumCode::SERVER_ERROR);
}
return success();
}
}
+257
View File
@@ -0,0 +1,257 @@
<?php
namespace App\Services;
use App\Constants\HttpEnumCode;
use App\Exception\BusinessException;
use App\Model\DiseaseClass;
use App\Model\DoctorInquiryConfig;
use App\Model\OrderInquiry;
use App\Model\PatientFamily;
use App\Model\Product;
use App\Model\SystemInquiryConfig;
use App\Model\UserDoctor;
use Hyperf\DbConnection\Db;
use Hyperf\Snowflake\IdGeneratorInterface;
/**
* 问诊订单
*/
class OrderInquiryService extends BaseService
{
/**
* 获取医生未接诊订单数量
* @param string $doctor_id 医生id
* @return int
*/
public function getDoctorNotAcceptedInquiryNum(string $doctor_id): int
{
$params = array();
$params['doctor_id'] = $doctor_id;
$params['inquiry_status'] = 3; // 待接诊
$params['inquiry_refund_status'] = 0; // 无退款
$order_inquiry_count = OrderInquiry::getCount($params);
if (!empty($order_inquiry_count) || $order_inquiry_count != 0){
$not_accepted_inquiry_num = $order_inquiry_count;
}else{
$not_accepted_inquiry_num = $order_inquiry_count;
}
return $not_accepted_inquiry_num;
}
/**
* 获取医生接诊中订单数量
* @param string $doctor_id 医生id
* @return int
*/
public function getDoctorAcceptingInquiryNum(string $doctor_id): int
{
$params = array();
$params['doctor_id'] = $doctor_id;
$params['inquiry_status'] = 4; // 已接诊
$params['inquiry_refund_status'] = 0; // 无退款
$order_inquiry_count = OrderInquiry::getCount($params);
if (!empty($order_inquiry_count) || $order_inquiry_count != 0){
$accepting_inquiry_num = $order_inquiry_count;
}else{
$accepting_inquiry_num = $order_inquiry_count;
}
return $accepting_inquiry_num;
}
// 创建问诊订单
public function addInquiryOrder(){
$user_info = $this->request->getAttribute("userInfo") ?? [];
$request_params = $this->request->all();
// 检测家庭成员是否存在
$params = array();
$params['family_id'] = $request_params['family_id'];
$params['patient_id'] = $user_info['client_user_id'];
$params['status'] = 1;
$patient_family = PatientFamily::getOne($params);
if (empty($patient_family)){
return fail(HttpEnumCode::HTTP_ERROR,"患者信息错误");
}
// 检测当前家庭成员是否和医生有未完成订单
$params = array();
$params[] = ['patient_id','=',$user_info['client_user_id']];
$params[] = ['family_id','=',$request_params['family_id']];
$params[] = ['inquiry_mode','=',1];
$params[] = ['inquiry_status','in',[1,2,3,4]]; // 1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消
$params[] = ['inquiry_refund_status','=',0];
$order_inquiry_count = OrderInquiry::getCount($params);
if ($order_inquiry_count != 0){
return fail(HttpEnumCode::HTTP_ERROR,"当前患者存在进行中的问诊订单");
}
// 问诊购药情况
if ($request_params['inquiry_type'] == 4){
// 问诊购药情况下是否包含用药意向
if (!empty($request_params['product'])){
foreach ($request_params['product'] as $item){
$params = array();
$params['product_id'] = $item['product_id'];
$product = Product::getWithAmountOne($params);
if (empty($product)){
return fail(HttpEnumCode::HTTP_ERROR,"意向药品错误");
}
// 检测商品库存
if (!empty($product['ProductPlatformAmount'])){
if ($item['product_num'] > $product['ProductPlatformAmount']['real_stock']){
// 此处是否需要特殊返回
return fail(HttpEnumCode::HTTP_ERROR,"意向药品库存不足");
}
}
// 用药意向是否和过敏史重叠
if (!empty($request_params['allergy_history'])){
$res = strpos($request_params['allergy_history'],$product['product_name']);
if ($res !== false){
return fail(HttpEnumCode::HTTP_ERROR,"过敏史中存在意向用药,请您仔细检查");
}
}
}
}
}
// 是否为孕妇
if (!empty($request_params['is_pregnant'])){
return fail(HttpEnumCode::HTTP_ERROR,"请您到线下问诊");
}
// 检测所患疾病是否正确
$params = array();
$params['disease_class_id'] = $request_params['disease_class_id'];
$params['disease_class_status'] = 1;
$disease_class = DiseaseClass::getOne($params);
if (empty($disease_class)){
return fail(HttpEnumCode::HTTP_ERROR,"疾病信息填写错误");
}
// 获取当前问诊医生信息
// 专家问诊-公益问诊
if ($request_params['inquiry_type'] == 3 || $request_params['inquiry_type'] == 1){
if (empty($request_params['doctor_id'])){
return fail(HttpEnumCode::HTTP_ERROR,"未选择医生");
}
$params = array();
$params['doctor_id'] = $request_params['doctor_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)){
return fail(HttpEnumCode::HTTP_ERROR,"未知医生");
}
if ($doctor['idcard_status'] != 1){
return fail(HttpEnumCode::HTTP_ERROR,"当前医生无法接诊,请重新选择");
}
if ($doctor['iden_auth_status'] != 1){
return fail(HttpEnumCode::HTTP_ERROR,"当前医生无法接诊,请重新选择");
}
}
// 获取问诊价格
$inquiry_price = $this->getDoctorInquiryPrice($request_params['inquiry_type'],$request_params['inquiry_mode'],$request_params['doctor_id'] ?? "");
// 获取可用优惠卷
$CouponService = new CouponService();
$user_coupon = $CouponService->getUserUsableCoupon($user_info['user_id'],$request_params['inquiry_type'],1);
Db::beginTransaction();
$generator = $this->container->get(IdGeneratorInterface::class);
try {
// 生成问诊订单
$data = array();
$data['user_id'] = $user_info['user_id'];
$data['patient_id'] = $user_info['client_user_id'];
$data['doctor_id'] = $request_params['doctor_id'] ?? "";
$data['family_id'] = $request_params['family_id'];
$data['inquiry_type'] = $request_params['inquiry_type'];
$data['inquiry_mode'] = $request_params['inquiry_mode'];
$data['inquiry_status'] = 1;// 1:待支付
$data['inquiry_no'] = $generator->generate();// 订单编号
$data['amount_total'] = $inquiry_price ?? 0;// 订单金额
$data['patient_name'] = $patient_family['card_name'];// 患者姓名-就诊人
$data['patient_name_mask'] = $patient_family['card_name_mask'];// 患者姓名-就诊人(掩码)
$data['patient_sex'] = $patient_family['sex'];// 患者性别-就诊人(0:未知 1:男 2:女)
$data['patient_age'] = $patient_family['age'];// 患者年龄-就诊人
$order_inquiry = OrderInquiry::addUserDoctor($data);
if (empty($order_inquiry)){
return fail(HttpEnumCode::SERVER_ERROR,"订单创建失败");
}
// 增加患者问诊病例
$data = array();
$data['user_id'] = $user_info['user_id'];
$data['patient_id'] = $user_info['client_user_id'];
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];// 订单-问诊id
$data['family_id'] = $patient_family['family_id']; // 家庭成员id
$data['relation'] = $patient_family['relation']; // 与患者关系(1:本人 2:父母 3:爱人 4:子女 5:亲戚 6:其他 )
$data['name'] = $patient_family['card_name']; // 患者名称
$data['sex'] = $patient_family['sex'] ?? 0; // 患者性别(0:未知 1:男 2:女)
$data['age'] = $patient_family['age'] ?? null; // 患者年龄
$data['height'] = $request_params['height'] ?: $patient_family['height'] ?: null; // 身高(cm
$data['weight'] = $request_params['weight'] ?: $patient_family['weight'] ?: null;; // 体重(kg
$data['disease_class_id'] = $disease_class['disease_class_id']; // 疾病分类id-系统
$data['disease_class_name'] = $patient_family['card_name']; // 疾病名称-系统
$data['diagnosis_date'] = $patient_family['card_name']; // 确诊日期
$data['disease_desc'] = $patient_family['card_name']; // 病情描述(主诉)
$data['diagnose_images'] = $patient_family['card_name']; // 复诊凭证(多个使用逗号分隔)
$data['is_allergy_history'] = $patient_family['card_name']; // 是否存在过敏史(0:否 1:是)
$data['allergy_history'] = $patient_family['card_name']; // 过敏史描述
$data['is_family_history'] = $patient_family['card_name']; // 是否存在家族病史(0:否 1:是)
$data['family_history'] = $patient_family['card_name']; // 家族病史描述
} catch (\Exception $e) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage());
}
// 添加患者病例
// 添加至具体队列
}
/**
* 获取问诊价格
* @param string|int $inquiry_type 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
* @param string|int $inquiry_mode 订单问诊方式(1:图文 2:视频 3:语音 4:电话 5:会员)
* @param string|int $doctor_id 医生id
* @return int
*/
public function getDoctorInquiryPrice(string|int $inquiry_type, string|int $inquiry_mode,string|int $doctor_id): int
{
if (empty($doctor_id)){
throw new BusinessException();
}
$params = array();
$params['doctor_id'] = $doctor_id;
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = $inquiry_mode;
$doctor_inquiry_config = DoctorInquiryConfig::getInquiryConfigOne($params);
if (empty($doctor_inquiry_config)){
throw new BusinessException( "当前医生未开通对应服务,请重新选择",HttpEnumCode::HTTP_ERROR);
}
$inquiry_price = $doctor_inquiry_config['inquiry_price'] ?: 0;
if ($inquiry_type == 2){
$inquiry_price = $doctor_inquiry_config['SystemInquiryConfig']['inquiry_price'];
}
return $inquiry_price;
}
}
+59
View File
@@ -0,0 +1,59 @@
<?php
namespace App\Services;
use App\Model\OrderPrescription;
use Hyperf\Contract\LengthAwarePaginatorInterface;
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['prescription_audit_status'] = 2;//处方审核状态(0:审核中 1:审核成功 2:审核驳回)
$params['is_pass'] = 1;//处方平台是否审核通过(0:否 1:是)
$params['is_delete'] = 0;//是否删除(0:否 1:是)
return OrderPrescription::getExists($params);
}
/**
* 获取药师待审核处方-分页
* @param string $pharmacist_id
* @return array
*/
public function getPharmacistWaitAuditPage(string $pharmacist_id): array
{
$params = array();
$params['pharmacist_id'] = $pharmacist_id;
$params['prescription_audit_status'] = 0; //处方审核状态(0:审核中 1:审核成功 2:审核驳回)
$fields = [
"order_prescription_id",
"order_inquiry_id",
"doctor_id",
"pharmacist_id",
"prescription_status",
"prescription_audit_status",
"is_delete",
"is_pass",
"prescription_code",
"not_pass_reason",
"audit_fail_reason",
"doctor_name",
"patient_name",
"patient_sex",
"patient_age",
"created_at",
];
$page = $this->request->input('page', 1);
$per_page = $this->request->input('per_page', 10);
return OrderPrescription::getPage($params,$fields);
}
}
+70
View File
@@ -0,0 +1,70 @@
<?php
namespace App\Services;
use App\Model\InquiryCaseProduct;
use App\Model\OrderInquiry;
use App\Model\OrderInquiryCase;
/**
* 病例
*/
class PatientCaseService extends BaseService
{
/**
* 获取患者最后一份问诊病例
* @return array
*/
public function getLastCase(): array
{
$family_id = $this->request->route('family_id');
$user_info = $this->request->getAttribute("userInfo") ?? [];
// 查询该家庭成员是否存在问诊记录
$order_inquiry_params = array();
$order_inquiry_params['patient_id'] = $user_info['client_user_id'];
$order_inquiry_params['family_id'] = $family_id;
$order_inquiry_params['inquiry_status'] = 6;// 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
$order_inquiry_params['inquiry_refund_status'] = 0;
// 查询该家庭成员最后一次已完成的问诊病例
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
$params['family_id'] = $family_id;
$params['status'] = 1;
$order_inquiry_case = OrderInquiryCase::getEndOrderInquiryCaseOne($params,$order_inquiry_params);
if (!empty($order_inquiry_case)){
if (!empty($order_inquiry_case['OrderInquiry'])){
if ($order_inquiry_case['OrderInquiry']['inquiry_type'] == 4){
// 问诊购药存在用药意向
$params = array();
$params['inquiry_case_id'] = $order_inquiry_case['inquiry_case_id'];
$inquiry_case_product = InquiryCaseProduct::getWithProductList($params);
if (!empty($inquiry_case_product)){
foreach ($inquiry_case_product as &$item){
if (!empty($item['Product'])){
$item['product_name'] = $item['Product']['product_name'];
$item['product_price'] = $item['Product']['product_price'];
$item['product_type'] = $item['Product']['product_type'];
$item['product_cover_img'] = $item['Product']['product_cover_img'];
$item['product_spec'] = $item['Product']['product_spec'];
$item['license_number'] = $item['Product']['license_number'];
$item['manufacturer'] = $item['Product']['manufacturer'];
$item['packaging_unit'] = $item['Product']['packaging_unit'];
unset($item['Product']);
}
}
}
}
unset($order_inquiry_case['OrderInquiry']);
}
}
$order_inquiry_case['Product'] = $inquiry_case_product ?? [];
return empty($order_inquiry_case) ? success() : success($order_inquiry_case->toArray());
}
}
+371
View File
@@ -0,0 +1,371 @@
<?php
namespace App\Services;
use App\Constants\DoctorTitleCode;
use App\Constants\HttpEnumCode;
use App\Model\DoctorExpertise;
use App\Model\DoctorInquiryConfig as DoctorInquiryConfigModel;
use App\Model\Hospital;
use App\Model\OrderEvaluation;
use App\Model\OrderInquiry;
use App\Model\PatientFollow;
use App\Model\PatientHistoryInquiry as PatientHistoryInquiryModel;
use App\Model\UserDoctor;
class PatientDoctorService extends BaseService
{
/**
* 获取问诊医生列表
* 专家问诊-公益问诊共用
* @return array
*/
public function getInquiryDoctorList(): array
{
$expertise_id = $this->request->input('expertise_id');
$province_id = $this->request->input('province_id');
$city_id = $this->request->input('city_id');
$sort_order = $this->request->input('sort_order');
$keyword = $this->request->input('keyword');
// 组合条件
$hospital_params = array();// 医院搜索
$doctor_params = array();// 医生搜索
$doctor_expertise_params = array();// 医生专长搜索
// 省市区
if (!empty($province_id) ){
if (empty($city_id)){
// 省份存在时需和城市在一块
return fail(HttpEnumCode::CLIENT_HTTP_ERROR);
}
$hospital_params[] = ['province_id','=',$province_id];
$hospital_params[] = ['city_id','=',$city_id];
}
// 医生专长
if (!empty($expertise_id)){
$doctor_expertise_params['expertise_id'] = $expertise_id;
}
// 固定医生查询条件
$doctor_params['status'] = 1; // 状态(0:禁用 1:正常 2:删除)
$doctor_params["iden_auth_status"] = 1;// 身份认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败)
$doctor_params["is_online"] = 1;// 是否在线(0:不在线 1:在线)
$doctor_params["is_img_expert_reception"] = 1;// 是否参加专家图文接诊(0:否 1:是)
$fields = [
"doctor_id",
"user_id",
"user_name",
"open_id",
"status",
"iden_auth_status",
"multi_point_status",
"is_bind_bank",
"is_recommend",
"sex",
"age",
"avatar",
"doctor_title",
"department_custom_id",
"department_custom_name",
"hospital_id",
"hospital_name",
"served_patients_num",
"praise_rate",
"avg_response_time",
"number_of_fans",
"is_online",
"is_img_expert_reception",
"is_img_welfare_reception",
"is_platform_deep_cooperation",
"be_good_at",
];
$user_doctors = UserDoctor::getInquiryDoctorPage($keyword,$hospital_params,$doctor_params,$doctor_expertise_params,$sort_order,$fields);
// 处理数据
if (!empty($user_doctors['data'])){
foreach ($user_doctors['data'] as &$user_doctor){
$user_doctor['doctor_title_name'] = empty($user_doctor['doctor_title']) ? "" : DoctorTitleCode::getMessage($user_doctor['doctor_title']);
// 医生专长
if (!empty($user_doctor['DoctorExpertise'])){
foreach ($user_doctor['DoctorExpertise'] as &$data){
if (!empty($data['DiseaseClassExpertise'])){
$data['expertise_name'] = $data['DiseaseClassExpertise']['expertise_name'];
}
unset($data['DiseaseClassExpertise']);
}
}
// 问诊价格
$user_doctor['price'] = 0;
$user_doctor['free_clinic_price'] = 0;
if (!empty($user_doctor['DoctorInquiryConfig'])){
foreach ($user_doctor['DoctorInquiryConfig'] as $doctor_inquiry_config) {
if ($doctor_inquiry_config['inquiry_mode'] == 1){
if ($doctor_inquiry_config['inquiry_type'] == 1) {
// 专家
$user_doctor['price'] = $doctor_inquiry_config['inquiry_price'] ?? 0;
}
if ($doctor_inquiry_config['inquiry_type'] == 3) {
// 公益
$user_doctor['free_clinic_price'] = $doctor_inquiry_config['inquiry_price'];
}
}
}
unset($user_doctor['DoctorInquiryConfig']);
}
// 好评率-超过5个已结束的订单后展示
$user_doctor['praise_rate'] = ceil($user_doctor['praise_rate'] * 0.05 * 100) / 100;
// 响应时间-超过5个已结束的订单后展示
$user_doctor['avg_response_time'] = ceil($user_doctor['avg_response_time'] * 0.05 * 100) / 100 * 60;
// 获取医生订单数
$params = array();
$params['doctor_id'] = $user_doctor['doctor_id'];
$params['inquiry_status'] = 6; // 已结束
$inquiry_order_count = OrderInquiry::getCount($params);
if (empty($inquiry_order_count) || $inquiry_order_count == 0){
$user_doctor['is_display_score'] = false;
}else{
$user_doctor['is_display_score'] = true;
}
}
}
return success($user_doctors);
}
/**
* 获取问诊医生详情
* @return array
*/
public function getInquiryDoctorInfo(): array
{
$doctor_id = $this->request->route('doctor_id');
$user_info = $this->request->getAttribute("userInfo") ?? [];
$result = array();
$result['hospital'] = [];
$result['days'] = 0;
$result['doctor_inquiry_config'] = [];
$fields = [
"doctor_id",
"user_id",
"user_name",
"open_id",
"status",
"iden_auth_status",
"multi_point_status",
"is_bind_bank",
"is_recommend",
"sex",
"age",
"avatar",
"doctor_title",
"department_custom_id",
"department_custom_name",
"hospital_id",
"served_patients_num",
"praise_rate",
"avg_response_time",
"number_of_fans",
"is_online",
"is_img_expert_reception",
"is_img_welfare_reception",
"is_platform_deep_cooperation",
"be_good_at",
];
$params = array();
$params['doctor_id'] = $doctor_id;
$params['status'] = 1; // 状态(0:禁用 1:正常 2:删除)
$params["iden_auth_status"] = 1;// 身份认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败)
$user_doctor = UserDoctor::getOne($params,$fields);
if (empty($user_doctor)){
return fail(HttpEnumCode::HTTP_SUCCESS,"医生错误");
}
$result = $user_doctor->toArray();
$result['doctor_title_name'] = empty($user_doctor['doctor_title']) ? "" : DoctorTitleCode::getMessage($user_doctor['doctor_title']);
$result['hospital'] = [];
$result['days'] = 0;
$result['doctor_inquiry_config'] = 0;
// 获取医生医院数据
$fields = [
'hospital_id',
'hospital_name',
'hospital_level_name',
];
$params = array();
$params['hospital_id'] = $user_doctor['hospital_id'];
$hospital = Hospital::getOne($params,$fields);
if (!empty($hospital)){
$result['hospital'] = $hospital;
}
// 获取服务天数
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
$params['doctor_id'] = $doctor_id;
$params['history_status'] = 1;
$patient_history_doctor = PatientHistoryInquiryModel::getOne($params);
// 按照天来计算,当日为1,前一天为2 未服务过为0
if (!empty($patient_history_doctor['created_at'])) {
$result['days'] = ceil((strtotime(date('Y-m-d', strtotime('+1 day'))) - strtotime($patient_history_doctor['created_at'])) / 86400);
}
// 获取关注状态
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
$params['doctor_id'] = $doctor_id;
$result['follow'] = PatientFollow::getExists($params);
// 获取问诊价格
// 专家-公益
$params = array();
$params[] = ['doctor_id','=',$doctor_id];
$params[] = ['inquiry_mode','=',1];// 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员)
$doctor_inquiry_config = DoctorInquiryConfigModel::getInquiryConfigList($params);
if (!empty($doctor_inquiry_config)){
foreach ($doctor_inquiry_config as &$value){
// 获取医生当日已付款的全部订单
$params = array();
$params[] = ['doctor_id','=',$doctor_id];
$params[] = ['inquiry_type','=',$value['inquiry_type']];
$params[] = ['inquiry_mode','=',1];
$params[] = ['inquiry_status','=',3];
$params[] = ['inquiry_refund_status','=',0];
$value['order_inquiry_count'] = OrderInquiry::getCount($params);
unset($value['SystemInquiryConfig']);
}
$result['doctor_inquiry_config'] = $doctor_inquiry_config;
}
// 好评率-超过5个已结束的订单后展示
$result['praise_rate'] = ceil($user_doctor['praise_rate'] * 0.05 * 100) / 100;
// 响应时间-超过5个已结束的订单后展示
$result['avg_response_time'] = ceil($user_doctor['avg_response_time'] * 0.05 * 100) / 100 * 60;
$params = array();
$params['doctor_id'] = $user_doctor['doctor_id'];
$params['inquiry_status'] = 6; // 已结束
$inquiry_order_count = OrderInquiry::getCount($params);
if (empty($inquiry_order_count) || $inquiry_order_count == 0){
$result['is_display_score'] = false;
}else{
$result['is_display_score'] = true;
}
return success($result);
}
/**
* 获取医生评价
* @return array
*/
public function getDoctorEvaluationList(): array
{
$doctor_id = $this->request->input('doctor_id');
$page = $this->request->input('page', 1);
$per_page = $this->request->input('per_page', 10);
$user_info = $this->request->getAttribute("userInfo") ?? [];
$params = array();
$params['doctor_id'] = $doctor_id;
$params['status'] = 1; // 状态(0:禁用 1:正常 2:删除)
$params["iden_auth_status"] = 1;// 身份认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败)
$user_doctor = UserDoctor::getOne($params);
if (empty($user_doctor)){
return fail(HttpEnumCode::CLIENT_HTTP_ERROR);
}
$params = array();
$params['doctor_id'] = $doctor_id;
$order_evaluation = OrderEvaluation::getPage($params);
if (!empty($order_evaluation['data'])){
foreach ($order_evaluation['data'] as &$data){
// 处理综合评分
if ($data['avg_score'] != 0){
$data['avg_score'] = ceil($data['avg_score'] * 0.05 * 100) / 100;
}
}
}
return $order_evaluation;
}
/**
* 医生详情简介-详情中的简介
* @return array
*/
public function getDoctorProfile(): array
{
$doctor_id = $this->request->route('doctor_id');
$user_info = $this->request->getAttribute("userInfo") ?? [];
$fields = [
"doctor_id",
"user_id",
"user_name",
"status",
"iden_auth_status",
"avatar",
"doctor_title",
"department_custom_name",
"hospital_id",
"hospital_name",
"be_good_at",
"brief_introduction",
];
$params = array();
$params['doctor_id'] = $doctor_id;
$params['status'] = 1; // 状态(0:禁用 1:正常 2:删除)
$params["iden_auth_status"] = 1;// 身份认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败)
$user_doctor = UserDoctor::getOne($params,$fields);
if (empty($user_doctor)){
return fail(HttpEnumCode::CLIENT_HTTP_ERROR);
}
$user_doctor = $user_doctor->toArray();
$user_doctor['doctor_title_name'] = empty($user_doctor['doctor_title']) ? "" : DoctorTitleCode::getMessage($user_doctor['doctor_title']);
// 获取医生医院数据
$fields = [
'hospital_id',
'hospital_name',
'hospital_level_name',
];
$params = array();
$params['hospital_id'] = $user_doctor['hospital_id'];
$hospital = Hospital::getOne($params,$fields);
if (!empty($hospital)){
$user_doctor['hospital'] = $hospital;
}
// 获取医生已选择专长
$UserDoctorService = new UserDoctorService();
$user_doctor['doctor_expertise'] = $UserDoctorService->getDoctorSelectedExpertise($doctor_id);
return success($user_doctor);
}
}
+215
View File
@@ -0,0 +1,215 @@
<?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);
}
}
+50
View File
@@ -0,0 +1,50 @@
<?php
namespace App\Services;
use App\Model\User as UserModel;
use Extend\Alibaba\Oss;
/**
* 安全服务
*/
class SafeService extends BaseService
{
/**
* 获取oss签名数据
* @return array
*/
public function getOssSign(): array
{
$user_type = $this->request->input('user_type');
$user_info = $this->request->getAttribute("userInfo") ?? [];
if (empty($user_info)){
return fail();
}
if ($user_type == 1){
$dir = "applet/patient/";
}elseif ($user_type == 2){
$dir = "applet/doctor/";
}elseif ($user_type == 3){
$dir = "applet/pharmacist/";
}
// 获取用户数据
$params = array();
$params['user_id'] = $user_info['user_id'];
$user = UserModel::getOne($params);
if (empty($user)){
return fail();
}
if ($user['user_type'] != $user_info['user_type']){
return fail();
}
$oss = new Oss();
return success($oss->signature($dir));
}
}
+76
View File
@@ -0,0 +1,76 @@
<?php
namespace App\Services;
use App\Constants\HttpEnumCode;
use App\Exception\BusinessException;
use App\Model\DiseaseClassExpertise;
use App\Model\DoctorExpertise;
use App\Model\OrderInquiry;
use App\Model\UserDoctor;
class UserDoctorService extends BaseService
{
/**
* 获取医生专长列表
* 身份认证
* @return array
*/
public function getAuthDoctorExpertise(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
// 获取医生已选择专长
$doctor_selected_expertise = $this->getDoctorSelectedExpertise($user_info['client_user_id']);
$expertise_ids = [];
if (!empty($doctor_selected_expertise)){
$expertise_ids = array_column($doctor_selected_expertise,'expertise_id');
}
// 获取全部专长
$fields = [
'expertise_id',
'expertise_name',
'expertise_sort',
];
$disease_class_expertise = DiseaseClassExpertise::getOrderList([],$fields);
foreach ($disease_class_expertise as &$item){
$item['is_selected'] = 0;
if (in_array($item['expertise_id'],$expertise_ids)){
$item['is_selected'] = 1;
}
}
return success($disease_class_expertise);
}
/**
* 获取医生已选择专长
* @param string $doctor_id
* @return array
*/
public function getDoctorSelectedExpertise(string $doctor_id): array
{
if (empty($doctor_id)){
throw new BusinessException("缺少医生id");
}
$params = array();
$params['doctor_id'] = $doctor_id;
$doctor_expertise = DoctorExpertise::getDiseaseClassExpertiseList($params);
if (!empty($doctor_expertise)){
foreach ($doctor_expertise as &$data){
if (!empty($data['DiseaseClassExpertise'])){
$data['expertise_name'] = $data['DiseaseClassExpertise']['expertise_name'];
}
unset($data['DiseaseClassExpertise']);
}
}
return $doctor_expertise->toArray();
}
}
+10
View File
@@ -0,0 +1,10 @@
<?php
namespace App\Services;
use App\Model\PatientHistoryInquiry as PatientHistoryInquiryModel;
class UserPatientService extends BaseService
{
}
+21
View File
@@ -0,0 +1,21 @@
<?php
namespace App\Services;
use App\Constants\HttpEnumCode;
use App\Exception\BusinessException;
use App\Model\User as UserModel;
use App\Model\UserDoctor as UserDoctorModel;
use App\Model\UserPatient as UserPatientModel;
use App\Model\UserPharmacist as UserPharmacistModel;
use App\Utils\Http;
use App\Utils\Jwt;
use App\Utils\WeChat;
use Hyperf\DbConnection\Db;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
class UserService extends BaseService
{
}