初始化提交
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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()) ;
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Model\PatientHistoryInquiry as PatientHistoryInquiryModel;
|
||||
|
||||
class UserPatientService extends BaseService
|
||||
{
|
||||
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user