From 524b298e853f6cb2ab055ac2fe57424da4e81cc7 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 27 Mar 2024 16:26:15 +0800 Subject: [PATCH 001/274] =?UTF-8?q?=E9=94=99=E8=AF=AF=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=B8=93=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorAuthService.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/Services/DoctorAuthService.php b/app/Services/DoctorAuthService.php index 74d8a89..382dc40 100644 --- a/app/Services/DoctorAuthService.php +++ b/app/Services/DoctorAuthService.php @@ -882,6 +882,11 @@ class DoctorAuthService extends BaseService if ($doctor_iden_fail['field_name'] == "be_good_at") { $result[$doctor_iden_fail['field_name']] = $doctor_iden_fail['fail_reason']; } + + // 专长 + if ($doctor_iden_fail['field_name'] == "doctor_expertise") { + $result[$doctor_iden_fail['field_name']] = $doctor_iden_fail['fail_reason']; + } } return success($result); From 77fb0864bff56fce54b3bbcdd4a5b64f4461820e Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 27 Mar 2024 17:33:36 +0800 Subject: [PATCH 002/274] =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=A4=B1=E8=B4=A5=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/DoctorIdenFail.php | 10 ++++++++ app/Model/DoctorIntroductionRecord.php | 10 ++++++++ app/Services/DoctorAuthService.php | 35 ++++++++++++++++++++++++++ 3 files changed, 55 insertions(+) diff --git a/app/Model/DoctorIdenFail.php b/app/Model/DoctorIdenFail.php index 691b7f7..7ef460d 100644 --- a/app/Model/DoctorIdenFail.php +++ b/app/Model/DoctorIdenFail.php @@ -54,4 +54,14 @@ class DoctorIdenFail extends Model { return self::where($params)->get($fields); } + + /** + * 删除 + * @param array $params + * @return int|mixed + */ + public static function del(array $params): mixed + { + return self::where($params)->delete(); + } } diff --git a/app/Model/DoctorIntroductionRecord.php b/app/Model/DoctorIntroductionRecord.php index 510aa17..90fece5 100644 --- a/app/Model/DoctorIntroductionRecord.php +++ b/app/Model/DoctorIntroductionRecord.php @@ -92,4 +92,14 @@ class DoctorIntroductionRecord extends Model ->first($fields); } + /** + * 删除 + * @param array $params + * @return int|mixed + */ + public static function del(array $params): mixed + { + return self::where($params)->delete(); + } + } diff --git a/app/Services/DoctorAuthService.php b/app/Services/DoctorAuthService.php index 382dc40..9e5499c 100644 --- a/app/Services/DoctorAuthService.php +++ b/app/Services/DoctorAuthService.php @@ -645,6 +645,18 @@ class DoctorAuthService extends BaseService } } + // 删除认证失败字段 + if ($doctor['iden_auth_status'] == 3){ + // 删除认证失败字段 + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + $res = DoctorIdenFail::del($params); + if (!$res){ + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR); + } + } + Db::commit(); } catch (\Exception $e) { Db::rollBack(); @@ -1136,6 +1148,27 @@ class DoctorAuthService extends BaseService Db::beginTransaction(); try { + // 审核不通过 + if ($doctor['iden_auth_status'] == 3){ + // 删除认证失败字段 + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + $res = DoctorIdenFail::del($params); + if (!$res){ + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR); + } + + // 删除简介修改记录表 + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + $res = DoctorIntroductionRecord::del($params); + if (!$res){ + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR); + } + } + // 新增医生简介修改记录表 $doctor_introduction_record_data['doctor_id'] = $doctor['doctor_id']; $doctor_introduction_record = DoctorIntroductionRecord::addDoctorIntroductionRecord($doctor_introduction_record_data); @@ -1157,6 +1190,8 @@ class DoctorAuthService extends BaseService return fail(HttpEnumCode::SERVER_ERROR); } + + Db::commit(); } catch (\Exception $e) { Db::rollBack(); From 5e21badaa839dee83b4a457546224c7288fcad1b Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 27 Mar 2024 18:13:34 +0800 Subject: [PATCH 003/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorAuthService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/DoctorAuthService.php b/app/Services/DoctorAuthService.php index 9e5499c..9375ee6 100644 --- a/app/Services/DoctorAuthService.php +++ b/app/Services/DoctorAuthService.php @@ -1149,7 +1149,7 @@ class DoctorAuthService extends BaseService Db::beginTransaction(); try { // 审核不通过 - if ($doctor['iden_auth_status'] == 3){ + if ($doctor['introduction_status'] == 3){ // 删除认证失败字段 $params = array(); $params['doctor_id'] = $user_info['client_user_id']; From 7d62fe7c199cbefd4b24521154c3d6c57254a73f Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 28 Mar 2024 10:26:21 +0800 Subject: [PATCH 004/274] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorAuthService.php | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/app/Services/DoctorAuthService.php b/app/Services/DoctorAuthService.php index 9375ee6..097072d 100644 --- a/app/Services/DoctorAuthService.php +++ b/app/Services/DoctorAuthService.php @@ -650,11 +650,7 @@ class DoctorAuthService extends BaseService // 删除认证失败字段 $params = array(); $params['doctor_id'] = $user_info['client_user_id']; - $res = DoctorIdenFail::del($params); - if (!$res){ - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR); - } + DoctorIdenFail::del($params); } Db::commit(); @@ -1153,20 +1149,12 @@ class DoctorAuthService extends BaseService // 删除认证失败字段 $params = array(); $params['doctor_id'] = $user_info['client_user_id']; - $res = DoctorIdenFail::del($params); - if (!$res){ - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR); - } + DoctorIdenFail::del($params); // 删除简介修改记录表 $params = array(); $params['doctor_id'] = $user_info['client_user_id']; - $res = DoctorIntroductionRecord::del($params); - if (!$res){ - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR); - } + DoctorIntroductionRecord::del($params); } // 新增医生简介修改记录表 @@ -1190,8 +1178,6 @@ class DoctorAuthService extends BaseService return fail(HttpEnumCode::SERVER_ERROR); } - - Db::commit(); } catch (\Exception $e) { Db::rollBack(); From 173991dae4bb1dcfdf77c10fa35fc00346f038e3 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 29 Mar 2024 16:47:47 +0800 Subject: [PATCH 005/274] =?UTF-8?q?=E6=9B=B4=E6=94=B9log=E3=80=82=E4=BF=AE?= =?UTF-8?q?=E6=94=B9model=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/DoctorInquiryConfig.php | 2 +- app/Model/DoctorInquiryConfigService.php | 4 ++-- app/Model/OrderInquiry.php | 4 ++-- app/Model/SystemInquiryConfig.php | 2 +- config/autoload/logger.php | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/Model/DoctorInquiryConfig.php b/app/Model/DoctorInquiryConfig.php index 5a81372..dc722de 100644 --- a/app/Model/DoctorInquiryConfig.php +++ b/app/Model/DoctorInquiryConfig.php @@ -13,7 +13,7 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property string $inquiry_config_id 主键id * @property string $doctor_id 医生id * @property int $inquiry_type 接诊类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) - * @property int $inquiry_mode 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员) + * @property int $inquiry_mode 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) * @property int $is_enable 是否启用(0:否 1:是) * @property int $last_enable_method 最后开启方式(1:自己 2:后台) * @property int $work_num_day 每日接诊数量 diff --git a/app/Model/DoctorInquiryConfigService.php b/app/Model/DoctorInquiryConfigService.php index ae93cc1..a030b1d 100644 --- a/app/Model/DoctorInquiryConfigService.php +++ b/app/Model/DoctorInquiryConfigService.php @@ -12,11 +12,11 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $config_service_id 主键id * @property int $doctor_id 医生id * @property int $inquiry_type 接诊类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) - * @property int $inquiry_mode 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员) + * @property int $inquiry_mode 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) * @property string $service_content 服务内容 * @property string $service_process 服务流程 * @property int $service_period 服务周期 - * @property int $service_rounds 服务回合数 + * @property int $service_rounds 服务回合数(0表示不限次) * @property \Carbon\Carbon $created_at 创建时间 * @property \Carbon\Carbon $updated_at 修改时间 */ diff --git a/app/Model/OrderInquiry.php b/app/Model/OrderInquiry.php index b28a5e5..df8bb4b 100644 --- a/app/Model/OrderInquiry.php +++ b/app/Model/OrderInquiry.php @@ -18,7 +18,7 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $doctor_id 医生id(未分配时为null) * @property int $family_id 家庭成员id(就诊用户) * @property int $inquiry_type 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测) - * @property int $inquiry_mode 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠) + * @property int $inquiry_mode 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) * @property int $inquiry_status 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) * @property int $is_delete 删除状态(0:否 1:是) * @property int $inquiry_refund_status 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) @@ -48,8 +48,8 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $patient_age 患者年龄-就诊人 * @property \Carbon\Carbon $created_at 创建时间 * @property \Carbon\Carbon $updated_at 修改时间 - * @property-read OrderInquiryCase|null $OrderInquiryCase * @property-read UserDoctor|null $UserDoctor + * @property-read OrderInquiryCase|null $OrderInquiryCase */ class OrderInquiry extends Model { diff --git a/app/Model/SystemInquiryConfig.php b/app/Model/SystemInquiryConfig.php index 5b69a1d..ebb9b01 100644 --- a/app/Model/SystemInquiryConfig.php +++ b/app/Model/SystemInquiryConfig.php @@ -12,7 +12,7 @@ use Hyperf\Snowflake\Concern\Snowflake; /** * @property string $system_inquiry_config_id 主键id * @property int $inquiry_type 接诊类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测) - * @property int $inquiry_mode 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠) + * @property int $inquiry_mode 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) * @property int $default_work_num_day 默认每日接诊数量 * @property int $max_work_num_day 每日最大接诊数量 * @property string $inquiry_price 接诊价格 diff --git a/config/autoload/logger.php b/config/autoload/logger.php index 65047df..c2f815c 100644 --- a/config/autoload/logger.php +++ b/config/autoload/logger.php @@ -43,9 +43,9 @@ if ($appEnv == 'dev') { return [ 'default' => [ 'handler' => [ - 'class' => Monolog\Handler\StreamHandler::class, + 'class' => Monolog\Handler\RotatingFileHandler::class, 'constructor' => [ - 'stream' => BASE_PATH . '/runtime/logs/hospital-applets-api.log', + 'filename' => BASE_PATH . '/runtime/logs/hospital-applets-api.log', 'level' => Monolog\Logger::INFO, ], ], From 850f017cdfb07ff795b7a02fedf8d7f8c99bb96e Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 29 Mar 2024 18:58:54 +0800 Subject: [PATCH 006/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=A4=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorAuthService.php | 33 +++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/app/Services/DoctorAuthService.php b/app/Services/DoctorAuthService.php index 097072d..11d0264 100644 --- a/app/Services/DoctorAuthService.php +++ b/app/Services/DoctorAuthService.php @@ -1051,22 +1051,49 @@ class DoctorAuthService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "审核中,暂不允许修改"); } + $avatar = $doctor['avatar']; + $brief_introduction = $doctor['brief_introduction']; + $be_good_at = $doctor['be_good_at']; + + if ($doctor['introduction_status'] == 3){ + // 获取个人简介修改记录 + $params = array(); + $params['doctor_id'] = $doctor['doctor_id']; + $doctor_introduction_record = DoctorIntroductionRecord::getOne($params); + if (empty($doctor_introduction_record)){ + return fail(HttpEnumCode::HTTP_ERROR, "提交失败"); + } + + if (!empty($doctor_introduction_record['avatar'])){ + $avatar = $doctor_introduction_record['avatar']; + } + + if (!empty($doctor_introduction_record['brief_introduction'])){ + $brief_introduction = $doctor_introduction_record['brief_introduction']; + } + + if (!empty($doctor_introduction_record['be_good_at'])){ + $be_good_at = $doctor_introduction_record['be_good_at']; + } + } + + // 组合存储数据 $doctor_introduction_record_data = array(); // 头像 $request_params['avatar'] = PcreMatch::pregRemoveOssWebsite($request_params['avatar']); - if ($doctor['avatar'] != $request_params['avatar']) { + if ($avatar != $request_params['avatar']) { $doctor_introduction_record_data['avatar'] = $request_params['avatar']; } // 医生简介 - if ($doctor['brief_introduction'] != $request_params['brief_introduction']) { + if ($brief_introduction != $request_params['brief_introduction']) { $doctor_introduction_record_data['brief_introduction'] = $request_params['brief_introduction']; } // 擅长领域 - if ($doctor['be_good_at'] != $request_params['be_good_at']) { + if ($be_good_at != $request_params['be_good_at']) { $doctor_introduction_record_data['be_good_at'] = $request_params['be_good_at']; } From 96f0497be319daa5c145041426f25fcf7bc8a5e3 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 29 Mar 2024 19:08:25 +0800 Subject: [PATCH 007/274] 1 --- app/Services/DoctorAuthService.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Services/DoctorAuthService.php b/app/Services/DoctorAuthService.php index 11d0264..c83f6ae 100644 --- a/app/Services/DoctorAuthService.php +++ b/app/Services/DoctorAuthService.php @@ -1140,21 +1140,21 @@ class DoctorAuthService extends BaseService foreach ($doctor_iden_fails as $doctor_iden_fail){ // 头像 if ($doctor_iden_fail['field_name'] == "avatar") { - if ($doctor['avatar'] == $request_params['avatar']){ + if ($avatar == $request_params['avatar']){ return fail(HttpEnumCode::HTTP_ERROR,"医生头像" . $doctor_iden_fail['fail_reason']); } } // 医生简介 if ($doctor_iden_fail['field_name'] == "brief_introduction") { - if ($doctor['brief_introduction'] == $request_params['brief_introduction']){ + if ($brief_introduction == $request_params['brief_introduction']){ return fail(HttpEnumCode::HTTP_ERROR,"医生简介" . $doctor_iden_fail['fail_reason']); } } // 擅长领域 if ($doctor_iden_fail['field_name'] == "be_good_at") { - if ($doctor['be_good_at'] == $request_params['be_good_at']){ + if ($be_good_at == $request_params['be_good_at']){ return fail(HttpEnumCode::HTTP_ERROR,"擅长领域" . $doctor_iden_fail['fail_reason']); } } From 621b53225d3afa6f98be24ae33b19a1ff539228b Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 1 Apr 2024 15:20:37 +0800 Subject: [PATCH 008/274] =?UTF-8?q?=E6=A3=80=E6=B5=8B=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=89=A7=E8=A1=8C=E9=80=80=E6=AC=BE=E6=AC=A1?= =?UTF-8?q?=E6=95=B0=E4=BF=AE=E6=94=B9=E4=B8=BA2=E5=A4=A9=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/InquiryService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 5c4884f..dc91a9f 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -1930,7 +1930,7 @@ class InquiryService extends BaseService $redis_key = "inquiryRefund" . $order_inquiry_id; $redis_value = $redis->get($redis_key); if (empty($redis_value)) { - $redis->set($redis_key, 1, 60 * 60 * 24 * 5); + $redis->set($redis_key, 1, 60 * 60 * 24 * 2); return true; } From 8784a9389823e394a80386aac38690cdec6bdb0b Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 2 Apr 2024 17:06:20 +0800 Subject: [PATCH 009/274] =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=EF=BC=8C=E6=96=B0=E5=A2=9E=E9=9A=8F=E8=AE=BF?= =?UTF-8?q?=E5=8C=85=E6=8E=A5=E5=8F=A3=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DoctorInquiryConfigController.php | 97 ++- app/Controller/SystemController.php | 16 + app/Model/DoctorConfigFollowPackage.php | 78 +++ app/Model/DoctorConfigFollowPackageItem.php | 78 +++ app/Model/SystemInquiryConfig.php | 5 +- app/Request/DoctorInquiryConfigRequest.php | 29 +- app/Request/SystemRequest.php | 8 +- app/Services/DoctorInquiryService.php | 550 +++++++++++++++--- app/Services/SystemService.php | 34 ++ config/routes.php | 43 +- 10 files changed, 844 insertions(+), 94 deletions(-) create mode 100644 app/Model/DoctorConfigFollowPackage.php create mode 100644 app/Model/DoctorConfigFollowPackageItem.php diff --git a/app/Controller/DoctorInquiryConfigController.php b/app/Controller/DoctorInquiryConfigController.php index 3b98f12..41ba786 100644 --- a/app/Controller/DoctorInquiryConfigController.php +++ b/app/Controller/DoctorInquiryConfigController.php @@ -12,6 +12,22 @@ use Psr\Http\Message\ResponseInterface; class DoctorInquiryConfigController extends AbstractController { + /** + * 获取医生问诊服务开启状态 + * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function getDoctorInquiryConfigOpenStatus(): ResponseInterface + { + $request = $this->container->get(DoctorInquiryConfigRequest::class); + $request->scene('getDoctorInquiryConfigOpenStatus')->validateResolved(); + + $DoctorInquiryService = new DoctorInquiryService(); + $data = $DoctorInquiryService->getDoctorInquiryConfigOpenStatus(); + return $this->response->json($data); + } + /** * 获取医生问诊配置 * @return ResponseInterface @@ -61,50 +77,107 @@ class DoctorInquiryConfigController extends AbstractController } /** - * 获取医生问诊配置-服务设置 + * 获取医生问诊配置-疑难会诊-服务设置 * @return ResponseInterface * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ - public function getInquiryServiceConfig(): ResponseInterface + public function getDoctorInquiryDifficultConfig(): ResponseInterface { $request = $this->container->get(DoctorInquiryConfigRequest::class); - $request->scene('getInquiryServiceConfig')->validateResolved(); + $request->scene('getDoctorInquiryDifficultConfig')->validateResolved(); $DoctorInquiryService = new DoctorInquiryService(); - $data = $DoctorInquiryService->getInquiryServiceConfig(); + $data = $DoctorInquiryService->getDoctorInquiryDifficultConfig(); return $this->response->json($data); } /** - * 新增医生问诊配置-服务设置 + * 新增医生问诊配置-疑难会诊-服务设置 * @return ResponseInterface * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ - public function addInquiryServiceConfig(): ResponseInterface + public function addDoctorInquiryDifficultConfig(): ResponseInterface { $request = $this->container->get(DoctorInquiryConfigRequest::class); - $request->scene('addInquiryServiceConfig')->validateResolved(); + $request->scene('addDoctorInquiryDifficultConfig')->validateResolved(); $DoctorInquiryService = new DoctorInquiryService(); - $data = $DoctorInquiryService->addInquiryServiceConfig(); + $data = $DoctorInquiryService->addDoctorInquiryDifficultConfig(); return $this->response->json($data); } /** - * 修改医生问诊配置-服务设置 + * 修改医生问诊配置-疑难会诊-服务设置 * @return ResponseInterface * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ - public function putInquiryServiceConfig(): ResponseInterface + public function putDoctorInquiryDifficultConfig(): ResponseInterface { $request = $this->container->get(DoctorInquiryConfigRequest::class); - $request->scene('putInquiryServiceConfig')->validateResolved(); + $request->scene('putDoctorInquiryDifficultConfig')->validateResolved(); $DoctorInquiryService = new DoctorInquiryService(); - $data = $DoctorInquiryService->putInquiryServiceConfig(); + $data = $DoctorInquiryService->putDoctorInquiryDifficultConfig(); return $this->response->json($data); } + + /** + * 获取医生问诊配置-随访包 + * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function getDoctorInquiryFollowConfig(): ResponseInterface + { + $DoctorInquiryService = new DoctorInquiryService(); + $data = $DoctorInquiryService->getDoctorInquiryFollowConfig(); + return $this->response->json($data); + } + + /** + * 获取医生问诊配置-随访包-列表 + * @return ResponseInterface + */ + public function getDoctorInquiryFollowItemConfig(): ResponseInterface + { + $DoctorInquiryService = new DoctorInquiryService(); + $data = $DoctorInquiryService->getDoctorInquiryFollowItemConfig(); + return $this->response->json($data); + } + + /** + * 新增医生问诊配置-随访包 + * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function addDoctorInquiryFollowConfig(): ResponseInterface + { + $request = $this->container->get(DoctorInquiryConfigRequest::class); + $request->scene('addDoctorInquiryFollowConfig')->validateResolved(); + + $DoctorInquiryService = new DoctorInquiryService(); + $data = $DoctorInquiryService->addDoctorInquiryFollowConfig(); + return $this->response->json($data); + } + + /** + * 修改医生问诊配置-随访包 + * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function putDoctorInquiryFollowConfig(): ResponseInterface + { + $request = $this->container->get(DoctorInquiryConfigRequest::class); + $request->scene('putDoctorInquiryFollowConfig')->validateResolved(); + + $DoctorInquiryService = new DoctorInquiryService(); + $data = $DoctorInquiryService->putDoctorInquiryFollowConfig(); + return $this->response->json($data); + } + } \ No newline at end of file diff --git a/app/Controller/SystemController.php b/app/Controller/SystemController.php index adad20d..fe1bc48 100644 --- a/app/Controller/SystemController.php +++ b/app/Controller/SystemController.php @@ -29,4 +29,20 @@ class SystemController extends AbstractController $data = $SystemService->getSystemInquiryTime(); return $this->response->json($data); } + + /** + * 获取系统问诊配置 + * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function getSystemInquiryConfig(): ResponseInterface + { + $request = $this->container->get(SystemRequest::class); + $request->scene('getSystemInquiryConfig')->validateResolved(); + + $SystemService = new SystemService(); + $data = $SystemService->getSystemInquiryConfig(); + return $this->response->json($data); + } } \ No newline at end of file diff --git a/app/Model/DoctorConfigFollowPackage.php b/app/Model/DoctorConfigFollowPackage.php new file mode 100644 index 0000000..1f4c7c3 --- /dev/null +++ b/app/Model/DoctorConfigFollowPackage.php @@ -0,0 +1,78 @@ +first($fields); + } + + /** + * 多条 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params, array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + + /** + * 新增 + * @param array $data + * @return DoctorConfigFollowPackage|\Hyperf\Database\Model\Model + */ + public static function addDoctorConfigFollowPackage(array $data): \Hyperf\Database\Model\Model|DoctorConfigFollowPackage + { + return self::create($data); + } + + /** + * 修改 + * @param array $params + * @param array $data + * @return int + */ + public static function edit(array $params = [], array $data = []): int + { + return self::where($params)->update($data); + } +} diff --git a/app/Model/DoctorConfigFollowPackageItem.php b/app/Model/DoctorConfigFollowPackageItem.php new file mode 100644 index 0000000..78015ef --- /dev/null +++ b/app/Model/DoctorConfigFollowPackageItem.php @@ -0,0 +1,78 @@ +first($fields); + } + + /** + * 多条 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params, array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + + /** + * 新增 + * @param array $data + * @return DoctorConfigFollowPackageItem|\Hyperf\Database\Model\Model + */ + public static function addDoctorConfigFollowPackageItem(array $data): \Hyperf\Database\Model\Model|DoctorConfigFollowPackageItem + { + return self::create($data); + } + + /** + * 删除 + * @param array $params + * @return int|mixed + */ + public static function del(array $params): mixed + { + return self::where($params)->delete(); + } +} diff --git a/app/Model/SystemInquiryConfig.php b/app/Model/SystemInquiryConfig.php index ebb9b01..410bc7e 100644 --- a/app/Model/SystemInquiryConfig.php +++ b/app/Model/SystemInquiryConfig.php @@ -15,6 +15,7 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $inquiry_mode 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) * @property int $default_work_num_day 默认每日接诊数量 * @property int $max_work_num_day 每日最大接诊数量 + * @property int $min_work_num_day 每日最小接诊数量 * @property string $inquiry_price 接诊价格 * @property string $min_inquiry_price 最低接诊价格(专家问诊) * @property string $max_inquiry_price 最高接诊价格(专家问诊) @@ -35,12 +36,12 @@ class SystemInquiryConfig extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['system_inquiry_config_id', 'inquiry_type', 'inquiry_mode', 'default_work_num_day', 'max_work_num_day', 'inquiry_price', 'min_inquiry_price', 'max_inquiry_price', 'times_number', 'duration', 'created_at', 'updated_at']; + protected array $fillable = ['system_inquiry_config_id', 'inquiry_type', 'inquiry_mode', 'default_work_num_day', 'max_work_num_day', 'min_work_num_day', 'inquiry_price', 'min_inquiry_price', 'max_inquiry_price', 'times_number', 'duration', 'created_at', 'updated_at']; /** * The attributes that should be cast to native types. */ - protected array $casts = ['system_inquiry_config_id' => 'string', 'inquiry_type' => 'integer', 'inquiry_mode' => 'integer', 'max_work_num_day' => 'integer', 'times_number' => 'integer', 'duration' => 'integer', 'created_at' => 'datetime', 'updated_at' => 'datetime', 'default_work_num_day' => 'integer']; + protected array $casts = ['system_inquiry_config_id' => 'string', 'inquiry_type' => 'integer', 'inquiry_mode' => 'integer', 'max_work_num_day' => 'integer', 'times_number' => 'integer', 'duration' => 'integer', 'created_at' => 'datetime', 'updated_at' => 'datetime', 'default_work_num_day' => 'integer', 'min_work_num_day' => 'integer']; protected string $primaryKey = "system_inquiry_config_id"; diff --git a/app/Request/DoctorInquiryConfigRequest.php b/app/Request/DoctorInquiryConfigRequest.php index b3ed7cb..0e02479 100644 --- a/app/Request/DoctorInquiryConfigRequest.php +++ b/app/Request/DoctorInquiryConfigRequest.php @@ -11,6 +11,10 @@ use Hyperf\Validation\Rule; class DoctorInquiryConfigRequest extends FormRequest { protected array $scenes = [ + 'getDoctorInquiryConfigOpenStatus' => [ // 获取医生问诊服务开启状态 + 'inquiry_type', + 'inquiry_mode', + ], 'getDoctorInquiryConfig' => [ // 获取医生问诊配置 'inquiry_type', 'inquiry_mode', @@ -26,22 +30,32 @@ class DoctorInquiryConfigRequest extends FormRequest 'inquiry_price', 'work_num_day', ], - 'getInquiryServiceConfig' => [ // 获取医生问诊配置-服务设置 + 'getDoctorInquiryDifficultConfig' => [ // 获取医生问诊配置-疑难会诊-服务设置 'inquiry_type', 'inquiry_mode', ], - 'addInquiryServiceConfig' => [ // 新增医生问诊配置-服务设置 + 'addDoctorInquiryDifficultConfig' => [ // 新增医生问诊配置-疑难会诊-服务设置 'service_content', 'service_process', 'service_period', 'service_rounds', ], - 'putInquiryServiceConfig' => [ // 修改医生问诊配置-服务设置 + 'putDoctorInquiryDifficultConfig' => [ // 修改医生问诊配置-疑难会诊-服务设置 'service_content', 'service_process', 'service_period', 'service_rounds', ], + 'addDoctorInquiryFollowConfig' => [ // 新增医生问诊配置-随访包 + 'monthly_frequency', // 每月次数(0表示不限次) + 'service_rounds', // 服务回合数(0表示不限次) + 'items', // 随访包内容列表数据 + ], + 'putDoctorInquiryFollowConfig' => [ // 修改医生问诊配置-随访包 + 'monthly_frequency', // 每月次数(0表示不限次) + 'service_rounds', // 服务回合数(0表示不限次) + 'items', // 随访包内容列表数据 + ], ]; /** @@ -59,7 +73,7 @@ class DoctorInquiryConfigRequest extends FormRequest { return [ 'inquiry_type' => 'required|integer|min:1|max:3', - 'inquiry_mode' => 'required|integer|min:1|max:6', + 'inquiry_mode' => 'required|integer|min:1|max:9', 'is_open' => "required|boolean", 'inquiry_price' => "required|min:0|numeric", 'work_num_day' => "required|min:0|numeric", @@ -67,6 +81,8 @@ class DoctorInquiryConfigRequest extends FormRequest 'service_process' => "required", 'service_period' => "required|min:2|max:30|numeric", 'service_rounds' => "required|min:0|max:300|numeric", + 'monthly_frequency' => "required|min:0|max:10|numeric", + 'items' => "required", ]; } @@ -103,6 +119,11 @@ class DoctorInquiryConfigRequest extends FormRequest 'service_rounds.min' => "服务回合数最小值不可低于0", 'service_rounds.max' => "服务回合数最大值不可超过300", 'service_rounds.numeric' => "服务回合数填写错误", + 'monthly_frequency.required' => "请填写每月次数", + 'monthly_frequency.min' => "每月次数最小值不可低于0", + 'monthly_frequency.max' => "每月次数最大值不可超过10", + 'monthly_frequency.numeric' => "每月次数填写错误", + 'items.required' => "请填写服务内容", ]; } } diff --git a/app/Request/SystemRequest.php b/app/Request/SystemRequest.php index e9a6165..1b8f257 100644 --- a/app/Request/SystemRequest.php +++ b/app/Request/SystemRequest.php @@ -12,7 +12,11 @@ class SystemRequest extends FormRequest protected array $scenes = [ 'getSystemInquiryTime' => [ // 获取系统问诊配置 快速问诊-问诊购药 'inquiry_type', // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) - 'inquiry_mode', // 订单问诊方式(1:图文 2:视频 3:语音 4:电话 5:会员) + 'inquiry_mode', // 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) + ], + 'getSystemInquiryConfig' => [ // 获取系统问诊配置 + 'inquiry_type', // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + 'inquiry_mode', // 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) ], ]; @@ -31,7 +35,7 @@ class SystemRequest extends FormRequest { return [ 'inquiry_type' => 'required|integer|min:1|max:4', - 'inquiry_mode' => 'required|integer|min:1|max:5', + 'inquiry_mode' => 'required|integer|min:1|max:9', ]; } diff --git a/app/Services/DoctorInquiryService.php b/app/Services/DoctorInquiryService.php index 2394e6b..4776e58 100644 --- a/app/Services/DoctorInquiryService.php +++ b/app/Services/DoctorInquiryService.php @@ -4,6 +4,8 @@ namespace App\Services; use App\Constants\HttpEnumCode; use App\Exception\BusinessException; +use App\Model\DoctorConfigFollowPackage; +use App\Model\DoctorConfigFollowPackageItem; use App\Model\DoctorInquiryConfig; use App\Model\DoctorInquiryConfigService; use App\Model\DoctorInquiryPriceRecord; @@ -16,6 +18,64 @@ use Hyperf\DbConnection\Db; */ class DoctorInquiryService extends BaseService { + /** + * 获取医生问诊服务开启状态 + * @return array + */ + public function getDoctorInquiryConfigOpenStatus(): 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:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) + + // 获取医生信息 + $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['is_bind_bank'] != 1) { + return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡"); + } + + // 接诊开关 + $is_open = 0; + + // 系统问诊配置表 + $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)) { + if ($doctor_inquiry_config['is_enable'] == 1){ + $is_open = 1; + } + } + + return success($is_open); + } + /** * 获取医生问诊配置 * @return array @@ -25,7 +85,7 @@ class DoctorInquiryService extends BaseService $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:会员 6:疑难会诊) + $inquiry_mode = $this->request->input('inquiry_mode');// 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) // 获取医生信息 $params = array(); @@ -49,14 +109,10 @@ class DoctorInquiryService extends BaseService // 返回数据 $result = array(); - $info = array(); - $config = array(); - - // 接诊开关 - $is_open = 0; // 接诊价格 - $info['inquiry_price'] = 0; + $result['inquiry_price'] = ""; + $result['work_num_day'] = ""; // 系统问诊配置表 $params = array(); @@ -73,67 +129,138 @@ class DoctorInquiryService extends BaseService $params['inquiry_type'] = $inquiry_type; $params['inquiry_mode'] = $inquiry_mode; $doctor_inquiry_config = DoctorInquiryConfig::getOne($params); - if (empty($doctor_inquiry_config)) { + if (!empty($doctor_inquiry_config)) { // 接诊价格 - $info['inquiry_price'] = $system_inquiry_config['inquiry_price'] ?: 0; - if ($inquiry_type == 3) { - // 公益问诊,存在价格档次,默认第一档 - $inquiry_price = explode(',', $system_inquiry_config['inquiry_price']); - - $info['inquiry_price'] = $inquiry_price[0]; - } - - // 默认接诊人数 - $info['work_num_day'] = $system_inquiry_config['default_work_num_day'] ?: 0; - } else { - // 接诊价格 - $info['inquiry_price'] = $doctor_inquiry_config['inquiry_price'] ?: 0; - if ($inquiry_type == 2) { + $result['inquiry_price'] = $doctor_inquiry_config['inquiry_price'] ?: 0; + if ($inquiry_type == 2 && $inquiry_mode == 1) { // 快速-系统配置 - $info['inquiry_price'] = $system_inquiry_config['inquiry_price']; + $result['inquiry_price'] = $system_inquiry_config['inquiry_price']; } - $info['work_num_day'] = $doctor_inquiry_config['work_num_day'] ?: 0; - - // 接诊开关 - if ($doctor_inquiry_config['is_enable'] == 1){ - $is_open = 1; - } + $result['work_num_day'] = $doctor_inquiry_config['work_num_day'] ?: 0; } - // 接诊开关 - $info['is_open'] = $is_open; - - // 每日最大接诊数量 - $config['max_work_num_day'] = $system_inquiry_config['max_work_num_day']; - - // 最低接诊价格(专家问诊) - $config['min_inquiry_price'] = $system_inquiry_config['min_inquiry_price'] ?: 0; - - // 最高接诊价格(专家问诊) - $config['max_inquiry_price'] = $system_inquiry_config['max_inquiry_price'] ?: 0; - - // 默认价格 - $config['default_inquiry_price'] = $system_inquiry_config['max_inquiry_price'] ?: 0; - - // 沟通次数(0为不限制次数) - $config['times_number'] = $system_inquiry_config['times_number']; - - // 沟通时长(分钟,0为不限制时长) - $config['duration'] = $system_inquiry_config['duration']; - - // 系统价格(公益问诊) - $config['system_inquiry_price'] = []; - if ($inquiry_type == 3) { - $config['system_inquiry_price'] = explode(',', $system_inquiry_config['inquiry_price']); - } - - $result['info'] = $info; - $result['config'] = $config; - return success($result); } + /** + * 获取医生问诊配置 + * @return array + */ +// public function getDoctorInquiryConfig(): 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:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) +// +// // 获取医生信息 +// $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['is_bind_bank'] != 1) { +// return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡"); +// } +// +// // 返回数据 +// $result = array(); +// $info = array(); +// $config = array(); +// +// // 接诊开关 +// $is_open = 0; +// +// // 接诊价格 +// $info['inquiry_price'] = 0; +// +// // 系统问诊配置表 +// $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)) { +// // 接诊价格 +// $info['inquiry_price'] = $system_inquiry_config['inquiry_price'] ?: 0; +// if ($inquiry_type == 3) { +// // 公益问诊,存在价格档次,默认第一档 +// $inquiry_price = explode(',', $system_inquiry_config['inquiry_price']); +// +// $info['inquiry_price'] = $inquiry_price[0]; +// } +// +// // 默认接诊人数 +// $info['work_num_day'] = $system_inquiry_config['default_work_num_day'] ?: 0; +// } else { +// // 接诊价格 +// $info['inquiry_price'] = $doctor_inquiry_config['inquiry_price'] ?: 0; +// if ($inquiry_type == 2) { +// // 快速-系统配置 +// $info['inquiry_price'] = $system_inquiry_config['inquiry_price']; +// } +// +// $info['work_num_day'] = $doctor_inquiry_config['work_num_day'] ?: 0; +// +// // 接诊开关 +// if ($doctor_inquiry_config['is_enable'] == 1){ +// $is_open = 1; +// } +// } +// +// // 接诊开关 +// $info['is_open'] = $is_open; +// +// // 每日最大接诊数量 +// $config['max_work_num_day'] = $system_inquiry_config['max_work_num_day']; +// +// // 最低接诊价格(专家问诊) +// $config['min_inquiry_price'] = $system_inquiry_config['min_inquiry_price'] ?: 0; +// +// // 最高接诊价格(专家问诊) +// $config['max_inquiry_price'] = $system_inquiry_config['max_inquiry_price'] ?: 0; +// +// // 默认价格 +// $config['default_inquiry_price'] = $system_inquiry_config['max_inquiry_price'] ?: 0; +// +// // 沟通次数(0为不限制次数) +// $config['times_number'] = $system_inquiry_config['times_number']; +// +// // 沟通时长(分钟,0为不限制时长) +// $config['duration'] = $system_inquiry_config['duration']; +// +// // 系统价格(公益问诊) +// $config['system_inquiry_price'] = []; +// if ($inquiry_type == 3) { +// $config['system_inquiry_price'] = explode(',', $system_inquiry_config['inquiry_price']); +// } +// +// $result['info'] = $info; +// $result['config'] = $config; +// +// return success($result); +// } + /** * 医生问诊开关 * @return array @@ -143,7 +270,7 @@ class DoctorInquiryService extends BaseService $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_mode = $this->request->input('inquiry_mode');// 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) $is_open = $this->request->input('is_open');// 是否开启(1:开启 0:关闭) // 获取医生信息 @@ -425,12 +552,12 @@ class DoctorInquiryService extends BaseService * 获取医生问诊配置-服务设置 * @return array */ - public function getInquiryServiceConfig(): array + public function getDoctorInquiryDifficultConfig(): 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:会员 6:疑难会诊) + $inquiry_mode = $this->request->input('inquiry_mode');// 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) if ($inquiry_mode != 6){ return fail(); @@ -469,10 +596,10 @@ class DoctorInquiryService extends BaseService } /** - * 新增医生问诊配置-服务设置 + * 新增医生问诊配置-疑难会诊-服务设置 * @return array */ - public function addInquiryServiceConfig(): array + public function addDoctorInquiryDifficultConfig(): array { $user_info = $this->request->getAttribute("userInfo") ?? []; @@ -527,10 +654,10 @@ class DoctorInquiryService extends BaseService } /** - * 修改医生问诊配置-服务设置 + * 修改医生问诊配置-疑难会诊-服务设置 * @return array */ - public function putInquiryServiceConfig(): array + public function putDoctorInquiryDifficultConfig(): array { $user_info = $this->request->getAttribute("userInfo") ?? []; @@ -597,4 +724,295 @@ class DoctorInquiryService extends BaseService return success(); } + + /** + * 获取医生问诊配置-随访包 + * @return array + */ + public function getDoctorInquiryFollowConfig(): 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, "未知医生"); + } + + if ($doctor['idcard_status'] != 1) { + return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证"); + } + + if ($doctor['iden_auth_status'] != 1) { + return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证"); + } + + if ($doctor['is_bind_bank'] != 1) { + return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡"); + } + + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + $doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params); + if (empty($doctor_config_follow_package)){ + return success(null); + }else{ + return success($doctor_config_follow_package->toArray()); + } + } + + /** + * 获取医生问诊配置-随访包-列表 + * @return array + */ + public function getDoctorInquiryFollowItemConfig(): 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, "未知医生"); + } + + if ($doctor['idcard_status'] != 1) { + return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证"); + } + + if ($doctor['iden_auth_status'] != 1) { + return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证"); + } + + if ($doctor['is_bind_bank'] != 1) { + return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡"); + } + + $result = array(); + + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + $doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params); + if (!empty($doctor_config_follow_package)){ + $params = array(); + $params['follow_package_id'] = $doctor_config_follow_package['follow_package_id']; + $doctor_config_follow_package_item = DoctorConfigFollowPackageItem::getList($params); + if (!empty($doctor_config_follow_package_item)){ + $result = $doctor_config_follow_package_item->toArray(); + } + } + + return success($result); + } + + /** + * 新增医生问诊配置-随访包 + * @return array + */ + public function addDoctorInquiryFollowConfig(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $monthly_frequency = $this->request->input('monthly_frequency'); // 每月次数(0表示不限次) + $service_rounds = $this->request->input('service_rounds'); // 服务回合数(0表示不限次) + $items = $this->request->input('items'); // 随访包内容数据 + + if ($service_rounds != 0){ + return fail(HttpEnumCode::HTTP_ERROR,"服务回合数只允许为无限次"); + } + + // 获取医生信息 + $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['is_bind_bank'] != 1) { + return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡"); + } + + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + $doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params); + if (!empty($doctor_config_follow_package)){ + return fail(HttpEnumCode::HTTP_ERROR, "已存在随访包配置,请勿重复设置"); + } + + Db::beginTransaction(); + + try { + $data = array(); + $data['doctor_id'] = $doctor['doctor_id']; + $data['monthly_frequency'] = $monthly_frequency; + $data['service_rounds'] = $service_rounds; + $doctor_config_follow_package = DoctorConfigFollowPackage::addDoctorConfigFollowPackage($data); + if (empty($doctor_config_follow_package)){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "添加失败"); + } + + foreach ($items as $item){ + if (empty($item['service_period'])){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "请填写服务周期"); + } + + if (!in_array($item['service_period'],[30,90,180,360])){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "请填写服务周期"); + } + + if (empty($item['service_price'])){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "请填写服务价格"); + } + + if ($item['service_price'] < 10 || $item['service_price'] > 9999){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "服务价格只允许设置在10-9999范围内"); + } + + // 新增医生配置-随访包明细 + $data = array(); + $data['follow_package_id'] = $doctor_config_follow_package['follow_package_id']; + $data['service_period'] = $item['service_period']; + $data['service_price'] = $item['service_price']; + $doctor_config_follow_package_item = DoctorConfigFollowPackageItem::addDoctorConfigFollowPackageItem($data); + if (empty($doctor_config_follow_package_item)){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "保存失败"); + } + } + + Db::commit(); + }catch (\Throwable $e){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); + } + + return success(); + } + + /** + * 修改医生问诊配置-随访包 + * @return array + */ + public function putDoctorInquiryFollowConfig(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $monthly_frequency = $this->request->input('monthly_frequency'); // 每月次数(0表示不限次) + $service_rounds = $this->request->input('service_rounds'); // 服务回合数(0表示不限次) + $items = $this->request->input('items'); // 随访包内容数据 + + if ($service_rounds != 0){ + return fail(HttpEnumCode::HTTP_ERROR,"服务回合数只允许为无限次"); + } + + // 获取医生信息 + $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['is_bind_bank'] != 1) { + return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡"); + } + + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + $doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params); + if (empty($doctor_config_follow_package)){ + return fail(HttpEnumCode::HTTP_ERROR, "请添加后再修改"); + } + + Db::beginTransaction(); + + try { + // 修改随访包数据 + $follow_package_data = array(); + if ($doctor_config_follow_package['monthly_frequency'] != $monthly_frequency){ + $follow_package_data['monthly_frequency'] = $monthly_frequency; + } + + if ($doctor_config_follow_package['service_rounds'] != $service_rounds){ + $follow_package_data['service_rounds'] = $service_rounds; + } + + if (!empty($follow_package_data)){ + $params = array(); + $params['follow_package_id'] = $doctor_config_follow_package['follow_package_id']; + DoctorConfigFollowPackage::edit($params,$follow_package_data); + } + + // 删除随访包内容明细 + $params = array(); + $params['follow_package_id'] = $doctor_config_follow_package['follow_package_id']; + DoctorConfigFollowPackageItem::del($params); + + // 新增随访包内容明细 + foreach ($items as $item){ + if (empty($item['service_period'])){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "请填写服务周期"); + } + + if (!in_array($item['service_period'],[30,90,180,360])){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "请填写服务周期"); + } + + if (empty($item['service_price'])){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "请填写服务价格"); + } + + if ($item['service_price'] < 10 || $item['service_price'] > 9999){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "服务价格只允许设置在10-9999范围内"); + } + + // 新增医生配置-随访包明细 + $data = array(); + $data['follow_package_id'] = $doctor_config_follow_package['follow_package_id']; + $data['service_period'] = $item['service_period']; + $data['service_price'] = $item['service_price']; + $doctor_config_follow_package_item = DoctorConfigFollowPackageItem::addDoctorConfigFollowPackageItem($data); + if (empty($doctor_config_follow_package_item)){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "保存失败"); + } + } + + Db::commit(); + }catch (\Throwable $e){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); + } + + return success(); + } } \ No newline at end of file diff --git a/app/Services/SystemService.php b/app/Services/SystemService.php index 8a30d61..52fdc10 100644 --- a/app/Services/SystemService.php +++ b/app/Services/SystemService.php @@ -2,8 +2,11 @@ namespace App\Services; +use App\Constants\HttpEnumCode; +use App\Model\DoctorInquiryConfig; use App\Model\SystemInquiryConfig; use App\Model\SystemInquiryTime; +use App\Model\UserDoctor; /** * 系统配置 @@ -80,4 +83,35 @@ class SystemService extends BaseService return success($result); } + + /** + * 获取系统问诊配置 + * @return array + */ + public function getSystemInquiryConfig(): 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:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) + + // 系统问诊配置表 + $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); + } + + $system_inquiry_config = $system_inquiry_config->toArray(); + + // 系统价格(公益问诊) + $system_inquiry_config['system_inquiry_price'] = []; + if ($inquiry_type == 3) { + $system_inquiry_config['system_inquiry_price'] = explode(',', $system_inquiry_config['inquiry_price']); + } + + return success($system_inquiry_config); + } } \ No newline at end of file diff --git a/config/routes.php b/config/routes.php index a469f7b..1cc3246 100644 --- a/config/routes.php +++ b/config/routes.php @@ -100,23 +100,47 @@ Router::addGroup('/doctor', function () { Router::addGroup('/inquiry', function () { // 问诊配置 Router::addGroup('/config', function () { + // 问诊服务开关 + Router::addGroup('/open', function () { + // 获取医生问诊服务开启状态 + Router::get('', [DoctorInquiryConfigController::class, 'getDoctorInquiryConfigOpenStatus']); + + // 医生问诊开关 + Router::put('', [DoctorInquiryConfigController::class, 'putDoctorInquiryOpen']); + }); + // 获取医生问诊配置 Router::get('', [DoctorInquiryConfigController::class, 'getDoctorInquiryConfig']); // 修改医生问诊配置 Router::put('', [DoctorInquiryConfigController::class, 'putDoctorInquiryConfig']); - // 医生问诊开关 - Router::put('/open', [DoctorInquiryConfigController::class, 'putDoctorInquiryOpen']); + // 疑难会诊 + Router::addGroup('/difficult', function () { + // 获取医生问诊配置-疑难会诊-服务设置 + Router::get('', [DoctorInquiryConfigController::class, 'getDoctorInquiryDifficultConfig']); - // 获取医生问诊配置-疑难会诊-服务设置 - Router::get('/service', [DoctorInquiryConfigController::class, 'getInquiryServiceConfig']); + // 新增医生问诊配置-疑难会诊-服务设置 + Router::post('', [DoctorInquiryConfigController::class, 'addDoctorInquiryDifficultConfig']); - // 新增医生问诊配置-疑难会诊-服务设置 - Router::post('/service', [DoctorInquiryConfigController::class, 'addInquiryServiceConfig']); + // 修改医生问诊配置-疑难会诊-服务设置 + Router::put('/{config_service_id:\d+}', [DoctorInquiryConfigController::class, 'putDoctorInquiryDifficultConfig']); + }); - // 修改医生问诊配置-疑难会诊-服务设置 - Router::put('/service/{config_service_id:\d+}', [DoctorInquiryConfigController::class, 'putInquiryServiceConfig']); + // 随访包 + Router::addGroup('/follow', function () { + // 获取医生问诊配置-随访包 + Router::get('', [DoctorInquiryConfigController::class, 'getDoctorInquiryFollowConfig']); + + // 新增医生问诊配置-随访包 + Router::post('', [DoctorInquiryConfigController::class, 'addDoctorInquiryFollowConfig']); + + // 获取医生问诊配置-随访包-列表 + Router::get('/item', [DoctorInquiryConfigController::class, 'getDoctorInquiryFollowItemConfig']); + + // 修改医生问诊配置-随访包 + Router::put('', [DoctorInquiryConfigController::class, 'putDoctorInquiryFollowConfig']); + }); }); // 获取医生问诊消息列表 @@ -692,6 +716,9 @@ Router::addGroup('/system', function () { Router::addGroup('/inquiry', function () { // 获取系统问诊时间 快速问诊-问诊购药 Router::get('/time', [SystemController::class, 'getSystemInquiryTime']); + + // 获取系统问诊配置 + Router::get('/config', [SystemController::class, 'getSystemInquiryConfig']); }); }); From 547d4ded888e7a3d1467bd0deaa1274ef7dce8eb Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 3 Apr 2024 13:49:25 +0800 Subject: [PATCH 010/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E9=97=AE=E8=AF=8A=E5=BC=80=E5=85=B3=20=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E4=BF=A1=E6=81=AF=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E3=80=82=E4=BB=A5=E5=8F=8A=E6=AF=8F=E6=97=A5=E6=8E=A5=E8=AF=8A?= =?UTF-8?q?=E6=95=B0=E9=87=8F=E3=80=81=E6=8E=A5=E8=AF=8A=E4=BB=B7=E6=A0=BC?= =?UTF-8?q?=E8=B5=8B=E5=80=BC=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DoctorConfigDifficultConsultation.php | 81 ++++++++++ app/Model/DoctorConfigHealthPackage.php | 79 ++++++++++ app/Services/DoctorInquiryService.php | 148 +++++++++++------- 3 files changed, 255 insertions(+), 53 deletions(-) create mode 100644 app/Model/DoctorConfigDifficultConsultation.php create mode 100644 app/Model/DoctorConfigHealthPackage.php diff --git a/app/Model/DoctorConfigDifficultConsultation.php b/app/Model/DoctorConfigDifficultConsultation.php new file mode 100644 index 0000000..a4880c7 --- /dev/null +++ b/app/Model/DoctorConfigDifficultConsultation.php @@ -0,0 +1,81 @@ +first($fields); + } + + /** + * 多条 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params, array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + + /** + * 新增 + * @param array $data + * @return DoctorConfigDifficultConsultation|\Hyperf\Database\Model\Model + */ + public static function addDoctorConfigDifficultConsultation(array $data): \Hyperf\Database\Model\Model|DoctorConfigDifficultConsultation + { + return self::create($data); + } + + /** + * 修改 + * @param array $params + * @param array $data + * @return int + */ + public static function edit(array $params = [], array $data = []): int + { + return self::where($params)->update($data); + } +} diff --git a/app/Model/DoctorConfigHealthPackage.php b/app/Model/DoctorConfigHealthPackage.php new file mode 100644 index 0000000..a30b92d --- /dev/null +++ b/app/Model/DoctorConfigHealthPackage.php @@ -0,0 +1,79 @@ +first($fields); + } + + /** + * 多条 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params, array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + + /** + * 新增 + * @param array $data + * @return DoctorConfigHealthPackage|\Hyperf\Database\Model\Model + */ + public static function addDoctorConfigHealthPackage(array $data): \Hyperf\Database\Model\Model|DoctorConfigHealthPackage + { + return self::create($data); + } + + /** + * 修改 + * @param array $params + * @param array $data + * @return int + */ + public static function edit(array $params = [], array $data = []): int + { + return self::where($params)->update($data); + } +} diff --git a/app/Services/DoctorInquiryService.php b/app/Services/DoctorInquiryService.php index 4776e58..7577f14 100644 --- a/app/Services/DoctorInquiryService.php +++ b/app/Services/DoctorInquiryService.php @@ -4,8 +4,10 @@ namespace App\Services; use App\Constants\HttpEnumCode; use App\Exception\BusinessException; +use App\Model\DoctorConfigDifficultConsultation; use App\Model\DoctorConfigFollowPackage; use App\Model\DoctorConfigFollowPackageItem; +use App\Model\DoctorConfigHealthPackage; use App\Model\DoctorInquiryConfig; use App\Model\DoctorInquiryConfigService; use App\Model\DoctorInquiryPriceRecord; @@ -68,7 +70,7 @@ class DoctorInquiryService extends BaseService $params['inquiry_mode'] = $inquiry_mode; $doctor_inquiry_config = DoctorInquiryConfig::getOne($params); if (!empty($doctor_inquiry_config)) { - if ($doctor_inquiry_config['is_enable'] == 1){ + if ($doctor_inquiry_config['is_enable'] == 1) { $is_open = 1; } } @@ -293,6 +295,37 @@ class DoctorInquiryService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡"); } + // 判断对应信息是否存在 + if ($inquiry_type == 1 && $inquiry_mode == 6) { + // 疑难会诊 + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + $doctor_config_difficult_consultation = DoctorConfigDifficultConsultation::getOne($params); + if (empty($doctor_config_difficult_consultation)){ + return fail(HttpEnumCode::HTTP_ERROR, "请设置服务价格后开启"); + } + } + + // 随访包 + if ($inquiry_type == 1 && $inquiry_mode == 9) { + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + $doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params); + if (empty($doctor_config_follow_package)){ + return fail(HttpEnumCode::HTTP_ERROR, "请添加服务内容后开启"); + } + } + + // 健康包 + if ($inquiry_type == 1 && $inquiry_mode == 8) { + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + $doctor_config_health_package = DoctorConfigHealthPackage::getOne($params); + if (empty($doctor_config_health_package)){ + return fail(HttpEnumCode::HTTP_ERROR, "请设置服务价格后开启"); + } + } + Db::beginTransaction(); try { @@ -303,6 +336,10 @@ class DoctorInquiryService extends BaseService $params['inquiry_mode'] = $inquiry_mode; $doctor_inquiry_config = DoctorInquiryConfig::getOne($params); if (empty($doctor_inquiry_config)) { + // 此处两个参数都默认设置为0,随访包以及健康包使用不到 + $work_num_day = 0; // 每日接诊数量 + $inquiry_price = 0; // 接诊价格(专家问诊-公益问诊) + // 获取系统问诊配置表 $params = array(); $params['inquiry_type'] = $inquiry_type; @@ -313,6 +350,12 @@ class DoctorInquiryService extends BaseService return fail(HttpEnumCode::SERVER_ERROR); } + // 获取系统问诊配置表 + if ($inquiry_mode != 8 && $inquiry_mode != 9){ + $work_num_day = $system_inquiry_config['default_work_num_day'] ?: 0; + $inquiry_price = $system_inquiry_config['inquiry_price']; + } + // 快速问诊,需创建 $data = array(); $data['doctor_id'] = $user_info['client_user_id']; @@ -321,15 +364,14 @@ class DoctorInquiryService extends BaseService $data['inquiry_mode'] = $inquiry_mode; $data['is_enable'] = 1; // 是否启用(0:否 1:是) $data['last_enable_method'] = 1; // 最后开启方式(1:自己 2:后台) - $data['work_num_day'] = $system_inquiry_config['default_work_num_day'] ?: 0; - $data['inquiry_price'] = $system_inquiry_config['inquiry_price']; - + $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{ + } else { // 已存在问诊配置,进行修改 $params = array(); $params['inquiry_config_id'] = $doctor_inquiry_config["inquiry_config_id"]; @@ -337,11 +379,11 @@ class DoctorInquiryService extends BaseService $data = array(); $data['is_enable'] = $is_open; $data['last_enable_method'] = 1; - DoctorInquiryConfig::editInquiryConfig($params,$data); + DoctorInquiryConfig::editInquiryConfig($params, $data); } Db::commit(); - }catch (\Throwable $e){ + } catch (\Throwable $e) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); } @@ -515,7 +557,7 @@ class DoctorInquiryService extends BaseService * @param string|int $inquiry_mode 订单问诊方式(1:图文 2:视频 3:语音 4:电话 5:会员) * @param string|int $doctor_id 医生id */ - public function getDoctorInquiryPrice(string|int $inquiry_type, string|int $inquiry_mode, string|int $doctor_id):float + public function getDoctorInquiryPrice(string|int $inquiry_type, string|int $inquiry_mode, string|int $doctor_id): float { // 接诊类型(1:专家问诊 2:快速问诊 3:公益问诊) if ($inquiry_type == 1 || $inquiry_type == 3) { @@ -559,7 +601,7 @@ class DoctorInquiryService extends BaseService $inquiry_type = $this->request->input('inquiry_type');// 接诊类型(1:专家问诊 2:快速问诊 3:公益问诊) $inquiry_mode = $this->request->input('inquiry_mode');// 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) - if ($inquiry_mode != 6){ + if ($inquiry_mode != 6) { return fail(); } @@ -588,9 +630,9 @@ class DoctorInquiryService extends BaseService $params['inquiry_type'] = $inquiry_type; $params['inquiry_mode'] = $inquiry_mode; $doctor_inquiry_config_service = DoctorInquiryConfigService::getOne($params); - if (empty($doctor_inquiry_config_service)){ + if (empty($doctor_inquiry_config_service)) { return success(null); - }else{ + } else { return success($doctor_inquiry_config_service->toArray()); } } @@ -633,7 +675,7 @@ class DoctorInquiryService extends BaseService $params['inquiry_type'] = 1; $params['inquiry_mode'] = 6; $doctor_inquiry_config_service = DoctorInquiryConfigService::getOne($params); - if (!empty($doctor_inquiry_config_service)){ + if (!empty($doctor_inquiry_config_service)) { return fail(HttpEnumCode::HTTP_ERROR, "已存在服务设置,请勿重复设置"); } @@ -642,11 +684,11 @@ class DoctorInquiryService extends BaseService $data['inquiry_type'] = 1; $data['inquiry_mode'] = 6; $data['service_content'] = $service_content; - $data['service_process'] =$service_process; - $data['service_period'] =$service_period; - $data['service_rounds'] =$service_rounds; + $data['service_process'] = $service_process; + $data['service_period'] = $service_period; + $data['service_rounds'] = $service_rounds; $doctor_inquiry_config_service = DoctorInquiryConfigService::addDoctorInquiryConfigService($data); - if (empty($doctor_inquiry_config_service)){ + if (empty($doctor_inquiry_config_service)) { return fail(); } @@ -692,32 +734,32 @@ class DoctorInquiryService extends BaseService $params['config_service_id'] = $config_service_id; $params['doctor_id'] = $user_info['client_user_id']; $doctor_inquiry_config_service = DoctorInquiryConfigService::getOne($params); - if (empty($doctor_inquiry_config_service)){ + if (empty($doctor_inquiry_config_service)) { return fail(); } $data = array(); - if ($doctor_inquiry_config_service['service_content'] != $service_content){ + if ($doctor_inquiry_config_service['service_content'] != $service_content) { $data['service_content'] = $service_content; } - if ($doctor_inquiry_config_service['service_process'] != $service_process){ + if ($doctor_inquiry_config_service['service_process'] != $service_process) { $data['service_process'] = $service_process; } - if ($doctor_inquiry_config_service['service_period'] != $service_period){ + if ($doctor_inquiry_config_service['service_period'] != $service_period) { $data['service_period'] = $service_period; } - if ($doctor_inquiry_config_service['service_rounds'] != $service_rounds){ + if ($doctor_inquiry_config_service['service_rounds'] != $service_rounds) { $data['service_rounds'] = $service_rounds; } - if (!empty($data)){ + if (!empty($data)) { $params = array(); $params['config_service_id'] = $doctor_inquiry_config_service['config_service_id']; - $res = DoctorInquiryConfigService::edit($params,$data); - if (!$res){ + $res = DoctorInquiryConfigService::edit($params, $data); + if (!$res) { return fail(); } } @@ -756,9 +798,9 @@ class DoctorInquiryService extends BaseService $params = array(); $params['doctor_id'] = $user_info['client_user_id']; $doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params); - if (empty($doctor_config_follow_package)){ + if (empty($doctor_config_follow_package)) { return success(null); - }else{ + } else { return success($doctor_config_follow_package->toArray()); } } @@ -796,11 +838,11 @@ class DoctorInquiryService extends BaseService $params = array(); $params['doctor_id'] = $user_info['client_user_id']; $doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params); - if (!empty($doctor_config_follow_package)){ + if (!empty($doctor_config_follow_package)) { $params = array(); $params['follow_package_id'] = $doctor_config_follow_package['follow_package_id']; $doctor_config_follow_package_item = DoctorConfigFollowPackageItem::getList($params); - if (!empty($doctor_config_follow_package_item)){ + if (!empty($doctor_config_follow_package_item)) { $result = $doctor_config_follow_package_item->toArray(); } } @@ -820,8 +862,8 @@ class DoctorInquiryService extends BaseService $service_rounds = $this->request->input('service_rounds'); // 服务回合数(0表示不限次) $items = $this->request->input('items'); // 随访包内容数据 - if ($service_rounds != 0){ - return fail(HttpEnumCode::HTTP_ERROR,"服务回合数只允许为无限次"); + if ($service_rounds != 0) { + return fail(HttpEnumCode::HTTP_ERROR, "服务回合数只允许为无限次"); } // 获取医生信息 @@ -847,7 +889,7 @@ class DoctorInquiryService extends BaseService $params = array(); $params['doctor_id'] = $user_info['client_user_id']; $doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params); - if (!empty($doctor_config_follow_package)){ + if (!empty($doctor_config_follow_package)) { return fail(HttpEnumCode::HTTP_ERROR, "已存在随访包配置,请勿重复设置"); } @@ -859,28 +901,28 @@ class DoctorInquiryService extends BaseService $data['monthly_frequency'] = $monthly_frequency; $data['service_rounds'] = $service_rounds; $doctor_config_follow_package = DoctorConfigFollowPackage::addDoctorConfigFollowPackage($data); - if (empty($doctor_config_follow_package)){ + if (empty($doctor_config_follow_package)) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "添加失败"); } - foreach ($items as $item){ - if (empty($item['service_period'])){ + foreach ($items as $item) { + if (empty($item['service_period'])) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "请填写服务周期"); } - if (!in_array($item['service_period'],[30,90,180,360])){ + if (!in_array($item['service_period'], [30, 90, 180, 360])) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "请填写服务周期"); } - if (empty($item['service_price'])){ + if (empty($item['service_price'])) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "请填写服务价格"); } - if ($item['service_price'] < 10 || $item['service_price'] > 9999){ + if ($item['service_price'] < 10 || $item['service_price'] > 9999) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "服务价格只允许设置在10-9999范围内"); } @@ -891,14 +933,14 @@ class DoctorInquiryService extends BaseService $data['service_period'] = $item['service_period']; $data['service_price'] = $item['service_price']; $doctor_config_follow_package_item = DoctorConfigFollowPackageItem::addDoctorConfigFollowPackageItem($data); - if (empty($doctor_config_follow_package_item)){ + if (empty($doctor_config_follow_package_item)) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "保存失败"); } } Db::commit(); - }catch (\Throwable $e){ + } catch (\Throwable $e) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); } @@ -918,8 +960,8 @@ class DoctorInquiryService extends BaseService $service_rounds = $this->request->input('service_rounds'); // 服务回合数(0表示不限次) $items = $this->request->input('items'); // 随访包内容数据 - if ($service_rounds != 0){ - return fail(HttpEnumCode::HTTP_ERROR,"服务回合数只允许为无限次"); + if ($service_rounds != 0) { + return fail(HttpEnumCode::HTTP_ERROR, "服务回合数只允许为无限次"); } // 获取医生信息 @@ -945,7 +987,7 @@ class DoctorInquiryService extends BaseService $params = array(); $params['doctor_id'] = $user_info['client_user_id']; $doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params); - if (empty($doctor_config_follow_package)){ + if (empty($doctor_config_follow_package)) { return fail(HttpEnumCode::HTTP_ERROR, "请添加后再修改"); } @@ -954,18 +996,18 @@ class DoctorInquiryService extends BaseService try { // 修改随访包数据 $follow_package_data = array(); - if ($doctor_config_follow_package['monthly_frequency'] != $monthly_frequency){ + if ($doctor_config_follow_package['monthly_frequency'] != $monthly_frequency) { $follow_package_data['monthly_frequency'] = $monthly_frequency; } - if ($doctor_config_follow_package['service_rounds'] != $service_rounds){ + if ($doctor_config_follow_package['service_rounds'] != $service_rounds) { $follow_package_data['service_rounds'] = $service_rounds; } - if (!empty($follow_package_data)){ + if (!empty($follow_package_data)) { $params = array(); $params['follow_package_id'] = $doctor_config_follow_package['follow_package_id']; - DoctorConfigFollowPackage::edit($params,$follow_package_data); + DoctorConfigFollowPackage::edit($params, $follow_package_data); } // 删除随访包内容明细 @@ -974,23 +1016,23 @@ class DoctorInquiryService extends BaseService DoctorConfigFollowPackageItem::del($params); // 新增随访包内容明细 - foreach ($items as $item){ - if (empty($item['service_period'])){ + foreach ($items as $item) { + if (empty($item['service_period'])) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "请填写服务周期"); } - if (!in_array($item['service_period'],[30,90,180,360])){ + if (!in_array($item['service_period'], [30, 90, 180, 360])) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "请填写服务周期"); } - if (empty($item['service_price'])){ + if (empty($item['service_price'])) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "请填写服务价格"); } - if ($item['service_price'] < 10 || $item['service_price'] > 9999){ + if ($item['service_price'] < 10 || $item['service_price'] > 9999) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "服务价格只允许设置在10-9999范围内"); } @@ -1001,14 +1043,14 @@ class DoctorInquiryService extends BaseService $data['service_period'] = $item['service_period']; $data['service_price'] = $item['service_price']; $doctor_config_follow_package_item = DoctorConfigFollowPackageItem::addDoctorConfigFollowPackageItem($data); - if (empty($doctor_config_follow_package_item)){ + if (empty($doctor_config_follow_package_item)) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "保存失败"); } } Db::commit(); - }catch (\Throwable $e){ + } catch (\Throwable $e) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); } From 5b54fcb7529c2ea4a29bdfbd64f7025ee0c40cf4 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 3 Apr 2024 14:03:33 +0800 Subject: [PATCH 011/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E6=8E=A5=E8=AF=8A?= =?UTF-8?q?=E4=BB=B7=E6=A0=BC=E9=BB=98=E8=AE=A4=E4=B8=BAnull?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorInquiryService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/DoctorInquiryService.php b/app/Services/DoctorInquiryService.php index 7577f14..d1887e2 100644 --- a/app/Services/DoctorInquiryService.php +++ b/app/Services/DoctorInquiryService.php @@ -338,7 +338,7 @@ class DoctorInquiryService extends BaseService if (empty($doctor_inquiry_config)) { // 此处两个参数都默认设置为0,随访包以及健康包使用不到 $work_num_day = 0; // 每日接诊数量 - $inquiry_price = 0; // 接诊价格(专家问诊-公益问诊) + $inquiry_price = null; // 接诊价格(专家问诊-公益问诊) // 获取系统问诊配置表 $params = array(); From 9c2150c785e5c53d2883d3d02f5f3cc664bb5658 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 3 Apr 2024 17:11:20 +0800 Subject: [PATCH 012/274] =?UTF-8?q?=E5=BC=80=E5=90=AF=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E5=A4=84=E7=90=86=E5=8C=BB=E7=94=9F=E5=81=A5?= =?UTF-8?q?=E5=BA=B7=E5=8C=85=E3=80=82=E8=8E=B7=E5=8F=96=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E9=97=AE=E8=AF=8A=E9=85=8D=E7=BD=AE-=E5=81=A5=E5=BA=B7?= =?UTF-8?q?=E5=8C=85=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DoctorInquiryConfigController.php | 13 ++- app/Model/ConfigHealthPackage.php | 80 +++++++++++++ app/Services/DoctorInquiryService.php | 108 ++++++++++++++++-- config/routes.php | 6 + 4 files changed, 195 insertions(+), 12 deletions(-) create mode 100644 app/Model/ConfigHealthPackage.php diff --git a/app/Controller/DoctorInquiryConfigController.php b/app/Controller/DoctorInquiryConfigController.php index 41ba786..4df29af 100644 --- a/app/Controller/DoctorInquiryConfigController.php +++ b/app/Controller/DoctorInquiryConfigController.php @@ -127,8 +127,6 @@ class DoctorInquiryConfigController extends AbstractController /** * 获取医生问诊配置-随访包 * @return ResponseInterface - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function getDoctorInquiryFollowConfig(): ResponseInterface { @@ -180,4 +178,15 @@ class DoctorInquiryConfigController extends AbstractController return $this->response->json($data); } + /** + * 获取医生问诊配置-健康包 + * @return ResponseInterface + */ + public function getDoctorInquiryHealthConfig(): ResponseInterface + { + $DoctorInquiryService = new DoctorInquiryService(); + $data = $DoctorInquiryService->getDoctorInquiryHealthConfig(); + return $this->response->json($data); + } + } \ No newline at end of file diff --git a/app/Model/ConfigHealthPackage.php b/app/Model/ConfigHealthPackage.php new file mode 100644 index 0000000..84adc24 --- /dev/null +++ b/app/Model/ConfigHealthPackage.php @@ -0,0 +1,80 @@ +first($fields); + } + + /** + * 多条 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params, array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + + /** + * 新增 + * @param array $data + * @return ConfigHealthPackage|\Hyperf\Database\Model\Model + */ + public static function addConfigHealthPackage(array $data): \Hyperf\Database\Model\Model|ConfigHealthPackage + { + return self::create($data); + } + + /** + * 修改 + * @param array $params + * @param array $data + * @return int + */ + public static function edit(array $params = [], array $data = []): int + { + return self::where($params)->update($data); + } +} diff --git a/app/Services/DoctorInquiryService.php b/app/Services/DoctorInquiryService.php index d1887e2..ea00efc 100644 --- a/app/Services/DoctorInquiryService.php +++ b/app/Services/DoctorInquiryService.php @@ -4,6 +4,7 @@ namespace App\Services; use App\Constants\HttpEnumCode; use App\Exception\BusinessException; +use App\Model\ConfigHealthPackage; use App\Model\DoctorConfigDifficultConsultation; use App\Model\DoctorConfigFollowPackage; use App\Model\DoctorConfigFollowPackageItem; @@ -316,16 +317,6 @@ class DoctorInquiryService extends BaseService } } - // 健康包 - if ($inquiry_type == 1 && $inquiry_mode == 8) { - $params = array(); - $params['doctor_id'] = $user_info['client_user_id']; - $doctor_config_health_package = DoctorConfigHealthPackage::getOne($params); - if (empty($doctor_config_health_package)){ - return fail(HttpEnumCode::HTTP_ERROR, "请设置服务价格后开启"); - } - } - Db::beginTransaction(); try { @@ -336,6 +327,13 @@ class DoctorInquiryService extends BaseService $params['inquiry_mode'] = $inquiry_mode; $doctor_inquiry_config = DoctorInquiryConfig::getOne($params); if (empty($doctor_inquiry_config)) { + if ($inquiry_type == 1 || $inquiry_type == 3){ + if ($inquiry_mode != 8 && $inquiry_mode != 9){ + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR); + } + } + // 此处两个参数都默认设置为0,随访包以及健康包使用不到 $work_num_day = 0; // 每日接诊数量 $inquiry_price = null; // 接诊价格(专家问诊-公益问诊) @@ -371,6 +369,39 @@ class DoctorInquiryService extends BaseService Db::rollBack(); return fail(HttpEnumCode::SERVER_ERROR); } + + // 处理医生健康包 + if ($inquiry_type == 1 || $inquiry_mode == 8){ + // 获取健康包配置 + $params = array(); + $config_health_package = ConfigHealthPackage::getOne($params); + if (empty($config_health_package)){ + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR); + } + + // 获取专家图文问诊价格 + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + $params['inquiry_type'] = 1; + $params['inquiry_mode'] = 1; + $doctor_inquiry_config = DoctorInquiryConfig::getOne($params); + if (empty($doctor_inquiry_config)){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "本服务需设置图文问诊的价格,才可开启"); + } + + // 创建医生健康包 + $data = array(); + $data['doctor_id'] = $user_info['client_user_id']; + $data['config_health_package_id'] = $config_health_package['config_health_package_id']; + $data['service_price'] = $doctor_inquiry_config['inquiry_price'] * $config_health_package['service_rate'] / 100 * 6; + $doctor_config_health_package = DoctorConfigHealthPackage::addDoctorConfigHealthPackage($data); + if (empty($doctor_config_health_package)){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "开启失败"); + } + } } else { // 已存在问诊配置,进行修改 $params = array(); @@ -1057,4 +1088,61 @@ class DoctorInquiryService extends BaseService return success(); } + + /** + * 获取医生问诊配置-健康包 + * @return array + */ + public function getDoctorInquiryHealthConfig(): 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, "未知医生"); + } + + if ($doctor['idcard_status'] != 1) { + return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证"); + } + + if ($doctor['iden_auth_status'] != 1) { + return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证"); + } + + if ($doctor['is_bind_bank'] != 1) { + return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡"); + } + + if ($doctor['multi_point_status'] != 1) { + return fail(HttpEnumCode::HTTP_ERROR, "本服务需开处方,您还未做多点执业认证,是否前往?"); + } + + // 获取专家图文问诊价格 + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + $params['inquiry_type'] = 1; + $params['inquiry_mode'] = 1; + $doctor_inquiry_config = DoctorInquiryConfig::getOne($params); + if (empty($doctor_inquiry_config)){ + return fail(HttpEnumCode::HTTP_ERROR, "本服务需设置图文问诊的价格,才可开通"); + } + + // 获取健康包配置 + $params = array(); + $config_health_package = ConfigHealthPackage::getOne($params); + if (empty($config_health_package)){ + return fail(HttpEnumCode::SERVER_ERROR); + } + + $result = array(); + $result['service_count'] = $config_health_package['service_count']; // 总服务次数 + $result['service_rate'] = $config_health_package['service_rate']; // 服务费率。100为满值,表示1,正常费率。 + $result['inquiry_price'] = $doctor_inquiry_config['inquiry_price']; // 专家问诊-图文接诊价格 + + return success($result); + } } \ No newline at end of file diff --git a/config/routes.php b/config/routes.php index 1cc3246..6d004e0 100644 --- a/config/routes.php +++ b/config/routes.php @@ -141,6 +141,12 @@ Router::addGroup('/doctor', function () { // 修改医生问诊配置-随访包 Router::put('', [DoctorInquiryConfigController::class, 'putDoctorInquiryFollowConfig']); }); + + // 健康包 + Router::addGroup('/health', function () { + // 获取医生问诊配置-健康包 + Router::get('', [DoctorInquiryConfigController::class, 'getDoctorInquiryHealthConfig']); + }); }); // 获取医生问诊消息列表 From c0f6fbca0609e93659bb9e9bb525609d2ef9d3f6 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 3 Apr 2024 17:12:26 +0800 Subject: [PATCH 013/274] =?UTF-8?q?=E5=BC=80=E5=90=AF=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E5=A4=84=E7=90=86=E5=8C=BB=E7=94=9F=E5=81=A5?= =?UTF-8?q?=E5=BA=B7=E5=8C=85=E3=80=82=E8=8E=B7=E5=8F=96=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E9=97=AE=E8=AF=8A=E9=85=8D=E7=BD=AE-=E5=81=A5=E5=BA=B7?= =?UTF-8?q?=E5=8C=85=E6=8E=A5=E5=8F=A31?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorInquiryService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/DoctorInquiryService.php b/app/Services/DoctorInquiryService.php index ea00efc..91dfc60 100644 --- a/app/Services/DoctorInquiryService.php +++ b/app/Services/DoctorInquiryService.php @@ -1128,7 +1128,7 @@ class DoctorInquiryService extends BaseService $params['inquiry_mode'] = 1; $doctor_inquiry_config = DoctorInquiryConfig::getOne($params); if (empty($doctor_inquiry_config)){ - return fail(HttpEnumCode::HTTP_ERROR, "本服务需设置图文问诊的价格,才可开通"); + return success(null); } // 获取健康包配置 From 944ab44305beff85718bab3fc79b97fab4747118 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 8 Apr 2024 14:51:28 +0800 Subject: [PATCH 014/274] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E4=B8=BB=E8=A1=A8=EF=BC=8C=E4=BF=AE=E6=94=B9=E4=BA=86?= =?UTF-8?q?=E6=89=80=E6=9C=89=E8=AE=A2=E5=8D=95=E7=9B=B8=E5=85=B3=EF=BC=8C?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AssignDoctorDelayDirectConsumer.php | 88 +-- ...oPharmacistCaVerifyDelayDirectConsumer.php | 2 +- ...ncelUnInquiryOrdersDelayDirectConsumer.php | 78 ++- .../CancelUnpayOrdersDelayDirectConsumer.php | 55 +- .../getPrescriptionOrderStatusCommand.php | 5 +- app/Controller/CallBackController.php | 484 +++++++------ app/Controller/PatientOrderController.php | 2 - app/Controller/TestController.php | 16 - app/Model/DoctorIncomeRecord.php | 81 +++ app/Model/Order.php | 95 +++ app/Model/OrderCoupon.php | 80 +++ app/Model/OrderDetection.php | 3 +- app/Model/OrderInquiry.php | 3 +- app/Model/OrderProduct.php | 7 +- app/Model/OrderRefund.php | 86 +++ app/Services/DetectionService.php | 274 ++++---- app/Services/InquiryService.php | 435 ++++++------ app/Services/OrderProductService.php | 125 +++- app/Services/OrderService.php | 634 ++++++++++++++++++ app/Services/PatientOrderService.php | 185 +++-- app/Utils/Utils.php | 48 ++ 21 files changed, 2044 insertions(+), 742 deletions(-) create mode 100644 app/Model/DoctorIncomeRecord.php create mode 100644 app/Model/Order.php create mode 100644 app/Model/OrderCoupon.php create mode 100644 app/Model/OrderRefund.php create mode 100644 app/Services/OrderService.php create mode 100644 app/Utils/Utils.php diff --git a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php index 43a8c49..c9726f3 100644 --- a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php @@ -15,8 +15,10 @@ use App\Model\UserDoctor; use App\Services\ImService; use App\Services\InquiryService; use App\Services\MessagePush; +use App\Services\OrderService; use App\Services\UserDoctorService; use App\Utils\Log; +use App\Utils\Utils; use Hyperf\Amqp\Message\ConsumerDelayedMessageTrait; use Hyperf\Amqp\Message\ProducerDelayedMessageTrait; use Hyperf\Amqp\Message\Type; @@ -49,14 +51,14 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage public function consumeMessage($data, AMQPMessage $message): string { - Log::getInstance('queue-AssignDoctor')->info("开始:" . json_encode($data, JSON_UNESCAPED_UNICODE)); + Log::getInstance('queue-AssignDoctor')->info(json_encode($data, JSON_UNESCAPED_UNICODE)); // 获取订单数据 $params = array(); $params['order_inquiry_id'] = $data['order_inquiry_id']; $order_inquiry = OrderInquiry::getOne($params); if (empty($order_inquiry)) { - Log::getInstance('queue-AssignDoctor')->error("错误:未查询到对应订单数据"); + Log::getInstance('queue-AssignDoctor')->error("未查询到对应订单数据"); return Result::DROP;// 销毁 } @@ -65,14 +67,14 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $order_inquiry_case = OrderInquiryCase::getOne($params); if (empty($order_inquiry_case)){ - Log::getInstance('queue-AssignDoctor')->error("错误:患者病例错误"); + Log::getInstance('queue-AssignDoctor')->error("患者病例错误"); return Result::DROP;// 销毁 } // 检测订单状态 $res = $this->checkInquiryStatus($order_inquiry); if (!$res){ - Log::getInstance('queue-AssignDoctor')->error("错误:订单状态错误"); + Log::getInstance('queue-AssignDoctor')->error("订单状态错误"); return Result::DROP;// 销毁 } @@ -80,7 +82,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage $pay_time = strtotime($order_inquiry['pay_time']); $diff_time = time() - $pay_time; if ($diff_time < 0) { - Log::getInstance('queue-AssignDoctor')->error("错误:支付时间错误"); + Log::getInstance('queue-AssignDoctor')->error("支付时间错误"); return Result::DROP;// 销毁 } @@ -91,23 +93,25 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage $is_system_time_pass = $inquiryService->checkSystemInquiryTime($order_inquiry['inquiry_type']); if (!$is_system_time_pass && $order_inquiry['inquiry_type'] == 4){ // 非坐班时间 - Log::getInstance("queue-AssignDoctor")->info("信息:非坐班时间,执行退款"); + Log::getInstance("queue-AssignDoctor")->info("非坐班时间,执行退款"); - $InquiryService = new InquiryService(); - - // 检测问诊订单执行退款次数 - Log::getInstance("queue-AssignDoctor")->info("信息:检测执行退款次数"); - $res = $InquiryService->checkInquiryRefundCount($order_inquiry['order_inquiry_id']); - if (!$res){ + // 检测执行次数 + $Utils = new Utils(); + $redis_key = "inquiryRefund" . $order_inquiry['inquiry_no']; + $res = $Utils->checkHandleNumber($redis_key); + if (!$res) { Db::rollBack(); - Log::getInstance("queue-AssignDoctor")->error("错误:超出最大退款次数"); + Log::getInstance("queue-CancelUnInquiryOrders")->error("超出最大执行次数或检测错误"); return Result::ACK; } Log::getInstance("queue-AssignDoctor")->info("信息:订单退款"); - $InquiryService->inquiryRefund($order_inquiry['order_inquiry_id'], "无可分配医生"); - Log::getInstance("queue-AssignDoctor")->info("信息:取消问诊订单"); + $OrderService = new OrderService(); + $OrderService->orderRefund($order_inquiry['inquiry_no'], "无可分配医生"); + + Log::getInstance("queue-AssignDoctor")->info("取消问诊订单"); + $save_data = array(); $save_data['inquiry_status'] = 7; $save_data['cancel_time'] = date("Y-m-d H:i:s", time()); @@ -119,7 +123,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; OrderInquiry::edit($params, $save_data); - Log::getInstance("queue-AssignDoctor")->info("成功:已退款"); + Log::getInstance("queue-AssignDoctor")->info("已退款"); Db::commit(); @@ -128,7 +132,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['order_inquiry_id']); $MessagePush->assignDoctorFail(); }catch (\Exception $e){ - Log::getInstance("queue-AssignDoctor")->error("错误:" . $e->getMessage()); + Log::getInstance("queue-AssignDoctor")->error( $e->getMessage()); } return Result::ACK; @@ -136,23 +140,25 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage // 检测分配时间 if ($diff_time > 600) { - Log::getInstance("queue-AssignDoctor")->info("信息:超出10分钟,执行退款"); + Log::getInstance("queue-AssignDoctor")->info("超出10分钟,执行退款"); - $InquiryService = new InquiryService(); - - // 检测问诊订单执行退款次数 - Log::getInstance("queue-AssignDoctor")->info("信息:检测执行退款次数"); - $res = $InquiryService->checkInquiryRefundCount($order_inquiry['order_inquiry_id']); - if (!$res){ + // 检测执行次数 + $Utils = new Utils(); + $redis_key = "inquiryRefund" . $order_inquiry['inquiry_no']; + $res = $Utils->checkHandleNumber($redis_key); + if (!$res) { Db::rollBack(); - Log::getInstance("queue-AssignDoctor")->error("错误:超出最大退款次数"); + Log::getInstance("queue-CancelUnInquiryOrders")->error("超出最大执行次数或检测错误"); return Result::ACK; } - Log::getInstance("queue-AssignDoctor")->info("信息:订单退款"); - $InquiryService->inquiryRefund($order_inquiry['order_inquiry_id'], "未分配到合适的医生"); + Log::getInstance("queue-AssignDoctor")->info("订单退款"); + + $OrderService = new OrderService(); + $OrderService->orderRefund($order_inquiry['inquiry_no'], "未分配到合适的医生"); + + Log::getInstance("queue-AssignDoctor")->info("取消问诊订单"); - Log::getInstance("queue-AssignDoctor")->info("信息:取消问诊订单"); $save_data = array(); $save_data['inquiry_status'] = 7; $save_data['cancel_time'] = date("Y-m-d H:i:s", time()); @@ -164,7 +170,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; OrderInquiry::edit($params, $save_data); - Log::getInstance("queue-AssignDoctor")->info("成功:已退款"); + Log::getInstance("queue-AssignDoctor")->info("已退款"); Db::commit(); @@ -173,7 +179,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['order_inquiry_id']); $MessagePush->assignDoctorFail(); }catch (\Exception $e){ - Log::getInstance("queue-AssignDoctor")->error("错误:" . $e->getMessage()); + Log::getInstance("queue-AssignDoctor")->error($e->getMessage()); } return Result::ACK; @@ -183,9 +189,9 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage $res = $this->checkHandleNumber($data['order_inquiry_id']); if (!$res) { // 超出执行次数后,不再进行分配,按照结束分配时间,重新加入队列。 - Log::getInstance("queue-AssignDoctor")->info("信息:超出最大执行次数或检测错误"); + Log::getInstance("queue-AssignDoctor")->info("超出最大执行次数或检测错误"); - Log::getInstance("queue-AssignDoctor")->info("信息:重新加入延迟队列"); + Log::getInstance("queue-AssignDoctor")->info("重新加入延迟队列"); $queue_data = array(); $queue_data['order_inquiry_id'] = $data['order_inquiry_id']; @@ -199,7 +205,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage $res = $producer->produce($message); if (!$res) { Db::rollBack(); - Log::getInstance("queue-AssignDoctor")->error("错误:重新加入分配医生队列失败,重回队列"); + Log::getInstance("queue-AssignDoctor")->error("重新加入分配医生队列失败,重回队列"); return Result::REQUEUE; } @@ -208,14 +214,14 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage return Result::ACK; } - Log::getInstance("queue-AssignDoctor")->info("信息:分配医生"); + Log::getInstance("queue-AssignDoctor")->info("分配医生"); $UserDoctorService = new UserDoctorService(); $doctor_id = $UserDoctorService->getInquiryAssignDoctor($order_inquiry['inquiry_type'],$order_inquiry['patient_id'],$is_system_time_pass); if (empty($doctor_id)){ - Log::getInstance("queue-AssignDoctor")->info("信息:无合适医生"); + Log::getInstance("queue-AssignDoctor")->info("无合适医生"); Db::rollBack(); - Log::getInstance("queue-AssignDoctor")->info("信息:重新加入延迟队列"); + Log::getInstance("queue-AssignDoctor")->info("重新加入延迟队列"); $queue_data = array(); $queue_data['order_inquiry_id'] = $data['order_inquiry_id']; @@ -226,7 +232,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage $res = $producer->produce($message); if (!$res) { Db::rollBack(); - Log::getInstance("queue-AssignDoctor")->error("错误:重新加入分配医生队列失败,重回队列"); + Log::getInstance("queue-AssignDoctor")->error("重新加入分配医生队列失败,重回队列"); return Result::REQUEUE; } @@ -253,7 +259,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage $res = $producer->produce($message); if (!$res) { Db::rollBack(); - Log::getInstance("queue-AssignDoctor")->error("错误:加入未接诊取消订单延迟队列失败"); + Log::getInstance("queue-AssignDoctor")->error("加入未接诊取消订单延迟队列失败"); return Result::REQUEUE; } @@ -261,7 +267,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage Log::getInstance("queue-AssignDoctor")->info("成功"); } catch (\Throwable $e) { Db::rollBack(); - Log::getInstance("queue-AssignDoctor")->error("失败:" . $e->getMessage()); + Log::getInstance("queue-AssignDoctor")->error($e->getMessage()); return Result::REQUEUE; // 重回队列 } @@ -272,7 +278,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage $params['doctor_id'] = $doctor_id; $user_doctor = UserDoctor::getOne($params); if (empty($user_doctor)) { - Log::getInstance("queue-AssignDoctor")->error("错误:医生数据错误"); + Log::getInstance("queue-AssignDoctor")->error("医生数据错误"); return Result::ACK; } @@ -296,7 +302,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage $producer = $this->container->get(Producer::class); $producer->produce($message); }catch (\Throwable $e){ - Log::getInstance("queue-AssignDoctor")->error("发送消息异常错误:" . $e->getMessage()); + Log::getInstance("queue-AssignDoctor")->error($e->getMessage()); return Result::ACK; } diff --git a/app/Amqp/Consumer/AutoPharmacistCaVerifyDelayDirectConsumer.php b/app/Amqp/Consumer/AutoPharmacistCaVerifyDelayDirectConsumer.php index 60ee84e..edc5ca5 100644 --- a/app/Amqp/Consumer/AutoPharmacistCaVerifyDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AutoPharmacistCaVerifyDelayDirectConsumer.php @@ -163,7 +163,7 @@ class AutoPharmacistCaVerifyDelayDirectConsumer extends ConsumerMessage return Result::ACK; }catch (\Throwable $e){ Db::rollBack(); - Log::getInstance("queue-AutoPharmacistCaVerify")->info("错误:" . $e->getMessage()); + Log::getInstance("queue-AutoPharmacistCaVerify")->error("错误:" . $e->getMessage()); return Result::ACK; } } diff --git a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php index dff5531..b3eef4a 100644 --- a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace App\Amqp\Consumer; use App\Constants\HttpEnumCode; +use App\Model\Order; use App\Model\OrderInquiry; use App\Model\OrderInquiryCoupon; use App\Model\UserCoupon; @@ -12,7 +13,9 @@ use App\Model\UserDoctor; use App\Services\ImService; use App\Services\InquiryService; use App\Services\MessagePush; +use App\Services\OrderService; use App\Utils\Log; +use App\Utils\Utils; use Hyperf\Amqp\Message\ConsumerDelayedMessageTrait; use Hyperf\Amqp\Message\ProducerDelayedMessageTrait; use Hyperf\Amqp\Message\Type; @@ -46,12 +49,23 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage * @param $data * @param AMQPMessage $message * @return string - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function consumeMessage($data, AMQPMessage $message): string { - Log::getInstance()->error("开始执行 取消未接诊问诊订单 队列:" . json_encode($data, JSON_UNESCAPED_UNICODE)); + Log::getInstance("queue-CancelUnInquiryOrders")->info(json_encode($data, JSON_UNESCAPED_UNICODE)); + + try { + // 检测执行次数 + $Utils = new Utils(); + $redis_key = "orderRefund" . $data['order_no']; + $res = $Utils->checkHandleNumber($redis_key); + if (!$res) { + Log::getInstance("queue-CancelUnInquiryOrders")->error("超出最大执行次数或检测错误"); + } + }catch (\Throwable $e){ + Log::getInstance("queue-CancelUnInquiryOrders")->error($e->getMessage()); + return Result::ACK; + } Db::beginTransaction(); @@ -62,7 +76,7 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage $order_inquiry = OrderInquiry::getOne($params); if (empty($order_inquiry)){ Db::rollBack(); - Log::getInstance()->error("取消未接诊问诊订单失败:未找到对应问诊订单" ); + Log::getInstance("queue-CancelUnInquiryOrders")->error("未找到对应问诊订单" ); return Result::ACK; } @@ -70,66 +84,78 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage if ($order_inquiry['inquiry_status'] == 7) { // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) Db::rollBack(); - Log::getInstance()->error("取消未接诊问诊订单失败:订单已取消" ); + Log::getInstance("queue-CancelUnInquiryOrders")->info("订单已取消" ); return Result::ACK; } if ($order_inquiry['inquiry_status'] == 4) { // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) Db::rollBack(); - Log::getInstance()->error("取消未接诊问诊订单失败:订单已接诊" ); + Log::getInstance("queue-CancelUnInquiryOrders")->info("订单已接诊" ); return Result::ACK; } if ($order_inquiry['inquiry_status'] != 3) { // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) Db::rollBack(); - Log::getInstance()->error("取消未接诊问诊订单失败:订单状态非待接诊" ); + Log::getInstance("queue-CancelUnInquiryOrders")->error("订单状态非待接诊" ); return Result::DROP; } if (!in_array($order_inquiry['inquiry_refund_status'], [0, 4, 5])) { // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) Db::rollBack(); - Log::getInstance()->error("取消未接诊问诊订单失败:订单正在退款中" ); + Log::getInstance("queue-CancelUnInquiryOrders")->error("订单正在退款中" ); return Result::DROP; } + // 取消订单 + $order_data = array(); + $order_data['cancel_status'] = 1; + $order_data['cancel_time'] = date("Y-m-d H:i:s", time()); + $order_data['cancel_remarks'] = "医生未接诊"; + $order_data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_no'] = $order_inquiry['inquiry_no']; + Order::edit($params,$order_data); + // 取消问诊订单 - $save_data = array(); - $save_data['inquiry_status'] = 7; - $save_data['cancel_time'] = date("Y-m-d H:i:s", time()); - $save_data['cancel_reason'] = 1; // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) - $save_data['cancel_remarks'] = "医生未接诊"; // 取消订单备注 - $save_data['updated_at'] = date("Y-m-d H:i:s", time()); + $order_inquiry_data = array(); + $order_inquiry_data['inquiry_status'] = 7; + $order_inquiry_data['cancel_time'] = date("Y-m-d H:i:s", time()); + $order_inquiry_data['cancel_reason'] = 1; // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) + $order_inquiry_data['cancel_remarks'] = "医生未接诊"; // 取消订单备注 + $order_inquiry_data['updated_at'] = date("Y-m-d H:i:s", time()); $params = array(); $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - OrderInquiry::edit($params, $save_data); + OrderInquiry::edit($params, $order_inquiry_data); // 订单退款 if ($order_inquiry['inquiry_pay_status'] == 2) { // 检测问诊订单执行退款次数 - $InquiryService = new InquiryService(); - $res = $InquiryService->checkInquiryRefundCount($order_inquiry['order_inquiry_id']); - if (!$res){ + $redis_key = "orderRefund" . $order_inquiry['inquiry_no']; + $res = $Utils->checkHandleNumber($redis_key); + if (!$res) { Db::rollBack(); - Log::getInstance()->error("取消未接诊问诊订单失败:超出最大退款次数"); + Log::getInstance("queue-CancelUnInquiryOrders")->error("超出最大退款次数"); return Result::ACK; } - $InquiryService->inquiryRefund($order_inquiry['order_inquiry_id'], "医生未接诊"); + $OrderService = new OrderService(); + $OrderService->orderRefund($order_inquiry['inquiry_no'], "医生未接诊"); } Db::commit(); } catch (\Exception $e) { Db::rollBack(); - Log::getInstance()->error("取消未接诊问诊订单失败:" . $e->getMessage()); + Log::getInstance("queue-CancelUnInquiryOrders")->error($e->getMessage()); return Result::REQUEUE; } - Log::getInstance()->info("取消未接诊问诊订单成功"); - Log::getInstance()->info("取消未接诊问诊订单成功,发送IM消息"); + Log::getInstance("queue-CancelUnInquiryOrders")->error("取消未接诊问诊订单成功"); + Log::getInstance("queue-CancelUnInquiryOrders")->error("开始发送IM消息"); try { // 获取订单医生数据 @@ -137,7 +163,7 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage $params['doctor_id'] = $order_inquiry['doctor_id']; $user_doctor = UserDoctor::getOne($params); if (empty($user_doctor)) { - Log::getInstance()->info("取消未接诊问诊订单成功,发送IM消息失败:医生数据错误"); + Log::getInstance("queue-CancelUnInquiryOrders")->error("发送IM消息失败:医生数据错误"); return Result::ACK; } @@ -168,10 +194,10 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage } } - Log::getInstance()->info("取消未接诊问诊订单成功,发送消息成功"); + Log::getInstance("queue-CancelUnInquiryOrders")->info("发送IM消息成功"); } catch (\Exception $e) { // 验证失败 - Log::getInstance()->error("取消未接诊问诊订单成功,发送消息失败:" . $e->getMessage()); + Log::getInstance("queue-CancelUnInquiryOrders")->info("发送IM消息失败:" . $e->getMessage()); } return Result::ACK; diff --git a/app/Amqp/Consumer/CancelUnpayOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnpayOrdersDelayDirectConsumer.php index 70688f7..6a068e8 100644 --- a/app/Amqp/Consumer/CancelUnpayOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnpayOrdersDelayDirectConsumer.php @@ -16,13 +16,16 @@ use App\Model\UserCoupon; use App\Services\DetectionService; use App\Services\InquiryService; use App\Services\OrderProductService; +use App\Services\OrderService; use App\Utils\Log; +use App\Utils\Utils; use Hyperf\Amqp\Message\ConsumerDelayedMessageTrait; use Hyperf\Amqp\Message\ProducerDelayedMessageTrait; use Hyperf\Amqp\Result; use Hyperf\Amqp\Annotation\Consumer; use Hyperf\Amqp\Message\ConsumerMessage; use Hyperf\DbConnection\Db; +use Hyperf\Redis\Redis; use Hyperf\Snowflake\IdGeneratorInterface; use PhpAmqpLib\Message\AMQPMessage; use Hyperf\Amqp\Message\Type; @@ -49,49 +52,53 @@ class CancelUnpayOrdersDelayDirectConsumer extends ConsumerMessage public function consumeMessage($data, AMQPMessage $message): string { - Log::getInstance("queue-CancelUnpayOrders")->info("开始执行 取消未支付订单 队列:" . json_encode($data, JSON_UNESCAPED_UNICODE)); + Log::getInstance("queue-CancelUnpayOrders")->info(json_encode($data, JSON_UNESCAPED_UNICODE)); + + try { + $Utils = new Utils(); + $redis_key = "cancelUnpayOrders" . $data['order_no']; + $res = $Utils->checkHandleNumber($redis_key); + if (!$res) { + Log::getInstance("queue-CancelUnpayOrders")->error("超出最大执行次数或检测错误"); + } + + }catch (\Throwable $e){ + Log::getInstance("queue-CancelUnpayOrders")->error($e->getMessage()); + return Result::ACK; + } Db::beginTransaction(); try { - if ($data['order_type'] == 1) { - // 问诊订单取消 - $InquiryService = new InquiryService(); - $result = $InquiryService->cancelUnpayInquiryOrder($data['order_no'], 5, "支付超时"); + $OrderService = new OrderService(); + if ($data['order_type'] == 1) { + // 问诊订单 + $result = $OrderService->cancelUnpayOrder($data['order_no'],5,"支付超时"); } elseif ($data['order_type'] == 2) { - // 药品订单取消 - $OrderProductService = new OrderProductService(); - $result = $OrderProductService->cancelUnpayProductOrder($data['order_no'], 3, "支付超时"); - + // 药品订单 + $result = $OrderService->cancelUnpayOrder($data['order_no'],3,"支付超时"); } elseif ($data['order_type'] == 3) { - // 检测订单取消 - $DetectionService = new DetectionService(); - $result = $DetectionService->cancelUnpayDetectionOrder($data['order_no'], 3, "支付超时"); + // 检测订单 + $result = $OrderService->cancelUnpayOrder($data['order_no'],3,"支付超时"); } else { - Log::getInstance("queue-CancelUnpayOrders")->error("取消未支付订单失败:order_type类型错误"); + Log::getInstance("queue-CancelUnpayOrders")->error("order_type类型错误"); return Result::DROP;// 销毁 } - if ($result['status'] == 0) { + if ($result['status'] != 1) { Db::rollBack(); - Log::getInstance("queue-CancelUnpayOrders")->error("取消未支付订单失败:" . $result['message']); - return Result::DROP;// 销毁 - } elseif ($result['status'] == 2) { - Db::rollBack(); - Log::getInstance("queue-CancelUnpayOrders")->info("取消未支付订单成功:" . $result['message']); - return Result::ACK;// 销毁 + Log::getInstance("queue-CancelUnpayOrders")->error($result['message']); + return Result::ACK; } Db::commit(); - Log::getInstance("queue-CancelUnpayOrders")->info("取消未支付订单 队列执行成功"); + Log::getInstance("queue-CancelUnpayOrders")->info("成功"); return Result::ACK; } catch (\Throwable $e) { Db::rollBack(); - Log::getInstance("queue-CancelUnpayOrders")->error("取消未支付订单执行失败:" . $e->getMessage()); + Log::getInstance("queue-CancelUnpayOrders")->error($e->getMessage()); return Result::ACK; } } - - } diff --git a/app/Command/getPrescriptionOrderStatusCommand.php b/app/Command/getPrescriptionOrderStatusCommand.php index 6600bd4..ae56a5c 100644 --- a/app/Command/getPrescriptionOrderStatusCommand.php +++ b/app/Command/getPrescriptionOrderStatusCommand.php @@ -10,6 +10,7 @@ use App\Model\UserPatient; use App\Services\MessagePush; use App\Services\OrderPrescriptionService; use App\Services\OrderProductService; +use App\Services\OrderService; use App\Utils\Log; use Extend\Kuaidi100\Kuaidi; use Extend\Prescription\Prescription; @@ -102,8 +103,8 @@ class getPrescriptionOrderStatusCommand extends HyperfCommand } // 执行退款 - $OrderProductService = new OrderProductService(); - $OrderProductService->OrderProductRefund($item['order_product_id'],"订单退款"); + $OrderService = new OrderService(); + $OrderService->orderRefund($item['order_product_no'],"订单退款"); } if ($result['status'] == "CFD05"){ diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index c8624a1..0cd96ea 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -16,6 +16,7 @@ use App\Model\Coupon; use App\Model\DetectionProject; use App\Model\Hospital; use App\Model\MessageIm; +use App\Model\Order; use App\Model\OrderDetection; use App\Model\OrderDetectionCase; use App\Model\OrderDetectionRefund; @@ -46,6 +47,7 @@ use App\Services\ImService; use App\Services\InquiryService; use App\Services\MessagePush; use App\Services\OrderPrescriptionService; +use App\Services\OrderService; use App\Services\UserCouponService; use App\Services\UserService; use App\Utils\Log; @@ -88,19 +90,27 @@ class CallBackController extends AbstractController return $this->response->withStatus(500)->withBody(new SwooleStream(strval(json_encode(['code' => 'ERROR', 'message' => "问诊微信支付回调数据为空"], JSON_UNESCAPED_UNICODE)))); } - Log::getInstance()->info("问诊微信支付回调数据:" . json_encode($message->toArray(), JSON_UNESCAPED_UNICODE)); + Log::getInstance("CallBack-wxPayInquirySuccess")->info(json_encode($message->toArray(), JSON_UNESCAPED_UNICODE)); if (empty($message['out_trade_no'])) { - Log::getInstance()->info("问诊微信支付回调数据处理失败,缺少外部订单号"); + Log::getInstance("CallBack-wxPayInquirySuccess")->error("问诊微信支付回调数据处理失败,缺少外部订单号"); return $server->serve(); } + } catch (\Exception $e) { + // 验证失败 + Log::getInstance("CallBack-wxPayInquirySuccess")->error($e->getMessage()); + return $this->wxPayErrorReturn($e->getMessage()); + } + Db::beginTransaction(); + try { // 查询订单 $params = array(); $params['inquiry_no'] = $message['out_trade_no']; $order_inquiry = OrderInquiry::getOne($params); if (empty($order_inquiry)) { - Log::getInstance()->info("问诊微信支付回调数据处理失败,无订单数据"); + Db::rollBack(); + Log::getInstance("CallBack-wxPayInquirySuccess")->error("无订单数据"); return $server->serve(); } @@ -109,60 +119,89 @@ class CallBackController extends AbstractController $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $order_inquiry_case = OrderInquiryCase::getOne($params); if (empty($order_inquiry_case)){ - Log::getInstance()->info("问诊微信支付回调数据处理失败,患者病例错误"); + Db::rollBack(); + Log::getInstance("CallBack-wxPayInquirySuccess")->error("患者病例错误"); return $server->serve(); } // 验证订单状态 if ($order_inquiry['inquiry_status'] != 1) { // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - Log::getInstance()->info("问诊微信支付回调数据处理失败,订单状态当前为" . $order_inquiry['inquiry_status']); + Db::rollBack(); + Log::getInstance("CallBack-wxPayInquirySuccess")->error("订单状态当前为" . $order_inquiry['inquiry_status']); return $server->serve(); } // 支付状态无需验证,如第一次支付失败,会修改支付状态,再次支付时,会出现验证不通过的情况 - // 修改支付状态 - $data = array(); + // 处理支付状态 if ($message['trade_state'] == "SUCCESS") { // 支付成功 - $data['inquiry_pay_status'] = 2; - $data['pay_time'] = date('Y-m-d H:i:s', strtotime($message['success_time']));// 支付时间 + $pay_status = 2; + $pay_time = date('Y-m-d H:i:s', strtotime($message['success_time']));// 支付时间 if ($order_inquiry['inquiry_type'] == 1 || $order_inquiry['inquiry_type'] == 3) { // 专家-公益 - $data['inquiry_status'] = 3;// 3:待接诊 + $inquiry_status = 3;// 3:待接诊 } elseif ($order_inquiry['inquiry_type'] == 2 || $order_inquiry['inquiry_type'] == 4) { // 快速-购药 - $data['inquiry_status'] = 2;// 2:待分配 + $inquiry_status = 2;// 2:待分配 } } elseif ($message['trade_state'] == "CLOSED") { // 已关闭 - $data['inquiry_pay_status'] = 6; + $pay_status = 6; } elseif ($message['trade_state'] == "REVOKED") { // 已撤销(付款码支付) - $data['inquiry_pay_status'] = 7; + $pay_status = 7; } elseif ($message['trade_state'] == "USERPAYING") { // 用户支付中(付款码支付) - $data['inquiry_pay_status'] = 3; + $pay_status = 3; } elseif ($message['trade_state'] == "PAYERROR") { // 支付失败(其他原因,如银行返回失败) - $data['inquiry_pay_status'] = 4; + $pay_status = 4; + }else{ + Db::rollBack(); + return $server->serve(); } + // 修改问诊订单表 + $data = array(); + if (isset($inquiry_status)){ + $data['inquiry_status'] = $inquiry_status; + } + $data['inquiry_pay_status'] = $pay_status; + if (isset($pay_time)){ + $data['pay_time'] = $pay_time; + } $data['escrow_trade_no'] = $message['transaction_id']; $data['updated_at'] = date('Y-m-d H:i:s', time()); $params = array(); $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; OrderInquiry::edit($params, $data); + + // 修改订单表 + $data = array(); + $data['pay_status'] = $pay_status; + if (isset($pay_time)){ + $data['pay_time'] = $pay_time; + } + $data['escrow_trade_no'] = $message['transaction_id']; + $data['updated_at'] = date('Y-m-d H:i:s', time()); + + $params = array(); + $params['order_no'] = $order_inquiry['inquiry_no']; + Order::edit($params,$data); + + Db::commit(); } catch (\Exception $e) { // 验证失败 - Log::getInstance()->error("问诊微信支付回调数据处理失败:" . $e->getMessage()); + Db::rollBack(); + Log::getInstance("CallBack-wxPayInquirySuccess")->error($e->getMessage()); return $this->wxPayErrorReturn($e->getMessage()); } - Log::getInstance()->info("问诊微信支付回调数据处理成功"); - Log::getInstance()->info("问诊微信支付回调数据处理成功,开始分配医生/发送问诊消息"); + Log::getInstance("CallBack-wxPayInquirySuccess")->info("成功"); + Log::getInstance("CallBack-wxPayInquirySuccess")->info("分配医生/发送问诊消息"); try { if ($message['trade_state'] == "SUCCESS") { @@ -179,21 +218,21 @@ class CallBackController extends AbstractController $producer = $this->container->get(Producer::class); $res = $producer->produce($message); if (!$res) { - Log::getInstance()->info("加入分配医生队列失败"); + Log::getInstance("CallBack-wxPayInquirySuccess")->error("加入分配医生队列失败"); return $server->serve(); } - Log::getInstance()->info("加入分配医生队列成功"); + Log::getInstance("CallBack-wxPayInquirySuccess")->info("加入分配医生队列成功"); } elseif ($order_inquiry['inquiry_type'] == 1 || $order_inquiry['inquiry_type'] == 3) { // 专家-公益,发送im消息 - Log::getInstance()->info("开始发送im消息"); + Log::getInstance("CallBack-wxPayInquirySuccess")->info("开始发送im消息"); // 获取订单医生数据 $params = array(); $params['doctor_id'] = $order_inquiry['doctor_id']; $user_doctor = UserDoctor::getOne($params); if (empty($user_doctor)) { - Log::getInstance()->info("医生数据错误"); + Log::getInstance("CallBack-wxPayInquirySuccess")->error("医生数据错误"); return $server->serve(); } @@ -217,16 +256,16 @@ class CallBackController extends AbstractController $producer = $this->container->get(Producer::class); $producer->produce($message); - Log::getInstance()->info("发送im消息成功"); + Log::getInstance("CallBack-wxPayInquirySuccess")->info("发送im消息成功"); } } } catch (\Exception $e) { // 验证失败 - Log::getInstance()->error("问诊微信支付回调数据处理成功,分配医生/发送问诊消息失败:" . $e->getMessage()); + Log::getInstance("CallBack-wxPayInquirySuccess")->error("问诊微信支付回调数据处理成功,分配医生/发送问诊消息失败:" . $e->getMessage()); return $server->serve(); } - Log::getInstance()->info("问诊微信支付回调处理成功"); + Log::getInstance("CallBack-wxPayInquirySuccess")->info("问诊微信支付回调处理成功"); return $server->serve(); } @@ -240,8 +279,6 @@ class CallBackController extends AbstractController */ public function wxPayInquiryRefundCallBack(): ResponseInterface { - Db::beginTransaction(); - try { // 处理支付结果事件 $WechatPay = new WechatPay(1, 1); @@ -251,119 +288,73 @@ class CallBackController extends AbstractController // 获取解密消息 $message = $server->getDecryptedMessage(); if (empty($message)) { - Db::rollBack(); return $this->response->withStatus(500)->withBody(new SwooleStream(strval(json_encode(['code' => 'ERROR', 'message' => "回调数据为空"], JSON_UNESCAPED_UNICODE)))); } - Log::getInstance("CallBackController-wxPayInquiryRefundCallBack")->info("微信退款回调数据:" . json_encode($message->toArray(), JSON_UNESCAPED_UNICODE)); + Log::getInstance("CallBack-wxPayInquiryRefund")->info(json_encode($message->toArray(), JSON_UNESCAPED_UNICODE)); if (empty($message['out_trade_no'])) { - Log::getInstance("CallBackController-wxPayInquiryRefundCallBack")->info("微信退款回调数据错误"); + Log::getInstance("CallBack-wxPayInquiryRefund")->error("微信退款回调数据错误"); return $server->serve(); } + } catch (\Exception $e) { + // 验证失败 + Log::getInstance("CallBack-wxPayInquiryRefund")->error($e->getMessage()); + return $this->wxPayErrorReturn($e->getMessage()); + } + Db::beginTransaction(); + try { // 验证订单数据 $params = array(); $params['inquiry_no'] = $message['out_trade_no']; $order_inquiry = OrderInquiry::getOne($params); if (empty($order_inquiry)) { - Log::getInstance("CallBackController-wxPayInquiryRefundCallBack")->info("非法订单"); + Db::rollBack(); + Log::getInstance("CallBack-wxPayInquiryRefund")->error("非法订单"); return $server->serve(); } // 验证订单状态 if ($order_inquiry['inquiry_status'] == 1) { // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - Log::getInstance("CallBackController-wxPayInquiryRefundCallBack")->info("订单状态错误:当前为" . $order_inquiry['inquiry_status']); + Db::rollBack(); + Log::getInstance("CallBack-wxPayInquiryRefund")->error("订单状态错误:当前为" . $order_inquiry['inquiry_status']); return $server->serve(); } // 验证订单退款状态 if ($order_inquiry['inquiry_refund_status'] == 3) { // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) - Log::getInstance("CallBackController-wxPayInquiryRefundCallBack")->info("订单退款状态错误:当前为" . $order_inquiry['inquiry_refund_status']); + Db::rollBack(); + Log::getInstance("CallBack-wxPayInquiryRefund")->error("订单退款状态错误:当前为" . $order_inquiry['inquiry_refund_status']); return $server->serve(); } // 验证订单支付状态 if (in_array($order_inquiry['inquiry_pay_status'], [1, 3, 4, 5, 6, 7])) { // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - Log::getInstance("CallBackController-wxPayInquiryRefundCallBack")->info("订单支付状态错误:当前为" . $order_inquiry['inquiry_pay_status']); + Db::rollBack(); + Log::getInstance("CallBack-wxPayInquiryRefund")->error("订单支付状态错误:当前为" . $order_inquiry['inquiry_pay_status']); return $server->serve(); } - // 退款状态 - if ($message['refund_status'] == "SUCCESS") { - // 退款成功 - $inquiry_refund_status = 3; - } elseif ($message['refund_status'] == "CLOSED") { - // 退款关闭 - $inquiry_refund_status = 5; - } elseif ($message['refund_status'] == "ABNORMAL") { - // 退款异常 - $inquiry_refund_status = 6; - } - - if (empty($inquiry_refund_status)) { - // 错误,无退款状态 - Log::getInstance("CallBackController-wxPayInquiryRefundCallBack")->info("订单支付状态错误:未接收到退款状态"); - return $this->wxPayErrorReturn("退款状态错误"); - } - - // 修改订单 - $data = array(); - $data['inquiry_refund_status'] = $inquiry_refund_status; - - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - OrderInquiry::edit($params, $data); - - // 修改退款订单 - $data = array(); - $data['inquiry_refund_status'] = $inquiry_refund_status; - $data['success_time'] = $message['success_time']; - - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - OrderInquiryRefund::edit($params, $data); - - // 恢复优惠卷 - if ($inquiry_refund_status == 3) { - if (!empty($order_inquiry['coupon_amount_total']) && $order_inquiry['coupon_amount_total'] > 0) { - // 获取该订单全部优惠卷数据 - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $order_inquiry_coupons = OrderInquiryCoupon::getList($params); - if (!empty($order_inquiry_coupons)){ - $userCouponService = new UserCouponService(); - foreach ($order_inquiry_coupons as $order_inquiry_coupon){ - // 退还优惠卷 - $userCouponService->returnUserCoupon($order_inquiry_coupon['user_coupon_id']); - - try { - // 发送站内消息-优惠卷退还 - $MessagePush = new MessagePush($order_inquiry['user_id']); - $MessagePush->patientRefundCoupon($order_inquiry_coupon['coupon_name']); - }catch (\Throwable $e){ - Log::getInstance("CallBackController-wxPayInquiryRefundCallBack")->error("推送消息失败:" . $e->getMessage()); - } - } - } - } - } + // 处理退款回调结果 + $OrderService = new OrderService(); + $OrderService->orderRefundResult($order_inquiry['inquiry_no'],$message['refund_status'],$message['success_time']); Db::commit(); } catch (\Exception $e) { // 验证失败 Db::rollBack(); - Log::getInstance()->error("微信支付回调数据验证失败:" . $e->getMessage()); + Log::getInstance("CallBack-wxPayInquiryRefund")->error("微信支付回调数据验证失败:" . $e->getMessage()); return $this->wxPayErrorReturn($e->getMessage()); } - Log::getInstance()->info("微信退款回调处理成功,推送消息"); + Log::getInstance("CallBack-wxPayInquiryRefund")->info("微信退款回调处理成功,推送消息"); // 发送推送消息 - if ($inquiry_refund_status == 3) { + if ($message['refund_status'] == "SUCCESS") { try { // 发送站内、订阅、短信消息-问诊服务退款成功 $MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['order_inquiry_id']); @@ -372,7 +363,7 @@ class CallBackController extends AbstractController $MessagePush->refundInquirySuccess($order_inquiry['cancel_reason']); } catch (\Exception $e) { // 验证失败 - Log::getInstance()->error("微信退款回调处理成功,推送消息失败:" . $e->getMessage()); + Log::getInstance("CallBack-wxPayInquiryRefund")->error("微信退款回调处理成功,推送消息失败:" . $e->getMessage()); return $server->serve(); } } @@ -399,19 +390,19 @@ class CallBackController extends AbstractController return $this->response->withStatus(500)->withBody(new SwooleStream(strval(json_encode(['code' => 'ERROR', 'message' => "药品微信支付回调数据为空"], JSON_UNESCAPED_UNICODE)))); } - Log::getInstance()->info("药品微信支付回调数据:" . json_encode($message->toArray(), JSON_UNESCAPED_UNICODE)); + Log::getInstance("CallBack-wxPayProductSuccess")->info(json_encode($message->toArray(), JSON_UNESCAPED_UNICODE)); if (empty($message['out_trade_no'])) { - Log::getInstance()->info("药品微信支付回调数据处理失败,缺少外部订单号"); + Log::getInstance("CallBack-wxPayProductSuccess")->error("缺少外部订单号"); return $server->serve(); } } catch (\Exception $e) { // 验证失败 - Log::getInstance()->error("药品微信支付回调数据处理失败:" . $e->getMessage()); + Log::getInstance("CallBack-wxPayProductSuccess")->error($e->getMessage()); return $this->wxPayErrorReturn($e->getMessage()); } - Log::getInstance()->info("药品微信支付回调数据验证成功,执行数据库操作"); + Log::getInstance("CallBack-wxPayProductSuccess")->info("药品微信支付回调数据验证成功,执行数据库操作"); Db::beginTransaction(); @@ -422,7 +413,7 @@ class CallBackController extends AbstractController $order_product = OrderProduct::getOne($params); if (empty($order_product)) { Db::rollBack(); - Log::getInstance()->info("药品微信支付回调数据处理失败,无订单数据"); + Log::getInstance("CallBack-wxPayProductSuccess")->error("无订单数据"); return $server->serve(); } @@ -430,34 +421,44 @@ class CallBackController extends AbstractController if ($order_product['order_product_status'] != 1) { Db::rollBack(); // 订单状态(1:待支付 2:待发货 3:已发货 4:已签收 5:已取消) - Log::getInstance()->info("药品微信支付回调数据处理失败,订单状态当前为" . $order_product['order_product_status']); + Log::getInstance("CallBack-wxPayProductSuccess")->error("药品微信支付回调数据处理失败,订单状态当前为" . $order_product['order_product_status']); return $server->serve(); } // 支付状态无需验证,如第一次支付失败,会修改支付状态,再次支付时,会出现验证不通过的情况 - // 修改支付状态 - $data = array(); + // 处理支付状态 if ($message['trade_state'] == "SUCCESS") { // 支付成功 - $data['order_product_status'] = 2; - $data['pay_status'] = 2;// 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - $data['pay_time'] = date('Y-m-d H:i:s', strtotime($message['success_time']));// 支付时间 - + $order_product_status = 2; + $pay_status = 2;// 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + $pay_time = date('Y-m-d H:i:s', strtotime($message['success_time']));// 支付时间 } elseif ($message['trade_state'] == "CLOSED") { // 已关闭 - $data['pay_status'] = 6; + $pay_status = 6; } elseif ($message['trade_state'] == "REVOKED") { // 已撤销(付款码支付) - $data['pay_status'] = 7; + $pay_status = 7; } elseif ($message['trade_state'] == "USERPAYING") { // 用户支付中(付款码支付) - $data['pay_status'] = 3; + $pay_status = 3; } elseif ($message['trade_state'] == "PAYERROR") { // 支付失败(其他原因,如银行返回失败) - $data['pay_status'] = 4; + $pay_status = 4; + } else { + Db::rollBack(); + return $server->serve(); } + // 修改药品订单表 + $data = array(); + if (isset($order_product_status)){ + $data['order_product_status'] = $order_product_status; + } + if (isset($pay_time)){ + $data['pay_time'] = $pay_time; + } + $data['pay_status'] = $pay_status; $data['escrow_trade_no'] = $message['transaction_id']; $data['updated_at'] = date('Y-m-d H:i:s', time()); @@ -465,24 +466,37 @@ class CallBackController extends AbstractController $params['order_product_id'] = $order_product['order_product_id']; OrderProduct::edit($params, $data); + // 修改订单表 + $data = array(); + $data['pay_status'] = $pay_status; + if (isset($pay_time)){ + $data['pay_time'] = $pay_time; + } + $data['escrow_trade_no'] = $message['transaction_id']; + $data['updated_at'] = date('Y-m-d H:i:s', time()); + + $params = array(); + $params['order_no'] = $order_product['order_product_no']; + Order::edit($params,$data); + // 获取订单商品订单列表 $params = array(); $params['order_product_id'] = $order_product['order_product_id']; $order_product_item = OrderProductItem::getList($params); if (empty($order_product_item)) { Db::rollBack(); - Log::getInstance()->info("药品微信支付回调数据处理失败,未查询到对应订单商品订单列表"); + Log::getInstance("CallBack-wxPayProductSuccess")->error("未查询到对应订单商品订单列表"); return $server->serve(); } Db::commit(); } catch (\Exception $e) { Db::rollBack(); - Log::getInstance()->error("药品微信支付回调数据处理失败:" . $e->getMessage()); + Log::getInstance("CallBack-wxPayProductSuccess")->error("药品微信支付回调数据处理失败:" . $e->getMessage()); return $this->wxPayErrorReturn($e->getMessage()); } - Log::getInstance()->error("药品微信支付回调数据处理成功"); + Log::getInstance("CallBack-wxPayProductSuccess")->error("药品微信支付回调数据处理成功"); try { // 再次发放优惠卷数据 @@ -514,10 +528,10 @@ class CallBackController extends AbstractController $producer = $this->container->get(Producer::class); $res = $producer->produce($message); if (!$res) { - Log::getInstance()->error("再次发放优惠卷失败"); + Log::getInstance("CallBack-wxPayProductSuccess")->error("再次发放优惠卷失败"); } - Log::getInstance()->info("再次发放优惠卷成功"); + Log::getInstance("CallBack-wxPayProductSuccess")->info("再次发放优惠卷成功"); } } } @@ -525,7 +539,7 @@ class CallBackController extends AbstractController } } }catch (\Throwable $e){ - Log::getInstance()->error("药品微信支付回调数据处理失败:" . $e->getMessage()); + Log::getInstance("CallBack-wxPayProductSuccess")->error("药品微信支付回调数据处理失败:" . $e->getMessage()); } return $server->serve(); } @@ -539,8 +553,6 @@ class CallBackController extends AbstractController */ public function wxPayProductRefundCallBack(): ResponseInterface { - Db::beginTransaction(); - try { // 处理支付结果事件 $WechatPay = new WechatPay(1, 2); @@ -554,20 +566,27 @@ class CallBackController extends AbstractController return $this->response->withStatus(500)->withBody(new SwooleStream(strval(json_encode(['code' => 'ERROR', 'message' => "回调数据为空"], JSON_UNESCAPED_UNICODE)))); } - Log::getInstance("CallBackController-wxPayProductRefundCallBack")->info("微信退款回调数据:" . json_encode($message->toArray(), JSON_UNESCAPED_UNICODE)); + Log::getInstance("CallBack-wxPayProductRefund")->info(json_encode($message->toArray(), JSON_UNESCAPED_UNICODE)); if (empty($message['out_trade_no'])) { - Log::getInstance("CallBackController-wxPayProductRefundCallBack")->info("药品微信退款回调数据处理失败,缺少外部订单号"); + Log::getInstance("CallBack-wxPayProductRefund")->error("缺少外部订单号"); return $server->serve(); } + } catch (\Exception $e) { + // 验证失败 + Log::getInstance("CallBack-wxPayProductRefund")->error($e->getMessage()); + return $this->wxPayErrorReturn($e->getMessage()); + } + Db::beginTransaction(); + try { // 查询药品订单 $params = array(); $params['order_product_no'] = $message['out_trade_no']; $order_product = OrderProduct::getOne($params); if (empty($order_product)) { Db::rollBack(); - Log::getInstance("CallBackController-wxPayProductRefundCallBack")->info("药品微信退款回调数据处理失败,无订单数据"); + Log::getInstance("CallBack-wxPayProductRefund")->error("无订单数据"); return $server->serve(); } @@ -577,100 +596,47 @@ class CallBackController extends AbstractController $user_patient = UserPatient::getOne($params); if (empty($user_patient)) { Db::rollBack(); - Log::getInstance("CallBackController-wxPayProductRefundCallBack")->info("药品微信退款回调数据处理失败,无患者数据"); + Log::getInstance("CallBack-wxPayProductRefund")->info("无患者数据"); return $server->serve(); } // 验证订单状态 if ($order_product['order_product_status'] == 1) { // 订单状态(1:待支付 2:待发货 3:已发货 4:已签收 5:已取消) - Log::getInstance("CallBackController-wxPayProductRefundCallBack")->info("药品微信退款回调数据处理失败,订单状态错误:当前为" . $order_product['order_product_status']); + Db::rollBack(); + Log::getInstance("CallBack-wxPayProductRefund")->error("药品微信退款回调数据处理失败,订单状态错误:当前为" . $order_product['order_product_status']); return $server->serve(); } // 验证订单退款状态 if ($order_product['refund_status'] == 3) { // 商品订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) - Log::getInstance("CallBackController-wxPayProductRefundCallBack")->info("药品微信退款回调数据处理失败,订单退款状态为" . $order_product['refund_status']); + Db::rollBack(); + Log::getInstance("CallBack-wxPayProductRefund")->error("药品微信退款回调数据处理失败,订单退款状态为" . $order_product['refund_status']); return $server->serve(); } // 验证订单支付状态 if (in_array($order_product['pay_status'], [1, 3, 4, 5, 6, 7])) { // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - Log::getInstance("CallBackController-wxPayProductRefundCallBack")->error("药品微信退款回调数据处理失败:订单未支付"); + Db::rollBack(); + Log::getInstance("CallBack-wxPayProductRefund")->error("订单未支付"); return $server->serve(); } - // 退款状态 - if ($message['refund_status'] == "SUCCESS") { - // 退款成功 - $refund_status = 3; - } elseif ($message['refund_status'] == "CLOSED") { - // 退款关闭 - $refund_status = 5; - } elseif ($message['refund_status'] == "ABNORMAL") { - // 退款异常 - $refund_status = 6; - } - - if (empty($refund_status)) { - // 错误,无退款状态 - Log::getInstance("CallBackController-wxPayProductRefundCallBack")->error("药品微信退款回调数据处理失败:订单未支付"); - return $this->wxPayErrorReturn("退款状态错误"); - } - - // 修改订单 - $data = array(); - $data['refund_status'] = $refund_status; - - $params = array(); - $params['order_product_id'] = $order_product['order_product_id']; - OrderProduct::edit($params, $data); - - // 修改退款订单 - $data = array(); - $data['product_refund_status'] = $refund_status; - $data['success_time'] = $message['success_time']; - - $params = array(); - $params['order_product_id'] = $order_product['order_product_id']; - OrderProductRefund::edit($params, $data); - - // 恢复优惠卷 - if ($refund_status == 3) { - if (!empty($order_product['coupon_amount_total']) && $order_product['coupon_amount_total'] > 0) { - // 获取该订单全部优惠卷数据 - $params = array(); - $params['order_product_id'] = $order_product['order_product_id']; - $order_product_coupons = OrderProductCoupon::getList($params); - if (!empty($order_product_coupons)){ - $userCouponService = new UserCouponService(); - foreach ($order_product_coupons as $order_product_coupon){ - // 退还优惠卷 - $userCouponService->returnUserCoupon($order_product_coupon['user_coupon_id']); - - // 发送站内消息-优惠卷退还 - try { - $MessagePush = new MessagePush($user_patient['user_id']); - $MessagePush->patientRefundCoupon($order_product_coupon['coupon_name']); - }catch (\Throwable $e){ - Log::getInstance("CallBackController-wxPayProductRefundCallBack")->error("推送消息失败:" . $e->getMessage()); - } - } - } - } - } + // 处理退款回调结果 + $OrderService = new OrderService(); + $OrderService->orderRefundResult($order_product['order_product_no'],$message['refund_status'],$message['success_time']); Db::commit(); } catch (\Exception $e) { // 验证失败 Db::rollBack(); - Log::getInstance("CallBackController-wxPayProductRefundCallBack")->error("药品微信退款回调数据处理失败:" . $e->getMessage()); + Log::getInstance("CallBack-wxPayProductRefund")->error("药品微信退款回调数据处理失败:" . $e->getMessage()); return $this->wxPayErrorReturn($e->getMessage()); } - Log::getInstance("CallBackController-wxPayProductRefundCallBack")->info("药品微信退款回调数据处理成功"); + Log::getInstance("CallBack-wxPayProductRefund")->info("药品微信退款回调数据处理成功"); // 发送推送消息 try { @@ -685,11 +651,10 @@ class CallBackController extends AbstractController } } catch (\Exception $e) { // 验证失败 - Log::getInstance("CallBackController-wxPayProductRefundCallBack")->error("微信退款回调处理成功,推送消息失败:" . $e->getMessage()); + Log::getInstance("CallBack-wxPayProductRefund")->error("微信退款回调处理成功,推送消息失败:" . $e->getMessage()); return $server->serve(); } - // 告知处方平台 return $server->serve(); } @@ -1159,54 +1124,75 @@ class CallBackController extends AbstractController return $this->response->withStatus(500)->withBody(new SwooleStream(strval(json_encode(['code' => 'ERROR', 'message' => "问诊微信支付回调数据为空"], JSON_UNESCAPED_UNICODE)))); } - Log::getInstance()->info("检测微信支付回调数据:" . json_encode($message->toArray(), JSON_UNESCAPED_UNICODE)); + Log::getInstance("CallBack-xPayDetectionSuccess")->info(json_encode($message->toArray(), JSON_UNESCAPED_UNICODE)); if (empty($message['out_trade_no'])) { - Log::getInstance()->info("检测微信支付回调数据处理失败,缺少外部订单号"); + Log::getInstance("CallBack-xPayDetectionSuccess")->error("缺少外部订单号"); return $server->serve(); } + }catch (\Throwable $e){ + // 验证失败 + Log::getInstance("CallBack-xPayDetectionSuccess")->error($e->getMessage()); + return $this->wxPayErrorReturn($e->getMessage()); + } + Db::beginTransaction(); + try { // 查询订单 $params = array(); $params['detection_no'] = $message['out_trade_no']; $order_detection = OrderDetection::getOne($params); if (empty($order_detection)) { - Log::getInstance()->info("检测微信支付回调数据处理失败,无订单数据"); + Db::rollBack(); + Log::getInstance("CallBack-xPayDetectionSuccess")->info("无订单数据"); return $server->serve(); } // 验证订单状态 if ($order_detection['detection_status'] != 1) { // 检测订单状态(1:待支付 2:待绑定 3:检测中 4:检测完成 5:已取消) - Log::getInstance()->info("检测微信支付回调数据处理失败,订单状态当前为" . $order_detection['detection_status']); + Db::rollBack(); + Log::getInstance("CallBack-xPayDetectionSuccess")->error("检测微信支付回调数据处理失败,订单状态当前为" . $order_detection['detection_status']); return $server->serve(); } // 支付状态无需验证,如第一次支付失败,会修改支付状态,再次支付时,会出现验证不通过的情况 - // 修改支付状态 - $data = array(); + // 处理支付状态 if ($message['trade_state'] == "SUCCESS") { // 支付成功 - $data['detection_pay_status'] = 2; - $data['pay_time'] = date('Y-m-d H:i:s', strtotime($message['success_time']));// 支付时间 - $data['detection_status'] = 2;// 2:待绑定 + $pay_status = 2; + $pay_time = date('Y-m-d H:i:s', strtotime($message['success_time']));// 支付时间 + $detection_status = 2;// 2:待绑定 if (empty($message['amount'])){ - Log::getInstance()->error("检测微信支付回调数据处理失败:无支付金额"); - return $this->wxPayErrorReturn("检测微信支付回调数据处理失败:无支付金额"); + Db::rollBack(); + Log::getInstance("CallBack-xPayDetectionSuccess")->error("无支付金额"); + return $this->wxPayErrorReturn("无支付金额"); } } elseif ($message['trade_state'] == "CLOSED") { // 已关闭 - $data['detection_pay_status'] = 6; + $pay_status = 6; } elseif ($message['trade_state'] == "REVOKED") { // 已撤销(付款码支付) - $data['detection_pay_status'] = 7; + $pay_status = 7; } elseif ($message['trade_state'] == "USERPAYING") { // 用户支付中(付款码支付) - $data['detection_pay_status'] = 3; + $pay_status = 3; } elseif ($message['trade_state'] == "PAYERROR") { // 支付失败(其他原因,如银行返回失败) - $data['detection_pay_status'] = 4; + $pay_status = 4; + } else { + Db::rollBack(); + return $server->serve(); + } + + $data = array(); + $data['detection_pay_status'] = $pay_status; + if (isset($detection_status)){ + $data['detection_status'] = $detection_status; + } + if (isset($pay_time)){ + $data['pay_time'] = $pay_time; } $data['escrow_trade_no'] = $message['transaction_id']; @@ -1215,13 +1201,29 @@ class CallBackController extends AbstractController $params = array(); $params['order_detection_id'] = $order_detection['order_detection_id']; OrderDetection::editOrderDetection($params, $data); + + // 修改订单表 + $data = array(); + $data['pay_status'] = $pay_status; + if (isset($pay_time)){ + $data['pay_time'] = $pay_time; + } + $data['escrow_trade_no'] = $message['transaction_id']; + $data['updated_at'] = date('Y-m-d H:i:s', time()); + + $params = array(); + $params['order_no'] = $order_detection['detection_no']; + Order::edit($params,$data); + + Db::commit(); } catch (\Exception $e) { // 验证失败 - Log::getInstance()->error("问诊微信支付回调数据处理失败:" . $e->getMessage()); + Db::rollBack(); + Log::getInstance("CallBack-xPayDetectionSuccess")->error("问诊微信支付回调数据处理失败:" . $e->getMessage()); return $this->wxPayErrorReturn($e->getMessage()); } - Log::getInstance()->info("检测微信支付回调处理成功"); + Log::getInstance("CallBack-xPayDetectionSuccess")->info("检测微信支付回调处理成功"); return $server->serve(); } @@ -1235,8 +1237,6 @@ class CallBackController extends AbstractController */ public function wxPayDetectionRefundCallBack(): ResponseInterface { - Db::beginTransaction(); - try { // 处理支付结果事件 $WechatPay = new WechatPay(1, 1); @@ -1250,87 +1250,67 @@ class CallBackController extends AbstractController return $this->response->withStatus(500)->withBody(new SwooleStream(strval(json_encode(['code' => 'ERROR', 'message' => "回调数据为空"], JSON_UNESCAPED_UNICODE)))); } - Log::getInstance()->info("微信退款回调数据:" . json_encode($message->toArray(), JSON_UNESCAPED_UNICODE)); + Log::getInstance("CallBack-wxPayDetectionRefund")->info(json_encode($message->toArray(), JSON_UNESCAPED_UNICODE)); if (empty($message['out_trade_no'])) { - Log::getInstance()->info("微信退款回调数据错误"); + Log::getInstance("CallBack-wxPayDetectionRefund")->error("缺少外部订单号"); return $server->serve(); } + } catch (\Exception $e) { + // 验证失败 + Log::getInstance("CallBack-wxPayDetectionRefund")->error($e->getMessage()); + return $this->wxPayErrorReturn($e->getMessage()); + } + Db::beginTransaction(); + try { // 验证订单数据 $params = array(); $params['detection_no'] = $message['out_trade_no']; $order_detection = OrderDetection::getOne($params); if (empty($order_detection)) { - Log::getInstance()->info("非法订单"); + Db::rollBack(); + Log::getInstance("CallBack-wxPayDetectionRefund")->error("非法订单"); return $server->serve(); } // 验证订单状态 if ($order_detection['detection_status'] == 1) { // 检测订单状态(1:待支付 2:待绑定 3:检测中 4:检测完成 5:已取消) - Log::getInstance()->info("订单状态错误:当前为" . $order_detection['detection_status']); + Db::rollBack(); + Log::getInstance("CallBack-wxPayDetectionRefund")->error("订单状态错误:当前为" . $order_detection['detection_status']); return $server->serve(); } // 验证订单退款状态 if ($order_detection['detection_refund_status'] == 3) { // 检测订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) - Log::getInstance()->info("订单退款状态错误:当前为" . $order_detection['detection_refund_status']); + Db::rollBack(); + Log::getInstance("CallBack-wxPayDetectionRefund")->error("订单退款状态错误:当前为" . $order_detection['detection_refund_status']); return $server->serve(); } // 验证订单支付状态 if (in_array($order_detection['detection_pay_status'], [1, 3, 4, 5, 6, 7])) { // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - Log::getInstance()->info("订单支付状态错误:当前为" . $order_detection['detection_pay_status']); + Db::rollBack(); + Log::getInstance("CallBack-wxPayDetectionRefund")->error("订单支付状态错误:当前为" . $order_detection['detection_pay_status']); return $server->serve(); } - // 退款状态 - if ($message['refund_status'] == "SUCCESS") { - // 退款成功 - $detection_refund_status = 3; - } elseif ($message['refund_status'] == "CLOSED") { - // 退款关闭 - $detection_refund_status = 5; - } elseif ($message['refund_status'] == "ABNORMAL") { - // 退款异常 - $detection_refund_status = 6; - } - - if (empty($detection_refund_status)) { - // 错误,无退款状态 - Log::getInstance()->error("队列执行失败原因:订单未支付"); - return $this->wxPayErrorReturn("退款状态错误"); - } - - // 修改订单 - $data = array(); - $data['detection_refund_status'] = $detection_refund_status; - - $params = array(); - $params['order_detection_id'] = $order_detection['order_detection_id']; - OrderDetection::editOrderDetection($params, $data); - - // 修改退款订单 - $data = array(); - $data['detection_refund_status'] = $detection_refund_status; - $data['success_time'] = $message['success_time']; - - $params = array(); - $params['order_detection_id'] = $order_detection['order_detection_id']; - OrderDetectionRefund::edit($params, $data); + // 处理退款回调结果 + $OrderService = new OrderService(); + $OrderService->orderRefundResult($order_detection['detection_no'],$message['refund_status'],$message['success_time']); Db::commit(); } catch (\Exception $e) { // 验证失败 Db::rollBack(); - Log::getInstance()->error("微信支付回调数据验证失败:" . $e->getMessage()); + Log::getInstance("CallBack-wxPayDetectionRefund")->error("微信支付回调数据验证失败:" . $e->getMessage()); return $this->wxPayErrorReturn($e->getMessage()); } - Log::getInstance()->info("微信退款回调处理成功"); + Log::getInstance("CallBack-wxPayDetectionRefund")->info("微信退款回调处理成功"); return $server->serve(); } diff --git a/app/Controller/PatientOrderController.php b/app/Controller/PatientOrderController.php index 7a491e4..85414de 100644 --- a/app/Controller/PatientOrderController.php +++ b/app/Controller/PatientOrderController.php @@ -70,8 +70,6 @@ class PatientOrderController extends AbstractController /** * 问诊订单取消支付 * @return ResponseInterface - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function putPatientInquiryOrderCancelPay(): ResponseInterface { diff --git a/app/Controller/TestController.php b/app/Controller/TestController.php index d039773..f2851a2 100644 --- a/app/Controller/TestController.php +++ b/app/Controller/TestController.php @@ -281,22 +281,6 @@ class TestController extends AbstractController dump($result); } - // 退款 - public function refund(){ - $out_trade_no = $this->request->input('out_trade_no'); - $params = array(); - $params['order_inquiry_id'] = $out_trade_no; - $order_inquiry = OrderInquiry::getOne($params); - if (empty($order_inquiry)){ - return fail(); - } - - // 需退款 - $inquiryService = new InquiryService(); - $inquiryService->inquiryRefund($out_trade_no, "取消问诊"); - return success(); - } - // 获取云证书-线上 public function test_14(){ $CaOnline = new CaOnline(); diff --git a/app/Model/DoctorIncomeRecord.php b/app/Model/DoctorIncomeRecord.php new file mode 100644 index 0000000..62e23a5 --- /dev/null +++ b/app/Model/DoctorIncomeRecord.php @@ -0,0 +1,81 @@ +first($fields); + } + + /** + * 多条 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params, array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + + /** + * 新增 + * @param array $data + * @return DoctorIncomeRecord|\Hyperf\Database\Model\Model + */ + public static function addDoctorIncomeRecord(array $data): \Hyperf\Database\Model\Model|DoctorIncomeRecord + { + return self::create($data); + } + + /** + * 修改 + * @param array $params + * @param array $data + * @return int + */ + public static function edit(array $params = [], array $data = []): int + { + return self::where($params)->update($data); + } + +} diff --git a/app/Model/Order.php b/app/Model/Order.php new file mode 100644 index 0000000..0a5002c --- /dev/null +++ b/app/Model/Order.php @@ -0,0 +1,95 @@ +first($fields); + } + + /** + * 多条 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params, array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + + /** + * 新增 + * @param array $data + * @return Order|\Hyperf\Database\Model\Model + */ + public static function addOrder(array $data): \Hyperf\Database\Model\Model|Order + { + return self::create($data); + } + + /** + * 修改 + * @param array $params + * @param array $data + * @return int + */ + public static function edit(array $params = [], array $data = []): int + { + return self::where($params)->update($data); + } + +} diff --git a/app/Model/OrderCoupon.php b/app/Model/OrderCoupon.php new file mode 100644 index 0000000..47bd0f9 --- /dev/null +++ b/app/Model/OrderCoupon.php @@ -0,0 +1,80 @@ +first($fields); + } + + /** + * 多条 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params, array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + + /** + * 新增 + * @param array $data + * @return OrderCoupon|\Hyperf\Database\Model\Model + */ + public static function addOrderCoupon(array $data): \Hyperf\Database\Model\Model|OrderCoupon + { + return self::create($data); + } + + /** + * 修改 + * @param array $params + * @param array $data + * @return int + */ + public static function edit(array $params = [], array $data = []): int + { + return self::where($params)->update($data); + } +} diff --git a/app/Model/OrderDetection.php b/app/Model/OrderDetection.php index cae0655..a2393d9 100644 --- a/app/Model/OrderDetection.php +++ b/app/Model/OrderDetection.php @@ -12,6 +12,7 @@ use Hyperf\Snowflake\Concern\Snowflake; /** * @property int $order_detection_id 主键id + * @property int $order_id 订单id * @property int $user_id 用户id-患者 * @property int $patient_id 患者id * @property int $doctor_id 医生id @@ -58,7 +59,7 @@ class OrderDetection extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['order_detection_id', 'user_id', 'patient_id', 'doctor_id', 'family_id', 'detection_project_id', 'purpose_id', 'detection_organ_id', 'order_inquiry_id', 'detection_status', 'is_delete', 'detection_refund_status', 'detection_pay_channel', 'detection_pay_status', 'detection_no', 'escrow_trade_no', 'amount_total', 'coupon_amount_total', 'payment_amount_total', 'pay_time', 'cancel_time', 'cancel_reason', 'cancel_remarks', 'patient_name', 'patient_name_mask', 'patient_sex', 'patient_age', 'detection_bar_code', 'detection_pic', 'detection_time', 'detection_result_pdf', 'detection_result_date', 'created_at', 'updated_at']; + protected array $fillable = ['order_detection_id', 'order_id', 'user_id', 'patient_id', 'doctor_id', 'family_id', 'detection_project_id', 'purpose_id', 'detection_organ_id', 'order_inquiry_id', 'detection_status', 'is_delete', 'detection_refund_status', 'detection_pay_channel', 'detection_pay_status', 'detection_no', 'escrow_trade_no', 'amount_total', 'coupon_amount_total', 'payment_amount_total', 'pay_time', 'cancel_time', 'cancel_reason', 'cancel_remarks', 'patient_name', 'patient_name_mask', 'patient_sex', 'patient_age', 'detection_bar_code', 'detection_pic', 'detection_time', 'detection_result_pdf', 'detection_result_date', 'created_at', 'updated_at']; protected string $primaryKey = "order_detection_id"; diff --git a/app/Model/OrderInquiry.php b/app/Model/OrderInquiry.php index df8bb4b..ff96fe8 100644 --- a/app/Model/OrderInquiry.php +++ b/app/Model/OrderInquiry.php @@ -13,6 +13,7 @@ use Hyperf\Snowflake\Concern\Snowflake; /** * @property int $order_inquiry_id 主键id + * @property int $order_id 订单id * @property int $user_id 用户id-患者 * @property int $patient_id 患者id * @property int $doctor_id 医生id(未分配时为null) @@ -63,7 +64,7 @@ class OrderInquiry extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['order_inquiry_id', 'user_id', 'patient_id', 'doctor_id', 'family_id', 'inquiry_type', 'inquiry_mode', 'inquiry_status', 'is_delete', 'inquiry_refund_status', 'inquiry_pay_channel', 'inquiry_pay_status', 'inquiry_no', 'escrow_trade_no', 'amount_total', 'coupon_amount_total', 'payment_amount_total', 'pay_time', 'reception_time', 'complete_time', 'finish_time', 'statistics_status', 'statistics_time', 'is_withdrawal', 'withdrawal_time', 'cancel_time', 'cancel_reason', 'cancel_remarks', 'times_number', 'duration', 'patient_name', 'patient_name_mask', 'patient_sex', 'patient_age', 'created_at', 'updated_at']; + protected array $fillable = ['order_inquiry_id', 'order_id', 'user_id', 'patient_id', 'doctor_id', 'family_id', 'inquiry_type', 'inquiry_mode', 'inquiry_status', 'is_delete', 'inquiry_refund_status', 'inquiry_pay_channel', 'inquiry_pay_status', 'inquiry_no', 'escrow_trade_no', 'amount_total', 'coupon_amount_total', 'payment_amount_total', 'pay_time', 'reception_time', 'complete_time', 'finish_time', 'statistics_status', 'statistics_time', 'is_withdrawal', 'withdrawal_time', 'cancel_time', 'cancel_reason', 'cancel_remarks', 'times_number', 'duration', 'patient_name', 'patient_name_mask', 'patient_sex', 'patient_age', 'created_at', 'updated_at']; protected string $primaryKey = "order_inquiry_id"; diff --git a/app/Model/OrderProduct.php b/app/Model/OrderProduct.php index 79e806d..e005b7d 100644 --- a/app/Model/OrderProduct.php +++ b/app/Model/OrderProduct.php @@ -15,6 +15,7 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $order_product_id 主键id * @property int $order_inquiry_id 订单-问诊id * @property int $order_prescription_id 订单-处方id + * @property int $order_id 订单id * @property int $doctor_id 医生id * @property int $patient_id 患者id * @property int $family_id 家庭成员id(就诊用户) @@ -55,10 +56,10 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property string $consignee_tel_mask 收货人电话(掩码) * @property \Carbon\Carbon $created_at 创建时间 * @property \Carbon\Carbon $updated_at 修改时间 - * @property-read OrderPrescription|null $OrderPrescription - * @property-read \Hyperf\Database\Model\Collection|OrderPrescriptionIcd[]|null $OrderPrescriptionIcd * @property-read \Hyperf\Database\Model\Collection|OrderProductItem[]|null $OrderProductItem + * @property-read OrderPrescription|null $OrderPrescription * @property-read PatientFamily|null $PatientFamily + * @property-read \Hyperf\Database\Model\Collection|OrderPrescriptionIcd[]|null $OrderPrescriptionIcd */ class OrderProduct extends Model { @@ -72,7 +73,7 @@ class OrderProduct extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['order_product_id', 'order_inquiry_id', 'order_prescription_id', 'doctor_id', 'patient_id', 'family_id', 'order_product_no', 'escrow_trade_no', 'order_product_status', 'pay_channel', 'pay_status', 'is_delete', 'cancel_reason', 'amount_total', 'coupon_amount_total', 'payment_amount_total', 'logistics_fee', 'logistics_no', 'logistics_company_code', 'sub_logistics_status', 'delivery_time', 'pay_time', 'remarks', 'refund_status', 'cancel_time', 'cancel_remarks', 'report_pre_status', 'report_pre_time', 'report_pre_fail_reason', 'province_id', 'province', 'city_id', 'city', 'county_id', 'county', 'address', 'address_mask', 'consignee_name', 'consignee_name_mask', 'consignee_tel', 'consignee_tel_mask', 'created_at', 'updated_at']; + protected array $fillable = ['order_product_id', 'order_inquiry_id', 'order_prescription_id', 'order_id', 'doctor_id', 'patient_id', 'family_id', 'order_product_no', 'escrow_trade_no', 'order_product_status', 'pay_channel', 'pay_status', 'is_delete', 'cancel_reason', 'amount_total', 'coupon_amount_total', 'payment_amount_total', 'logistics_fee', 'logistics_no', 'logistics_company_code', 'sub_logistics_status', 'delivery_time', 'pay_time', 'remarks', 'refund_status', 'cancel_time', 'cancel_remarks', 'report_pre_status', 'report_pre_time', 'report_pre_fail_reason', 'province_id', 'province', 'city_id', 'city', 'county_id', 'county', 'address', 'address_mask', 'consignee_name', 'consignee_name_mask', 'consignee_tel', 'consignee_tel_mask', 'created_at', 'updated_at']; protected string $primaryKey = "order_product_id"; diff --git a/app/Model/OrderRefund.php b/app/Model/OrderRefund.php new file mode 100644 index 0000000..6bf6391 --- /dev/null +++ b/app/Model/OrderRefund.php @@ -0,0 +1,86 @@ +first($fields); + } + + /** + * 多条 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params, array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + + /** + * 新增 + * @param array $data + * @return OrderRefund|\Hyperf\Database\Model\Model + */ + public static function addOrderRefund(array $data): \Hyperf\Database\Model\Model|OrderRefund + { + return self::create($data); + } + + /** + * 修改 + * @param array $params + * @param array $data + * @return int + */ + public static function edit(array $params = [], array $data = []): int + { + return self::where($params)->update($data); + } + +} diff --git a/app/Services/DetectionService.php b/app/Services/DetectionService.php index 60bae2c..97767d0 100644 --- a/app/Services/DetectionService.php +++ b/app/Services/DetectionService.php @@ -13,6 +13,7 @@ use App\Model\BasicNation; use App\Model\DetectionProject; use App\Model\DetectionProjectPurpose; use App\Model\DiseaseClassDetection; +use App\Model\Order; use App\Model\OrderDetection; use App\Model\OrderDetectionCase; use App\Model\OrderDetectionRefund; @@ -40,13 +41,13 @@ class DetectionService extends BaseService */ public function getDetectionProjectList(): array { - $company_id = $this->request->input("company_id",1); + $company_id = $this->request->input("company_id", 1); // 获取合作公司数据 $params = array(); $params['company_id'] = $company_id; $basic_company = BasicCompany::getOne($params); - if (empty($basic_company)){ + if (empty($basic_company)) { return fail(); } @@ -54,11 +55,11 @@ class DetectionService extends BaseService $params = array(); $params['company_id'] = $company_id; $detection_projects = DetectionProject::getList($params); - if (empty($detection_projects)){ + if (empty($detection_projects)) { return fail(); } - foreach ($detection_projects as &$value){ + foreach ($detection_projects as &$value) { $value['img_path'] = addAliyunOssWebsite($value['img_path']); } @@ -71,14 +72,14 @@ class DetectionService extends BaseService */ public function getDetectionProject(): array { - $company_id = $this->request->input("company_id",1); - $detection_project_id = $this->request->route('detection_project_id',1); + $company_id = $this->request->input("company_id", 1); + $detection_project_id = $this->request->route('detection_project_id', 1); // 获取合作公司数据 $params = array(); $params['company_id'] = $company_id; $basic_company = BasicCompany::getOne($params); - if (empty($basic_company)){ + if (empty($basic_company)) { return fail(); } @@ -86,7 +87,7 @@ class DetectionService extends BaseService $params = array(); $params['detection_project_id'] = $detection_project_id; $detection_project = DetectionProject::getOne($params); - if (empty($detection_project)){ + if (empty($detection_project)) { return fail(); } @@ -102,7 +103,7 @@ class DetectionService extends BaseService public function getDetectionDoctorList(): array { $user_info = $this->request->getAttribute("userInfo") ?? []; - $company_id = $this->request->input("company_id",1); + $company_id = $this->request->input("company_id", 1); $province_id = $this->request->input("province_id"); $city_id = $this->request->input("city_id"); $county_id = $this->request->input("county_id"); @@ -111,43 +112,43 @@ class DetectionService extends BaseService $params = array(); $params['company_id'] = $company_id; $basic_company = BasicCompany::getOne($params); - if (empty($basic_company)){ + if (empty($basic_company)) { return fail(); } // 搜索数据 $hospital_params = array(); - if (!empty($province_id)){ + if (!empty($province_id)) { $params = array(); $params['area_id'] = $province_id; $params['area_type'] = 2; $area_province = Area::getOne($params); - if (!empty($area_province)){ + if (!empty($area_province)) { // 搜索条件 $hospital_params['province_id'] = $area_province['area_id']; } } - if (!empty($city_id)){ + if (!empty($city_id)) { $params = array(); $params['area_id'] = $city_id; $params['parent_id'] = $province_id; $params['area_type'] = 3; $area_city = Area::getOne($params); - if (!empty($area_city)){ + if (!empty($area_city)) { // 搜索条件 $hospital_params['city_id'] = $area_city['area_id']; } } - if (!empty($county_id)){ + if (!empty($county_id)) { $params = array(); $params['area_id'] = $county_id; $params['parent_id'] = $city_id; $params['area_type'] = 4; $area_county = Area::getOne($params); - if (!empty($area_county)){ + if (!empty($area_county)) { // 搜索条件 $hospital_params['county_id'] = $area_county['area_id']; } @@ -168,10 +169,10 @@ class DetectionService extends BaseService "doctor_title", "hospital_id", ]; - $user_doctors = UserDoctor::getDiagnoCoopDoctorList($params,$hospital_params,$fields); - if (!empty($user_doctors)){ - foreach ($user_doctors as &$value){ - if (!empty($value['Hospital'])){ + $user_doctors = UserDoctor::getDiagnoCoopDoctorList($params, $hospital_params, $fields); + if (!empty($user_doctors)) { + foreach ($user_doctors as &$value) { + if (!empty($value['Hospital'])) { $value['hospital_name'] = $value['Hospital']['hospital_name']; } @@ -190,13 +191,13 @@ class DetectionService extends BaseService */ public function getDetectionProjectPurposeList(): array { - $detection_project_id = $this->request->input("detection_project_id",1); + $detection_project_id = $this->request->input("detection_project_id", 1); // 获取项目数据 $params = array(); $params['detection_project_id'] = $detection_project_id; $detection_project_purpose = DetectionProjectPurpose::getList($params); - if (empty($detection_project_purpose)){ + if (empty($detection_project_purpose)) { return fail(); } @@ -238,7 +239,7 @@ class DetectionService extends BaseService $params['family_id'] = $request_params['family_id']; $params['detection_project_id'] = $request_params['detection_project_id']; $order_detection = OrderDetection::getNotFinishedOrderDetectionOne($params); - if (!empty($order_detection)){ + if (!empty($order_detection)) { $result['status'] = 2; $result['message'] = "当前患者存在未完成的检测订单"; $result['data']['order_no'] = $order_detection['detection_no']; @@ -249,37 +250,37 @@ class DetectionService extends BaseService $params = array(); $params['nation_id'] = $request_params['nation_id']; $nation = BasicNation::getOne($params); - if (empty($nation)){ - return fail(HttpEnumCode::HTTP_ERROR,"民族选择错误"); + if (empty($nation)) { + return fail(HttpEnumCode::HTTP_ERROR, "民族选择错误"); } // 检测疾病分类 - $detection_disease_class_ids = explode(',',$request_params['detection_disease_class_ids']); - if (count($detection_disease_class_ids) > 3){ - return fail(HttpEnumCode::HTTP_ERROR,"既往病史最多可选三项"); + $detection_disease_class_ids = explode(',', $request_params['detection_disease_class_ids']); + if (count($detection_disease_class_ids) > 3) { + return fail(HttpEnumCode::HTTP_ERROR, "既往病史最多可选三项"); } $detection_disease_class_names = ""; - foreach ($detection_disease_class_ids as $value){ + foreach ($detection_disease_class_ids as $value) { $params = array(); $params['id'] = $value; $disease_class_detection = DiseaseClassDetection::getOne($params); - if (empty($disease_class_detection)){ - return fail(HttpEnumCode::HTTP_ERROR,"既往病史错误"); + if (empty($disease_class_detection)) { + return fail(HttpEnumCode::HTTP_ERROR, "既往病史错误"); } - if ($disease_class_detection['status'] != 1){ - return fail(HttpEnumCode::HTTP_ERROR,"既往病史错误"); + if ($disease_class_detection['status'] != 1) { + return fail(HttpEnumCode::HTTP_ERROR, "既往病史错误"); } - if ($disease_class_detection['enable'] != 1){ - return fail(HttpEnumCode::HTTP_ERROR,"既往病史错误"); + if ($disease_class_detection['enable'] != 1) { + return fail(HttpEnumCode::HTTP_ERROR, "既往病史错误"); } - if (empty($detection_disease_class_names)){ + if (empty($detection_disease_class_names)) { $detection_disease_class_names = $disease_class_detection['name']; - }else{ + } else { $detection_disease_class_names = $detection_disease_class_names . ',' . $disease_class_detection['name']; } } @@ -288,12 +289,12 @@ class DetectionService extends BaseService $params = array(); $params['detection_project_id'] = $request_params['detection_project_id']; $detection_project = DetectionProject::getOne($params); - if (empty($detection_project)){ - return fail(HttpEnumCode::HTTP_ERROR,"检测项目错误"); + if (empty($detection_project)) { + return fail(HttpEnumCode::HTTP_ERROR, "检测项目错误"); } - if ($detection_project['detection_project_price'] <= 0){ - return fail(HttpEnumCode::HTTP_ERROR,"订单金额错误"); + if ($detection_project['detection_project_price'] <= 0) { + return fail(HttpEnumCode::HTTP_ERROR, "订单金额错误"); } // 检测用途 @@ -301,7 +302,7 @@ class DetectionService extends BaseService $params['purpose_id'] = $request_params['purpose_id']; $params['detection_project_id'] = $request_params['detection_project_id']; $detection_project_purpose = DetectionProjectPurpose::getOne($params); - if (empty($detection_project_purpose)){ + if (empty($detection_project_purpose)) { return fail(); } @@ -309,12 +310,12 @@ class DetectionService extends BaseService $params = array(); $params['doctor_id'] = $request_params['doctor_id']; $user_doctor = UserDoctor::getOne($params); - if (empty($user_doctor)){ - return fail(HttpEnumCode::HTTP_ERROR,"医生错误"); + if (empty($user_doctor)) { + return fail(HttpEnumCode::HTTP_ERROR, "医生错误"); } - if ($user_doctor['is_sys_diagno_cooperation'] != 1){ - return fail(HttpEnumCode::HTTP_ERROR,"医生错误"); + if ($user_doctor['is_sys_diagno_cooperation'] != 1) { + return fail(HttpEnumCode::HTTP_ERROR, "医生错误"); } // 确定支付渠道 @@ -323,6 +324,8 @@ class DetectionService extends BaseService $detection_pay_channel = 1; } elseif ($request_params['client_type'] == 2) { $detection_pay_channel = 2; + } else { + return fail(HttpEnumCode::HTTP_ERROR, "请选择正确的支付渠道"); } Db::beginTransaction(); @@ -330,26 +333,44 @@ class DetectionService extends BaseService $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'] = $user_doctor['doctor_id']; + $data['order_type'] = 3; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) + $data['inquiry_pay_channel'] = $detection_pay_channel;// 支付渠道(1:小程序支付 2:微信扫码支付) + $data['pay_status'] = 1;// 1:待支付 + $data['order_no'] = "D" . $generator->generate();// 订单编号 + $data['amount_total'] = $detection_project['detection_project_price'];// 订单金额 + $data['coupon_amount_total'] = 0;// 优惠卷总金额 + $data['payment_amount_total'] = $detection_project['detection_project_price'];// 实际付款金额 + $order = Order::addOrder($data); + if (empty($order)) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + // 新增检测订单 $data = array(); $data['user_id'] = $user_info['user_id']; - $data['patient_id'] = $user_info['client_user_id']; - $data['doctor_id'] = $user_doctor['doctor_id']; - $data['family_id'] = $patient_family['family_id']; - $data['detection_project_id'] = $detection_project['detection_project_id']; - $data['purpose_id'] = $detection_project_purpose['purpose_id']; - $data['detection_status'] = 1; // 检测订单状态(1:待支付 2:待绑定 3:检测中 4:检测完成 5:已取消) - $data['detection_pay_channel'] = $detection_pay_channel; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) - $data['detection_no'] = "D" . $generator->generate(); // 系统订单编号 - $data['amount_total'] = $detection_project['detection_project_price']; // 订单金额 + $data['patient_id'] = $user_info['client_user_id']; + $data['doctor_id'] = $user_doctor['doctor_id']; + $data['family_id'] = $patient_family['family_id']; + $data['detection_project_id'] = $detection_project['detection_project_id']; + $data['purpose_id'] = $detection_project_purpose['purpose_id']; + $data['detection_status'] = 1; // 检测订单状态(1:待支付 2:待绑定 3:检测中 4:检测完成 5:已取消) + $data['detection_pay_channel'] = $detection_pay_channel; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) + $data['detection_no'] = $order['order_no']; // 系统订单编号 + $data['amount_total'] = $detection_project['detection_project_price']; // 订单金额 $data['coupon_amount_total'] = 0;// 优惠卷总金额 - $data['payment_amount_total'] = $detection_project['detection_project_price']; // 实际付款金额 + $data['payment_amount_total'] = $detection_project['detection_project_price']; // 实际付款金额 $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_detection = OrderDetection::addOrderDetection($data); - if (empty($order_detection)){ + if (empty($order_detection)) { Db::rollBack(); return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } @@ -368,7 +389,7 @@ class DetectionService extends BaseService $data['detection_disease_class_ids'] = $request_params['detection_disease_class_ids']; // 疾病id-检测-逗号分隔 $data['detection_disease_class_names'] = $detection_disease_class_names; // 疾病名称-检测-逗号分隔 $order_detection_case = OrderDetectionCase::addOrderDetectionCase($data); - if (empty($order_detection_case)){ + if (empty($order_detection_case)) { Db::rollBack(); return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } @@ -388,7 +409,7 @@ class DetectionService extends BaseService } Db::commit(); - }catch (\Exception $e){ + } catch (\Exception $e) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); } @@ -416,7 +437,7 @@ class DetectionService extends BaseService $params['family_id'] = $family_id; $params['detection_project_id'] = $detection_project_id; $order_detection = OrderDetection::getNotFinishedOrderDetectionOne($params); - if (!empty($order_detection)){ + if (!empty($order_detection)) { return success($order_detection['detection_no']); } @@ -439,62 +460,61 @@ class DetectionService extends BaseService $params['patient_id'] = $user_info['client_user_id']; $params['order_detection_id'] = $order_detection_id; $order_detection = OrderDetection::getOne($params); - if (empty($order_detection)){ + if (empty($order_detection)) { return fail(); } // 检测订单状态 - if ($order_detection['detection_status'] != 2){ - return fail(HttpEnumCode::HTTP_ERROR,"订单状态错误"); + if ($order_detection['detection_status'] != 2) { + return fail(HttpEnumCode::HTTP_ERROR, "订单状态错误"); } - if ($order_detection['detection_pay_status'] != 2){ - return fail(HttpEnumCode::HTTP_ERROR,"订单未支付"); + if ($order_detection['detection_pay_status'] != 2) { + return fail(HttpEnumCode::HTTP_ERROR, "订单未支付"); } - if (!empty($order_detection['detection_bar_code'])){ - return fail(HttpEnumCode::HTTP_ERROR,"请勿重复绑定"); + if (!empty($order_detection['detection_bar_code'])) { + return fail(HttpEnumCode::HTTP_ERROR, "请勿重复绑定"); } - if (!empty($order_detection['detection_pic']) && !empty($request_params['detection_pic'])){ - return fail(HttpEnumCode::HTTP_ERROR,"请勿重复绑定"); + if (!empty($order_detection['detection_pic']) && !empty($request_params['detection_pic'])) { + return fail(HttpEnumCode::HTTP_ERROR, "请勿重复绑定"); } // 处理检测管图片 - if (!empty($request_params['detection_pic'])){ + if (!empty($request_params['detection_pic'])) { $detection_pic = implode(',', $request_params['detection_pic']); $detection_pic = PcreMatch::pregRemoveOssWebsite($detection_pic); } - // 检测检测管编码是否已被使用 $params = array(); $params['detection_bar_code'] = $request_params['detection_bar_code']; $result = OrderDetection::getOne($params); - if (!empty($result)){ - return fail(HttpEnumCode::HTTP_ERROR,"检测管已被使用"); + if (!empty($result)) { + return fail(HttpEnumCode::HTTP_ERROR, "检测管已被使用"); } // 获取检测码对应的检测所 $detection_organ_code = substr($request_params['detection_bar_code'], 3, 1); - if (!$detection_organ_code){ - return fail(HttpEnumCode::HTTP_ERROR,"检测码错误"); + if (!$detection_organ_code) { + return fail(HttpEnumCode::HTTP_ERROR, "检测码错误"); } // 获取检测所数据 $params = array(); $params['detection_organ_code'] = $detection_organ_code; $basic_detection_organ = BasicDetectionOrgan::getOne($params); - if (empty($basic_detection_organ)){ - return fail(HttpEnumCode::HTTP_ERROR,"检测码错误"); + if (empty($basic_detection_organ)) { + return fail(HttpEnumCode::HTTP_ERROR, "检测码错误"); } Db::beginTransaction(); try { // 修改检测订单 $data = array(); - if (isset($detection_pic)){ + if (isset($detection_pic)) { $data['detection_pic'] = $detection_pic; } @@ -505,10 +525,10 @@ class DetectionService extends BaseService $params = array(); $params['order_detection_id'] = $order_detection_id; - $res = OrderDetection::editOrderDetection($params,$data); - if (!$res){ + $res = OrderDetection::editOrderDetection($params, $data); + if (!$res) { Db::rollBack(); - return fail(HttpEnumCode::HTTP_ERROR,"绑定失败"); + return fail(HttpEnumCode::HTTP_ERROR, "绑定失败"); } // 上报数据 @@ -516,7 +536,7 @@ class DetectionService extends BaseService $wy->report($order_detection_id); Db::commit(); - }catch (\Throwable $e){ + } catch (\Throwable $e) { Db::rollBack(); Log::getInstance("DetectionService-bindDetectionTube")->error($e->getMessage()); return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); @@ -552,17 +572,17 @@ class DetectionService extends BaseService $params['patient_id'] = $user_info['client_user_id']; $params['order_detection_id'] = $order_detection_id; $order_detection = OrderDetection::getOne($params); - if (empty($order_detection)){ + if (empty($order_detection)) { return fail(); } // 检测订单状态 - if ($order_detection['detection_status'] != 4){ - return fail(HttpEnumCode::HTTP_ERROR,"订单状态错误"); + if ($order_detection['detection_status'] != 4) { + return fail(HttpEnumCode::HTTP_ERROR, "订单状态错误"); } // 检测是否已经创建问诊订单 - if (!empty($order_detection['order_inquiry_id'])){ + if (!empty($order_detection['order_inquiry_id'])) { $result['status'] = 1; $result['message'] = "成功"; $result['data'] = (string)$order_detection['order_inquiry_id']; @@ -574,9 +594,9 @@ class DetectionService extends BaseService try { // 检测当前医生是否和患者存在未完成问诊订单 $InquiryService = new InquiryService(); - $order_inquiry = $InquiryService->checkPatientDoctorProgressInquiry($order_detection['patient_id'],$order_detection['doctor_id']); - if (!empty($order_inquiry)){ - if ($order_inquiry['inquiry_status'] == 1){ + $order_inquiry = $InquiryService->checkPatientDoctorProgressInquiry($order_detection['patient_id'], $order_detection['doctor_id']); + if (!empty($order_inquiry)) { + if ($order_inquiry['inquiry_status'] == 1) { // 待支付 Db::rollBack(); @@ -587,7 +607,7 @@ class DetectionService extends BaseService return success($result); } - if ($order_inquiry['inquiry_status'] == 3){ + if ($order_inquiry['inquiry_status'] == 3) { // 待接诊 Db::rollBack(); @@ -598,7 +618,7 @@ class DetectionService extends BaseService return success($result); } - if ($order_inquiry['inquiry_status'] == 4){ + if ($order_inquiry['inquiry_status'] == 4) { // 已接诊 Db::rollBack(); @@ -614,7 +634,7 @@ class DetectionService extends BaseService $params = array(); $params['doctor_id'] = $order_detection['doctor_id']; $user_doctor = UserDoctor::getOne($params); - if (empty($user_doctor)){ + if (empty($user_doctor)) { Db::rollBack(); return fail(); } @@ -623,7 +643,7 @@ class DetectionService extends BaseService $params = array(); $params['order_detection_id'] = $order_detection['order_detection_id']; $order_detection_case = OrderDetectionCase::getOne($params); - if (empty($order_detection_case)){ + if (empty($order_detection_case)) { Db::rollBack(); return fail(); } @@ -632,7 +652,7 @@ class DetectionService extends BaseService $params = array(); $params['detection_project_id'] = $order_detection['detection_project_id']; $detection_project = DetectionProject::getOne($params); - if (empty($detection_project)){ + if (empty($detection_project)) { Db::rollBack(); return fail(); } @@ -649,6 +669,24 @@ class DetectionService extends BaseService $generator = $this->container->get(IdGeneratorInterface::class); + // 生成订单表 + $data = array(); + $data['user_id'] = $order_detection['user_id']; + $data['patient_id'] = $order_detection['client_user_id']; + $data['doctor_id'] = $order_detection['doctor_id']; + $data['order_type'] = 1; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) + $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付) + $data['pay_status'] = 2; // 1:待支付 + $data['order_no'] = "I" . $generator->generate(); // 订单编号 + $data['amount_total'] = 0; // 订单金额 + $data['coupon_amount_total'] = 0; // 优惠卷总金额 + $data['payment_amount_total'] = 0; // 实际付款金额 + $order = Order::addOrder($data); + if (empty($order)) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + // 创建问诊订单 $data = array(); $data['user_id'] = $order_detection['user_id']; @@ -660,7 +698,7 @@ class DetectionService extends BaseService $data['inquiry_status'] = 4; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) $data['inquiry_pay_status'] = 2; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - $data['inquiry_no'] = $generator->generate();// 订单编号 + $data['inquiry_no'] = $order['order_no'];// 订单编号 $data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号 $data['amount_total'] = 0;// 订单金额 $data['coupon_amount_total'] = 0;// 优惠卷总金额 @@ -703,7 +741,7 @@ class DetectionService extends BaseService $params = array(); $params['order_detection_id'] = $order_detection['order_detection_id']; - OrderDetection::editOrderDetection($params,$data); + OrderDetection::editOrderDetection($params, $data); // 添加自动完成队列 $time = 1000 * 60 * 60 * 24 * 3; @@ -763,7 +801,7 @@ class DetectionService extends BaseService $imService->detectionTestReportStr($data); Db::commit(); - }catch (\Throwable $e){ + } catch (\Throwable $e) { Db::rollBack(); Log::getInstance("DetectionService-bindDetectionTube")->error($e->getMessage()); return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); @@ -778,12 +816,12 @@ class DetectionService extends BaseService /** * 取消未支付检测订单 - * @param string|int $order_no 订单编号 + * @param string|int $order_id * @param string|int $cancel_reason 取消订单原因(1:主动取消 2:客服取消 3:支付超时) * @param string|int $cancel_remarks 取消备注 * @return array */ - public function cancelUnpayDetectionOrder(string|int $order_no, string|int $cancel_reason, string|int $cancel_remarks): array + public function cancelUnpayDetectionOrder(string|int $order_id, string|int $cancel_reason, string|int $cancel_remarks): array { $result = array(); $result['status'] = 1; @@ -791,26 +829,26 @@ class DetectionService extends BaseService // 获取检测订单数据 $params = array(); - $params['detection_no'] = $order_no; + $params['order_id'] = $order_id; $order_detection = OrderDetection::getOne($params); - if (empty($order_detection)){ + if (empty($order_detection)) { $result['status'] = 0; - $result['message'] = "取消未支付的检测订单失败:未查询到对应订单数据"; + $result['message'] = "未查询到对应订单数据"; return $result; } // 检测订单状态 if ($order_detection['detection_status'] == 5) { // 检测订单状态(1:待支付 2:待绑定 3:检测中 4:检测完成 5:已取消) - $result['status'] = 2; - $result['message'] = "取消未支付的检测订单:订单已取消"; + $result['status'] = 0; + $result['message'] = "订单已取消"; return $result; } if ($order_detection['detection_status'] != 1) { // 检测订单状态(1:待支付 2:待绑定 3:检测中 4:检测完成 5:已取消) $result['status'] = 0; - $result['message'] = "取消未支付的检测订单:订单状态为" . $order_detection['detection_status'] . "无法执行"; + $result['message'] = "订单取消失败"; return $result; } @@ -818,15 +856,15 @@ class DetectionService extends BaseService if (!in_array($order_detection['detection_refund_status'], [0, 4, 5])) { // 检测订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) $result['status'] = 0; - $result['message'] = "取消未支付的检测订单:订单正在退款中"; + $result['message'] = "订单正在退款中"; return $result; } // 检测订单支付状态 if ($order_detection['detection_pay_status'] == 2) { // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - $result['status'] = 2; - $result['message'] = "取消未支付的检测订单:订单已支付"; + $result['status'] = 0; + $result['message'] = "订单已支付"; return $result; } @@ -834,14 +872,14 @@ class DetectionService extends BaseService if ($order_detection['is_delete'] == 1) { // 删除状态(0:否 1:是) $result['status'] = 2; - $result['message'] = "取消未支付的检测订单:订单已被删除"; + $result['message'] = "订单已被删除"; return $result; } // 取消检测订单 $data = array(); $data['detection_status'] = 5; // 检测订单状态(1:待支付 2:待绑定 3:检测中 4:检测完成 5:已取消) - if ($cancel_reason == 3){ + if ($cancel_reason == 3) { $data['detection_pay_status'] = 5; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) } @@ -852,7 +890,7 @@ class DetectionService extends BaseService $params = array(); $params['order_detection_id'] = $order_detection['order_detection_id']; - OrderDetection::editOrderDetection($params,$data); + OrderDetection::editOrderDetection($params, $data); return $result; } @@ -860,7 +898,7 @@ class DetectionService extends BaseService /** * 检测订单退款接口 */ - public function detectionRefund(string $order_detection_id, string $refund_reason) + /*public function detectionRefund(string $order_detection_id, string $refund_reason): void { // 获取订单数据 $params = array(); @@ -877,7 +915,7 @@ class DetectionService extends BaseService } // 检测订单退款状态 - if (in_array($order_detection['detection_refund_status'], [2, 3, 5,6])) { + if (in_array($order_detection['detection_refund_status'], [2, 3, 5, 6])) { // 检测订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) throw new BusinessException("订单退款状态错误"); } @@ -893,7 +931,7 @@ class DetectionService extends BaseService $detection_refund_no = $generator->generate(); // 检测订单金额 - if ($order_detection['payment_amount_total'] > 0){ + if ($order_detection['payment_amount_total'] > 0) { // 发起退款 $WechatPay = new WechatPay(1, 3); @@ -930,9 +968,9 @@ class DetectionService extends BaseService } $refund_id = $result['refund_id']; - }else{ + } else { $detection_refund_status = 3; - $success_time = date('Y-m-d H:i:s',time()); + $success_time = date('Y-m-d H:i:s', time()); $refund_id = $generator->generate(); } @@ -963,7 +1001,7 @@ class DetectionService extends BaseService $params = array(); $params['order_detection_id'] = $order_detection['order_detection_id']; OrderDetection::editOrderDetection($params, $data); - } + }*/ /** * 获取患者某一状态下的检测订单数量 @@ -971,7 +1009,7 @@ class DetectionService extends BaseService * @param int $detection_status 检测订单状态(1:待支付 2:待绑定 3:检测中 4:检测完成 5:已取消) * @return int */ - public function getPatientDetectionWithStatus(string $patient_id,int $detection_status): int + public function getPatientDetectionWithStatus(string $patient_id, int $detection_status): int { $params = array(); $params['patient_id'] = $patient_id; diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index dc91a9f..3ebb594 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -17,6 +17,8 @@ use App\Model\DoctorInquiryConfigService; use App\Model\Hospital; use App\Model\InquiryCaseProduct; use App\Model\MessageIm; +use App\Model\Order; +use App\Model\OrderCoupon; use App\Model\OrderDetection; use App\Model\OrderEvaluation; use App\Model\OrderInquiry; @@ -220,8 +222,31 @@ class InquiryService extends BaseService $payment_amount_total = 0; } + // 生成订单表 + $data = array(); + $data['user_id'] = $user_info['user_id']; + $data['patient_id'] = $user_info['client_user_id']; + if (isset($request_params['doctor_id'])) { + if (!empty($request_params['doctor_id'])) { + $data['doctor_id'] = $request_params['doctor_id']; + } + } + $data['order_type'] = 1; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) + $data['inquiry_pay_channel'] = $inquiry_pay_channel ?? 0;// 支付渠道(1:小程序支付 2:微信扫码支付) + $data['pay_status'] = 1;// 1:待支付 + $data['order_no'] = "I" . $generator->generate();// 订单编号 + $data['amount_total'] = $inquiry_price;// 订单金额 + $data['coupon_amount_total'] = $coupon_amount_total;// 优惠卷总金额 + $data['payment_amount_total'] = $payment_amount_total;// 实际付款金额 + $order = Order::addOrder($data); + if (empty($order)) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + // 生成问诊订单 $data = array(); + $data['order_id'] = $order['order_id']; $data['user_id'] = $user_info['user_id']; $data['patient_id'] = $user_info['client_user_id']; if (isset($request_params['doctor_id'])) { @@ -235,7 +260,7 @@ class InquiryService extends BaseService $data['inquiry_mode'] = $request_params['inquiry_mode']; $data['inquiry_status'] = 1;// 1:待支付 $data['inquiry_pay_channel'] = $inquiry_pay_channel ?? 0;// 支付渠道(1:小程序支付 2:微信扫码支付) - $data['inquiry_no'] = $generator->generate();// 订单编号 + $data['inquiry_no'] = $order['order_no'];// 订单编号 $data['amount_total'] = $inquiry_price;// 订单金额 $data['coupon_amount_total'] = $coupon_amount_total;// 优惠卷总金额 $data['payment_amount_total'] = $payment_amount_total;// 实际付款金额 @@ -383,6 +408,18 @@ class InquiryService extends BaseService // 处理优惠卷数据 if (!empty($user_coupons)) { foreach ($user_coupons as $user_coupon) { + // 增加订单优惠卷表 + $data = array(); + $data['order_id'] = $order['order_id'];// 订单id + $data['user_coupon_id'] = $user_coupon['user_coupon_id']; + $data['coupon_name'] = $user_coupon['coupon_name']; + $data['coupon_use_price'] = $user_coupon['coupon_price']; + $order_coupon = OrderCoupon::addOrderCoupon($data); + if (empty($order_coupon)) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + // 增加问诊优惠卷表 $data = array(); $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];// 订单-问诊id @@ -1663,84 +1700,208 @@ class InquiryService extends BaseService * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ - public function inquiryRefund(string $order_inquiry_id, string $refund_reason): void +// public function inquiryRefund(string $order_inquiry_id, string $refund_reason): void +// { +// // 获取订单数据 +// $params = array(); +// $params['order_inquiry_id'] = $order_inquiry_id; +// $order_inquiry = OrderInquiry::getOne($params); +// if (empty($order_inquiry)) { +// throw new BusinessException("订单数据为空"); +// } +// +// // 检测问诊订单状态 +// if (!in_array($order_inquiry['inquiry_status'], [2, 3, 4, 5, 7])) { +// // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) +// throw new BusinessException("订单状态错误"); +// } +// +// // 检测订单退款状态 +// if (in_array($order_inquiry['inquiry_refund_status'], [2, 3, 5])) { +// // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) +// throw new BusinessException("订单退款状态错误"); +// } +// +// // 检测支付状态 +// if ($order_inquiry['inquiry_pay_status'] != 2) { +// // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) +// throw new BusinessException("订单支付状态错误"); +// } +// +// // 系统退款编号 +// $generator = $this->container->get(IdGeneratorInterface::class); +// $inquiry_refund_no = $generator->generate(); +// +// // 检测订单金额 +// if ($order_inquiry['payment_amount_total'] > 0) { +// // 发起退款 +// $WechatPay = new WechatPay(1, 1); +// +// $options = array(); +// $options['transaction_id'] = $order_inquiry['escrow_trade_no']; +// $options['out_refund_no'] = (string)$inquiry_refund_no; +// $options['reason'] = $refund_reason; +// $options['amount'] = [ +// 'refund' => (int)round($order_inquiry['payment_amount_total'] * 100), +// 'total' => (int)round($order_inquiry['payment_amount_total'] * 100), +// 'currency' => "CNY", +// ]; +// +// $result = $WechatPay->refund($options); +// +// // 处理订单退款状态 +// // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) +// $success_time = ""; +// if ($result['status'] == "SUCCESS") { +// // 退款成功 +// $inquiry_refund_status = 3; +// $success_time = $result['success_time']; +// } elseif ($result['status'] == "CLOSED") { +// // 退款关闭 +// $inquiry_refund_status = 5; +// } elseif ($result['status'] == "PROCESSING") { +// // 退款处理中 +// $inquiry_refund_status = 2; +// } elseif ($result['status'] == "ABNORMAL") { +// // 退款异常,此情况不处理,进行短信通知 +// throw new BusinessException("订单退款状态异常"); +// } else { +// throw new BusinessException("订单退款状态错误"); +// } +// +// $refund_id = $result['refund_id']; +// +// } else { +// // 模拟退款 +// $inquiry_refund_status = 3; +// $refund_id = "模拟退款:" . $generator->generate(); +// $success_time = date("Y-m-d H:i:s", time()); +// +// // 模拟退款时手动退还优惠卷 +// if (!empty($order_inquiry['coupon_amount_total']) && $order_inquiry['coupon_amount_total'] > 0) { +// // 获取该订单全部优惠卷数据 +// $params = array(); +// $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; +// $order_inquiry_coupons = OrderInquiryCoupon::getList($params); +// if (!empty($order_inquiry_coupons)) { +// $userCouponService = new UserCouponService(); +// foreach ($order_inquiry_coupons as $order_inquiry_coupon) { +// // 退还优惠卷 +// $userCouponService->returnUserCoupon($order_inquiry_coupon['user_coupon_id']); +// +// // 发送站内消息-优惠卷退还 +// $MessagePush = new MessagePush($order_inquiry['user_id']); +// $MessagePush->patientRefundCoupon($order_inquiry_coupon['coupon_name']); +// } +// } +// } +// } +// +// // 新增退款表 +// $data = array(); +// $data['patient_id'] = $order_inquiry['patient_id']; +// $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; +// $data['inquiry_no'] = $order_inquiry['inquiry_no']; +// $data['inquiry_refund_no'] = $inquiry_refund_no; +// $data['refund_id'] = $refund_id; +// $data['inquiry_refund_status'] = $inquiry_refund_status; +// $data['refund_total'] = $order_inquiry['payment_amount_total']; +// $data['refund_reason'] = $refund_reason; +// +// if ($inquiry_refund_status == 3 && !empty($success_time)) { +// $data['success_time'] = date("Y-m-d H:i:s", strtotime($success_time)); // 退款成功时间 +// } +// +// $order_inquiry_refund = OrderInquiryRefund::addOrderInquiryRefund($data); +// if (empty($order_inquiry_refund)) { +// throw new BusinessException("添加退款表失败"); +// } +// +// // 修改问诊订单表状态 +// $data = array(); +// $data['inquiry_refund_status'] = $inquiry_refund_status; +// +// $params = array(); +// $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; +// OrderInquiry::edit($params, $data); +// } + + /** + * 取消未支付的问诊订单 + * @param string|int $order_no + * @param string|int $cancel_reason 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) + * @param string|int $cancel_remarks 取消订单备注 + * @return array + */ + public function cancelUnpayInquiryOrder(string|int $order_no, string|int $cancel_reason, string|int $cancel_remarks): array { - // 获取订单数据 - $params = array(); - $params['order_inquiry_id'] = $order_inquiry_id; - $order_inquiry = OrderInquiry::getOne($params); - if (empty($order_inquiry)) { - throw new BusinessException("订单数据为空"); - } + try { + $result = array(); + $result['status'] = 1; + $result['message'] = "成功"; - // 检测问诊订单状态 - if (!in_array($order_inquiry['inquiry_status'], [2, 3, 4, 5, 7])) { - // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - throw new BusinessException("订单状态错误"); - } - - // 检测订单退款状态 - if (in_array($order_inquiry['inquiry_refund_status'], [2, 3, 5])) { - // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) - throw new BusinessException("订单退款状态错误"); - } - - // 检测支付状态 - if ($order_inquiry['inquiry_pay_status'] != 2) { - // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - throw new BusinessException("订单支付状态错误"); - } - - // 系统退款编号 - $generator = $this->container->get(IdGeneratorInterface::class); - $inquiry_refund_no = $generator->generate(); - - // 检测订单金额 - if ($order_inquiry['payment_amount_total'] > 0) { - // 发起退款 - $WechatPay = new WechatPay(1, 1); - - $options = array(); - $options['transaction_id'] = $order_inquiry['escrow_trade_no']; - $options['out_refund_no'] = (string)$inquiry_refund_no; - $options['reason'] = $refund_reason; - $options['amount'] = [ - 'refund' => (int)round($order_inquiry['payment_amount_total'] * 100), - 'total' => (int)round($order_inquiry['payment_amount_total'] * 100), - 'currency' => "CNY", - ]; - - $result = $WechatPay->refund($options); - - // 处理订单退款状态 - // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) - $success_time = ""; - if ($result['status'] == "SUCCESS") { - // 退款成功 - $inquiry_refund_status = 3; - $success_time = $result['success_time']; - } elseif ($result['status'] == "CLOSED") { - // 退款关闭 - $inquiry_refund_status = 5; - } elseif ($result['status'] == "PROCESSING") { - // 退款处理中 - $inquiry_refund_status = 2; - } elseif ($result['status'] == "ABNORMAL") { - // 退款异常,此情况不处理,进行短信通知 - throw new BusinessException("订单退款状态异常"); - } else { - throw new BusinessException("订单退款状态错误"); + // 获取问诊订单数据 + $params = array(); + $params['order_no'] = $order_no; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + throw new BusinessException("未查询到对应订单数据"); } - $refund_id = $result['refund_id']; + // 检测订单状态 + if ($order_inquiry['inquiry_status'] == 7) { + // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + $result['status'] = 0; + $result['message'] = "订单已取消"; + return $result; + } - } else { - // 模拟退款 - $inquiry_refund_status = 3; - $refund_id = "模拟退款:" . $generator->generate(); - $success_time = date("Y-m-d H:i:s", time()); + if ($order_inquiry['inquiry_status'] != 1) { + // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + $result['status'] = 0; + $result['message'] = "订单取消失败"; + return $result; + } - // 模拟退款时手动退还优惠卷 + if (!in_array($order_inquiry['inquiry_refund_status'], [0, 4, 5])) { + // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + $result['status'] = 0; + $result['message'] = "订单正在退款中"; + return $result; + } + + if ($order_inquiry['inquiry_pay_status'] == 2) { + // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + $result['status'] = 0; + $result['message'] = "订单已支付"; + return $result; + } + + // 检测订单删除状态 + if ($order_inquiry['is_delete'] == 1) { + // 删除状态(0:否 1:是) + $result['status'] = 0; + $result['message'] = "订单已被删除"; + return $result; + } + + // 取消问诊订单 + $data = array(); + $data['inquiry_status'] = 7; + if ($cancel_reason == 5) { + $data['inquiry_pay_status'] = 5; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + } + + $data['cancel_time'] = date("Y-m-d H:i:s", time()); + $data['cancel_reason'] = $cancel_reason; // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) + $data['cancel_remarks'] = $cancel_remarks; // 取消订单备注 + $data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + OrderInquiry::edit($params, $data); + + // 处理订单优惠卷 if (!empty($order_inquiry['coupon_amount_total']) && $order_inquiry['coupon_amount_total'] > 0) { // 获取该订单全部优惠卷数据 $params = array(); @@ -1758,132 +1919,8 @@ class InquiryService extends BaseService } } } - } - - // 新增退款表 - $data = array(); - $data['patient_id'] = $order_inquiry['patient_id']; - $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $data['inquiry_no'] = $order_inquiry['inquiry_no']; - $data['inquiry_refund_no'] = $inquiry_refund_no; - $data['refund_id'] = $refund_id; - $data['inquiry_refund_status'] = $inquiry_refund_status; - $data['refund_total'] = $order_inquiry['payment_amount_total']; - $data['refund_reason'] = $refund_reason; - - if ($inquiry_refund_status == 3 && !empty($success_time)) { - $data['success_time'] = date("Y-m-d H:i:s", strtotime($success_time)); // 退款成功时间 - } - - $order_inquiry_refund = OrderInquiryRefund::addOrderInquiryRefund($data); - if (empty($order_inquiry_refund)) { - throw new BusinessException("添加退款表失败"); - } - - // 修改问诊订单表状态 - $data = array(); - $data['inquiry_refund_status'] = $inquiry_refund_status; - - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - OrderInquiry::edit($params, $data); - } - - /** - * 取消未支付的问诊订单 - * @param string|int $order_no 系统订单编号 - * @param string|int $cancel_reason 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) - * @param string|int $cancel_remarks 取消订单备注 - * @return array - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ - public function cancelUnpayInquiryOrder(string|int $order_no, string|int $cancel_reason, string|int $cancel_remarks): array - { - $result = array(); - $result['status'] = 1; - $result['message'] = "成功"; - - // 获取订单数据 - $params = array(); - $params['inquiry_no'] = $order_no; - $order_inquiry = OrderInquiry::getOne($params); - if (empty($order_inquiry)) { - $result['status'] = 0; - $result['message'] = "取消未支付的问诊订单失败:未查询到对应订单数据"; - return $result; - } - - // 检测订单状态 - if ($order_inquiry['inquiry_status'] == 7) { - // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - $result['status'] = 2; - $result['message'] = "取消未支付的问诊订单:订单已取消"; - return $result; - } - - if ($order_inquiry['inquiry_status'] != 1) { - // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - $result['status'] = 0; - $result['message'] = "取消未支付的问诊订单:订单状态为" . $order_inquiry['inquiry_status'] . "无法执行"; - return $result; - } - - if (!in_array($order_inquiry['inquiry_refund_status'], [0, 4, 5])) { - // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) - $result['status'] = 0; - $result['message'] = "取消未支付的问诊订单:订单正在退款中"; - return $result; - } - - if ($order_inquiry['inquiry_pay_status'] == 2) { - // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - $result['status'] = 2; - $result['message'] = "取消未支付的问诊订单:订单已支付"; - return $result; - } - - // 检测订单删除状态 - if ($order_inquiry['is_delete'] == 1) { - // 删除状态(0:否 1:是) - $result['status'] = 2; - $result['message'] = "取消未支付的问诊订单:订单已被删除"; - return $result; - } - - // 取消问诊订单 - $data = array(); - $data['inquiry_status'] = 7; - if ($cancel_reason == 5) { - $data['inquiry_pay_status'] = 5; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - } - - $data['cancel_time'] = date("Y-m-d H:i:s", time()); - $data['cancel_reason'] = $cancel_reason; // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) - $data['cancel_remarks'] = $cancel_remarks; // 取消订单备注 - $data['updated_at'] = date("Y-m-d H:i:s", time()); - - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - OrderInquiry::edit($params, $data); - - // 处理订单优惠卷 - if (!empty($order_inquiry['coupon_amount_total']) && $order_inquiry['coupon_amount_total'] > 0) { - // 获取该订单全部优惠卷数据 - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $order_inquiry_coupons = OrderInquiryCoupon::getList($params); - if (!empty($order_inquiry_coupons)) { - $userCouponService = new UserCouponService(); - foreach ($order_inquiry_coupons as $order_inquiry_coupon) { - // 退还优惠卷 - $userCouponService->returnUserCoupon($order_inquiry_coupon['user_coupon_id']); - - // 发送站内消息-优惠卷退还 - $MessagePush = new MessagePush($order_inquiry['user_id']); - $MessagePush->patientRefundCoupon($order_inquiry_coupon['coupon_name']); - } - } + }catch (\Throwable $e){ + throw new BusinessException($e->getMessage()); } return $result; diff --git a/app/Services/OrderProductService.php b/app/Services/OrderProductService.php index 0146835..6362607 100644 --- a/app/Services/OrderProductService.php +++ b/app/Services/OrderProductService.php @@ -40,12 +40,10 @@ class OrderProductService extends BaseService /** * 取消未支付的药品订单 * 外层需加事物 - * @param string|int $order_no 系统订单编号 + * @param string|int $order_no 订单编号 * @param string|int $cancel_reason 订单取消原因(1:主动取消 2:复核失败/库存不足 3:支付超时 * @param string $cancel_remarks 订单取消原因 * @return array - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function cancelUnpayProductOrder(string|int $order_no,string|int $cancel_reason,string $cancel_remarks): array { @@ -59,36 +57,36 @@ class OrderProductService extends BaseService $order_product = OrderProduct::getOne($params); if (empty($order_product)){ $result['status'] = 0; - $result['message'] = "取消未支付的问诊订单失败:未查询到对应订单数据"; + $result['message'] = "未查询到对应订单数据"; return $result; } // 检测订单状态 if ($order_product['order_product_status'] == 5){ // 订单状态(1:待支付 2:待发货 3:已发货 4:已签收 5:已取消) - $result['status'] = 2; - $result['message'] = "取消未支付的问诊订单:订单已取消"; + $result['status'] = 0; + $result['message'] = "订单已取消"; return $result; } if ($order_product['order_product_status'] != 1){ // 订单状态(1:待支付 2:待发货 3:已发货 4:已签收 5:已取消) $result['status'] = 0; - $result['message'] = "取消未支付的问诊订单:订单状态为" . $order_product['order_product_status'] . "无法执行"; + $result['message'] = "订单取消失败"; return $result; } if (!in_array($order_product['refund_status'],[0,4,5])) { // 商品订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) $result['status'] = 0; - $result['message'] = "取消未支付的问诊订单:订单正在退款中"; + $result['message'] = "订单正在退款中"; return $result; } if ($order_product['pay_status'] == 2) { // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - $result['status'] = 2; - $result['message'] = "取消未支付的问诊订单:订单已支付"; + $result['status'] = 0; + $result['message'] = "订单已支付"; return $result; } @@ -98,7 +96,7 @@ class OrderProductService extends BaseService $user_patient = UserPatient::getOne($params); if (empty($user_patient)){ $result['status'] = 0; - $result['message'] = "取消未支付的问诊订单失败:未查询到对应用户数据"; + $result['message'] = "未查询到对应用户数据"; return $result; } @@ -125,7 +123,7 @@ class OrderProductService extends BaseService $order_product_item = OrderProductItem::getList($params); if (empty($order_product_item)){ $result['status'] = 0; - $result['message'] = "取消未支付的问诊订单失败:未查询到对应订单商品订单列表"; + $result['message'] = "未查询到对应订单商品订单列表"; return $result; } @@ -136,7 +134,7 @@ class OrderProductService extends BaseService $product = Product::getOne($params); if (empty($product)){ $result['status'] = 0; - $result['message'] = "取消未支付的问诊订单失败:未查询到对应订单商品订单列表"; + $result['message'] = "未查询到对应订单商品订单列表"; return $result; } @@ -145,7 +143,7 @@ class OrderProductService extends BaseService $product_platform_amount = ProductPlatformAmount::getSharedLockOne($params); if (empty($product_platform_amount)){ $result['status'] = 0; - $result['message'] = "取消未支付的问诊订单失败:无商品库存数据"; + $result['message'] = "无商品库存数据"; return $result; } @@ -161,7 +159,7 @@ class OrderProductService extends BaseService $order_prescription = OrderPrescription::getOne($params); if (empty($order_prescription)){ $result['status'] = 0; - $result['message'] = "取消未支付的问诊订单失败:未查询到对应订单处方"; + $result['message'] = "未查询到对应订单处方"; return $result; } @@ -181,7 +179,7 @@ class OrderProductService extends BaseService $order_prescription_product = OrderPrescriptionProduct::getList($params); if (empty($order_prescription_product)) { $result['status'] = 0; - $result['message'] = "取消未支付的问诊订单失败:未查询到对应订单处方商品数据"; + $result['message'] = "未查询到对应订单处方商品数据"; return $result; } @@ -225,7 +223,7 @@ class OrderProductService extends BaseService * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ - public function OrderProductRefund(string $order_product_id, string $refund_reason): void + /*public function OrderProductRefund(string $order_product_id, string $refund_reason): void { // 获取药品订单数据 $params = array(); @@ -344,6 +342,99 @@ class OrderProductService extends BaseService $data = array(); $data['refund_status'] = $refund_status; + $params = array(); + $params['order_product_id'] = $order_product['order_product_id']; + OrderProduct::edit($params,$data); + }*/ + + /** + * 药品订单退款 + * @param string $order_product_id 药品订单id + * @param string $refund_reason 退款原因 + * @return void + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function OrderProductRefund(string $order_product_id, string $refund_reason): void + { + // 获取药品订单数据 + $params = array(); + $params['order_product_id'] = $order_product_id; + $order_product = OrderProduct::getOne($params); + if (empty($order_product)){ + throw new BusinessException("订单数据为空"); + } + + // 系统退款编号 + $generator = $this->container->get(IdGeneratorInterface::class); + $product_refund_no = $generator->generate(); + + // 检测订单金额 + if ($order_product['payment_amount_total'] <= 0){ + throw new BusinessException("订单金额错误"); + } + + // 发起退款 + $WechatPay = new WechatPay(1, 2); + + $options = array(); + $options['transaction_id'] = $order_product['escrow_trade_no']; + $options['out_refund_no'] = (string)$product_refund_no; + $options['reason'] = $refund_reason; + $options['amount'] = [ + 'refund' => (int)($order_product['payment_amount_total'] * 100), + 'total' => (int)($order_product['payment_amount_total'] * 100), + 'currency' => "CNY", + ]; + + $result = $WechatPay->refund($options); + + // 处理订单退款状态 + // 商品订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + $success_time = ""; + if ($result['status'] == "SUCCESS") { + // 退款成功 + $refund_status = 3; + $success_time = $result['success_time']; + } elseif ($result['status'] == "CLOSED") { + // 退款关闭 + $refund_status = 5; + } elseif ($result['status'] == "PROCESSING") { + // 退款处理中 + $refund_status = 2; + } elseif ($result['status'] == "ABNORMAL") { + // 退款异常,此情况不处理,进行短信通知 + throw new BusinessException("订单退款状态异常"); + } else { + throw new BusinessException("订单退款状态错误"); + } + + $refund_id = $result['refund_id']; + + // 新增退款表 + $data = array(); + $data['patient_id'] = $order_product['patient_id']; + $data['order_product_id'] = $order_product['order_product_id']; + $data['order_product_no'] = $order_product['order_product_no']; + $data['product_refund_no'] = $product_refund_no; + $data['refund_id'] = $refund_id; + $data['product_refund_status'] = $refund_status; + $data['refund_total'] = $order_product['payment_amount_total']; + $data['refund_reason'] = $refund_reason; + + if ($refund_status == 3 && !empty($success_time)) { + $data['success_time'] = date("Y-m-d H:i:s", strtotime($success_time)); // 退款成功时间 + } + + $order_product_refund = OrderProductRefund::addOrderProductRefund($data); + if (empty($order_product_refund)) { + throw new BusinessException("添加退款表失败"); + } + + // 修改药品订单表状态 + $data = array(); + $data['refund_status'] = $refund_status; + $params = array(); $params['order_product_id'] = $order_product['order_product_id']; OrderProduct::edit($params,$data); diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php new file mode 100644 index 0000000..d6e6fa1 --- /dev/null +++ b/app/Services/OrderService.php @@ -0,0 +1,634 @@ +cancelUnpayInquiryOrder($order['order_id'], $cancel_reason, $cancel_remarks); + } elseif ($order['order_type'] == 2) { + // 药品订单 + $OrderProductService = new OrderProductService(); + $result = $OrderProductService->cancelUnpayProductOrder($order['order_id'], $cancel_reason, $cancel_remarks); + } elseif ($order['order_type'] == 3) { + // 检测订单 + $DetectionService = new DetectionService(); + $result = $DetectionService->cancelUnpayDetectionOrder($order['order_id'], $cancel_reason, $cancel_remarks); + } + } catch (\Throwable $e) { + $result['status'] = 0; + $result['message'] = $e->getMessage(); + } + + return $result; + } + + /** + * 发起订单退款 + * @param string $order_no + * @param string $refund_reason + * @return void + */ + public function orderRefund(string $order_no, string $refund_reason): void + { + // 检测参数 + try { + // 获取订单数据 + $params = array(); + $params['order_no'] = $order_no; + $order = Order::getOne($params); + if (empty($order)) { + throw new BusinessException("未查询到对应订单数据"); + } + + // 检测订单退款状态 + if (in_array($order['refund_status'], [2, 3, 5])) { + // 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + throw new BusinessException("订单退款状态错误"); + } + + // 检测支付状态 + if ($order['pay_status'] != 2) { + // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + throw new BusinessException("订单支付状态错误"); + } + + // 取消订单 + $order_data = array(); + $order_data['cancel_status'] = 1; + $order_data['cancel_time'] = date("Y-m-d H:i:s", time()); + $order_data['cancel_remarks'] = "医生未接诊"; + $order_data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_id'] = $order['order_id']; + Order::edit($params, $order_data); + + // 处理对应订单 + if ($order['order_type'] == 1) { + // 检测问诊订单可退款状态 + $this->checkOrderInquiryStatusForRefund($order['order_no']); + } elseif ($order['order_type'] == 2) { + // 检测药品订单可退款状态 + $this->checkOrderProductStatusForRefund($order['order_no']); + } elseif ($order['order_type'] == 3) { + // 检测检测订单可退款状态 + $this->checkOrderDetectionStatusForRefund($order['order_no']); + } else { + throw new BusinessException("订单类型错误"); + } + }catch (\Throwable $e){ + throw new BusinessException($e->getMessage()); + } + + try { + // 系统退款编号 + $generator = $this->container->get(IdGeneratorInterface::class); + $refund_no = $generator->generate(); + + // 检测订单金额 + if ($order['payment_amount_total'] > 0) { + // 发起退款 + $WechatPay = new WechatPay(1, $order['order_type']); + + $options = array(); + $options['transaction_id'] = $order['escrow_trade_no']; + $options['out_refund_no'] = $refund_no; + $options['reason'] = $refund_reason; + $options['amount'] = [ + 'refund' => (int)round($order['payment_amount_total'] * 100), + 'total' => (int)round($order['payment_amount_total'] * 100), + 'currency' => "CNY", + ]; + + $refund_result = $WechatPay->refund($options); + + // 处理订单退款状态 + // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + $success_time = ""; + if ($refund_result['status'] == "SUCCESS") { + // 退款成功 + $refund_status = 3; + $success_time = $refund_result['success_time']; + } elseif ($refund_result['status'] == "CLOSED") { + // 退款关闭 + $refund_status = 5; + } elseif ($refund_result['status'] == "PROCESSING") { + // 退款处理中 + $refund_status = 2; + } elseif ($refund_result['status'] == "ABNORMAL") { + // 退款异常,此情况不处理,进行短信通知 + throw new BusinessException("订单退款状态异常"); + } else { + throw new BusinessException("订单退款状态错误"); + } + + $refund_id = $refund_result['refund_id']; + } else { + // 药品订单不存在模拟退款 + if ($order['order_type'] == 2){ + throw new BusinessException("订单金额错误"); + } + + // 模拟退款 + $refund_status = 3; + + $generator = $this->container->get(IdGeneratorInterface::class); + $refund_id = "模拟退款:" . $generator->generate(); + $success_time = date("Y-m-d H:i:s", time()); + + // 模拟退款时手动退还优惠卷 + if (!empty($order['coupon_amount_total']) && $order['coupon_amount_total'] > 0) { + // 获取该订单全部优惠卷数据 + $params = array(); + $params['order_id'] = $order['order_id']; + $order_coupons = OrderCoupon::getList($params); + if (!empty($order_coupons)) { + $userCouponService = new UserCouponService(); + foreach ($order_coupons as $order_coupon) { + // 退还优惠卷 + $userCouponService->returnUserCoupon($order_coupon['user_coupon_id']); + + // 发送站内消息-优惠卷退还 + $MessagePush = new MessagePush($order_coupon['user_id']); + $MessagePush->patientRefundCoupon($order_coupon['coupon_name']); + } + } + } + } + + // 新增退款表 + $data = array(); + $data['order_id'] = $order['order_id']; + $data['patient_id'] = $order['patient_id']; + $data['order_no'] = $order['order_no']; + $data['refund_no'] = $refund_no; + $data['inquiry_refund_no'] = $refund_no; + $data['refund_id'] = $refund_id; + $data['refund_status'] = $refund_status; + $data['refund_total'] = $order['payment_amount_total']; + $data['refund_reason'] = $refund_reason; + if ($refund_status == 3 && !empty($success_time)) { + $data['success_time'] = date("Y-m-d H:i:s", strtotime($success_time)); // 退款成功时间 + } + $order_refund = OrderRefund::addOrderRefund($data); + if (empty($order_refund)) { + throw new BusinessException("添加退款表失败"); + } + + switch ($order['order_type']) { + case 1: // 问诊订单 + // 获取订单数据 + $params = array(); + $params['inquiry_no'] = $order_no; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + throw new BusinessException("订单数据为空"); + } + + // 新增退款表 + $data = array(); + $data['patient_id'] = $order['patient_id']; + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $data['inquiry_no'] = $order_inquiry['inquiry_no']; + $data['inquiry_refund_no'] = $refund_no; + $data['refund_id'] = $refund_id; + $data['inquiry_refund_status'] = $refund_status; + $data['refund_total'] = $order_inquiry['payment_amount_total']; + $data['refund_reason'] = $refund_reason; + + if ($refund_status == 3 && !empty($success_time)) { + $data['success_time'] = date("Y-m-d H:i:s", strtotime($success_time)); // 退款成功时间 + } + + $order_inquiry_refund = OrderInquiryRefund::addOrderInquiryRefund($data); + if (empty($order_inquiry_refund)) { + throw new BusinessException("添加退款表失败"); + } + + // 修改问诊订单表状态 + $data = array(); + $data['inquiry_refund_status'] = $refund_status; + + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + OrderInquiry::edit($params, $data); + + break; + case 2: // 药品订单 + // 获取药品订单数据 + $params = array(); + $params['order_product_no'] = $order['order_no']; + $order_product = OrderProduct::getOne($params); + if (empty($order_product)){ + throw new BusinessException("订单数据为空"); + } + + $data = array(); + $data['patient_id'] = $order_product['patient_id']; + $data['order_product_id'] = $order_product['order_product_id']; + $data['order_product_no'] = $order_product['order_product_no']; + $data['product_refund_no'] = $refund_no; + $data['refund_id'] = $refund_id; + $data['product_refund_status'] = $refund_status; + $data['refund_total'] = $order_product['payment_amount_total']; + $data['refund_reason'] = $refund_reason; + + if ($refund_status == 3 && !empty($success_time)) { + $data['success_time'] = date("Y-m-d H:i:s", strtotime($success_time)); // 退款成功时间 + } + + $order_product_refund = OrderProductRefund::addOrderProductRefund($data); + if (empty($order_product_refund)) { + throw new BusinessException("添加退款表失败"); + } + + // 修改药品订单表状态 + $data = array(); + $data['refund_status'] = $refund_status; + + $params = array(); + $params['order_product_id'] = $order_product['order_product_id']; + OrderProduct::edit($params,$data); + + break; + case 3: // 检测订单 + // 获取订单数据 + $params = array(); + $params['detection_no'] = $order_no; + $order_detection = OrderDetection::getOne($params); + if (empty($order_detection)) { + throw new BusinessException("订单数据为空"); + } + + // 新增退款表 + $data = array(); + $data['patient_id'] = $order['patient_id']; + $data['order_detection_id'] = $order_detection['order_detection_id']; + $data['detection_no'] = $order_detection['detection_no']; + $data['detection_refund_no'] = $refund_no; + $data['refund_id'] = $refund_id; + $data['detection_refund_status'] = $refund_status; + $data['refund_total'] = $order_detection['payment_amount_total']; + $data['refund_reason'] = $refund_reason; + if ($refund_status == 3 && !empty($success_time)) { + $data['success_time'] = date("Y-m-d H:i:s", strtotime($success_time)); // 退款成功时间 + } + $order_detection_refund = OrderDetectionRefund::add($data); + if (empty($order_detection_refund)) { + throw new BusinessException("添加退款表失败"); + } + + // 修改问诊订单表状态 + $data = array(); + $data['detection_refund_status'] = $refund_status; + + $params = array(); + $params['order_detection_id'] = $order_detection['order_detection_id']; + OrderDetection::editOrderDetection($params, $data); + + break; + default: + throw new BusinessException("订单类型错误"); + } + + } catch (\Throwable $e) { + throw new BusinessException($e->getMessage()); + } + } + + /** + * 处理订单退款回调结果 + * @param string $order_no + * @param string|int $refund_status + * @param string $success_time + * @return void + */ + public function orderRefundResult(string $order_no,string|int $refund_status,string $success_time): void + { + // 获取订单数据 + $params = array(); + $params['order_no'] = $order_no; + $order = Order::getOne($params); + if (empty($order)) { + throw new BusinessException("未查询到对应订单数据"); + } + + // 退款状态 + if ($refund_status == "SUCCESS") { + // 退款成功 + $refund_status = 3; + } elseif ($refund_status == "CLOSED") { + // 退款关闭 + $refund_status = 5; + } elseif ($refund_status == "ABNORMAL") { + // 退款异常 + $refund_status = 6; + } else{ + // 错误,无退款状态 + throw new BusinessException("退款状态错误"); + } + + // 修改订单 + $data = array(); + $data['refund_status'] = $refund_status; + + $params = array(); + $params['order_no'] = $order['order_no']; + Order::edit($params,$data); + + // 修改订单退款表 + $data = array(); + $data['refund_status'] = $refund_status; + $data['success_time'] = $success_time; + + $params = array(); + $params['order_no'] = $order['order_no']; + OrderRefund::edit($params, $data); + + // 处理对应订单 + switch ($order['order_type']) { + case 1: // 问诊订单 + // 修改订单 + $data = array(); + $data['inquiry_refund_status'] = $refund_status; + + $params = array(); + $params['inquiry_no'] = $order['order_no']; + OrderInquiry::edit($params, $data); + + // 修改退款订单 + $data = array(); + $data['inquiry_refund_status'] = $refund_status; + $data['success_time'] = $success_time; + + $params = array(); + $params['inquiry_no'] = $order['order_no']; + OrderInquiryRefund::edit($params, $data); + + break; + case 2: // 药品订单 + // 修改订单 + $data = array(); + $data['refund_status'] = $refund_status; + + $params = array(); + $params['order_product_no'] = $order['order_no']; + OrderProduct::edit($params, $data); + + // 修改退款订单 + $data = array(); + $data['product_refund_status'] = $refund_status; + $data['success_time'] = $success_time; + + $params = array(); + $params['order_product_no'] = $order['order_no']; + OrderProductRefund::edit($params, $data); + + break; + case 3: // 检测订单 + // 修改订单 + $data = array(); + $data['detection_refund_status'] = $refund_status; + + $params = array(); + $params['detection_no'] = $order['order_no']; + OrderDetection::editOrderDetection($params, $data); + + // 修改退款订单 + $data = array(); + $data['detection_refund_status'] = $refund_status; + $data['success_time'] = $success_time; + + $params = array(); + $params['detection_no'] = $order['order_no']; + OrderDetectionRefund::edit($params, $data); + + break; + default: + throw new BusinessException("订单类型错误"); + } + + // 恢复优惠卷 + if ($refund_status == 3) { + if (!empty($order['coupon_amount_total']) && $order['coupon_amount_total'] > 0) { + // 获取该订单全部优惠卷数据 + $params = array(); + $params['order_id'] = $order['order_id']; + $order_coupons = OrderCoupon::getList($params); + if (!empty($order_coupons)){ + $userCouponService = new UserCouponService(); + foreach ($order_coupons as $order_coupon){ + // 退还优惠卷 + $userCouponService->returnUserCoupon($order_coupon['user_coupon_id']); + + try { + // 发送站内消息-优惠卷退还 + $MessagePush = new MessagePush($order_coupon['user_id']); + $MessagePush->patientRefundCoupon($order_coupon['coupon_name']); + }catch (\Throwable $e){ + // 此处不处理错误 + Log::getInstance("CallBack-wxPayInquiryRefund")->error("推送消息失败:" . $e->getMessage()); + } + } + } + } + } + } + + + /** + * 检测问诊订单可退款状态 + * @param string $order_no + */ + public function checkOrderInquiryStatusForRefund(string $order_no): void + { + // 获取订单数据 + $params = array(); + $params['inquiry_no'] = $order_no; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + throw new BusinessException("订单数据为空"); + } + + // 检测问诊订单状态 + if (!in_array($order_inquiry['inquiry_status'], [2, 3, 4, 5, 7])) { + // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + throw new BusinessException("订单状态错误"); + } + + // 检测订单退款状态 + if (in_array($order_inquiry['inquiry_refund_status'], [2, 3, 5])) { + // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + throw new BusinessException("订单退款状态错误"); + } + + // 检测支付状态 + if ($order_inquiry['inquiry_pay_status'] != 2) { + // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + throw new BusinessException("订单支付状态错误"); + } + } + + /** + * 检测药品订单可退款状态 + * @param string $order_no + */ + public function checkOrderProductStatusForRefund(string $order_no): void + { + // 获取药品订单数据 + $params = array(); + $params['order_product_no'] = $order_no; + $order_product = OrderProduct::getOne($params); + if (empty($order_product)){ + throw new BusinessException("订单数据为空"); + } + + // 检测药品订单数据状态 + if ($order_product['order_product_status'] == 1){ + throw new BusinessException("订单未支付"); + } + + if ($order_product['order_product_status'] == 4){ + throw new BusinessException("订单已签收"); + } + + // 检测商品订单退款状态 + if ($order_product['refund_status'] == 2){ + // 商品订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + throw new BusinessException("订单退款中"); + } + + if ($order_product['refund_status'] == 3){ + // 商品订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + throw new BusinessException("订单已退款成功"); + } + + if ($order_product['refund_status'] == 5){ + // 商品订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + throw new BusinessException("订单退款关闭"); + } + + // 检测支付状态 + if ($order_product['pay_status'] != 2){ + // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + throw new BusinessException("订单支付状态错误,无法退款"); + } + } + + /** + * 检测检测订单可退款状态 + * @param string $order_no + */ + public function checkOrderDetectionStatusForRefund(string $order_no): void + { + // 获取订单数据 + $params = array(); + $params['detection_no'] = $order_no; + $order_detection = OrderDetection::getOne($params); + if (empty($order_detection)) { + throw new BusinessException("订单数据为空"); + } + + // 检测问诊订单状态 + if (!in_array($order_detection['detection_status'], [2, 5])) { + // 检测订单状态(1:待支付 2:待绑定 3:检测中 4:检测完成 5:已取消) + throw new BusinessException("订单状态错误"); + } + + // 检测订单退款状态 + if (in_array($order_detection['detection_refund_status'], [2, 3, 5, 6])) { + // 检测订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + throw new BusinessException("订单退款状态错误"); + } + + // 检测支付状态 + if ($order_detection['detection_pay_status'] != 2) { + // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + throw new BusinessException("订单支付状态错误"); + } + } +} \ No newline at end of file diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index e827b85..23e4042 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -11,6 +11,8 @@ use App\Model\BasicLogisticsCompany; use App\Model\DetectionProject; use App\Model\DoctorInquiryConfig; use App\Model\Hospital; +use App\Model\Order; +use App\Model\OrderCoupon; use App\Model\OrderDetection; use App\Model\OrderInquiry; use App\Model\OrderInquiryCase; @@ -355,11 +357,22 @@ class PatientOrderService extends BaseService $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; OrderInquiry::edit($params, $data); + // 修改订单为取消 + $data = array(); + $data['cancel_status'] = 1; + $data['cancel_time'] = date("Y-m-d H:i:s", time()); + $data['cancel_remarks'] = "主动取消"; // 取消订单备注 + $data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_no'] = $order_inquiry['inquiry_no']; + Order::edit($params, $data); + // 检测支付状态,判断是否需要退款处理 if ($order_inquiry['inquiry_pay_status'] == 2 && $order_inquiry['inquiry_refund_status'] != 3) { // 需退款 - $inquiryService = new InquiryService(); - $inquiryService->inquiryRefund($order_inquiry['order_inquiry_id'], "取消问诊"); + $OrderService = new OrderService(); + $OrderService->orderRefund($order_inquiry['inquiry_no'], "取消问诊"); } // 删除锁 @@ -422,14 +435,28 @@ class PatientOrderService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "订单无法删除"); } - // 修改订单删除状态 - $data = array(); - $data['is_delete'] = 1; + Db::beginTransaction(); + try { + // 修改问诊订单删除状态 + $data = array(); + $data['is_delete'] = 1; - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + OrderInquiry::edit($params, $data); - OrderInquiry::edit($params, $data); + $data = array(); + $data['is_delete'] = 1; + + $params = array(); + $params['order_no'] = $order_inquiry['inquiry_no']; + Order::edit($params, $data); + + Db::commit(); + }catch (\Throwable $e){ + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR,$e->getMessage()); + } return success(); } @@ -437,8 +464,6 @@ class PatientOrderService extends BaseService /** * 问诊订单取消支付 * @return array - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function putPatientInquiryOrderCancelPay(): array { @@ -459,9 +484,8 @@ class PatientOrderService extends BaseService return fail(); } - $InquiryService = new InquiryService(); - $result = $InquiryService->cancelUnpayInquiryOrder($order_inquiry['inquiry_no'], 2, "主动取消"); - + $OrderService = new OrderService(); + $result = $OrderService->cancelUnpayOrder($order_inquiry['inquiry_no'],2,"主动取消"); if ($result['status'] != 1) { Db::rollBack(); return fail(); @@ -634,9 +658,9 @@ class PatientOrderService extends BaseService Db::rollBack(); return fail(); } - $OrderProductService = new OrderProductService(); - $result = $OrderProductService->cancelUnpayProductOrder($order_product['order_product_no'], 1, "主动取消"); + $OrderService = new OrderService(); + $result = $OrderService->cancelUnpayOrder($order_product['order_product_no'], 1, "主动取消"); if ($result['status'] != 1) { Db::rollBack(); return fail(); @@ -679,14 +703,30 @@ class PatientOrderService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "订单无法删除"); } - // 修改订单状态 - $data = array(); - $data['is_delete'] = 1; - $data['updated_at'] = date("Y-m-d H:i:s", time()); + Db::beginTransaction(); + try { + // 修改药品订单状态 + $data = array(); + $data['is_delete'] = 1; + $data['updated_at'] = date("Y-m-d H:i:s", time()); - $params = array(); - $params['order_product_id'] = $order_product_id; - OrderProduct::edit($params, $data); + $params = array(); + $params['order_product_id'] = $order_product_id; + OrderProduct::edit($params, $data); + + $data = array(); + $data['is_delete'] = 1; + $data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_no'] = $order_product['order_product_no']; + Order::edit($params, $data); + + Db::commit(); + }catch (\Throwable $e){ + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR,$e->getMessage()); + } return success(); } @@ -972,11 +1012,10 @@ class PatientOrderService extends BaseService } /** - *模拟支付成功-金额为0时使用 + *模拟支付成功-金额为0时使用-问诊订单 * @return array * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface - * @throws GuzzleException */ public function addPatientOrderPay(): array { @@ -1019,8 +1058,8 @@ class PatientOrderService extends BaseService } $generator = $this->container->get(IdGeneratorInterface::class); - - // 修改支付状态 + $escrow_trade_no = "GD" . $generator->generate(); // 第三方支付流水号 + // 修改问诊订单支付状态 $data = array(); $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) $data['inquiry_pay_status'] = 2; @@ -1032,13 +1071,25 @@ class PatientOrderService extends BaseService $data['inquiry_status'] = 2;// 2:待分配 } - $data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号 + $data['escrow_trade_no'] = $escrow_trade_no; $data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间 $data['updated_at'] = date('Y-m-d H:i:s', time()); $params = array(); $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; OrderInquiry::edit($params, $data); + // 修改订单表支付状态 + $data = array(); + $data['pay_status'] = 2; + $data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间 + $data['escrow_trade_no'] = $escrow_trade_no; + $data['updated_at'] = date('Y-m-d H:i:s', time()); + + $params = array(); + $params['order_no'] = $order_inquiry['inquiry_no']; + Order::edit($params,$data); + + // 处理队列 if ($order_inquiry['inquiry_type'] == 2 || $order_inquiry['inquiry_type'] == 4) { // 快速-购药 // 加入分配医生队列 @@ -1083,8 +1134,6 @@ class PatientOrderService extends BaseService $message->setDelayMs($time); $producer = $this->container->get(Producer::class); $producer->produce($message); - - Log::getInstance()->info("发送im消息成功"); } Db::commit(); @@ -1237,6 +1286,8 @@ class PatientOrderService extends BaseService $pay_channel = 1; } elseif ($client_type == 2) { $pay_channel = 2; + }else{ + return fail(HttpEnumCode::HTTP_ERROR, "支付方式错误"); } Db::beginTransaction(); @@ -1244,6 +1295,24 @@ class PatientOrderService extends BaseService $generator = $this->container->get(IdGeneratorInterface::class); try { + // 生成订单表 + $data = array(); + $data['user_id'] = $user_info['user_id']; + $data['patient_id'] = $order_prescription['patient_id']; + $data['doctor_id'] = $order_prescription['doctor_id']; + $data['order_type'] = 2; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) + $data['inquiry_pay_channel'] = $pay_channel;// 支付渠道(1:小程序支付 2:微信扫码支付) + $data['pay_status'] = 1;// 1:待支付 + $data['order_no'] = "P" . $generator->generate();// 订单编号 + $data['amount_total'] = $amount_total;// 订单金额 + $data['coupon_amount_total'] = $coupon_amount_total;// 优惠卷总金额 + $data['payment_amount_total'] = $payment_amount_total;// 实际付款金额 + $order = Order::addOrder($data); + if (empty($order)) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + // 新增药品订单 $data = array(); $data['order_inquiry_id'] = $order_prescription['order_inquiry_id']; @@ -1251,7 +1320,7 @@ class PatientOrderService extends BaseService $data['doctor_id'] = $order_prescription['doctor_id']; $data['patient_id'] = $order_prescription['patient_id']; $data['family_id'] = $order_prescription['family_id']; - $data['order_product_no'] = $generator->generate(); + $data['order_product_no'] = $order['order_no']; $data['order_product_status'] = 1; // 订单状态(1:待支付 2:待发货 3:已发货 4:已签收 5:已取消) $data['pay_channel'] = $pay_channel; // 支付渠道(1:小程序支付 2:微信扫码支付) $data['amount_total'] = $amount_total; // 订单金额 @@ -1347,6 +1416,18 @@ class PatientOrderService extends BaseService // 处理优惠卷数据 if (!empty($user_coupons)) { foreach ($user_coupons as $user_coupon){ + // 增加订单优惠卷表 + $data = array(); + $data['order_id'] = $order['order_id'];// 订单id + $data['user_coupon_id'] = $user_coupon['user_coupon_id']; + $data['coupon_name'] = $user_coupon['coupon_name']; + $data['coupon_use_price'] = $user_coupon['coupon_price']; + $order_coupon = OrderCoupon::addOrderCoupon($data); + if (empty($order_coupon)) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + // 增加问诊优惠卷表 $data = array(); $data['order_product_id'] = $order_product['order_product_id'];// 订单-商品id @@ -1974,14 +2055,29 @@ class PatientOrderService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "订单无法删除"); } - // 修改订单删除状态 - $data = array(); - $data['is_delete'] = 1; + Db::beginTransaction(); + try { + // 修改检测订单删除状态 + $data = array(); + $data['is_delete'] = 1; - $params = array(); - $params['order_detection_id'] = $order_detection['order_detection_id']; + $params = array(); + $params['order_detection_id'] = $order_detection['order_detection_id']; + OrderDetection::editOrderDetection($params, $data); - OrderDetection::editOrderDetection($params, $data); + $data = array(); + $data['is_delete'] = 1; + $data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_no'] = $order_detection['detection_no']; + Order::edit($params, $data); + + Db::commit(); + }catch (\Throwable $e){ + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR,$e->getMessage()); + } return success(); } @@ -2041,18 +2137,29 @@ class PatientOrderService extends BaseService $data = array(); $data['detection_status'] = 5; $data['cancel_time'] = date("Y-m-d H:i:s", time()); - $data['cancel_reason'] = 2; // 取消订单原因(1:主动取消 2:客服取消 3:支付超时) + $data['cancel_reason'] = 1; // 取消订单原因(1:主动取消 2:客服取消 3:支付超时) $data['updated_at'] = date("Y-m-d H:i:s", time()); $params = array(); $params['order_detection_id'] = $order_detection['order_detection_id']; OrderDetection::editOrderDetection($params, $data); + // 修改订单为取消 + $data = array(); + $data['cancel_status'] = 1; + $data['cancel_time'] = date("Y-m-d H:i:s", time()); + $data['cancel_remarks'] = "主动取消"; // 取消订单备注 + $data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_no'] = $order_detection['detection_no']; + Order::edit($params, $data); + // 检测支付状态,判断是否需要退款处理 if ($order_detection['detection_pay_status'] == 2 && $order_detection['detection_refund_status'] != 3) { // 需退款 - $detectionService = new DetectionService(); - $detectionService->detectionRefund($order_detection['order_detection_id'], "取消检测"); + $OrderService = new OrderService(); + $OrderService->orderRefund($order_detection['detection_no'],"取消检测"); } // 删除锁 diff --git a/app/Utils/Utils.php b/app/Utils/Utils.php new file mode 100644 index 0000000..b091b8d --- /dev/null +++ b/app/Utils/Utils.php @@ -0,0 +1,48 @@ +get(Redis::class); + + $redis_value = $redis->get($redis_key); + if (empty($redis_value)) { + $redis->set($redis_key, 1, 60 * 60 * 24 * 1); + return true; + } + + // 问诊订单执行退款次数过多 + if ($redis_value > 3) { + // 加入短信队列,通知管理员 + + // 返回false,删除掉缓存 + $redis->del($redis_key); + return false; + } + + $redis->incr($redis_key); + } catch (\Throwable $e) { + Log::getInstance("Utils-checkHandleNumber")->error($e->getMessage()); + return false; + } + + return true; + } +} \ No newline at end of file From c918a8a31e96cda7fcfb38f11187a77c72dd4382 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 8 Apr 2024 15:32:47 +0800 Subject: [PATCH 015/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E6=9C=AA=E6=94=AF=E4=BB=98=E7=9A=84=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderService.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index d6e6fa1..a08270a 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -88,15 +88,18 @@ class OrderService extends BaseService if ($order['order_type'] == 1) { // 问诊订单 $InquiryService = new InquiryService(); - $result = $InquiryService->cancelUnpayInquiryOrder($order['order_id'], $cancel_reason, $cancel_remarks); + $result = $InquiryService->cancelUnpayInquiryOrder($order['order_no'], $cancel_reason, $cancel_remarks); } elseif ($order['order_type'] == 2) { // 药品订单 $OrderProductService = new OrderProductService(); - $result = $OrderProductService->cancelUnpayProductOrder($order['order_id'], $cancel_reason, $cancel_remarks); + $result = $OrderProductService->cancelUnpayProductOrder($order['order_no'], $cancel_reason, $cancel_remarks); } elseif ($order['order_type'] == 3) { // 检测订单 $DetectionService = new DetectionService(); - $result = $DetectionService->cancelUnpayDetectionOrder($order['order_id'], $cancel_reason, $cancel_remarks); + $result = $DetectionService->cancelUnpayDetectionOrder($order['order_no'], $cancel_reason, $cancel_remarks); + }else{ + $result['status'] = 0; + $result['message'] = "订单类型错误"; } } catch (\Throwable $e) { $result['status'] = 0; From b9a22ea667197efc6aceef10a78337461fc7029d Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 8 Apr 2024 15:38:24 +0800 Subject: [PATCH 016/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E6=9C=AA=E6=94=AF=E4=BB=98=E7=9A=84=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DetectionService.php | 4 ++-- app/Services/InquiryService.php | 2 +- app/Services/PatientOrderService.php | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/Services/DetectionService.php b/app/Services/DetectionService.php index 97767d0..f8e920e 100644 --- a/app/Services/DetectionService.php +++ b/app/Services/DetectionService.php @@ -821,7 +821,7 @@ class DetectionService extends BaseService * @param string|int $cancel_remarks 取消备注 * @return array */ - public function cancelUnpayDetectionOrder(string|int $order_id, string|int $cancel_reason, string|int $cancel_remarks): array + public function cancelUnpayDetectionOrder(string|int $order_no, string|int $cancel_reason, string|int $cancel_remarks): array { $result = array(); $result['status'] = 1; @@ -829,7 +829,7 @@ class DetectionService extends BaseService // 获取检测订单数据 $params = array(); - $params['order_id'] = $order_id; + $params['detection_no'] = $order_no; $order_detection = OrderDetection::getOne($params); if (empty($order_detection)) { $result['status'] = 0; diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 3ebb594..4280170 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -1842,7 +1842,7 @@ class InquiryService extends BaseService // 获取问诊订单数据 $params = array(); - $params['order_no'] = $order_no; + $params['inquiry_no'] = $order_no; $order_inquiry = OrderInquiry::getOne($params); if (empty($order_inquiry)) { throw new BusinessException("未查询到对应订单数据"); diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 23e4042..b126cbd 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -488,7 +488,7 @@ class PatientOrderService extends BaseService $result = $OrderService->cancelUnpayOrder($order_inquiry['inquiry_no'],2,"主动取消"); if ($result['status'] != 1) { Db::rollBack(); - return fail(); + return fail(HttpEnumCode::HTTP_ERROR, $result['message']); } Db::commit(); @@ -663,7 +663,7 @@ class PatientOrderService extends BaseService $result = $OrderService->cancelUnpayOrder($order_product['order_product_no'], 1, "主动取消"); if ($result['status'] != 1) { Db::rollBack(); - return fail(); + return fail(HttpEnumCode::HTTP_ERROR, $result['message']); } Db::commit(); From dd01d8fe2d5490bb90cf6d4b2735e0a35c268894 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 8 Apr 2024 15:44:37 +0800 Subject: [PATCH 017/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E9=80=80=E6=AC=BE?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=8F=B7=E9=9D=9E=E5=AD=97=E7=AC=A6=E4=B8=B2?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index a08270a..accf11b 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -179,7 +179,7 @@ class OrderService extends BaseService $options = array(); $options['transaction_id'] = $order['escrow_trade_no']; - $options['out_refund_no'] = $refund_no; + $options['out_refund_no'] = (string)$refund_no; $options['reason'] = $refund_reason; $options['amount'] = [ 'refund' => (int)round($order['payment_amount_total'] * 100), From b2a9272723ef21533180a919675e0dc1596010bc Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 8 Apr 2024 15:53:35 +0800 Subject: [PATCH 018/274] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9C=AA=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E5=8F=96=E6=B6=88=E8=AE=A2=E5=8D=95=E5=BB=B6=E8=BF=9F?= =?UTF-8?q?=E9=98=9F=E5=88=97=E6=97=B6=E9=97=B4=E7=8E=AF=E5=A2=83=E5=8C=BA?= =?UTF-8?q?=E5=88=86=EF=BC=8C=E6=B5=8B=E8=AF=95=E7=8E=AF=E5=A2=835?= =?UTF-8?q?=E5=88=86=E9=92=9F=E3=80=82=E5=A2=9E=E5=8A=A0=E6=9C=AA=E6=8E=A5?= =?UTF-8?q?=E8=AF=8A=E5=8F=96=E6=B6=88=E8=AE=A2=E5=8D=95=E5=BB=B6=E8=BF=9F?= =?UTF-8?q?=E9=98=9F=E5=88=97=E6=97=B6=E9=97=B4=E7=8E=AF=E5=A2=83=E5=8C=BA?= =?UTF-8?q?=E5=88=86=EF=BC=8C=E6=B5=8B=E8=AF=95=E7=8E=AF=E5=A2=83=E4=B8=BA?= =?UTF-8?q?10=E5=88=86=E9=92=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/InquiryService.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 4280170..a341441 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -477,12 +477,17 @@ class InquiryService extends BaseService } // 增加至未支付取消订单延迟队列 + $time = 60 * 30; + if (\Hyperf\Config\config('app_env') == "dev"){ + $time = 60 * 5; + } + $data = array(); $data['order_no'] = $order_inquiry['inquiry_no']; $data['order_type'] = 1; $message = new CancelUnpayOrdersDelayDirectProducer($data); - $message->setDelayMs(1000 * 60 * 30); + $message->setDelayMs(1000 * $time); $producer = $this->container->get(Producer::class); $res = $producer->produce($message); if (!$res) { @@ -493,10 +498,15 @@ class InquiryService extends BaseService // 加入未接诊取消订单延迟队列 // 专家问诊-公益问诊 if (!empty($request_params['doctor_id']) && ($request_params['inquiry_type'] == 1 || $request_params['inquiry_type'] == 3)) { + $time = 60 * 60 * 24; + if (\Hyperf\Config\config('app_env') == "dev"){ + $time = 60 * 10; + } + $data = array(); $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $message = new CancelUnInquiryOrdersDelayDirectProducer($data); - $message->setDelayMs(1000 * 60 * 60 * 24); + $message->setDelayMs(1000 * $time); $producer = $this->container->get(Producer::class); $res = $producer->produce($message); if (!$res) { From f87de0a5958dee500915a6b5c285eb03ecf0051f Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 8 Apr 2024 16:30:42 +0800 Subject: [PATCH 019/274] =?UTF-8?q?=E6=9C=AA=E6=8E=A5=E8=AF=8A=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E8=AE=A2=E5=8D=95=E5=BB=B6=E8=BF=9F=E9=98=9F=E5=88=97?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E5=85=A5=E5=8F=82=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php | 1 + app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php | 2 +- app/Services/InquiryService.php | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php index c9726f3..340a651 100644 --- a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php @@ -252,6 +252,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage // 加入未接诊取消订单延迟队列 $data = array(); $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $data['order_no'] = $order_inquiry['inquiry_no']; $message = new CancelUnInquiryOrdersDelayDirectProducer($data); // 快速/购药-5分钟 $message->setDelayMs(1000 * 60 * 10); diff --git a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php index b3eef4a..8dacc25 100644 --- a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php @@ -57,7 +57,7 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage try { // 检测执行次数 $Utils = new Utils(); - $redis_key = "orderRefund" . $data['order_no']; + $redis_key = "orderRefund" . $data['order_inquiry_id']; $res = $Utils->checkHandleNumber($redis_key); if (!$res) { Log::getInstance("queue-CancelUnInquiryOrders")->error("超出最大执行次数或检测错误"); diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index a341441..6354093 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -505,6 +505,7 @@ class InquiryService extends BaseService $data = array(); $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $data['order_no'] = $order_inquiry['inquiry_no']; $message = new CancelUnInquiryOrdersDelayDirectProducer($data); $message->setDelayMs(1000 * $time); $producer = $this->container->get(Producer::class); From 8b37043113976bfc13a62794f3b22cf97d2795e3 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 8 Apr 2024 18:39:19 +0800 Subject: [PATCH 020/274] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorAccountService.php | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index 4872aee..a20d06e 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -59,23 +59,6 @@ class DoctorAccountService extends BaseService // 获取医生账户余额 $balance_account = $this->getDoctorBalanceAccount($user_info['client_user_id']); -// // 获取医生月度余额 -// $amount_total_month = $this->getDoctorMonthAmountTotal($user_info['client_user_id'], $date); -// -// // 获取医生月度已提现金额-审核通过时间为准 -// $params = array(); -// $params['doctor_id'] = $user_info['client_user_id']; -// -// $start_time = date('Y-m-01',strtotime($date)); -// $end_time = date('Y-m-t 24:00:00',strtotime($date)); -// $created_at = [$start_time,$end_time]; -// $doctor_withdrawal = DoctorWithdrawal::getOneLatestTime($params,$created_at,['*']); -// if (empty($doctor_withdrawal)) { -// $withdrawal_amount_month = 0; -// } else { -// $withdrawal_amount_month = $doctor_withdrawal['actual_withdrawal_amount']; -// } - // 获取医生每月账单数据 $bill = []; From ffeda6b0d8c8bc51df67b1af76cfc27e7674ef31 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 8 Apr 2024 20:38:19 +0800 Subject: [PATCH 021/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E5=8E=86=E5=8F=B2=E8=AE=A2=E5=8D=95=20=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Command/MoveOrderCommand.php | 586 +++++++++++++++++++++++++++++++ app/Common/Common.php | 21 +- 2 files changed, 606 insertions(+), 1 deletion(-) create mode 100644 app/Command/MoveOrderCommand.php diff --git a/app/Command/MoveOrderCommand.php b/app/Command/MoveOrderCommand.php new file mode 100644 index 0000000..6bddb37 --- /dev/null +++ b/app/Command/MoveOrderCommand.php @@ -0,0 +1,586 @@ +setDescription('迁移历史订单'); + } + + public function handle() + { + $this->line("开始"); + + // 处理问诊订单 +// $this->handleOrderInquiry(); + + // 处理问诊订单退款 +// $this->handleOrderInquiryRefund(); + + // 处理问诊订单优惠卷 +// $this->handleOrderInquiryCoupon(); + + // 处理药品订单 +// $this->handleOrderProduct(); + + // 处理药品订单退款 +// $this->handleOrderProductRefund(); + + // 处理药品订单优惠卷 +// $this->handleOrderProductCoupon(); + + // 处理检测订单 +// $this->handleOrderDetection(); + + // 处理检测订单退款 +// $this->handleOrderDetectionRefund(); + } + + /** + * 处理问诊订单 + * @return void + */ + public function handleOrderInquiry(): void + { + $params = array(); + $order_inquirys = OrderInquiry::getList($params); + if (empty($order_inquirys)){ + $this->line("无问诊订单需要执行"); + return; + } + + foreach ($order_inquirys as $order_inquiry){ + if (!empty($order_inquiry['order_id'])){ + // 已存在订单id,跳过 + continue; + } + + $params = array(); + $params['order_no'] = $order_inquiry['inquiry_no']; + $order = Order::getOne($params); + if (!empty($order)){ + // 已存在订单,跳过 + continue; + } + + Db::beginTransaction(); + try { + // 生成订单表 + $data = array(); + $data['user_id'] = $order_inquiry['user_id']; + $data['patient_id'] = $order_inquiry['patient_id']; + if (!empty($order_inquiry['doctor_id'])){ + $data['doctor_id'] = $order_inquiry['doctor_id']; + } + $data['order_type'] = 1; + $data['is_delete'] = $order_inquiry['is_delete']; // 删除状态(0:否 1:是) + $data['pay_channel'] = $order_inquiry['inquiry_pay_channel']; + $data['pay_status'] = $order_inquiry['inquiry_pay_status']; + $data['pay_time'] = $order_inquiry['pay_time']; + $data['refund_status'] = $order_inquiry['inquiry_refund_status']; + $data['order_no'] = $order_inquiry['inquiry_no']; + $data['escrow_trade_no'] = $order_inquiry['escrow_trade_no']; + $data['amount_total'] = $order_inquiry['amount_total']; + $data['coupon_amount_total'] = $order_inquiry['coupon_amount_total']; + $data['payment_amount_total'] = $order_inquiry['payment_amount_total']; + if ($order_inquiry['inquiry_status'] == 7){ + $data['cancel_status'] = 1; + } + $data['cancel_time'] = $order_inquiry['cancel_time']; + if (!empty($order_inquiry['cancel_reason'])){ + $data['cancel_remarks'] = inquiryCancelReasonToString($order_inquiry['cancel_reason']); + } + $order = Order::addOrder($data); + if (empty($order)) { + Db::rollBack(); + $this->line("添加问诊订单失败"); + } + + // 修改问诊订单表 + $data = array(); + $data['order_id'] = $order['order_id']; + + $params = array(); + $params['inquiry_no'] = $order['order_no']; + OrderInquiry::edit($params,$data); + + Db::commit(); + }catch (\Throwable $e){ + Db::rollBack(); + $this->line($e->getMessage()); + } + } + } + + /** + * 处理问诊订单退款 + * @return void + */ + public function handleOrderInquiryRefund(): void + { + $params = array(); + $order_inquiry_refunds = OrderInquiryRefund::getList($params); + if (empty($order_inquiry_refunds)){ + $this->line("无问诊退款订单需要执行"); + return; + } + + foreach ($order_inquiry_refunds as $order_inquiry_refund){ + $params = array(); + $params['order_no'] = $order_inquiry_refund['inquiry_no']; + $order_refund = OrderRefund::getOne($params); + if (!empty($order_refund)){ + // 已存在订单,跳过 + continue; + } + + // 获取订单数据 + $params = array(); + $params['order_no'] = $order_inquiry_refund['inquiry_no']; + $order = Order::getOne($params); + if (empty($order)){ + // 已存在订单,跳过 + $this->line("无对应订单数据"); + continue; + } + + Db::beginTransaction(); + try { + // 生成订单表 + $data = array(); + $data['order_id'] = $order['order_id']; + $data['patient_id'] = $order_inquiry_refund['patient_id']; + $data['order_no'] = $order['order_no']; + $data['refund_no'] = $order_inquiry_refund['inquiry_refund_no']; + $data['refund_id'] = $order_inquiry_refund['refund_id']; + $data['refund_status'] = $order_inquiry_refund['inquiry_refund_status']; + $data['refund_total'] = $order_inquiry_refund['refund_total']; + $data['refund_reason'] = $order_inquiry_refund['refund_reason']; + $data['success_time'] = $order_inquiry_refund['success_time']; + $order_refund = OrderRefund::addOrderRefund($data); + if (empty($order_refund)) { + Db::rollBack(); + $this->line("添加问诊退款订单失败"); + } + + Db::commit(); + }catch (\Throwable $e){ + Db::rollBack(); + $this->line($e->getMessage()); + } + } + } + + /** + * 处理问诊订单优惠卷 + * @return void + */ + public function handleOrderInquiryCoupon(): void + { + $params = array(); + $order_inquiry_coupons = OrderInquiryCoupon::getList($params); + if (empty($order_inquiry_coupons)){ + $this->line("无问诊订单优惠卷需要执行"); + return; + } + + foreach ($order_inquiry_coupons as $order_inquiry_coupon){ + // 获取问诊订单详情 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_coupon['order_inquiry_id']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)){ + $this->line("问诊订单数据错误"); + continue; + } + + // 获取订单数据 + $params = array(); + $params['order_no'] = $order_inquiry['inquiry_no']; + $order = Order::getOne($params); + if (empty($order)){ + $this->line("无对应订单数据"); + continue; + } + + Db::beginTransaction(); + try { + // 生成订单表 + $data = array(); + $data['order_id'] = $order['order_id']; + $data['user_coupon_id'] = $order_inquiry_coupon['user_coupon_id']; + $data['coupon_name'] = $order_inquiry_coupon['coupon_name']; + $data['coupon_use_price'] = $order_inquiry_coupon['coupon_use_price']; + $order_coupon = OrderCoupon::addOrderCoupon($data); + if (empty($order_coupon)) { + Db::rollBack(); + $this->line("添加问诊订单优惠卷失败"); + } + + Db::commit(); + }catch (\Throwable $e){ + Db::rollBack(); + $this->line($e->getMessage()); + } + } + } + + /** + * 处理药品订单 + * @return void + */ + public function handleOrderProduct(): void + { + $params = array(); + $order_products = OrderProduct::getList($params); + if (empty($order_products)){ + $this->line("无药品订单需要执行"); + return; + } + + foreach ($order_products as $order_product){ + if (!empty($order_product['order_id'])){ + // 已存在订单id,跳过 + continue; + } + + $params = array(); + $params['order_no'] = $order_product['order_product_no']; + $order = Order::getOne($params); + if (!empty($order)){ + // 已存在订单,跳过 + continue; + } + + // 获取问诊订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_product['order_inquiry_id']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)){ + $this->line("无问诊订单数据"); + continue; + } + + Db::beginTransaction(); + try { + // 生成订单表 + $data = array(); + $data['user_id'] = $order_inquiry['user_id']; + $data['patient_id'] = $order_product['patient_id']; + $data['doctor_id'] = $order_product['doctor_id']; + $data['order_type'] = 2; + $data['is_delete'] = $order_product['is_delete']; // 删除状态(0:否 1:是) + $data['pay_channel'] = $order_product['pay_channel']; + $data['pay_status'] = $order_product['pay_status']; + $data['pay_time'] = $order_product['pay_time']; + $data['refund_status'] = $order_product['refund_status']; + $data['order_no'] = $order_product['order_product_no']; + $data['escrow_trade_no'] = $order_product['escrow_trade_no']; + $data['amount_total'] = $order_product['amount_total']; + $data['coupon_amount_total'] = $order_product['coupon_amount_total']; + $data['payment_amount_total'] = $order_product['payment_amount_total']; + if ($order_inquiry['order_product_status'] == 5){ + $data['cancel_status'] = 1; + } + $data['cancel_time'] = $order_product['cancel_time']; + $data['cancel_remarks'] = $order_product['cancel_remarks']; + $order = Order::addOrder($data); + if (empty($order)) { + Db::rollBack(); + $this->line("添加药品订单失败"); + } + + // 修改药品订单表 + $data = array(); + $data['order_id'] = $order['order_id']; + + $params = array(); + $params['order_product_no'] = $order['order_no']; + OrderProduct::edit($params,$data); + + Db::commit(); + }catch (\Throwable $e){ + Db::rollBack(); + $this->line($e->getMessage()); + } + } + } + + /** + * 处理药品订单退款 + * @return void + */ + public function handleOrderProductRefund(): void + { + $params = array(); + $order_product_refunds = OrderProductRefund::getList($params); + if (empty($order_product_refunds)){ + $this->line("无问诊退款订单需要执行"); + return; + } + + foreach ($order_product_refunds as $order_product_refund){ + $params = array(); + $params['order_no'] = $order_product_refund['order_product_no']; + $order_refund = OrderRefund::getOne($params); + if (!empty($order_refund)){ + // 已存在订单,跳过 + continue; + } + + // 获取订单数据 + $params = array(); + $params['order_no'] = $order_product_refund['order_product_no']; + $order = Order::getOne($params); + if (empty($order)){ + // 已存在订单,跳过 + $this->line("无对应订单数据"); + continue; + } + + Db::beginTransaction(); + try { + // 生成订单表 + $data = array(); + $data['order_id'] = $order['order_id']; + $data['patient_id'] = $order_product_refund['patient_id']; + $data['order_no'] = $order['order_no']; + $data['refund_no'] = $order_product_refund['order_product_no']; + $data['refund_id'] = $order_product_refund['refund_id']; + $data['refund_status'] = $order_product_refund['product_refund_status']; + $data['refund_total'] = $order_product_refund['refund_total']; + $data['refund_reason'] = $order_product_refund['refund_reason']; + $data['success_time'] = $order_product_refund['success_time']; + $order_refund = OrderRefund::addOrderRefund($data); + if (empty($order_refund)) { + Db::rollBack(); + $this->line("添加药品退款订单失败"); + } + + Db::commit(); + }catch (\Throwable $e){ + Db::rollBack(); + $this->line($e->getMessage()); + } + } + } + + /** + * 处理药品订单优惠卷 + * @return void + */ + public function handleOrderProductCoupon(): void + { + $params = array(); + $order_product_coupons = OrderProductCoupon::getList($params); + if (empty($order_product_coupons)){ + $this->line("无药品订单优惠卷需要执行"); + return; + } + + foreach ($order_product_coupons as $order_product_coupon){ + // 获取问诊订单详情 + $params = array(); + $params['order_product_id'] = $order_product_coupon['order_product_id']; + $order_product = OrderProduct::getOne($params); + if (empty($order_product)){ + $this->line("药品订单数据错误"); + continue; + } + + // 获取订单数据 + $params = array(); + $params['order_no'] = $order_product['order_product_no']; + $order = Order::getOne($params); + if (empty($order)){ + $this->line("无对应订单数据"); + continue; + } + + Db::beginTransaction(); + try { + // 生成订单表 + $data = array(); + $data['order_id'] = $order['order_id']; + $data['user_coupon_id'] = $order_product_coupon['user_coupon_id']; + $data['coupon_name'] = $order_product_coupon['coupon_name']; + $data['coupon_use_price'] = $order_product_coupon['coupon_use_price']; + $order_coupon = OrderCoupon::addOrderCoupon($data); + if (empty($order_coupon)) { + Db::rollBack(); + $this->line("添加问诊订单优惠卷失败"); + } + + Db::commit(); + }catch (\Throwable $e){ + Db::rollBack(); + $this->line($e->getMessage()); + } + } + } + + /** + * 处理检测订单 + * @return void + */ + public function handleOrderDetection(): void + { + $params = array(); + $order_detections = OrderDetection::getList($params); + if (empty($order_detections)){ + $this->line("无检测订单需要执行"); + return; + } + + foreach ($order_detections as $order_detection){ + if (!empty($order_detection['order_id'])){ + // 已存在订单id,跳过 + continue; + } + + $params = array(); + $params['order_no'] = $order_detection['detection_no']; + $order = Order::getOne($params); + if (!empty($order)){ + // 已存在订单,跳过 + continue; + } + + Db::beginTransaction(); + try { + // 生成订单表 + $data = array(); + $data['user_id'] = $order_detection['user_id']; + $data['patient_id'] = $order_detection['patient_id']; + $data['doctor_id'] = $order_detection['doctor_id']; + $data['order_type'] = 3; + $data['is_delete'] = $order_detection['is_delete']; // 删除状态(0:否 1:是) + $data['pay_channel'] = $order_detection['detection_pay_channel']; + $data['pay_status'] = $order_detection['detection_pay_status']; + $data['pay_time'] = $order_detection['pay_time']; + $data['refund_status'] = $order_detection['detection_refund_status']; + $data['order_no'] = $order_detection['detection_no']; + $data['escrow_trade_no'] = $order_detection['escrow_trade_no']; + $data['amount_total'] = $order_detection['amount_total']; + $data['coupon_amount_total'] = $order_detection['coupon_amount_total']; + $data['payment_amount_total'] = $order_detection['payment_amount_total']; + if ($order_detection['detection_status'] == 5){ + $data['cancel_status'] = 1; + } + $data['cancel_time'] = $order_detection['cancel_time']; + if (!empty($order_detection['cancel_reason'])){ + $data['cancel_remarks'] = detectionCancelReasonToString($order_detection['cancel_reason']); + } + + $order = Order::addOrder($data); + if (empty($order)) { + Db::rollBack(); + $this->line("添加检测订单失败"); + } + + // 修改检测订单表 + $data = array(); + $data['order_id'] = $order['order_id']; + + $params = array(); + $params['detection_no'] = $order['order_no']; + OrderDetection::editOrderDetection($params,$data); + + Db::commit(); + }catch (\Throwable $e){ + Db::rollBack(); + $this->line($e->getMessage()); + } + } + } + + /** + * 处理检测订单退款 + * @return void + */ + public function handleOrderDetectionRefund(): void + { + $params = array(); + $order_detection_refunds = OrderDetectionRefund::getList($params); + if (empty($order_detection_refunds)){ + $this->line("无检测退款订单需要执行"); + return; + } + + foreach ($order_detection_refunds as $order_detection_refund){ + $params = array(); + $params['order_no'] = $order_detection_refund['detection_no']; + $order_refund = OrderRefund::getOne($params); + if (!empty($order_refund)){ + // 已存在订单,跳过 + continue; + } + + // 获取订单数据 + $params = array(); + $params['order_no'] = $order_detection_refund['detection_no']; + $order = Order::getOne($params); + if (empty($order)){ + // 已存在订单,跳过 + $this->line("无对应订单数据"); + continue; + } + + Db::beginTransaction(); + try { + // 生成订单表 + $data = array(); + $data['order_id'] = $order['order_id']; + $data['patient_id'] = $order_detection_refund['patient_id']; + $data['order_no'] = $order['order_no']; + $data['refund_no'] = $order_detection_refund['detection_refund_no']; + $data['refund_id'] = $order_detection_refund['refund_id']; + $data['refund_status'] = $order_detection_refund['detection_refund_status']; + $data['refund_total'] = $order_detection_refund['refund_total']; + $data['refund_reason'] = $order_detection_refund['refund_reason']; + $data['success_time'] = $order_detection_refund['success_time']; + $order_refund = OrderRefund::addOrderRefund($data); + if (empty($order_refund)) { + Db::rollBack(); + $this->line("添加检测退款订单失败"); + } + + Db::commit(); + }catch (\Throwable $e){ + Db::rollBack(); + $this->line($e->getMessage()); + } + } + } + +} diff --git a/app/Common/Common.php b/app/Common/Common.php index 2340160..8e29ab4 100644 --- a/app/Common/Common.php +++ b/app/Common/Common.php @@ -196,7 +196,7 @@ function inquiryCancelReasonToString(int|string $cancel_reason): string } elseif ($cancel_reason == 5) { $result = "支付超时"; } else { - $result = "未知"; + $result = NULL; } return $result; } @@ -245,6 +245,25 @@ function productCancelReasonToString(int|string $cancel_reason): string return $result; } +/** + * 转换检测订单取消原因-字符串 + * @param int|string $cancel_reason 取消订单原因(1:主动取消 2:客服取消 3:支付超时) + * @return string + */ +function detectionCancelReasonToString(int|string $cancel_reason): string +{ + if ($cancel_reason == 1) { + $result = "主动取消"; + } elseif ($cancel_reason == 2) { + $result = "客服取消"; + } elseif ($cancel_reason == 3) { + $result = "支付超时"; + } else { + $result = ""; + } + return $result; +} + /** * 转换性别至字符串 * @param string|int $sex From 969867435094e8db51c6a9f72a46d671b945dc66 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 9 Apr 2024 11:09:55 +0800 Subject: [PATCH 022/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=85=A5=E5=8F=82?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extend/Prescription/Prescription.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/extend/Prescription/Prescription.php b/extend/Prescription/Prescription.php index ce06eca..ba5bc6c 100644 --- a/extend/Prescription/Prescription.php +++ b/extend/Prescription/Prescription.php @@ -252,9 +252,11 @@ class Prescription /** * 请求封装 * @param string $path - * @param array $option + * @param array $arg * @return array + * @throws ContainerExceptionInterface * @throws GuzzleException + * @throws NotFoundExceptionInterface */ protected function httpRequest(string $path,array $arg = []): array { From 5509b036bebe569c0db599cc2f3f6422c9771eaf Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 9 Apr 2024 15:18:11 +0800 Subject: [PATCH 023/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/UserDoctor.php | 74 +++++++++++---------------- app/Services/DoctorInquiryService.php | 5 +- 2 files changed, 35 insertions(+), 44 deletions(-) diff --git a/app/Model/UserDoctor.php b/app/Model/UserDoctor.php index 50f6993..0100635 100644 --- a/app/Model/UserDoctor.php +++ b/app/Model/UserDoctor.php @@ -282,7 +282,6 @@ class UserDoctor extends Model // $query->where($params); // }); - if ($is_first_online == 1){ $query->join('user as u', function ($query) { $query->on('user_doctor.user_id', '=', 'u.user_id'); @@ -291,49 +290,38 @@ class UserDoctor extends Model ->orderBy('u.is_online', 'desc'); } - if (!empty($sort_order)){ -// if (in_array($sort_order,[1,3,4])){ -// $query = $query->join('doctor_inquiry_config', function ($query) { -// $query->on('user_doctor.doctor_id', '=', 'doctor_inquiry_config.doctor_id') -// ->whereIn('inquiry_type', [1, 3]) -// ->whereIn('inquiry_mode', [1,2,6,7]) -// ->orderBy('inquiry_price', 'desc') -// ->take(1); -// }) -// ->select("user_doctor.*") -// ->groupBy("user_doctor.doctor_id"); -// } - - // select doctor_id, min(price) price_min from price group by doctor_id - if (in_array($sort_order,[1,3,4])){ - $raw = "inquiry_price as min_inquiry_price"; - if ($sort_order == 1){ - // 综合-价格从低到高 - $raw = "MIN(inquiry_price) as min_inquiry_price"; - } elseif ($sort_order == 3){ - // 价格从低到高 - $raw = "MIN(inquiry_price) as min_inquiry_price"; - } elseif ($sort_order == 4){ - // 价格从高到低 - $raw = "MAX(inquiry_price) as min_inquiry_price"; - } - - $latestPosts = Db::table('doctor_inquiry_config') - ->select('doctor_inquiry_config.doctor_id', Db::raw($raw)) - ->where('is_enable', 1); - if (!empty($inquiry_type)){ - $latestPosts = $latestPosts->whereIn('inquiry_type', $inquiry_type) - ->whereIn('inquiry_mode',$inquiry_mode); - } - - $latestPosts = $latestPosts->groupBy(["doctor_inquiry_config.doctor_id"]); - - $query = $query - ->joinSub($latestPosts, 'doctor_inquiry_config', function($join) { - $join->on('user_doctor.doctor_id', '=', 'doctor_inquiry_config.doctor_id'); - }); + // 问诊服务搜索 + // select doctor_id, min(price) price_min from price group by doctor_id + $raw = "inquiry_price as min_inquiry_price"; + if (!empty($sort_order) && in_array($sort_order,[1,3,4])){ + if ($sort_order == 1){ + // 综合-价格从低到高 + $raw = "MIN(inquiry_price) as min_inquiry_price"; + } elseif ($sort_order == 3){ + // 价格从低到高 + $raw = "MIN(inquiry_price) as min_inquiry_price"; + } elseif ($sort_order == 4){ + // 价格从高到低 + $raw = "MAX(inquiry_price) as min_inquiry_price"; } + $latestPosts = Db::table('doctor_inquiry_config') + ->select('doctor_inquiry_config.doctor_id', Db::raw($raw)) + ->where('is_enable', 1); + if (!empty($inquiry_type)){ + $latestPosts = $latestPosts->whereIn('inquiry_type', $inquiry_type) + ->whereIn('inquiry_mode',$inquiry_mode); + } + + $latestPosts = $latestPosts->groupBy(["doctor_inquiry_config.doctor_id"]); + + $query = $query + ->joinSub($latestPosts, 'doctor_inquiry_config', function($join) { + $join->on('user_doctor.doctor_id', '=', 'doctor_inquiry_config.doctor_id'); + }); + } + + if (!empty($sort_order)){ if ($sort_order == 1) { // 综合-价格从低到高 $query->orderBy('is_recommend', 'desc');// 是否首页推荐(0:否 1:是) @@ -403,7 +391,7 @@ class UserDoctor extends Model ->get(); dump($doctors->toArray()); - return $doctors; + return array(); // $query = self::orderBy('served_patients_num', 'desc'); // diff --git a/app/Services/DoctorInquiryService.php b/app/Services/DoctorInquiryService.php index 91dfc60..7e8e074 100644 --- a/app/Services/DoctorInquiryService.php +++ b/app/Services/DoctorInquiryService.php @@ -391,11 +391,14 @@ class DoctorInquiryService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "本服务需设置图文问诊的价格,才可开启"); } + // 价格计算(专家图文问诊价格*费率+30盒35元的干爽颗粒) + $service_price = $doctor_inquiry_config['inquiry_price'] * $config_health_package['service_rate'] / 100 * 6 + 35 * 30; + // 创建医生健康包 $data = array(); $data['doctor_id'] = $user_info['client_user_id']; $data['config_health_package_id'] = $config_health_package['config_health_package_id']; - $data['service_price'] = $doctor_inquiry_config['inquiry_price'] * $config_health_package['service_rate'] / 100 * 6; + $data['service_price'] = $service_price; $doctor_config_health_package = DoctorConfigHealthPackage::addDoctorConfigHealthPackage($data); if (empty($doctor_config_health_package)){ Db::rollBack(); From ccd5817faf6f39671ccb7cd54d2a1f48c80d84dc Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 9 Apr 2024 15:19:21 +0800 Subject: [PATCH 024/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E5=88=97=E8=A1=A81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/UserDoctor.php | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/app/Model/UserDoctor.php b/app/Model/UserDoctor.php index 0100635..177e938 100644 --- a/app/Model/UserDoctor.php +++ b/app/Model/UserDoctor.php @@ -304,23 +304,23 @@ class UserDoctor extends Model // 价格从高到低 $raw = "MAX(inquiry_price) as min_inquiry_price"; } - - $latestPosts = Db::table('doctor_inquiry_config') - ->select('doctor_inquiry_config.doctor_id', Db::raw($raw)) - ->where('is_enable', 1); - if (!empty($inquiry_type)){ - $latestPosts = $latestPosts->whereIn('inquiry_type', $inquiry_type) - ->whereIn('inquiry_mode',$inquiry_mode); - } - - $latestPosts = $latestPosts->groupBy(["doctor_inquiry_config.doctor_id"]); - - $query = $query - ->joinSub($latestPosts, 'doctor_inquiry_config', function($join) { - $join->on('user_doctor.doctor_id', '=', 'doctor_inquiry_config.doctor_id'); - }); } + $latestPosts = Db::table('doctor_inquiry_config') + ->select('doctor_inquiry_config.doctor_id', Db::raw($raw)) + ->where('is_enable', 1); + if (!empty($inquiry_type)){ + $latestPosts = $latestPosts->whereIn('inquiry_type', $inquiry_type) + ->whereIn('inquiry_mode',$inquiry_mode); + } + + $latestPosts = $latestPosts->groupBy(["doctor_inquiry_config.doctor_id"]); + + $query = $query + ->joinSub($latestPosts, 'doctor_inquiry_config', function($join) { + $join->on('user_doctor.doctor_id', '=', 'doctor_inquiry_config.doctor_id'); + }); + if (!empty($sort_order)){ if ($sort_order == 1) { // 综合-价格从低到高 From 6ff6ba285166848332964acb2fbd761206537a70 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 10 Apr 2024 08:55:44 +0800 Subject: [PATCH 025/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E9=97=AE=E8=AF=8A=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/DoctorConfigHealthPackage.php | 4 +- ...figHealthPackage.php => HealthPackage.php} | 14 ++-- app/Model/HealthPackageProduct.php | 79 +++++++++++++++++++ app/Services/DoctorInquiryService.php | 18 ++--- config/routes.php | 3 + 5 files changed, 100 insertions(+), 18 deletions(-) rename app/Model/{ConfigHealthPackage.php => HealthPackage.php} (73%) create mode 100644 app/Model/HealthPackageProduct.php diff --git a/app/Model/DoctorConfigHealthPackage.php b/app/Model/DoctorConfigHealthPackage.php index a30b92d..d0b2a97 100644 --- a/app/Model/DoctorConfigHealthPackage.php +++ b/app/Model/DoctorConfigHealthPackage.php @@ -13,7 +13,7 @@ use Hyperf\Snowflake\Concern\Snowflake; /** * @property int $health_package_id 主键id * @property int $doctor_id 医生id - * @property int $config_health_package_id 健康包配置id + * @property int $package_id 健康包配置id * @property string $service_price 服务价格(根据图文问诊价格计算) * @property Carbon $created_at 创建时间 * @property Carbon $updated_at 修改时间 @@ -30,7 +30,7 @@ class DoctorConfigHealthPackage extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['health_package_id', 'doctor_id', 'config_health_package_id', 'service_price', 'created_at', 'updated_at']; + protected array $fillable = ['health_package_id', 'doctor_id', 'package_id', 'service_price', 'created_at', 'updated_at']; protected string $primaryKey = "health_package_id"; diff --git a/app/Model/ConfigHealthPackage.php b/app/Model/HealthPackage.php similarity index 73% rename from app/Model/ConfigHealthPackage.php rename to app/Model/HealthPackage.php index 84adc24..46ee69c 100644 --- a/app/Model/ConfigHealthPackage.php +++ b/app/Model/HealthPackage.php @@ -11,7 +11,7 @@ use Hyperf\Database\Model\Collection; use Hyperf\Snowflake\Concern\Snowflake; /** - * @property int $config_health_package_id 主键id + * @property int $package_id 主键id * @property int $service_count 总服务次数 * @property int $monthly_frequency 每月次数 * @property string $effective_days 服务有效天数 @@ -19,21 +19,21 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property Carbon $created_at 创建时间 * @property Carbon $updated_at 修改时间 */ -class ConfigHealthPackage extends Model +class HealthPackage extends Model { use Snowflake; /** * The table associated with the model. */ - protected ?string $table = 'config_health_package'; + protected ?string $table = 'health_package'; /** * The attributes that are mass assignable. */ - protected array $fillable = ['config_health_package_id', 'service_count', 'monthly_frequency', 'effective_days', 'service_rate', 'created_at', 'updated_at']; + protected array $fillable = ['package_id', 'service_count', 'monthly_frequency', 'effective_days', 'service_rate', 'created_at', 'updated_at']; - protected string $primaryKey = "config_health_package_id"; + protected string $primaryKey = "package_id"; /** * 获取信息-单条 @@ -60,9 +60,9 @@ class ConfigHealthPackage extends Model /** * 新增 * @param array $data - * @return ConfigHealthPackage|\Hyperf\Database\Model\Model + * @return HealthPackage|\Hyperf\Database\Model\Model */ - public static function addConfigHealthPackage(array $data): \Hyperf\Database\Model\Model|ConfigHealthPackage + public static function addHealthPackage(array $data): \Hyperf\Database\Model\Model|HealthPackage { return self::create($data); } diff --git a/app/Model/HealthPackageProduct.php b/app/Model/HealthPackageProduct.php new file mode 100644 index 0000000..1740a3b --- /dev/null +++ b/app/Model/HealthPackageProduct.php @@ -0,0 +1,79 @@ +first($fields); + } + + /** + * 多条 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params, array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + + /** + * 新增 + * @param array $data + * @return HealthPackageProduct|\Hyperf\Database\Model\Model + */ + public static function addHealthPackageProduct(array $data): \Hyperf\Database\Model\Model|HealthPackageProduct + { + return self::create($data); + } + + /** + * 修改 + * @param array $params + * @param array $data + * @return int + */ + public static function edit(array $params = [], array $data = []): int + { + return self::where($params)->update($data); + } +} diff --git a/app/Services/DoctorInquiryService.php b/app/Services/DoctorInquiryService.php index 7e8e074..9cd38b0 100644 --- a/app/Services/DoctorInquiryService.php +++ b/app/Services/DoctorInquiryService.php @@ -4,7 +4,6 @@ namespace App\Services; use App\Constants\HttpEnumCode; use App\Exception\BusinessException; -use App\Model\ConfigHealthPackage; use App\Model\DoctorConfigDifficultConsultation; use App\Model\DoctorConfigFollowPackage; use App\Model\DoctorConfigFollowPackageItem; @@ -12,6 +11,7 @@ use App\Model\DoctorConfigHealthPackage; use App\Model\DoctorInquiryConfig; use App\Model\DoctorInquiryConfigService; use App\Model\DoctorInquiryPriceRecord; +use App\Model\HealthPackage; use App\Model\SystemInquiryConfig; use App\Model\UserDoctor; use Hyperf\DbConnection\Db; @@ -374,8 +374,8 @@ class DoctorInquiryService extends BaseService if ($inquiry_type == 1 || $inquiry_mode == 8){ // 获取健康包配置 $params = array(); - $config_health_package = ConfigHealthPackage::getOne($params); - if (empty($config_health_package)){ + $health_package = HealthPackage::getOne($params); + if (empty($health_package)){ Db::rollBack(); return fail(HttpEnumCode::SERVER_ERROR); } @@ -392,12 +392,12 @@ class DoctorInquiryService extends BaseService } // 价格计算(专家图文问诊价格*费率+30盒35元的干爽颗粒) - $service_price = $doctor_inquiry_config['inquiry_price'] * $config_health_package['service_rate'] / 100 * 6 + 35 * 30; + $service_price = $doctor_inquiry_config['inquiry_price'] * $health_package['service_rate'] / 100 * 6 + 35 * 30; // 创建医生健康包 $data = array(); $data['doctor_id'] = $user_info['client_user_id']; - $data['config_health_package_id'] = $config_health_package['config_health_package_id']; + $data['package_id'] = $health_package['package_id']; $data['service_price'] = $service_price; $doctor_config_health_package = DoctorConfigHealthPackage::addDoctorConfigHealthPackage($data); if (empty($doctor_config_health_package)){ @@ -1136,14 +1136,14 @@ class DoctorInquiryService extends BaseService // 获取健康包配置 $params = array(); - $config_health_package = ConfigHealthPackage::getOne($params); - if (empty($config_health_package)){ + $health_package = HealthPackage::getOne($params); + if (empty($health_package)){ return fail(HttpEnumCode::SERVER_ERROR); } $result = array(); - $result['service_count'] = $config_health_package['service_count']; // 总服务次数 - $result['service_rate'] = $config_health_package['service_rate']; // 服务费率。100为满值,表示1,正常费率。 + $result['service_count'] = $health_package['service_count']; // 总服务次数 + $result['service_rate'] = $health_package['service_rate']; // 服务费率。100为满值,表示1,正常费率。 $result['inquiry_price'] = $doctor_inquiry_config['inquiry_price']; // 专家问诊-图文接诊价格 return success($result); diff --git a/config/routes.php b/config/routes.php index 6d004e0..aecb032 100644 --- a/config/routes.php +++ b/config/routes.php @@ -578,6 +578,9 @@ Router::addGroup('/patient', function () { // 删除家庭成员病情记录 Router::delete('/{pathography_id:\d+}', [PatientPathographyController::class, 'deleteFamilyPathography']); }); + + // 获取用户购买的服务包 + }); // 药师端api From ff48d5ca3c23201b75fbcbcb8669feab76bd694c Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 10 Apr 2024 10:02:34 +0800 Subject: [PATCH 026/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E9=97=AE=E8=AF=8A=E9=85=8D=E7=BD=AE-=E9=9A=8F=E8=AE=BF?= =?UTF-8?q?=E5=8C=85-=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorInquiryService.php | 18 ++++-------------- config/routes.php | 24 +++++++++++++++++++----- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/app/Services/DoctorInquiryService.php b/app/Services/DoctorInquiryService.php index 9cd38b0..0073566 100644 --- a/app/Services/DoctorInquiryService.php +++ b/app/Services/DoctorInquiryService.php @@ -847,30 +847,20 @@ class DoctorInquiryService extends BaseService { $user_info = $this->request->getAttribute("userInfo") ?? []; + $doctor_id = $this->request->route('doctor_id'); + // 获取医生信息 $params = array(); - $params['doctor_id'] = $user_info['client_user_id']; + $params['doctor_id'] = $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, "请先进行身份认证"); - } - - if ($doctor['is_bind_bank'] != 1) { - return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡"); - } - $result = array(); $params = array(); - $params['doctor_id'] = $user_info['client_user_id']; + $params['doctor_id'] = $doctor_id; $doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params); if (!empty($doctor_config_follow_package)) { $params = array(); diff --git a/config/routes.php b/config/routes.php index aecb032..d886aa0 100644 --- a/config/routes.php +++ b/config/routes.php @@ -578,9 +578,6 @@ Router::addGroup('/patient', function () { // 删除家庭成员病情记录 Router::delete('/{pathography_id:\d+}', [PatientPathographyController::class, 'deleteFamilyPathography']); }); - - // 获取用户购买的服务包 - }); // 药师端api @@ -936,6 +933,23 @@ Router::addGroup('/doctor', function () { Router::get('/inquiry/{doctor_id:\d+}', [UserDoctorController::class, 'getDoctorInfoInquiry']); }); - // 获取医生开启的服务列表 - Router::get('/inquiry/service/{doctor_id:\d+}', [UserDoctorController::class, 'getDoctorOpenInquiryService']); + + // 问诊 + Router::addGroup('/inquiry', function () { + // 服务 + Router::addGroup('/service', function () { + // 获取医生开启的服务列表 + Router::get('/{doctor_id:\d+}', [UserDoctorController::class, 'getDoctorOpenInquiryService']); + + // 随访包 + Router::addGroup('/follow', function () { + // 获取医生问诊配置-随访包-列表 + Router::get('/item/{doctor_id:\d+}', [DoctorInquiryConfigController::class, 'getDoctorInquiryFollowItemConfig']); + }); + }); + + + }); + + }); \ No newline at end of file From 6a71abffa9fc4de5be65bea089d7aae24a4b5752 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 10 Apr 2024 10:55:01 +0800 Subject: [PATCH 027/274] =?UTF-8?q?=E5=8C=BB=E7=94=9F=E5=88=97=E8=A1=A8?= =?UTF-8?q?=EF=BC=8C=E5=A4=84=E7=90=86=E9=9A=8F=E8=AE=BF=E5=8C=85=E9=97=AE?= =?UTF-8?q?=E8=AF=8A=E4=BB=B7=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientDoctorService.php | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/app/Services/PatientDoctorService.php b/app/Services/PatientDoctorService.php index 50b11f4..8dcb9c7 100644 --- a/app/Services/PatientDoctorService.php +++ b/app/Services/PatientDoctorService.php @@ -5,6 +5,8 @@ namespace App\Services; use App\Constants\DoctorTitleCode; use App\Constants\HttpEnumCode; use App\Model\DiseaseClassExpertise; +use App\Model\DoctorConfigFollowPackage; +use App\Model\DoctorConfigFollowPackageItem; use App\Model\DoctorExpertise; use App\Model\DoctorInquiryConfig; use App\Model\DoctorInquiryConfig as DoctorInquiryConfigModel; @@ -129,6 +131,32 @@ class PatientDoctorService extends BaseService // 头像 $user_doctor['avatar'] = addAliyunOssWebsite($user_doctor['avatar']); + + // 随访包配置 + foreach ($user_doctor['DoctorInquiryConfig'] as $key => $doctor_inquiry_config){ + if ($doctor_inquiry_config['inquiry_type'] == 1 && $doctor_inquiry_config['inquiry_mode'] == 9){ + $params = array(); + $params['doctor_id'] = $doctor_inquiry_config['doctor_id']; + $doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params); + if (!empty($doctor_config_follow_package)) { + $params = array(); + $params['follow_package_id'] = $doctor_config_follow_package['follow_package_id']; + $doctor_config_follow_package_items = DoctorConfigFollowPackageItem::getList($params); + if (!empty($doctor_config_follow_package_items)) { + foreach ($doctor_config_follow_package_items as $k => $doctor_config_follow_package_item){ + if ($k == 0){ + $user_doctor['DoctorInquiryConfig'][$key]['inquiry_price'] = $doctor_config_follow_package_item['service_price']; + continue; + } + + if ($doctor_config_follow_package_item['service_price'] < $user_doctor['DoctorInquiryConfig'][$key]['inquiry_price']){ + $user_doctor['DoctorInquiryConfig'][$key]['inquiry_price'] = $doctor_config_follow_package_item['service_price']; + } + } + } + } + } + } } } return success($user_doctors); From c4a6e7cee3ad83971ca37943878dbd8fe47ff860 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 10 Apr 2024 11:46:18 +0800 Subject: [PATCH 028/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E6=AF=8F=E6=97=A5=E6=9C=80=E5=A4=A7=E6=8E=A5=E8=AF=8A=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E3=80=81=E6=A3=80=E6=B5=8B=E6=98=AF=E5=90=A6=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E6=8E=A5=E8=AF=8A=E3=80=81=E5=88=9B=E5=BB=BA=E9=97=AE?= =?UTF-8?q?=E8=AF=8A=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/InquiryService.php | 13 +- app/Services/PatientDoctorService.php | 22 +- app/Services/UserDoctorService.php | 444 +++++++++++++------------- 3 files changed, 246 insertions(+), 233 deletions(-) diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 6354093..553b3c8 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -165,11 +165,14 @@ class InquiryService extends BaseService } } - // 检测当前是否符合系统问诊时间 - $inquiryService = new InquiryService(); - $is_system_time_pass = $inquiryService->checkSystemInquiryTime($request_params['inquiry_type']); - if (!$is_system_time_pass && $request_params['inquiry_type'] == 4) { - return fail(HttpEnumCode::HTTP_ERROR, "当前非医生接诊时间"); + // 问诊购药 + if ($request_params['inquiry_type'] == 4){ + // 检测当前是否符合系统问诊时间 + $inquiryService = new InquiryService(); + $is_system_time_pass = $inquiryService->checkSystemInquiryTime($request_params['inquiry_type']); + if (!$is_system_time_pass) { + return fail(HttpEnumCode::HTTP_ERROR, "当前非医生接诊时间"); + } } // 定义优惠卷金额默认值 diff --git a/app/Services/PatientDoctorService.php b/app/Services/PatientDoctorService.php index 8dcb9c7..a635c6f 100644 --- a/app/Services/PatientDoctorService.php +++ b/app/Services/PatientDoctorService.php @@ -318,8 +318,9 @@ class PatientDoctorService extends BaseService } } - // 检测公益问诊-当前患者问诊次数(24小时内两次公益问诊) - if ($inquiry_type == 4){ + // 公益问诊 + if ($inquiry_type == 3){ + // 检测公益问诊-当前患者问诊次数(24小时内两次公益问诊) $params = array(); $params['patient_id'] = $user_info['client_user_id']; $params['inquiry_type'] = $inquiry_type; @@ -335,12 +336,13 @@ class PatientDoctorService extends BaseService } } - // 检测当前是否符合系统问诊时间 - $inquiryService = new InquiryService(); - $is_system_time_pass = $inquiryService->checkSystemInquiryTime($inquiry_type); - if (!$is_system_time_pass){ - // 非坐班时间 - if ($inquiry_type == 4){ + // 问诊购药 + if ($inquiry_type == 4){ + // 检测当前是否符合系统问诊时间 + $inquiryService = new InquiryService(); + $is_system_time_pass = $inquiryService->checkSystemInquiryTime($inquiry_type); + if (!$is_system_time_pass){ + // 非坐班时间 // 问诊购药非坐班时间不允许接诊 $result['status'] = 3; $result['data'] = ""; @@ -349,7 +351,7 @@ class PatientDoctorService extends BaseService } } - // 检测快速、购药问诊是否由可分配医生 + // 检测快速、购药问诊是否有可分配医生 if ($inquiry_type == 2 || $inquiry_type == 4){ $UserDoctorService = new UserDoctorService(); $doctor_id = $UserDoctorService->getInquiryAssignDoctor($inquiry_type,$user_info['client_user_id'],$is_system_time_pass); @@ -362,7 +364,7 @@ class PatientDoctorService extends BaseService return success($result); } } - }catch(\Exception $e){ + }catch(\Throwable $e){ // 错误不做处理,此处只是检测 return success($result); } diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index 40b19a7..8be6bb1 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -1088,217 +1088,215 @@ class UserDoctorService extends BaseService * 修改处方 * 暂时去除修改处方 * @return array - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function putPrescription(): array { - return fail(HttpEnumCode::HTTP_ERROR, "操作失败"); - - $user_info = $this->request->getAttribute("userInfo") ?? []; - - $order_prescription_id = $this->request->input('order_prescription_id'); - $prescription_icd = $this->request->input('prescription_icd'); - $doctor_advice = $this->request->input('doctor_advice'); - $prescription_product = $this->request->input('prescription_product'); - - // 获取医生信息 - $params = array(); - $params['doctor_id'] = $user_info['client_user_id']; - - $user_doctor = UserDoctor::getOne($params); - if (empty($user_doctor)) { - return fail(HttpEnumCode::HTTP_ERROR, "非法医生"); - } - - $res = $this->checkDoctorAuth($user_doctor); - if ($res !== true) { - return fail(HttpEnumCode::HTTP_ERROR, $res); - } - - // 获取处方数据 - $params = array(); - $params['order_prescription_id'] = $order_prescription_id; - $params['doctor_id'] = $user_info['client_user_id']; - $order_prescription = OrderPrescription::getOne($params); - if (empty($order_prescription)) { - return fail(); - } - - // 检测处方状态 - if ($order_prescription['prescription_status'] == 4) { - // 已使用 - return fail(HttpEnumCode::HTTP_ERROR, "处方已使用,无法更改"); - } - - if ($order_prescription['is_delete'] == 1) { - // 已使用 - return fail(HttpEnumCode::HTTP_ERROR, "处方已删除,无法更改"); - } - - if ($order_prescription['prescription_status'] == 1 && $order_prescription['pharmacist_audit_status'] == 0) { - // 已使用 - return fail(HttpEnumCode::HTTP_ERROR, "处方审核中,不允许修改"); - } - - // 获取处方订单数据 - $params = array(); - $params['order_inquiry_id'] = $order_prescription['order_inquiry_id']; - $order_inquiry = OrderInquiry::getOne($params); - if (empty($order_inquiry)){ - return fail(HttpEnumCode::SERVER_ERROR,"问诊订单数据为空"); - } - - if ($order_inquiry['inquiry_status'] == 5){ - return fail(HttpEnumCode::HTTP_ERROR,"问诊已完成,无法重开处方"); - } - - if ($order_inquiry['inquiry_status'] == 6){ - return fail(HttpEnumCode::HTTP_ERROR,"问诊已结束,无法重开处方"); - } - - if ($order_inquiry['inquiry_status'] == 7){ - return fail(HttpEnumCode::HTTP_ERROR,"问诊已取消,无法重开处方"); - } - - if ($order_inquiry['inquiry_status'] != 4){ - return fail(HttpEnumCode::HTTP_ERROR,"问诊状态错误,无法重开处方"); - } - - Db::beginTransaction(); - - try { - // 删除订单-处方关联疾病表 - $params = array(); - $params['order_prescription_id'] = $order_prescription_id; - OrderPrescriptionIcd::deleteOrderPrescriptionIcd($params); - - // 处方疾病数据 - foreach ($prescription_icd as $item) { - // 获取疾病信息 - $params = array(); - $params['icd_id'] = $item; - $disease_class_icd = DiseaseClassIcd::getOne($params); - if (empty($disease_class_icd)) { - Db::rollBack(); - return fail(); - } - - // 新增处方疾病 - $data = array(); - $data['order_prescription_id'] = $order_prescription_id; - $data['icd_id'] = $item; - $data['icd_name'] = $disease_class_icd['icd_name']; - $data['icd_code'] = $disease_class_icd['icd_code']; - $order_prescription_icd = OrderPrescriptionIcd::addOrderPrescriptionIcd($data); - if (empty($order_prescription_icd)) { - Db::rollBack(); - return fail(); - } - - unset($disease_class_icd); - } - - // 删除订单-处方药品表 - $params = array(); - $params['order_prescription_id'] = $order_prescription_id; - OrderPrescriptionProduct::deleteOrderPrescriptionProduct($params); - - // 处方商品数据 - $product_name = ""; - foreach ($prescription_product as $item) { - // 获取商品数据 - $params = array(); - $params['product_id'] = $item['product_id']; - $product = Product::getWithAmountOne($params); - if (empty($product)) { - Db::rollBack(); - return fail(); - } - - if (empty($product['ProductPlatformAmount'])) { - // 无药品库存数据 - Db::rollBack(); - return fail(); - } - - // 检测药品库存数据 - if ($item['prescription_product_num'] > $product['ProductPlatformAmount']['stock']) { - // 库存不足 - Db::rollBack(); - return fail(HttpEnumCode::HTTP_ERROR, "药品" . $product['product_name'] . "库存不足"); - } - - // 新增订单-处方药品表 - $data = array(); - $data['order_prescription_id'] = $order_prescription_id; - $data['product_id'] = $item['product_id']; - $data['prescription_product_num'] = $item['prescription_product_num']; - $data['product_name'] = $product['product_name']; - $data['product_spec'] = $product['product_spec']; - $data['license_number'] = $product['license_number']; - $data['manufacturer'] = $product['manufacturer']; - $data['single_unit'] = $item['single_unit'] ?? $product['single_unit']; - $data['single_use'] = $item['single_use'] ?? $product['single_use']; - $data['packaging_unit'] = $item['packaging_unit'] ?? $product['packaging_unit']; - $data['frequency_use'] = $item['frequency_use'] ?? $product['frequency_use']; - $data['available_days'] = $item['available_days'] ?? $product['available_days']; - $order_prescription_product = OrderPrescriptionProduct::addOrderPrescriptionProduct($data); - if (empty($order_prescription_product)) { - Db::rollBack(); - return fail(); - } - - $product_name = $product_name . ";" . $product['product_name']; - unset($product); - } - - $OrderPrescriptionService = new OrderPrescriptionService(); - $prescription_open_result = $OrderPrescriptionService->openPrescription($order_prescription->order_prescription_id,$user_info['user_id']); - if (empty($prescription_open_result['prescription_img_url'])){ - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR, "处方开具失败"); - } - - // 修改处方表 - $data = array(); - $data['prescription_img'] = $prescription_open_result['prescription_img_url']; - $data['doctor_created_time'] = date('Y-m-d H:i:s',time()); - $data['prescription_status'] = 1; // 处方状态(1:待审核 3:待使用 4:已失效 5:已使用) - $data['pharmacist_audit_status'] = 0; // 药师审核驳回原因 - $data['pharmacist_fail_reason'] = ""; // 药师审核驳回原因 - $data['platform_audit_status'] = 0; // 处方平台审核状态(0:审核中 1:审核成功 2:审核驳回) - $data['platform_fail_reason'] = ""; // 处方平台驳回原因 - $data['doctor_created_time'] = date('Y-m-d H:i:s',time()); - if ($order_prescription['doctor_advice'] != $doctor_advice) { - $data['doctor_advice'] = $doctor_advice; // 医嘱 - } - - $params = array(); - $params['order_prescription_id'] = $order_prescription['order_prescription_id']; - OrderPrescription::edit($params,$data); - - // 发送IM消息-处方已开具 - $imService = new ImService(); - $imService->prescriptionIssued($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id'],$product_name,(string)$order_prescription['order_prescription_id'],6); - - // 加入分配药师队列 - $data = array(); - $data['order_prescription_id'] = $order_prescription_id; - - $message = new AssignPharmacistProducer($data); - $producer = ApplicationContext::getContainer()->get(Producer::class); - $result = $producer->produce($message); - if (!$result) { - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR); - } - - Db::commit(); - } catch (\Exception $e) { - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage()); - } +// return fail(HttpEnumCode::HTTP_ERROR, "操作失败"); +// +// $user_info = $this->request->getAttribute("userInfo") ?? []; +// +// $order_prescription_id = $this->request->input('order_prescription_id'); +// $prescription_icd = $this->request->input('prescription_icd'); +// $doctor_advice = $this->request->input('doctor_advice'); +// $prescription_product = $this->request->input('prescription_product'); +// +// // 获取医生信息 +// $params = array(); +// $params['doctor_id'] = $user_info['client_user_id']; +// +// $user_doctor = UserDoctor::getOne($params); +// if (empty($user_doctor)) { +// return fail(HttpEnumCode::HTTP_ERROR, "非法医生"); +// } +// +// $res = $this->checkDoctorAuth($user_doctor); +// if ($res !== true) { +// return fail(HttpEnumCode::HTTP_ERROR, $res); +// } +// +// // 获取处方数据 +// $params = array(); +// $params['order_prescription_id'] = $order_prescription_id; +// $params['doctor_id'] = $user_info['client_user_id']; +// $order_prescription = OrderPrescription::getOne($params); +// if (empty($order_prescription)) { +// return fail(); +// } +// +// // 检测处方状态 +// if ($order_prescription['prescription_status'] == 4) { +// // 已使用 +// return fail(HttpEnumCode::HTTP_ERROR, "处方已使用,无法更改"); +// } +// +// if ($order_prescription['is_delete'] == 1) { +// // 已使用 +// return fail(HttpEnumCode::HTTP_ERROR, "处方已删除,无法更改"); +// } +// +// if ($order_prescription['prescription_status'] == 1 && $order_prescription['pharmacist_audit_status'] == 0) { +// // 已使用 +// return fail(HttpEnumCode::HTTP_ERROR, "处方审核中,不允许修改"); +// } +// +// // 获取处方订单数据 +// $params = array(); +// $params['order_inquiry_id'] = $order_prescription['order_inquiry_id']; +// $order_inquiry = OrderInquiry::getOne($params); +// if (empty($order_inquiry)){ +// return fail(HttpEnumCode::SERVER_ERROR,"问诊订单数据为空"); +// } +// +// if ($order_inquiry['inquiry_status'] == 5){ +// return fail(HttpEnumCode::HTTP_ERROR,"问诊已完成,无法重开处方"); +// } +// +// if ($order_inquiry['inquiry_status'] == 6){ +// return fail(HttpEnumCode::HTTP_ERROR,"问诊已结束,无法重开处方"); +// } +// +// if ($order_inquiry['inquiry_status'] == 7){ +// return fail(HttpEnumCode::HTTP_ERROR,"问诊已取消,无法重开处方"); +// } +// +// if ($order_inquiry['inquiry_status'] != 4){ +// return fail(HttpEnumCode::HTTP_ERROR,"问诊状态错误,无法重开处方"); +// } +// +// Db::beginTransaction(); +// +// try { +// // 删除订单-处方关联疾病表 +// $params = array(); +// $params['order_prescription_id'] = $order_prescription_id; +// OrderPrescriptionIcd::deleteOrderPrescriptionIcd($params); +// +// // 处方疾病数据 +// foreach ($prescription_icd as $item) { +// // 获取疾病信息 +// $params = array(); +// $params['icd_id'] = $item; +// $disease_class_icd = DiseaseClassIcd::getOne($params); +// if (empty($disease_class_icd)) { +// Db::rollBack(); +// return fail(); +// } +// +// // 新增处方疾病 +// $data = array(); +// $data['order_prescription_id'] = $order_prescription_id; +// $data['icd_id'] = $item; +// $data['icd_name'] = $disease_class_icd['icd_name']; +// $data['icd_code'] = $disease_class_icd['icd_code']; +// $order_prescription_icd = OrderPrescriptionIcd::addOrderPrescriptionIcd($data); +// if (empty($order_prescription_icd)) { +// Db::rollBack(); +// return fail(); +// } +// +// unset($disease_class_icd); +// } +// +// // 删除订单-处方药品表 +// $params = array(); +// $params['order_prescription_id'] = $order_prescription_id; +// OrderPrescriptionProduct::deleteOrderPrescriptionProduct($params); +// +// // 处方商品数据 +// $product_name = ""; +// foreach ($prescription_product as $item) { +// // 获取商品数据 +// $params = array(); +// $params['product_id'] = $item['product_id']; +// $product = Product::getWithAmountOne($params); +// if (empty($product)) { +// Db::rollBack(); +// return fail(); +// } +// +// if (empty($product['ProductPlatformAmount'])) { +// // 无药品库存数据 +// Db::rollBack(); +// return fail(); +// } +// +// // 检测药品库存数据 +// if ($item['prescription_product_num'] > $product['ProductPlatformAmount']['stock']) { +// // 库存不足 +// Db::rollBack(); +// return fail(HttpEnumCode::HTTP_ERROR, "药品" . $product['product_name'] . "库存不足"); +// } +// +// // 新增订单-处方药品表 +// $data = array(); +// $data['order_prescription_id'] = $order_prescription_id; +// $data['product_id'] = $item['product_id']; +// $data['prescription_product_num'] = $item['prescription_product_num']; +// $data['product_name'] = $product['product_name']; +// $data['product_spec'] = $product['product_spec']; +// $data['license_number'] = $product['license_number']; +// $data['manufacturer'] = $product['manufacturer']; +// $data['single_unit'] = $item['single_unit'] ?? $product['single_unit']; +// $data['single_use'] = $item['single_use'] ?? $product['single_use']; +// $data['packaging_unit'] = $item['packaging_unit'] ?? $product['packaging_unit']; +// $data['frequency_use'] = $item['frequency_use'] ?? $product['frequency_use']; +// $data['available_days'] = $item['available_days'] ?? $product['available_days']; +// $order_prescription_product = OrderPrescriptionProduct::addOrderPrescriptionProduct($data); +// if (empty($order_prescription_product)) { +// Db::rollBack(); +// return fail(); +// } +// +// $product_name = $product_name . ";" . $product['product_name']; +// unset($product); +// } +// +// $OrderPrescriptionService = new OrderPrescriptionService(); +// $prescription_open_result = $OrderPrescriptionService->openPrescription($order_prescription->order_prescription_id,$user_info['user_id']); +// if (empty($prescription_open_result['prescription_img_url'])){ +// Db::rollBack(); +// return fail(HttpEnumCode::SERVER_ERROR, "处方开具失败"); +// } +// +// // 修改处方表 +// $data = array(); +// $data['prescription_img'] = $prescription_open_result['prescription_img_url']; +// $data['doctor_created_time'] = date('Y-m-d H:i:s',time()); +// $data['prescription_status'] = 1; // 处方状态(1:待审核 3:待使用 4:已失效 5:已使用) +// $data['pharmacist_audit_status'] = 0; // 药师审核驳回原因 +// $data['pharmacist_fail_reason'] = ""; // 药师审核驳回原因 +// $data['platform_audit_status'] = 0; // 处方平台审核状态(0:审核中 1:审核成功 2:审核驳回) +// $data['platform_fail_reason'] = ""; // 处方平台驳回原因 +// $data['doctor_created_time'] = date('Y-m-d H:i:s',time()); +// if ($order_prescription['doctor_advice'] != $doctor_advice) { +// $data['doctor_advice'] = $doctor_advice; // 医嘱 +// } +// +// $params = array(); +// $params['order_prescription_id'] = $order_prescription['order_prescription_id']; +// OrderPrescription::edit($params,$data); +// +// // 发送IM消息-处方已开具 +// $imService = new ImService(); +// $imService->prescriptionIssued($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id'],$product_name,(string)$order_prescription['order_prescription_id'],6); +// +// // 加入分配药师队列 +// $data = array(); +// $data['order_prescription_id'] = $order_prescription_id; +// +// $message = new AssignPharmacistProducer($data); +// $producer = ApplicationContext::getContainer()->get(Producer::class); +// $result = $producer->produce($message); +// if (!$result) { +// Db::rollBack(); +// return fail(HttpEnumCode::SERVER_ERROR); +// } +// +// Db::commit(); +// } catch (\Exception $e) { +// Db::rollBack(); +// return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage()); +// } return success(); } @@ -2583,19 +2581,29 @@ class UserDoctorService extends BaseService $params['inquiry_mode'] = $inquiry_mode; $system_inquiry_config = SystemInquiryConfig::getOne($params); if (!empty($system_inquiry_config)){ - $max_work_num_day = $system_inquiry_config['max_work_num_day']; - } - }else{ - $params = array(); - $params['doctor_id'] = $doctor_id; - $params['inquiry_type'] = $inquiry_type; - $params['inquiry_mode'] = $inquiry_mode; - $doctor_inquiry_config = DoctorInquiryConfig::getOne($params); - if (!empty($doctor_inquiry_config)){ - $max_work_num_day = $doctor_inquiry_config['work_num_day']; + return $system_inquiry_config['max_work_num_day']; } } + // 健康包 + if ($inquiry_type == 1 && $inquiry_mode == 9){ + return 9999; + } + + // 随访包 + if ($inquiry_type == 1 && $inquiry_mode == 8){ + return 9999; + } + + $params = array(); + $params['doctor_id'] = $doctor_id; + $params['inquiry_type'] = $inquiry_type; + $params['inquiry_mode'] = $inquiry_mode; + $doctor_inquiry_config = DoctorInquiryConfig::getOne($params); + if (!empty($doctor_inquiry_config)){ + return $doctor_inquiry_config['work_num_day']; + } + return $max_work_num_day; } From 0f73332bfd9a33eff7e03db7017ef9c3c3d94150 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 10 Apr 2024 17:35:48 +0800 Subject: [PATCH 029/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=82=A3=E8=80=85=E5=B7=B2=E8=B4=AD=E4=B9=B0=E7=9A=84=E6=9F=90?= =?UTF-8?q?=E5=8C=BB=E7=94=9F=E7=9A=84=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AF=A6?= =?UTF-8?q?=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OrderServicePackageController.php | 48 ++ app/Controller/PatientOrderController.php | 2 + app/Controller/UserPatientController.php | 1 + app/Model/OrderInquiry.php | 17 + app/Model/OrderServicePackage.php | 126 ++++ app/Model/OrderServicePackageDetail.php | 85 +++ app/Request/OrderServicePackageRequest.php | 105 +++ app/Request/PatientOrderRequest.php | 10 +- app/Request/UserPatientRequest.php | 16 + app/Services/DetectionService.php | 2 +- app/Services/InquiryService.php | 40 ++ app/Services/OrderService.php | 1 - app/Services/OrderServicePackageService.php | 634 ++++++++++++++++++ app/Services/PatientOrderService.php | 8 + app/Services/UserPatientService.php | 3 + config/routes.php | 15 +- 16 files changed, 1104 insertions(+), 9 deletions(-) create mode 100644 app/Controller/OrderServicePackageController.php create mode 100644 app/Model/OrderServicePackage.php create mode 100644 app/Model/OrderServicePackageDetail.php create mode 100644 app/Request/OrderServicePackageRequest.php create mode 100644 app/Services/OrderServicePackageService.php diff --git a/app/Controller/OrderServicePackageController.php b/app/Controller/OrderServicePackageController.php new file mode 100644 index 0000000..b668706 --- /dev/null +++ b/app/Controller/OrderServicePackageController.php @@ -0,0 +1,48 @@ +container->get(OrderServicePackageRequest::class); + $request->scene('getPatientBuyServiceDetail')->validateResolved(); + + $OrderServicePackageService = new OrderServicePackageService(); + $data = $OrderServicePackageService->getPatientBuyServiceDetail(); + return $this->response->json($data); + } + + /** + * 创建服务包订单 + * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function addPatientServiceOrder(): ResponseInterface + { + $request = $this->container->get(OrderServicePackageRequest::class); + $request->scene('addPatientServiceOrder')->validateResolved(); + + $OrderServicePackageService = new OrderServicePackageService(); + $data = $OrderServicePackageService->addPatientServiceOrder(); + return $this->response->json($data); + } +} \ No newline at end of file diff --git a/app/Controller/PatientOrderController.php b/app/Controller/PatientOrderController.php index 85414de..a7c1523 100644 --- a/app/Controller/PatientOrderController.php +++ b/app/Controller/PatientOrderController.php @@ -296,4 +296,6 @@ class PatientOrderController extends AbstractController $data = $PatientOrderService->putPatientDetectionOrderCancelPay(); return $this->response->json($data); } + + } \ No newline at end of file diff --git a/app/Controller/UserPatientController.php b/app/Controller/UserPatientController.php index d3b6a54..0604c53 100644 --- a/app/Controller/UserPatientController.php +++ b/app/Controller/UserPatientController.php @@ -94,4 +94,5 @@ class UserPatientController extends AbstractController return $this->response->json($data); } + } \ No newline at end of file diff --git a/app/Model/OrderInquiry.php b/app/Model/OrderInquiry.php index ff96fe8..52a38f8 100644 --- a/app/Model/OrderInquiry.php +++ b/app/Model/OrderInquiry.php @@ -307,6 +307,7 @@ class OrderInquiry extends Model * @param array $params * @param array $reception_time 接诊时间区间 * @param array $inquiry_status_params inquiry_status字段搜索条件 + * @param array $inquiry_type_not_params * @return int|mixed|string */ public static function getCooperationDoctorAmountTotal(array $params, array $reception_time, array $inquiry_status_params,array $inquiry_type_not_params = []): mixed @@ -612,4 +613,20 @@ class OrderInquiry extends Model ->latest() ->first($fields); } + + /** + * 获取患者某一时间段问诊订单-创建时间 + * @param array $params + * @param array $created_at 接诊时间区间 + * @param array $inquiry_status_params inquiry_status字段搜索条件 + * @return Collection|array + */ + public static function getInquiryWithCreateTime(array $params, array $created_at, array $inquiry_status_params): Collection|array + { + return self::where($params) + ->whereIn('inquiry_status', $inquiry_status_params) + ->whereBetween('created_at', $created_at) + ->orderBy('created_at') + ->get(); + } } diff --git a/app/Model/OrderServicePackage.php b/app/Model/OrderServicePackage.php new file mode 100644 index 0000000..27acad7 --- /dev/null +++ b/app/Model/OrderServicePackage.php @@ -0,0 +1,126 @@ +first($fields); + } + + /** + * 多条 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params, array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + + /** + * 新增 + * @param array $data + * @return OrderServicePackage|Model + */ + public static function addOrderServicePackage(array $data): Model|OrderServicePackage + { + return self::create($data); + } + + /** + * 修改 + * @param array $params + * @param array $data + * @return int + */ + public static function edit(array $params = [], array $data = []): int + { + return self::where($params)->update($data); + } + + /** + * 获取某一状态下的订单-多条 + * @param array $params + * @param array $order_service_status + * @param array $fields + * @return Collection|array + */ + public static function getStatusList(array $params = [],array $order_service_status = [], array $fields = ['*']): Collection|array + { + return self::where($params)->whereIn('order_service_status',$order_service_status)->get($fields); + } + + /** + * 获取某一状态下的订单-单条 + * @param array $params + * @param array $order_service_status + * @param array $fields + * @return object|null + */ + public static function getStatusOne(array $params = [],array $order_service_status = [], array $fields = ['*']): object|null + { + return self::where($params)->whereIn('order_service_status',$order_service_status)->first($fields); + } +} diff --git a/app/Model/OrderServicePackageDetail.php b/app/Model/OrderServicePackageDetail.php new file mode 100644 index 0000000..3a43bfd --- /dev/null +++ b/app/Model/OrderServicePackageDetail.php @@ -0,0 +1,85 @@ +first($fields); + } + + /** + * 多条 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params, array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + + /** + * 新增 + * @param array $data + * @return OrderServicePackageDetail|\Hyperf\Database\Model\Model + */ + public static function addOrderServicePackageDetail(array $data): \Hyperf\Database\Model\Model|OrderServicePackageDetail + { + return self::create($data); + } + + /** + * 修改 + * @param array $params + * @param array $data + * @return int + */ + public static function edit(array $params = [], array $data = []): int + { + return self::where($params)->update($data); + } + +} diff --git a/app/Request/OrderServicePackageRequest.php b/app/Request/OrderServicePackageRequest.php new file mode 100644 index 0000000..f2b6861 --- /dev/null +++ b/app/Request/OrderServicePackageRequest.php @@ -0,0 +1,105 @@ + [ // 获取患者已购买的某医生的服务包详情 + 'doctor_id', + 'family_id', + 'service_type', // 服务包类型(1:健康 2:随访) + 'follow_package_item_id', + ], + 'addPatientServiceOrder' => [ // 创建服务包订单 + 'doctor_id', + 'service_type', + 'follow_package_item_id', + 'patient_id', + 'family_id', + 'disease_class_id', + 'diagnosis_date', + 'disease_desc', + 'is_allergy_history',// 过敏史 + 'is_family_history', // 家族病史 + 'inquiry_type', // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + 'inquiry_mode', // 订单问诊方式(1:图文 2:视频 3:语音 4:电话 5:会员) + 'client_type', // 客户端类型(1:手机 2:电脑) + ], + ]; + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize(): bool + { + return true; + } + + /** + * Get the validation rules that apply to the request. + */ + public function rules(): array + { + return [ + 'inquiry_type' => 'required|integer|min:1|max:5', + 'inquiry_mode' => 'required|integer|min:1|max:9', + 'patient_id' => 'required', + 'family_id' => 'required', + 'disease_class_id' => 'required', + 'diagnosis_date' => 'date', + 'disease_desc' => 'required', + 'is_allergy_history' => ['sometimes','numeric','min:0','max:1'], + 'is_family_history' => ['sometimes','numeric','min:0','max:1'], + 'is_pregnant' => ['sometimes','numeric','min:0','max:1'], + 'client_type' => 'required|integer|min:1|max:2', + 'service_type' => ['required','integer',Rule::in([1,2])], + 'doctor_id' => 'required', + ]; + } + + /** + * 获取已定义验证规则的错误消息. + */ + public function messages(): array + { + return [ + 'doctor_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_type.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_type.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'patient_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'family_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'disease_class_id.required' => "请您选择疾病", + 'diagnosis_date.date' => HttpEnumCode::getMessage(HttpEnumCode::DATE_FORMAT_ERROR), + 'disease_desc.required' => "请您输入病情主诉", + 'is_allergy_history.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_allergy_history.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_allergy_history.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_family_history.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_family_history.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_family_history.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_pregnant.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_pregnant.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_pregnant.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'client_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'client_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'client_type.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'client_type.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'service_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'service_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'service_type.in' => "服务包类型错误", + ]; + } +} diff --git a/app/Request/PatientOrderRequest.php b/app/Request/PatientOrderRequest.php index e162d12..e862d9a 100644 --- a/app/Request/PatientOrderRequest.php +++ b/app/Request/PatientOrderRequest.php @@ -6,6 +6,7 @@ namespace App\Request; use App\Constants\HttpEnumCode; use Hyperf\Validation\Request\FormRequest; +use Hyperf\Validation\Rule; class PatientOrderRequest extends FormRequest { @@ -53,8 +54,8 @@ class PatientOrderRequest extends FormRequest public function rules(): array { return [ - 'inquiry_type' => 'required|integer|min:1|max:4', - 'inquiry_mode' => 'required|integer|min:1|max:5', + 'inquiry_type' => 'required|integer|min:1|max:5', + 'inquiry_mode' => 'required|integer|min:1|max:9', 'patient_id' => 'required', 'family_id' => 'required', 'disease_class_id' => 'required', @@ -64,6 +65,7 @@ class PatientOrderRequest extends FormRequest 'is_family_history' => ['sometimes','numeric','min:0','max:1'], 'is_pregnant' => ['sometimes','numeric','min:0','max:1'], 'client_type' => 'required|integer|min:1|max:2', + 'service_type' => ['required','integer',Rule::in([1,2])], 'doctor_id' => 'required', 'order_inquiry_id' => 'required', @@ -89,6 +91,7 @@ class PatientOrderRequest extends FormRequest public function messages(): array { return [ + 'doctor_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'inquiry_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'inquiry_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'inquiry_type.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), @@ -136,6 +139,9 @@ class PatientOrderRequest extends FormRequest 'detection_status.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'detection_status.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'detection_status.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'service_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'service_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'service_type.in' => "服务包类型错误", ]; } } diff --git a/app/Request/UserPatientRequest.php b/app/Request/UserPatientRequest.php index bdea314..aad3a3a 100644 --- a/app/Request/UserPatientRequest.php +++ b/app/Request/UserPatientRequest.php @@ -6,6 +6,7 @@ namespace App\Request; use App\Constants\HttpEnumCode; use Hyperf\Validation\Request\FormRequest; +use Hyperf\Validation\Rule; class UserPatientRequest extends FormRequest { @@ -17,6 +18,12 @@ class UserPatientRequest extends FormRequest 'product_id', 'shopping_cart_num', ], + 'getPatientBuyServiceDetail' => [ // 获取患者已购买的某医生的服务包详情 + 'doctor_id', + 'family_id', + 'service_type', + 'follow_package_item_id', + ], ]; /** @@ -36,6 +43,9 @@ class UserPatientRequest extends FormRequest 'user_coupon_status' => 'required|numeric|min:0|max:3', 'product_id' => 'required', 'shopping_cart_num' => 'required|numeric|min:0|max:999', + 'doctor_id' => 'required', + 'family_id' => 'required', + 'service_type' => ['required','integer',Rule::in([1,2])], ]; } @@ -55,6 +65,12 @@ class UserPatientRequest extends FormRequest 'shopping_cart_num.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'shopping_cart_num.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'shopping_cart_num.max' => "请勿超出最大添加数量", + + 'doctor_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'family_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'service_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'service_type.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'service_type.integer' => "服务包类型错误", ]; } } diff --git a/app/Services/DetectionService.php b/app/Services/DetectionService.php index f8e920e..8774cc4 100644 --- a/app/Services/DetectionService.php +++ b/app/Services/DetectionService.php @@ -216,7 +216,7 @@ class DetectionService extends BaseService $result['status'] = 1; $result['message'] = "成功"; $result['data'] = [ - "inquiry_no" => "", + "order_no" => "", "order_detection_id" => "", ]; diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 553b3c8..f31070b 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -2125,4 +2125,44 @@ class InquiryService extends BaseService return $time; } + /** + * 获取患者在某一时间段的服务包问诊订单-创建时间 + * @param string|int $order_service_type + * @param string $patient_id + * @param string $doctor_id + * @param string $start_date + * @param string $end_date + * @return array + */ + public function getPatientServiceInquiry(string|int $order_service_type,string $patient_id, string $doctor_id,string $start_date,string $end_date): array + { + if ($order_service_type == 1){ + $inquiry_type = 1; + $inquiry_mode = 8; + }else{ + $inquiry_type = 1; + $inquiry_mode = 9; + } + + // 获取医生当日接诊订单金额 + $params = array(); + $params['patient_id'] = $patient_id; + $params['doctor_id'] = $doctor_id; + $params['inquiry_type'] = $inquiry_type; + $params['inquiry_mode'] = $inquiry_mode; + $params['inquiry_refund_status'] = 0; // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + $params['inquiry_pay_status'] = 2; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + + $created_at = [$start_date, $end_date]; + + $inquiry_status_params = [1,2,3,4,5,6]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + + $result = OrderInquiry::getInquiryWithCreateTime($params,$created_at,$inquiry_status_params); + if (empty($result)){ + return []; + } + + return $result->toArray(); + } + } \ No newline at end of file diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index accf11b..79dd595 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -522,7 +522,6 @@ class OrderService extends BaseService } } - /** * 检测问诊订单可退款状态 * @param string $order_no diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php new file mode 100644 index 0000000..d93b413 --- /dev/null +++ b/app/Services/OrderServicePackageService.php @@ -0,0 +1,634 @@ +request->getAttribute("userInfo") ?? []; + + $doctor_id = $this->request->input("doctor_id"); + $family_id = $this->request->input("family_id"); + $service_type = $this->request->input("service_type");// 服务包类型 1:健康 2:随访 + $follow_package_item_id = $this->request->input("follow_package_item_id"); + + if ($service_type == 2){ + if (empty($follow_package_item_id)){ + return fail(); + } + } + + $result = array(); + $result['status'] = 1; + $result['message'] = ""; + $result['data'] = NULL; + + // 检测家庭成员是否存在 + $params = array(); + $params['family_id'] = $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, "患者信息错误"); + } + + if ($service_type == 1){ + $inquiry_mode = 8; + }else{ + $inquiry_mode = 9; + } + // 检测是否存在同类型未完成的问诊订单 + $PatientOrderService = new PatientOrderService(); + $order_inquiry_id = $PatientOrderService->getNotFinishedOrderInquiry(1,$inquiry_mode,$user_info['client_user_id']); + if (!empty($order_inquiry_id)) { + // 获取问诊订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)){ + return fail(HttpEnumCode::SERVER_ERROR); + } + + $result['status'] = 4; + $result['message'] = "当前患者存在进行中的问诊订单"; + $result['data'] = $order_inquiry['inquiry_no']; + return success($result); + } + + // 检测当前医生是否和患者存在未完成问诊订单 + $InquiryService = new InquiryService(); + $order_inquiry = $InquiryService->checkPatientDoctorProgressInquiry($user_info['client_user_id'], $doctor_id); + if (!empty($order_inquiry)) { + $result['status'] = 4; + $result['message'] = "您和当前医生存在问诊中订单,无法够买服务包"; + $result['data'] = $order_inquiry['inquiry_no']; + return success($result); + } + + // 检测患者是否购买服务包 + $params = array(); + $params['user_id'] = $user_info['user_id']; + $params['patient_id'] = $user_info['client_user_id']; + $params['doctor_id'] = $doctor_id; + $params['family_id'] = $family_id; + $params['order_service_type'] = $service_type; + + $order_service_status = ['1','2','3']; + $order_service_package = OrderServicePackage::getStatusOne($params,$order_service_status); + if (empty($order_service_package)){ + $result['message'] = "未购买"; + return success($result); + } + + // 检测服务包订单订单状态 + if ($order_service_package['order_service_status'] == 1){ + $result['status'] = 2; + $result['message'] = "存在未支付订单"; + $result['data'] = $order_service_package['order_service_no']; + return success($result); + } + + if ($order_service_package['order_service_status'] == 2){ + $result['status'] = 2; + $result['message'] = "您已购买该服务包,请耐心等待医生接诊"; + $result['data'] = $order_service_package['order_service_no']; + return success($result); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + return fail(HttpEnumCode::SERVER_ERROR); + } + + // 检测随访包 + if ($service_type == 2){ + // 检测服务周期是否相同,相同表示购买的同一个随访包 + $params = array(); + $params['follow_package_item_id'] = $follow_package_item_id; + $doctor_config_follow_package_item = DoctorConfigFollowPackageItem::getOne($params); + if (empty($doctor_config_follow_package_item)){ + return fail(HttpEnumCode::HTTP_ERROR,"随访包选择错误"); + } + + if ($order_service_package_detail['service_period'] != $doctor_config_follow_package_item['service_period']){ + $result['message'] = "未购买"; + return success($result); + } + } + + // 处理问诊次数 + // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 + if ($order_service_package_detail['monthly_frequency'] != 0){ + $month_inquiry_count = 0; // 当前所属月问诊次数 + + // 获取当月问诊次数 + // 获取开启服务日期和今日的相差天数 + $diff = abs(time() - strtotime($order_service_package['start_time'])); + $diff_days = ceil($diff / (60 * 60 * 24)); // 转换为天数 + + // 获取当前月次 + $month_time = ceil($diff_days / 30); + + $days = (int)$month_time * 30; + + // 获取开始日期 + $end_date = date('Y-m-d 23:59:59', strtotime($order_service_package['start_time'] . " +$days days")); + $start_date = date('Y-m-d 00:00:00', strtotime($end_date . "-30 days")); + + $InquiryService = new InquiryService(); + $order_inquiry = $InquiryService->getPatientServiceInquiry($service_type,$user_info['client_user_id'],$doctor_id,$start_date,$end_date); + if (!empty($order_inquiry)){ + $month_inquiry_count = count($order_inquiry); + } + + if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']){ + // 超出当月问诊次数 + $result['status'] = 3; + $result['message'] = "超出服务包所包含的当月问诊次数"; + $result['data'] = $order_service_package['order_service_no']; + return success($result); + } + } + + // 未超出当月问诊次数或次数无限制 + $result['status'] = 5; + $result['message'] = "已购买,未超出当月问诊次数"; + $result['data'] = $order_service_package['order_service_no']; + return success($result); + } + + /** + * 创建服务包订单 + * @return array + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function addPatientServiceOrder(): array + { + $result = array(); + $result['status'] = 1; + $result['message'] = "成功"; + $result['data'] = [ + "order_no" => "", + "order_id" => "", + ]; + + $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['family_id'] = $request_params['family_id']; + $patient_family_health = PatientFamilyHealth::getOne($params); + + // 获取患者家庭成员信息表-个人情况 + $params = array(); + $params['family_id'] = $request_params['family_id']; + $patient_family_personal = PatientFamilyPersonal::getOne($params); + + // 检测是否存在同类型未完成的问诊订单 + $PatientOrderService = new PatientOrderService(); + $order_inquiry_id = $PatientOrderService->getNotFinishedOrderInquiry($request_params['inquiry_type'],$request_params['inquiry_mode'],$user_info['client_user_id']); + if (!empty($order_inquiry_id)) { + // 获取问诊订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)){ + return fail(HttpEnumCode::SERVER_ERROR); + } + + $result['status'] = 2; + $result['message'] = "当前患者存在进行中的问诊订单"; + $result['data']['order_no'] = $order_inquiry['inquiry_no']; + $result['data']['order_id'] = $order_inquiry['order_id']; + return success($result); + } + + // 检测所患疾病是否正确 + $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, "疾病信息填写错误"); + } + + // 获取当前问诊医生信息 + $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, "当前医生无法接诊,请重新选择"); + } + + // 检测当前医生是否和患者存在未完成问诊订单 + $InquiryService = new InquiryService(); + $order_inquiry = $InquiryService->checkPatientDoctorProgressInquiry($user_info['client_user_id'], $request_params['doctor_id']); + if (!empty($order_inquiry)) { + $result['status'] = 2; + $result['message'] = "您和当前医生存在问诊中订单,无法再次发起问诊"; + $result['data']['order_no'] = $order_inquiry['inquiry_no']; + $result['data']['order_id'] = $order_inquiry['order_id']; + return success($result); + } + + // 确定支付渠道 + // 支付渠道(1:小程序支付 2:微信扫码支付) + if ($request_params['client_type'] == 1) { + $inquiry_pay_channel = 1; + } elseif ($request_params['client_type'] == 2) { + $inquiry_pay_channel = 2; + } + + // 处理复诊凭证 + if (!empty($request_params['diagnose_images'])) { + // 医师资格证 + $diagnose_images = implode(',', $request_params['diagnose_images']); + $diagnose_images = PcreMatch::pregRemoveOssWebsite($diagnose_images); + } + + // 沟通次数,沟通时长 + $params = array(); + $params['inquiry_type'] = $request_params['inquiry_type']; + $params['inquiry_mode'] = $request_params['inquiry_mode']; + $system_inquiry_config = SystemInquiryConfig::getOne($params); + if (empty($system_inquiry_config)) { + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + + Db::beginTransaction(); + + $generator = $this->container->get(IdGeneratorInterface::class); + + try { + $inquiry_price = 0; + $coupon_amount_total = 0; + // 实际付款金额 + $payment_amount_total = bcsub($inquiry_price, $coupon_amount_total, 2); + if ($payment_amount_total < 0) { + $payment_amount_total = 0; + } + + // 生成订单表 + $data = array(); + $data['user_id'] = $user_info['user_id']; + $data['patient_id'] = $user_info['client_user_id']; + if (isset($request_params['doctor_id'])) { + if (!empty($request_params['doctor_id'])) { + $data['doctor_id'] = $request_params['doctor_id']; + } + } + $data['order_type'] = 1; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) + $data['inquiry_pay_channel'] = $inquiry_pay_channel ?? 0;// 支付渠道(1:小程序支付 2:微信扫码支付) + $data['pay_status'] = 1;// 1:待支付 + $data['order_no'] = "I" . $generator->generate();// 订单编号 + $data['amount_total'] = $inquiry_price;// 订单金额 + $data['coupon_amount_total'] = $coupon_amount_total;// 优惠卷总金额 + $data['payment_amount_total'] = $payment_amount_total;// 实际付款金额 + $order = Order::addOrder($data); + if (empty($order)) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + + // 生成问诊订单 + $data = array(); + $data['order_id'] = $order['order_id']; + $data['user_id'] = $user_info['user_id']; + $data['patient_id'] = $user_info['client_user_id']; + if (isset($request_params['doctor_id'])) { + if (!empty($request_params['doctor_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_pay_channel'] = $inquiry_pay_channel ?? 0;// 支付渠道(1:小程序支付 2:微信扫码支付) + $data['inquiry_no'] = $order['order_no'];// 订单编号 + $data['amount_total'] = $inquiry_price;// 订单金额 + $data['coupon_amount_total'] = $coupon_amount_total;// 优惠卷总金额 + $data['payment_amount_total'] = $payment_amount_total;// 实际付款金额 + $data['times_number'] = $system_inquiry_config['times_number'];// 沟通次数(0为不限制次数) + $data['duration'] = $system_inquiry_config['duration'];// 沟通时长(分钟,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'] = getIdCardAge($patient_family['id_number']);// 患者年龄-就诊人 + $order_inquiry = OrderInquiry::addOrderInquiry($data); + if (empty($order_inquiry)) { + Db::rollBack(); + 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:未知 1:男 2:女) + $data['disease_class_id'] = $disease_class['disease_class_id']; // 疾病分类id-系统 + $data['disease_class_name'] = $disease_class['disease_class_name']; // 疾病名称-系统 + $data['diagnosis_date'] = $request_params['diagnosis_date']; // 确诊日期 + $data['disease_desc'] = $request_params['disease_desc']; // 病情描述(主诉) + $data['diagnose_images'] = $diagnose_images ?? ""; // 复诊凭证(多个使用逗号分隔) + + if ($patient_family['age'] != null) { + $data['age'] = getIdCardAge($patient_family['id_number']);// 患者年龄 + } + + // 身高(cm) + if ($patient_family['height'] != null) { + $data['height'] = $patient_family['height']; + } + + // 体重(kg) + if ($patient_family['weight'] != null) { + $data['weight'] = $patient_family['weight']; + } + + // 职业id-职业名称 + if ($patient_family['job_id'] != null) { + $data['job_id'] = $patient_family['job_id']; + if ($patient_family['job_name'] != null) { + $data['job_name'] = $patient_family['job_name']; + } + } + + // 民族id-民族名称 + if ($patient_family['nation_id'] != null) { + $data['nation_id'] = $patient_family['nation_id']; + if ($patient_family['nation_name'] != null) { + $data['nation_name'] = $patient_family['nation_name']; + } + } + + // 婚姻状况 + if ($patient_family['marital_status'] != null) { + $data['marital_status'] = $patient_family['marital_status']; + } + + // 家庭成员-健康情况 + if (!empty($patient_family_health)) { + if ($patient_family_health['diagnosis_hospital'] != null) { + $data['diagnosis_hospital'] = $patient_family_health['diagnosis_hospital']; // 确诊医院 + } + + if ($patient_family_health['is_take_medicine'] != null) { + $data['is_take_medicine'] = $patient_family_health['is_take_medicine']; // 正在服药 + if ($patient_family_health['drugs_name'] != null) { + $data['drugs_name'] = $patient_family_health['drugs_name']; // 正在服药名称 + } + } + } + + // 家庭成员-个人情况 + if (!empty($patient_family_personal)) { + if ($patient_family_personal['drink_wine_status'] != null) { + $data['drink_wine_status'] = $patient_family_personal['drink_wine_status']; // 饮酒状态 + } + + if ($patient_family_personal['smoke_status'] != null) { + $data['smoke_status'] = $patient_family_personal['smoke_status']; // 吸烟状态 + } + + if ($patient_family_personal['chemical_compound_status'] != null) { + $data['chemical_compound_status'] = $patient_family_personal['chemical_compound_status']; // 化合物状态 + if ($patient_family_personal['chemical_compound_describe'] != null) { + $data['chemical_compound_describe'] = $patient_family_personal['chemical_compound_describe']; // 化合物描述 + } + } + + if ($patient_family_personal['is_operation'] != null) { + $data['is_operation'] = $patient_family_personal['is_operation']; // 是否存在手术 + if ($patient_family_personal['operation'] != null) { + $data['operation'] = $patient_family_personal['operation']; // 手术描述 + } + } + } + + // 过敏史 + if (array_key_exists("is_allergy_history", $request_params)) { + if ($request_params['is_allergy_history'] !== null) { + $data['is_allergy_history'] = $request_params['is_allergy_history']; // 是否存在过敏史(0:否 1:是) + if ($request_params['allergy_history'] != "") { + $data['allergy_history'] = $request_params['allergy_history']; // 过敏史描述 + } + } + } + + // 家族病史 + if (array_key_exists("is_family_history", $request_params)) { + if ($request_params['is_family_history'] !== null) { + $data['is_family_history'] = $request_params['is_family_history']; // 是否存在家族病史(0:否 1:是) + if ($request_params['family_history'] != "") { + $data['family_history'] = $request_params['family_history']; // 家族病史描述 + } + } + } + + // 是否备孕、妊娠、哺乳期(0:否 1:是) + if (array_key_exists("is_pregnant", $request_params)) { + if ($request_params['is_pregnant'] !== null) { + $data['is_pregnant'] = $request_params['is_pregnant']; // 是否备孕、妊娠、哺乳期(0:否 1:是) + } + } + + // 是否存在禁忌药物(0:否 1:是)问诊购药时存在 + if (array_key_exists("is_taboo", $request_params)) { + if ($request_params['is_taboo'] !== null) { + $data['is_taboo'] = $request_params['is_taboo']; // 是否存在禁忌药物(0:否 1:是)问诊购药时存在 + } + } + + $order_inquiry_case = OrderInquiryCase::addOrderInquiryCase($data); + if (empty($order_inquiry_case)) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + + // 处理优惠卷数据 + if (!empty($user_coupons)) { + foreach ($user_coupons as $user_coupon) { + // 增加订单优惠卷表 + $data = array(); + $data['order_id'] = $order['order_id'];// 订单id + $data['user_coupon_id'] = $user_coupon['user_coupon_id']; + $data['coupon_name'] = $user_coupon['coupon_name']; + $data['coupon_use_price'] = $user_coupon['coupon_price']; + $order_coupon = OrderCoupon::addOrderCoupon($data); + if (empty($order_coupon)) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + + // 增加问诊优惠卷表 + $data = array(); + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];// 订单-问诊id + $data['user_coupon_id'] = $user_coupon['user_coupon_id']; + $data['coupon_name'] = $user_coupon['coupon_name']; + $data['coupon_use_price'] = $user_coupon['coupon_price']; + $order_inquiry_coupon = OrderInquiryCoupon::addOrderInquiryCoupon($data); + if (empty($order_inquiry_coupon)) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + + // 修改优惠卷使用状态 + $data = array(); + $data['user_coupon_status'] = 1; + $data['coupon_use_date'] = date('Y-m-d H:i:s', time()); + + $params = array(); + $params['user_coupon_id'] = $user_coupon['user_coupon_id']; + UserCoupon::edit($params, $data); + } + } + + // 意向用药处理 + if ($request_params['inquiry_type'] == 4 && !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)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "意向药品错误"); + } + + // 用药意向是否和过敏史重叠 + if (!empty($request_params['allergy_history'])) { + $res = strpos($request_params['allergy_history'], $product['product_name']); + if ($res !== false) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "过敏史中存在意向用药,请您仔细检查"); + } + } + + // 新增病例商品表 + $data = array(); + $data['inquiry_case_id'] = $order_inquiry_case['inquiry_case_id']; + $data['product_id'] = $item['product_id']; + $data['case_product_num'] = $item['product_num']; + $inquiry_case_product = InquiryCaseProduct::addInquiryCaseProduct($data); + if (empty($inquiry_case_product)) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + } + } + + // 增加至未支付取消订单延迟队列 + $time = 60 * 30; + if (\Hyperf\Config\config('app_env') == "dev"){ + $time = 60 * 5; + } + + $data = array(); + $data['order_no'] = $order_inquiry['inquiry_no']; + $data['order_type'] = 1; + + $message = new CancelUnpayOrdersDelayDirectProducer($data); + $message->setDelayMs(1000 * $time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + + // 加入未接诊取消订单延迟队列 + // 专家问诊-公益问诊 + if (!empty($request_params['doctor_id']) && ($request_params['inquiry_type'] == 1 || $request_params['inquiry_type'] == 3)) { + $time = 60 * 60 * 24; + if (\Hyperf\Config\config('app_env') == "dev"){ + $time = 60 * 10; + } + + $data = array(); + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $data['order_no'] = $order_inquiry['inquiry_no']; + $message = new CancelUnInquiryOrdersDelayDirectProducer($data); + $message->setDelayMs(1000 * $time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + } + + Db::commit(); + } catch (\Exception $e) { + Db::rollBack(); + Log::getInstance()->error("错误:" . $e->getMessage()); + return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); + } + + $result['status'] = 1; + $result['data']['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; // 订单主键id + $result['data']['inquiry_no'] = (string)$order_inquiry['inquiry_no']; // 订单编号 + return success($result); + } +} \ No newline at end of file diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index b126cbd..aaace47 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -3,14 +3,17 @@ namespace App\Services; use App\Amqp\Producer\AssignDoctorDelayDirectProducer; +use App\Amqp\Producer\CancelUnInquiryOrdersDelayDirectProducer; use App\Amqp\Producer\CancelUnpayOrdersDelayDirectProducer; use App\Amqp\Producer\DoctorNotYetInquiryDelayDirectProducer; use App\Constants\DoctorTitleCode; use App\Constants\HttpEnumCode; use App\Model\BasicLogisticsCompany; use App\Model\DetectionProject; +use App\Model\DiseaseClass; use App\Model\DoctorInquiryConfig; use App\Model\Hospital; +use App\Model\InquiryCaseProduct; use App\Model\Order; use App\Model\OrderCoupon; use App\Model\OrderDetection; @@ -25,15 +28,20 @@ use App\Model\OrderProduct; use App\Model\OrderProductCoupon; use App\Model\OrderProductItem; use App\Model\OrderProductLogistic; +use App\Model\PatientFamily; +use App\Model\PatientFamilyHealth; +use App\Model\PatientFamilyPersonal; use App\Model\PatientFollow; use App\Model\Product; use App\Model\ProductPlatformAmount; +use App\Model\SystemInquiryConfig; use App\Model\UserCoupon; use App\Model\UserDoctor; use App\Model\UserDoctorInfo; use App\Model\UserPharmacistInfo; use App\Model\UserShipAddress; use App\Utils\Log; +use App\Utils\PcreMatch; use Extend\Prescription\Prescription; use Extend\Wechat\WechatPay; use GuzzleHttp\Exception\GuzzleException; diff --git a/app/Services/UserPatientService.php b/app/Services/UserPatientService.php index 3064ae9..092f79a 100644 --- a/app/Services/UserPatientService.php +++ b/app/Services/UserPatientService.php @@ -4,7 +4,10 @@ namespace App\Services; use App\Constants\HttpEnumCode; use App\Model\Coupon; +use App\Model\DoctorConfigFollowPackageItem; use App\Model\OrderInquiry; +use App\Model\OrderServicePackage; +use App\Model\PatientFamily; use App\Model\PatientHistoryInquiry; use App\Model\Product; use App\Model\ProductPlatformAmount; diff --git a/config/routes.php b/config/routes.php index d886aa0..ef1a2c0 100644 --- a/config/routes.php +++ b/config/routes.php @@ -22,6 +22,7 @@ use App\Controller\InquiryController; use App\Controller\LoginController; use App\Controller\CodeController; use App\Controller\MessageNoticeController; +use App\Controller\OrderServicePackageController; use App\Controller\PatientCaseController; use App\Controller\PatientDoctorController; use App\Controller\PatientFamilyController; @@ -578,6 +579,15 @@ Router::addGroup('/patient', function () { // 删除家庭成员病情记录 Router::delete('/{pathography_id:\d+}', [PatientPathographyController::class, 'deleteFamilyPathography']); }); + + // 服务包 + Router::addGroup('/service', function () { + // 获取患者已购买的某医生的服务包详情 + Router::get('/detail', [OrderServicePackageController::class, 'getPatientBuyServiceDetail']); + + // 创建服务包订单 + Router::post('', [OrderServicePackageController::class, 'addPatientServiceOrder']); + }); }); // 药师端api @@ -933,7 +943,6 @@ Router::addGroup('/doctor', function () { Router::get('/inquiry/{doctor_id:\d+}', [UserDoctorController::class, 'getDoctorInfoInquiry']); }); - // 问诊 Router::addGroup('/inquiry', function () { // 服务 @@ -947,9 +956,5 @@ Router::addGroup('/doctor', function () { Router::get('/item/{doctor_id:\d+}', [DoctorInquiryConfigController::class, 'getDoctorInquiryFollowItemConfig']); }); }); - - }); - - }); \ No newline at end of file From d28128d76ed8279bc059047b7f0cfea0374791d5 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 11 Apr 2024 14:09:00 +0800 Subject: [PATCH 030/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/OrderServicePackage.php | 5 +- app/Model/OrderServicePackageCase.php | 95 +++++ app/Services/OrderServicePackageService.php | 381 +++++++------------- 3 files changed, 235 insertions(+), 246 deletions(-) create mode 100644 app/Model/OrderServicePackageCase.php diff --git a/app/Model/OrderServicePackage.php b/app/Model/OrderServicePackage.php index 27acad7..c56a902 100644 --- a/app/Model/OrderServicePackage.php +++ b/app/Model/OrderServicePackage.php @@ -8,7 +8,6 @@ namespace App\Model; use Carbon\Carbon; use Hyperf\Database\Model\Collection; -use Hyperf\Database\Model\Model; use Hyperf\Snowflake\Concern\Snowflake; /** @@ -82,9 +81,9 @@ class OrderServicePackage extends Model /** * 新增 * @param array $data - * @return OrderServicePackage|Model + * @return OrderServicePackage|\Hyperf\Database\Model\Model */ - public static function addOrderServicePackage(array $data): Model|OrderServicePackage + public static function addOrderServicePackage(array $data): \Hyperf\Database\Model\Model|OrderServicePackage { return self::create($data); } diff --git a/app/Model/OrderServicePackageCase.php b/app/Model/OrderServicePackageCase.php new file mode 100644 index 0000000..78228b1 --- /dev/null +++ b/app/Model/OrderServicePackageCase.php @@ -0,0 +1,95 @@ +first($fields); + } + + /** + * 多条 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params, array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + + /** + * 新增 + * @param array $data + * @return OrderServicePackageCase|\Hyperf\Database\Model\Model + */ + public static function addOrderServicePackageCase(array $data): \Hyperf\Database\Model\Model|OrderServicePackageCase + { + return self::create($data); + } + + /** + * 修改 + * @param array $params + * @param array $data + * @return int + */ + public static function edit(array $params = [], array $data = []): int + { + return self::where($params)->update($data); + } +} diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index d93b413..eddc101 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -6,7 +6,9 @@ use App\Amqp\Producer\CancelUnInquiryOrdersDelayDirectProducer; use App\Amqp\Producer\CancelUnpayOrdersDelayDirectProducer; use App\Constants\HttpEnumCode; use App\Model\DiseaseClass; +use App\Model\DoctorConfigFollowPackage; use App\Model\DoctorConfigFollowPackageItem; +use App\Model\DoctorConfigHealthPackage; use App\Model\InquiryCaseProduct; use App\Model\Order; use App\Model\OrderCoupon; @@ -14,6 +16,7 @@ use App\Model\OrderInquiry; use App\Model\OrderInquiryCase; use App\Model\OrderInquiryCoupon; use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageCase; use App\Model\OrderServicePackageDetail; use App\Model\PatientFamily; use App\Model\PatientFamilyHealth; @@ -147,9 +150,12 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::HTTP_ERROR,"随访包选择错误"); } - if ($order_service_package_detail['service_period'] != $doctor_config_follow_package_item['service_period']){ - $result['message'] = "未购买"; - return success($result); + $params = array(); + $params['follow_package_id'] = $doctor_config_follow_package_item['follow_package_id']; + $params['doctor_id'] = $doctor_id; + $doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params); + if (empty($doctor_config_follow_package)){ + return fail(HttpEnumCode::HTTP_ERROR,"随访包选择错误"); } } @@ -207,7 +213,6 @@ class OrderServicePackageService extends BaseService $result['message'] = "成功"; $result['data'] = [ "order_no" => "", - "order_id" => "", ]; $user_info = $this->request->getAttribute("userInfo") ?? []; @@ -223,16 +228,6 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "患者信息错误"); } - // 获取患者家庭成员信息表-健康情况 - $params = array(); - $params['family_id'] = $request_params['family_id']; - $patient_family_health = PatientFamilyHealth::getOne($params); - - // 获取患者家庭成员信息表-个人情况 - $params = array(); - $params['family_id'] = $request_params['family_id']; - $patient_family_personal = PatientFamilyPersonal::getOne($params); - // 检测是否存在同类型未完成的问诊订单 $PatientOrderService = new PatientOrderService(); $order_inquiry_id = $PatientOrderService->getNotFinishedOrderInquiry($request_params['inquiry_type'],$request_params['inquiry_mode'],$user_info['client_user_id']); @@ -245,10 +240,19 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::SERVER_ERROR); } - $result['status'] = 2; + $result['status'] = 4; $result['message'] = "当前患者存在进行中的问诊订单"; $result['data']['order_no'] = $order_inquiry['inquiry_no']; - $result['data']['order_id'] = $order_inquiry['order_id']; + return success($result); + } + + // 检测当前医生是否和患者存在未完成问诊订单 + $InquiryService = new InquiryService(); + $order_inquiry = $InquiryService->checkPatientDoctorProgressInquiry($user_info['client_user_id'], $request_params['doctor_id']); + if (!empty($order_inquiry)) { + $result['status'] = 4; + $result['message'] = "您和当前医生存在问诊中订单,无法够买服务包"; + $result['data']['order_no'] = $order_inquiry['inquiry_no']; return success($result); } @@ -277,23 +281,14 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "当前医生无法接诊,请重新选择"); } - // 检测当前医生是否和患者存在未完成问诊订单 - $InquiryService = new InquiryService(); - $order_inquiry = $InquiryService->checkPatientDoctorProgressInquiry($user_info['client_user_id'], $request_params['doctor_id']); - if (!empty($order_inquiry)) { - $result['status'] = 2; - $result['message'] = "您和当前医生存在问诊中订单,无法再次发起问诊"; - $result['data']['order_no'] = $order_inquiry['inquiry_no']; - $result['data']['order_id'] = $order_inquiry['order_id']; - return success($result); - } - // 确定支付渠道 // 支付渠道(1:小程序支付 2:微信扫码支付) if ($request_params['client_type'] == 1) { $inquiry_pay_channel = 1; } elseif ($request_params['client_type'] == 2) { $inquiry_pay_channel = 2; + }else{ + return fail(HttpEnumCode::HTTP_ERROR, "支付方式错误"); } // 处理复诊凭证 @@ -312,15 +307,105 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } + // 检测患者是否购买服务包 + $params = array(); + $params['user_id'] = $user_info['user_id']; + $params['patient_id'] = $user_info['client_user_id']; + $params['doctor_id'] = $request_params['doctor_id']; + $params['family_id'] = $request_params['family_id']; + $params['order_service_type'] = $request_params['service_type']; + + $order_service_status = ['1','2','3']; + $order_service_package = OrderServicePackage::getStatusOne($params,$order_service_status); + if (!empty($order_service_package)){ + // 检测服务包订单订单状态 + if ($order_service_package['order_service_status'] == 1){ + $result['status'] = 2; + $result['message'] = "存在未支付订单"; + $result['data']['order_no'] = (string)$order_service_package['order_service_no']; + return success($result); + } + + if ($order_service_package['order_service_status'] == 2){ + $result['status'] = 2; + $result['message'] = "您已购买该服务包,请耐心等待医生接诊"; + $result['data']['order_no'] = (string)$order_service_package['order_service_no']; + return success($result); + } + } + + // 检测随访包是否存在 + if ($request_params['service_type'] == 2){ + if (empty($request_params['follow_package_item_id'])){ + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + + $params = array(); + $params['follow_package_item_id'] = $request_params['follow_package_item_id']; + $doctor_config_follow_package_item = DoctorConfigFollowPackageItem::getOne($params); + if (empty($doctor_config_follow_package_item)){ + return fail(HttpEnumCode::HTTP_ERROR,"随访包选择错误"); + } + + $params = array(); + $params['follow_package_id'] = $doctor_config_follow_package_item['follow_package_id']; + $params['doctor_id'] = $request_params['doctor_id']; + $doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params); + if (empty($doctor_config_follow_package)){ + return fail(HttpEnumCode::HTTP_ERROR,"随访包选择错误"); + } + } + + // 处理订单金额 + $service_price = 0; + if ($request_params['service_type'] == 1){ + // 健康包 + $params = array(); + $params['doctor_id'] = $request_params['doctor_id']; + $doctor_config_health_package = DoctorConfigHealthPackage::getOne($params); + if (empty($doctor_config_health_package)){ + return fail(HttpEnumCode::HTTP_ERROR,"订单创建失败"); + } + $service_price = $doctor_config_health_package['service_price']; + } + + if ($request_params['service_type'] == 2){ + $params = array(); + $params['follow_package_item_id'] = $request_params['follow_package_item_id']; + $doctor_config_follow_package_item = DoctorConfigFollowPackageItem::getOne($params); + if (empty($doctor_config_follow_package_item)){ + return fail(HttpEnumCode::HTTP_ERROR,"随访包选择错误"); + } + + $service_price = $doctor_config_follow_package_item['service_price']; + } + + if ($service_price <= 0){ + return fail(HttpEnumCode::HTTP_ERROR,"订单创建失败"); + } + + // 订单类型 + $order_type = ""; + if ($request_params['service_type'] == 1){ + $order_type = 5; + } + + if ($request_params['service_type'] == 2){ + $order_type = 4; + } + + if (empty($order_type)){ + return fail(HttpEnumCode::HTTP_ERROR,"订单创建失败"); + } + Db::beginTransaction(); $generator = $this->container->get(IdGeneratorInterface::class); try { - $inquiry_price = 0; $coupon_amount_total = 0; // 实际付款金额 - $payment_amount_total = bcsub($inquiry_price, $coupon_amount_total, 2); + $payment_amount_total = bcsub($service_price, $coupon_amount_total, 2); if ($payment_amount_total < 0) { $payment_amount_total = 0; } @@ -329,16 +414,12 @@ class OrderServicePackageService extends BaseService $data = array(); $data['user_id'] = $user_info['user_id']; $data['patient_id'] = $user_info['client_user_id']; - if (isset($request_params['doctor_id'])) { - if (!empty($request_params['doctor_id'])) { - $data['doctor_id'] = $request_params['doctor_id']; - } - } - $data['order_type'] = 1; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) - $data['inquiry_pay_channel'] = $inquiry_pay_channel ?? 0;// 支付渠道(1:小程序支付 2:微信扫码支付) + $data['doctor_id'] = $request_params['doctor_id']; + $data['order_type'] = $order_type; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) + $data['inquiry_pay_channel'] = $inquiry_pay_channel;// 支付渠道(1:小程序支付 2:微信扫码支付) $data['pay_status'] = 1;// 1:待支付 - $data['order_no'] = "I" . $generator->generate();// 订单编号 - $data['amount_total'] = $inquiry_price;// 订单金额 + $data['order_no'] = "S" . $generator->generate();// 订单编号 + $data['amount_total'] = $service_price;// 订单金额 $data['coupon_amount_total'] = $coupon_amount_total;// 优惠卷总金额 $data['payment_amount_total'] = $payment_amount_total;// 实际付款金额 $order = Order::addOrder($data); @@ -347,43 +428,36 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } - // 生成问诊订单 + // 生成服务包订单 $data = array(); $data['order_id'] = $order['order_id']; $data['user_id'] = $user_info['user_id']; $data['patient_id'] = $user_info['client_user_id']; - if (isset($request_params['doctor_id'])) { - if (!empty($request_params['doctor_id'])) { - $data['doctor_id'] = $request_params['doctor_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_pay_channel'] = $inquiry_pay_channel ?? 0;// 支付渠道(1:小程序支付 2:微信扫码支付) - $data['inquiry_no'] = $order['order_no'];// 订单编号 - $data['amount_total'] = $inquiry_price;// 订单金额 + $data['order_service_type'] = $request_params['service_type']; + $data['order_service_status'] = 1; // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + $data['pay_channel'] = $inquiry_pay_channel;// 支付渠道(1:小程序支付 2:微信扫码支付) + $data['order_service_no'] = $order['order_no'];// 系统订单编号 + $data['amount_total'] = $service_price;// 订单金额 $data['coupon_amount_total'] = $coupon_amount_total;// 优惠卷总金额 $data['payment_amount_total'] = $payment_amount_total;// 实际付款金额 - $data['times_number'] = $system_inquiry_config['times_number'];// 沟通次数(0为不限制次数) - $data['duration'] = $system_inquiry_config['duration'];// 沟通时长(分钟,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'] = getIdCardAge($patient_family['id_number']);// 患者年龄-就诊人 - $order_inquiry = OrderInquiry::addOrderInquiry($data); - if (empty($order_inquiry)) { + $order_service_package = OrderServicePackage::addOrderServicePackage($data); + if (empty($order_service_package)){ Db::rollBack(); 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['order_id'] = $order['order_id']; + $data['order_service_id'] = $order_service_package['order_service_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']; // 患者名称 @@ -393,81 +467,10 @@ class OrderServicePackageService extends BaseService $data['diagnosis_date'] = $request_params['diagnosis_date']; // 确诊日期 $data['disease_desc'] = $request_params['disease_desc']; // 病情描述(主诉) $data['diagnose_images'] = $diagnose_images ?? ""; // 复诊凭证(多个使用逗号分隔) - if ($patient_family['age'] != null) { $data['age'] = getIdCardAge($patient_family['id_number']);// 患者年龄 } - // 身高(cm) - if ($patient_family['height'] != null) { - $data['height'] = $patient_family['height']; - } - - // 体重(kg) - if ($patient_family['weight'] != null) { - $data['weight'] = $patient_family['weight']; - } - - // 职业id-职业名称 - if ($patient_family['job_id'] != null) { - $data['job_id'] = $patient_family['job_id']; - if ($patient_family['job_name'] != null) { - $data['job_name'] = $patient_family['job_name']; - } - } - - // 民族id-民族名称 - if ($patient_family['nation_id'] != null) { - $data['nation_id'] = $patient_family['nation_id']; - if ($patient_family['nation_name'] != null) { - $data['nation_name'] = $patient_family['nation_name']; - } - } - - // 婚姻状况 - if ($patient_family['marital_status'] != null) { - $data['marital_status'] = $patient_family['marital_status']; - } - - // 家庭成员-健康情况 - if (!empty($patient_family_health)) { - if ($patient_family_health['diagnosis_hospital'] != null) { - $data['diagnosis_hospital'] = $patient_family_health['diagnosis_hospital']; // 确诊医院 - } - - if ($patient_family_health['is_take_medicine'] != null) { - $data['is_take_medicine'] = $patient_family_health['is_take_medicine']; // 正在服药 - if ($patient_family_health['drugs_name'] != null) { - $data['drugs_name'] = $patient_family_health['drugs_name']; // 正在服药名称 - } - } - } - - // 家庭成员-个人情况 - if (!empty($patient_family_personal)) { - if ($patient_family_personal['drink_wine_status'] != null) { - $data['drink_wine_status'] = $patient_family_personal['drink_wine_status']; // 饮酒状态 - } - - if ($patient_family_personal['smoke_status'] != null) { - $data['smoke_status'] = $patient_family_personal['smoke_status']; // 吸烟状态 - } - - if ($patient_family_personal['chemical_compound_status'] != null) { - $data['chemical_compound_status'] = $patient_family_personal['chemical_compound_status']; // 化合物状态 - if ($patient_family_personal['chemical_compound_describe'] != null) { - $data['chemical_compound_describe'] = $patient_family_personal['chemical_compound_describe']; // 化合物描述 - } - } - - if ($patient_family_personal['is_operation'] != null) { - $data['is_operation'] = $patient_family_personal['is_operation']; // 是否存在手术 - if ($patient_family_personal['operation'] != null) { - $data['operation'] = $patient_family_personal['operation']; // 手术描述 - } - } - } - // 过敏史 if (array_key_exists("is_allergy_history", $request_params)) { if ($request_params['is_allergy_history'] !== null) { @@ -488,97 +491,12 @@ class OrderServicePackageService extends BaseService } } - // 是否备孕、妊娠、哺乳期(0:否 1:是) - if (array_key_exists("is_pregnant", $request_params)) { - if ($request_params['is_pregnant'] !== null) { - $data['is_pregnant'] = $request_params['is_pregnant']; // 是否备孕、妊娠、哺乳期(0:否 1:是) - } - } - - // 是否存在禁忌药物(0:否 1:是)问诊购药时存在 - if (array_key_exists("is_taboo", $request_params)) { - if ($request_params['is_taboo'] !== null) { - $data['is_taboo'] = $request_params['is_taboo']; // 是否存在禁忌药物(0:否 1:是)问诊购药时存在 - } - } - - $order_inquiry_case = OrderInquiryCase::addOrderInquiryCase($data); - if (empty($order_inquiry_case)) { + $order_service_package_case = OrderServicePackageCase::addOrderServicePackageCase($data); + if (empty($order_service_package_case)) { Db::rollBack(); return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } - // 处理优惠卷数据 - if (!empty($user_coupons)) { - foreach ($user_coupons as $user_coupon) { - // 增加订单优惠卷表 - $data = array(); - $data['order_id'] = $order['order_id'];// 订单id - $data['user_coupon_id'] = $user_coupon['user_coupon_id']; - $data['coupon_name'] = $user_coupon['coupon_name']; - $data['coupon_use_price'] = $user_coupon['coupon_price']; - $order_coupon = OrderCoupon::addOrderCoupon($data); - if (empty($order_coupon)) { - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); - } - - // 增加问诊优惠卷表 - $data = array(); - $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];// 订单-问诊id - $data['user_coupon_id'] = $user_coupon['user_coupon_id']; - $data['coupon_name'] = $user_coupon['coupon_name']; - $data['coupon_use_price'] = $user_coupon['coupon_price']; - $order_inquiry_coupon = OrderInquiryCoupon::addOrderInquiryCoupon($data); - if (empty($order_inquiry_coupon)) { - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); - } - - // 修改优惠卷使用状态 - $data = array(); - $data['user_coupon_status'] = 1; - $data['coupon_use_date'] = date('Y-m-d H:i:s', time()); - - $params = array(); - $params['user_coupon_id'] = $user_coupon['user_coupon_id']; - UserCoupon::edit($params, $data); - } - } - - // 意向用药处理 - if ($request_params['inquiry_type'] == 4 && !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)) { - Db::rollBack(); - return fail(HttpEnumCode::HTTP_ERROR, "意向药品错误"); - } - - // 用药意向是否和过敏史重叠 - if (!empty($request_params['allergy_history'])) { - $res = strpos($request_params['allergy_history'], $product['product_name']); - if ($res !== false) { - Db::rollBack(); - return fail(HttpEnumCode::HTTP_ERROR, "过敏史中存在意向用药,请您仔细检查"); - } - } - - // 新增病例商品表 - $data = array(); - $data['inquiry_case_id'] = $order_inquiry_case['inquiry_case_id']; - $data['product_id'] = $item['product_id']; - $data['case_product_num'] = $item['product_num']; - $inquiry_case_product = InquiryCaseProduct::addInquiryCaseProduct($data); - if (empty($inquiry_case_product)) { - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); - } - } - } - // 增加至未支付取消订单延迟队列 $time = 60 * 30; if (\Hyperf\Config\config('app_env') == "dev"){ @@ -586,8 +504,8 @@ class OrderServicePackageService extends BaseService } $data = array(); - $data['order_no'] = $order_inquiry['inquiry_no']; - $data['order_type'] = 1; + $data['order_no'] = $order_service_package['inquiry_no']; + $data['order_type'] = 4; $message = new CancelUnpayOrdersDelayDirectProducer($data); $message->setDelayMs(1000 * $time); @@ -598,37 +516,14 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } - // 加入未接诊取消订单延迟队列 - // 专家问诊-公益问诊 - if (!empty($request_params['doctor_id']) && ($request_params['inquiry_type'] == 1 || $request_params['inquiry_type'] == 3)) { - $time = 60 * 60 * 24; - if (\Hyperf\Config\config('app_env') == "dev"){ - $time = 60 * 10; - } - - $data = array(); - $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $data['order_no'] = $order_inquiry['inquiry_no']; - $message = new CancelUnInquiryOrdersDelayDirectProducer($data); - $message->setDelayMs(1000 * $time); - $producer = $this->container->get(Producer::class); - $res = $producer->produce($message); - if (!$res) { - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); - } - } - Db::commit(); } catch (\Exception $e) { Db::rollBack(); - Log::getInstance()->error("错误:" . $e->getMessage()); - return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); + return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage()); } - $result['status'] = 1; - $result['data']['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; // 订单主键id - $result['data']['inquiry_no'] = (string)$order_inquiry['inquiry_no']; // 订单编号 + $result['data']['order_no'] = (string)$order['order_no']; + return success($result); } } \ No newline at end of file From a1d496dd5141b567b2791bd993c537844f3f6d1d Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 11 Apr 2024 14:17:27 +0800 Subject: [PATCH 031/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E8=AE=A2=E5=8D=95=E5=8F=96=E6=B6=88=E6=9C=AA=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E8=AE=A2=E5=8D=95=E9=98=9F=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CancelUnpayOrdersDelayDirectConsumer.php | 3 + app/Services/DetectionService.php | 2 +- app/Services/OrderService.php | 4 +- app/Services/OrderServicePackageService.php | 80 +++++++++++++++++++ 4 files changed, 86 insertions(+), 3 deletions(-) diff --git a/app/Amqp/Consumer/CancelUnpayOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnpayOrdersDelayDirectConsumer.php index 6a068e8..2fbd2ba 100644 --- a/app/Amqp/Consumer/CancelUnpayOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnpayOrdersDelayDirectConsumer.php @@ -81,6 +81,9 @@ class CancelUnpayOrdersDelayDirectConsumer extends ConsumerMessage } elseif ($data['order_type'] == 3) { // 检测订单 $result = $OrderService->cancelUnpayOrder($data['order_no'],3,"支付超时"); + } elseif ($data['order_type'] == 4) { + // 服务包订单 + $result = $OrderService->cancelUnpayOrder($data['order_no'],3,"支付超时"); } else { Log::getInstance("queue-CancelUnpayOrders")->error("order_type类型错误"); return Result::DROP;// 销毁 diff --git a/app/Services/DetectionService.php b/app/Services/DetectionService.php index 8774cc4..d102e29 100644 --- a/app/Services/DetectionService.php +++ b/app/Services/DetectionService.php @@ -816,7 +816,7 @@ class DetectionService extends BaseService /** * 取消未支付检测订单 - * @param string|int $order_id + * @param string|int $order_no * @param string|int $cancel_reason 取消订单原因(1:主动取消 2:客服取消 3:支付超时) * @param string|int $cancel_remarks 取消备注 * @return array diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 79dd595..99031bc 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -95,8 +95,8 @@ class OrderService extends BaseService $result = $OrderProductService->cancelUnpayProductOrder($order['order_no'], $cancel_reason, $cancel_remarks); } elseif ($order['order_type'] == 3) { // 检测订单 - $DetectionService = new DetectionService(); - $result = $DetectionService->cancelUnpayDetectionOrder($order['order_no'], $cancel_reason, $cancel_remarks); + $OrderServicePackageService = new OrderServicePackageService(); + $result = $OrderServicePackageService->cancelUnpayServiceOrder($order['order_no'], $cancel_reason, $cancel_remarks); }else{ $result['status'] = 0; $result['message'] = "订单类型错误"; diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index eddc101..f161352 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -526,4 +526,84 @@ class OrderServicePackageService extends BaseService return success($result); } + + /** + * 取消未支付检测订单 + * @param string|int $order_no + * @param string|int $cancel_reason 取消订单原因(1:主动取消 2:客服取消 3:支付超时) + * @param string|int $cancel_remarks 取消备注 + * @return array + */ + public function cancelUnpayServiceOrder(string|int $order_no, string|int $cancel_reason, string|int $cancel_remarks): array + { + $result = array(); + $result['status'] = 1; + $result['message'] = "成功"; + + // 获取检测订单数据 + $params = array(); + $params['order_service_no'] = $order_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + $result['status'] = 0; + $result['message'] = "未查询到对应订单数据"; + return $result; + } + + // 检测订单状态 + if ($order_service_package['order_service_status'] == 5) { + // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + $result['status'] = 0; + $result['message'] = "订单已取消"; + return $result; + } + + if ($order_service_package['order_service_status'] != 1) { + // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + $result['status'] = 0; + $result['message'] = "订单取消失败"; + return $result; + } + + // 检测订单退款状态 + if (!in_array($order_service_package['refund_status'], [0, 4, 5])) { + // 检测订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + $result['status'] = 0; + $result['message'] = "订单正在退款中"; + return $result; + } + + // 检测订单支付状态 + if ($order_service_package['pay_status'] == 2) { + // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + $result['status'] = 0; + $result['message'] = "订单已支付"; + return $result; + } + + // 检测订单删除状态 + if ($order_service_package['is_delete'] == 1) { + // 删除状态(0:否 1:是) + $result['status'] = 2; + $result['message'] = "订单已被删除"; + return $result; + } + + // 取消检测订单 + $data = array(); + $data['order_service_status'] = 5; // 检测订单状态(1:待支付 2:待绑定 3:检测中 4:检测完成 5:已取消) + if ($cancel_reason == 3) { + $data['pay_status'] = 5; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + } + + $data['cancel_time'] = date("Y-m-d H:i:s", time()); + $data['cancel_remarks'] = $cancel_remarks; // 取消订单备注 + $data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + OrderServicePackage::edit($params, $data); + + return $result; + } } \ No newline at end of file From d7338c495bc150151cf5e08311af7253e39aacc6 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 11 Apr 2024 14:43:51 +0800 Subject: [PATCH 032/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=82=A3=E8=80=85?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=94=AF=E4=BB=98=E6=95=B0=E6=8D=AE=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=96=B0=E5=A2=9E=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=94=AF=E4=BB=98=E6=95=B0=E6=8D=AE=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Request/PatientOrderRequest.php | 4 +- app/Services/PatientOrderService.php | 97 ++++++++++++++++++++++++++-- config/config.php | 2 + extend/Wechat/WechatPay.php | 11 +++- 4 files changed, 103 insertions(+), 11 deletions(-) diff --git a/app/Request/PatientOrderRequest.php b/app/Request/PatientOrderRequest.php index e862d9a..1c6cace 100644 --- a/app/Request/PatientOrderRequest.php +++ b/app/Request/PatientOrderRequest.php @@ -20,7 +20,7 @@ class PatientOrderRequest extends FormRequest 'family_id',// 家庭成员id(就诊用户) ], 'getPatientOrderPayInfo' => [ // 获取患者订单支付数据 - "order_type", // 订单类型(1:问诊订单 2:药品订单 3:检测订单) + "order_type", // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) "order_no"// 订单编号 ], 'addPatientOrderPay' => [ // 模拟支付成功-金额为0时使用 @@ -75,7 +75,7 @@ class PatientOrderRequest extends FormRequest 'inquiry_status' => 'required|integer|min:0|max:4', - 'order_type' => 'required|integer|min:1|max:3', + 'order_type' => 'required|integer|min:1|max:5', 'order_no' => 'required', 'order_prescription_id' => 'required', diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index aaace47..b989aa6 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -28,6 +28,7 @@ use App\Model\OrderProduct; use App\Model\OrderProductCoupon; use App\Model\OrderProductItem; use App\Model\OrderProductLogistic; +use App\Model\OrderServicePackage; use App\Model\PatientFamily; use App\Model\PatientFamilyHealth; use App\Model\PatientFamilyPersonal; @@ -770,8 +771,8 @@ class PatientOrderService extends BaseService $result['pay_config'] = []; // 小程序支付配置 $result['cannot_use_coupon_reason'] = ""; // 不可使用优惠卷原因 + // 问诊订单 if ($order_type == 1) { - // 问诊订单 $params = array(); $params['inquiry_no'] = $order_no; $params['patient_id'] = $user_info['client_user_id']; @@ -784,6 +785,7 @@ class PatientOrderService extends BaseService if ($order_inquiry['inquiry_status'] != 1) { $return_result['message'] = "订单状态错误"; $return_result['data'] = $result; + $return_result['data']['order_no'] = $order_no; $return_result['data']['order_id'] = $order_inquiry['order_inquiry_id']; $return_result['data']['order_status'] = $order_inquiry['inquiry_status']; $return_result['data']['order_pay_status'] = $order_inquiry['inquiry_pay_status']; @@ -794,6 +796,7 @@ class PatientOrderService extends BaseService if ($order_inquiry['inquiry_pay_status'] != 1) { $return_result['message'] = "订单支付状态错误"; $return_result['data'] = $result; + $return_result['data']['order_no'] = $order_no; $return_result['data']['order_id'] = $order_inquiry['order_inquiry_id']; $return_result['data']['order_status'] = $order_inquiry['inquiry_status']; $return_result['data']['order_pay_status'] = $order_inquiry['inquiry_pay_status']; @@ -805,6 +808,7 @@ class PatientOrderService extends BaseService if ($diff_time >= 30) { $return_result['message'] = "订单已过期"; $return_result['data'] = $result; + $return_result['data']['order_no'] = $order_no; $return_result['data']['order_id'] = $order_inquiry['order_inquiry_id']; $return_result['data']['order_status'] = $order_inquiry['inquiry_status']; $return_result['data']['order_pay_status'] = $order_inquiry['inquiry_pay_status']; @@ -835,8 +839,10 @@ class PatientOrderService extends BaseService // 获取小程序支付配置 $pay_config = $WechatPay->getAppletsPayConfig($prepay['prepay_id']); } - } elseif ($order_type == 2) { - // 药品订单 + } + + // 药品订单 + if ($order_type == 2) { $params = array(); $params['order_product_no'] = $order_no; $params['patient_id'] = $user_info['client_user_id']; @@ -849,6 +855,7 @@ class PatientOrderService extends BaseService if ($order_product['order_product_status'] != 1) { $return_result['message'] = "订单状态错误"; $return_result['data'] = $result; + $return_result['data']['order_no'] = $order_no; $return_result['data']['order_id'] = $order_product['order_product_id']; $return_result['data']['order_status'] = $order_product['order_product_status']; $return_result['data']['order_pay_status'] = $order_product['pay_status']; @@ -859,6 +866,7 @@ class PatientOrderService extends BaseService if ($order_product['pay_status'] != 1) { $return_result['message'] = "订单支付状态错误"; $return_result['data'] = $result; + $return_result['data']['order_no'] = $order_no; $return_result['data']['order_product_id'] = $order_product['order_product_id']; $return_result['data']['order_product_status'] = $order_product['order_product_status']; $return_result['data']['order_pay_status'] = $order_product['pay_status']; @@ -870,6 +878,7 @@ class PatientOrderService extends BaseService if ($diff_time >= 30) { $return_result['message'] = "订单已过期"; $return_result['data'] = $result; + $return_result['data']['order_no'] = $order_no; $return_result['data']['order_product_id'] = $order_product['order_product_id']; $return_result['data']['order_product_status'] = $order_product['order_product_status']; $return_result['data']['order_pay_status'] = $order_product['pay_status']; @@ -896,6 +905,7 @@ class PatientOrderService extends BaseService if (empty($order_prescription_products)) { $return_result['message'] = "优惠卷数据错误"; $return_result['data'] = $result; + $return_result['data']['order_no'] = $order_no; $return_result['data']['order_product_id'] = $order_product['order_product_id']; $return_result['data']['order_product_status'] = $order_product['order_product_status']; $return_result['data']['order_pay_status'] = $order_product['pay_status']; @@ -909,6 +919,7 @@ class PatientOrderService extends BaseService if (empty($product)) { $return_result['message'] = "优惠卷数据错误"; $return_result['data'] = $result; + $return_result['data']['order_no'] = $order_no; $return_result['data']['order_product_id'] = $order_product['order_product_id']; $return_result['data']['order_product_status'] = $order_product['order_product_status']; $return_result['data']['order_pay_status'] = $order_product['pay_status']; @@ -943,8 +954,10 @@ class PatientOrderService extends BaseService // 获取小程序支付配置 $pay_config = $WechatPay->getAppletsPayConfig($prepay['prepay_id']); } - } elseif ($order_type == 3) { - // 检测订单 + } + + // 检测订单 + if ($order_type == 3) { // 获取检测订单数据 $params = array(); $params['detection_no'] = $order_no; @@ -958,6 +971,7 @@ class PatientOrderService extends BaseService if ($order_detection['detection_status'] != 1) { $return_result['message'] = "订单状态错误"; $return_result['data'] = $result; + $return_result['data']['order_no'] = $order_no; $return_result['data']['order_id'] = $order_detection['order_detection_id']; $return_result['data']['order_status'] = $order_detection['detection_status']; $return_result['data']['order_pay_status'] = $order_detection['detection_pay_status']; @@ -968,6 +982,7 @@ class PatientOrderService extends BaseService if ($order_detection['detection_pay_status'] != 1) { $return_result['message'] = "订单支付状态错误"; $return_result['data'] = $result; + $return_result['data']['order_no'] = $order_no; $return_result['data']['order_id'] = $order_detection['order_detection_id']; $return_result['data']['order_status'] = $order_detection['detection_status']; $return_result['data']['order_pay_status'] = $order_detection['detection_pay_status']; @@ -979,6 +994,7 @@ class PatientOrderService extends BaseService if ($diff_time >= 30) { $return_result['message'] = "订单已过期"; $return_result['data'] = $result; + $return_result['data']['order_no'] = $order_no; $return_result['data']['order_id'] = $order_detection['order_detection_id']; $return_result['data']['order_status'] = $order_detection['detection_status']; $return_result['data']['order_pay_status'] = $order_detection['detection_pay_status']; @@ -1007,8 +1023,75 @@ class PatientOrderService extends BaseService $pay_config = $WechatPay->getAppletsPayConfig($prepay['prepay_id']); } - } else { - return fail(); + } + + // 服务包订单 + if ($order_type == 4 || $order_type == 5) { + // 获取检测订单数据 + $params = array(); + $params['order_service_no'] = $order_no; + $params['patient_id'] = $user_info['client_user_id']; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + return fail(HttpEnumCode::HTTP_ERROR, "非法订单"); + } + + // 验证订单状态 + if ($order_service_package['order_service_status'] != 1) { + $return_result['message'] = "订单状态错误"; + $return_result['data'] = $result; + $return_result['data']['order_no'] = $order_no; + $return_result['data']['order_id'] = $order_service_package['order_service_id']; + $return_result['data']['order_status'] = $order_service_package['order_service_status']; + $return_result['data']['order_pay_status'] = $order_service_package['pay_status']; + return success($return_result); + } + + // 验证订单支付状态 + if ($order_detection['pay_status'] != 1) { + $return_result['message'] = "订单支付状态错误"; + $return_result['data'] = $result; + $return_result['data']['order_no'] = $order_no; + $return_result['data']['order_id'] = $order_service_package['order_service_id']; + $return_result['data']['order_status'] = $order_service_package['order_service_status']; + $return_result['data']['order_pay_status'] = $order_service_package['pay_status']; + return success($return_result); + } + + // 验证订单过期支付时间 + $diff_time = (strtotime($order_service_package['created_at']) - time()) / 60; + if ($diff_time >= 30) { + $return_result['message'] = "订单已过期"; + $return_result['data'] = $result; + $return_result['data']['order_no'] = $order_no; + $return_result['data']['order_id'] = $order_service_package['order_service_id']; + $return_result['data']['order_status'] = $order_service_package['order_service_status']; + $return_result['data']['order_pay_status'] = $order_service_package['pay_status']; + return success($return_result); + } + + $result['order_id'] = $order_service_package['order_service_id']; + $result['created_at'] = $order_service_package['created_at']; + + // 获取订单金额 + $result['amount_total'] = $order_service_package['amount_total']; // 订单金额 + $result['payment_amount_total'] = $order_service_package['amount_total'] - 0; // 实际订单金额 + $result['coupon_amount_total'] = 0; // 优惠金额 + + if ($order_service_package['payment_amount_total'] > 0) { + // 发起支付 + $WechatPay = new WechatPay(1, 3); + + // 获取预支付交易会话标识 + $prepay = $WechatPay->getJsapiPrepayId($order_no, (int)round($order_service_package['payment_amount_total'] * 100), $user_info['open_id'], "检测服务"); + if (empty($prepay)) { + return fail(HttpEnumCode::SERVER_ERROR); + } + + // 获取小程序支付配置 + $pay_config = $WechatPay->getAppletsPayConfig($prepay['prepay_id']); + } + } $result['pay_config'] = $pay_config ?? []; diff --git a/config/config.php b/config/config.php index 0d539ff..9fb07ba 100644 --- a/config/config.php +++ b/config/config.php @@ -48,6 +48,8 @@ return [ "product_refund_notify_url" => env('PATIENT_WECHAT_PRODUCT_REFUND_NOTIFY_URL', 'callback/wxpay/product/refund'), "detection_pay_notify_url" => env('PATIENT_WECHAT_DETECTION_PAY_NOTIFY_URL', 'callback/wxpay/detection/success'), "detection_refund_notify_url" => env('PATIENT_WECHAT_DETECTION_REFUND_NOTIFY_URL', 'callback/wxpay/detection/refund'), + "service_pay_notify_url" => env('PATIENT_WECHAT_SERVICE_PAY_NOTIFY_URL', 'callback/wxpay/service/success'), + "service_refund_notify_url" => env('PATIENT_WECHAT_SERVICE_REFUND_NOTIFY_URL', 'callback/wxpay/service/refund'), ], "pharmacist" => [ "app_id" => env('DOCTOR_WECHAT_APP_ID', 'wxc83296720404aa7b'), diff --git a/extend/Wechat/WechatPay.php b/extend/Wechat/WechatPay.php index e752a49..91dc71a 100644 --- a/extend/Wechat/WechatPay.php +++ b/extend/Wechat/WechatPay.php @@ -28,7 +28,7 @@ class WechatPay /** * @param string $user_type 用户类型(1:患者端 2:专家端 3:药师端) - * @param int $order_type 订单类型(1:问诊订单 2:药品订单 3:检测订单) + * @param int $order_type 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) */ public function __construct(string $user_type,int $order_type) { @@ -44,7 +44,7 @@ class WechatPay throw new BusinessException("系统配置错误", HttpEnumCode::SERVER_ERROR); } - if (!in_array($order_type,[1,2,3])){ + if (!in_array($order_type,[1,2,3,4,5])){ throw new BusinessException("订单类型错误", HttpEnumCode::SERVER_ERROR); } @@ -69,6 +69,13 @@ class WechatPay $this->pay_config = config("we_chat.applets.pay.1636644248"); } + if ($order_type == 4 || $order_type == 5){ + $this->pay_notify_url = $this->config['service_pay_notify_url']; + $this->refund_notify_url = $this->config['service_refund_notify_url']; + + $this->pay_config = config("we_chat.applets.pay.1659662936"); + } + $app_env = config('app_env','dev'); if ($app_env == "prod"){ $this->domain_name = env('DOMAIN_NAME_PROD','https://prod.hospital.applets.igandanyiyuan.com/'); From 8bda29a15e7ebedb3acd319d2ed0fc0c235d8c6a Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 11 Apr 2024 16:25:30 +0800 Subject: [PATCH 033/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E6=94=AF=E4=BB=98=E5=9B=9E=E8=B0=83=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/CallBackController.php | 440 ++++++++++++++++++++ app/Model/OrderServicePackageRefund.php | 85 ++++ app/Services/OrderService.php | 21 + app/Services/OrderServicePackageService.php | 1 + app/Services/PatientOrderService.php | 3 +- app/Utils/Auth.php | 2 + config/routes.php | 9 + extend/Wechat/WechatPay.php | 4 +- 8 files changed, 561 insertions(+), 4 deletions(-) create mode 100644 app/Model/OrderServicePackageRefund.php diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index 0cd96ea..e0b44c5 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -4,6 +4,7 @@ namespace App\Controller; use App\Amqp\Producer\AssignDoctorDelayDirectProducer; use App\Amqp\Producer\AutoCompleteInquiryDelayDirectProducer; +use App\Amqp\Producer\CancelUnInquiryOrdersDelayDirectProducer; use App\Amqp\Producer\DetectionCompleteDelayDirectProducer; use App\Amqp\Producer\DoctorNotYetInquiryDelayDirectProducer; use App\Amqp\Producer\GrantUserCouponDelayDirectProducer; @@ -32,7 +33,11 @@ use App\Model\OrderProductCoupon; use App\Model\OrderProductItem; use App\Model\OrderProductLogistic; use App\Model\OrderProductRefund; +use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageCase; use App\Model\PatientFamily; +use App\Model\PatientFamilyHealth; +use App\Model\PatientFamilyPersonal; use App\Model\Product; use App\Model\ProductPlatformAmount; use App\Model\User; @@ -2288,4 +2293,439 @@ class CallBackController extends AbstractController ); } + /** + * 微信服务包退款回调 + * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + * @throws \Throwable + */ + public function wxPayServiceRefundCallBack(): ResponseInterface + { + try { + // 处理支付结果事件 + $WechatPay = new WechatPay(1, 4); + $app = $WechatPay->createApp(); + $server = $app->getServer(); + + // 获取解密消息 + $message = $server->getDecryptedMessage(); + if (empty($message)) { + Db::rollBack(); + return $this->response->withStatus(500)->withBody(new SwooleStream(strval(json_encode(['code' => 'ERROR', 'message' => "回调数据为空"], JSON_UNESCAPED_UNICODE)))); + } + + Log::getInstance("CallBack-wxPayServiceRefund")->info(json_encode($message->toArray(), JSON_UNESCAPED_UNICODE)); + + if (empty($message['out_trade_no'])) { + Log::getInstance("CallBack-wxPayServiceRefund")->error("缺少外部订单号"); + return $server->serve(); + } + } catch (\Exception $e) { + // 验证失败 + Log::getInstance("CallBack-wxPayServiceRefund")->error($e->getMessage()); + return $this->wxPayErrorReturn($e->getMessage()); + } + + Db::beginTransaction(); + try { + // 验证订单数据 + $params = array(); + $params['order_service_no'] = $message['out_trade_no']; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + Db::rollBack(); + Log::getInstance("CallBack-wxPayServiceRefund")->error("非法订单"); + return $server->serve(); + } + + // 验证订单状态 + if ($order_service_package['order_service_status'] == 1) { + // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + Db::rollBack(); + Log::getInstance("CallBack-wxPayServiceRefund")->error("订单状态错误:当前为" . $order_service_package['order_service_status']); + return $server->serve(); + } + + // 验证订单退款状态 + if ($order_service_package['refund_status'] == 3) { + // 检测订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + Db::rollBack(); + Log::getInstance("CallBack-wxPayServiceRefund")->error("订单退款状态错误:当前为" . $order_service_package['refund_status']); + return $server->serve(); + } + + // 验证订单支付状态 + if (in_array($order_service_package['pay_status'], [1, 3, 4, 5, 6, 7])) { + // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + Db::rollBack(); + Log::getInstance("CallBack-wxPayServiceRefund")->error("订单支付状态错误:当前为" . $order_service_package['pay_status']); + return $server->serve(); + } + + // 处理退款回调结果 + $OrderService = new OrderService(); + $OrderService->orderRefundResult($order_service_package['order_service_no'],$message['refund_status'],$message['success_time']); + + Db::commit(); + } catch (\Exception $e) { + // 验证失败 + Db::rollBack(); + Log::getInstance("CallBack-wxPayServiceRefund")->error("微信支付回调数据验证失败:" . $e->getMessage()); + return $this->wxPayErrorReturn($e->getMessage()); + } + + Log::getInstance("CallBack-wxPayServiceRefund")->info("微信退款回调处理成功"); + + return $server->serve(); + } + + /** + * 患者端服务包支付回调 + * @return ResponseInterface + * @throws \Throwable + */ + public function wxPayServiceSuccessCallBack(): ResponseInterface + { + try { + // 处理支付结果事件 + $WechatPay = new WechatPay(1, 4); + $app = $WechatPay->createApp(); + $server = $app->getServer(); + + // 获取解密消息 + $message = $server->getDecryptedMessage(); + if (empty($message)) { + return $this->response->withStatus(500)->withBody(new SwooleStream(strval(json_encode(['code' => 'ERROR', 'message' => "问诊微信支付回调数据为空"], JSON_UNESCAPED_UNICODE)))); + } + + Log::getInstance("CallBack-wxPayServiceSuccess")->info(json_encode($message->toArray(), JSON_UNESCAPED_UNICODE)); + + if (empty($message['out_trade_no'])) { + Log::getInstance("CallBack-wxPayServiceSuccess")->error("缺少外部订单号"); + return $server->serve(); + } + }catch (\Throwable $e){ + // 验证失败 + Log::getInstance("CallBack-wxPayServiceSuccess")->error($e->getMessage()); + return $this->wxPayErrorReturn($e->getMessage()); + } + + Db::beginTransaction(); + try { + // 查询订单 + $params = array(); + $params['order_service_no'] = $message['out_trade_no']; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + Db::rollBack(); + Log::getInstance("CallBack-wxPayServiceSuccess")->error("无订单数据"); + return $server->serve(); + } + + // 验证订单状态 + if ($order_service_package['order_service_status'] != 1) { + // 检测订单状态(1:待支付 2:待绑定 3:检测中 4:检测完成 5:已取消) + Db::rollBack(); + Log::getInstance("CallBack-wxPayServiceSuccess")->error("检测微信支付回调数据处理失败,订单状态当前为" . $order_service_package['order_service_status']); + return $server->serve(); + } + + // 支付状态无需验证,如第一次支付失败,会修改支付状态,再次支付时,会出现验证不通过的情况 + + // 处理支付状态 + if ($message['trade_state'] == "SUCCESS") { + // 支付成功 + $pay_status = 2; + $pay_time = date('Y-m-d H:i:s', strtotime($message['success_time']));// 支付时间 + $order_service_status = 2;// 2:未开始 + if (empty($message['amount'])){ + Db::rollBack(); + Log::getInstance("CallBack-wxPayServiceSuccess")->error("无支付金额"); + return $this->wxPayErrorReturn("无支付金额"); + } + } elseif ($message['trade_state'] == "CLOSED") { + // 已关闭 + $pay_status = 6; + } elseif ($message['trade_state'] == "REVOKED") { + // 已撤销(付款码支付) + $pay_status = 7; + } elseif ($message['trade_state'] == "USERPAYING") { + // 用户支付中(付款码支付) + $pay_status = 3; + } elseif ($message['trade_state'] == "PAYERROR") { + // 支付失败(其他原因,如银行返回失败) + $pay_status = 4; + } else { + Db::rollBack(); + return $server->serve(); + } + + $data = array(); + $data['pay_status'] = $pay_status; + if (isset($order_service_status)){ + $data['order_service_status'] = $order_service_status; + } + if (isset($pay_time)){ + $data['pay_time'] = $pay_time; + } + + $data['escrow_trade_no'] = $message['transaction_id']; + $data['updated_at'] = date('Y-m-d H:i:s', time()); + + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + OrderServicePackage::edit($params, $data); + + // 修改订单表 + $data = array(); + $data['pay_status'] = $pay_status; + if (isset($pay_time)){ + $data['pay_time'] = $pay_time; + } + $data['escrow_trade_no'] = $message['transaction_id']; + $data['updated_at'] = date('Y-m-d H:i:s', time()); + + $params = array(); + $params['order_no'] = $order_service_package['order_service_no']; + Order::edit($params,$data); + + // 获取检测病例数据 + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_case = OrderServicePackageCase::getOne($params); + if (empty($order_service_package_case)) { + Db::rollBack(); + Log::getInstance("CallBack-wxPayServiceSuccess")->error("问诊病例数据错误"); + return $server->serve(); + } + + $order_service_package_case = $order_service_package_case->toArray(); + + // 获取患者家庭成员信息表-健康情况 + $params = array(); + $params['family_id'] = $order_service_package['family_id']; + $patient_family_health = PatientFamilyHealth::getOne($params); + + // 获取患者家庭成员信息表-个人情况 + $params = array(); + $params['family_id'] = $order_service_package['family_id']; + $patient_family_personal = PatientFamilyPersonal::getOne($params); + + // 获取家庭成员是否存在 + $params = array(); + $params['family_id'] = $order_service_package['family_id']; + $params['patient_id'] = $order_service_package['patient_id']; + $patient_family = PatientFamily::getOne($params); + if (empty($patient_family)) { + Db::rollBack(); + Log::getInstance("CallBack-wxPayServiceSuccess")->error("家庭成员数据错误"); + return $server->serve(); + } + + $generator = $this->container->get(IdGeneratorInterface::class); + + // 生成订单表 + $data = array(); + $data['user_id'] = $order_service_package['user_id']; + $data['patient_id'] = $order_service_package['client_user_id']; + $data['doctor_id'] = $order_service_package['doctor_id']; + if ($order_service_package['order_service_type'] == 1){ + $data['order_type'] = 5; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) + }else{ + $data['order_type'] = 4; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) + } + $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付) + $data['pay_status'] = 2; // 1:待支付 + $data['order_no'] = "I" . $generator->generate(); // 订单编号 + $data['amount_total'] = 0; // 订单金额 + $data['coupon_amount_total'] = 0; // 优惠卷总金额 + $data['payment_amount_total'] = 0; // 实际付款金额 + $order = Order::addOrder($data); + if (empty($order)) { + Db::rollBack(); + Log::getInstance("CallBack-wxPayServiceSuccess")->error("订单创建失败"); + return $server->serve(); + } + + // 创建问诊订单 + $data = array(); + $data['user_id'] = $order_service_package['user_id']; + $data['patient_id'] = $order_service_package['patient_id']; + $data['doctor_id'] = $order_service_package['doctor_id']; + $data['family_id'] = $order_service_package['family_id']; + $data['inquiry_type'] = 1; // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测) + if ($order_service_package['order_service_type'] == 1){ + $data['inquiry_mode'] = 8; // 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) + }else{ + $data['inquiry_mode'] = 9; // 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) + } + $data['inquiry_status'] = 3; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) + $data['inquiry_pay_status'] = 2; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + $data['inquiry_no'] = $order['order_no'];// 订单编号 + $data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号 + $data['amount_total'] = 0;// 订单金额 + $data['coupon_amount_total'] = 0;// 优惠卷总金额 + $data['payment_amount_total'] = 0;// 实际付款金额 + $data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间 + $data['reception_time'] = date('Y-m-d H:i:s', time());// 接诊时间 + $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::addOrderInquiry($data); + if (empty($order_inquiry)) { + Db::rollBack(); + Log::getInstance("CallBack-wxPayServiceSuccess")->error("订单创建失败"); + return $server->serve(); + } + + // 增加患者问诊病例 + $data = array(); + $data['user_id'] = $order_service_package['user_id']; + $data['patient_id'] = $order_service_package['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:未知 1:男 2:女) + $data['disease_class_id'] = $order_service_package_case['disease_class_id']; // 疾病分类id-系统 + $data['disease_class_name'] = $order_service_package_case['disease_class_name']; // 疾病名称-系统 + $data['diagnosis_date'] = $order_service_package_case['diagnosis_date']; // 确诊日期 + $data['disease_desc'] = $order_service_package_case['disease_desc']; // 病情描述(主诉) + $data['diagnose_images'] = $order_service_package_case['diagnose_images'] ?? ""; // 复诊凭证(多个使用逗号分隔) + + if ($patient_family['age'] != null) { + $data['age'] = getIdCardAge($patient_family['id_number']);// 患者年龄 + } + + // 身高(cm) + if ($patient_family['height'] != null) { + $data['height'] = $patient_family['height']; + } + + // 体重(kg) + if ($patient_family['weight'] != null) { + $data['weight'] = $patient_family['weight']; + } + + // 职业id-职业名称 + if ($patient_family['job_id'] != null) { + $data['job_id'] = $patient_family['job_id']; + if ($patient_family['job_name'] != null) { + $data['job_name'] = $patient_family['job_name']; + } + } + + // 民族id-民族名称 + if ($patient_family['nation_id'] != null) { + $data['nation_id'] = $patient_family['nation_id']; + if ($patient_family['nation_name'] != null) { + $data['nation_name'] = $patient_family['nation_name']; + } + } + + // 婚姻状况 + if ($patient_family['marital_status'] != null) { + $data['marital_status'] = $patient_family['marital_status']; + } + + // 家庭成员-健康情况 + if (!empty($patient_family_health)) { + if ($patient_family_health['diagnosis_hospital'] != null) { + $data['diagnosis_hospital'] = $patient_family_health['diagnosis_hospital']; // 确诊医院 + } + + if ($patient_family_health['is_take_medicine'] != null) { + $data['is_take_medicine'] = $patient_family_health['is_take_medicine']; // 正在服药 + if ($patient_family_health['drugs_name'] != null) { + $data['drugs_name'] = $patient_family_health['drugs_name']; // 正在服药名称 + } + } + } + + // 家庭成员-个人情况 + if (!empty($patient_family_personal)) { + if ($patient_family_personal['drink_wine_status'] != null) { + $data['drink_wine_status'] = $patient_family_personal['drink_wine_status']; // 饮酒状态 + } + + if ($patient_family_personal['smoke_status'] != null) { + $data['smoke_status'] = $patient_family_personal['smoke_status']; // 吸烟状态 + } + + if ($patient_family_personal['chemical_compound_status'] != null) { + $data['chemical_compound_status'] = $patient_family_personal['chemical_compound_status']; // 化合物状态 + if ($patient_family_personal['chemical_compound_describe'] != null) { + $data['chemical_compound_describe'] = $patient_family_personal['chemical_compound_describe']; // 化合物描述 + } + } + + if ($patient_family_personal['is_operation'] != null) { + $data['is_operation'] = $patient_family_personal['is_operation']; // 是否存在手术 + if ($patient_family_personal['operation'] != null) { + $data['operation'] = $patient_family_personal['operation']; // 手术描述 + } + } + } + + // 过敏史 + if (array_key_exists("is_allergy_history", $order_service_package_case)) { + if ($order_service_package_case['is_allergy_history'] !== null) { + $data['is_allergy_history'] = $order_service_package_case['is_allergy_history']; // 是否存在过敏史(0:否 1:是) + if ($order_service_package_case['allergy_history'] != "") { + $data['allergy_history'] = $order_service_package_case['allergy_history']; // 过敏史描述 + } + } + } + + // 家族病史 + if (array_key_exists("is_family_history", $order_service_package_case)) { + if ($order_service_package_case['is_family_history'] !== null) { + $data['is_family_history'] = $order_service_package_case['is_family_history']; // 是否存在家族病史(0:否 1:是) + if ($order_service_package_case['family_history'] != "") { + $data['family_history'] = $order_service_package_case['family_history']; // 家族病史描述 + } + } + } + + $order_inquiry_case = OrderInquiryCase::addOrderInquiryCase($data); + if (empty($order_inquiry_case)) { + Db::rollBack(); + Log::getInstance("CallBack-wxPayServiceSuccess")->error("订单创建失败"); + return $server->serve(); + } + + // 加入未接诊取消订单延迟队列 + $time = 60 * 60 * 24; + if (\Hyperf\Config\config('app_env') == "dev"){ + $time = 60 * 10; + } + + $data = array(); + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $data['order_no'] = $order_inquiry['inquiry_no']; + $message = new CancelUnInquiryOrdersDelayDirectProducer($data); + $message->setDelayMs(1000 * $time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + Db::rollBack(); + Log::getInstance("CallBack-wxPayServiceSuccess")->error("订单创建失败"); + return $server->serve(); + } + + Db::commit(); + } catch (\Exception $e) { + // 验证失败 + Db::rollBack(); + Log::getInstance("CallBack-wxPayServiceSuccess")->error("问诊微信支付回调数据处理失败:" . $e->getMessage()); + return $this->wxPayErrorReturn($e->getMessage()); + } + + Log::getInstance("CallBack-wxPayServiceSuccess")->info("检测微信支付回调处理成功"); + + return $server->serve(); + } } \ No newline at end of file diff --git a/app/Model/OrderServicePackageRefund.php b/app/Model/OrderServicePackageRefund.php new file mode 100644 index 0000000..54a785c --- /dev/null +++ b/app/Model/OrderServicePackageRefund.php @@ -0,0 +1,85 @@ +first($fields); + } + + /** + * 多条 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params, array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + + /** + * 新增 + * @param array $data + * @return OrderServicePackageRefund|\Hyperf\Database\Model\Model + */ + public static function addOrderServicePackageRefund(array $data): \Hyperf\Database\Model\Model|OrderServicePackageRefund + { + return self::create($data); + } + + /** + * 修改 + * @param array $params + * @param array $data + * @return int + */ + public static function edit(array $params = [], array $data = []): int + { + return self::where($params)->update($data); + } +} diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 99031bc..e388fe3 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -13,6 +13,8 @@ use App\Model\OrderInquiryRefund; use App\Model\OrderProduct; use App\Model\OrderProductRefund; use App\Model\OrderRefund; +use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageRefund; use App\Utils\Log; use Extend\Wechat\WechatPay; use Hyperf\Amqp\Result; @@ -490,6 +492,25 @@ class OrderService extends BaseService $params['detection_no'] = $order['order_no']; OrderDetectionRefund::edit($params, $data); + break; + case 4: // 服务包订单 + // 修改订单 + $data = array(); + $data['refund_status'] = $refund_status; + + $params = array(); + $params['order_service_no'] = $order['order_no']; + OrderServicePackage::edit($params, $data); + + // 修改退款订单 + $data = array(); + $data['detection_refund_status'] = $refund_status; + $data['success_time'] = $success_time; + + $params = array(); + $params['order_service_no'] = $order['order_no']; + OrderServicePackageRefund::edit($params, $data); + break; default: throw new BusinessException("订单类型错误"); diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index f161352..5cb9e2c 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -606,4 +606,5 @@ class OrderServicePackageService extends BaseService return $result; } + } \ No newline at end of file diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index b989aa6..f9e0dd4 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1080,7 +1080,7 @@ class PatientOrderService extends BaseService if ($order_service_package['payment_amount_total'] > 0) { // 发起支付 - $WechatPay = new WechatPay(1, 3); + $WechatPay = new WechatPay(1, 4); // 获取预支付交易会话标识 $prepay = $WechatPay->getJsapiPrepayId($order_no, (int)round($order_service_package['payment_amount_total'] * 100), $user_info['open_id'], "检测服务"); @@ -1091,7 +1091,6 @@ class PatientOrderService extends BaseService // 获取小程序支付配置 $pay_config = $WechatPay->getAppletsPayConfig($prepay['prepay_id']); } - } $result['pay_config'] = $pay_config ?? []; diff --git a/app/Utils/Auth.php b/app/Utils/Auth.php index 7eeffd9..f559945 100644 --- a/app/Utils/Auth.php +++ b/app/Utils/Auth.php @@ -30,6 +30,8 @@ class Auth "/callback/wxpay/product/refund" => "post", // 微信药品退款回调 "/callback/wxpay/detection/success" => "post", // 微信检测订单支付回调 "/callback/wxpay/detection/refund" => "post", // 微信检测订单退款回调 + "/callback/wxpay/service/success" => "post", // 微信服务包订单支付回调 + "/callback/wxpay/service/refund" => "post", // 微信服务包订单退款回调 "/callback/im" => "post", // im回调 "/callback/platform/logistics" => "post", // 处方平台物流回调 "/callback/logistics" => "post", // 快递100订阅回调 diff --git a/config/routes.php b/config/routes.php index ef1a2c0..110ad65 100644 --- a/config/routes.php +++ b/config/routes.php @@ -768,6 +768,15 @@ Router::addGroup('/callback', function () { // 退款回调 Router::post('/refund', [CallBackController::class, 'wxPayDetectionRefundCallBack']); }); + + // 服务包 + Router::addGroup('/service', function () { + // 支付成功回调 + Router::post('/success', [CallBackController::class, 'wxPayServiceSuccessCallBack']); + + // 退款回调 + Router::post('/refund', [CallBackController::class, 'wxPayServiceRefundCallBack']); + }); }); // im聊天回调 diff --git a/extend/Wechat/WechatPay.php b/extend/Wechat/WechatPay.php index 91dc71a..fee9ee2 100644 --- a/extend/Wechat/WechatPay.php +++ b/extend/Wechat/WechatPay.php @@ -28,7 +28,7 @@ class WechatPay /** * @param string $user_type 用户类型(1:患者端 2:专家端 3:药师端) - * @param int $order_type 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) + * @param int $order_type 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:服务包订单) */ public function __construct(string $user_type,int $order_type) { @@ -69,7 +69,7 @@ class WechatPay $this->pay_config = config("we_chat.applets.pay.1636644248"); } - if ($order_type == 4 || $order_type == 5){ + if ($order_type == 4){ $this->pay_notify_url = $this->config['service_pay_notify_url']; $this->refund_notify_url = $this->config['service_refund_notify_url']; From 391319c6c5cecea83b3d859664c6f442a7d5bc50 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 11 Apr 2024 17:03:21 +0800 Subject: [PATCH 034/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=82=A3=E8=80=85?= =?UTF-8?q?=E5=B7=B2=E8=B4=AD=E4=B9=B0=E7=9A=84=E6=9F=90=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E7=9A=84=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AF=A6=E6=83=85=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=BF=94=E5=9B=9E=E5=80=BC=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OrderServicePackageController.php | 17 +++++++++++++++++ app/Request/OrderServicePackageRequest.php | 5 +++++ app/Services/OrderServicePackageService.php | 10 +++++----- config/routes.php | 3 +++ 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/app/Controller/OrderServicePackageController.php b/app/Controller/OrderServicePackageController.php index b668706..0802839 100644 --- a/app/Controller/OrderServicePackageController.php +++ b/app/Controller/OrderServicePackageController.php @@ -45,4 +45,21 @@ class OrderServicePackageController extends AbstractController $data = $OrderServicePackageService->addPatientServiceOrder(); return $this->response->json($data); } + + /** + * 创建服务包问诊订单 + * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function addServiceInquiryOrder(): ResponseInterface + { + $request = $this->container->get(OrderServicePackageRequest::class); + $request->scene('addServiceInquiryOrder')->validateResolved(); + + $OrderServicePackageService = new OrderServicePackageService(); + $data = $OrderServicePackageService->addPatientServiceOrder(); + return $this->response->json($data); + } + } \ No newline at end of file diff --git a/app/Request/OrderServicePackageRequest.php b/app/Request/OrderServicePackageRequest.php index f2b6861..2b99086 100644 --- a/app/Request/OrderServicePackageRequest.php +++ b/app/Request/OrderServicePackageRequest.php @@ -32,6 +32,9 @@ class OrderServicePackageRequest extends FormRequest 'inquiry_mode', // 订单问诊方式(1:图文 2:视频 3:语音 4:电话 5:会员) 'client_type', // 客户端类型(1:手机 2:电脑) ], + 'addServiceInquiryOrder' => [ // 创建服务包问诊订单 + 'order_no', + ], ]; /** @@ -61,6 +64,7 @@ class OrderServicePackageRequest extends FormRequest 'client_type' => 'required|integer|min:1|max:2', 'service_type' => ['required','integer',Rule::in([1,2])], 'doctor_id' => 'required', + 'order_no' => 'required', ]; } @@ -100,6 +104,7 @@ class OrderServicePackageRequest extends FormRequest 'service_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'service_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'service_type.in' => "服务包类型错误", + 'order_no.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), ]; } } diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 5cb9e2c..4c3e23c 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -98,7 +98,7 @@ class OrderServicePackageService extends BaseService if (!empty($order_inquiry)) { $result['status'] = 4; $result['message'] = "您和当前医生存在问诊中订单,无法够买服务包"; - $result['data'] = $order_inquiry['inquiry_no']; + $result['data']['order_no'] = $order_inquiry['inquiry_no']; return success($result); } @@ -121,14 +121,14 @@ class OrderServicePackageService extends BaseService if ($order_service_package['order_service_status'] == 1){ $result['status'] = 2; $result['message'] = "存在未支付订单"; - $result['data'] = $order_service_package['order_service_no']; + $result['data']['order_no'] = $order_service_package['order_service_no']; return success($result); } if ($order_service_package['order_service_status'] == 2){ $result['status'] = 2; $result['message'] = "您已购买该服务包,请耐心等待医生接诊"; - $result['data'] = $order_service_package['order_service_no']; + $result['data']['order_no'] = $order_service_package['order_service_no']; return success($result); } @@ -188,7 +188,7 @@ class OrderServicePackageService extends BaseService // 超出当月问诊次数 $result['status'] = 3; $result['message'] = "超出服务包所包含的当月问诊次数"; - $result['data'] = $order_service_package['order_service_no']; + $result['data']['order_no'] = $order_service_package['order_service_no']; return success($result); } } @@ -196,7 +196,7 @@ class OrderServicePackageService extends BaseService // 未超出当月问诊次数或次数无限制 $result['status'] = 5; $result['message'] = "已购买,未超出当月问诊次数"; - $result['data'] = $order_service_package['order_service_no']; + $result['data']['order_no'] = $order_service_package['order_service_no']; return success($result); } diff --git a/config/routes.php b/config/routes.php index 110ad65..a84ed7f 100644 --- a/config/routes.php +++ b/config/routes.php @@ -587,6 +587,9 @@ Router::addGroup('/patient', function () { // 创建服务包订单 Router::post('', [OrderServicePackageController::class, 'addPatientServiceOrder']); + + // 创建服务包问诊订单 + Router::post('/inquiry/{order_no}', [OrderServicePackageController::class, 'addServiceInquiryOrder']); }); }); From 605a069e078b726f575771ff685c06d114aa6ba4 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 11 Apr 2024 17:12:46 +0800 Subject: [PATCH 035/274] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E8=AE=A2=E5=8D=95=E6=96=B0=E5=A2=9E=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E6=80=80=E5=AD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/OrderServicePackageCase.php | 8 +++++--- app/Request/OrderServicePackageRequest.php | 4 +++- app/Services/OrderServicePackageService.php | 7 +++++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/Model/OrderServicePackageCase.php b/app/Model/OrderServicePackageCase.php index 78228b1..4b21e1b 100644 --- a/app/Model/OrderServicePackageCase.php +++ b/app/Model/OrderServicePackageCase.php @@ -31,8 +31,10 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property string $allergy_history 过敏史描述 * @property int $is_family_history 是否存在家族病史(0:否 1:是) * @property string $family_history 家族病史描述 - * @property Carbon $created_at 创建时间 - * @property Carbon $updated_at 修改时间 + * @property int $is_pregnant 是否备孕、妊娠、哺乳期(0:否 1:是) + * @property string $pregnant 备孕、妊娠、哺乳期描述 + * @property \Carbon\Carbon $created_at 创建时间 + * @property \Carbon\Carbon $updated_at 修改时间 */ class OrderServicePackageCase extends Model { @@ -46,7 +48,7 @@ class OrderServicePackageCase extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['order_service_case_id', 'user_id', 'patient_id', 'order_id', 'order_service_id', 'family_id', 'disease_class_id', 'relation', 'status', 'name', 'sex', 'age', 'disease_class_name', 'diagnosis_date', 'disease_desc', 'diagnose_images', 'is_allergy_history', 'allergy_history', 'is_family_history', 'family_history', 'created_at', 'updated_at']; + protected array $fillable = ['order_service_case_id', 'user_id', 'patient_id', 'order_id', 'order_service_id', 'family_id', 'disease_class_id', 'relation', 'status', 'name', 'sex', 'age', 'disease_class_name', 'diagnosis_date', 'disease_desc', 'diagnose_images', 'is_allergy_history', 'allergy_history', 'is_family_history', 'family_history', 'is_pregnant', 'pregnant', 'created_at', 'updated_at']; protected string $primaryKey = "order_service_id"; diff --git a/app/Request/OrderServicePackageRequest.php b/app/Request/OrderServicePackageRequest.php index 2b99086..8d380e4 100644 --- a/app/Request/OrderServicePackageRequest.php +++ b/app/Request/OrderServicePackageRequest.php @@ -31,6 +31,7 @@ class OrderServicePackageRequest extends FormRequest 'inquiry_type', // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) 'inquiry_mode', // 订单问诊方式(1:图文 2:视频 3:语音 4:电话 5:会员) 'client_type', // 客户端类型(1:手机 2:电脑) + 'is_pregnant',// 备孕、妊娠、哺乳期 ], 'addServiceInquiryOrder' => [ // 创建服务包问诊订单 'order_no', @@ -60,7 +61,7 @@ class OrderServicePackageRequest extends FormRequest 'disease_desc' => 'required', 'is_allergy_history' => ['sometimes','numeric','min:0','max:1'], 'is_family_history' => ['sometimes','numeric','min:0','max:1'], - 'is_pregnant' => ['sometimes','numeric','min:0','max:1'], + 'is_pregnant' => ['sometimes',Rule::in([0,1,null])], 'client_type' => 'required|integer|min:1|max:2', 'service_type' => ['required','integer',Rule::in([1,2])], 'doctor_id' => 'required', @@ -104,6 +105,7 @@ class OrderServicePackageRequest extends FormRequest 'service_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'service_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'service_type.in' => "服务包类型错误", + 'is_pregnant.in' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'order_no.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), ]; } diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 4c3e23c..4e3e8e1 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -491,6 +491,13 @@ class OrderServicePackageService extends BaseService } } + // 是否备孕、妊娠、哺乳期(0:否 1:是) + if (array_key_exists("is_pregnant", $request_params)) { + if ($request_params['is_pregnant'] !== null) { + $data['is_pregnant'] = $request_params['is_pregnant']; // 是否备孕、妊娠、哺乳期(0:否 1:是) + } + } + $order_service_package_case = OrderServicePackageCase::addOrderServicePackageCase($data); if (empty($order_service_package_case)) { Db::rollBack(); From cde261be5df4be382ad1b5c223f9c2253a8dcb3f Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 09:53:10 +0800 Subject: [PATCH 036/274] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E8=AE=A2=E5=8D=95=E6=96=B0=E5=A2=9E=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E6=80=80=E5=AD=95,=E5=8F=96=E6=B6=88=E4=B8=BA=E6=8E=A5?= =?UTF-8?q?=E8=AF=8A=E8=AE=A2=E5=8D=95=E5=A2=9E=E5=8A=A0=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95=E5=A4=84=E7=90=86?= =?UTF-8?q?=E3=80=81=E6=96=B0=E5=A2=9E=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E9=80=80=E6=AC=BE=E9=80=BB=E8=BE=91=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ncelUnInquiryOrdersDelayDirectConsumer.php | 25 +- .../CancelUnpayOrdersDelayDirectConsumer.php | 3 +- app/Controller/CallBackController.php | 7 + .../OrderServicePackageController.php | 2 +- app/Model/OrderServicePackageInquiry.php | 81 +++ app/Services/InquiryService.php | 2 +- app/Services/OrderService.php | 81 ++- app/Services/OrderServicePackageService.php | 550 +++++++++++++++--- 8 files changed, 675 insertions(+), 76 deletions(-) create mode 100644 app/Model/OrderServicePackageInquiry.php diff --git a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php index 8dacc25..37b0da8 100644 --- a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php @@ -8,6 +8,7 @@ use App\Constants\HttpEnumCode; use App\Model\Order; use App\Model\OrderInquiry; use App\Model\OrderInquiryCoupon; +use App\Model\OrderServicePackageInquiry; use App\Model\UserCoupon; use App\Model\UserDoctor; use App\Services\ImService; @@ -61,10 +62,11 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage $res = $Utils->checkHandleNumber($redis_key); if (!$res) { Log::getInstance("queue-CancelUnInquiryOrders")->error("超出最大执行次数或检测错误"); + return Result::ACK; } }catch (\Throwable $e){ Log::getInstance("queue-CancelUnInquiryOrders")->error($e->getMessage()); - return Result::ACK; + return Result::REQUEUE; } Db::beginTransaction(); @@ -147,6 +149,27 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage $OrderService->orderRefund($order_inquiry['inquiry_no'], "医生未接诊"); } + // 服务包问诊订单处理 + if ($order_inquiry['inquiry_type'] == 1){ + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取服务包订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getList($params); + if (empty($order_service_package_inquiry)){ + Db::rollBack(); + Log::getInstance("queue-CancelUnInquiryOrders")->error("获取服务包订单数据失败"); + return Result::ACK; + } + + if (count($order_service_package_inquiry) == 1){ + // 首单服务包问诊订单,但问诊订单未接诊,执行服务包退款 + $OrderService = new OrderService(); + $OrderService->orderRefund($order_service_package_inquiry['order_service_no'], "医生未接诊"); + } + } + } + Db::commit(); } catch (\Exception $e) { Db::rollBack(); diff --git a/app/Amqp/Consumer/CancelUnpayOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnpayOrdersDelayDirectConsumer.php index 2fbd2ba..064dc92 100644 --- a/app/Amqp/Consumer/CancelUnpayOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnpayOrdersDelayDirectConsumer.php @@ -60,11 +60,12 @@ class CancelUnpayOrdersDelayDirectConsumer extends ConsumerMessage $res = $Utils->checkHandleNumber($redis_key); if (!$res) { Log::getInstance("queue-CancelUnpayOrders")->error("超出最大执行次数或检测错误"); + return Result::ACK; } }catch (\Throwable $e){ Log::getInstance("queue-CancelUnpayOrders")->error($e->getMessage()); - return Result::ACK; + return Result::REQUEUE; } Db::beginTransaction(); diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index e0b44c5..d85887a 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -2690,6 +2690,13 @@ class CallBackController extends AbstractController } } + // 是否备孕、妊娠、哺乳期(0:否 1:是) + if (array_key_exists("is_pregnant", $order_service_package_case)) { + if ($order_service_package_case['is_pregnant'] !== null) { + $data['is_pregnant'] = $order_service_package_case['is_pregnant']; // 是否备孕、妊娠、哺乳期(0:否 1:是) + } + } + $order_inquiry_case = OrderInquiryCase::addOrderInquiryCase($data); if (empty($order_inquiry_case)) { Db::rollBack(); diff --git a/app/Controller/OrderServicePackageController.php b/app/Controller/OrderServicePackageController.php index 0802839..ec51334 100644 --- a/app/Controller/OrderServicePackageController.php +++ b/app/Controller/OrderServicePackageController.php @@ -58,7 +58,7 @@ class OrderServicePackageController extends AbstractController $request->scene('addServiceInquiryOrder')->validateResolved(); $OrderServicePackageService = new OrderServicePackageService(); - $data = $OrderServicePackageService->addPatientServiceOrder(); + $data = $OrderServicePackageService->addServiceInquiryOrder(); return $this->response->json($data); } diff --git a/app/Model/OrderServicePackageInquiry.php b/app/Model/OrderServicePackageInquiry.php new file mode 100644 index 0000000..5d06ccd --- /dev/null +++ b/app/Model/OrderServicePackageInquiry.php @@ -0,0 +1,81 @@ +first($fields); + } + + /** + * 多条 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params, array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + + /** + * 新增 + * @param array $data + * @return OrderServicePackageInquiry|\Hyperf\Database\Model\Model + */ + public static function addOrderServicePackageInquiry(array $data): \Hyperf\Database\Model\Model|OrderServicePackageInquiry + { + return self::create($data); + } + + /** + * 修改 + * @param array $params + * @param array $data + * @return int + */ + public static function edit(array $params = [], array $data = []): int + { + return self::where($params)->update($data); + } +} diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index f31070b..2e55966 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -2127,7 +2127,7 @@ class InquiryService extends BaseService /** * 获取患者在某一时间段的服务包问诊订单-创建时间 - * @param string|int $order_service_type + * @param string|int $order_service_type 服务包类型(1:健康包 2:随访包) * @param string $patient_id * @param string $doctor_id * @param string $start_date diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index e388fe3..5d81e2a 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -97,9 +97,13 @@ class OrderService extends BaseService $result = $OrderProductService->cancelUnpayProductOrder($order['order_no'], $cancel_reason, $cancel_remarks); } elseif ($order['order_type'] == 3) { // 检测订单 + $DetectionService = new DetectionService(); + $result = $DetectionService->cancelUnpayDetectionOrder($order['order_no'], $cancel_reason, $cancel_remarks); + } elseif ($order['order_type'] == 4 ||$order['order_type'] == 5 ) { + // 服务包订单 $OrderServicePackageService = new OrderServicePackageService(); $result = $OrderServicePackageService->cancelUnpayServiceOrder($order['order_no'], $cancel_reason, $cancel_remarks); - }else{ + } else{ $result['status'] = 0; $result['message'] = "订单类型错误"; } @@ -162,6 +166,9 @@ class OrderService extends BaseService } elseif ($order['order_type'] == 3) { // 检测检测订单可退款状态 $this->checkOrderDetectionStatusForRefund($order['order_no']); + } elseif ($order['order_type'] == 4 || $order['order_type'] == 5) { + // 检测服务包订单可退款状态 + $this->checkOrderServiceStatusForRefund($order['order_no']); } else { throw new BusinessException("订单类型错误"); } @@ -375,11 +382,46 @@ class OrderService extends BaseService $params['order_detection_id'] = $order_detection['order_detection_id']; OrderDetection::editOrderDetection($params, $data); + break; + case 4: // 服务包订单 + // 获取订单数据 + $params = array(); + $params['order_service_no'] = $order_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + throw new BusinessException("订单数据为空"); + } + + // 新增退款表 + $data = array(); + $data['patient_id'] = $order['patient_id']; + $data['order_service_id'] = $order_service_package['order_service_id']; + $data['order_service_no'] = $order_service_package['order_service_no']; + $data['service_refund_no'] = $refund_no; + $data['refund_id'] = $refund_id; + $data['detection_refund_status'] = $refund_status; + $data['refund_total'] = $order_service_package['payment_amount_total']; + $data['refund_reason'] = $refund_reason; + if ($refund_status == 3 && !empty($success_time)) { + $data['success_time'] = date("Y-m-d H:i:s", strtotime($success_time)); // 退款成功时间 + } + $order_service_package_refund = OrderServicePackageRefund::addOrderServicePackageRefund($data); + if (empty($order_service_package_refund)) { + throw new BusinessException("添加退款表失败"); + } + + // 修改问诊订单表状态 + $data = array(); + $data['refund_status'] = $refund_status; + + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + OrderServicePackage::edit($params, $data); + break; default: throw new BusinessException("订单类型错误"); } - } catch (\Throwable $e) { throw new BusinessException($e->getMessage()); } @@ -637,7 +679,7 @@ class OrderService extends BaseService } // 检测问诊订单状态 - if (!in_array($order_detection['detection_status'], [2, 5])) { + if (!in_array($order_detection['detection_status'], [2, 3])) { // 检测订单状态(1:待支付 2:待绑定 3:检测中 4:检测完成 5:已取消) throw new BusinessException("订单状态错误"); } @@ -654,4 +696,37 @@ class OrderService extends BaseService throw new BusinessException("订单支付状态错误"); } } + + /** + * 检测服务包订单可退款状态 + * @param string $order_no + */ + public function checkOrderServiceStatusForRefund(string $order_no): void + { + // 获取订单数据 + $params = array(); + $params['order_service_no'] = $order_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + throw new BusinessException("订单数据为空"); + } + + // 检测问诊订单状态 + if (!in_array($order_service_package['order_service_status'], [2, 3])) { + // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + throw new BusinessException("订单状态错误"); + } + + // 检测订单退款状态 + if (in_array($order_service_package['refund_status'], [2, 3, 5, 6])) { + // 检测订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + throw new BusinessException("订单退款状态错误"); + } + + // 检测支付状态 + if ($order_service_package['pay_status'] != 2) { + // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + throw new BusinessException("订单支付状态错误"); + } + } } \ No newline at end of file diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 4e3e8e1..4854f8e 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -5,10 +5,13 @@ namespace App\Services; use App\Amqp\Producer\CancelUnInquiryOrdersDelayDirectProducer; use App\Amqp\Producer\CancelUnpayOrdersDelayDirectProducer; use App\Constants\HttpEnumCode; +use App\Exception\BusinessException; use App\Model\DiseaseClass; use App\Model\DoctorConfigFollowPackage; use App\Model\DoctorConfigFollowPackageItem; use App\Model\DoctorConfigHealthPackage; +use App\Model\DoctorInquiryConfig; +use App\Model\HealthPackage; use App\Model\InquiryCaseProduct; use App\Model\Order; use App\Model\OrderCoupon; @@ -48,8 +51,8 @@ class OrderServicePackageService extends BaseService $service_type = $this->request->input("service_type");// 服务包类型 1:健康 2:随访 $follow_package_item_id = $this->request->input("follow_package_item_id"); - if ($service_type == 2){ - if (empty($follow_package_item_id)){ + if ($service_type == 2) { + if (empty($follow_package_item_id)) { return fail(); } } @@ -69,20 +72,21 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "患者信息错误"); } - if ($service_type == 1){ + if ($service_type == 1) { $inquiry_mode = 8; - }else{ + } else { $inquiry_mode = 9; } + // 检测是否存在同类型未完成的问诊订单 $PatientOrderService = new PatientOrderService(); - $order_inquiry_id = $PatientOrderService->getNotFinishedOrderInquiry(1,$inquiry_mode,$user_info['client_user_id']); + $order_inquiry_id = $PatientOrderService->getNotFinishedOrderInquiry(1, $inquiry_mode, $user_info['client_user_id']); if (!empty($order_inquiry_id)) { // 获取问诊订单数据 $params = array(); $params['order_inquiry_id'] = $order_inquiry_id; $order_inquiry = OrderInquiry::getOne($params); - if (empty($order_inquiry)){ + if (empty($order_inquiry)) { return fail(HttpEnumCode::SERVER_ERROR); } @@ -110,22 +114,22 @@ class OrderServicePackageService extends BaseService $params['family_id'] = $family_id; $params['order_service_type'] = $service_type; - $order_service_status = ['1','2','3']; - $order_service_package = OrderServicePackage::getStatusOne($params,$order_service_status); - if (empty($order_service_package)){ + $order_service_status = ['1', '2', '3']; + $order_service_package = OrderServicePackage::getStatusOne($params, $order_service_status); + if (empty($order_service_package)) { $result['message'] = "未购买"; return success($result); } // 检测服务包订单订单状态 - if ($order_service_package['order_service_status'] == 1){ + if ($order_service_package['order_service_status'] == 1) { $result['status'] = 2; $result['message'] = "存在未支付订单"; $result['data']['order_no'] = $order_service_package['order_service_no']; return success($result); } - if ($order_service_package['order_service_status'] == 2){ + if ($order_service_package['order_service_status'] == 2) { $result['status'] = 2; $result['message'] = "您已购买该服务包,请耐心等待医生接诊"; $result['data']['order_no'] = $order_service_package['order_service_no']; @@ -136,32 +140,32 @@ class OrderServicePackageService extends BaseService $params = array(); $params['order_service_no'] = $order_service_package['order_service_no']; $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (empty($order_service_package_detail)){ + if (empty($order_service_package_detail)) { return fail(HttpEnumCode::SERVER_ERROR); } // 检测随访包 - if ($service_type == 2){ + if ($service_type == 2) { // 检测服务周期是否相同,相同表示购买的同一个随访包 $params = array(); $params['follow_package_item_id'] = $follow_package_item_id; $doctor_config_follow_package_item = DoctorConfigFollowPackageItem::getOne($params); - if (empty($doctor_config_follow_package_item)){ - return fail(HttpEnumCode::HTTP_ERROR,"随访包选择错误"); + if (empty($doctor_config_follow_package_item)) { + return fail(HttpEnumCode::HTTP_ERROR, "随访包选择错误"); } $params = array(); $params['follow_package_id'] = $doctor_config_follow_package_item['follow_package_id']; $params['doctor_id'] = $doctor_id; $doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params); - if (empty($doctor_config_follow_package)){ - return fail(HttpEnumCode::HTTP_ERROR,"随访包选择错误"); + if (empty($doctor_config_follow_package)) { + return fail(HttpEnumCode::HTTP_ERROR, "随访包选择错误"); } } // 处理问诊次数 // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 - if ($order_service_package_detail['monthly_frequency'] != 0){ + if ($order_service_package_detail['monthly_frequency'] != 0) { $month_inquiry_count = 0; // 当前所属月问诊次数 // 获取当月问诊次数 @@ -179,12 +183,12 @@ class OrderServicePackageService extends BaseService $start_date = date('Y-m-d 00:00:00', strtotime($end_date . "-30 days")); $InquiryService = new InquiryService(); - $order_inquiry = $InquiryService->getPatientServiceInquiry($service_type,$user_info['client_user_id'],$doctor_id,$start_date,$end_date); - if (!empty($order_inquiry)){ + $order_inquiry = $InquiryService->getPatientServiceInquiry($service_type, $user_info['client_user_id'], $doctor_id, $start_date, $end_date); + if (!empty($order_inquiry)) { $month_inquiry_count = count($order_inquiry); } - if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']){ + if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']) { // 超出当月问诊次数 $result['status'] = 3; $result['message'] = "超出服务包所包含的当月问诊次数"; @@ -218,6 +222,12 @@ class OrderServicePackageService extends BaseService $user_info = $this->request->getAttribute("userInfo") ?? []; $request_params = $this->request->all(); + // 检测参数 + if ($request_params['service_type'] == 2) { + if (empty($request_params['follow_package_item_id'])) { + return fail(HttpEnumCode::CLIENT_HTTP_ERROR); + } + } // 检测家庭成员是否存在 $params = array(); $params['family_id'] = $request_params['family_id']; @@ -230,13 +240,13 @@ class OrderServicePackageService extends BaseService // 检测是否存在同类型未完成的问诊订单 $PatientOrderService = new PatientOrderService(); - $order_inquiry_id = $PatientOrderService->getNotFinishedOrderInquiry($request_params['inquiry_type'],$request_params['inquiry_mode'],$user_info['client_user_id']); + $order_inquiry_id = $PatientOrderService->getNotFinishedOrderInquiry($request_params['inquiry_type'], $request_params['inquiry_mode'], $user_info['client_user_id']); if (!empty($order_inquiry_id)) { // 获取问诊订单数据 $params = array(); $params['order_inquiry_id'] = $order_inquiry_id; $order_inquiry = OrderInquiry::getOne($params); - if (empty($order_inquiry)){ + if (empty($order_inquiry)) { return fail(HttpEnumCode::SERVER_ERROR); } @@ -287,7 +297,7 @@ class OrderServicePackageService extends BaseService $inquiry_pay_channel = 1; } elseif ($request_params['client_type'] == 2) { $inquiry_pay_channel = 2; - }else{ + } else { return fail(HttpEnumCode::HTTP_ERROR, "支付方式错误"); } @@ -315,18 +325,18 @@ class OrderServicePackageService extends BaseService $params['family_id'] = $request_params['family_id']; $params['order_service_type'] = $request_params['service_type']; - $order_service_status = ['1','2','3']; - $order_service_package = OrderServicePackage::getStatusOne($params,$order_service_status); - if (!empty($order_service_package)){ + $order_service_status = ['1', '2', '3']; + $order_service_package = OrderServicePackage::getStatusOne($params, $order_service_status); + if (!empty($order_service_package)) { // 检测服务包订单订单状态 - if ($order_service_package['order_service_status'] == 1){ + if ($order_service_package['order_service_status'] == 1) { $result['status'] = 2; $result['message'] = "存在未支付订单"; $result['data']['order_no'] = (string)$order_service_package['order_service_no']; return success($result); } - if ($order_service_package['order_service_status'] == 2){ + if ($order_service_package['order_service_status'] == 2) { $result['status'] = 2; $result['message'] = "您已购买该服务包,请耐心等待医生接诊"; $result['data']['order_no'] = (string)$order_service_package['order_service_no']; @@ -334,68 +344,113 @@ class OrderServicePackageService extends BaseService } } - // 检测随访包是否存在 - if ($request_params['service_type'] == 2){ - if (empty($request_params['follow_package_item_id'])){ - return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + // 获取医生图文问诊价格 + $params = array(); + $params['doctor_id'] = $order_service_package['doctor_id']; + $params['inquiry_type'] = 1; + $params['inquiry_mode'] = 1; + $doctor_inquiry_config = DoctorInquiryConfig::getOne($params); + if (empty($doctor_inquiry_config)){ + return fail(HttpEnumCode::HTTP_ERROR, "订单创建失败"); + } + + $service_price = 0; // 订单金额 + $service_period = null; // 服务周期(天) + $service_count = null; // 总服务次数(0表示不限次) + $monthly_frequency = null; // 每月次数(0表示不限次) + $single_inquiry_price = null; // 单次图文问诊价格 + + // 健康包 + if ($request_params['service_type'] == 1) { + // 健康包 + $params = array(); + $params['doctor_id'] = $request_params['doctor_id']; + $doctor_config_health_package = DoctorConfigHealthPackage::getOne($params); + if (empty($doctor_config_health_package)) { + return fail(HttpEnumCode::HTTP_ERROR, "订单创建失败"); } + $params = array(); + $params['package_id'] = $doctor_config_health_package['package_id']; + $health_package = HealthPackage::getOne($params); + if (empty($health_package)){ + throw new BusinessException("创建订单失败"); + } + + // 订单金额 + $service_price = $doctor_config_health_package['service_price']; + + // 服务周期(天) + $service_period = 90; + + // 总服务次数(0表示不限次) + $service_count = $health_package['service_count']; + + // 每月次数(0表示不限次) + $monthly_frequency = $health_package['monthly_frequency']; + + // 单次图文问诊价格 + $single_inquiry_price = $doctor_inquiry_config['inquiry_price']; + } + + // 随访包 + if ($request_params['service_type'] == 2) { $params = array(); $params['follow_package_item_id'] = $request_params['follow_package_item_id']; $doctor_config_follow_package_item = DoctorConfigFollowPackageItem::getOne($params); - if (empty($doctor_config_follow_package_item)){ - return fail(HttpEnumCode::HTTP_ERROR,"随访包选择错误"); + if (empty($doctor_config_follow_package_item)) { + return fail(HttpEnumCode::HTTP_ERROR, "随访包选择错误"); } $params = array(); $params['follow_package_id'] = $doctor_config_follow_package_item['follow_package_id']; $params['doctor_id'] = $request_params['doctor_id']; $doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params); - if (empty($doctor_config_follow_package)){ - return fail(HttpEnumCode::HTTP_ERROR,"随访包选择错误"); - } - } - - // 处理订单金额 - $service_price = 0; - if ($request_params['service_type'] == 1){ - // 健康包 - $params = array(); - $params['doctor_id'] = $request_params['doctor_id']; - $doctor_config_health_package = DoctorConfigHealthPackage::getOne($params); - if (empty($doctor_config_health_package)){ - return fail(HttpEnumCode::HTTP_ERROR,"订单创建失败"); - } - $service_price = $doctor_config_health_package['service_price']; - } - - if ($request_params['service_type'] == 2){ - $params = array(); - $params['follow_package_item_id'] = $request_params['follow_package_item_id']; - $doctor_config_follow_package_item = DoctorConfigFollowPackageItem::getOne($params); - if (empty($doctor_config_follow_package_item)){ - return fail(HttpEnumCode::HTTP_ERROR,"随访包选择错误"); + if (empty($doctor_config_follow_package)) { + return fail(HttpEnumCode::HTTP_ERROR, "随访包选择错误"); } + // 订单金额 $service_price = $doctor_config_follow_package_item['service_price']; + + // 服务周期(天) + $service_period = $doctor_config_follow_package_item['service_period']; + + // 总服务次数(0表示不限次) + if ($doctor_config_follow_package['monthly_frequency'] != 0){ + $service_count = $service_period / 30 * $doctor_config_follow_package['monthly_frequency']; + }else{ + $service_count = $doctor_config_follow_package['service_count']; + } + + // 每月次数(0表示不限次) + $monthly_frequency = $doctor_config_follow_package['monthly_frequency']; + + // 单次图文问诊价格 + $single_inquiry_price = $doctor_inquiry_config['inquiry_price']; } - if ($service_price <= 0){ - return fail(HttpEnumCode::HTTP_ERROR,"订单创建失败"); + // 判断数据 + if ($service_price <= 0) { + return fail(HttpEnumCode::HTTP_ERROR, "订单创建失败"); } - // 订单类型 + if ($service_period === null || $service_count === null || $monthly_frequency === null || $single_inquiry_price === null){ + return fail(HttpEnumCode::HTTP_ERROR, "订单创建失败"); + } + + // 处理订单类型 $order_type = ""; - if ($request_params['service_type'] == 1){ + if ($request_params['service_type'] == 1) { $order_type = 5; } - if ($request_params['service_type'] == 2){ + if ($request_params['service_type'] == 2) { $order_type = 4; } - if (empty($order_type)){ - return fail(HttpEnumCode::HTTP_ERROR,"订单创建失败"); + if (empty($order_type)) { + return fail(HttpEnumCode::HTTP_ERROR, "订单创建失败"); } Db::beginTransaction(); @@ -447,7 +502,23 @@ class OrderServicePackageService extends BaseService $data['patient_sex'] = $patient_family['sex'];// 患者性别-就诊人(0:未知 1:男 2:女) $data['patient_age'] = getIdCardAge($patient_family['id_number']);// 患者年龄-就诊人 $order_service_package = OrderServicePackage::addOrderServicePackage($data); - if (empty($order_service_package)){ + if (empty($order_service_package)) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + + // 生成服务包订单详情 + $data = array(); + $data['order_service_id'] = $order_service_package['order_service_id']; + $data['order_id'] = $order_service_package['order_id']; + $data['order_service_no'] = $order_service_package['order_service_no']; + $data['service_period'] = $service_period; // 服务周期(天) + $data['service_count'] = $service_count; // 总服务次数(0表示不限次) + $data['monthly_frequency'] = $monthly_frequency; // 每月次数(0表示不限次) + $data['single_inquiry_price'] = $single_inquiry_price; // 单次图文问诊价格 + $data['service_price'] = $service_price; // 总服务价格 + $order_service_package_detail = OrderServicePackageDetail::addOrderServicePackageDetail($data); + if (empty($order_service_package_detail)){ Db::rollBack(); return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } @@ -506,7 +577,7 @@ class OrderServicePackageService extends BaseService // 增加至未支付取消订单延迟队列 $time = 60 * 30; - if (\Hyperf\Config\config('app_env') == "dev"){ + if (\Hyperf\Config\config('app_env') == "dev") { $time = 60 * 5; } @@ -534,6 +605,348 @@ class OrderServicePackageService extends BaseService return success($result); } + /** + * 创建服务包问诊订单 + * @return array + */ + public function addServiceInquiryOrder(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + $order_no = $this->request->input("order_no"); + + try { + // 检测患者是否购买服务包 + $params = array(); + $params['user_id'] = $user_info['user_id']; + $params['patient_id'] = $user_info['client_user_id']; + $params['order_service_no'] = $order_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + return fail(HttpEnumCode::HTTP_ERROR, "患者未购买该服务包"); + } + + // 检测服务包订单订单状态 + if ($order_service_package['order_service_status'] == 1) { + return fail(HttpEnumCode::HTTP_ERROR); + } + + if ($order_service_package['order_service_status'] == 2) { + return fail(HttpEnumCode::HTTP_ERROR); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)) { + return fail(HttpEnumCode::SERVER_ERROR); + } + + // 处理问诊类型 + if ($order_service_package['order_service_type'] == 1) { + $inquiry_mode = 8; + } else { + $inquiry_mode = 9; + } + + // 检测是否存在同类型未完成的问诊订单 + $PatientOrderService = new PatientOrderService(); + $order_inquiry_id = $PatientOrderService->getNotFinishedOrderInquiry(1, $inquiry_mode, $user_info['client_user_id']); + if (!empty($order_inquiry_id)) { + return fail(HttpEnumCode::HTTP_ERROR, "存在进行中的问诊订单,无法再次创建"); + } + + // 检测当前医生是否和患者存在未完成问诊订单 + $InquiryService = new InquiryService(); + $order_inquiry = $InquiryService->checkPatientDoctorProgressInquiry($user_info['client_user_id'], $order_service_package['doctor_id']); + if (!empty($order_inquiry)) { + return fail(HttpEnumCode::HTTP_ERROR, "存在问诊中订单,无法再次创建"); + } + + // 检测问诊次数 + // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 + if ($order_service_package_detail['monthly_frequency'] != 0) { + $month_inquiry_count = 0; // 当前所属月问诊次数 + + // 获取当月问诊次数 + // 获取开启服务日期和今日的相差天数 + $diff = abs(time() - strtotime($order_service_package['start_time'])); + $diff_days = ceil($diff / (60 * 60 * 24)); // 转换为天数 + + // 获取当前月次 + $month_time = ceil($diff_days / 30); + + $days = (int)$month_time * 30; + + // 获取开始日期 + $end_date = date('Y-m-d 23:59:59', strtotime($order_service_package['start_time'] . " +$days days")); + $start_date = date('Y-m-d 00:00:00', strtotime($end_date . "-30 days")); + + $InquiryService = new InquiryService(); + $order_inquiry = $InquiryService->getPatientServiceInquiry($order_service_package['order_service_type'], $user_info['client_user_id'], $order_service_package['doctor_id'], $start_date, $end_date); + if (!empty($order_inquiry)) { + $month_inquiry_count = count($order_inquiry); + } + + if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']) { + return fail(HttpEnumCode::HTTP_ERROR, "超出服务包所包含的当月问诊次数"); + } + } + + // 获取患者家庭成员信息表 + $params = array(); + $params['family_id'] = $order_service_package['family_id']; + $params['patient_id'] = $order_service_package['patient_id']; + $patient_family = PatientFamily::getOne($params); + if (empty($patient_family)) { + return fail(HttpEnumCode::HTTP_ERROR, "家庭成员数据错误"); + } + + // 获取患者家庭成员信息表-健康情况 + $params = array(); + $params['family_id'] = $order_service_package['family_id']; + $patient_family_health = PatientFamilyHealth::getOne($params); + + // 获取患者家庭成员信息表-个人情况 + $params = array(); + $params['family_id'] = $order_service_package['family_id']; + $patient_family_personal = PatientFamilyPersonal::getOne($params); + + // 检测医生状态 + $params = array(); + $params['doctor_id'] = $order_service_package['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, "当前医生无法接诊,请重新选择"); + } + + // 获取检测病例数据 + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_case = OrderServicePackageCase::getOne($params); + if (empty($order_service_package_case)) { + return fail(HttpEnumCode::HTTP_ERROR, "问诊病例数据错误"); + } + $order_service_package_case = $order_service_package_case->toArray(); + }catch (\Throwable $e){ + return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); + } + + Db::beginTransaction(); + try { + $generator = $this->container->get(IdGeneratorInterface::class); + + // 新增订单表 + $data = array(); + $data['user_id'] = $order_service_package['user_id']; + $data['patient_id'] = $order_service_package['client_user_id']; + $data['doctor_id'] = $order_service_package['doctor_id']; + if ($order_service_package['order_service_type'] == 1){ + $data['order_type'] = 5; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) + }else{ + $data['order_type'] = 4; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) + } + $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付) + $data['pay_status'] = 2; // 1:待支付 + $data['order_no'] = "I" . $generator->generate(); // 订单编号 + $data['amount_total'] = 0; // 订单金额 + $data['coupon_amount_total'] = 0; // 优惠卷总金额 + $data['payment_amount_total'] = 0; // 实际付款金额 + $order = Order::addOrder($data); + if (empty($order)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "订单创建失败"); + } + + // 新增问诊订单 + $data = array(); + $data['user_id'] = $order_service_package['user_id']; + $data['patient_id'] = $order_service_package['patient_id']; + $data['doctor_id'] = $order_service_package['doctor_id']; + $data['family_id'] = $order_service_package['family_id']; + $data['inquiry_type'] = 1; // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测) + if ($order_service_package['order_service_type'] == 1){ + $data['inquiry_mode'] = 8; // 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) + }else{ + $data['inquiry_mode'] = 9; // 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) + } + $data['inquiry_status'] = 3; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) + $data['inquiry_pay_status'] = 2; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + $data['inquiry_no'] = $order['order_no'];// 订单编号 + $data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号 + $data['amount_total'] = 0;// 订单金额 + $data['coupon_amount_total'] = 0;// 优惠卷总金额 + $data['payment_amount_total'] = 0;// 实际付款金额 + $data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间 + $data['reception_time'] = date('Y-m-d H:i:s', time());// 接诊时间 + $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::addOrderInquiry($data); + if (empty($order_inquiry)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "订单创建失败"); + } + + // 新增问诊订单病例 + $data = array(); + $data['user_id'] = $order_service_package['user_id']; + $data['patient_id'] = $order_service_package['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:未知 1:男 2:女) + $data['disease_class_id'] = $order_service_package_case['disease_class_id']; // 疾病分类id-系统 + $data['disease_class_name'] = $order_service_package_case['disease_class_name']; // 疾病名称-系统 + $data['diagnosis_date'] = $order_service_package_case['diagnosis_date']; // 确诊日期 + $data['disease_desc'] = $order_service_package_case['disease_desc']; // 病情描述(主诉) + $data['diagnose_images'] = $order_service_package_case['diagnose_images'] ?? ""; // 复诊凭证(多个使用逗号分隔) + + if ($patient_family['age'] != null) { + $data['age'] = getIdCardAge($patient_family['id_number']);// 患者年龄 + } + + // 身高(cm) + if ($patient_family['height'] != null) { + $data['height'] = $patient_family['height']; + } + + // 体重(kg) + if ($patient_family['weight'] != null) { + $data['weight'] = $patient_family['weight']; + } + + // 职业id-职业名称 + if ($patient_family['job_id'] != null) { + $data['job_id'] = $patient_family['job_id']; + if ($patient_family['job_name'] != null) { + $data['job_name'] = $patient_family['job_name']; + } + } + + // 民族id-民族名称 + if ($patient_family['nation_id'] != null) { + $data['nation_id'] = $patient_family['nation_id']; + if ($patient_family['nation_name'] != null) { + $data['nation_name'] = $patient_family['nation_name']; + } + } + + // 婚姻状况 + if ($patient_family['marital_status'] != null) { + $data['marital_status'] = $patient_family['marital_status']; + } + + // 家庭成员-健康情况 + if (!empty($patient_family_health)) { + if ($patient_family_health['diagnosis_hospital'] != null) { + $data['diagnosis_hospital'] = $patient_family_health['diagnosis_hospital']; // 确诊医院 + } + + if ($patient_family_health['is_take_medicine'] != null) { + $data['is_take_medicine'] = $patient_family_health['is_take_medicine']; // 正在服药 + if ($patient_family_health['drugs_name'] != null) { + $data['drugs_name'] = $patient_family_health['drugs_name']; // 正在服药名称 + } + } + } + + // 家庭成员-个人情况 + if (!empty($patient_family_personal)) { + if ($patient_family_personal['drink_wine_status'] != null) { + $data['drink_wine_status'] = $patient_family_personal['drink_wine_status']; // 饮酒状态 + } + + if ($patient_family_personal['smoke_status'] != null) { + $data['smoke_status'] = $patient_family_personal['smoke_status']; // 吸烟状态 + } + + if ($patient_family_personal['chemical_compound_status'] != null) { + $data['chemical_compound_status'] = $patient_family_personal['chemical_compound_status']; // 化合物状态 + if ($patient_family_personal['chemical_compound_describe'] != null) { + $data['chemical_compound_describe'] = $patient_family_personal['chemical_compound_describe']; // 化合物描述 + } + } + + if ($patient_family_personal['is_operation'] != null) { + $data['is_operation'] = $patient_family_personal['is_operation']; // 是否存在手术 + if ($patient_family_personal['operation'] != null) { + $data['operation'] = $patient_family_personal['operation']; // 手术描述 + } + } + } + + // 过敏史 + if (array_key_exists("is_allergy_history", $order_service_package_case)) { + if ($order_service_package_case['is_allergy_history'] !== null) { + $data['is_allergy_history'] = $order_service_package_case['is_allergy_history']; // 是否存在过敏史(0:否 1:是) + if ($order_service_package_case['allergy_history'] != "") { + $data['allergy_history'] = $order_service_package_case['allergy_history']; // 过敏史描述 + } + } + } + + // 家族病史 + if (array_key_exists("is_family_history", $order_service_package_case)) { + if ($order_service_package_case['is_family_history'] !== null) { + $data['is_family_history'] = $order_service_package_case['is_family_history']; // 是否存在家族病史(0:否 1:是) + if ($order_service_package_case['family_history'] != "") { + $data['family_history'] = $order_service_package_case['family_history']; // 家族病史描述 + } + } + } + + // 是否备孕、妊娠、哺乳期(0:否 1:是) + if (array_key_exists("is_pregnant", $order_service_package_case)) { + if ($order_service_package_case['is_pregnant'] !== null) { + $data['is_pregnant'] = $order_service_package_case['is_pregnant']; // 是否备孕、妊娠、哺乳期(0:否 1:是) + } + } + + $order_inquiry_case = OrderInquiryCase::addOrderInquiryCase($data); + if (empty($order_inquiry_case)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "订单创建失败"); + } + + // 加入未接诊取消订单延迟队列 + $time = 60 * 60 * 24; + if (\Hyperf\Config\config('app_env') == "dev"){ + $time = 60 * 10; + } + + $data = array(); + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $data['order_no'] = $order_inquiry['inquiry_no']; + $message = new CancelUnInquiryOrdersDelayDirectProducer($data); + $message->setDelayMs(1000 * $time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "订单创建失败"); + } + + Db::commit(); + }catch (\Throwable $e){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); + } + + return success(); + } + /** * 取消未支付检测订单 * @param string|int $order_no @@ -613,5 +1026,4 @@ class OrderServicePackageService extends BaseService return $result; } - } \ No newline at end of file From 982ea41298832551391ae96116d5b715fa53c5c8 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 10:20:09 +0800 Subject: [PATCH 037/274] 1 --- app/Services/OrderServicePackageService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 4854f8e..7d093a9 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -346,7 +346,7 @@ class OrderServicePackageService extends BaseService // 获取医生图文问诊价格 $params = array(); - $params['doctor_id'] = $order_service_package['doctor_id']; + $params['doctor_id'] = $request_params['doctor_id']; $params['inquiry_type'] = 1; $params['inquiry_mode'] = 1; $doctor_inquiry_config = DoctorInquiryConfig::getOne($params); From 79447beb4b6a3fb79a0caf4bcdcd1e73dece76de Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 10:31:01 +0800 Subject: [PATCH 038/274] =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E9=97=AE?= =?UTF-8?q?=E8=AF=8A=E8=AE=A2=E5=8D=95=E5=A2=9E=E5=8A=A0=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E6=AC=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/CallBackController.php | 28 ++++++++++++++++----- app/Services/OrderServicePackageService.php | 20 ++++++++++----- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index d85887a..f3f35c9 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -40,6 +40,7 @@ use App\Model\PatientFamilyHealth; use App\Model\PatientFamilyPersonal; use App\Model\Product; use App\Model\ProductPlatformAmount; +use App\Model\SystemInquiryConfig; use App\Model\User; use App\Model\UserCoupon; use App\Model\UserDoctor; @@ -2431,6 +2432,13 @@ class CallBackController extends AbstractController return $server->serve(); } + // 处理问诊类型 + if ($order_service_package['order_service_type'] == 1) { + $inquiry_mode = 8; + } else { + $inquiry_mode = 9; + } + // 支付状态无需验证,如第一次支付失败,会修改支付状态,再次支付时,会出现验证不通过的情况 // 处理支付状态 @@ -2523,6 +2531,17 @@ class CallBackController extends AbstractController return $server->serve(); } + // 沟通次数,沟通时长 + $params = array(); + $params['inquiry_type'] = 1; + $params['inquiry_mode'] = $inquiry_mode; + $system_inquiry_config = SystemInquiryConfig::getOne($params); + if (empty($system_inquiry_config)) { + Db::rollBack(); + Log::getInstance("CallBack-wxPayServiceSuccess")->error("系统问诊配置错误"); + return $server->serve(); + } + $generator = $this->container->get(IdGeneratorInterface::class); // 生成订单表 @@ -2555,11 +2574,7 @@ class CallBackController extends AbstractController $data['doctor_id'] = $order_service_package['doctor_id']; $data['family_id'] = $order_service_package['family_id']; $data['inquiry_type'] = 1; // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测) - if ($order_service_package['order_service_type'] == 1){ - $data['inquiry_mode'] = 8; // 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) - }else{ - $data['inquiry_mode'] = 9; // 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) - } + $data['inquiry_mode'] = $inquiry_mode; // 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) $data['inquiry_status'] = 3; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) $data['inquiry_pay_status'] = 2; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) @@ -2568,8 +2583,9 @@ class CallBackController extends AbstractController $data['amount_total'] = 0;// 订单金额 $data['coupon_amount_total'] = 0;// 优惠卷总金额 $data['payment_amount_total'] = 0;// 实际付款金额 + $data['times_number'] = $system_inquiry_config['times_number'];// 沟通次数(0为不限制次数) + $data['duration'] = $system_inquiry_config['duration'];// 沟通时长(分钟,0为不限制时长) $data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间 - $data['reception_time'] = date('Y-m-d H:i:s', time());// 接诊时间 $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:女) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 7d093a9..478a7b4 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -615,6 +615,8 @@ class OrderServicePackageService extends BaseService $order_no = $this->request->input("order_no"); try { + + // 检测患者是否购买服务包 $params = array(); $params['user_id'] = $user_info['user_id']; @@ -736,6 +738,15 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "问诊病例数据错误"); } $order_service_package_case = $order_service_package_case->toArray(); + + // 沟通次数,沟通时长 + $params = array(); + $params['inquiry_type'] = 1; + $params['inquiry_mode'] = $inquiry_mode; + $system_inquiry_config = SystemInquiryConfig::getOne($params); + if (empty($system_inquiry_config)) { + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } }catch (\Throwable $e){ return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); } @@ -773,11 +784,7 @@ class OrderServicePackageService extends BaseService $data['doctor_id'] = $order_service_package['doctor_id']; $data['family_id'] = $order_service_package['family_id']; $data['inquiry_type'] = 1; // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测) - if ($order_service_package['order_service_type'] == 1){ - $data['inquiry_mode'] = 8; // 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) - }else{ - $data['inquiry_mode'] = 9; // 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) - } + $data['inquiry_mode'] = $inquiry_mode; // 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) $data['inquiry_status'] = 3; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) $data['inquiry_pay_status'] = 2; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) @@ -786,8 +793,9 @@ class OrderServicePackageService extends BaseService $data['amount_total'] = 0;// 订单金额 $data['coupon_amount_total'] = 0;// 优惠卷总金额 $data['payment_amount_total'] = 0;// 实际付款金额 + $data['times_number'] = $system_inquiry_config['times_number'];// 沟通次数(0为不限制次数) + $data['duration'] = $system_inquiry_config['duration'];// 沟通时长(分钟,0为不限制时长) $data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间 - $data['reception_time'] = date('Y-m-d H:i:s', time());// 接诊时间 $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:女) From 2de07fa50ee3023dbd78b8c5f9092897f45056eb Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 11:01:58 +0800 Subject: [PATCH 039/274] 1 --- app/Model/OrderServicePackageCase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Model/OrderServicePackageCase.php b/app/Model/OrderServicePackageCase.php index 4b21e1b..549aad7 100644 --- a/app/Model/OrderServicePackageCase.php +++ b/app/Model/OrderServicePackageCase.php @@ -50,7 +50,7 @@ class OrderServicePackageCase extends Model */ protected array $fillable = ['order_service_case_id', 'user_id', 'patient_id', 'order_id', 'order_service_id', 'family_id', 'disease_class_id', 'relation', 'status', 'name', 'sex', 'age', 'disease_class_name', 'diagnosis_date', 'disease_desc', 'diagnose_images', 'is_allergy_history', 'allergy_history', 'is_family_history', 'family_history', 'is_pregnant', 'pregnant', 'created_at', 'updated_at']; - protected string $primaryKey = "order_service_id"; + protected string $primaryKey = "order_service_case_id"; /** * 获取信息-单条 From 7867948ffeb0831144901ed985dd462bf0dce675 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 11:02:30 +0800 Subject: [PATCH 040/274] 12 --- app/Model/OrderServicePackageCase.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Model/OrderServicePackageCase.php b/app/Model/OrderServicePackageCase.php index 549aad7..7042083 100644 --- a/app/Model/OrderServicePackageCase.php +++ b/app/Model/OrderServicePackageCase.php @@ -33,8 +33,8 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property string $family_history 家族病史描述 * @property int $is_pregnant 是否备孕、妊娠、哺乳期(0:否 1:是) * @property string $pregnant 备孕、妊娠、哺乳期描述 - * @property \Carbon\Carbon $created_at 创建时间 - * @property \Carbon\Carbon $updated_at 修改时间 + * @property Carbon $created_at 创建时间 + * @property Carbon $updated_at 修改时间 */ class OrderServicePackageCase extends Model { From 7010cc5f6048c71896d59a5cd092d01ffbd5f158 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 11:30:57 +0800 Subject: [PATCH 041/274] 2 --- app/Services/PatientOrderService.php | 89 ++++++++++++++++++++++++++-- 1 file changed, 85 insertions(+), 4 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index f9e0dd4..bb36102 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -490,7 +490,8 @@ class PatientOrderService extends BaseService $params['is_delete'] = 0; $order_inquiry = OrderInquiry::getOne($params); if (empty($order_inquiry)) { - return fail(); + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "非法订单"); } $OrderService = new OrderService(); @@ -665,7 +666,7 @@ class PatientOrderService extends BaseService $order_product = OrderProduct::getOne($params); if (empty($order_product)) { Db::rollBack(); - return fail(); + return fail(HttpEnumCode::HTTP_ERROR, "非法订单"); } $OrderService = new OrderService(); @@ -1048,7 +1049,7 @@ class PatientOrderService extends BaseService } // 验证订单支付状态 - if ($order_detection['pay_status'] != 1) { + if ($order_service_package['pay_status'] != 1) { $return_result['message'] = "订单支付状态错误"; $return_result['data'] = $result; $return_result['data']['order_no'] = $order_no; @@ -2292,7 +2293,8 @@ class PatientOrderService extends BaseService $params['is_delete'] = 0; $order_detection = OrderDetection::getOne($params); if (empty($order_detection)) { - return fail(); + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "非法订单"); } // 检测订单取消 @@ -2313,6 +2315,85 @@ class PatientOrderService extends BaseService return success(); } + /** + * 服务包订单取消支付-1未支付 + * @return array + */ + public function putPatientServiceOrderCancelPay(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $order_no = $this->request->route('order_no'); + + Db::beginTransaction(); + + try { + // 获取订单数据 + $params = array(); + $params['patient_id'] = $user_info['client_user_id']; + $params['order_service_no'] = $order_no; + $params['is_delete'] = 0; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "非法订单"); + } + + $OrderService = new OrderService(); + $result = $OrderService->cancelUnpayOrder($order_service_package['order_service_no'],2,"主动取消"); + if ($result['status'] != 1) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, $result['message']); + } + + Db::commit(); + } catch (\Exception $e) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); + } + + return success(); + } + + /** + * 订单取消支付-1未支付 + * @return array + */ + public function putPatientOrderCancelPay(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $order_no = $this->request->route('order_no'); + + Db::beginTransaction(); + + try { + // 获取订单数据 + $params = array(); + $params['patient_id'] = $user_info['client_user_id']; + $params['order_no'] = $order_no; + $order = Order::getOne($params); + if (empty($order)){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "非法订单"); + } + + $OrderService = new OrderService(); + $result = $OrderService->cancelUnpayOrder($order['order_no'],2,"主动取消"); + if ($result['status'] != 1) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, $result['message']); + } + + Db::commit(); + } catch (\Exception $e) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); + } + + return success(); + } + /** * 获取患者未完成订单 * @param string $patient_id From ead795094cb11623d7398d80e32c4ad54c3c4b32 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 11:37:32 +0800 Subject: [PATCH 042/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=8F=96=E6=B6=88=E6=94=AF=E4=BB=98-1=E6=9C=AA?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E3=80=81=E5=8F=96=E6=B6=88=E8=AE=A2=E5=8D=95?= =?UTF-8?q?-=E9=97=AE=E8=AF=8A/=E6=A3=80=E6=B5=8B/=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OrderServicePackageController.php | 1 - app/Controller/PatientOrderController.php | 31 ++ app/Services/OrderService.php | 271 ++++++++++++++++++ app/Services/PatientOrderService.php | 29 ++ config/routes.php | 16 ++ 5 files changed, 347 insertions(+), 1 deletion(-) diff --git a/app/Controller/OrderServicePackageController.php b/app/Controller/OrderServicePackageController.php index ec51334..15f3712 100644 --- a/app/Controller/OrderServicePackageController.php +++ b/app/Controller/OrderServicePackageController.php @@ -61,5 +61,4 @@ class OrderServicePackageController extends AbstractController $data = $OrderServicePackageService->addServiceInquiryOrder(); return $this->response->json($data); } - } \ No newline at end of file diff --git a/app/Controller/PatientOrderController.php b/app/Controller/PatientOrderController.php index a7c1523..76c0e15 100644 --- a/app/Controller/PatientOrderController.php +++ b/app/Controller/PatientOrderController.php @@ -297,5 +297,36 @@ class PatientOrderController extends AbstractController return $this->response->json($data); } + /** + * 服务包订单取消支付-1未支付 + * @return ResponseInterface + */ + public function putPatientServiceOrderCancelPay(): ResponseInterface + { + $PatientOrderService = new PatientOrderService(); + $data = $PatientOrderService->putPatientServiceOrderCancelPay(); + return $this->response->json($data); + } + /** + * 订单取消支付-1未支付 + * @return ResponseInterface + */ + public function putPatientOrderCancelPay(): ResponseInterface + { + $PatientOrderService = new PatientOrderService(); + $data = $PatientOrderService->putPatientOrderCancelPay(); + return $this->response->json($data); + } + + /** + * 取消订单-问诊/检测/服务包 + * @return ResponseInterface + */ + public function putCancelPatientOrder(): ResponseInterface + { + $PatientOrderService = new PatientOrderService(); + $data = $PatientOrderService->putCancelPatientOrder(); + return $this->response->json($data); + } } \ No newline at end of file diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 5d81e2a..54706c3 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -2,6 +2,7 @@ namespace App\Services; +use App\Constants\HttpEnumCode; use App\Exception\BusinessException; use App\Model\Order; use App\Model\OrderCoupon; @@ -14,6 +15,7 @@ use App\Model\OrderProduct; use App\Model\OrderProductRefund; use App\Model\OrderRefund; use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageInquiry; use App\Model\OrderServicePackageRefund; use App\Utils\Log; use Extend\Wechat\WechatPay; @@ -729,4 +731,273 @@ class OrderService extends BaseService throw new BusinessException("订单支付状态错误"); } } + + /** + * 用户主动取消订单 + * @param string|int $order_no + * @return array + */ + public function PatientActiveCancelOrder(string|int $order_no): array + { + try { + $result = array(); + $result['status'] = 1; + $result['message'] = "成功"; + + // 获取订单数据 + $params = array(); + $params['order_no'] = $order_no; + $order = Order::getOne($params); + if (empty($order)) { + $result['status'] = 0; + $result['message'] = "未查询到对应订单数据"; + return $result; + } + + // 检测订单状态 + if ($order['cancel_status'] == 1) { + // 取消状态(0:否 1:是) + $result['status'] = 0; + $result['message'] = "订单已取消"; + return $result; + } + + if (!in_array($order['refund_status'], [0, 4, 5])) { + // 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + $result['status'] = 0; + $result['message'] = "订单正在退款中"; + return $result; + } + + // 设置锁 + $redis = $this->container->get(Redis::class); + $redis_key = "active_cancel_order_lock_" . $order_no; + $redis_lock = $redis->setnx($redis_key, 1); + if (!$redis_lock) { + // 设置失败,表示已经设置该值 + $result['status'] = 0; + $result['message'] = "请稍后再试"; + return $result; + } + + // 设置过期时间 + $redis->expire($redis_key, 3); + + // 修改订单为取消 + $data = array(); + $data['cancel_status'] = 1; + $data['cancel_time'] = date("Y-m-d H:i:s", time()); + $data['cancel_remarks'] = "主动取消"; // 取消订单备注 + $data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_no'] = $order_no; + Order::edit($params, $data); + + // 处理对应订单 + switch ($order['order_type']) { + case 1: // 问诊订单 + // 获取订单数据 + $params = array(); + $params['inquiry_no'] = $order_no; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + $result['status'] = 0; + $result['message'] = "订单数据为空"; + return $result; + } + + // 检测订单状态 + if (!in_array($order_inquiry['inquiry_status'], [1, 2, 3])) { + // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + $result['status'] = 0; + $result['message'] = "订单无法取消"; + return $result; + } + + if ($order_inquiry['inquiry_refund_status'] == 1) { + // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + $result['status'] = 0; + $result['message'] = "订单申请退款中,请您稍后取消"; + return $result; + } + + if ($order_inquiry['inquiry_refund_status'] == 2) { + // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + $result['status'] = 0; + $result['message'] = "订单正在退款中,请您稍后取消"; + return $result; + } + + // 修改问诊订单为取消 + $data = array(); + $data['inquiry_status'] = 7; + $data['cancel_time'] = date("Y-m-d H:i:s", time()); + $data['cancel_reason'] = 2; // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) + $data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + OrderInquiry::edit($params, $data); + + break; + case 3: // 检测订单 + // 获取订单数据 + $params = array(); + $params['detection_no'] = $order_no; + $order_detection = OrderDetection::getOne($params); + if (empty($order_detection)) { + $result['status'] = 0; + $result['message'] = "订单数据为空"; + return $result; + } + + // 检测订单状态 + if (!in_array($order_detection['detection_status'], [2])) { + // 检测订单状态(1:待支付 2:待绑定 3:检测中 4:检测完成 5:已取消) + $result['status'] = 0; + $result['message'] = "订单无法取消"; + return $result; + } + + if ($order_detection['detection_refund_status'] == 1) { + // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + $result['status'] = 0; + $result['message'] = "订单申请退款中,请您稍后取消"; + return $result; + } + + if ($order_detection['detection_refund_status'] == 2) { + // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + $result['status'] = 0; + $result['message'] = "订单正在退款中,请您稍后取消"; + return $result; + } + + // 修改检测订单为取消 + $data = array(); + $data['detection_status'] = 5; + $data['cancel_time'] = date("Y-m-d H:i:s", time()); + $data['cancel_reason'] = 1; // 取消订单原因(1:主动取消 2:客服取消 3:支付超时) + $data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_detection_id'] = $order_detection['order_detection_id']; + OrderDetection::editOrderDetection($params, $data); + + break; + case 4: // 服务包订单 + // 获取订单数据 + $params = array(); + $params['order_service_no'] = $order_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + $result['status'] = 0; + $result['message'] = "订单数据为空"; + return $result; + } + + // 检测订单状态 + if (!in_array($order_service_package['order_service_status'], [2])) { + // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + $result['status'] = 0; + $result['message'] = "订单无法取消"; + return $result; + } + + if ($order_service_package['refund_status'] == 1) { + // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + $result['status'] = 0; + $result['message'] = "订单申请退款中,请您稍后取消"; + return $result; + } + + if ($order_service_package['refund_status'] == 2) { + // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + $result['status'] = 0; + $result['message'] = "订单正在退款中,请您稍后取消"; + return $result; + } + + // 修改服务包订单为取消 + $data = array(); + $data['order_service_status'] = 5; + $data['cancel_time'] = date("Y-m-d H:i:s", time()); + $data['cancel_remarks'] = "主动取消"; + $data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + OrderServicePackage::edit($params, $data); + + // 获取问诊订单数据-此处只会存在一个 + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); + if (empty($order_service_package_inquiry)){ + $result['status'] = 0; + $result['message'] = "取消失败"; + return $result; + } + + // 检测问诊订单数据 + // 获取订单数据 + $params = array(); + $params['inquiry_no'] = $order_service_package_inquiry['inquiry_no']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + $result['status'] = 0; + $result['message'] = "订单数据为空"; + return $result; + } + + // 检测订单状态 + if (!in_array($order_inquiry['inquiry_status'], [4, 5, 6])) { + // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + $result['status'] = 0; + $result['message'] = "已存在问诊订单,无法手动取消"; + return $result; + } + + if ($order_inquiry['inquiry_refund_status'] == 1) { + // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + $result['status'] = 0; + $result['message'] = "问诊订单申请退款中,请您稍后取消"; + return $result; + } + + if ($order_inquiry['inquiry_refund_status'] == 2) { + // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + $result['status'] = 0; + $result['message'] = "问诊订单正在退款中,请您稍后取消"; + return $result; + } + + // 修改问诊订单为取消 + $data = array(); + $data['inquiry_status'] = 7; + $data['cancel_time'] = date("Y-m-d H:i:s", time()); + $data['cancel_reason'] = 2; // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) + $data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + OrderInquiry::edit($params, $data); + + break; + default: + throw new BusinessException("订单类型错误"); + } + + // 删除锁 + $redis->del($redis_key); + + } catch (\Throwable $e) { + $result['status'] = 0; + $result['message'] = $e->getMessage(); + } + + return $result; + } + } \ No newline at end of file diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index bb36102..b27367b 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -2394,6 +2394,35 @@ class PatientOrderService extends BaseService return success(); } + /** + * 取消订单-问诊/检测/服务包 + * @return array + */ + public function putCancelPatientOrder(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $order_no = $this->request->route('order_no'); + + Db::beginTransaction(); + + try { + $OrderService = new OrderService(); + $result = $OrderService->PatientActiveCancelOrder($order_no); + if ($result['status'] != 1) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, $result['message']); + } + + Db::commit(); + } catch (\Exception $e) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); + } + + return success(); + } + /** * 获取患者未完成订单 * @param string $patient_id diff --git a/config/routes.php b/config/routes.php index a84ed7f..cf97776 100644 --- a/config/routes.php +++ b/config/routes.php @@ -472,6 +472,7 @@ Router::addGroup('/patient', function () { // 订单 Router::addGroup('/order', function () { + // 问诊订单 Router::addGroup('/inquiry', function () { // 获取患者问诊订单列表 Router::get('', [PatientOrderController::class, 'getPatientInquiryOrderList']); @@ -543,11 +544,23 @@ Router::addGroup('/patient', function () { Router::put('/cancel-pay/{order_detection_id:\d+}', [PatientOrderController::class, 'putPatientDetectionOrderCancelPay']); }); + // 服务包订单 + Router::addGroup('/service', function () { + // 服务包订单取消支付-1未支付 + Router::put('/cancel-pay/{order_no}', [PatientOrderController::class, 'putPatientServiceOrderCancelPay']); + }); + // 获取患者订单支付数据 Router::get('/pay', [PatientOrderController::class, 'getPatientOrderPayInfo']); // 模拟支付成功-金额为0时使用 Router::post('/pay', [PatientOrderController::class, 'addPatientOrderPay']); + + // 订单取消支付-1未支付 + Router::put('/cancel-pay/{order_no}', [PatientOrderController::class, 'putPatientOrderCancelPay']); + + // 取消订单-问诊/检测/服务包 + Router::put('/cancel/{order_no}', [PatientOrderController::class, 'putCancelPatientOrder']); }); // 消息通知 @@ -590,6 +603,9 @@ Router::addGroup('/patient', function () { // 创建服务包问诊订单 Router::post('/inquiry/{order_no}', [OrderServicePackageController::class, 'addServiceInquiryOrder']); + + // 服务包订单取消支付-1未支付 + Router::put('/cancel-pay/{order_no:\d+}', [OrderServicePackageController::class, 'putPatientServiceOrderCancelPay']); }); }); From 5971ca7d6e6f0fc4531861991670787c4c38624e Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 13:30:56 +0800 Subject: [PATCH 043/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=82=A3=E8=80=85=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/PatientOrderController.php | 27 +++ app/Model/OrderServicePackage.php | 41 ++++ app/Request/PatientOrderRequest.php | 10 + app/Services/PatientOrderService.php | 243 ++++++++++++++++++++++ config/routes.php | 9 +- 5 files changed, 327 insertions(+), 3 deletions(-) diff --git a/app/Controller/PatientOrderController.php b/app/Controller/PatientOrderController.php index 76c0e15..b3fb4ca 100644 --- a/app/Controller/PatientOrderController.php +++ b/app/Controller/PatientOrderController.php @@ -329,4 +329,31 @@ class PatientOrderController extends AbstractController $data = $PatientOrderService->putCancelPatientOrder(); return $this->response->json($data); } + + /** + * 获取患者服务包订单列表 + * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function getPatientServiceOrderList(): ResponseInterface + { + $request = $this->container->get(PatientOrderRequest::class); + $request->scene('getPatientServiceOrderList')->validateResolved(); + + $PatientOrderService = new PatientOrderService(); + $data = $PatientOrderService->getPatientServiceOrderList(); + return $this->response->json($data); + } + + /** + * 获取患者问诊订单详情 + * @return ResponseInterface + */ + public function getPatientServiceOrderInfo(): ResponseInterface + { + $PatientOrderService = new PatientOrderService(); + $data = $PatientOrderService->getPatientInquiryOrderInfo(); + return $this->response->json($data); + } } \ No newline at end of file diff --git a/app/Model/OrderServicePackage.php b/app/Model/OrderServicePackage.php index c56a902..8af19f9 100644 --- a/app/Model/OrderServicePackage.php +++ b/app/Model/OrderServicePackage.php @@ -8,6 +8,7 @@ namespace App\Model; use Carbon\Carbon; use Hyperf\Database\Model\Collection; +use Hyperf\Database\Model\Relations\HasOne; use Hyperf\Snowflake\Concern\Snowflake; /** @@ -56,6 +57,15 @@ class OrderServicePackage extends Model protected string $primaryKey = "order_service_id"; + /** + * 关联服务包病例表 + */ + public function OrderServicePackageCase(): HasOne + { + return $this->hasOne(OrderServicePackageCase::class, 'order_service_id', 'order_service_id'); + } + + /** * 获取信息-单条 * @param array $params @@ -122,4 +132,35 @@ class OrderServicePackage extends Model { return self::where($params)->whereIn('order_service_status',$order_service_status)->first($fields); } + + /** + * 获取服务包订单-分页 + * @param array $params + * @param array $order_service_status + * @param array $fields + * @param int|null $page + * @param int|null $per_page + * @return int|mixed|string + */ + public static function getPatientOrderServicePage(array $params, array $order_service_status_params, array $fields = ["*"], int $page = null, ?int $per_page = 10): mixed + { + $raw = self::with([ + 'OrderServicePackageCase:order_service_case_id,order_service_id,disease_desc', + ]) + ->where($params) + ->when($order_service_status_params, function ($query, $order_service_status_params) { + $query->whereIn('order_service_status', $order_service_status_params); + }) + ->orderBy('created_at', 'desc') + ->paginate($per_page, $fields, "page", $page); + + $data = array(); + $data['current_page'] = $raw->currentPage();// 当前页码 + $data['total'] = $raw->total();//数据总数 + $data['data'] = $raw->items();//数据 + $data['per_page'] = $raw->perPage();//每页个数 + $data['last_page'] = $raw->lastPage();//最后一页 + + return $data; + } } diff --git a/app/Request/PatientOrderRequest.php b/app/Request/PatientOrderRequest.php index 1c6cace..ab7109a 100644 --- a/app/Request/PatientOrderRequest.php +++ b/app/Request/PatientOrderRequest.php @@ -38,6 +38,10 @@ class PatientOrderRequest extends FormRequest 'detection_status',// 检测订单状态(1:待支付 2:待绑定 3:检测中 4:检测完成 5:已取消) 'family_id',// 家庭成员id(就诊用户) ], + 'getPatientServiceOrderList' => [ // 获取患者服务包订单列表 + 'order_service_status',// 订单状态(0:全部 1:待支付、2:待接诊 3:服务中 4:完成/取消) + 'family_id',// 家庭成员id(就诊用户) + ], ]; /** @@ -82,6 +86,7 @@ class PatientOrderRequest extends FormRequest 'address_id' => 'required', 'product_ids' => 'required|array|min:1', 'detection_status' => 'required|integer|min:0|max:5', + 'order_service_status' => 'required|integer|min:0|max:4', ]; } @@ -125,6 +130,11 @@ class PatientOrderRequest extends FormRequest 'inquiry_status.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'inquiry_status.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'order_service_status.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'order_service_status.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'order_service_status.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'order_service_status.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'order_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'order_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'order_type.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index b27367b..afb72f7 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -2423,6 +2423,249 @@ class PatientOrderService extends BaseService return success(); } + /** + * 获取患者服务包订单列表 + * @return array + */ + public function getPatientServiceOrderList(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $order_service_status = $this->request->input('order_service_status', 0); + $family_id = $this->request->input('family_id'); + $page = $this->request->input('page', 1); + $per_page = $this->request->input('per_page', 10); + + $params = array(); + $params['patient_id'] = $user_info['client_user_id']; + if (!empty($family_id)) { + $params['family_id'] = $family_id; + } + + $order_service_status_params = []; + if (!empty($order_service_status) && $order_service_status != 0) { + // 订单状态(0:全部 1:待支付、2:待接诊 3:服务中 4:完成/取消) + if ($order_service_status == 1) { + $order_service_status_params = [1]; + } + + if ($order_service_status == 2) { + $order_service_status_params = [3]; + } + + if ($order_service_status == 3) { + $order_service_status_params = [3]; + } + + if ($order_service_status == 4) { + $order_service_status_params = [4,5]; + } + } + + $params['is_delete'] = 0; + + $fields = [ + 'order_service_id', + 'order_id', + 'patient_id', + 'doctor_id', + 'family_id', + 'order_service_type', + 'order_service_status', + 'is_delete', + 'refund_status', + 'pay_channel', + 'pay_status', + 'order_service_no', + 'escrow_trade_no', + 'amount_total', + 'payment_amount_total', + 'start_time', + 'finish_time', + 'patient_name', + 'patient_name_mask', + 'patient_sex', + 'patient_age', + 'created_at', + ]; + $order_service_package = OrderServicePackage::getPatientOrderServicePage($params, $order_service_status_params, $fields, $page, $per_page); + if (empty($order_service_package['data'])) { + return success($order_service_package); + } + + foreach ($order_service_package['data'] as &$item) { + $item['disease_desc'] = $item['OrderServicePackageCase']['disease_desc']; + unset($item['OrderServicePackageCase']); + + // 获取医生数据 + $item['user_doctor'] = []; + if (!empty($item['doctor_id'])) { + $fields = [ + 'doctor_id', + 'user_name', + 'doctor_title', + 'hospital_id', + "avatar" + ]; + + $params = array(); + $params['doctor_id'] = $item['doctor_id']; + $user_doctor = UserDoctor::getOne($params, $fields); + if (empty($user_doctor)) { + return fail(HttpEnumCode::SERVER_ERROR); + } + + // 转换医生职称 + $user_doctor['doctor_title'] = empty($user_doctor['doctor_title']) ? "" : DoctorTitleCode::getMessage($user_doctor['doctor_title']); + + // 获取医生医院名称 + $user_doctor['hospital_name'] = ""; + $user_doctor['hospital_level_name'] = ""; + + // 医生头像 + $user_doctor['avatar'] = addAliyunOssWebsite($user_doctor['avatar']); + + $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_name'] = $hospital['hospital_name']; + $user_doctor['hospital_level_name'] = $hospital['hospital_level_name']; + } + + $item['user_doctor'] = $user_doctor; + unset($hospital); + unset($user_doctor); + } + } + + return success($order_service_package); + } + + /** + * 获取患者服务包订单详情 + * @return array + */ + public function getPatientServiceOrderInfo(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $order_inquiry_id = $this->request->route('order_inquiry_id'); + + // 获取订单数据 + $params = array(); + $params['patient_id'] = $user_info['client_user_id']; + $params['order_inquiry_id'] = $order_inquiry_id; + $params['is_delete'] = 0; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + return fail(); + } + + // 获取病例信息 + $fields = [ + 'disease_class_name', + 'disease_desc', + ]; + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params, $fields); + if (empty($order_inquiry_case)) { + $order_inquiry['case'] = []; + } else { + $order_inquiry['case'] = $order_inquiry_case->toArray(); + } + + // 获取医生数据 + $order_inquiry['user_doctor'] = []; + if (!empty($order_inquiry['doctor_id'])) { + $fields = [ + 'user_id', + 'doctor_id', + 'user_name', + 'doctor_title', + 'hospital_id', + 'avatar', + 'department_custom_name', + 'multi_point_status', + ]; + + $params = array(); + $params['doctor_id'] = $order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params, $fields); + if (empty($user_doctor)) { + return fail(HttpEnumCode::SERVER_ERROR); + } + + // 转换医生职称 + $user_doctor['doctor_title'] = empty($user_doctor['doctor_title']) ? "" : DoctorTitleCode::getMessage($user_doctor['doctor_title']); + + // 头像 + $user_doctor['avatar'] = addAliyunOssWebsite($user_doctor['avatar']); + + // 获取医生医院名称 + $user_doctor['hospital_name'] = ""; + $user_doctor['hospital_level_name'] = ""; + + $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_name'] = $hospital['hospital_name']; + $user_doctor['hospital_level_name'] = $hospital['hospital_level_name']; + } + + // 获取医生关注状态 + $params = array(); + $params['patient_id'] = $user_info['client_user_id']; + $params['doctor_id'] = $user_doctor['doctor_id']; + $user_doctor['follow'] = PatientFollow::getExists($params); + + // 获取医生问诊配置-问诊购药 + $user_doctor['multi_point_enable'] = 0; + + $params = array(); + $params['doctor_id'] = $user_doctor['doctor_id']; + $params['inquiry_type'] = 4; + $params['inquiry_mode'] = 1; + $doctor_inquiry_config = DoctorInquiryConfig::getOne($params); + if (!empty($doctor_inquiry_config)) { + if ($doctor_inquiry_config['is_enable'] == 1) { + $user_doctor['multi_point_enable'] = 1; + } + } + + $order_inquiry['user_doctor'] = $user_doctor; + + unset($hospital); + unset($user_doctor); + } + + // 获取退款数据 + $order_inquiry['order_inquiry_refund'] = array(); + + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_inquiry_refund = OrderInquiryRefund::getList($params); + if (!empty($order_inquiry_refund)){ + $order_inquiry['order_inquiry_refund'] = $order_inquiry_refund; + } + + return success($order_inquiry->toArray()); + } + /** * 获取患者未完成订单 * @param string $patient_id diff --git a/config/routes.php b/config/routes.php index cf97776..daf84e2 100644 --- a/config/routes.php +++ b/config/routes.php @@ -548,6 +548,12 @@ Router::addGroup('/patient', function () { Router::addGroup('/service', function () { // 服务包订单取消支付-1未支付 Router::put('/cancel-pay/{order_no}', [PatientOrderController::class, 'putPatientServiceOrderCancelPay']); + + // 获取患者服务包订单列表 + Router::get('', [PatientOrderController::class, 'getPatientServiceOrderList']); + + // 获取患者服务包订单详情 + Router::get('/{order_no}', [PatientOrderController::class, 'getPatientDetectionOrderInfo']); }); // 获取患者订单支付数据 @@ -603,9 +609,6 @@ Router::addGroup('/patient', function () { // 创建服务包问诊订单 Router::post('/inquiry/{order_no}', [OrderServicePackageController::class, 'addServiceInquiryOrder']); - - // 服务包订单取消支付-1未支付 - Router::put('/cancel-pay/{order_no:\d+}', [OrderServicePackageController::class, 'putPatientServiceOrderCancelPay']); }); }); From 3e583e9d3be8982e16204d080df44e403a256791 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 13:42:40 +0800 Subject: [PATCH 044/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=82=A3=E8=80=85=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 50 +++++++++++++++++----------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index afb72f7..113241a 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -29,6 +29,8 @@ use App\Model\OrderProductCoupon; use App\Model\OrderProductItem; use App\Model\OrderProductLogistic; use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageCase; +use App\Model\OrderServicePackageRefund; use App\Model\PatientFamily; use App\Model\PatientFamilyHealth; use App\Model\PatientFamilyPersonal; @@ -1073,6 +1075,14 @@ class PatientOrderService extends BaseService $result['order_id'] = $order_service_package['order_service_id']; $result['created_at'] = $order_service_package['created_at']; + $result['inquiry_type'] = 1; + + if ($order_service_package['order_service_type'] == 1){ + $inquiry_mode = 8; + }else{ + $inquiry_mode = 9; + } + $result['inquiry_mode'] = $inquiry_mode; // 获取订单金额 $result['amount_total'] = $order_service_package['amount_total']; // 订单金额 @@ -2556,15 +2566,15 @@ class PatientOrderService extends BaseService { $user_info = $this->request->getAttribute("userInfo") ?? []; - $order_inquiry_id = $this->request->route('order_inquiry_id'); + $order_no = $this->request->route('order_no'); // 获取订单数据 $params = array(); $params['patient_id'] = $user_info['client_user_id']; - $params['order_inquiry_id'] = $order_inquiry_id; + $params['order_service_no'] = $order_no; $params['is_delete'] = 0; - $order_inquiry = OrderInquiry::getOne($params); - if (empty($order_inquiry)) { + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { return fail(); } @@ -2574,17 +2584,17 @@ class PatientOrderService extends BaseService 'disease_desc', ]; $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $order_inquiry_case = OrderInquiryCase::getOne($params, $fields); - if (empty($order_inquiry_case)) { - $order_inquiry['case'] = []; + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_case = OrderServicePackageCase::getOne($params, $fields); + if (empty($order_service_package_case)) { + $order_service_package['case'] = []; } else { - $order_inquiry['case'] = $order_inquiry_case->toArray(); + $order_service_package['case'] = $order_service_package->toArray(); } // 获取医生数据 - $order_inquiry['user_doctor'] = []; - if (!empty($order_inquiry['doctor_id'])) { + $order_service_package['user_doctor'] = []; + if (!empty($order_service_package['doctor_id'])) { $fields = [ 'user_id', 'doctor_id', @@ -2597,7 +2607,7 @@ class PatientOrderService extends BaseService ]; $params = array(); - $params['doctor_id'] = $order_inquiry['doctor_id']; + $params['doctor_id'] = $order_service_package['doctor_id']; $user_doctor = UserDoctor::getOne($params, $fields); if (empty($user_doctor)) { return fail(HttpEnumCode::SERVER_ERROR); @@ -2633,7 +2643,7 @@ class PatientOrderService extends BaseService $params['doctor_id'] = $user_doctor['doctor_id']; $user_doctor['follow'] = PatientFollow::getExists($params); - // 获取医生问诊配置-问诊购药 + // 处理医生是否可处方 $user_doctor['multi_point_enable'] = 0; $params = array(); @@ -2647,23 +2657,23 @@ class PatientOrderService extends BaseService } } - $order_inquiry['user_doctor'] = $user_doctor; + $order_service_package['user_doctor'] = $user_doctor; unset($hospital); unset($user_doctor); } // 获取退款数据 - $order_inquiry['order_inquiry_refund'] = array(); + $order_service_package['order_service_package_refund'] = array(); $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $order_inquiry_refund = OrderInquiryRefund::getList($params); - if (!empty($order_inquiry_refund)){ - $order_inquiry['order_inquiry_refund'] = $order_inquiry_refund; + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_refund = OrderServicePackageRefund::getList($params); + if (!empty($order_service_package_refund)){ + $order_service_package['order_service_package_refund'] = $order_service_package_refund; } - return success($order_inquiry->toArray()); + return success($order_service_package->toArray()); } /** From 6e5b71755a1b016ffcbf1fd608b6fd0a655c278c Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 13:57:16 +0800 Subject: [PATCH 045/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=82=A3=E8=80=85=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/PatientOrderController.php | 2 +- app/Services/PatientOrderService.php | 2 +- config/routes.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Controller/PatientOrderController.php b/app/Controller/PatientOrderController.php index b3fb4ca..0c59805 100644 --- a/app/Controller/PatientOrderController.php +++ b/app/Controller/PatientOrderController.php @@ -353,7 +353,7 @@ class PatientOrderController extends AbstractController public function getPatientServiceOrderInfo(): ResponseInterface { $PatientOrderService = new PatientOrderService(); - $data = $PatientOrderService->getPatientInquiryOrderInfo(); + $data = $PatientOrderService->getPatientServiceOrderInfo(); return $this->response->json($data); } } \ No newline at end of file diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 113241a..35ef37f 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -2589,7 +2589,7 @@ class PatientOrderService extends BaseService if (empty($order_service_package_case)) { $order_service_package['case'] = []; } else { - $order_service_package['case'] = $order_service_package->toArray(); + $order_service_package['case'] = $order_service_package_case->toArray(); } // 获取医生数据 diff --git a/config/routes.php b/config/routes.php index daf84e2..0c5ee39 100644 --- a/config/routes.php +++ b/config/routes.php @@ -553,7 +553,7 @@ Router::addGroup('/patient', function () { Router::get('', [PatientOrderController::class, 'getPatientServiceOrderList']); // 获取患者服务包订单详情 - Router::get('/{order_no}', [PatientOrderController::class, 'getPatientDetectionOrderInfo']); + Router::get('/{order_no}', [PatientOrderController::class, 'getPatientServiceOrderInfo']); }); // 获取患者订单支付数据 From 1b2bff7b0a9fb84966e5a207163c2530554e6a70 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 14:02:18 +0800 Subject: [PATCH 046/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E9=97=AE=E8=AF=8A=E5=8C=BB=E7=94=9F=E5=88=97=E8=A1=A8?= =?UTF-8?q?=20=E5=81=A5=E5=BA=B7=E5=8C=85=E4=BB=B7=E6=A0=BC=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientDoctorService.php | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/app/Services/PatientDoctorService.php b/app/Services/PatientDoctorService.php index a635c6f..0ddc99b 100644 --- a/app/Services/PatientDoctorService.php +++ b/app/Services/PatientDoctorService.php @@ -7,6 +7,7 @@ use App\Constants\HttpEnumCode; use App\Model\DiseaseClassExpertise; use App\Model\DoctorConfigFollowPackage; use App\Model\DoctorConfigFollowPackageItem; +use App\Model\DoctorConfigHealthPackage; use App\Model\DoctorExpertise; use App\Model\DoctorInquiryConfig; use App\Model\DoctorInquiryConfig as DoctorInquiryConfigModel; @@ -132,8 +133,9 @@ class PatientDoctorService extends BaseService // 头像 $user_doctor['avatar'] = addAliyunOssWebsite($user_doctor['avatar']); - // 随访包配置 + // 问诊配置 foreach ($user_doctor['DoctorInquiryConfig'] as $key => $doctor_inquiry_config){ + // 随访包 if ($doctor_inquiry_config['inquiry_type'] == 1 && $doctor_inquiry_config['inquiry_mode'] == 9){ $params = array(); $params['doctor_id'] = $doctor_inquiry_config['doctor_id']; @@ -156,6 +158,16 @@ class PatientDoctorService extends BaseService } } } + + // 健康包 + if ($doctor_inquiry_config['inquiry_type'] == 1 && $doctor_inquiry_config['inquiry_mode'] == 8){ + $params = array(); + $params['doctor_id'] = $doctor_inquiry_config['doctor_id']; + $doctor_config_health_package = DoctorConfigHealthPackage::getOne($params); + if (!empty($doctor_config_health_package)){ + $user_doctor['DoctorInquiryConfig'][$key]['inquiry_price'] = $doctor_config_health_package['service_price']; + } + } } } } From 646802a2abbd96c672e06f6646b2b5f7099f75c9 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 14:04:17 +0800 Subject: [PATCH 047/274] =?UTF-8?q?=E5=8E=BB=E9=99=A4im=E5=9C=A8=E7=BA=BF?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Amqp/Consumer/UserImOffDelayDirectConsumer.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/Amqp/Consumer/UserImOffDelayDirectConsumer.php b/app/Amqp/Consumer/UserImOffDelayDirectConsumer.php index fc050ce..02ea769 100644 --- a/app/Amqp/Consumer/UserImOffDelayDirectConsumer.php +++ b/app/Amqp/Consumer/UserImOffDelayDirectConsumer.php @@ -34,7 +34,7 @@ class UserImOffDelayDirectConsumer extends ConsumerMessage public function consumeMessage($data, AMQPMessage $message): string { - Log::getInstance("queue-UserImOff")->info("开始:" . json_encode($data, JSON_UNESCAPED_UNICODE)); +// Log::getInstance("queue-UserImOff")->info("开始:" . json_encode($data, JSON_UNESCAPED_UNICODE)); // 检测参数 if (!isset($data['user_id'])){ @@ -47,14 +47,14 @@ class UserImOffDelayDirectConsumer extends ConsumerMessage $params['user_id'] = $data['user_id']; $user = User::getOne($params); if (empty($user)){ - Log::getInstance("queue-UserImOff")->error("无该用户"); +// Log::getInstance("queue-UserImOff")->error("无该用户"); return Result::DROP; } try { // 检测用户状态 if ($user['is_online'] == 0){ - Log::getInstance("queue-UserImOff")->info("用户目前已下线,无需处理"); +// Log::getInstance("queue-UserImOff")->info("用户目前已下线,无需处理"); return Result::ACK; } @@ -63,7 +63,7 @@ class UserImOffDelayDirectConsumer extends ConsumerMessage $diff_time = time() - $im_login_at; if ($diff_time <= (30 * 60 + 10)){ // if ($diff_time <= (2 * 50)){ - Log::getInstance("queue-UserImOff")->info("用户刚上线未满30分钟,无需处理"); +// Log::getInstance("queue-UserImOff")->info("用户刚上线未满30分钟,无需处理"); return Result::ACK; } @@ -83,7 +83,7 @@ class UserImOffDelayDirectConsumer extends ConsumerMessage return Result::DROP; } - Log::getInstance("queue-UserImOff")->info("结束:" . $user['user_name'] . "已下线"); +// Log::getInstance("queue-UserImOff")->info("结束:" . $user['user_name'] . "已下线"); return Result::ACK; } } From 8e63a94bb455f9a6f489c3d7d0129a058c09b027 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 14:07:38 +0800 Subject: [PATCH 048/274] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E8=AE=A2=E5=8D=95=E5=A2=9E=E5=8A=A0=E4=BB=B7=E6=A0=BC?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E5=8C=BA=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 478a7b4..446e7d8 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -453,6 +453,10 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "订单创建失败"); } + if (\Hyperf\Config\config("app_env") == "dev"){ + $service_price = 0.01; + } + Db::beginTransaction(); $generator = $this->container->get(IdGeneratorInterface::class); From 26acc7c2536d7fcb93f3d073b3e0151c443ab880 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 14:44:32 +0800 Subject: [PATCH 049/274] 1 --- app/Controller/CallBackController.php | 4 ++-- app/Services/OrderServicePackageService.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index f3f35c9..aaec5f0 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -2547,7 +2547,7 @@ class CallBackController extends AbstractController // 生成订单表 $data = array(); $data['user_id'] = $order_service_package['user_id']; - $data['patient_id'] = $order_service_package['client_user_id']; + $data['patient_id'] = $order_service_package['patient_id']; $data['doctor_id'] = $order_service_package['doctor_id']; if ($order_service_package['order_service_type'] == 1){ $data['order_type'] = 5; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) @@ -2600,7 +2600,7 @@ class CallBackController extends AbstractController // 增加患者问诊病例 $data = array(); $data['user_id'] = $order_service_package['user_id']; - $data['patient_id'] = $order_service_package['client_user_id']; + $data['patient_id'] = $order_service_package['patient_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:其他 ) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 446e7d8..6c5c43c 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -762,7 +762,7 @@ class OrderServicePackageService extends BaseService // 新增订单表 $data = array(); $data['user_id'] = $order_service_package['user_id']; - $data['patient_id'] = $order_service_package['client_user_id']; + $data['patient_id'] = $order_service_package['patient_id']; $data['doctor_id'] = $order_service_package['doctor_id']; if ($order_service_package['order_service_type'] == 1){ $data['order_type'] = 5; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) @@ -813,7 +813,7 @@ class OrderServicePackageService extends BaseService // 新增问诊订单病例 $data = array(); $data['user_id'] = $order_service_package['user_id']; - $data['patient_id'] = $order_service_package['client_user_id']; + $data['patient_id'] = $order_service_package['patient_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:其他 ) From c4c6ff06dd49e8fb8985d94926630dacaf21ab27 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 14:49:39 +0800 Subject: [PATCH 050/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E5=85=B3=E8=81=94=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/CallBackController.php | 15 +++++++++++++++ app/Services/OrderServicePackageService.php | 16 ++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index aaec5f0..602a521 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -35,6 +35,7 @@ use App\Model\OrderProductLogistic; use App\Model\OrderProductRefund; use App\Model\OrderServicePackage; use App\Model\OrderServicePackageCase; +use App\Model\OrderServicePackageInquiry; use App\Model\PatientFamily; use App\Model\PatientFamilyHealth; use App\Model\PatientFamilyPersonal; @@ -2720,6 +2721,20 @@ class CallBackController extends AbstractController return $server->serve(); } + // 新增服务包关联订单 + $data = array(); + $data['order_service_id'] = $order_service_package['order_service_id']; + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $data['order_service_no'] = $order_service_package['order_service_no']; + $data['inquiry_no'] = $order_inquiry['inquiry_no']; + $data['inquiry_status'] = $order_inquiry['inquiry_status']; + $order_service_package_inquiry = OrderServicePackageInquiry::addOrderServicePackageInquiry($data); + if (empty($order_service_package_inquiry)){ + Db::rollBack(); + Log::getInstance("CallBack-wxPayServiceSuccess")->error("订单创建失败"); + return $server->serve(); + } + // 加入未接诊取消订单延迟队列 $time = 60 * 60 * 24; if (\Hyperf\Config\config('app_env') == "dev"){ diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 6c5c43c..6406b15 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -21,6 +21,7 @@ use App\Model\OrderInquiryCoupon; use App\Model\OrderServicePackage; use App\Model\OrderServicePackageCase; use App\Model\OrderServicePackageDetail; +use App\Model\OrderServicePackageInquiry; use App\Model\PatientFamily; use App\Model\PatientFamilyHealth; use App\Model\PatientFamilyPersonal; @@ -619,8 +620,6 @@ class OrderServicePackageService extends BaseService $order_no = $this->request->input("order_no"); try { - - // 检测患者是否购买服务包 $params = array(); $params['user_id'] = $user_info['user_id']; @@ -932,6 +931,19 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "订单创建失败"); } + // 新增服务包关联订单 + $data = array(); + $data['order_service_id'] = $order_service_package['order_service_id']; + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $data['order_service_no'] = $order_service_package['order_service_no']; + $data['inquiry_no'] = $order_inquiry['inquiry_no']; + $data['inquiry_status'] = $order_inquiry['inquiry_status']; + $order_service_package_inquiry = OrderServicePackageInquiry::addOrderServicePackageInquiry($data); + if (empty($order_service_package_inquiry)){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "订单创建失败"); + } + // 加入未接诊取消订单延迟队列 $time = 60 * 60 * 24; if (\Hyperf\Config\config('app_env') == "dev"){ From 94bbfb0db2f288c0bcb424b76a8d16b91ae1fcdd Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 15:28:14 +0800 Subject: [PATCH 051/274] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=9B=9E=E8=B0=83=E5=A2=9E=E5=8A=A0=E5=8F=91?= =?UTF-8?q?=E9=80=81im=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/CallBackController.php | 54 ++++++++++++++++++--- app/Services/OrderServicePackageService.php | 34 +++++++++++++ 2 files changed, 82 insertions(+), 6 deletions(-) diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index 602a521..ce37e97 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -2443,7 +2443,8 @@ class CallBackController extends AbstractController // 支付状态无需验证,如第一次支付失败,会修改支付状态,再次支付时,会出现验证不通过的情况 // 处理支付状态 - if ($message['trade_state'] == "SUCCESS") { + $trade_state = $message['trade_state']; + if ($trade_state == "SUCCESS") { // 支付成功 $pay_status = 2; $pay_time = date('Y-m-d H:i:s', strtotime($message['success_time']));// 支付时间 @@ -2453,16 +2454,16 @@ class CallBackController extends AbstractController Log::getInstance("CallBack-wxPayServiceSuccess")->error("无支付金额"); return $this->wxPayErrorReturn("无支付金额"); } - } elseif ($message['trade_state'] == "CLOSED") { + } elseif ($trade_state == "CLOSED") { // 已关闭 $pay_status = 6; - } elseif ($message['trade_state'] == "REVOKED") { + } elseif ($trade_state == "REVOKED") { // 已撤销(付款码支付) $pay_status = 7; - } elseif ($message['trade_state'] == "USERPAYING") { + } elseif ($trade_state == "USERPAYING") { // 用户支付中(付款码支付) $pay_status = 3; - } elseif ($message['trade_state'] == "PAYERROR") { + } elseif ($trade_state == "PAYERROR") { // 支付失败(其他原因,如银行返回失败) $pay_status = 4; } else { @@ -2762,7 +2763,48 @@ class CallBackController extends AbstractController return $this->wxPayErrorReturn($e->getMessage()); } - Log::getInstance("CallBack-wxPayServiceSuccess")->info("检测微信支付回调处理成功"); + try { + if ($trade_state == "SUCCESS") { + Log::getInstance("CallBack-wxPayInquirySuccess")->info("开始发送im消息"); + + // 获取订单医生数据 + $params = array(); + $params['doctor_id'] = $order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("CallBack-wxPayServiceSuccess")->error("医生数据错误"); + return $server->serve(); + } + + // 发送im消息 + $imService = new ImService(); + + // 等待医生接诊 + $imService->waitDoctorInquiry($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id']); + + // 发送站内、订阅失败发送短信消息-医生有新问诊 + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush->doctorHaveNewInquiry(); + + // 加入xx时间未接诊通知队列 + $data = array(); + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + + $time = 1000 * 60 * 60 * 2; + $message = new DoctorNotYetInquiryDelayDirectProducer($data); + $message->setDelayMs($time); + $producer = $this->container->get(Producer::class); + $producer->produce($message); + + Log::getInstance("CallBack-wxPayServiceSuccess")->info("发送im消息成功"); + } + } catch (\Exception $e) { + // 验证失败 + Log::getInstance("CallBack-wxPayInquirySuccess")->error("微信支付回调处理成功,分配医生/发送问诊消息失败:" . $e->getMessage()); + return $server->serve(); + } + + Log::getInstance("CallBack-wxPayServiceSuccess")->info("微信支付回调处理成功"); return $server->serve(); } diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 6406b15..b30d465 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -4,6 +4,7 @@ namespace App\Services; use App\Amqp\Producer\CancelUnInquiryOrdersDelayDirectProducer; use App\Amqp\Producer\CancelUnpayOrdersDelayDirectProducer; +use App\Amqp\Producer\DoctorNotYetInquiryDelayDirectProducer; use App\Constants\HttpEnumCode; use App\Exception\BusinessException; use App\Model\DiseaseClass; @@ -968,6 +969,39 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); } + try { + // 获取订单医生数据 + $params = array(); + $params['doctor_id'] = $order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + return fail(HttpEnumCode::HTTP_ERROR, "医生数据错误"); + } + + // 发送im消息 + $imService = new ImService(); + + // 等待医生接诊 + $imService->waitDoctorInquiry($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id']); + + // 发送站内、订阅失败发送短信消息-医生有新问诊 + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush->doctorHaveNewInquiry(); + + // 加入xx时间未接诊通知队列 + $data = array(); + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + + $time = 1000 * 60 * 60 * 2; + $message = new DoctorNotYetInquiryDelayDirectProducer($data); + $message->setDelayMs($time); + $producer = $this->container->get(Producer::class); + $producer->produce($message); + } catch (\Exception $e) { + // 验证失败 + return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); + } + return success(); } From 656994c6629a17d7816baa87996cb187ee23e807 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 16:20:48 +0800 Subject: [PATCH 052/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=82=A3=E8=80=85?= =?UTF-8?q?=E5=B7=B2=E8=B4=AD=E4=B9=B0=E7=9A=84=E6=9F=90=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E7=9A=84=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AF=A6=E6=83=85=EF=BC=88?= =?UTF-8?q?5302=EF=BC=89=EF=BC=8C=E5=9C=A8=E5=AD=98=E5=9C=A8=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E4=B8=AD=E7=9A=84=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E4=BC=9A=E5=A2=9E=E5=8A=A0=E8=BF=94=E5=9B=9E?= =?UTF-8?q?order=5Finquiry=5Fid=E5=AD=97=E6=AE=B5=20=E7=94=A8=E4=BA=8E?= =?UTF-8?q?=E8=B7=B3=E8=BD=AC=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index b30d465..30f0baa 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -94,7 +94,8 @@ class OrderServicePackageService extends BaseService $result['status'] = 4; $result['message'] = "当前患者存在进行中的问诊订单"; - $result['data'] = $order_inquiry['inquiry_no']; + $result['data']['order_no'] = $order_inquiry['inquiry_no']; + $result['data']['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; return success($result); } @@ -105,6 +106,7 @@ class OrderServicePackageService extends BaseService $result['status'] = 4; $result['message'] = "您和当前医生存在问诊中订单,无法够买服务包"; $result['data']['order_no'] = $order_inquiry['inquiry_no']; + $result['data']['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; return success($result); } From fa9830d681e9c20ac3e24e5be1f2f1d2f5c116f8 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 16:44:44 +0800 Subject: [PATCH 053/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E6=8E=A5=E8=AF=8A=E6=96=B0=E5=A2=9E=E5=A4=84=E7=90=86=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=8C=85=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Middleware/Rule/LockRequestMiddleware.php | 38 +++++++------ app/Services/UserDoctorService.php | 56 +++++++++++-------- config/routes.php | 6 +- 3 files changed, 60 insertions(+), 40 deletions(-) diff --git a/app/Middleware/Rule/LockRequestMiddleware.php b/app/Middleware/Rule/LockRequestMiddleware.php index 5cfcb05..b537653 100644 --- a/app/Middleware/Rule/LockRequestMiddleware.php +++ b/app/Middleware/Rule/LockRequestMiddleware.php @@ -22,25 +22,29 @@ class LockRequestMiddleware implements MiddlewareInterface public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { - $user_info = $request->getAttribute("userInfo"); - if (empty($user_info)){ - return $handler->handle($request); - } + try { + $user_info = $request->getAttribute("userInfo"); + if (empty($user_info)){ + return $handler->handle($request); + } - // 获取请求路径 - $path_info = $request->getUri()->getPath(); - if (empty($path_info)){ - return $handler->handle($request); - } + // 获取请求路径 + $path_info = $request->getUri()->getPath(); + if (empty($path_info)){ + return $handler->handle($request); + } - $redis = $this->container->get(Redis::class); - $redis_key = "lock_request_" . $path_info . $user_info['user_id']; - $redis_lock = $redis->setnx($redis_key,1); - // 设置过期时间 - $redis->expire($redis_key,1); - if (!$redis_lock){ - // 设置失败,表示已经设置该值 - sleep(1); + $redis = $this->container->get(Redis::class); + $redis_key = "lock_request_" . $path_info . $user_info['user_id']; + $redis_lock = $redis->setnx($redis_key,1); + // 设置过期时间 + $redis->expire($redis_key,1); + if (!$redis_lock){ + // 设置失败,表示已经设置该值 + sleep(1); + } + }catch (\Throwable $e){ + // 异常不进行处理 } return $handler->handle($request); diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index 8be6bb1..145f177 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -31,6 +31,8 @@ use App\Model\OrderPrescriptionFile; use App\Model\OrderPrescriptionIcd; use App\Model\OrderPrescriptionProduct; use App\Model\OrderProductItem; +use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageInquiry; use App\Model\PatientFollow; use App\Model\PatientHistoryInquiry; use App\Model\PatientHistoryInquiry as PatientHistoryInquiryModel; @@ -1814,21 +1816,6 @@ class UserDoctorService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "接诊失败"); } - try { - $redis = $this->container->get(Redis::class); - $redis_key = "order_inquiry_lock_" . $order_inquiry_id; - $redis_lock = $redis->setnx($redis_key,1); - if (!$redis_lock){ - // 设置失败,表示已经设置该值 - return fail(HttpEnumCode::HTTP_SUCCESS,"请您稍后重试"); - } - - // 设置过期时间 - $redis->expire($redis_key,3); - }catch (\Throwable $e){ - return fail(HttpEnumCode::HTTP_SUCCESS,"请您稍后重试"); - } - if ($order_inquiry['inquiry_status'] == 4) { // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) return success(); @@ -1885,12 +1872,39 @@ class UserDoctorService extends BaseService $params['order_inquiry_id'] = $order_inquiry_id; OrderInquiry::edit($params,$data); - /** - * 获取订单结束周期 - * 疑难问诊为自己配置周期。 - */ - // 疑难问诊 + // 处理服务包订单 + if ($order_inquiry['inquiry_type'] == 1){ + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取关联服务包订单 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); + if (empty($order_service_package_inquiry)){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "接诊失败"); + } + + // 开始服务时间 + $start_time = date('Y-m-d H:i:s',time()); + + // 结束服务时间 + $finish_time = date('Y-m-d H:i:s', strtotime('+90 days', $start_time)); + + // 修改服务包 + $data = array(); + $data['order_service_status'] = 3; // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + $data['start_time'] = $start_time; + $data['finish_time'] = $finish_time; + + $params = array(); + $params['order_service_id'] = $order_service_package_inquiry['order_service_id']; + OrderServicePackage::edit($params,$data); + } + } + + // 获取订单持续时长 if ($order_inquiry['inquiry_type'] == 1 && $order_inquiry['inquiry_mode'] == 6){ + // 疑难问诊为自己配置周期。 $params = array(); $params['doctor_id'] = $order_inquiry['doctor_id']; $params['inquiry_type'] = $order_inquiry['inquiry_type']; @@ -1918,8 +1932,6 @@ class UserDoctorService extends BaseService return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } - // 删除锁 - $redis->del($redis_key); Db::commit(); } catch (\Exception $e) { Db::rollBack(); diff --git a/config/routes.php b/config/routes.php index 0c5ee39..3542b7e 100644 --- a/config/routes.php +++ b/config/routes.php @@ -157,7 +157,11 @@ Router::addGroup('/doctor', function () { Router::post('/message/attr', [UserDoctorController::class, 'getDoctorMessageAttrList']); // 医生接诊 - Router::post('/{order_inquiry_id:\d+}', [UserDoctorController::class, 'addDoctorInquiry']); + Router::post('/{order_inquiry_id:\d+}', [UserDoctorController::class, 'addDoctorInquiry'], + [ + 'middleware' => [LockRequestMiddleware::class] // 锁定重复请求 + ] + ); // 结束问诊会话列表 Router::get('/finish/message', [InquiryController::class, 'getDoctorFinishMessageList']); From ee84da655b673820c1e9d610c91dcbb10baed4dc Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 16:48:11 +0800 Subject: [PATCH 054/274] 1 --- app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php index 37b0da8..b5ffc1c 100644 --- a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php @@ -162,6 +162,7 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage return Result::ACK; } + // 如果是服务包的首单问诊订单即执行服务包退款 if (count($order_service_package_inquiry) == 1){ // 首单服务包问诊订单,但问诊订单未接诊,执行服务包退款 $OrderService = new OrderService(); From e309d31e7af5dba25854d476da3f3a09eac83292 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 17:00:38 +0800 Subject: [PATCH 055/274] 1 --- app/Model/HealthPackage.php | 7 ++++--- app/Model/HealthPackageProduct.php | 7 ++++--- app/Services/OrderService.php | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/Model/HealthPackage.php b/app/Model/HealthPackage.php index 46ee69c..902d8b2 100644 --- a/app/Model/HealthPackage.php +++ b/app/Model/HealthPackage.php @@ -16,8 +16,9 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $monthly_frequency 每月次数 * @property string $effective_days 服务有效天数 * @property string $service_rate 服务费率。100为满值,表示1,正常费率。 - * @property Carbon $created_at 创建时间 - * @property Carbon $updated_at 修改时间 + * @property string $discount_product_total_amount 折扣商品总价格 + * @property \Carbon\Carbon $created_at 创建时间 + * @property \Carbon\Carbon $updated_at 修改时间 */ class HealthPackage extends Model { @@ -31,7 +32,7 @@ class HealthPackage extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['package_id', 'service_count', 'monthly_frequency', 'effective_days', 'service_rate', 'created_at', 'updated_at']; + protected array $fillable = ['package_id', 'service_count', 'monthly_frequency', 'effective_days', 'service_rate', 'discount_product_total_amount', 'created_at', 'updated_at']; protected string $primaryKey = "package_id"; diff --git a/app/Model/HealthPackageProduct.php b/app/Model/HealthPackageProduct.php index 1740a3b..d745282 100644 --- a/app/Model/HealthPackageProduct.php +++ b/app/Model/HealthPackageProduct.php @@ -15,8 +15,9 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $package_id 健康包id * @property int $product_id 商品id * @property int $quantity 数量 - * @property Carbon $created_at 创建时间 - * @property Carbon $updated_at 修改时间 + * @property string $discount_product_price 折扣商品价格 + * @property \Carbon\Carbon $created_at 创建时间 + * @property \Carbon\Carbon $updated_at 修改时间 */ class HealthPackageProduct extends Model { @@ -30,7 +31,7 @@ class HealthPackageProduct extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['package_product_id', 'package_id', 'product_id', 'quantity', 'created_at', 'updated_at']; + protected array $fillable = ['package_product_id', 'package_id', 'product_id', 'quantity', 'discount_product_price', 'created_at', 'updated_at']; protected string $primaryKey = "package_product_id"; diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 54706c3..804a0c8 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -952,7 +952,7 @@ class OrderService extends BaseService } // 检测订单状态 - if (!in_array($order_inquiry['inquiry_status'], [4, 5, 6])) { + if (in_array($order_inquiry['inquiry_status'], [4, 5, 6])) { // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) $result['status'] = 0; $result['message'] = "已存在问诊订单,无法手动取消"; From 63a22e1b6639a9641abacf7a875dde051c178b6a Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 17:14:03 +0800 Subject: [PATCH 056/274] =?UTF-8?q?=E5=8C=BB=E7=94=9F=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E5=BC=80=E5=85=B3=E5=A2=9E=E5=8A=A0=E5=95=86=E5=93=81=E6=80=BB?= =?UTF-8?q?=E4=BB=B7=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorInquiryService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/DoctorInquiryService.php b/app/Services/DoctorInquiryService.php index 0073566..ef9523a 100644 --- a/app/Services/DoctorInquiryService.php +++ b/app/Services/DoctorInquiryService.php @@ -392,7 +392,7 @@ class DoctorInquiryService extends BaseService } // 价格计算(专家图文问诊价格*费率+30盒35元的干爽颗粒) - $service_price = $doctor_inquiry_config['inquiry_price'] * $health_package['service_rate'] / 100 * 6 + 35 * 30; + $service_price = $doctor_inquiry_config['inquiry_price'] * $health_package['service_rate'] / 100 * 6 + $health_package['discount_product_total_amount']; // 创建医生健康包 $data = array(); From 24c248f8cd538cc056cc7886a80060c5b98b5686 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 17:18:36 +0800 Subject: [PATCH 057/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=82=A3=E8=80=85?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2=E5=8D=95=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86discount=5Fproduct=5Ftotal=5Famount?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=EF=BC=8C=E8=8D=AF=E5=93=81=E9=87=91=E9=A2=9D?= =?UTF-8?q?=E8=B4=B9=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 35ef37f..7145ca4 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -12,6 +12,7 @@ use App\Model\BasicLogisticsCompany; use App\Model\DetectionProject; use App\Model\DiseaseClass; use App\Model\DoctorInquiryConfig; +use App\Model\HealthPackage; use App\Model\Hospital; use App\Model\InquiryCaseProduct; use App\Model\Order; @@ -2673,6 +2674,19 @@ class PatientOrderService extends BaseService $order_service_package['order_service_package_refund'] = $order_service_package_refund; } + $order_service_package['discount_product_total_amount'] = 0; + + if ($order_service_package['order_service_type'] == 1){ + // 获取健康包配置 + $params = array(); + $health_package = HealthPackage::getOne($params); + if (empty($health_package)){ + return fail(); + } + + $order_service_package['discount_product_total_amount'] = $health_package['discount_product_total_amount']; + } + return success($order_service_package->toArray()); } From f8cabb455a927f67009e5de3985a8c176a9f9a3d Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 18:32:57 +0800 Subject: [PATCH 058/274] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E8=AE=A2=E5=8D=95=E5=A2=9E=E5=8A=A0=E5=81=A5=E5=BA=B7?= =?UTF-8?q?=E5=8C=85=E8=AE=A2=E5=8D=95=E5=85=B3=E8=81=94=E5=95=86=E5=93=81?= =?UTF-8?q?=E3=80=81=E6=96=B0=E5=A2=9E=E4=BA=86=E8=8E=B7=E5=8F=96=E6=82=A3?= =?UTF-8?q?=E8=80=85=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2=E5=8D=95=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E6=9D=83=E7=9B=8A=E8=AF=A6=E6=83=85=EF=BC=88=E5=BE=85?= =?UTF-8?q?=E5=AE=8C=E6=88=90=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/PatientOrderController.php | 11 +++ app/Model/HealthPackage.php | 4 +- app/Model/OrderServicePackageProduct.php | 81 +++++++++++++++++++++ app/Services/OrderServicePackageService.php | 39 ++++++++++ app/Services/PatientOrderService.php | 37 ++++++++++ config/routes.php | 3 + 6 files changed, 173 insertions(+), 2 deletions(-) create mode 100644 app/Model/OrderServicePackageProduct.php diff --git a/app/Controller/PatientOrderController.php b/app/Controller/PatientOrderController.php index 0c59805..83d543d 100644 --- a/app/Controller/PatientOrderController.php +++ b/app/Controller/PatientOrderController.php @@ -356,4 +356,15 @@ class PatientOrderController extends AbstractController $data = $PatientOrderService->getPatientServiceOrderInfo(); return $this->response->json($data); } + + /** + * 获取患者服务包订单服务权益详情 + * @return ResponseInterface + */ + public function getPatientServiceOrderDetailInfo(): ResponseInterface + { + $PatientOrderService = new PatientOrderService(); + $data = $PatientOrderService->getPatientServiceOrderDetailInfo(); + return $this->response->json($data); + } } \ No newline at end of file diff --git a/app/Model/HealthPackage.php b/app/Model/HealthPackage.php index 902d8b2..8d7e234 100644 --- a/app/Model/HealthPackage.php +++ b/app/Model/HealthPackage.php @@ -17,8 +17,8 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property string $effective_days 服务有效天数 * @property string $service_rate 服务费率。100为满值,表示1,正常费率。 * @property string $discount_product_total_amount 折扣商品总价格 - * @property \Carbon\Carbon $created_at 创建时间 - * @property \Carbon\Carbon $updated_at 修改时间 + * @property Carbon $created_at 创建时间 + * @property Carbon $updated_at 修改时间 */ class HealthPackage extends Model { diff --git a/app/Model/OrderServicePackageProduct.php b/app/Model/OrderServicePackageProduct.php new file mode 100644 index 0000000..b7f5e41 --- /dev/null +++ b/app/Model/OrderServicePackageProduct.php @@ -0,0 +1,81 @@ +first($fields); + } + + /** + * 多条 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params, array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + + /** + * 新增 + * @param array $data + * @return OrderServicePackageProduct|\Hyperf\Database\Model\Model + */ + public static function addOrderServicePackageProduct(array $data): \Hyperf\Database\Model\Model|OrderServicePackageProduct + { + return self::create($data); + } + + /** + * 修改 + * @param array $params + * @param array $data + * @return int + */ + public static function edit(array $params = [], array $data = []): int + { + return self::where($params)->update($data); + } +} diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 30f0baa..9ba0452 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -13,6 +13,7 @@ use App\Model\DoctorConfigFollowPackageItem; use App\Model\DoctorConfigHealthPackage; use App\Model\DoctorInquiryConfig; use App\Model\HealthPackage; +use App\Model\HealthPackageProduct; use App\Model\InquiryCaseProduct; use App\Model\Order; use App\Model\OrderCoupon; @@ -23,6 +24,7 @@ use App\Model\OrderServicePackage; use App\Model\OrderServicePackageCase; use App\Model\OrderServicePackageDetail; use App\Model\OrderServicePackageInquiry; +use App\Model\OrderServicePackageProduct; use App\Model\PatientFamily; use App\Model\PatientFamilyHealth; use App\Model\PatientFamilyPersonal; @@ -531,6 +533,41 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } + // 增加健康包订单关联商品 + if ($request_params['service_type'] == 1){ + // 获取医生健康包配置 + $params = array(); + $health_package = HealthPackage::getOne($params); + if (empty($health_package)){ + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + + // 获取医生健康包关联商品 + $params = array(); + $params['package_id'] = $health_package['package_id']; + $health_package_products = HealthPackageProduct::getList($params); + if (empty($health_package_product)){ + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + + // 增加健康包订单关联商品 + foreach ($health_package_products as $health_package_product){ + $data = array(); + $data['order_service_id'] = $order_service_package['order_service_id']; + $data['product_id'] = $health_package_product['product_id']; + $data['product_name'] = $health_package_product['product_name']; + $data['quantity'] = $health_package_product['quantity']; + $data['discount_product_price'] = $health_package_product['discount_product_price']; + $order_service_package_product = OrderServicePackageProduct::addOrderServicePackageProduct($data); + if (empty($order_service_package_product)){ + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + } + } + // 增加患者服务包病例 $data = array(); $data['user_id'] = $user_info['user_id']; @@ -616,6 +653,8 @@ class OrderServicePackageService extends BaseService /** * 创建服务包问诊订单 * @return array + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface */ public function addServiceInquiryOrder(): array { diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 7145ca4..93e877f 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -31,6 +31,7 @@ use App\Model\OrderProductItem; use App\Model\OrderProductLogistic; use App\Model\OrderServicePackage; use App\Model\OrderServicePackageCase; +use App\Model\OrderServicePackageDetail; use App\Model\OrderServicePackageRefund; use App\Model\PatientFamily; use App\Model\PatientFamilyHealth; @@ -2690,6 +2691,42 @@ class PatientOrderService extends BaseService return success($order_service_package->toArray()); } + /** + * 获取患者服务包订单服务权益详情 + * @return array + */ + public function getPatientServiceOrderDetailInfo(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $order_no = $this->request->route('order_no'); + + // 获取订单数据 + $params = array(); + $params['patient_id'] = $user_info['client_user_id']; + $params['order_service_no'] = $order_no; + $params['is_delete'] = 0; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + return fail(HttpEnumCode::HTTP_ERROR,"非法订单"); + } + + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + return fail(HttpEnumCode::HTTP_ERROR,"非法订单"); + } + + // 健康报 + if ($order_service_package['order_service_type'] == 1){ + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + } + + return success($order_service_package_detail->toArray()); + } + /** * 获取患者未完成订单 * @param string $patient_id diff --git a/config/routes.php b/config/routes.php index 3542b7e..e8d51dd 100644 --- a/config/routes.php +++ b/config/routes.php @@ -558,6 +558,9 @@ Router::addGroup('/patient', function () { // 获取患者服务包订单详情 Router::get('/{order_no}', [PatientOrderController::class, 'getPatientServiceOrderInfo']); + + // 获取患者服务包订单服务权益详情 + Router::get('/detail/{order_no}', [PatientOrderController::class, 'getPatientServiceOrderDetailInfo']); }); // 获取患者订单支付数据 From cb95bde20cb1cdeb7f41ef24dc953b7a7640df44 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 19:12:00 +0800 Subject: [PATCH 059/274] =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=94=AF=E4=BB=98=E6=88=90=E5=8A=9F=E5=9B=9E=E8=B0=83?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=8F=91=E6=94=BE=E4=BC=98?= =?UTF-8?q?=E6=83=A0=E5=8D=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/CallBackController.php | 10 +++++++++ app/Model/Coupon.php | 17 ++++++++++++-- app/Model/UserCoupon.php | 1 - app/Services/CouponService.php | 25 +++++++++++++++++++++ app/Services/OrderServicePackageService.php | 2 +- app/Services/PatientOrderService.php | 24 +++++++++++++++++++- 6 files changed, 74 insertions(+), 5 deletions(-) diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index ce37e97..db1c192 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -50,6 +50,7 @@ use App\Model\UserSystem; use App\Model\VideoRecord; use App\Model\VideoReservation; use App\Services\BaseService; +use App\Services\CouponService; use App\Services\ImService; use App\Services\InquiryService; use App\Services\MessagePush; @@ -2736,6 +2737,15 @@ class CallBackController extends AbstractController return $server->serve(); } + // 发放优惠卷 + $CouponService = new CouponService(); + $res = $CouponService->GrantBuyOrderServicePackageCoupon($order_service_package['user_id']); + if (!$res) { + Db::rollBack(); + Log::getInstance("CallBack-wxPayServiceSuccess")->error("订单创建失败"); + return $server->serve(); + } + // 加入未接诊取消订单延迟队列 $time = 60 * 60 * 24; if (\Hyperf\Config\config('app_env') == "dev"){ diff --git a/app/Model/Coupon.php b/app/Model/Coupon.php index f7d18ca..9c308f6 100644 --- a/app/Model/Coupon.php +++ b/app/Model/Coupon.php @@ -6,6 +6,7 @@ namespace App\Model; +use Carbon\Carbon; use Hyperf\Database\Model\Collection; use Hyperf\Snowflake\Concern\Snowflake; @@ -37,8 +38,8 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $reissue_interval_days 确认收货后的再次发放间隔天数(如果设置为 0,则表示不再次发放。当适用范围为商品时生效) * @property int $is_reissuable_after_expire 过期之后是否允许再次发放(0:否 1:是) * @property int $is_popup 是否首页弹窗(0:否 1:是) - * @property \Carbon\Carbon $created_at 创建时间 - * @property \Carbon\Carbon $updated_at 修改时间 + * @property Carbon $created_at 创建时间 + * @property Carbon $updated_at 修改时间 */ class Coupon extends Model { @@ -110,4 +111,16 @@ class Coupon extends Model ->whereIn("distribution_object",[1,2]) ->get(); } + + /** + * 获取购买服务包的用户可领取的优惠卷列表 + * @return Collection|array + */ + public static function getOrderServicePackageCouponList(): Collection|array + { + return self::where("coupon_client",1) + ->where("coupon_status",1) + ->whereIn("distribution_object",[7]) + ->get(); + } } diff --git a/app/Model/UserCoupon.php b/app/Model/UserCoupon.php index 4fcd438..7c1cb8d 100644 --- a/app/Model/UserCoupon.php +++ b/app/Model/UserCoupon.php @@ -61,7 +61,6 @@ class UserCoupon extends Model /** * 获取优惠卷信息-多条 * @param array $params - * @param array $coupon_params * @param array $fields * @return Collection|array */ diff --git a/app/Services/CouponService.php b/app/Services/CouponService.php index e2d6dcb..22d7e69 100644 --- a/app/Services/CouponService.php +++ b/app/Services/CouponService.php @@ -198,4 +198,29 @@ class CouponService extends BaseService return true; } + + /** + * 发放购买服务包的关联优惠卷 + * @param string $user_id 用户id + * @return bool + */ + public function GrantBuyOrderServicePackageCoupon(string $user_id): bool + { + // 获取购买服务包的用户可领取的优惠卷列表 + $coupon = Coupon::getOrderServicePackageCouponList(); + if (empty($coupon)) { + return true; + } + + foreach ($coupon as $value){ + // 发放优惠卷 + $res = $this->GrantUserCoupon($value['coupon_id'],$user_id); + if (!$res){ + // 发放失败 + return false; + } + } + + return true; + } } \ No newline at end of file diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 9ba0452..151fbb8 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -533,7 +533,7 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } - // 增加健康包订单关联商品 + // 处理健康包数据 if ($request_params['service_type'] == 1){ // 获取医生健康包配置 $params = array(); diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 93e877f..75ddb62 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -32,6 +32,7 @@ use App\Model\OrderProductLogistic; use App\Model\OrderServicePackage; use App\Model\OrderServicePackageCase; use App\Model\OrderServicePackageDetail; +use App\Model\OrderServicePackageProduct; use App\Model\OrderServicePackageRefund; use App\Model\PatientFamily; use App\Model\PatientFamilyHealth; @@ -2711,6 +2712,7 @@ class PatientOrderService extends BaseService return fail(HttpEnumCode::HTTP_ERROR,"非法订单"); } + // 获取订单详情数据 $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; $order_service_package_detail = OrderServicePackageDetail::getOne($params); @@ -2718,10 +2720,30 @@ class PatientOrderService extends BaseService return fail(HttpEnumCode::HTTP_ERROR,"非法订单"); } - // 健康报 + // 定义返回数据 + $result = array(); + $result['order_service_package_detail'] = $order_service_package_detail->toArray(); // 订单详情数据 + $result['order_service_package_product'] = []; // 健康包商品数据 + $result['order_service_package_coupon'] = []; // 健康包关联优惠卷数据 + $result['order_inquiry'] = []; // 健康包问诊订单数据 + $result['order_product'] = []; // 健康包药品订单数据 + + + // 健康包商品数据 if ($order_service_package['order_service_type'] == 1){ $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_product = OrderServicePackageProduct::getList($params); + if (empty($order_service_package_product)){ + return fail(); + } + } + + // 健康包关联优惠卷数据 + if (in_array($order_service_package['order_service_status'],[3,4,5])){ + // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + // 获取用户优惠卷 + } return success($order_service_package_detail->toArray()); From da865478928ff53dd04af2270c06f575b4dacbac Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 19:29:19 +0800 Subject: [PATCH 060/274] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E4=BA=86=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=8C=85=E8=AE=A2=E5=8D=95=E6=94=AF=E4=BB=98=E6=88=90?= =?UTF-8?q?=E5=8A=9F=E5=9B=9E=E8=B0=83=EF=BC=8C=E5=A2=9E=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E5=8F=91=E6=94=BE=E4=BC=98=E6=83=A0=E5=8D=B7=E3=80=82=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E6=96=B0=E5=A2=9E=E5=8C=BB=E7=94=9F=E6=8E=A5?= =?UTF-8?q?=E8=AF=8A=E6=97=B6=E5=81=A5=E5=BA=B7=E5=8C=85=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=8F=91=E6=94=BE=E4=BC=98=E6=83=A0=E5=8D=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/CallBackController.php | 9 --------- app/Services/UserCouponService.php | 1 - app/Services/UserDoctorService.php | 20 ++++++++++++++++++++ 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index db1c192..00be6b4 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -2737,15 +2737,6 @@ class CallBackController extends AbstractController return $server->serve(); } - // 发放优惠卷 - $CouponService = new CouponService(); - $res = $CouponService->GrantBuyOrderServicePackageCoupon($order_service_package['user_id']); - if (!$res) { - Db::rollBack(); - Log::getInstance("CallBack-wxPayServiceSuccess")->error("订单创建失败"); - return $server->serve(); - } - // 加入未接诊取消订单延迟队列 $time = 60 * 60 * 24; if (\Hyperf\Config\config('app_env') == "dev"){ diff --git a/app/Services/UserCouponService.php b/app/Services/UserCouponService.php index 5dd9bad..3f6abe4 100644 --- a/app/Services/UserCouponService.php +++ b/app/Services/UserCouponService.php @@ -216,7 +216,6 @@ class UserCouponService extends BaseService continue; } - dump($coupon_high_price); // 处理存在互斥卷情况 if ($is_mutex == 1) { // 选择金额最高的为选中 diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index 145f177..a981e4f 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -1899,6 +1899,26 @@ class UserDoctorService extends BaseService $params = array(); $params['order_service_id'] = $order_service_package_inquiry['order_service_id']; OrderServicePackage::edit($params,$data); + + // 健康包订单发放优惠卷 + if ($order_inquiry['inquiry_mode'] == 8){ + // 检测问诊次数 + // 检测逻辑:支付成功的回调中,记录服务包关联的订单id,此方法为医生接诊,所以如果是首次,应该只会存在一个关联订单id + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getList($params); + if (!empty($order_service_package_inquiry)){ + if (count($order_service_package_inquiry) <= 1){ + // 发放优惠卷 + $CouponService = new CouponService(); + $res = $CouponService->GrantBuyOrderServicePackageCoupon($order_inquiry['user_id']); + if (!$res) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "接诊失败"); + } + } + } + } } } From a4f473d84b2e2dfd86e185185429ec25d65a2d60 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 19:51:47 +0800 Subject: [PATCH 061/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=82=A3=E8=80=85=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=9D=83=E7=9B=8A=E8=AF=A6=E6=83=85=20?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/HealthPackageProduct.php | 3 +- app/Services/PatientOrderService.php | 44 ++++++++++++++++++++-------- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/app/Model/HealthPackageProduct.php b/app/Model/HealthPackageProduct.php index d745282..23190a8 100644 --- a/app/Model/HealthPackageProduct.php +++ b/app/Model/HealthPackageProduct.php @@ -14,6 +14,7 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $package_product_id 主键id * @property int $package_id 健康包id * @property int $product_id 商品id + * @property string $product_name 商品名称 * @property int $quantity 数量 * @property string $discount_product_price 折扣商品价格 * @property \Carbon\Carbon $created_at 创建时间 @@ -31,7 +32,7 @@ class HealthPackageProduct extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['package_product_id', 'package_id', 'product_id', 'quantity', 'discount_product_price', 'created_at', 'updated_at']; + protected array $fillable = ['package_product_id', 'package_id', 'product_id', 'product_name', 'quantity', 'discount_product_price', 'created_at', 'updated_at']; protected string $primaryKey = "package_product_id"; diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 75ddb62..7273ed0 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -32,6 +32,7 @@ use App\Model\OrderProductLogistic; use App\Model\OrderServicePackage; use App\Model\OrderServicePackageCase; use App\Model\OrderServicePackageDetail; +use App\Model\OrderServicePackageInquiry; use App\Model\OrderServicePackageProduct; use App\Model\OrderServicePackageRefund; use App\Model\PatientFamily; @@ -2728,25 +2729,44 @@ class PatientOrderService extends BaseService $result['order_inquiry'] = []; // 健康包问诊订单数据 $result['order_product'] = []; // 健康包药品订单数据 - - // 健康包商品数据 + // 健康包数据 if ($order_service_package['order_service_type'] == 1){ + // 健康包商品数据 $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; $order_service_package_product = OrderServicePackageProduct::getList($params); - if (empty($order_service_package_product)){ - return fail(); + if (!empty($order_service_package_product)){ + $result['order_service_package_product'] = $order_service_package_product->toArray(); + } + + // 健康包关联优惠卷数据 + if (in_array($order_service_package['order_service_status'],[3,4,5])){ + // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + // 获取用户优惠卷 + $coupon = UserCoupon::getUserObjectTypeCoupon($order_service_package['user_id'],7); + if (!empty($coupon)){ + $result['order_service_package_coupon'] = $coupon->toArray(); + } + } + + // 健康包问诊订单数据 + if (in_array($order_service_package['order_service_status'],[2,3,4,5])){ + // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getList($params); + if (!empty($order_service_package_inquiry)){ + $result['order_inquiry'] = $order_service_package_inquiry->toArray(); + } + } + + // 健康包药品订单数据 + if (in_array($order_service_package['order_service_status'],[3,4,5])){ + } } - // 健康包关联优惠卷数据 - if (in_array($order_service_package['order_service_status'],[3,4,5])){ - // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) - // 获取用户优惠卷 - - } - - return success($order_service_package_detail->toArray()); + return success($result); } /** From a105ba2ad3a25d2e69a089648880772c7f5d6367 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 12 Apr 2024 19:56:45 +0800 Subject: [PATCH 062/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderService.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 804a0c8..56fee98 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -385,7 +385,8 @@ class OrderService extends BaseService OrderDetection::editOrderDetection($params, $data); break; - case 4: // 服务包订单 + case 4: // 健康包订单 + case 5: // 随访包订单订单 // 获取订单数据 $params = array(); $params['order_service_no'] = $order_no; @@ -537,7 +538,8 @@ class OrderService extends BaseService OrderDetectionRefund::edit($params, $data); break; - case 4: // 服务包订单 + case 4: // 健康包订单 + case 5: // 随访包订单 // 修改订单 $data = array(); $data['refund_status'] = $refund_status; @@ -886,7 +888,8 @@ class OrderService extends BaseService OrderDetection::editOrderDetection($params, $data); break; - case 4: // 服务包订单 + case 4: // 健康包订单 + case 5: // 随访包订单 // 获取订单数据 $params = array(); $params['order_service_no'] = $order_no; From 31c3ce57b807c38dfd5758a52cc5bb5433aca7a6 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 15 Apr 2024 13:27:31 +0800 Subject: [PATCH 063/274] =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=B8=BB=E5=8A=A8?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E8=AE=A2=E5=8D=95=E5=A2=9E=E5=8A=A0=E9=80=80?= =?UTF-8?q?=E6=AC=BE=E3=80=82=E5=8F=96=E6=B6=88=E8=AE=A2=E5=8D=95-?= =?UTF-8?q?=E9=97=AE=E8=AF=8A/=E6=A3=80=E6=B5=8B/=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E5=A2=9E=E5=8A=A0=E6=8E=A8=E9=80=81=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/CallBackController.php | 2 +- app/Services/OrderService.php | 7 +++ app/Services/PatientOrderService.php | 63 +++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 1 deletion(-) diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index 00be6b4..1c01699 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -2354,7 +2354,7 @@ class CallBackController extends AbstractController if ($order_service_package['refund_status'] == 3) { // 检测订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) Db::rollBack(); - Log::getInstance("CallBack-wxPayServiceRefund")->error("订单退款状态错误:当前为" . $order_service_package['refund_status']); + Log::getInstance("CallBack-wxPayServiceRefund")->info('已退款成功,此回调不处理'); return $server->serve(); } diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 56fee98..dca1367 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -992,6 +992,13 @@ class OrderService extends BaseService throw new BusinessException("订单类型错误"); } + // 检测支付状态,判断是否需要退款处理 + if ($order['pay_status'] == 2 && $order['refund_status'] != 3) { + // 需退款 + $OrderService = new OrderService(); + $OrderService->orderRefund($order['order_no'], "主动取消"); + } + // 删除锁 $redis->del($redis_key); diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 7273ed0..a8c2d36 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -2421,6 +2421,14 @@ class PatientOrderService extends BaseService Db::beginTransaction(); try { + // 获取订单数据 + $params = array(); + $params['order_no'] = $order_no; + $order = Order::getOne($params); + if (empty($order)) { + return fail(HttpEnumCode::HTTP_ERROR, "非法订单"); + } + $OrderService = new OrderService(); $result = $OrderService->PatientActiveCancelOrder($order_no); if ($result['status'] != 1) { @@ -2434,6 +2442,61 @@ class PatientOrderService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); } + // 推送消息 + try { + // 处理对应订单 + switch ($order['order_type']) { + case 1: // 问诊订单 + // 获取订单数据 + $params = array(); + $params['inquiry_no'] = $order_no; + $order_inquiry = OrderInquiry::getOne($params); + if (!empty($order_inquiry)) { + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (!empty($user_doctor)) { + // 推送医生-患者取消问诊 + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush->patientCancelInquiryToDoctor(); + } + } + + break; + case 3: // 检测订单 + // 获取订单数据 + $params = array(); + $params['detection_no'] = $order_no; + $order_detection = OrderDetection::getOne($params); + if (!empty($order_detection)) { + // 推送患者-订单取消成功通知 + $MessagePush = new MessagePush($order_detection['user_id']); + $MessagePush->patientCancelDetectionOrderSuccess($order_detection['order_detection_id']); + } + + break; + case 4: // 健康包订单 + case 5: // 随访包订单 + // 获取订单数据 + $params = array(); + $params['order_service_no'] = $order_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + $result['status'] = 0; + $result['message'] = "订单数据为空"; + return $result; + } + + break; + default: + // 错误不处理 + } + }catch (\Throwable $e){ + // 错误不处理 + Log::getInstance("PatientOrderService-putCancelPatientOrder")->error($e->getMessage()); + } + return success(); } From 90775890b0e7029027ab5dbf41b9698fc81312e9 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 15 Apr 2024 13:46:57 +0800 Subject: [PATCH 064/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=82=A3=E8=80=85=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=9D=83=E7=9B=8A=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/OrderProduct.php | 25 +++++++++++++++++++++---- app/Services/PatientOrderService.php | 13 ++++++++++++- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/app/Model/OrderProduct.php b/app/Model/OrderProduct.php index e005b7d..56e31e9 100644 --- a/app/Model/OrderProduct.php +++ b/app/Model/OrderProduct.php @@ -6,6 +6,7 @@ namespace App\Model; +use Carbon\Carbon; use Hyperf\Database\Model\Collection; use Hyperf\Database\Model\Relations\HasMany; use Hyperf\Database\Model\Relations\HasOne; @@ -54,12 +55,12 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property string $consignee_name_mask 收货人姓名(掩码) * @property string $consignee_tel 收货人电话 * @property string $consignee_tel_mask 收货人电话(掩码) - * @property \Carbon\Carbon $created_at 创建时间 - * @property \Carbon\Carbon $updated_at 修改时间 - * @property-read \Hyperf\Database\Model\Collection|OrderProductItem[]|null $OrderProductItem + * @property Carbon $created_at 创建时间 + * @property Carbon $updated_at 修改时间 + * @property-read Collection|OrderProductItem[]|null $OrderProductItem * @property-read OrderPrescription|null $OrderPrescription * @property-read PatientFamily|null $PatientFamily - * @property-read \Hyperf\Database\Model\Collection|OrderPrescriptionIcd[]|null $OrderPrescriptionIcd + * @property-read Collection|OrderPrescriptionIcd[]|null $OrderPrescriptionIcd */ class OrderProduct extends Model { @@ -239,4 +240,20 @@ class OrderProduct extends Model return self::where($params)->whereIn('order_product_status',$order_product_status)->get($fields); } + /** + * 获取患者某一时间段药品订单-创建时间 + * @param array $params + * @param array $created_at 接诊时间区间 + * @param array $order_product_status + * @return Collection|array + */ + public static function getProductWithCreateTime(array $params, array $created_at,array $order_product_status): Collection|array + { + return self::where($params) + ->whereIn('order_product_status', $order_product_status) + ->whereBetween('created_at', $created_at) + ->orderBy('created_at') + ->get(); + } + } diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index a8c2d36..e0f469e 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -2823,9 +2823,20 @@ class PatientOrderService extends BaseService } } - // 健康包药品订单数据 + // 健康包药品订单数据-周期内所有药品订单 if (in_array($order_service_package['order_service_status'],[3,4,5])){ + $params = array(); + $params['doctor_id'] = $order_service_package['doctor_id']; + $params['patient_id'] = $order_service_package['patient_id']; + $params['family_id'] = $order_service_package['family_id']; + $created_at = [$order_service_package['start_time'],$order_service_package['finish_time']]; + + $order_product_status_params = [2,3,4]; + $order_product = OrderProduct::getProductWithCreateTime($params,$created_at,$order_product_status_params); + if (!empty($order_product)){ + $result['order_product'] = $order_product->toArray(); + } } } From bad98396fc1c792a9b4164f84147e201b9a634eb Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 15 Apr 2024 14:15:41 +0800 Subject: [PATCH 065/274] 1 --- app/Services/OrderServicePackageService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 151fbb8..22b712c 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -547,7 +547,7 @@ class OrderServicePackageService extends BaseService $params = array(); $params['package_id'] = $health_package['package_id']; $health_package_products = HealthPackageProduct::getList($params); - if (empty($health_package_product)){ + if (empty($health_package_products)){ Db::rollBack(); return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } From 8b309acb521638d2e33449db8e4ccdd29ac886e7 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 15 Apr 2024 14:50:14 +0800 Subject: [PATCH 066/274] 2 --- app/Controller/CallBackController.php | 1 + app/Services/OrderServicePackageService.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index 1c01699..b443d2f 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -2743,6 +2743,7 @@ class CallBackController extends AbstractController $time = 60 * 10; } + Log::getInstance("CallBack-wxPayServiceSuccess")->error("订单创建失败"); $data = array(); $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $data['order_no'] = $order_inquiry['inquiry_no']; diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 22b712c..12c5d3a 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -627,7 +627,7 @@ class OrderServicePackageService extends BaseService } $data = array(); - $data['order_no'] = $order_service_package['inquiry_no']; + $data['order_no'] = $order_service_package['order_service_no']; $data['order_type'] = 4; $message = new CancelUnpayOrdersDelayDirectProducer($data); From 12e5a95a358330665f1ff0ec896e39e445b04ac3 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 15 Apr 2024 14:50:31 +0800 Subject: [PATCH 067/274] 3 --- app/Controller/CallBackController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index b443d2f..07cf5ea 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -2743,7 +2743,7 @@ class CallBackController extends AbstractController $time = 60 * 10; } - Log::getInstance("CallBack-wxPayServiceSuccess")->error("订单创建失败"); + Log::getInstance("CallBack-wxPayServiceSuccess")->info($time); $data = array(); $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $data['order_no'] = $order_inquiry['inquiry_no']; From 7ee7991663687ca3b44b58f6db96621efa2b8fa5 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 15 Apr 2024 15:02:59 +0800 Subject: [PATCH 068/274] 4 --- app/Services/OrderService.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index dca1367..d9f88bb 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -402,7 +402,7 @@ class OrderService extends BaseService $data['order_service_no'] = $order_service_package['order_service_no']; $data['service_refund_no'] = $refund_no; $data['refund_id'] = $refund_id; - $data['detection_refund_status'] = $refund_status; + $data['refund_status'] = $refund_status; $data['refund_total'] = $order_service_package['payment_amount_total']; $data['refund_reason'] = $refund_reason; if ($refund_status == 3 && !empty($success_time)) { @@ -413,7 +413,7 @@ class OrderService extends BaseService throw new BusinessException("添加退款表失败"); } - // 修改问诊订单表状态 + // 修改订单表状态 $data = array(); $data['refund_status'] = $refund_status; @@ -716,7 +716,7 @@ class OrderService extends BaseService } // 检测问诊订单状态 - if (!in_array($order_service_package['order_service_status'], [2, 3])) { + if (!in_array($order_service_package['order_service_status'], [2, 3, 5])) { // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) throw new BusinessException("订单状态错误"); } From 1edc6ca606a0a146d93aead6f07185c133641f5a Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 15 Apr 2024 15:22:56 +0800 Subject: [PATCH 069/274] 5 --- extend/Wechat/WechatPay.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/extend/Wechat/WechatPay.php b/extend/Wechat/WechatPay.php index fee9ee2..18b276c 100644 --- a/extend/Wechat/WechatPay.php +++ b/extend/Wechat/WechatPay.php @@ -28,7 +28,7 @@ class WechatPay /** * @param string $user_type 用户类型(1:患者端 2:专家端 3:药师端) - * @param int $order_type 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:服务包订单) + * @param int $order_type 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:健康包订单 5:随访包订单) */ public function __construct(string $user_type,int $order_type) { @@ -76,6 +76,13 @@ class WechatPay $this->pay_config = config("we_chat.applets.pay.1659662936"); } + if ($order_type == 5){ + $this->pay_notify_url = $this->config['service_pay_notify_url']; + $this->refund_notify_url = $this->config['service_refund_notify_url']; + + $this->pay_config = config("we_chat.applets.pay.1659662936"); + } + $app_env = config('app_env','dev'); if ($app_env == "prod"){ $this->domain_name = env('DOMAIN_NAME_PROD','https://prod.hospital.applets.igandanyiyuan.com/'); From c45d283af6c2ce83e228c43f9791b074ceb9c59f Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 15 Apr 2024 16:10:36 +0800 Subject: [PATCH 070/274] 1 --- app/Services/OrderServicePackageService.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 12c5d3a..9af46b9 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -805,11 +805,7 @@ class OrderServicePackageService extends BaseService $data['user_id'] = $order_service_package['user_id']; $data['patient_id'] = $order_service_package['patient_id']; $data['doctor_id'] = $order_service_package['doctor_id']; - if ($order_service_package['order_service_type'] == 1){ - $data['order_type'] = 5; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) - }else{ - $data['order_type'] = 4; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) - } + $data['order_type'] = 1; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付) $data['pay_status'] = 2; // 1:待支付 $data['order_no'] = "I" . $generator->generate(); // 订单编号 From 1ae14f2f7a49bcdc32ed26fd9d3f8a064e030681 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 15 Apr 2024 16:14:11 +0800 Subject: [PATCH 071/274] 2 --- app/Services/OrderService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index d9f88bb..d7b72b1 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -550,7 +550,7 @@ class OrderService extends BaseService // 修改退款订单 $data = array(); - $data['detection_refund_status'] = $refund_status; + $data['refund_status'] = $refund_status; $data['success_time'] = $success_time; $params = array(); From a576efe542c4f02237cc62cb6847e4eae7aa9f48 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 15 Apr 2024 16:20:44 +0800 Subject: [PATCH 072/274] 1111 --- app/Controller/OrderServicePackageController.php | 3 --- app/Services/OrderServicePackageService.php | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/app/Controller/OrderServicePackageController.php b/app/Controller/OrderServicePackageController.php index 15f3712..cdad73e 100644 --- a/app/Controller/OrderServicePackageController.php +++ b/app/Controller/OrderServicePackageController.php @@ -54,9 +54,6 @@ class OrderServicePackageController extends AbstractController */ public function addServiceInquiryOrder(): ResponseInterface { - $request = $this->container->get(OrderServicePackageRequest::class); - $request->scene('addServiceInquiryOrder')->validateResolved(); - $OrderServicePackageService = new OrderServicePackageService(); $data = $OrderServicePackageService->addServiceInquiryOrder(); return $this->response->json($data); diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 9af46b9..c3c7625 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -659,7 +659,7 @@ class OrderServicePackageService extends BaseService public function addServiceInquiryOrder(): array { $user_info = $this->request->getAttribute("userInfo") ?? []; - $order_no = $this->request->input("order_no"); + $order_no = $this->request->route("order_no"); try { // 检测患者是否购买服务包 @@ -1039,7 +1039,7 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); } - return success(); + return success($order_inquiry['order_inquiry_id']); } /** From c75409c45186dc8f5d90fc89fa9536e3e628cbec Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 15 Apr 2024 16:21:47 +0800 Subject: [PATCH 073/274] 4 --- app/Services/OrderServicePackageService.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index c3c7625..9a30932 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1039,7 +1039,10 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); } - return success($order_inquiry['order_inquiry_id']); + $result = array(); + $result['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $result['order_no'] = $order['order_no']; + return success($result); } /** From 57c7e5635cf28c0351ed72325a61ebaf1183c84d Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 15 Apr 2024 16:26:17 +0800 Subject: [PATCH 074/274] =?UTF-8?q?=E5=8F=96=E6=B6=88=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E9=A6=96=E5=8D=95=E8=AE=A2=E5=8D=95=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index e0f469e..ec63fd0 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -2488,6 +2488,22 @@ class PatientOrderService extends BaseService return $result; } + // 获取问诊订单数据-此处只会存在一个 + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); + if (!empty($order_service_package_inquiry)){ + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $order_service_package['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (!empty($user_doctor)) { + // 推送医生-患者取消问诊 + $MessagePush = new MessagePush($user_doctor['user_id'], $order_service_package_inquiry['order_inquiry_id']); + $MessagePush->patientCancelInquiryToDoctor(); + } + } + break; default: // 错误不处理 From 7a2a84cc39e781550797fd87afe6ebe9cf035bbf Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 15 Apr 2024 16:35:28 +0800 Subject: [PATCH 075/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderService.php | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index d7b72b1..9c7b220 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -147,16 +147,16 @@ class OrderService extends BaseService throw new BusinessException("订单支付状态错误"); } - // 取消订单 - $order_data = array(); - $order_data['cancel_status'] = 1; - $order_data['cancel_time'] = date("Y-m-d H:i:s", time()); - $order_data['cancel_remarks'] = "医生未接诊"; - $order_data['updated_at'] = date("Y-m-d H:i:s", time()); - - $params = array(); - $params['order_id'] = $order['order_id']; - Order::edit($params, $order_data); +// // 取消订单 +// $order_data = array(); +// $order_data['cancel_status'] = 1; +// $order_data['cancel_time'] = date("Y-m-d H:i:s", time()); +// $order_data['cancel_remarks'] = "医生未接诊"; +// $order_data['updated_at'] = date("Y-m-d H:i:s", time()); +// +// $params = array(); +// $params['order_id'] = $order['order_id']; +// Order::edit($params, $order_data); // 处理对应订单 if ($order['order_type'] == 1) { @@ -293,7 +293,6 @@ class OrderService extends BaseService $data['inquiry_refund_status'] = $refund_status; $data['refund_total'] = $order_inquiry['payment_amount_total']; $data['refund_reason'] = $refund_reason; - if ($refund_status == 3 && !empty($success_time)) { $data['success_time'] = date("Y-m-d H:i:s", strtotime($success_time)); // 退款成功时间 } @@ -395,7 +394,7 @@ class OrderService extends BaseService throw new BusinessException("订单数据为空"); } - // 新增退款表 + // 新增服务包退款表 $data = array(); $data['patient_id'] = $order['patient_id']; $data['order_service_id'] = $order_service_package['order_service_id']; From 4ea1b5d41a627b25abd3028a2ff9fb9322710c8f Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 15 Apr 2024 16:48:33 +0800 Subject: [PATCH 076/274] =?UTF-8?q?=E5=8C=BB=E7=94=9F=E6=8E=A5=E8=AF=8A?= =?UTF-8?q?=EF=BC=8C=E6=97=B6=E9=97=B4=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/UserDoctorService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index a981e4f..cf4fa19 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -1888,7 +1888,7 @@ class UserDoctorService extends BaseService $start_time = date('Y-m-d H:i:s',time()); // 结束服务时间 - $finish_time = date('Y-m-d H:i:s', strtotime('+90 days', $start_time)); + $finish_time = date('Y-m-d H:i:s', strtotime('+90 days', strtotime($start_time))); // 修改服务包 $data = array(); From e0848b42cfca03c9fc3dffacf453018cf2a3b210 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 16 Apr 2024 09:39:07 +0800 Subject: [PATCH 077/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 87 ++++++++++----------- 1 file changed, 42 insertions(+), 45 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 9a30932..a30ccf2 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -169,30 +169,11 @@ class OrderServicePackageService extends BaseService } } - // 处理问诊次数 + // 处理当月问诊次数 // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 if ($order_service_package_detail['monthly_frequency'] != 0) { - $month_inquiry_count = 0; // 当前所属月问诊次数 - - // 获取当月问诊次数 - // 获取开启服务日期和今日的相差天数 - $diff = abs(time() - strtotime($order_service_package['start_time'])); - $diff_days = ceil($diff / (60 * 60 * 24)); // 转换为天数 - - // 获取当前月次 - $month_time = ceil($diff_days / 30); - - $days = (int)$month_time * 30; - - // 获取开始日期 - $end_date = date('Y-m-d 23:59:59', strtotime($order_service_package['start_time'] . " +$days days")); - $start_date = date('Y-m-d 00:00:00', strtotime($end_date . "-30 days")); - - $InquiryService = new InquiryService(); - $order_inquiry = $InquiryService->getPatientServiceInquiry($service_type, $user_info['client_user_id'], $doctor_id, $start_date, $end_date); - if (!empty($order_inquiry)) { - $month_inquiry_count = count($order_inquiry); - } + // 获取服务包当月问诊次数 + $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['start_time'],$service_type,$user_info['client_user_id'], $doctor_id); if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']) { // 超出当月问诊次数 @@ -713,27 +694,8 @@ class OrderServicePackageService extends BaseService // 检测问诊次数 // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 if ($order_service_package_detail['monthly_frequency'] != 0) { - $month_inquiry_count = 0; // 当前所属月问诊次数 - - // 获取当月问诊次数 - // 获取开启服务日期和今日的相差天数 - $diff = abs(time() - strtotime($order_service_package['start_time'])); - $diff_days = ceil($diff / (60 * 60 * 24)); // 转换为天数 - - // 获取当前月次 - $month_time = ceil($diff_days / 30); - - $days = (int)$month_time * 30; - - // 获取开始日期 - $end_date = date('Y-m-d 23:59:59', strtotime($order_service_package['start_time'] . " +$days days")); - $start_date = date('Y-m-d 00:00:00', strtotime($end_date . "-30 days")); - - $InquiryService = new InquiryService(); - $order_inquiry = $InquiryService->getPatientServiceInquiry($order_service_package['order_service_type'], $user_info['client_user_id'], $order_service_package['doctor_id'], $start_date, $end_date); - if (!empty($order_inquiry)) { - $month_inquiry_count = count($order_inquiry); - } + // 获取服务包当月问诊次数 + $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['start_time'],$order_service_package['order_service_type'],$user_info['client_user_id'], $order_service_package['doctor_id']); if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']) { return fail(HttpEnumCode::HTTP_ERROR, "超出服务包所包含的当月问诊次数"); @@ -1040,8 +1002,8 @@ class OrderServicePackageService extends BaseService } $result = array(); - $result['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $result['order_no'] = $order['order_no']; + $result['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $result['order_no'] = (string)$order['order_no']; return success($result); } @@ -1124,4 +1086,39 @@ class OrderServicePackageService extends BaseService return $result; } + + /** + * 获取服务包当月问诊次数 + * @param string $start_time + * @param string|int $service_type + * @param string|int $user_id + * @param string|int $doctor_id + * @return int + */ + public function getCurrentMonthInquiryCount(string $start_time,string|int $service_type,string|int $user_id,string|int $doctor_id): int + { + $month_inquiry_count = 0; // 当前所属月问诊次数 + + // 获取当月问诊次数 + // 获取开启服务日期和今日的相差天数 + $diff = abs(time() - strtotime($start_time)); + $diff_days = ceil($diff / (60 * 60 * 24)); // 转换为天数 + + // 获取当前月次 + $month_time = ceil($diff_days / 30); + + $days = (int)$month_time * 30; + + // 获取开始日期 + $end_date = date('Y-m-d 23:59:59', strtotime($start_time . " +$days days")); + $start_date = date('Y-m-d 00:00:00', strtotime($end_date . "-30 days")); + + $InquiryService = new InquiryService(); + $order_inquiry = $InquiryService->getPatientServiceInquiry($service_type, $user_id, $doctor_id, $start_date, $end_date); + if (!empty($order_inquiry)) { + $month_inquiry_count = count($order_inquiry); + } + + return $month_inquiry_count; + } } \ No newline at end of file From e4ec3e8fbd56fb4b7c6e090ba73c4557b58c87a5 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 16 Apr 2024 09:49:57 +0800 Subject: [PATCH 078/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=20=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E6=9D=83=E7=9B=8A=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 67 +++++++++++++++++++++------- 1 file changed, 52 insertions(+), 15 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index ec63fd0..217b0d4 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -2783,11 +2783,19 @@ class PatientOrderService extends BaseService $order_no = $this->request->route('order_no'); // 获取订单数据 + $fields = [ + "order_service_id", + "start_time", + "finish_time", + "order_service_type", + "doctor_id", + ]; + $params = array(); $params['patient_id'] = $user_info['client_user_id']; $params['order_service_no'] = $order_no; $params['is_delete'] = 0; - $order_service_package = OrderServicePackage::getOne($params); + $order_service_package = OrderServicePackage::getOne($params,$fields); if (empty($order_service_package)) { return fail(HttpEnumCode::HTTP_ERROR,"非法订单"); } @@ -2802,12 +2810,28 @@ class PatientOrderService extends BaseService // 定义返回数据 $result = array(); + $result['order_service_package'] = $order_service_package->toArray(); // 订单详情数据 $result['order_service_package_detail'] = $order_service_package_detail->toArray(); // 订单详情数据 $result['order_service_package_product'] = []; // 健康包商品数据 $result['order_service_package_coupon'] = []; // 健康包关联优惠卷数据 $result['order_inquiry'] = []; // 健康包问诊订单数据 $result['order_product'] = []; // 健康包药品订单数据 + // 获取服务包当月问诊次数 + $OrderServicePackageService = new OrderServicePackageService(); + $result['order_service_package']['month_inquiry_count'] = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'],$order_service_package['order_service_type'],$user_info['client_user_id'], $order_service_package['doctor_id']); + + // 获取问诊订单数据 + if (in_array($order_service_package['order_service_status'],[2,3,4,5])){ + // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getList($params); + if (!empty($order_service_package_inquiry)){ + $result['order_inquiry'] = $order_service_package_inquiry->toArray(); + } + } + // 健康包数据 if ($order_service_package['order_service_type'] == 1){ // 健康包商品数据 @@ -2828,17 +2852,6 @@ class PatientOrderService extends BaseService } } - // 健康包问诊订单数据 - if (in_array($order_service_package['order_service_status'],[2,3,4,5])){ - // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) - $params = array(); - $params['order_service_id'] = $order_service_package['order_service_id']; - $order_service_package_inquiry = OrderServicePackageInquiry::getList($params); - if (!empty($order_service_package_inquiry)){ - $result['order_inquiry'] = $order_service_package_inquiry->toArray(); - } - } - // 健康包药品订单数据-周期内所有药品订单 if (in_array($order_service_package['order_service_status'],[3,4,5])){ $params = array(); @@ -2849,11 +2862,35 @@ class PatientOrderService extends BaseService $created_at = [$order_service_package['start_time'],$order_service_package['finish_time']]; $order_product_status_params = [2,3,4]; - $order_product = OrderProduct::getProductWithCreateTime($params,$created_at,$order_product_status_params); - if (!empty($order_product)){ - $result['order_product'] = $order_product->toArray(); + $order_products = OrderProduct::getProductWithCreateTime($params,$created_at,$order_product_status_params); + if (!empty($order_products)){ + $result['order_product'] = $order_products->toArray(); } + + // 已使用商品数量 + $used_quantity = 0; + foreach ($order_products as $order_product){ + // 获取详情item + $params = array(); + $params['order_product_id'] = $order_product['order_product_id']; + $order_product_items = OrderProductItem::getList($params); + if (empty($order_product_items)){ + return fail(HttpEnumCode::SERVER_ERROR); + } + + foreach ($order_product_items as $order_product_item){ + $used_quantity = $order_product_item["amount"]; + } + } + + if ($used_quantity > 30){ + $used_quantity = 30; + } + + $result['order_service_package_product']['used_quantity'] = $used_quantity; } + + // 获取药品剩余数量 } return success($result); From 11b28c7ab0486dbed44af1ebc22d201326dcd8f7 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 16 Apr 2024 11:10:42 +0800 Subject: [PATCH 079/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=20=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2=E5=8D=95=E7=97=85?= =?UTF-8?q?=E4=BE=8B=E8=AF=A6=E6=83=85-=E5=9F=BA=E7=A1=80=E3=80=81?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=97=85=E4=BE=8B=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/PatientCaseController.php | 22 ++++++ app/Services/PatientCaseService.php | 89 ++++++++++++++++++++++++ config/routes.php | 6 ++ 3 files changed, 117 insertions(+) diff --git a/app/Controller/PatientCaseController.php b/app/Controller/PatientCaseController.php index 9d55f5c..769436f 100644 --- a/app/Controller/PatientCaseController.php +++ b/app/Controller/PatientCaseController.php @@ -93,4 +93,26 @@ class PatientCaseController extends AbstractController $data = $PatientCaseService->sendCaseUnfilledFieldsToDoctor(); return $this->response->json($data); } + + /** + * 获取服务包订单病例详情-基础 + * @return ResponseInterface + */ + public function getPatientFamilyServiceCaseSimple(): ResponseInterface + { + $PatientCaseService = new PatientCaseService(); + $data = $PatientCaseService->getPatientFamilyServiceCaseSimple(); + return $this->response->json($data); + } + + /** + * 获取服务包订单病例详情 + * @return ResponseInterface + */ + public function getPatientFamilyServiceCase(): ResponseInterface + { + $PatientCaseService = new PatientCaseService(); + $data = $PatientCaseService->getPatientFamilyServiceCase(); + return $this->response->json($data); + } } \ No newline at end of file diff --git a/app/Services/PatientCaseService.php b/app/Services/PatientCaseService.php index d666f6f..a18c3f7 100644 --- a/app/Services/PatientCaseService.php +++ b/app/Services/PatientCaseService.php @@ -7,12 +7,15 @@ use App\Model\BasicJob; use App\Model\BasicNation; use App\Model\DetectionProject; use App\Model\InquiryCaseProduct; +use App\Model\Order; use App\Model\OrderDetection; use App\Model\OrderInquiry; use App\Model\OrderInquiryCase; use App\Model\OrderPrescription; use App\Model\OrderPrescriptionIcd; use App\Model\OrderPrescriptionProduct; +use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageCase; use App\Model\PatientFamily; use App\Model\PatientFamilyHealth; use App\Model\PatientFamilyPersonal; @@ -630,4 +633,90 @@ class PatientCaseService extends BaseService return success(); } + + /** + * 获取服务包订单病例详情-基础 + * @return array + */ + public function getPatientFamilyServiceCaseSimple(): array + { + $order_no = $this->request->route('order_no'); + + // 获取订单数据 + $params = array(); + $params['order_no'] = $order_no; + $order = Order::getOne($params); + if (empty($order)) { + return fail(); + } + + $params = array(); + $params['order_no'] = $order_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + return fail(); + } + + $params = array(); + $params['order_id'] = $order['order_id']; + $order_service_package_case = OrderServicePackageCase::getOne($params); + if (empty($order_service_package_case)) { + return fail(); + } + + $result = array(); + $result['patient_name'] = $order_service_package['patient_name']; + $result['patient_sex'] = $order_service_package['patient_sex']; + $result['patient_age'] = $order_service_package['patient_age']; + $result['disease_desc'] = $order_service_package_case['disease_desc']; + $result['created_at'] = $order_service_package['created_at']; // 创建时间 + + return success($result); + } + + /** + * 获取服务包订单病例详情 + * @return array + */ + public function getPatientFamilyServiceCase(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + $order_no = $this->request->route('order_no'); + + // 获取订单数据 + $params = array(); + $params['order_no'] = $order_no; + $order = Order::getOne($params); + if (empty($order)) { + return fail(); + } + + $params = array(); + $params['order_no'] = $order_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + return fail(); + } + + $params = array(); + $params['order_id'] = $order['order_id']; + $order_service_package_case = OrderServicePackageCase::getOne($params); + if (empty($order_service_package_case)) { + return fail(); + } + + $order_service_package_case = $order_service_package_case->toArray(); + + // 复诊凭证 + if (!empty($order_service_package_case['diagnose_images'])) { + $diagnose_images = explode(',', $order_service_package_case['diagnose_images']); + foreach ($diagnose_images as &$item) { + $item = addAliyunOssWebsite($item); + } + + $order_service_package_case['diagnose_images'] = $diagnose_images; + } + + return success($order_service_package_case); + } } \ No newline at end of file diff --git a/config/routes.php b/config/routes.php index e8d51dd..ae59f57 100644 --- a/config/routes.php +++ b/config/routes.php @@ -868,6 +868,12 @@ Router::addGroup('/case', function () { // 获取问诊订单病例详情 Router::get('/inquiry', [PatientCaseController::class, 'getPatientFamilyInquiryCase']); + // 获取服务包订单病例详情-基础 + Router::get('/service/simple/{order_no}', [PatientCaseController::class, 'getPatientFamilyServiceCaseSimple']); + + // 获取服务包订单病例详情 + Router::get('/service/{order_no}', [PatientCaseController::class, 'getPatientFamilyServiceCase']); + // 病例未填字段 Router::addGroup('/fields', function () { // 获取问诊订单病例缺少字段 From 70ef1ae11745cbb11dc6488c385d67c514287a74 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 16 Apr 2024 14:42:14 +0800 Subject: [PATCH 080/274] =?UTF-8?q?=E5=8F=91=E6=94=BE=E8=B4=AD=E4=B9=B0?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E7=9A=84=E5=85=B3=E8=81=94=E4=BC=98?= =?UTF-8?q?=E6=83=A0=E5=8D=B7=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/UserCoupon.php | 2 +- app/Services/CouponService.php | 81 ++++++++++++++++++------------ app/Services/UserCouponService.php | 11 ++-- app/Services/UserDoctorService.php | 2 +- 4 files changed, 59 insertions(+), 37 deletions(-) diff --git a/app/Model/UserCoupon.php b/app/Model/UserCoupon.php index 7c1cb8d..b3a3b56 100644 --- a/app/Model/UserCoupon.php +++ b/app/Model/UserCoupon.php @@ -146,7 +146,7 @@ class UserCoupon extends Model ->whereIn("application_scope",[1,3,4,5]) ->where(function ($query) use ($coupon_product_datas) { foreach ($coupon_product_datas as $coupon_product_data){ - $query->orwhere("product_id","like",'%' . $coupon_product_data['product_id'] . '%'); + $query->orwhere("product_id","=",$coupon_product_data['product_id']); } }); }) diff --git a/app/Services/CouponService.php b/app/Services/CouponService.php index 22d7e69..d9a0d57 100644 --- a/app/Services/CouponService.php +++ b/app/Services/CouponService.php @@ -68,14 +68,16 @@ class CouponService extends BaseService } // 判断该优惠卷过期时间 - if ($coupon['valid_type'] == 1){ - // 绝对时效 - $valid_end_time = strtotime($coupon['valid_end_time']); + if (!empty($coupon['valid_type'])){ + if ($coupon['valid_type'] == 1){ + // 绝对时效 + $valid_end_time = strtotime($coupon['valid_end_time']); - $date = time() + 60 * 10; - if ($valid_end_time < $date){ - // 超出结束使用时间 - return true; + $date = time() + 60 * 10; + if ($valid_end_time < $date){ + // 超出结束使用时间 + return true; + } } } @@ -131,18 +133,20 @@ class CouponService extends BaseService } // 添加优惠卷过期队列 - $valid_end_time = strtotime($user_coupon->valid_end_time); + if (!empty($user_coupon['valid_start_time']) && !empty($user_coupon['valid_end_time'])){ + $valid_end_time = strtotime($user_coupon['valid_start_time']); - $data = array(); - $data['user_coupon_id'] = $user_coupon['user_coupon_id']; + $data = array(); + $data['user_coupon_id'] = $user_coupon['user_coupon_id']; - $time = $valid_end_time - time(); - $message = new UserCouponExpiredDelayDirectProducer($data); - $message->setDelayMs(1000 * $time); - $producer = $this->container->get(Producer::class); - $res = $producer->produce($message); - if (!$res) { - return false; + $time = $valid_end_time - time(); + $message = new UserCouponExpiredDelayDirectProducer($data); + $message->setDelayMs(1000 * $time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + return false; + } } }catch (\Throwable $e){ Log::getInstance("CouponService-GrantUserCoupon")->error($e->getMessage()); @@ -151,22 +155,24 @@ class CouponService extends BaseService try { // 添加优惠卷即将过期提醒队列 - $time = floor($time * 0.75); + if (!empty($user_coupon['valid_start_time']) && !empty($user_coupon['valid_end_time']) && isset($time)){ + $time = floor($time * 0.75); - // 时间低于5小时,不进行过期提醒 - if ($time > 60 * 60 * 5){ - $message = new UserCouponExpiredNoticeDelayDirectProducer($data); - $message->setDelayMs(1000 * $time); - $producer = $this->container->get(Producer::class); - $res = $producer->produce($message); - if (!$res) { - Log::getInstance("CouponService-GrantUserCoupon")->error("添加优惠卷即将过期提醒队列"); + // 时间低于5小时,不进行过期提醒 + if ($time > 60 * 60 * 5){ + $message = new UserCouponExpiredNoticeDelayDirectProducer($data); + $message->setDelayMs(1000 * $time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + Log::getInstance("CouponService-GrantUserCoupon")->error("添加优惠卷即将过期提醒队列"); + } } - } - // 通知-患者-优惠卷发放 - $MessagePush = new MessagePush($user_id); - $MessagePush->patientDistributeCoupon($coupon['coupon_name']); + // 通知-患者-优惠卷发放 + $MessagePush = new MessagePush($user_id); + $MessagePush->patientDistributeCoupon($coupon['coupon_name']); + } }catch (\Throwable $e){ Log::getInstance("CouponService-GrantUserCoupon")->error($e->getMessage()); } @@ -202,9 +208,11 @@ class CouponService extends BaseService /** * 发放购买服务包的关联优惠卷 * @param string $user_id 用户id + * @param string $start_time 开始使用时间 + * @param string $finish_time 结束有效时间 * @return bool */ - public function GrantBuyOrderServicePackageCoupon(string $user_id): bool + public function GrantBuyOrderServicePackageCoupon(string $user_id,string $start_time,string $finish_time): bool { // 获取购买服务包的用户可领取的优惠卷列表 $coupon = Coupon::getOrderServicePackageCouponList(); @@ -219,6 +227,17 @@ class CouponService extends BaseService // 发放失败 return false; } + + // 增加优惠卷有效期 + $params = array(); + $params['user_id'] = $user_id; + $params['coupon_id'] = $value['coupon_id']; + $params['user_coupon_status'] = 0; + + $data = array(); + $data['valid_start_time'] = $start_time; + $data['valid_end_time'] = $finish_time; + UserCoupon::edit($params,$data); } return true; diff --git a/app/Services/UserCouponService.php b/app/Services/UserCouponService.php index 3f6abe4..dfb77a0 100644 --- a/app/Services/UserCouponService.php +++ b/app/Services/UserCouponService.php @@ -135,6 +135,7 @@ class UserCouponService extends BaseService // 处理优惠卷数量限制问题 foreach ($coupons as $key => $coupon) { + // 处理数量优惠卷 if ($coupon['coupon_type'] == 3 && !empty($coupon['product_id'])){ // 数量是否足够标识字段 $quantity_quantity = 0; @@ -161,15 +162,17 @@ class UserCouponService extends BaseService } } - // 处理满减金额问题 - if ($coupon['coupon_type'] == 2 && !empty($coupon['product_id'])){ + // 处理满减金额优惠卷 + if ($coupon['coupon_type'] == 2){ // 可共用一个优惠卷的商品金额问题 $product_price = 0; foreach ($coupon_product_datas as $coupon_product_data) { // 如该优惠卷不包含此商品,跳过 - if (!str_contains($coupon['product_id'], $coupon_product_data['product_id'])) { - continue; + if (!empty($coupon['product_id'])){ + if (!str_contains($coupon['product_id'], $coupon_product_data['product_id'])) { + continue; + } } $product_price = bcadd($product_price, diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index cf4fa19..896d2a0 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -1911,7 +1911,7 @@ class UserDoctorService extends BaseService if (count($order_service_package_inquiry) <= 1){ // 发放优惠卷 $CouponService = new CouponService(); - $res = $CouponService->GrantBuyOrderServicePackageCoupon($order_inquiry['user_id']); + $res = $CouponService->GrantBuyOrderServicePackageCoupon($order_inquiry['user_id'],$start_time,$finish_time); if (!$res) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "接诊失败"); From bd5c1a1cd3bc582c17aa75b5380c2eafa31b56dd Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 16 Apr 2024 14:56:14 +0800 Subject: [PATCH 081/274] =?UTF-8?q?=E5=B0=81=E8=A3=85=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E5=BD=93=E5=89=8D=E6=9C=88=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=8C=BA=E9=97=B4=E6=96=B9=E6=B3=95=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E8=8E=B7=E5=8F=96=E6=82=A3=E8=80=85=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E8=AE=A2=E5=8D=95=E6=9C=8D=E5=8A=A1=E6=9D=83=E7=9B=8A?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E8=BF=94=E5=9B=9E=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 32 +++++++++++++++++++++ app/Services/PatientOrderService.php | 5 ++++ 2 files changed, 37 insertions(+) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index a30ccf2..2f3152a 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1121,4 +1121,36 @@ class OrderServicePackageService extends BaseService return $month_inquiry_count; } + + /** + * 获取服务包当前月时间区间 + * @param string $start_time + * @return array + */ + public function getCurrentMonthDate(string $start_time): array + { + $current_month_start_date = 0; // 当前所属月开始时间 + $current_month_finish_date = 0; // 当前所属月结束时间 + + // 获取开启服务日期和今日的相差天数 + $diff = abs(time() - strtotime($start_time)); + $diff_days = ceil($diff / (60 * 60 * 24)); // 转换为天数 + + // 获取当前月次 + $month_time = ceil($diff_days / 30); + + $days = (int)$month_time * 30; + + // 当前所属月开始时间 + $current_month_finish_date = date('Y-m-d 23:59:59', strtotime($start_time . " +$days days")); + + // 当前所属月结束时间 + $current_month_start_date = date('Y-m-d 00:00:00', strtotime($current_month_finish_date . "-30 days")); + + $result = array(); + $result['current_month_start_date'] = $current_month_start_date; + $result['current_month_finish_date'] = $current_month_finish_date; + + return $result; + } } \ No newline at end of file diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 217b0d4..8a53bd5 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -2893,6 +2893,11 @@ class PatientOrderService extends BaseService // 获取药品剩余数量 } + // 处理当月时间 + $current_month_date = $OrderServicePackageService->getCurrentMonthDate($order_service_package['start_time']); + $result['order_service_package']['current_month_start_date'] = $current_month_date['current_month_start_date']; + $result['order_service_package']['current_month_finish_date'] = $current_month_date['current_month_finish_date']; + return success($result); } From e8c33399bf57714066f5d8b3cae0d3e1f562dfb7 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 16 Apr 2024 15:00:10 +0800 Subject: [PATCH 082/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=BA=E5=B9=B4?= =?UTF-8?q?=E6=9C=88=E6=97=A5=E6=97=B6=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 2f3152a..5beb30a 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1110,8 +1110,8 @@ class OrderServicePackageService extends BaseService $days = (int)$month_time * 30; // 获取开始日期 - $end_date = date('Y-m-d 23:59:59', strtotime($start_time . " +$days days")); - $start_date = date('Y-m-d 00:00:00', strtotime($end_date . "-30 days")); + $end_date = date('Y-m-d H:i:s', strtotime($start_time . " +$days days")); + $start_date = date('Y-m-d H:i:s', strtotime($end_date . "-30 days")); $InquiryService = new InquiryService(); $order_inquiry = $InquiryService->getPatientServiceInquiry($service_type, $user_id, $doctor_id, $start_date, $end_date); @@ -1129,9 +1129,6 @@ class OrderServicePackageService extends BaseService */ public function getCurrentMonthDate(string $start_time): array { - $current_month_start_date = 0; // 当前所属月开始时间 - $current_month_finish_date = 0; // 当前所属月结束时间 - // 获取开启服务日期和今日的相差天数 $diff = abs(time() - strtotime($start_time)); $diff_days = ceil($diff / (60 * 60 * 24)); // 转换为天数 @@ -1142,10 +1139,10 @@ class OrderServicePackageService extends BaseService $days = (int)$month_time * 30; // 当前所属月开始时间 - $current_month_finish_date = date('Y-m-d 23:59:59', strtotime($start_time . " +$days days")); + $current_month_finish_date = date('Y年m月d日 H时i分', strtotime($start_time . " +$days days")); // 当前所属月结束时间 - $current_month_start_date = date('Y-m-d 00:00:00', strtotime($current_month_finish_date . "-30 days")); + $current_month_start_date = date('Y年m月d日 H时i分', strtotime($current_month_finish_date . "-30 days")); $result = array(); $result['current_month_start_date'] = $current_month_start_date; From 020f61ac5771f212064ed989068c09abe9f10d91 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 16 Apr 2024 15:26:11 +0800 Subject: [PATCH 083/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=82=A3=E8=80=85=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=9D=83=E7=9B=8A=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 8a53bd5..e593006 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -2817,9 +2817,7 @@ class PatientOrderService extends BaseService $result['order_inquiry'] = []; // 健康包问诊订单数据 $result['order_product'] = []; // 健康包药品订单数据 - // 获取服务包当月问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - $result['order_service_package']['month_inquiry_count'] = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'],$order_service_package['order_service_type'],$user_info['client_user_id'], $order_service_package['doctor_id']); // 获取问诊订单数据 if (in_array($order_service_package['order_service_status'],[2,3,4,5])){ @@ -2832,6 +2830,19 @@ class PatientOrderService extends BaseService } } + if (in_array($order_service_package['order_service_status'],[3,4,5])){ + // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + if (!empty($order_service_package['start_time'])){ + // 当月问诊次数 + $result['order_service_package']['month_inquiry_count'] = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'],$order_service_package['order_service_type'],$user_info['client_user_id'], $order_service_package['doctor_id']); + + // 处理当月时间 + $current_month_date = $OrderServicePackageService->getCurrentMonthDate($order_service_package['start_time']); + $result['order_service_package']['current_month_start_date'] = $current_month_date['current_month_start_date']; + $result['order_service_package']['current_month_finish_date'] = $current_month_date['current_month_finish_date']; + } + } + // 健康包数据 if ($order_service_package['order_service_type'] == 1){ // 健康包商品数据 @@ -2893,11 +2904,6 @@ class PatientOrderService extends BaseService // 获取药品剩余数量 } - // 处理当月时间 - $current_month_date = $OrderServicePackageService->getCurrentMonthDate($order_service_package['start_time']); - $result['order_service_package']['current_month_start_date'] = $current_month_date['current_month_start_date']; - $result['order_service_package']['current_month_finish_date'] = $current_month_date['current_month_finish_date']; - return success($result); } From 1bbfd3e6d633eeb9a7180ab0f30ce2382d413d40 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 16 Apr 2024 15:35:28 +0800 Subject: [PATCH 084/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=82=A3=E8=80=85=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=9D=83=E7=9B=8A=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 6 +++--- app/Services/PatientOrderService.php | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 5beb30a..caad73e 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -172,7 +172,7 @@ class OrderServicePackageService extends BaseService // 处理当月问诊次数 // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 if ($order_service_package_detail['monthly_frequency'] != 0) { - // 获取服务包当月问诊次数 + // 获取服务包当月已问诊次数 $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['start_time'],$service_type,$user_info['client_user_id'], $doctor_id); if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']) { @@ -694,7 +694,7 @@ class OrderServicePackageService extends BaseService // 检测问诊次数 // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 if ($order_service_package_detail['monthly_frequency'] != 0) { - // 获取服务包当月问诊次数 + // 获取服务包当月已问诊次数 $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['start_time'],$order_service_package['order_service_type'],$user_info['client_user_id'], $order_service_package['doctor_id']); if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']) { @@ -1088,7 +1088,7 @@ class OrderServicePackageService extends BaseService } /** - * 获取服务包当月问诊次数 + * 获取服务包当月已问诊次数 * @param string $start_time * @param string|int $service_type * @param string|int $user_id diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index e593006..236a73e 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -2833,13 +2833,13 @@ class PatientOrderService extends BaseService if (in_array($order_service_package['order_service_status'],[3,4,5])){ // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) if (!empty($order_service_package['start_time'])){ - // 当月问诊次数 - $result['order_service_package']['month_inquiry_count'] = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'],$order_service_package['order_service_type'],$user_info['client_user_id'], $order_service_package['doctor_id']); - - // 处理当月时间 + // 当月时间 $current_month_date = $OrderServicePackageService->getCurrentMonthDate($order_service_package['start_time']); $result['order_service_package']['current_month_start_date'] = $current_month_date['current_month_start_date']; $result['order_service_package']['current_month_finish_date'] = $current_month_date['current_month_finish_date']; + + // 获取服务包当月已问诊次数 + $result['order_service_package']['month_inquiry_count'] = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'],$order_service_package['order_service_type'],$user_info['client_user_id'], $order_service_package['doctor_id']); } } From af63355685a612300530c46da69ead952c62a68d Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 16 Apr 2024 17:16:44 +0800 Subject: [PATCH 085/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=82=A3=E8=80=85=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=9D=83=E7=9B=8A=E8=AF=A6=E6=83=851?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 236a73e..51a6f2a 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -2789,6 +2789,10 @@ class PatientOrderService extends BaseService "finish_time", "order_service_type", "doctor_id", + "order_service_status", + "family_id", + "doctor_id", + "user_id", ]; $params = array(); @@ -2843,6 +2847,11 @@ class PatientOrderService extends BaseService } } + // 获取服务包当月已问诊次数 + if ($order_service_package['order_service_status'] == 2){ + $result['order_service_package']['month_inquiry_count'] = 1; + } + // 健康包数据 if ($order_service_package['order_service_type'] == 1){ // 健康包商品数据 From 62f86a1397a6d0939873d40e21c3b67470654b03 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 16 Apr 2024 17:19:50 +0800 Subject: [PATCH 086/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E5=BD=93=E5=89=8D=E6=9C=88=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=8C=BA=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index caad73e..4db976c 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1138,15 +1138,15 @@ class OrderServicePackageService extends BaseService $days = (int)$month_time * 30; - // 当前所属月开始时间 - $current_month_finish_date = date('Y年m月d日 H时i分', strtotime($start_time . " +$days days")); - // 当前所属月结束时间 - $current_month_start_date = date('Y年m月d日 H时i分', strtotime($current_month_finish_date . "-30 days")); + $current_month_finish_date = date('Y-m-d H:i:s', strtotime($start_time . " +$days days")); + + // 当前所属月开始时间 + $current_month_start_date = date('Y-m-d H:i:s', strtotime($current_month_finish_date . "-30 days")); $result = array(); - $result['current_month_start_date'] = $current_month_start_date; - $result['current_month_finish_date'] = $current_month_finish_date; + $result['current_month_start_date'] = date('Y年m月d日 H时i分', strtotime($current_month_start_date)); + $result['current_month_finish_date'] = date('Y年m月d日 H时i分', strtotime($current_month_finish_date)); return $result; } From 7ff94df4c5b3844252e45443b93d03f256250d87 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 16 Apr 2024 17:35:12 +0800 Subject: [PATCH 087/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=BF=AB=E7=BB=93=E6=9D=9F=E6=9C=8D=E5=8A=A1=E5=8C=85?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E8=87=B3=E6=9C=8D=E5=8A=A1=E5=8C=85=E7=BB=93?= =?UTF-8?q?=E6=9D=9F=E9=98=9F=E5=88=97=E5=91=BD=E4=BB=A4=E8=A1=8C=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AddServicePackageFinishQueueCommand.php | 109 ++++++++++++++++++ app/Command/GrantUserCouponCommand.php | 3 + app/Command/MoveOrderCommand.php | 2 +- .../editDoctorInquiryConfigCommand.php | 3 + app/Command/editDoctorQrCodeCommand.php | 3 + app/Model/OrderServicePackage.php | 26 ++++- 6 files changed, 141 insertions(+), 5 deletions(-) create mode 100644 app/Command/AddServicePackageFinishQueueCommand.php diff --git a/app/Command/AddServicePackageFinishQueueCommand.php b/app/Command/AddServicePackageFinishQueueCommand.php new file mode 100644 index 0000000..976f11e --- /dev/null +++ b/app/Command/AddServicePackageFinishQueueCommand.php @@ -0,0 +1,109 @@ +setDescription('添加快结束服务包订单至服务包结束队列'); + } + + public function handle(): void + { + $this->line('开始'); + + try { + // 获取需执行的订单 + $order_service_packages = $this->getExecOrder(); + if (empty($order_service_packages)){ + $this->line("结束,无订单可执行"); + return; + } + }catch (\Throwable $e){ + $this->line($e->getMessage()); + return; + } + + foreach ($order_service_packages as $order_service_package){ + Db::beginTransaction(); + try { + // 修改订单成功执行 + $this->putAddFinishStatus($order_service_package['order_service_id'],1); + + // 添加服务包订单完成延迟队列 + + Db::commit(); + }catch (\Throwable $e){ + // 修改订单执行失败 + Db::rollBack(); + $this->line($e->getMessage()); + $this->putAddFinishStatus($order_service_package['order_service_id'],2,$e->getMessage()); + } + } + + $this->line("全部结束"); + } + + /** + * 获取需执行的订单 + * @return array + */ + public function getExecOrder(): array + { + // 获取三天后结束时间 + $three_day_finish_time = date('Y-m-d H:i:s',strtotime('+3 days', time())); + $finish_time_params = [date('Y-m-d H:i:s',time()),$three_day_finish_time]; + + $params = array(); + $params['order_service_status'] = 3; // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + $params['pay_status'] = 2; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) + $params['refund_status'] = 0; // 商品订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + $params['add_finish_status'] = 0; // 添加完成订单延迟队列状态(0:未添加 1:已添加 2:添加失败) + + + $order_service_packages = OrderServicePackage::getInquiryWithFinishTime($params,$finish_time_params); + if (empty($order_service_packages)){ + return []; + } + + return $order_service_packages->toArray(); + } + + /** + * 修改订单状态 + * @param string $order_service_id + * @param int $add_finish_status + * @param string $add_finish_fail_reason + * @return void + */ + public function putAddFinishStatus(string $order_service_id,int $add_finish_status,string $add_finish_fail_reason = ""): void + { + $params = array(); + $params['order_service_id'] = $order_service_id; + + $data = array(); + $data['add_finish_status'] = $add_finish_status; + $data['add_finish_time'] = date('Y-m-d H:i:s',time()); + if (!empty($add_finish_fail_reason)){ + $data['add_finish_fail_reason'] = $add_finish_fail_reason; + } + + OrderServicePackage::edit($params,$data); + } +} diff --git a/app/Command/GrantUserCouponCommand.php b/app/Command/GrantUserCouponCommand.php index 84ff3e9..040e0ec 100644 --- a/app/Command/GrantUserCouponCommand.php +++ b/app/Command/GrantUserCouponCommand.php @@ -13,6 +13,9 @@ use Hyperf\Command\Annotation\Command; use Hyperf\DbConnection\Db; use Psr\Container\ContainerInterface; +/** + * 发放优惠卷 + */ #[Command] class GrantUserCouponCommand extends HyperfCommand { diff --git a/app/Command/MoveOrderCommand.php b/app/Command/MoveOrderCommand.php index 6bddb37..1c25ec8 100644 --- a/app/Command/MoveOrderCommand.php +++ b/app/Command/MoveOrderCommand.php @@ -21,7 +21,7 @@ use Hyperf\DbConnection\Db; use Psr\Container\ContainerInterface; /** - * 迁移订单 + * 迁移订单 v1.3使用 */ #[Command] class MoveOrderCommand extends HyperfCommand diff --git a/app/Command/editDoctorInquiryConfigCommand.php b/app/Command/editDoctorInquiryConfigCommand.php index f116e23..365a053 100644 --- a/app/Command/editDoctorInquiryConfigCommand.php +++ b/app/Command/editDoctorInquiryConfigCommand.php @@ -12,6 +12,9 @@ use Hyperf\Command\Annotation\Command; use Hyperf\DbConnection\Db; use Psr\Container\ContainerInterface; +/** + * 废弃 + */ #[Command] class editDoctorInquiryConfigCommand extends HyperfCommand { diff --git a/app/Command/editDoctorQrCodeCommand.php b/app/Command/editDoctorQrCodeCommand.php index 14740d2..e1feb2c 100644 --- a/app/Command/editDoctorQrCodeCommand.php +++ b/app/Command/editDoctorQrCodeCommand.php @@ -11,6 +11,9 @@ use Hyperf\Command\Command as HyperfCommand; use Hyperf\Command\Annotation\Command; use Psr\Container\ContainerInterface; +/** + * 废弃 + */ #[Command] class editDoctorQrCodeCommand extends HyperfCommand { diff --git a/app/Model/OrderServicePackage.php b/app/Model/OrderServicePackage.php index 8af19f9..98a99f1 100644 --- a/app/Model/OrderServicePackage.php +++ b/app/Model/OrderServicePackage.php @@ -34,12 +34,16 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property string $finish_time 结束服务时间 * @property string $cancel_time 订单取消时间 * @property string $cancel_remarks 取消订单备注 + * @property int $add_finish_status 添加完成订单延迟队列状态(0:未添加 1:已添加 2:添加失败) + * @property string $add_finish_time 添加完成订单延迟队列时间 + * @property string $add_finish_fail_reason 添加完成订单延迟队列失败原因 * @property string $patient_name 患者姓名-就诊人 * @property string $patient_name_mask 患者姓名-就诊人(掩码) * @property int $patient_sex 患者性别-就诊人(0:未知 1:男 2:女) * @property int $patient_age 患者年龄-就诊人 - * @property Carbon $created_at 创建时间 - * @property Carbon $updated_at 修改时间 + * @property \Carbon\Carbon $created_at 创建时间 + * @property \Carbon\Carbon $updated_at 修改时间 + * @property-read OrderServicePackageCase|null $OrderServicePackageCase */ class OrderServicePackage extends Model { @@ -53,7 +57,7 @@ class OrderServicePackage extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['order_service_id', 'order_id', 'user_id', 'patient_id', 'doctor_id', 'family_id', 'order_service_type', 'order_service_status', 'is_delete', 'refund_status', 'pay_channel', 'pay_status', 'order_service_no', 'escrow_trade_no', 'amount_total', 'coupon_amount_total', 'payment_amount_total', 'pay_time', 'start_time', 'finish_time', 'cancel_time', 'cancel_remarks', 'patient_name', 'patient_name_mask', 'patient_sex', 'patient_age', 'created_at', 'updated_at']; + protected array $fillable = ['order_service_id', 'order_id', 'user_id', 'patient_id', 'doctor_id', 'family_id', 'order_service_type', 'order_service_status', 'is_delete', 'refund_status', 'pay_channel', 'pay_status', 'order_service_no', 'escrow_trade_no', 'amount_total', 'coupon_amount_total', 'payment_amount_total', 'pay_time', 'start_time', 'finish_time', 'cancel_time', 'cancel_remarks', 'add_finish_status', 'add_finish_time', 'add_finish_fail_reason', 'patient_name', 'patient_name_mask', 'patient_sex', 'patient_age', 'created_at', 'updated_at']; protected string $primaryKey = "order_service_id"; @@ -136,7 +140,7 @@ class OrderServicePackage extends Model /** * 获取服务包订单-分页 * @param array $params - * @param array $order_service_status + * @param array $order_service_status_params * @param array $fields * @param int|null $page * @param int|null $per_page @@ -163,4 +167,18 @@ class OrderServicePackage extends Model return $data; } + + /** + * 获取某一时间段服务包订单-结束时间 + * @param array $params + * @param array $finish_time_params 接诊时间区间 + * @return Collection|array + */ + public static function getInquiryWithFinishTime(array $params, array $finish_time_params): Collection|array + { + return self::where($params) + ->whereBetween('finish_time', $finish_time_params) + ->orderBy('finish_time') + ->get(); + } } From 8d74dc33fbd6b3a88cef342d25e6f57d7edb706c Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 16 Apr 2024 17:37:27 +0800 Subject: [PATCH 088/274] 1 --- app/Services/PatientCaseService.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Services/PatientCaseService.php b/app/Services/PatientCaseService.php index a18c3f7..0a1e6e6 100644 --- a/app/Services/PatientCaseService.php +++ b/app/Services/PatientCaseService.php @@ -651,7 +651,7 @@ class PatientCaseService extends BaseService } $params = array(); - $params['order_no'] = $order_no; + $params['order_service_no'] = $order_no; $order_service_package = OrderServicePackage::getOne($params); if (empty($order_service_package)) { return fail(); @@ -692,7 +692,7 @@ class PatientCaseService extends BaseService } $params = array(); - $params['order_no'] = $order_no; + $params['order_service_no'] = $order_no; $order_service_package = OrderServicePackage::getOne($params); if (empty($order_service_package)) { return fail(); From 245397dfa79730cc2f9b61b9c51757c27685ec6a Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 16 Apr 2024 17:57:24 +0800 Subject: [PATCH 089/274] =?UTF-8?q?=E5=9B=9E=E9=80=80=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E5=8D=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/CouponService.php | 65 +++++++++++------------------- app/Services/UserDoctorService.php | 2 +- 2 files changed, 25 insertions(+), 42 deletions(-) diff --git a/app/Services/CouponService.php b/app/Services/CouponService.php index d9a0d57..cc31006 100644 --- a/app/Services/CouponService.php +++ b/app/Services/CouponService.php @@ -133,20 +133,18 @@ class CouponService extends BaseService } // 添加优惠卷过期队列 - if (!empty($user_coupon['valid_start_time']) && !empty($user_coupon['valid_end_time'])){ - $valid_end_time = strtotime($user_coupon['valid_start_time']); + $valid_end_time = strtotime($user_coupon['valid_start_time']); - $data = array(); - $data['user_coupon_id'] = $user_coupon['user_coupon_id']; + $data = array(); + $data['user_coupon_id'] = $user_coupon['user_coupon_id']; - $time = $valid_end_time - time(); - $message = new UserCouponExpiredDelayDirectProducer($data); - $message->setDelayMs(1000 * $time); - $producer = $this->container->get(Producer::class); - $res = $producer->produce($message); - if (!$res) { - return false; - } + $time = $valid_end_time - time(); + $message = new UserCouponExpiredDelayDirectProducer($data); + $message->setDelayMs(1000 * $time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + return false; } }catch (\Throwable $e){ Log::getInstance("CouponService-GrantUserCoupon")->error($e->getMessage()); @@ -155,24 +153,22 @@ class CouponService extends BaseService try { // 添加优惠卷即将过期提醒队列 - if (!empty($user_coupon['valid_start_time']) && !empty($user_coupon['valid_end_time']) && isset($time)){ - $time = floor($time * 0.75); + $time = floor($time * 0.75); - // 时间低于5小时,不进行过期提醒 - if ($time > 60 * 60 * 5){ - $message = new UserCouponExpiredNoticeDelayDirectProducer($data); - $message->setDelayMs(1000 * $time); - $producer = $this->container->get(Producer::class); - $res = $producer->produce($message); - if (!$res) { - Log::getInstance("CouponService-GrantUserCoupon")->error("添加优惠卷即将过期提醒队列"); - } + // 时间低于5小时,不进行过期提醒 + if ($time > 60 * 60 * 5){ + $message = new UserCouponExpiredNoticeDelayDirectProducer($data); + $message->setDelayMs(1000 * $time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + Log::getInstance("CouponService-GrantUserCoupon")->error("添加优惠卷即将过期提醒队列"); } - - // 通知-患者-优惠卷发放 - $MessagePush = new MessagePush($user_id); - $MessagePush->patientDistributeCoupon($coupon['coupon_name']); } + + // 通知-患者-优惠卷发放 + $MessagePush = new MessagePush($user_id); + $MessagePush->patientDistributeCoupon($coupon['coupon_name']); }catch (\Throwable $e){ Log::getInstance("CouponService-GrantUserCoupon")->error($e->getMessage()); } @@ -208,11 +204,9 @@ class CouponService extends BaseService /** * 发放购买服务包的关联优惠卷 * @param string $user_id 用户id - * @param string $start_time 开始使用时间 - * @param string $finish_time 结束有效时间 * @return bool */ - public function GrantBuyOrderServicePackageCoupon(string $user_id,string $start_time,string $finish_time): bool + public function GrantBuyOrderServicePackageCoupon(string $user_id): bool { // 获取购买服务包的用户可领取的优惠卷列表 $coupon = Coupon::getOrderServicePackageCouponList(); @@ -227,17 +221,6 @@ class CouponService extends BaseService // 发放失败 return false; } - - // 增加优惠卷有效期 - $params = array(); - $params['user_id'] = $user_id; - $params['coupon_id'] = $value['coupon_id']; - $params['user_coupon_status'] = 0; - - $data = array(); - $data['valid_start_time'] = $start_time; - $data['valid_end_time'] = $finish_time; - UserCoupon::edit($params,$data); } return true; diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index 896d2a0..cf4fa19 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -1911,7 +1911,7 @@ class UserDoctorService extends BaseService if (count($order_service_package_inquiry) <= 1){ // 发放优惠卷 $CouponService = new CouponService(); - $res = $CouponService->GrantBuyOrderServicePackageCoupon($order_inquiry['user_id'],$start_time,$finish_time); + $res = $CouponService->GrantBuyOrderServicePackageCoupon($order_inquiry['user_id']); if (!$res) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "接诊失败"); From f83580508a9d7d7067b19c0f802a21ec5809deb4 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 17 Apr 2024 09:36:08 +0800 Subject: [PATCH 090/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E5=8F=AF=E5=88=9B=E5=BB=BA=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OrderServicePackageController.php | 11 ++ app/Services/OrderServicePackageService.php | 106 ++++++++++++++++++ config/routes.php | 3 + 3 files changed, 120 insertions(+) diff --git a/app/Controller/OrderServicePackageController.php b/app/Controller/OrderServicePackageController.php index cdad73e..3bfd1dd 100644 --- a/app/Controller/OrderServicePackageController.php +++ b/app/Controller/OrderServicePackageController.php @@ -58,4 +58,15 @@ class OrderServicePackageController extends AbstractController $data = $OrderServicePackageService->addServiceInquiryOrder(); return $this->response->json($data); } + + /** + * 检测是否可创建服务包问诊订单 + * @return ResponseInterface + */ + public function getServicePackageInquiryCheck(): ResponseInterface + { + $OrderServicePackageService = new OrderServicePackageService(); + $data = $OrderServicePackageService->getServicePackageInquiryCheck(); + return $this->response->json($data); + } } \ No newline at end of file diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 4db976c..8a9b642 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -215,6 +215,7 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::CLIENT_HTTP_ERROR); } } + // 检测家庭成员是否存在 $params = array(); $params['family_id'] = $request_params['family_id']; @@ -1007,6 +1008,111 @@ class OrderServicePackageService extends BaseService return success($result); } + /** + * 检测是否可创建服务包问诊订单 + * @return array + */ + public function getServicePackageInquiryCheck(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $order_no = $this->request->route("order_no"); + + $result = array(); + $result['status'] = 1; + $result['message'] = ""; + $result['data'] = NULL; + + try { + // 检测患者是否购买服务包 + $params = array(); + $params['order_service_no'] = $order_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + return fail(HttpEnumCode::HTTP_ERROR, "患者未购买服务包"); + } + + // 检测服务包订单订单状态 + if ($order_service_package['order_service_status'] == 1) { + return fail(HttpEnumCode::HTTP_ERROR, "服务包未支付"); + } + + if ($order_service_package['order_service_status'] == 2) { + $result['status'] = 2; + $result['message'] = "已发起问诊,请耐心等待接诊"; + $result['data']['order_no'] = $order_service_package['order_service_no']; + return success($result); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)) { + return fail(HttpEnumCode::SERVER_ERROR); + } + + // 处理问诊类型 + if ($order_service_package['order_service_type'] == 1) { + $inquiry_mode = 8; + } else { + $inquiry_mode = 9; + } + + // 检测是否存在同类型未完成的问诊订单 + $PatientOrderService = new PatientOrderService(); + $order_inquiry_id = $PatientOrderService->getNotFinishedOrderInquiry(1, $inquiry_mode, $user_info['client_user_id']); + if (!empty($order_inquiry_id)) { + // 获取问诊订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + return fail(HttpEnumCode::SERVER_ERROR); + } + + $result['status'] = 4; + $result['message'] = "存在进行中的问诊订单,无法再次使用"; + $result['data']['order_no'] = $order_inquiry['inquiry_no']; + $result['data']['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + return success($result); + } + + // 检测当前医生是否和患者存在未完成问诊订单 + $InquiryService = new InquiryService(); + $order_inquiry = $InquiryService->checkPatientDoctorProgressInquiry($user_info['client_user_id'], $order_service_package['doctor_id']); + if (!empty($order_inquiry)) { + $result['status'] = 4; + $result['message'] = "您和当前医生存在问诊中订单,无法再次使用"; + $result['data']['order_no'] = $order_inquiry['inquiry_no']; + $result['data']['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + return success($result); + } + + // 检测问诊次数 + // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 + if ($order_service_package_detail['monthly_frequency'] != 0) { + // 获取服务包当月已问诊次数 + $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['start_time'],$order_service_package['order_service_type'],$user_info['client_user_id'], $order_service_package['doctor_id']); + + if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']) { + // 超出当月问诊次数 + $result['status'] = 3; + $result['message'] = "超出服务包所包含的当月问诊次数"; + $result['data']['order_no'] = $order_service_package['order_service_no']; + return success($result); + } + } + }catch (\Throwable $e){ + return fail(HttpEnumCode::SERVER_ERROR,$e->getMessage()); + } + + // 未超出当月问诊次数或次数无限制 + $result['message'] = "已购买,未超出当月问诊次数"; + $result['data']['order_no'] = $order_service_package['order_service_no']; + return success($result); + } + /** * 取消未支付检测订单 * @param string|int $order_no diff --git a/config/routes.php b/config/routes.php index ae59f57..542d5ce 100644 --- a/config/routes.php +++ b/config/routes.php @@ -616,6 +616,9 @@ Router::addGroup('/patient', function () { // 创建服务包问诊订单 Router::post('/inquiry/{order_no}', [OrderServicePackageController::class, 'addServiceInquiryOrder']); + + // 检测是否可创建服务包问诊订单 + Router::get('/check/{order_no}', [OrderServicePackageController::class, 'getServicePackageInquiryCheck']); }); }); From df935b6c8262dfadda5fe495ebb04e0b62d52bee Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 17 Apr 2024 11:46:59 +0800 Subject: [PATCH 091/274] =?UTF-8?q?=E5=B7=B2=E4=BD=BF=E7=94=A8=E5=95=86?= =?UTF-8?q?=E5=93=81=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/OrderServicePackageProduct.php | 7 ++-- app/Services/InquiryService.php | 5 +++ app/Services/PatientOrderService.php | 44 +++++++++++------------- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/app/Model/OrderServicePackageProduct.php b/app/Model/OrderServicePackageProduct.php index b7f5e41..acc979d 100644 --- a/app/Model/OrderServicePackageProduct.php +++ b/app/Model/OrderServicePackageProduct.php @@ -16,9 +16,10 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $product_id 商品id * @property string $product_name 商品名称 * @property int $quantity 商品数量 + * @property int $used_quantity 已使用数量 * @property string $discount_product_price 折扣商品价格 - * @property Carbon $created_at 创建时间 - * @property Carbon $updated_at 修改时间 + * @property \Carbon\Carbon $created_at 创建时间 + * @property \Carbon\Carbon $updated_at 修改时间 */ class OrderServicePackageProduct extends Model { @@ -32,7 +33,7 @@ class OrderServicePackageProduct extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['service_product_id', 'order_service_id', 'product_id', 'product_name', 'quantity', 'discount_product_price', 'created_at', 'updated_at']; + protected array $fillable = ['service_product_id', 'order_service_id', 'product_id', 'product_name', 'quantity', 'used_quantity', 'discount_product_price', 'created_at', 'updated_at']; protected string $primaryKey = "service_product_id"; diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 2e55966..1d83b82 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -1002,6 +1002,11 @@ class InquiryService extends BaseService } + // 获取服务包当月剩余次数 + + // 获取服务包到期天数 + + $result = array(); $result['doctor_user_id'] = $user_doctor['user_id']; $result['patient_user_id'] = $order_inquiry['user_id']; diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 51a6f2a..d8bb6e6 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -2887,30 +2887,28 @@ class PatientOrderService extends BaseService $result['order_product'] = $order_products->toArray(); } - // 已使用商品数量 - $used_quantity = 0; - foreach ($order_products as $order_product){ - // 获取详情item - $params = array(); - $params['order_product_id'] = $order_product['order_product_id']; - $order_product_items = OrderProductItem::getList($params); - if (empty($order_product_items)){ - return fail(HttpEnumCode::SERVER_ERROR); - } - - foreach ($order_product_items as $order_product_item){ - $used_quantity = $order_product_item["amount"]; - } - } - - if ($used_quantity > 30){ - $used_quantity = 30; - } - - $result['order_service_package_product']['used_quantity'] = $used_quantity; +// // 已使用商品数量 +// $used_quantity = 0; +// foreach ($order_products as $order_product){ +// // 获取详情item +// $params = array(); +// $params['order_product_id'] = $order_product['order_product_id']; +// $order_product_items = OrderProductItem::getList($params); +// if (empty($order_product_items)){ +// return fail(HttpEnumCode::SERVER_ERROR); +// } +// +// foreach ($order_product_items as $order_product_item){ +// $used_quantity = $order_product_item["amount"]; +// } +// } +// +// if ($used_quantity > 30){ +// $used_quantity = 30; +// } +// +// $result['order_service_package_product'][0]['remaining_quantity'] = $used_quantity; } - - // 获取药品剩余数量 } return success($result); From b1ee69453bc62ecc6c7ae78e76aaac5027e1d83b Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 17 Apr 2024 14:32:27 +0800 Subject: [PATCH 092/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8E=A5=E5=8F=A3=20?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=9C=8D=E5=8A=A1=E5=8C=85=E5=85=B3=E8=81=94?= =?UTF-8?q?=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95=E6=B6=88=E6=81=AF=E5=86=85?= =?UTF-8?q?=E9=A1=B5=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/InquiryController.php | 11 ++++ app/Services/InquiryService.php | 92 ++++++++++++++++++++++++++++ config/routes.php | 3 + 3 files changed, 106 insertions(+) diff --git a/app/Controller/InquiryController.php b/app/Controller/InquiryController.php index cebd4db..f6d0005 100644 --- a/app/Controller/InquiryController.php +++ b/app/Controller/InquiryController.php @@ -173,4 +173,15 @@ class InquiryController extends AbstractController $data = $InquiryService->getInquiryVideoMessageBasic(); return $this->response->json($data); } + + /** + * 获取服务包关联问诊订单消息内页基础数据 + * @return ResponseInterface + */ + public function getInquiryServiceMessageBasic(): ResponseInterface + { + $InquiryService = new InquiryService(); + $data = $InquiryService->getInquiryServiceMessageBasic(); + return $this->response->json($data); + } } \ No newline at end of file diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 1d83b82..1e9fd86 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -29,6 +29,9 @@ use App\Model\OrderInquiryVideoRecord; use App\Model\OrderInquiryVideoReservation; use App\Model\OrderPrescription; use App\Model\OrderProductCoupon; +use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageDetail; +use App\Model\OrderServicePackageInquiry; use App\Model\PatientFamily; use App\Model\PatientFamilyHealth; use App\Model\PatientFamilyPersonal; @@ -1468,6 +1471,95 @@ class InquiryService extends BaseService return success($result); } + /** + * 获取服务包关联问诊订单消息内页基础数据 + * @return array + */ + public function getInquiryServiceMessageBasic(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + $order_inquiry_id = $this->request->route('order_inquiry_id'); + + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + return fail(HttpEnumCode::HTTP_ERROR, "订单错误"); + } + + $order_inquiry = $order_inquiry->toArray(); + + if ($user_info['user_type'] == 1) { + if ($order_inquiry['patient_id'] != $user_info['client_user_id']) { + return success(); + } + } + + if ($user_info['user_type'] == 2) { + if ($order_inquiry['doctor_id'] != $user_info['client_user_id']) { + return success(); + } + } + + // 获取问诊订单关联服务包 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); + if (empty($order_service_package_inquiry)){ + return success(); + } + + // 获取用户当前购买的服务包 + $params = array(); + $params['user_id'] = $user_info['user_id']; + $params['patient_id'] = $user_info['client_user_id']; + $params['order_service_no'] = $order_service_package_inquiry['order_service_no']; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + return success(); + } + + // 检测服务包订单订单状态 + if ($order_service_package['order_service_status'] == 1) { + return success(); + } + + if ($order_service_package['order_service_status'] == 2) { + return success(); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)) { + return success(); + } + + // 获取当月已问诊次数 + // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 + $month_inquiry_count = 0; + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { + // 获取服务包当月已问诊次数 + $OrderServicePackageService = new OrderServicePackageService(); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'],$order_service_package['order_service_type'],$order_service_package['user_id'], $order_service_package['doctor_id']); + } + + // 处理剩余服务天数 + $finish_day = null; + if (!empty($order_service_package['finish_time'])){ + $finish_day = ceil((strtotime($order_service_package['finish_time']) - time()) / 60 / 60 / 24); + } + + + $result = array(); + $result['finish_time'] = $finish_day; // 剩余服务天数 + $result['month_inquiry_count'] = $month_inquiry_count; // 服务包当月已问诊次数 + $result['monthly_frequency'] = $order_service_package_detail['monthly_frequency']; // 每月次数(0表示不限次) + + return success($result); + } + /** * 获取医生未接诊订单数量 * @param string $doctor_id 医生id diff --git a/config/routes.php b/config/routes.php index 542d5ce..fc2cdbe 100644 --- a/config/routes.php +++ b/config/routes.php @@ -957,6 +957,9 @@ Router::addGroup('/im', function () { // 获取视频问诊消息内页基础数据 Router::get('/video/{order_inquiry_id:\d+}', [InquiryController::class, 'getInquiryVideoMessageBasic']); + + // 获取服务包关联问诊订单消息内页基础数据 + Router::get('/service/{order_inquiry_id:\d+}', [InquiryController::class, 'getInquiryServiceMessageBasic']); }); }); }); From 36f22db82f021c87075c9449ec331a21a3a80a7c Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 17 Apr 2024 14:55:43 +0800 Subject: [PATCH 093/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E5=85=B3=E8=81=94=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=86=85=E9=A1=B5=E5=9F=BA=E7=A1=80=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=A2=9E=E5=8A=A0=E5=89=A9=E4=BD=99=E8=8D=AF=E5=93=81?= =?UTF-8?q?=E6=95=B0=E9=87=8F=E5=AD=97=E6=AE=B5=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/InquiryService.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 1e9fd86..0f11c10 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -32,6 +32,7 @@ use App\Model\OrderProductCoupon; use App\Model\OrderServicePackage; use App\Model\OrderServicePackageDetail; use App\Model\OrderServicePackageInquiry; +use App\Model\OrderServicePackageProduct; use App\Model\PatientFamily; use App\Model\PatientFamilyHealth; use App\Model\PatientFamilyPersonal; @@ -1551,11 +1552,26 @@ class InquiryService extends BaseService $finish_day = ceil((strtotime($order_service_package['finish_time']) - time()) / 60 / 60 / 24); } + // 获取剩余药品数量 + $remaining_quantity = 0; + if ($order_service_package['order_service_type'] == 1){ + // 健康包商品数据 + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_product = OrderServicePackageProduct::getList($params); + if (!empty($order_service_package_product)){ + $remaining_quantity = $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; + if ($remaining_quantity < 0){ + $remaining_quantity = 0; + } + } + } $result = array(); $result['finish_time'] = $finish_day; // 剩余服务天数 $result['month_inquiry_count'] = $month_inquiry_count; // 服务包当月已问诊次数 $result['monthly_frequency'] = $order_service_package_detail['monthly_frequency']; // 每月次数(0表示不限次) + $result['remaining_quantity'] = $remaining_quantity; // 剩余药品数量 return success($result); } From 9b78ecb78e67e886da8aedab6f58c2a7830bb600 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 17 Apr 2024 16:15:50 +0800 Subject: [PATCH 094/274] =?UTF-8?q?im=E6=B6=88=E6=81=AF=E9=87=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0order=5Fno?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/ImService.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/Services/ImService.php b/app/Services/ImService.php index a4bbd24..86d4f10 100644 --- a/app/Services/ImService.php +++ b/app/Services/ImService.php @@ -282,6 +282,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -318,6 +319,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -363,6 +365,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -408,6 +411,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -448,6 +452,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -489,6 +494,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -525,6 +531,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -563,6 +570,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -604,6 +612,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -639,6 +648,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -755,6 +765,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -796,6 +807,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -838,6 +850,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -882,6 +895,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -922,6 +936,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -959,6 +974,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -998,6 +1014,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -1037,6 +1054,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -1076,6 +1094,7 @@ class ImService extends BaseService // 发送消息 $cloud_custom_data = array(); $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; From f040795d9a9a14a4f4a221dd678b3440c407f952 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 17 Apr 2024 17:45:32 +0800 Subject: [PATCH 095/274] 1 --- app/Services/InquiryService.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 0f11c10..2736b73 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -1512,8 +1512,6 @@ class InquiryService extends BaseService // 获取用户当前购买的服务包 $params = array(); - $params['user_id'] = $user_info['user_id']; - $params['patient_id'] = $user_info['client_user_id']; $params['order_service_no'] = $order_service_package_inquiry['order_service_no']; $order_service_package = OrderServicePackage::getOne($params); if (empty($order_service_package)) { From 581111bdbe11827929dc5cf6650c4ccd38873b70 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 17 Apr 2024 17:52:33 +0800 Subject: [PATCH 096/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=BB=B6=E8=BF=9F=E9=98=9F=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...pleteServicePackageDelayDirectConsumer.php | 236 ++++++++++++++++++ ...pleteServicePackageDelayDirectProducer.php | 32 +++ ...AddServicePackageCompleteQueueCommand.php} | 19 +- 3 files changed, 286 insertions(+), 1 deletion(-) create mode 100644 app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php create mode 100644 app/Amqp/Producer/AutoCompleteServicePackageDelayDirectProducer.php rename app/Command/{AddServicePackageFinishQueueCommand.php => AddServicePackageCompleteQueueCommand.php} (81%) diff --git a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php new file mode 100644 index 0000000..f6847d9 --- /dev/null +++ b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php @@ -0,0 +1,236 @@ +info(json_encode($data, JSON_UNESCAPED_UNICODE)); + + try { + // 检测执行次数 + $Utils = new Utils(); + $redis_key = "CompleteServicePackage" . $data['order_no']; + $res = $Utils->checkHandleNumber($redis_key); + if (!$res) { + Log::getInstance("queue-AutoCompleteServicePackage")->error("超出最大执行次数或检测错误"); + return Result::ACK; + } + }catch (\Throwable $e){ + Log::getInstance("queue-AutoCompleteServicePackage")->error($e->getMessage()); + return Result::REQUEUE; + } + + try { + // 检测入参参数 + $res = $this->detectInputParameters($data); + if (!$res){ + Log::getInstance("queue-AutoCompleteServicePackage")->error("入参错误" ); + return Result::ACK; + } + + // 获取订单数据 + $params = array(); + $params['order_service_no'] = $data['order_no']; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + Log::getInstance("queue-AutoCompleteServicePackage")->error("入参错误" ); + return Result::ACK; + } + + // 检测订单状态 + $res = $this->detectOrderStatus($order_service_package); + if (!$res){ + Log::getInstance("queue-AutoCompleteServicePackage")->error("订单状态错误" ); + return Result::ACK; + } + + // 检测订单结束时间 + $res = $this->detectOrderFinishTime($order_service_package); + if (!$res){ + // 未到结束时间,重新加入队列 + $res = $this->addQueue($order_service_package); + if (!$res){ + // 重新添加队列失败 + return Result::REQUEUE; + } + + return Result::DROP; + } + + }catch (\Throwable $e){ + Log::getInstance("queue-AutoCompleteServicePackage")->error($e->getMessage()); + return Result::REQUEUE; + } + + // 处理业务 + Db::beginTransaction(); + try { + // 处理服务包订单为已完成 + $data = array(); + $data['order_service_status'] = 4;// 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + OrderServicePackage::edit($params,$data); + + Db::commit(); + }catch (\Throwable $e){ + Db::rollBack(); + Log::getInstance("queue-AutoCompleteServicePackage")->error($e->getMessage()); + return Result::REQUEUE; + } + + // 发送消息 + try { + + }catch (\Throwable $e){ + Log::getInstance("queue-AutoCompleteServicePackage")->error($e->getMessage()); + return Result::ACK; + } + + return Result::ACK; + } + + /** + * 检测入参参数 + * @param array $data + * @return bool + */ + public function detectInputParameters(array $data): bool + { + if (empty($data['order_no'])){ + return false; + } + + return true; + } + + /** + * 检测订单状态 + * @param array|object $order_service_package + * @return bool + */ + public function detectOrderStatus(array|object $order_service_package): bool + { + if ($order_service_package['order_service_status'] == 1){ + Log::getInstance("queue-AutoCompleteServicePackage")->error("订单未支付" ); + return false; + } + + if ($order_service_package['order_service_status'] == 2){ + Log::getInstance("queue-AutoCompleteServicePackage")->error("订单未开始" ); + return false; + } + + if ($order_service_package['order_service_status'] == 4){ + Log::getInstance("queue-AutoCompleteServicePackage")->error("订单已完成" ); + return false; + } + + if ($order_service_package['order_service_status'] == 5){ + Log::getInstance("queue-AutoCompleteServicePackage")->error("订单已取消" ); + return false; + } + + // 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + if (!in_array($order_service_package['refund_status'],[0,4,5])){ + Log::getInstance("queue-AutoCompleteServicePackage")->error("订单退款中" ); + return false; + } + + // 订单支付状态 + if ($order_service_package['pay_status'] != 2){ + Log::getInstance("queue-AutoCompleteServicePackage")->error("订单未支付" ); + return false; + } + + return true; + } + + /** + * 检测订单结束时间 + * @param array|object $order_service_package + * @return bool + */ + public function detectOrderFinishTime(array|object $order_service_package): bool + { + $finish_time = strtotime($order_service_package['finish_time']); + + $diff_time = time() - $finish_time; + + if ($diff_time < 0 && ($diff_time > -7200)){ + // 负数,表示还未到完成时间。重新加入队列 + return false; + } + + // 正数,已到或已超完成时间。可以取消。 + return true; + } + + /** + * 重新加入队列 + * @param array|object $order_service_package + * @return bool + */ + public function addQueue(array|object $order_service_package): bool + { + try { + $finish_time = strtotime($order_service_package['finish_time']); + + // 结束时间大于当前时间 + if ($finish_time > time()){ + $time = $finish_time - time(); + + $queue_data = array(); + $queue_data['order_no'] = $order_service_package['order_service_no']; + + $message = new AutoCompleteServicePackageDelayDirectProducer($queue_data); + $message->setDelayMs(1000 * $time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + return false; + } + } + }catch (\Throwable $e){ + Log::getInstance("queue-AutoCompleteServicePackage")->error($e->getMessage()); + return false; + } + + return true; + } +} diff --git a/app/Amqp/Producer/AutoCompleteServicePackageDelayDirectProducer.php b/app/Amqp/Producer/AutoCompleteServicePackageDelayDirectProducer.php new file mode 100644 index 0000000..1f308d1 --- /dev/null +++ b/app/Amqp/Producer/AutoCompleteServicePackageDelayDirectProducer.php @@ -0,0 +1,32 @@ +payload = $data; + } + +} diff --git a/app/Command/AddServicePackageFinishQueueCommand.php b/app/Command/AddServicePackageCompleteQueueCommand.php similarity index 81% rename from app/Command/AddServicePackageFinishQueueCommand.php rename to app/Command/AddServicePackageCompleteQueueCommand.php index 976f11e..4870b8f 100644 --- a/app/Command/AddServicePackageFinishQueueCommand.php +++ b/app/Command/AddServicePackageCompleteQueueCommand.php @@ -4,14 +4,16 @@ declare(strict_types=1); namespace App\Command; +use App\Amqp\Producer\AutoCompleteServicePackageDelayDirectProducer; use App\Model\OrderServicePackage; +use Hyperf\Amqp\Producer; use Hyperf\Command\Command as HyperfCommand; use Hyperf\Command\Annotation\Command; use Hyperf\DbConnection\Db; use Psr\Container\ContainerInterface; #[Command] -class AddServicePackageFinishQueueCommand extends HyperfCommand +class AddServicePackageCompleteQueueCommand extends HyperfCommand { public function __construct(protected ContainerInterface $container) { @@ -47,6 +49,21 @@ class AddServicePackageFinishQueueCommand extends HyperfCommand $this->putAddFinishStatus($order_service_package['order_service_id'],1); // 添加服务包订单完成延迟队列 + $finish_time = strtotime($order_service_package['finish_time']); + + $time = $finish_time - time(); + + $queue_data = array(); + $queue_data['order_no'] = $order_service_package['order_service_no']; + + $message = new AutoCompleteServicePackageDelayDirectProducer($queue_data); + $message->setDelayMs(1000 * $time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + Db::rollBack(); + $this->line("添加队列失败"); + } Db::commit(); }catch (\Throwable $e){ From 73e167d42a6b08a1ebb62ee0dbc946af09d16c09 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 18 Apr 2024 09:55:58 +0800 Subject: [PATCH 097/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E6=8E=A8=E9=80=81=E7=AD=96=E7=95=A5=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Common/Common.php | 32 ++++ app/Services/MessagePush.php | 2 +- app/Services/MessagePushInquiryService.php | 164 ++++++++++++++++++ app/Services/MessagePushService.php | 51 ++++++ .../MessagePushServicePackageService.php | 139 +++++++++++++++ 5 files changed, 387 insertions(+), 1 deletion(-) create mode 100644 app/Services/MessagePushInquiryService.php create mode 100644 app/Services/MessagePushService.php create mode 100644 app/Services/MessagePushServicePackageService.php diff --git a/app/Common/Common.php b/app/Common/Common.php index 8e29ab4..442ba8b 100644 --- a/app/Common/Common.php +++ b/app/Common/Common.php @@ -317,5 +317,37 @@ function couponScopeToString(int|string $application_scope): string } else { $result = ""; } + return $result; +} + +/** + * 转换服务包订单类型为汉字 + * @param int|string $order_service_type 服务包类型(1:健康包 2:随访包) + * @return string + */ +function orderServiceTypeToString(int|string $order_service_type): string +{ + if ($order_service_type == 1) { + $result = "健康包"; + } elseif ($order_service_type == 2) { + $result = "随访包"; + } else { + $result = "服务包"; + } + return $result; +} + +/** + * 转换每月次数为汉字 + * @param int|string $monthly_frequency 服务包类型(1:健康包 2:随访包) + * @return string + */ +function monthlyFrequencyToString(int|string $monthly_frequency): string +{ + $result = $monthly_frequency; + if ($monthly_frequency == 0) { + $result = "不限"; + } + return $result; } \ No newline at end of file diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index f3f54eb..8a4bd02 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -226,7 +226,7 @@ class MessagePush extends BaseService } /** - * 患者-通知患者医生已接诊 + * 患者-通知患者医生已接诊----- * 站内、订阅、短信 * @return void */ diff --git a/app/Services/MessagePushInquiryService.php b/app/Services/MessagePushInquiryService.php new file mode 100644 index 0000000..a7861d4 --- /dev/null +++ b/app/Services/MessagePushInquiryService.php @@ -0,0 +1,164 @@ +order['order_no']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)){ + Log::getInstance("MessagePushInquiryService-patientDoctorAcceptedInquiry")->error("问诊订单数据为空"); + return; + } + + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePushInquiryService-patientDoctorAcceptedInquiry")->error("医生数据为空"); + return; + } + + // 站内 + $station_data = array(); + $station_data['user_id'] = $this->user['user_id']; + $station_data['notice_type'] = 3; + $station_data['notice_system_type'] = 1; + $station_data['from_name'] = "肝胆小秘书"; + $station_data['notice_brief_title'] = "{$user_doctor['user_name']}医生已接诊,请尽快和医生进行沟通交流病情,点击查看详情。"; + $station_data['notice_title'] = "{$user_doctor['user_name']}医生已接诊,请尽快和医生进行沟通交流病情,点击查看详情。"; + $station_data['notice_content'] = "{$user_doctor['user_name']}医生已接诊,请您尽快和医生进行沟通交流病情,您可以点击问诊详情进行交流。"; + $station_data['link_type'] = 1;// 聊天详情页 + + $link_params = array(); + $link_params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $link_params['inquiry_type'] = $order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $order_inquiry['user_id']; + $station_data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + $station_data['button_type'] = 6; // 问诊详情 + + $message = new SendStationMessageProducer($station_data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePushInquiryService-patientDoctorAcceptedInquiry")->error(json_encode($station_data, JSON_UNESCAPED_UNICODE)); + } + + // 订阅 + // 获取问诊订单关联病例 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)) { + Log::getInstance("MessagePushInquiryService-patientDoctorAcceptedInquiry")->error("病例数据为空"); + return; + } + + // 问诊内容-病情主诉 + $disease_desc = $order_inquiry_case['disease_desc']; + if (!empty($disease_desc)) { + if (strlen($disease_desc) > 15) { + $disease_desc = mb_substr($disease_desc, 0, 15); + if ($disease_desc) { + $disease_desc = $disease_desc . "..."; + } + } + } + + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 + $sub_data['params']['page'] = "patient/pages/orderDetail/orderDetail?order_inquiry_id={$order_inquiry['order_inquiry_id']}"; + $sub_data['params']['data'] = [ + "thing1" => (string)$disease_desc,// 问诊内容-病情主诉 + "thing2" => "医生已接诊,请您尽快和医生沟通交流病情",// 提醒内容 + "name3" => (string)$user_doctor['user_name'],// 问诊医生 + "thing4" => "点击查看问诊订单详情",// 提示说明 + ]; + + $subscription_data = array(); + $subscription_data['sub_data'] = $sub_data; + $subscription_data['sms_data'] = array(); + + $message = new SendSubMessageProducer($subscription_data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePushInquiryService-patientDoctorAcceptedInquiry")->error(json_encode($subscription_data, JSON_UNESCAPED_UNICODE)); + } + + // 短信 + // 获取系统接诊配置 + $params = array(); + $params['inquiry_type'] = $order_inquiry['inquiry_type']; + $params['inquiry_mode'] = $order_inquiry['inquiry_mode']; + $system_inquiry_config = SystemInquiryConfig::getOne($params); + if (empty($system_inquiry_config)) { + Log::getInstance("MessagePushInquiryService-patientDoctorAcceptedInquiry")->error("获取系统接诊配置失败"); + return; + } + + // 问诊时长 + $duration = $system_inquiry_config['duration']; + if ($duration <= 0) { + $duration = "不限制"; + } else { + $duration = $duration . "分钟"; + } + + $data = array(); + $data['template_code'] = "SMS_271955088"; + $data['scene_desc'] = "通知患者医生已接诊"; + $data['phone'] = $this->user['mobile']; + $data['user_id'] = $this->user['user_id']; + + $template_param = array(); + $template_param['type'] = inquiryTypeToString($order_inquiry['inquiry_type']); + $template_param['name'] = $user_doctor['user_name']; + $template_param['duration'] = $duration; // 服务时长 + $data['template_param'] = $template_param; + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePushInquiryService-patientDoctorAcceptedInquiry")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + }catch (\Throwable $e){ + Log::getInstance("MessagePushInquiryService-patientDoctorAcceptedInquiry")->error($e->getMessage()); + } + } +} \ No newline at end of file diff --git a/app/Services/MessagePushService.php b/app/Services/MessagePushService.php new file mode 100644 index 0000000..dd0321c --- /dev/null +++ b/app/Services/MessagePushService.php @@ -0,0 +1,51 @@ +strategy = new MessagePushServicePackageService(); + }else{ + $this->strategy = new MessagePushInquiryService(); + } + + $this->strategy->order = $order->toArray(); + $this->strategy->user = $user->toArray(); + } + + /** + * 患者-通知患者医生已接诊 + * @return void + */ + public function patientDoctorAcceptedInquiry(): void + { + $this->strategy->patientDoctorAcceptedInquiry(); + } +} \ No newline at end of file diff --git a/app/Services/MessagePushServicePackageService.php b/app/Services/MessagePushServicePackageService.php new file mode 100644 index 0000000..79bdf9e --- /dev/null +++ b/app/Services/MessagePushServicePackageService.php @@ -0,0 +1,139 @@ +order['order_no']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)){ + Log::getInstance("MessagePushServicePackageService-patientDoctorAcceptedInquiry")->error("问诊订单数据为空"); + return; + } + + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePushServicePackageService-patientDoctorAcceptedInquiry")->error("医生数据为空"); + return; + } + + // 站内 + // 获取服务包订单 + $params = array(); + $params['order_service_no'] = $this->order['order_no']; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + Log::getInstance("MessagePushServicePackageService-patientDoctorAcceptedInquiry")->error("服务包订单数据为空"); + return; + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $this->order['order_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + Log::getInstance("MessagePushServicePackageService-patientDoctorAcceptedInquiry")->error("服务包订单数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($order_service_package['order_service_type']); + + // 转换每月次数为汉字 + $monthly_frequency = monthlyFrequencyToString($order_service_package_detail['monthly_frequency']); + + $start_time = date('Y年m月d日 H时i分',strtotime($order_service_package['start_time'])); + $finish_time = date('Y年m月d日 H时i分',strtotime($order_service_package['finish_time'])); + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 3; + $data['notice_system_type'] = 1; + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "您购买的{$order_type},医生已接诊,点击查看详情。"; + $data['notice_title'] = "您购买的{$order_type},{$user_doctor['user_name']}医生已接诊,每次问诊不限制沟通回合数,您可以点击【问诊详情】进行交流。"; + $data['notice_content'] = "您购买的{$order_type},{$user_doctor['user_name']}医生已接诊,每次问诊不限制沟通回合数,您可以点击【问诊详情】进行交流。"; + $data['link_type'] = 1;// 聊天详情页 + + $link_params = array(); + $link_params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $link_params['inquiry_type'] = $order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + $data['button_type'] = 6; // 问诊详情 + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePushServicePackageService-patientDoctorAcceptedInquiry")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 订阅 + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 + $sub_data['params']['page'] = "patient/pages/orderDetail/orderDetail?order_inquiry_id={$order_inquiry['order_inquiry_id']}"; + $sub_data['params']['data'] = [ + "thing1" => $order_type . "服务", + "thing2" => "医生已接诊",// 提醒内容 + "name3" => (string)$user_doctor['user_name'],// 问诊医生 + "thing4" => "点击查看详情",// 提示说明 + ]; + + $subscription_data = array(); + $subscription_data['sub_data'] = $sub_data; + $subscription_data['sms_data'] = array(); + + $message = new SendSubMessageProducer($subscription_data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePushServicePackageService-patientDoctorAcceptedInquiry")->error(json_encode($subscription_data, JSON_UNESCAPED_UNICODE)); + } + + // 短信 + + }catch (\Throwable $e){ + Log::getInstance("MessagePushServicePackageService-patientDoctorAcceptedInquiry")->error($e->getMessage()); + } + } +} \ No newline at end of file From c61a263b238952c3f755ece4e075ad52d392813a Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 18 Apr 2024 10:16:21 +0800 Subject: [PATCH 098/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=8C=BB=E7=94=9F=E5=BC=80=E5=90=AF=E7=9A=84=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=9C=8D=E5=8A=A1=E4=BB=B7=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/UserDoctorService.php | 37 ++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index cf4fa19..056ed42 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -15,6 +15,9 @@ use App\Model\DiseaseClassExpertise; use App\Model\DiseaseClassIcd; use App\Model\DoctorAccount; use App\Model\DoctorBankCard; +use App\Model\DoctorConfigFollowPackage; +use App\Model\DoctorConfigFollowPackageItem; +use App\Model\DoctorConfigHealthPackage; use App\Model\DoctorExpertise; use App\Model\DoctorInquiryConfig; use App\Model\DoctorInquiryConfig as DoctorInquiryConfigModel; @@ -2393,6 +2396,40 @@ class UserDoctorService extends BaseService unset($system_inquiry_config); } + + // 随访包 + if ($doctor_inquiry_config['inquiry_type'] == 1 && $doctor_inquiry_config['inquiry_mode'] == 9){ + $params = array(); + $params['doctor_id'] = $doctor_inquiry_config['doctor_id']; + $doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params); + if (!empty($doctor_config_follow_package)) { + $params = array(); + $params['follow_package_id'] = $doctor_config_follow_package['follow_package_id']; + $doctor_config_follow_package_items = DoctorConfigFollowPackageItem::getList($params); + if (!empty($doctor_config_follow_package_items)) { + foreach ($doctor_config_follow_package_items as $k => $doctor_config_follow_package_item){ + if ($k == 0){ + $value['inquiry_price'] = $doctor_config_follow_package_item['service_price']; + continue; + } + + if ($doctor_config_follow_package_item['service_price'] < $value['inquiry_price']){ + $value['inquiry_price'] = $doctor_config_follow_package_item['service_price']; + } + } + } + } + } + + // 健康包 + if ($doctor_inquiry_config['inquiry_type'] == 1 && $doctor_inquiry_config['inquiry_mode'] == 8){ + $params = array(); + $params['doctor_id'] = $doctor_inquiry_config['doctor_id']; + $doctor_config_health_package = DoctorConfigHealthPackage::getOne($params); + if (!empty($doctor_config_health_package)){ + $value['inquiry_price'] = $doctor_config_health_package['service_price']; + } + } } } From b3d99b4fe7dfbd3c3be50ef7a131493d06c330ac Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 18 Apr 2024 10:54:17 +0800 Subject: [PATCH 099/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=8C=BB=E7=94=9F=E5=BC=80=E5=90=AF=E7=9A=84=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=9C=8D=E5=8A=A1=E4=BB=B7=E6=A0=BC?= =?UTF-8?q?1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/UserDoctorService.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index 056ed42..66b43d6 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -2398,9 +2398,9 @@ class UserDoctorService extends BaseService } // 随访包 - if ($doctor_inquiry_config['inquiry_type'] == 1 && $doctor_inquiry_config['inquiry_mode'] == 9){ + if ($value['inquiry_type'] == 1 && $value['inquiry_mode'] == 9){ $params = array(); - $params['doctor_id'] = $doctor_inquiry_config['doctor_id']; + $params['doctor_id'] = $value['doctor_id']; $doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params); if (!empty($doctor_config_follow_package)) { $params = array(); @@ -2422,9 +2422,9 @@ class UserDoctorService extends BaseService } // 健康包 - if ($doctor_inquiry_config['inquiry_type'] == 1 && $doctor_inquiry_config['inquiry_mode'] == 8){ + if ($value['inquiry_type'] == 1 && $value['inquiry_mode'] == 8){ $params = array(); - $params['doctor_id'] = $doctor_inquiry_config['doctor_id']; + $params['doctor_id'] = $value['doctor_id']; $doctor_config_health_package = DoctorConfigHealthPackage::getOne($params); if (!empty($doctor_config_health_package)){ $value['inquiry_price'] = $doctor_config_health_package['service_price']; From 03784663ba1e881b86ad212388960b3bd4dc767f Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 18 Apr 2024 11:00:38 +0800 Subject: [PATCH 100/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=89=A9=E4=BD=99=E8=8D=AF=E5=93=81=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/InquiryService.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 2736b73..05c8d03 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -1556,11 +1556,13 @@ class InquiryService extends BaseService // 健康包商品数据 $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; - $order_service_package_product = OrderServicePackageProduct::getList($params); - if (!empty($order_service_package_product)){ - $remaining_quantity = $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; - if ($remaining_quantity < 0){ - $remaining_quantity = 0; + $order_service_package_products = OrderServicePackageProduct::getList($params); + if (!empty($order_service_package_products)){ + foreach ($order_service_package_products as $order_service_package_product){ + $remaining_quantity += $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; + if ($remaining_quantity < 0){ + $remaining_quantity = 0; + } } } } From 5d61a9113cc6ce1fef363ad2118cd578792b4c92 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 18 Apr 2024 15:03:35 +0800 Subject: [PATCH 101/274] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=84=E7=90=86?= =?UTF-8?q?=E6=97=A0=E9=97=A8=E6=A7=9B=E4=BC=98=E6=83=A0=E5=8D=B7=E9=87=91?= =?UTF-8?q?=E9=A2=9D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/UserCouponService.php | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/app/Services/UserCouponService.php b/app/Services/UserCouponService.php index dfb77a0..658ee85 100644 --- a/app/Services/UserCouponService.php +++ b/app/Services/UserCouponService.php @@ -162,8 +162,8 @@ class UserCouponService extends BaseService } } - // 处理满减金额优惠卷 - if ($coupon['coupon_type'] == 2){ + // 处理满减金额/无门槛优惠卷 + if ($coupon['coupon_type'] == 2 || $coupon['coupon_type'] == 1){ // 可共用一个优惠卷的商品金额问题 $product_price = 0; @@ -185,9 +185,20 @@ class UserCouponService extends BaseService ); } - if ($coupon['with_amount'] > $product_price){ - // 此优惠卷因商品金额不足,无法使用 - $coupons[$key]['is_can_use'] = 0; + // 满减金额优惠卷 + if ($coupon['coupon_type'] == 2){ + if ($coupon['with_amount'] > $product_price){ + // 此优惠卷因商品金额不足,无法使用 + $coupons[$key]['is_can_use'] = 0; + } + } + + // 无门槛优惠卷 + if ($coupon['coupon_type'] == 1){ + if ($product_price <= 0){ + // 商品总金额已经为0,不使用优惠卷 + $coupons[$key]['is_can_use'] = 0; + } } } From 2903407977b5d8372b67d038362fa10c8d6d8f5c Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 18 Apr 2024 15:19:56 +0800 Subject: [PATCH 102/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=A4=84=E6=96=B9=E8=AE=A2=E5=8D=95=E6=94=AF=E4=BB=98=E9=A1=B5?= =?UTF-8?q?=E8=AF=A6=E6=83=85=20=E9=87=91=E9=A2=9D=E3=80=81=E4=BC=98?= =?UTF-8?q?=E6=83=A0=E5=8D=B7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 24 ++++++ app/Services/PatientOrderService.php | 88 ++++++++++++++------- 2 files changed, 83 insertions(+), 29 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 8a9b642..d32a49c 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1256,4 +1256,28 @@ class OrderServicePackageService extends BaseService return $result; } + + /** + * 获取服务包剩余药品数量 + * @param string|int $order_service_id + * @param string|int $product_id + * @return int + */ + public function getOrderServiceProductRemainingQuantity(string|int $order_service_id,string|int $product_id): int + { + $remaining_quantity = 0; + + $params = array(); + $params['order_service_id'] = $$order_service_id; + $params['product_id'] = $product_id; + $order_service_package_product = OrderServicePackageProduct::getOne($params); + if (!empty($order_service_package_product)){ + $remaining_quantity = $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; + if ($remaining_quantity < 0){ + $remaining_quantity = 0; + } + } + + return $remaining_quantity; + } } \ No newline at end of file diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index d8bb6e6..e5727a0 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1776,59 +1776,89 @@ class PatientOrderService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "处方已使用"); } + // 获取问诊订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_prescription['order_inquiry_id']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)){ + return fail(); + } + // 获取处方药品信息 $params = array(); $params['order_prescription_id'] = $order_prescription['order_prescription_id']; - $order_prescription_product = OrderPrescriptionProduct::getList($params); - if (empty($order_prescription_product)) { + $order_prescription_products = OrderPrescriptionProduct::getList($params); + if (empty($order_prescription_products)) { return fail(HttpEnumCode::SERVER_ERROR); } - $amount_total = 0; + // 处理药品数据 + $amount_total = 0; // 总金额 + $product_datas = array(); // 商品数据 - // 优惠卷商品数据 - $coupon_product_datas = array(); - - foreach ($order_prescription_product as &$item) { + foreach ($order_prescription_products as &$order_prescription_product) { $params = array(); - $params['product_id'] = $item['product_id']; + $params['product_id'] = $order_prescription_product['product_id']; $product = Product::getWithAmountOne($params); if (empty($product)) { return fail(HttpEnumCode::HTTP_ERROR, "处方存在未知药品"); } - $item['status'] = 1; // 正常 + $order_prescription_product['status'] = 1; // 正常 // 检测商品库存 if (!empty($product['ProductPlatformAmount'])) { - if ($item['prescription_product_num'] > $product['ProductPlatformAmount']['stock']) { + if ($order_prescription_product['prescription_product_num'] > $product['ProductPlatformAmount']['stock']) { // 库存不足 - $item['status'] = 2; - continue; + $order_prescription_product['status'] = 2; } } - $amount_total = bcadd($amount_total,($product['product_price'] * $item['prescription_product_num']),2); + $amount_total = bcadd($amount_total,($product['product_price'] * $order_prescription_product['prescription_product_num']),2); - // 优惠卷商品数据 - $coupon_product_data = array(); - $product['product_num'] = $item['prescription_product_num']; - $coupon_product_data = $product->toArray(); - $coupon_product_datas[] = $coupon_product_data; + // 处方药品数据 + $product['product_num'] = $order_prescription_product['prescription_product_num']; + $product_data = $product->toArray(); + $product_datas[] = $product_data; } - // 定义优惠卷金额默认值 - $coupon_amount_total = 0; - - if (!empty($coupon_product_datas)) { - // 获取患者购药可用的优惠卷 - $userCouponService = new UserCouponService(); - $user_coupons = $userCouponService->getUserProductUsableCoupon($user_info['user_id'], $coupon_product_datas); - - // 获取可用优惠卷总金额 - $coupon_amount_total = $userCouponService->getCouponTotalPrice($user_coupons); + if (empty($product_datas)) { + return fail(); } + // 处理健康包赠送商品 + if ($order_inquiry['inquiry_type'] == 1 && $order_inquiry['inquiry_mode'] == 8){ + // 获取问诊订单关联服务包id + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); + if (empty($order_service_package_inquiry)){ + return fail(); + } + + // 此处不检测未支付的商品订单,在创建订单时会进行数量的扣减 + // 处理商品数量 + $OrderServicePackageService = new OrderServicePackageService(); + + foreach ($product_datas as &$product_data){ + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductRemainingQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id']); + // 可用数量大于处方商品数量,此情况把商品数量置为0 + if ($remaining_quantity >= $product_data['product_num']){ + $product_data['product_num'] = 0; + } + + // 此处重新计算药品总金额 + $amount_total = bcadd($amount_total,($product_data['product_price'] * $product_data['product_num']),2); + } + } + + // 获取患者购药可用的优惠卷 + $userCouponService = new UserCouponService(); + $user_coupons = $userCouponService->getUserProductUsableCoupon($user_info['user_id'], $product_datas); + + // 获取可用优惠卷总金额 + $coupon_amount_total = $userCouponService->getCouponTotalPrice($user_coupons); + // 获取运费金额 $logistics_fee = 0; if (env("APP_ENV") == "prod") { @@ -1868,7 +1898,7 @@ class PatientOrderService extends BaseService $result['payment_amount_total'] = $payment_amount_total; $result['logistics_fee'] = $logistics_fee; $result['user_ship_address'] = $user_ship_address; - $result['order_prescription_product'] = $order_prescription_product; + $result['order_prescription_product'] = $order_prescription_products; return success($result); } From 0a089aff4c865577a586078e727967832d08fe8e Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 18 Apr 2024 15:28:47 +0800 Subject: [PATCH 103/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=A4=84=E6=96=B9=E8=AE=A2=E5=8D=95=E6=94=AF=E4=BB=98=E9=A1=B5?= =?UTF-8?q?=E8=AF=A6=E6=83=85=20=E9=87=91=E9=A2=9D=E3=80=81=E4=BC=98?= =?UTF-8?q?=E6=83=A0=E5=8D=B7=E9=97=AE=E9=A2=981?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 2 +- app/Services/PatientOrderService.php | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index d32a49c..e4fd4e8 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1268,7 +1268,7 @@ class OrderServicePackageService extends BaseService $remaining_quantity = 0; $params = array(); - $params['order_service_id'] = $$order_service_id; + $params['order_service_id'] = $order_service_id; $params['product_id'] = $product_id; $order_service_package_product = OrderServicePackageProduct::getOne($params); if (!empty($order_service_package_product)){ diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index e5727a0..3a37949 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1751,7 +1751,8 @@ class PatientOrderService extends BaseService $order_prescription_id = $this->request->route('order_prescription_id'); $fields = [ - "order_prescription_id" + "order_prescription_id", + "order_inquiry_id" ]; $params = array(); @@ -1840,15 +1841,26 @@ class PatientOrderService extends BaseService // 处理商品数量 $OrderServicePackageService = new OrderServicePackageService(); + $amount_total = 0; foreach ($product_datas as &$product_data){ + // 获取服务包剩余药品数量 $remaining_quantity = $OrderServicePackageService->getOrderServiceProductRemainingQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id']); + // 可用数量大于处方商品数量,此情况把商品数量置为0 if ($remaining_quantity >= $product_data['product_num']){ $product_data['product_num'] = 0; } // 此处重新计算药品总金额 - $amount_total = bcadd($amount_total,($product_data['product_price'] * $product_data['product_num']),2); + $amount_total = bcadd( + $amount_total, + bcmul( + $product_data['product_price'], + $product_data['product_num'], + 2 + ), + 2 + ); } } @@ -1871,16 +1883,12 @@ class PatientOrderService extends BaseService // 实际支付金额=商品总金额-优惠卷金额+运费金额 $payment_amount_total = bcadd(bcsub($amount_total , $coupon_amount_total,2), $logistics_fee, 2); - if (env("APP_ENV") == "dev") { - $payment_amount_total = 0.01; - } // 获取收货地址 $params = array(); $params['user_id'] = $user_info['user_id']; $user_ship_addresss = UserShipAddress::getList($params); - unset($item); foreach ($user_ship_addresss as $item) { if ($item['is_default'] == 1) { $user_ship_address = $item; From 93ccad2946da67826a35cc545aef1c69e90b274a Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 18 Apr 2024 15:47:19 +0800 Subject: [PATCH 104/274] =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=9D=83=E7=9B=8A?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=8E=BB=E9=99=A4=E4=BA=86=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/OrderServicePackageInquiry.php | 3 +-- app/Services/PatientOrderService.php | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/Model/OrderServicePackageInquiry.php b/app/Model/OrderServicePackageInquiry.php index 5d06ccd..7810957 100644 --- a/app/Model/OrderServicePackageInquiry.php +++ b/app/Model/OrderServicePackageInquiry.php @@ -16,7 +16,6 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $order_inquiry_id 订单-问诊id * @property string $order_service_no 服务包系统订单编号 * @property string $inquiry_no 问诊系统订单编号 - * @property int $inquiry_status 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) * @property Carbon $created_at 创建时间 * @property Carbon $updated_at 修改时间 */ @@ -32,7 +31,7 @@ class OrderServicePackageInquiry extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['service_inquiry_id', 'order_service_id', 'order_inquiry_id', 'order_service_no', 'inquiry_no', 'inquiry_status', 'created_at', 'updated_at']; + protected array $fillable = ['service_inquiry_id', 'order_service_id', 'order_inquiry_id', 'order_service_no', 'inquiry_no', 'created_at', 'updated_at']; protected string $primaryKey = "service_inquiry_id"; diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 3a37949..03f9266 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -2866,9 +2866,20 @@ class PatientOrderService extends BaseService // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; - $order_service_package_inquiry = OrderServicePackageInquiry::getList($params); - if (!empty($order_service_package_inquiry)){ - $result['order_inquiry'] = $order_service_package_inquiry->toArray(); + $order_service_package_inquirys = OrderServicePackageInquiry::getList($params); + foreach ($order_service_package_inquirys as $order_service_package_inquiry){ + // 获取问诊订单数据 + $fields = [ + 'order_inquiry_id', + 'inquiry_status', + ]; + + $params = array(); + $params['order_inquiry_id'] = $order_service_package_inquiry['order_inquiry_id']; + $order_inquiry = OrderInquiry::getOne($params,$fields); + if (!empty($order_inquiry)){ + $result['order_inquiry'] = $order_inquiry->toArray(); + } } } From 6939dbd98141f13a1ab8d9fac00facdb1e5081a2 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 18 Apr 2024 16:33:44 +0800 Subject: [PATCH 105/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E8=8D=AF=E5=93=81=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 143 +++++++++++++++++---------- 1 file changed, 91 insertions(+), 52 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 03f9266..9d2d32b 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1279,7 +1279,6 @@ class PatientOrderService extends BaseService if ($order_prescription['prescription_status'] == 1) { return fail(HttpEnumCode::HTTP_ERROR, "处方未审核"); } - if ($order_prescription['prescription_status'] == 4) { return fail(HttpEnumCode::HTTP_ERROR, "处方已失效"); } @@ -1291,6 +1290,14 @@ class PatientOrderService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "处方未审核"); } + // 获取问诊订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_prescription['order_inquiry_id']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)){ + return fail(HttpEnumCode::HTTP_ERROR, "创建订单失败"); + } + // 检测收货地址 $params = array(); $params['user_id'] = $user_info['user_id']; @@ -1303,8 +1310,8 @@ class PatientOrderService extends BaseService $not_enough_product_ids = []; $amount_total = 0; - // 优惠卷商品数据 - $coupon_product_datas = array(); + // 商品数据 + $product_datas = array(); foreach ($product_ids as $product_id) { // 检测药品是否存在于处方中 @@ -1329,36 +1336,71 @@ class PatientOrderService extends BaseService if ($order_prescription_product['prescription_product_num'] > $product['ProductPlatformAmount']['stock']) { // 库存不足 $not_enough_product_ids[] = $product_id; - continue; } } // 获取订单金额 $amount_total = bcadd($amount_total, ($product['product_price'] * $order_prescription_product['prescription_product_num']), 2); - // 优惠卷商品数据 - $coupon_product_data = array(); + // 商品数据 $product['product_num'] = $order_prescription_product['prescription_product_num']; - $coupon_product_data = $product->toArray(); - $coupon_product_datas[] = $coupon_product_data; + $product_data = $product->toArray(); + $product_datas[] = $product_data; } + // 库存不足返回错误 if (!empty($not_enough_product_ids)) { return fail(HttpEnumCode::HTTP_ERROR, "存在库存不足商品", $not_enough_product_ids); } - // 定义优惠卷金额默认值 - $coupon_amount_total = 0; - - if (!empty($coupon_product_datas)) { - // 获取患者购药可用的优惠卷 - $userCouponService = new UserCouponService(); - $user_coupons = $userCouponService->getUserProductUsableCoupon($user_info['user_id'], $coupon_product_datas); - - // 获取可用优惠卷总金额 - $coupon_amount_total = $userCouponService->getCouponTotalPrice($user_coupons); + if (empty($product_datas)) { + return fail(); } + // 处理健康包赠送商品 + if ($order_inquiry['inquiry_type'] == 1 && $order_inquiry['inquiry_mode'] == 8){ + // 获取问诊订单关联服务包id + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); + if (empty($order_service_package_inquiry)){ + return fail(); + } + + // 此处不检测未支付的商品订单,在创建订单时会进行数量的扣减 + // 处理商品数量 + $OrderServicePackageService = new OrderServicePackageService(); + + $amount_total = 0; + foreach ($product_datas as &$product_data){ + // 获取服务包剩余药品数量 + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductRemainingQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id']); + + // 可用数量大于处方商品数量,此情况把商品价格置为0 + if ($remaining_quantity >= $product_data['product_num']){ + $product_data['product_price'] = 0; + } + + // 此处重新计算药品总金额 + $amount_total = bcadd( + $amount_total, + bcmul( + $product_data['product_price'], + $product_data['product_num'], + 2 + ), + 2 + ); + } + } + + // 获取患者购药可用的优惠卷 + $userCouponService = new UserCouponService(); + $user_coupons = $userCouponService->getUserProductUsableCoupon($user_info['user_id'], $product_datas); + + // 获取可用优惠卷总金额 + $coupon_amount_total = $userCouponService->getCouponTotalPrice($user_coupons); + // 处理运费数据 $app_env = config('app_env', 'prod'); if ($app_env != "dev") { @@ -1376,7 +1418,15 @@ class PatientOrderService extends BaseService } // 实际支付金额=商品总金额-优惠卷金额+运费金额 - $payment_amount_total = bcadd(bcsub($amount_total , $coupon_amount_total,2), $logistics_fee, 2); + $payment_amount_total = bcadd( + bcsub( + $amount_total , + $coupon_amount_total, + 2 + ), + $logistics_fee, + 2 + ); if ($app_env == "dev") { $payment_amount_total = 0.01; } @@ -1451,26 +1501,9 @@ class PatientOrderService extends BaseService } // 新增药品订单详情 - foreach ($product_ids as $product_id) { + foreach ($product_datas as $product_data) { $params = array(); - $params['order_prescription_id'] = $order_prescription['order_prescription_id']; - $params['product_id'] = $product_id; - $order_prescription_product = OrderPrescriptionProduct::getOne($params); - if (empty($order_prescription_product)) { - Db::rollBack(); - return fail(HttpEnumCode::HTTP_ERROR, "创建订单失败"); - } - - $params = array(); - $params['product_id'] = $product_id; - $product = Product::getOne($params); - if (empty($product)) { - Db::rollBack(); - return fail(HttpEnumCode::HTTP_ERROR, "处方存在未知药品"); - } - - $params = array(); - $params['product_platform_code'] = $product['product_platform_code']; + $params['product_platform_code'] = $product_data['product_platform_code']; $product_platform_amount = ProductPlatformAmount::getSharedLockOne($params); if (empty($product_platform_amount)) { Db::rollBack(); @@ -1481,14 +1514,14 @@ class PatientOrderService extends BaseService $data['order_product_id'] = $order_product['order_product_id']; $data['order_inquiry_id'] = $order_prescription['order_inquiry_id']; $data['order_prescription_id'] = $order_prescription['order_prescription_id']; - $data['product_id'] = $product_id; - $data['product_name'] = $order_prescription_product['product_name']; - $data['product_price'] = $product['product_price'] * $order_prescription_product['prescription_product_num']; - $data['product_platform_code'] = $product['product_platform_code']; - $data['amount'] = $order_prescription_product['prescription_product_num']; - $data['manufacturer'] = $order_prescription_product['manufacturer']; - $data['product_cover_img'] = $product['product_cover_img']; - $data['product_spec'] = $order_prescription_product['product_spec']; + $data['product_id'] = $product_data['product_id']; + $data['product_name'] = $product_data['product_name']; + $data['product_price'] = bcmul($product_data['product_price'],$product_data['product_num'],3); + $data['product_platform_code'] = $product_data['product_platform_code']; + $data['amount'] = $product_data['product_num']; + $data['manufacturer'] = $product_data['manufacturer']; + $data['product_cover_img'] = $product_data['product_cover_img']; + $data['product_spec'] = $product_data['product_spec']; $order_product_item = OrderProductItem::addOrderProductItem($data); if (empty($order_product_item)) { Db::rollBack(); @@ -1500,14 +1533,14 @@ class PatientOrderService extends BaseService $data['use_status'] = 1; $params = array(); - $params['prescription_product_id'] = $order_prescription_product['prescription_product_id']; + $params['prescription_product_id'] = $product_data['prescription_product_id']; OrderPrescriptionProduct::edit($params, $data); // 锁定库存 // 库存-1 $params = array(); $params['amount_id'] = $product_platform_amount['amount_id']; - ProductPlatformAmount::dec($params, 'stock', $order_prescription_product['prescription_product_num']); + ProductPlatformAmount::dec($params, 'stock', $product_data['product_num']); } // 修改处方为已使用 @@ -1556,13 +1589,18 @@ class PatientOrderService extends BaseService } } - // 增加至取消订单延迟队列 + // 增加至未支付取消订单延迟队列 + $time = 60 * 30; + if (\Hyperf\Config\config('app_env') == "dev"){ + $time = 60 * 5; + } + $data = array(); $data['order_no'] = (string)$order_product['order_product_no']; $data['order_type'] = 2; $message = new CancelUnpayOrdersDelayDirectProducer($data); - $message->setDelayMs(1000 * 60 * 30); + $message->setDelayMs(1000 * $time); $producer = $this->container->get(Producer::class); $res = $producer->produce($message); if (!$res) { @@ -1846,9 +1884,9 @@ class PatientOrderService extends BaseService // 获取服务包剩余药品数量 $remaining_quantity = $OrderServicePackageService->getOrderServiceProductRemainingQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id']); - // 可用数量大于处方商品数量,此情况把商品数量置为0 + // 可用数量大于处方商品数量,此情况把商品价格置为0 if ($remaining_quantity >= $product_data['product_num']){ - $product_data['product_num'] = 0; + $product_data['product_price'] = 0; } // 此处重新计算药品总金额 @@ -2872,6 +2910,7 @@ class PatientOrderService extends BaseService $fields = [ 'order_inquiry_id', 'inquiry_status', + 'created_at', ]; $params = array(); From be84b6500806b5783209597e31ee178ea2f56349 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 18 Apr 2024 16:55:18 +0800 Subject: [PATCH 106/274] 1 --- app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php b/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php index 5c137af..eebd6e9 100644 --- a/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php +++ b/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php @@ -87,7 +87,7 @@ class UserCouponExpiredDelayDirectConsumer extends ConsumerMessage $res = $producer->produce($message); if (!$res) { Log::getInstance("queue-UserCouponExpired")->error("未到过期时间,重新添加队列失败"); - return Result::REQUEUE; + return Result::DROP; } return Result::DROP; From 2a694d55f629395c4db12a31a3ebb2e881ce67a4 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 18 Apr 2024 16:57:34 +0800 Subject: [PATCH 107/274] 12 --- app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php b/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php index eebd6e9..f0a9341 100644 --- a/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php +++ b/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php @@ -42,6 +42,8 @@ class UserCouponExpiredDelayDirectConsumer extends ConsumerMessage { Log::getInstance("queue-UserCouponExpired")->info("开始:" . json_encode($data, JSON_UNESCAPED_UNICODE)); + return Result::DROP; + // 检测参数 if (!isset($data['user_coupon_id'])){ Log::getInstance("queue-UserCouponExpired")->error("入参错误"); @@ -80,14 +82,13 @@ class UserCouponExpiredDelayDirectConsumer extends ConsumerMessage $queue_data = array(); $queue_data['user_coupon_id'] = $user_coupon['user_coupon_id']; - $message = new UserCouponExpiredDelayDirectProducer($queue_data); $message->setDelayMs(1000 * $time); $producer = $this->container->get(Producer::class); $res = $producer->produce($message); if (!$res) { Log::getInstance("queue-UserCouponExpired")->error("未到过期时间,重新添加队列失败"); - return Result::DROP; + return Result::REQUEUE; } return Result::DROP; From 95cf4e47d5dec293495af1b3b321c3e05e892fc3 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 18 Apr 2024 17:07:29 +0800 Subject: [PATCH 108/274] 2 --- app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php | 2 -- app/Services/CouponService.php | 5 ++++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php b/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php index f0a9341..a4c7efe 100644 --- a/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php +++ b/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php @@ -42,8 +42,6 @@ class UserCouponExpiredDelayDirectConsumer extends ConsumerMessage { Log::getInstance("queue-UserCouponExpired")->info("开始:" . json_encode($data, JSON_UNESCAPED_UNICODE)); - return Result::DROP; - // 检测参数 if (!isset($data['user_coupon_id'])){ Log::getInstance("queue-UserCouponExpired")->error("入参错误"); diff --git a/app/Services/CouponService.php b/app/Services/CouponService.php index cc31006..14cbb23 100644 --- a/app/Services/CouponService.php +++ b/app/Services/CouponService.php @@ -133,12 +133,15 @@ class CouponService extends BaseService } // 添加优惠卷过期队列 - $valid_end_time = strtotime($user_coupon['valid_start_time']); + $valid_end_time = strtotime($user_coupon['valid_end_time']); $data = array(); $data['user_coupon_id'] = $user_coupon['user_coupon_id']; $time = $valid_end_time - time(); + if ($time < 0){ + return false; + } $message = new UserCouponExpiredDelayDirectProducer($data); $message->setDelayMs(1000 * $time); $producer = $this->container->get(Producer::class); From 98cc84a75d87b69f2251b4f82864c68905b0eba1 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 18 Apr 2024 17:19:40 +0800 Subject: [PATCH 109/274] =?UTF-8?q?=E8=8D=AF=E5=93=81=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E3=80=81=E5=88=9B=E5=BB=BA=E8=8D=AF=E5=93=81?= =?UTF-8?q?=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/PatientOrderController.php | 4 +- app/Request/PatientOrderRequest.php | 1 + app/Services/PatientOrderService.php | 329 +++++++++++++++------- 3 files changed, 235 insertions(+), 99 deletions(-) diff --git a/app/Controller/PatientOrderController.php b/app/Controller/PatientOrderController.php index 83d543d..dc4eb5e 100644 --- a/app/Controller/PatientOrderController.php +++ b/app/Controller/PatientOrderController.php @@ -108,6 +108,8 @@ class PatientOrderController extends AbstractController /** * 药品订单取消支付 * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface */ public function putPatientProductOrderCancelPay(): ResponseInterface { @@ -147,7 +149,7 @@ class PatientOrderController extends AbstractController * 模拟支付成功-金额为0时使用 * @return ResponseInterface * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface|GuzzleException + * @throws NotFoundExceptionInterface */ public function addPatientOrderPay(): ResponseInterface { diff --git a/app/Request/PatientOrderRequest.php b/app/Request/PatientOrderRequest.php index ab7109a..d561500 100644 --- a/app/Request/PatientOrderRequest.php +++ b/app/Request/PatientOrderRequest.php @@ -24,6 +24,7 @@ class PatientOrderRequest extends FormRequest "order_no"// 订单编号 ], 'addPatientOrderPay' => [ // 模拟支付成功-金额为0时使用 + "order_type", // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) "order_no"// 订单编号 ], 'addPatientProductOrder' => [ // 创建药品订单 diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 9d2d32b..c1f4d61 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -6,9 +6,11 @@ use App\Amqp\Producer\AssignDoctorDelayDirectProducer; use App\Amqp\Producer\CancelUnInquiryOrdersDelayDirectProducer; use App\Amqp\Producer\CancelUnpayOrdersDelayDirectProducer; use App\Amqp\Producer\DoctorNotYetInquiryDelayDirectProducer; +use App\Amqp\Producer\GrantUserCouponDelayDirectProducer; use App\Constants\DoctorTitleCode; use App\Constants\HttpEnumCode; use App\Model\BasicLogisticsCompany; +use App\Model\Coupon; use App\Model\DetectionProject; use App\Model\DiseaseClass; use App\Model\DoctorInquiryConfig; @@ -654,6 +656,8 @@ class PatientOrderService extends BaseService /** * 药品订单取消支付 * @return array + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface */ public function putPatientProductOrderCancelPay(): array { @@ -661,8 +665,18 @@ class PatientOrderService extends BaseService $order_product_id = $this->request->route('order_product_id'); - Db::beginTransaction(); + $redis = $this->container->get(Redis::class); + $redis_key = "order_product_lock_" . $order_product_id; + $redis_lock = $redis->setnx($redis_key, 1); + if (!$redis_lock) { + // 设置失败,表示已经设置该值 + return fail(HttpEnumCode::HTTP_SUCCESS, "请您稍后重试"); + } + // 设置过期时间 + $redis->expire($redis_key, 3); + + Db::beginTransaction(); try { // 获取药品订单数据 $params = array(); @@ -1126,123 +1140,242 @@ class PatientOrderService extends BaseService { $user_info = $this->request->getAttribute("userInfo") ?? []; + $order_type = $this->request->input('order_type'); $order_no = $this->request->input('order_no'); Db::beginTransaction(); try { - // 问诊订单 - $params = array(); - $params['inquiry_no'] = $order_no; - $params['patient_id'] = $user_info['client_user_id']; - $order_inquiry = OrderInquiry::getOne($params); - if (empty($order_inquiry)) { - Db::rollBack(); - return fail(HttpEnumCode::HTTP_ERROR, "非法订单"); - } + switch ($order_type) { + case 1: // 问诊订单 + $params = array(); + $params['inquiry_no'] = $order_no; + $params['patient_id'] = $user_info['client_user_id']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "非法订单"); + } - // 获取病例数据 - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $order_inquiry_case = OrderInquiryCase::getOne($params); - if (empty($order_inquiry_case)) { - Db::rollBack(); - return fail(HttpEnumCode::HTTP_ERROR, "患者病例错误"); - } + // 获取病例数据 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "患者病例错误"); + } - // 验证订单状态 - if ($order_inquiry['inquiry_status'] != 1) { - Db::rollBack(); - // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - return fail(HttpEnumCode::HTTP_ERROR, "支付失败"); - } + // 验证订单状态 + if ($order_inquiry['inquiry_status'] != 1) { + // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "支付失败"); + } - // 验证支付金额 - if ($order_inquiry['payment_amount_total'] != 0) { - Db::rollBack(); - return fail(HttpEnumCode::HTTP_ERROR, "支付失败"); - } + // 验证支付金额 + if ($order_inquiry['payment_amount_total'] != 0) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "支付失败"); + } - $generator = $this->container->get(IdGeneratorInterface::class); - $escrow_trade_no = "GD" . $generator->generate(); // 第三方支付流水号 - // 修改问诊订单支付状态 - $data = array(); - $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) - $data['inquiry_pay_status'] = 2; - if ($order_inquiry['inquiry_type'] == 1 || $order_inquiry['inquiry_type'] == 3) { - // 专家-公益 - $data['inquiry_status'] = 3;// 3:待接诊 - } elseif ($order_inquiry['inquiry_type'] == 2 || $order_inquiry['inquiry_type'] == 4) { - // 快速-购药 - $data['inquiry_status'] = 2;// 2:待分配 - } + $generator = $this->container->get(IdGeneratorInterface::class); + $escrow_trade_no = "GD" . $generator->generate(); // 第三方支付流水号 - $data['escrow_trade_no'] = $escrow_trade_no; - $data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间 - $data['updated_at'] = date('Y-m-d H:i:s', time()); - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - OrderInquiry::edit($params, $data); + // 修改问诊订单支付状态 + $data = array(); + $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) + $data['inquiry_pay_status'] = 2; + if ($order_inquiry['inquiry_type'] == 1 || $order_inquiry['inquiry_type'] == 3) { + // 专家-公益 + $data['inquiry_status'] = 3;// 3:待接诊 + } elseif ($order_inquiry['inquiry_type'] == 2 || $order_inquiry['inquiry_type'] == 4) { + // 快速-购药 + $data['inquiry_status'] = 2;// 2:待分配 + } - // 修改订单表支付状态 - $data = array(); - $data['pay_status'] = 2; - $data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间 - $data['escrow_trade_no'] = $escrow_trade_no; - $data['updated_at'] = date('Y-m-d H:i:s', time()); + $data['escrow_trade_no'] = $escrow_trade_no; + $data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间 + $data['updated_at'] = date('Y-m-d H:i:s', time()); + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + OrderInquiry::edit($params, $data); - $params = array(); - $params['order_no'] = $order_inquiry['inquiry_no']; - Order::edit($params,$data); + // 修改订单表支付状态 + $data = array(); + $data['pay_status'] = 2; + $data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间 + $data['escrow_trade_no'] = $escrow_trade_no; + $data['updated_at'] = date('Y-m-d H:i:s', time()); - // 处理队列 - if ($order_inquiry['inquiry_type'] == 2 || $order_inquiry['inquiry_type'] == 4) { - // 快速-购药 - // 加入分配医生队列 - $data = array(); - $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $params = array(); + $params['order_no'] = $order_inquiry['inquiry_no']; + Order::edit($params,$data); - $message = new AssignDoctorDelayDirectProducer($data); - $message->setDelayMs(1000 * 5); - $producer = $this->container->get(Producer::class); - $res = $producer->produce($message); - if (!$res) { + // 加入分配医生队列-快速-购药 + if ($order_inquiry['inquiry_type'] == 2 || $order_inquiry['inquiry_type'] == 4) { + $data = array(); + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + + $message = new AssignDoctorDelayDirectProducer($data); + $message->setDelayMs(1000 * 5); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "分配医生失败"); + } + } + + // 发送首条im消息-专家-公益 + if ($order_inquiry['inquiry_type'] == 1 || $order_inquiry['inquiry_type'] == 3) { + // 获取订单医生数据 + $params = array(); + $params['doctor_id'] = $order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "医生数据错误"); + } + + // 发送im消息 + $imService = new ImService(); + + // 等待医生接诊 + $imService->waitDoctorInquiry($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id']); + + // 发送站内、订阅失败发送短信消息-医生有新问诊 + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush->doctorHaveNewInquiry(); + + // 加入xx时间未接诊通知队列 + $data = array(); + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + + $time = 1000 * 60 * 60 * 2; + $message = new DoctorNotYetInquiryDelayDirectProducer($data); + $message->setDelayMs($time); + $producer = $this->container->get(Producer::class); + $producer->produce($message); + } + + break; + case 2: // 药品订单 + $params = array(); + $params['order_product_no'] = $order_no; + $params['patient_id'] = $user_info['client_user_id']; + $order_product = OrderProduct::getOne($params); + if (empty($order_product)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "非法订单"); + } + + // 验证订单状态 + if ($order_product['order_product_status'] != 1) { + // 订单状态(1:待支付 2:待发货 3:已发货 4:已签收 5:已取消) + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "支付失败"); + } + + // 验证支付金额 + if ($order_product['payment_amount_total'] != 0) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "支付失败"); + } + + $generator = $this->container->get(IdGeneratorInterface::class); + $escrow_trade_no = "GD" . $generator->generate(); // 第三方支付流水号 + + // 修改药品订单支付状态 + $data = array(); + $data['order_product_status'] = 2; + $data['pay_status'] = 2; + $data['pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) + $data['escrow_trade_no'] = $escrow_trade_no; + $data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间 + $data['updated_at'] = date('Y-m-d H:i:s', time()); + + $params = array(); + $params['order_product_id'] = $order_product['order_product_id']; + OrderProduct::edit($params, $data); + + // 修改订单表支付状态 + $data = array(); + $data['pay_status'] = 2; + $data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间 + $data['escrow_trade_no'] = $escrow_trade_no; + $data['updated_at'] = date('Y-m-d H:i:s', time()); + + $params = array(); + $params['order_no'] = $order_product['order_product_no']; + Order::edit($params,$data); + + try { + if ($order_product['coupon_amount_total'] > 0){ + // 获取药品订单优惠卷数据 + $params = array(); + $params['order_product_id'] = $order_product['order_product_id']; + $order_product_coupons = OrderProductCoupon::getList($params); + if (!empty($order_product_coupons)){ + foreach ($order_product_coupons as $order_product_coupon){ + // 获取用户优惠卷数据 + $params = array(); + $params['user_coupon_id'] = $order_product_coupon['user_coupon_id']; + $user_coupon = UserCoupon::getOne($params); + if (!empty($user_coupon)){ + // 获取优惠卷数据 + $params = array(); + $params['coupon_id'] = $user_coupon['coupon_id']; + $coupon = Coupon::getOne($params); + if (!empty($coupon)){ + if ($coupon['reissue_interval_days'] > 0){ + $data = array(); + $data['coupon_id'] = $coupon['coupon_id']; + $data['user_id'] = $user_coupon['user_id']; + + $time = $coupon['reissue_interval_days'] * 24 * 60 * 60 * 1000; + $message = new GrantUserCouponDelayDirectProducer($data); + $message->setDelayMs($time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + Log::getInstance("PatientOrderService-addPatientOrderPay")->error("再次发放优惠卷失败"); + } + + Log::getInstance("PatientOrderService-addPatientOrderPay")->info("再次发放优惠卷成功"); + } + } + } + } + } + } + }catch (\Throwable $e){ + // 此处异常不做处理 + Log::getInstance("PatientOrderService-addPatientOrderPay")->error($e->getMessage()); + } + + break; + case 3: // 检测订单 Db::rollBack(); - return fail(HttpEnumCode::HTTP_ERROR, "分配医生失败"); - } - } elseif ($order_inquiry['inquiry_type'] == 1 || $order_inquiry['inquiry_type'] == 3) { - // 专家-公益,发送im消息 - // 获取订单医生数据 - $params = array(); - $params['doctor_id'] = $order_inquiry['doctor_id']; - $user_doctor = UserDoctor::getOne($params); - if (empty($user_doctor)) { + return fail(HttpEnumCode::HTTP_ERROR, "非法订单类型"); + + break; + case 4: // 健康包订单 Db::rollBack(); - return fail(HttpEnumCode::HTTP_ERROR, "医生数据错误"); - } + return fail(HttpEnumCode::HTTP_ERROR, "非法订单类型"); - // 发送im消息 - $imService = new ImService(); + break; + case 5: // 随访包订单 - // 等待医生接诊 - $imService->waitDoctorInquiry($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id']); - - // 发送站内、订阅失败发送短信消息-医生有新问诊 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['order_inquiry_id']); - $MessagePush->doctorHaveNewInquiry(); - - // 加入xx时间未接诊通知队列 - $data = array(); - $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - - $time = 1000 * 60 * 60 * 2; - $message = new DoctorNotYetInquiryDelayDirectProducer($data); - $message->setDelayMs($time); - $producer = $this->container->get(Producer::class); - $producer->produce($message); + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "非法订单类型"); + break; + default: + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "支付失败"); } Db::commit(); - } catch (\Exception $e) { + }catch (\Throwable $e){ Db::rollBack(); return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage()); } From 709a7abe0b3c648b28495113d70c046afa08a283 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 18 Apr 2024 17:24:22 +0800 Subject: [PATCH 110/274] =?UTF-8?q?=E8=8D=AF=E5=93=81=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E3=80=81=E5=88=9B=E5=BB=BA=E8=8D=AF=E5=93=81?= =?UTF-8?q?=E8=AE=A2=E5=8D=951?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index c1f4d61..0131d5b 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -948,9 +948,8 @@ class PatientOrderService extends BaseService } // 优惠卷商品数据 - $coupon_product_data = array(); $product['product_num'] = $order_prescription_product['prescription_product_num']; - $coupon_product_data = $product; + $coupon_product_data = $product->toArray(); $coupon_product_datas[] = $coupon_product_data; } @@ -1131,10 +1130,8 @@ class PatientOrderService extends BaseService } /** - *模拟支付成功-金额为0时使用-问诊订单 + *模拟支付成功-金额为0时使用 * @return array - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function addPatientOrderPay(): array { @@ -1561,10 +1558,12 @@ class PatientOrderService extends BaseService 2 ); if ($app_env == "dev") { - $payment_amount_total = 0.01; + if ($payment_amount_total > 0){ + $payment_amount_total = 0.01; + } } - if ($payment_amount_total <= 0){ + if ($payment_amount_total < 0){ return fail(HttpEnumCode::SERVER_ERROR); } From 678eb11eb87295820ccb4d7131b1f30f8b81d290 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 18 Apr 2024 17:34:01 +0800 Subject: [PATCH 111/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=97=B6=E9=97=B4=E4=B8=BA72=E5=B0=8F?= =?UTF-8?q?=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/MessagePush.php | 2 +- app/Services/OrderServicePackageService.php | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index 8a4bd02..f3f54eb 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -226,7 +226,7 @@ class MessagePush extends BaseService } /** - * 患者-通知患者医生已接诊----- + * 患者-通知患者医生已接诊 * 站内、订阅、短信 * @return void */ diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index e4fd4e8..5bc717f 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -759,6 +759,7 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); } + // 处理数据库业务 Db::beginTransaction(); try { $generator = $this->container->get(IdGeneratorInterface::class); @@ -946,7 +947,7 @@ class OrderServicePackageService extends BaseService } // 加入未接诊取消订单延迟队列 - $time = 60 * 60 * 24; + $time = 60 * 60 * 72; if (\Hyperf\Config\config('app_env') == "dev"){ $time = 60 * 10; } @@ -969,6 +970,7 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); } + // 处理消息业务 try { // 获取订单医生数据 $params = array(); From 2aa1858c4c5582274c046c34618c729a6cad5487 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 19 Apr 2024 09:26:39 +0800 Subject: [PATCH 112/274] =?UTF-8?q?=E6=9D=83=E7=9B=8A=E8=AF=A6=E6=83=85?= =?UTF-8?q?=EF=BC=8C=E8=AE=A2=E5=8D=95=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 0131d5b..cad2ff0 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -3037,7 +3037,7 @@ class PatientOrderService extends BaseService $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; $order_service_package_inquirys = OrderServicePackageInquiry::getList($params); - foreach ($order_service_package_inquirys as $order_service_package_inquiry){ + foreach ($order_service_package_inquirys as $key => $order_service_package_inquiry){ // 获取问诊订单数据 $fields = [ 'order_inquiry_id', @@ -3049,7 +3049,7 @@ class PatientOrderService extends BaseService $params['order_inquiry_id'] = $order_service_package_inquiry['order_inquiry_id']; $order_inquiry = OrderInquiry::getOne($params,$fields); if (!empty($order_inquiry)){ - $result['order_inquiry'] = $order_inquiry->toArray(); + $result['order_inquiry'][$key] = $order_inquiry->toArray(); } } } From 0ddd0d5eba772cab938c5be8261fabed73c1a88c Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 19 Apr 2024 09:55:46 +0800 Subject: [PATCH 113/274] 1 --- app/Services/PatientOrderService.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index cad2ff0..b2d8a4b 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1665,7 +1665,8 @@ class PatientOrderService extends BaseService $data['use_status'] = 1; $params = array(); - $params['prescription_product_id'] = $product_data['prescription_product_id']; + $params['order_prescription_id'] = $order_prescription['order_prescription_id']; + $params['product_id'] = $product_data['product_id']; OrderPrescriptionProduct::edit($params, $data); // 锁定库存 From e92ccdcc5ea1127e6213420c2971c0d9861b512f Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 19 Apr 2024 10:24:55 +0800 Subject: [PATCH 114/274] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=8C=BB=E7=94=9F=E6=9C=89=E6=96=B0=E6=9C=8D=E5=8A=A1=E5=8C=85?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=9A=84=E6=B6=88=E6=81=AF=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/CallBackController.php | 6 +- app/Services/MessagePush.php | 218 ++++++++++++++++-- app/Services/MessagePushService.php | 9 +- .../MessagePushServicePackageService.php | 80 ++++++- app/Services/OrderServicePackageService.php | 27 ++- 5 files changed, 302 insertions(+), 38 deletions(-) diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index 07cf5ea..b6f6a76 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -2784,9 +2784,9 @@ class CallBackController extends AbstractController // 等待医生接诊 $imService->waitDoctorInquiry($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id']); - // 发送站内、订阅失败发送短信消息-医生有新问诊 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['order_inquiry_id']); - $MessagePush->doctorHaveNewInquiry(); + // 发送站内、订阅失败发送短信消息-医生有新服务包订单 + $MessagePush = new MessagePush($user_doctor['user_id'], $order_service_package['order_service_no']); + $MessagePush->doctorHaveNewServicePackage(); // 加入xx时间未接诊通知队列 $data = array(); diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index f3f54eb..14f99f8 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -10,6 +10,7 @@ use App\Exception\BusinessException; use App\Model\BasicDetectionOrgan; use App\Model\DetectionProject; use App\Model\DoctorWithdrawal; +use App\Model\Order; use App\Model\OrderDetection; use App\Model\OrderInquiry; use App\Model\OrderInquiryCase; @@ -17,6 +18,8 @@ use App\Model\OrderInquiryCoupon; use App\Model\OrderPrescription; use App\Model\OrderProduct; use App\Model\OrderProductItem; +use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageInquiry; use App\Model\Product; use App\Model\SystemInquiryConfig; use App\Model\User; @@ -33,33 +36,97 @@ use Psr\Container\NotFoundExceptionInterface; */ class MessagePush extends BaseService { - // 用户数据(存在被推送者时存在,否则为空) - public array $user = []; + // 被推送者用户数据(存在被推送者时存在,否则为空) + public ?array $user = null; - // 问诊订单数据(可为空) - public array $order_inquiry = []; + // 订单数据 + public ?array $order = null; + + // 服务包订单数据 + public ?array $order_service_package = null; + + // 问诊订单数据 + public ?array $order_inquiry = null; + + // 药品订单数据 + public ?array $order_product = null; + + // 检测订单数据 + public ?array $order_detection = null; /** * @param string $to_user_id 用户id(存在被推送者时存在,否则为空) - * @param string $order_inquiry_id 问诊订单id + * @param string $order_no 问诊订单编号 */ - public function __construct(string $to_user_id = "", string $order_inquiry_id = "") + public function __construct(string $to_user_id, string $order_no) { - if (!empty($to_user_id)) { - $params = array(); - $params['user_id'] = $to_user_id; - $user = User::getOne($params); - if (!empty($user)) { - $this->user = $user->toArray(); - } + $params = array(); + $params['user_id'] = $to_user_id; + $user = User::getOne($params); + if (!empty($user)) { + $this->user = $user->toArray(); } - if (!empty($order_inquiry_id)) { - $params = array(); - $params['order_inquiry_id'] = $order_inquiry_id; - $order_inquiry = OrderInquiry::getOne($params); - if (!empty($order_inquiry)) { - $this->order_inquiry = $order_inquiry->toArray(); + // 获取订单数据 + $params = array(); + $params['order_no'] = $order_no; + $order = Order::getOne($params); + if (!empty($order)){ + $this->order = $order->toArray(); + + // 判断订单类型 + switch ($order['order_type']) { + case 1: // 问诊订单 + $params = array(); + $params['inquiry_no'] = $order['order_no']; + $order_inquiry = OrderInquiry::getOne($params); + if (!empty($order_inquiry)) { + $this->order_inquiry = $order_inquiry->toArray(); + } + + break; + case 2: // 药品订单 + $params = array(); + $params['order_product_no'] = $order['order_no']; + $order_product = OrderProduct::getOne($params); + if (!empty($order_product)) { + $this->order_product = $order_product->toArray(); + } + + break; + case 3: // 检测订单 + $params = array(); + $params['detection_no'] = $order['order_no']; + $order_detection = OrderDetection::getOne($params); + if (!empty($order_detection)) { + $this->order_detection = $order_detection->toArray(); + } + + break; + case 4: // 健康包订单 + case 5: // 随访包订单 + $params = array(); + $params['inquiry_no'] = $order_no; + $order_inquiry = OrderInquiry::getOne($params); + if (!empty($order_inquiry)) { + $this->order_inquiry = $order_inquiry->toArray(); + + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); + if (!empty($order_service_package_inquiry)){ + $params = array(); + $params['order_service_no'] = $order_service_package_inquiry['order_service_no']; + $order_service_package = OrderServicePackage::getOne($params); + if (!empty($order_service_package)){ + $this->order_service_package = $order_service_package->toArray(); + } + } + } + + break; + default: + throw new BusinessException("订单类型错误"); } } } @@ -2586,4 +2653,117 @@ class MessagePush extends BaseService Log::getInstance("MessagePush")->error("错误:加入推送队列失败" . $e->getMessage()); } } + + /** + * 医生-医生有新服务包订单 + * 站内、订阅失败发送短信 + * @return void + */ + public function doctorHaveNewServicePackage(): void + { + try { + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("错误:医生数据为空"); + return; + } + + // 获取问诊订单关联病例 + $params = array(); + $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)) { + Log::getInstance("MessagePush")->error("病例数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 1; + $data['inquiry_type'] = $this->order_inquiry['inquiry_type']; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "您有新的{$order_type}服务等待接诊,请及时处理。"; + $data['notice_title'] = "您有新的{$order_type}服务等待接诊,请及时处理。"; + $data['notice_content'] = "您有新的{$order_type}服务等待接诊,请及时处理。"; + $data['link_type'] = 3; // 问诊消息列表页 + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 订阅 + // 问诊内容-病情主诉 + $disease_desc = $order_inquiry_case['disease_desc']; + if (!empty($disease_desc)) { + if (strlen($disease_desc) > 15) { + $disease_desc = mb_substr($disease_desc, 0, 15); + if ($disease_desc) { + $disease_desc = $disease_desc . "..."; + } + } + } + + if ($this->order_inquiry['inquiry_type'] == 1 || $this->order_inquiry['inquiry_type'] == 3) { + // 专家、公益 + $thing6 = "24小时内未接诊,平台将自动取消问诊"; + } else { + // 快速、购药 + $thing6 = "5分钟内未接诊,平台将自动取消问诊"; + } + + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "G1RIs0RYqsTQ2CuPQWalIMyb6_deuEEbJfajfhGvNzc";//咨询提醒 + $sub_data['params']['page'] = "Pages/yishi/wenzhen_v2/wenzhen"; + $sub_data['params']['data'] = [ + "thing1" => "您有一个{$order_type}服务等待接诊",// 提醒内容 + "name2" => (string)$this->order_inquiry['patient_name'],// 患者姓名 + "thing4" => (string)$disease_desc,// 病情描述 + "thing6" => $thing6,// 提示说明 + "thing5" => "72小时内未接诊,平台将自送取消服务",// 咨询内容 + ]; + + // 短信 + $sms_data = array(); + $sms_data['template_code'] = "SMS_272015117"; + $sms_data['scene_desc'] = "医生接到新服务包服务"; + $sms_data['phone'] = $this->user['mobile']; + $sms_data['user_id'] = $this->user['user_id']; + + $template_param = array(); + $template_param['type'] = $order_type; + $sms_data['template_param'] = $template_param; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = $sms_data; + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error( $e->getMessage()); + } + } + } \ No newline at end of file diff --git a/app/Services/MessagePushService.php b/app/Services/MessagePushService.php index dd0321c..54e4bd1 100644 --- a/app/Services/MessagePushService.php +++ b/app/Services/MessagePushService.php @@ -31,7 +31,7 @@ class MessagePushService extends BaseService } if ($order['order_type'] == 4 || $order['order_type'] == 5){ - $this->strategy = new MessagePushServicePackageService(); + $this->strategy = new MessagePushServicePackageService($order_no); }else{ $this->strategy = new MessagePushInquiryService(); } @@ -48,4 +48,11 @@ class MessagePushService extends BaseService { $this->strategy->patientDoctorAcceptedInquiry(); } + + // 医生-服务包待接诊 + // 仅限于患者购买服务包后,首次发起问诊后使用 + public function doctorWaitInquiry(): void + { + $this->strategy->doctorWaitInquiry(); + } } \ No newline at end of file diff --git a/app/Services/MessagePushServicePackageService.php b/app/Services/MessagePushServicePackageService.php index 79bdf9e..a8258b6 100644 --- a/app/Services/MessagePushServicePackageService.php +++ b/app/Services/MessagePushServicePackageService.php @@ -28,6 +28,26 @@ class MessagePushServicePackageService extends BaseService // 订单数据 public ?array $order = null; + // 服务包订单数据 + public ?array $order_service_package = null; + + // 问诊订单数据 + public ?array $order_inquiry = null; + + public function __construct(string $order_no){ + // 获取订单数据 + $params = array(); + $params['order_service_no'] = $order_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + throw new BusinessException("订单数据错误"); + } + + $this->order_service_package = $order_service_package->toArray(); + + $params = array(); + } + /** * 患者-通知患者医生已接诊 * @return void @@ -54,15 +74,6 @@ class MessagePushServicePackageService extends BaseService } // 站内 - // 获取服务包订单 - $params = array(); - $params['order_service_no'] = $this->order['order_no']; - $order_service_package = OrderServicePackage::getOne($params); - if (empty($order_service_package)){ - Log::getInstance("MessagePushServicePackageService-patientDoctorAcceptedInquiry")->error("服务包订单数据为空"); - return; - } - // 获取服务包订单详情 $params = array(); $params['order_service_no'] = $this->order['order_no']; @@ -73,13 +84,13 @@ class MessagePushServicePackageService extends BaseService } // 转换服务包订单类型为汉字 - $order_type = orderServiceTypeToString($order_service_package['order_service_type']); + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); // 转换每月次数为汉字 $monthly_frequency = monthlyFrequencyToString($order_service_package_detail['monthly_frequency']); - $start_time = date('Y年m月d日 H时i分',strtotime($order_service_package['start_time'])); - $finish_time = date('Y年m月d日 H时i分',strtotime($order_service_package['finish_time'])); + $start_time = date('Y年m月d日 H时i分',strtotime($this->order_service_package['start_time'])); + $finish_time = date('Y年m月d日 H时i分',strtotime($this->order_service_package['finish_time'])); // 站内 $data = array(); @@ -136,4 +147,49 @@ class MessagePushServicePackageService extends BaseService Log::getInstance("MessagePushServicePackageService-patientDoctorAcceptedInquiry")->error($e->getMessage()); } } + + // 医生-服务包待接诊 + // 仅限于患者购买服务包后,首次发起问诊后使用 + public function doctorWaitInquiry() + { + try { + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePushServicePackageService-doctorWaitInquiry")->error("医生数据为空"); + return; + } + + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 1; + $data['inquiry_type'] = 1; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "您有新的问诊咨询,请及时处理。"; + $data['notice_title'] = "您有新的问诊咨询,请及时处理。"; + $data['notice_content'] = "您有新的问诊咨询,请及时处理。"; + $data['link_type'] = 3; // 问诊消息列表页 + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error("错误:加入站内推送队列失败" . json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + }catch (\Throwable $e){ + Log::getInstance("MessagePushServicePackageService-doctorWaitInquiry")->error($e->getMessage()); + } + } } \ No newline at end of file diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 5bc717f..a35d557 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -986,9 +986,9 @@ class OrderServicePackageService extends BaseService // 等待医生接诊 $imService->waitDoctorInquiry($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id']); - // 发送站内、订阅失败发送短信消息-医生有新问诊 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['order_inquiry_id']); - $MessagePush->doctorHaveNewInquiry(); + // 发送站内、订阅失败发送短信消息-医生有新服务包订单 + $MessagePush = new MessagePush($user_doctor['user_id'], $order_service_package['order_service_no']); + $MessagePush->doctorHaveNewServicePackage(); // 加入xx时间未接诊通知队列 $data = array(); @@ -1282,4 +1282,25 @@ class OrderServicePackageService extends BaseService return $remaining_quantity; } + + /** + * 检测问诊是否服务包首次问诊 + * @param string|int $order_no + * @return bool + */ + public function isFirstInquiryServicePackage(string|int $order_no): bool + { + $params = array(); + $params['order_service_no'] = $order_no; + $order_service_package_inquiry = OrderServicePackageInquiry::getList($params); + if (empty($order_service_package_inquiry)){ + return true; + } + + if (count($order_service_package_inquiry) == 1){ + return true; + } + + return false; + } } \ No newline at end of file From 5c0bf128965a1cbe36fa7baf1f51272b5b9ec866 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 19 Apr 2024 15:46:38 +0800 Subject: [PATCH 115/274] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=AB=99=E5=86=85?= =?UTF-8?q?=E3=80=81=E7=9F=AD=E4=BF=A1=E8=AE=A2=E9=98=85=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=8E=A8=E9=80=81=EF=BC=8C=E4=BF=AE=E6=94=B9=E6=89=80=E6=9C=89?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=8E=A8=E9=80=81=E5=85=A5=E5=8F=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AssignDoctorDelayDirectConsumer.php | 6 +- .../Consumer/AssignPharmacistConsumer.php | 24 +- ...AutoCompleteInquiryDelayDirectConsumer.php | 4 +- ...pleteServicePackageDelayDirectConsumer.php | 29 + ...oPharmacistCaVerifyDelayDirectConsumer.php | 8 +- ...ncelUnInquiryOrdersDelayDirectConsumer.php | 31 +- ...DoctorNotYetInquiryDelayDirectConsumer.php | 28 +- app/Controller/CallBackController.php | 28 +- app/Services/InquiryService.php | 6 +- app/Services/MessagePush.php | 1070 +++++++++++++++-- app/Services/OrderPrescriptionService.php | 4 +- app/Services/OrderServicePackageService.php | 66 +- app/Services/PatientOrderService.php | 18 +- app/Services/UserDoctorService.php | 34 +- app/Services/UserPharmacistService.php | 6 +- app/Services/UserService.php | 11 +- 16 files changed, 1240 insertions(+), 133 deletions(-) diff --git a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php index 340a651..0ede303 100644 --- a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php @@ -129,7 +129,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage try { // 患者-分配医生失败-订阅 - $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); $MessagePush->assignDoctorFail(); }catch (\Exception $e){ Log::getInstance("queue-AssignDoctor")->error( $e->getMessage()); @@ -176,7 +176,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage try { // 患者-分配医生失败-订阅 - $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); $MessagePush->assignDoctorFail(); }catch (\Exception $e){ Log::getInstance("queue-AssignDoctor")->error($e->getMessage()); @@ -290,7 +290,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage $imService->waitDoctorInquiry($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']); // 医生-医生有新问诊 站内、订阅失败发送短信 - $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['inquiry_no']); $MessagePush->doctorHaveNewInquiry(); // 加入xx时间未接诊通知队列 diff --git a/app/Amqp/Consumer/AssignPharmacistConsumer.php b/app/Amqp/Consumer/AssignPharmacistConsumer.php index d5c76ac..a9aefcb 100644 --- a/app/Amqp/Consumer/AssignPharmacistConsumer.php +++ b/app/Amqp/Consumer/AssignPharmacistConsumer.php @@ -73,6 +73,16 @@ class AssignPharmacistConsumer extends ConsumerMessage return Result::ACK;// 销毁 } + // 获取问诊订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_prescription['order_inquiry_id']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + Db::rollBack(); + Log::getInstance()->error("分配药师队列执行结束:缺少问诊订单数据"); + return Result::ACK;// 销毁 + } + Db::beginTransaction(); try { // 分配药师 @@ -84,7 +94,7 @@ class AssignPharmacistConsumer extends ConsumerMessage Log::getInstance()->error("分配药师队列执行失败:药师数据错误"); // 分配失败,按照驳回处理 - $this->reject($data['order_prescription_id'], $user_doctor['user_id'], $user_patient['user_id'], $order_prescription['order_inquiry_id']); + $this->reject($data['order_prescription_id'], $user_doctor['user_id'], $user_patient['user_id'], $order_inquiry['inquiry_no']); return Result::DROP;// 销毁 } @@ -103,7 +113,7 @@ class AssignPharmacistConsumer extends ConsumerMessage Log::getInstance()->error("分配药师队列执行失败原因:" . $e->getMessage()); // 分配失败,按照驳回处理 - $this->reject($data['order_prescription_id'], $user_doctor['user_id'],$user_patient['user_id'], $order_prescription['order_inquiry_id']); + $this->reject($data['order_prescription_id'], $user_doctor['user_id'],$user_patient['user_id'], $order_inquiry['inquiry_no']); return Result::DROP; // 重回队列 } @@ -118,12 +128,10 @@ class AssignPharmacistConsumer extends ConsumerMessage * @param string $order_prescription_id * @param string $doctor_user_id * @param string $patient_user_id - * @param string $order_inquiry_id + * @param string $inquiry_no * @return void - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ - public function reject(string $order_prescription_id, string $doctor_user_id, string $patient_user_id, string $order_inquiry_id): void + public function reject(string $order_prescription_id, string $doctor_user_id, string $patient_user_id, string $inquiry_no): void { try { $params = array(); @@ -137,11 +145,11 @@ class AssignPharmacistConsumer extends ConsumerMessage OrderPrescription::edit($params, $data); // 医生-开具的处方审核未通过 - $MessagePush = new MessagePush($doctor_user_id, $order_inquiry_id); + $MessagePush = new MessagePush($doctor_user_id, $inquiry_no); $MessagePush->prescriptionVerifyFail($order_prescription_id); // 患者-处方审核未通过 - $MessagePush = new MessagePush($patient_user_id, $order_inquiry_id); + $MessagePush = new MessagePush($patient_user_id, $inquiry_no); $MessagePush->patientPrescriptionVerifyFail(); } catch (\Exception $e) { diff --git a/app/Amqp/Consumer/AutoCompleteInquiryDelayDirectConsumer.php b/app/Amqp/Consumer/AutoCompleteInquiryDelayDirectConsumer.php index 95fe4c4..36e333e 100644 --- a/app/Amqp/Consumer/AutoCompleteInquiryDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AutoCompleteInquiryDelayDirectConsumer.php @@ -181,7 +181,7 @@ class AutoCompleteInquiryDelayDirectConsumer extends ConsumerMessage if (isset($is_push_prescription_verify_fail)){ // 站内、订阅失败发送短信-医生开具的处方审核未通过 $order_prescription_id = $order_prescription_id ?? ""; - $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['inquiry_no']); $MessagePush->prescriptionVerifyFail($order_prescription_id); } @@ -193,7 +193,7 @@ class AutoCompleteInquiryDelayDirectConsumer extends ConsumerMessage $imService->inquiryEndEvaluation($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']); // 医生-发送站内消息-问诊结束 - $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['inquiry_no']); $MessagePush->finishInquiryToDoctor(); }catch (\Throwable $e){ Log::getInstance("queue-AutoCompleteInquiry")->error($e->getMessage()); diff --git a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php index f6847d9..f89d3f5 100644 --- a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php @@ -6,6 +6,9 @@ namespace App\Amqp\Consumer; use App\Amqp\Producer\AutoCompleteServicePackageDelayDirectProducer; use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageInquiry; +use App\Model\UserDoctor; +use App\Services\MessagePush; use App\Utils\Log; use App\Utils\Utils; use Hyperf\Amqp\Message\ConsumerDelayedMessageTrait; @@ -116,7 +119,33 @@ class AutoCompleteServicePackageDelayDirectConsumer extends ConsumerMessage // 发送消息 try { + // 获取订单医生数据 + $params = array(); + $params['doctor_id'] = $order_service_package['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("queue-AutoCompleteServicePackage")->error("医生数据错误"); + return Result::ACK; + } + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); + if (!empty($order_service_package_inquiry)){ + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $order_service_package['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (!empty($user_doctor)) { + // 医生-通知医生患者的服务包服务结束 + $MessagePush = new MessagePush($user_doctor['user_id'], $order_service_package_inquiry['inquiry_no']); + $MessagePush->doctorServicePackageFinish(); + } + + // 患者-通知患者服务包服务已结束 + $MessagePush = new MessagePush($order_service_package['user_id'], $order_service_package_inquiry['inquiry_no']); + $MessagePush->patientServicePackageFinish(); + } }catch (\Throwable $e){ Log::getInstance("queue-AutoCompleteServicePackage")->error($e->getMessage()); return Result::ACK; diff --git a/app/Amqp/Consumer/AutoPharmacistCaVerifyDelayDirectConsumer.php b/app/Amqp/Consumer/AutoPharmacistCaVerifyDelayDirectConsumer.php index edc5ca5..ebfb2e0 100644 --- a/app/Amqp/Consumer/AutoPharmacistCaVerifyDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AutoPharmacistCaVerifyDelayDirectConsumer.php @@ -152,11 +152,11 @@ class AutoPharmacistCaVerifyDelayDirectConsumer extends ConsumerMessage $this->modifyOrderPrescription($data['order_prescription_id'], 2, "请联系平台客服,请勿重开处方"); // 医生-开具的处方审核未通过 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_prescription['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); $MessagePush->prescriptionVerifyFail($data['order_prescription_id']); // 患者-处方审核未通过 - $MessagePush = new MessagePush($user_patient['user_id'], $order_prescription['order_inquiry_id']); + $MessagePush = new MessagePush($user_patient['user_id'], $order_inquiry['inquiry_no']); $MessagePush->patientPrescriptionVerifyFail(); Db::commit(); @@ -274,12 +274,12 @@ class AutoPharmacistCaVerifyDelayDirectConsumer extends ConsumerMessage $imService->prescriptionIssued($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id'],$product_name,(string)$data['order_prescription_id'],7); // 发送站内、短信消息-患者的处方被药师审核通过 - $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); $MessagePush->patientPrescriptionVerifyPass(); // 站内、订阅失败发送短信-医生开具的处方审核通过 // 发送目标不同,重新实例化 - $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['inquiry_no']); $MessagePush->prescriptionVerifySuccess(); // 添加处方过期队列 diff --git a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php index b5ffc1c..102582d 100644 --- a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php @@ -15,6 +15,7 @@ use App\Services\ImService; use App\Services\InquiryService; use App\Services\MessagePush; use App\Services\OrderService; +use App\Services\OrderServicePackageService; use App\Utils\Log; use App\Utils\Utils; use Hyperf\Amqp\Message\ConsumerDelayedMessageTrait; @@ -198,12 +199,32 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage // 发送IM消息-问诊退款 $imService->inquiryRefund($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']); - // 发送站内、订阅消息-患者-医生未接诊 - $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['order_inquiry_id']); - $MessagePush->patientNoInquiry(); + // 处理服务包情况 + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9) { + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + // 检测问诊是否服务包首次问诊 + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); + if ($is_first){ + // 患者-医生未接受服务包订单 + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->patientDoctorNoAcceptServicePackage(); + }else{ + // 发送站内、订阅消息-患者-医生未接诊 + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->patientNoInquiry(); + } + }else{ + // 发送站内、订阅消息-患者-医生未接诊 + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->patientNoInquiry(); + } // 发送站内、订阅消息-医生-超时未接诊 - $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['inquiry_no']); $MessagePush->doctorNoInquiry(); if (!empty($order_inquiry['coupon_amount_total']) && $order_inquiry['coupon_amount_total'] > 0) { @@ -213,7 +234,7 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage $order_inquiry_coupon = OrderInquiryCoupon::getOne($params); if (!empty($order_inquiry_coupon)){ // 发送站内消息-优惠卷退还 - $MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['inquiry_no']); $MessagePush->patientRefundCoupon($order_inquiry_coupon['coupon_name']); } } diff --git a/app/Amqp/Consumer/DoctorNotYetInquiryDelayDirectConsumer.php b/app/Amqp/Consumer/DoctorNotYetInquiryDelayDirectConsumer.php index cdf6894..246e790 100644 --- a/app/Amqp/Consumer/DoctorNotYetInquiryDelayDirectConsumer.php +++ b/app/Amqp/Consumer/DoctorNotYetInquiryDelayDirectConsumer.php @@ -7,6 +7,7 @@ namespace App\Amqp\Consumer; use App\Model\OrderInquiry; use App\Model\UserDoctor; use App\Services\MessagePush; +use App\Services\OrderServicePackageService; use App\Utils\Log; use Hyperf\Amqp\Message\ConsumerDelayedMessageTrait; use Hyperf\Amqp\Message\ProducerDelayedMessageTrait; @@ -36,7 +37,7 @@ class DoctorNotYetInquiryDelayDirectConsumer extends ConsumerMessage public function consumeMessage($data, AMQPMessage $message): string { - Log::getInstance("queue-DoctorNotYetInquiry")->info("开始:" . json_encode($data, JSON_UNESCAPED_UNICODE)); + Log::getInstance("queue-DoctorNotYetInquiry")->info(json_encode($data, JSON_UNESCAPED_UNICODE)); if (!isset($data['order_inquiry_id'])){ Log::getInstance("queue-DoctorNotYetInquiry")->error("缺少参数"); @@ -65,13 +66,30 @@ class DoctorNotYetInquiryDelayDirectConsumer extends ConsumerMessage $user_doctor = UserDoctor::getOne($params); if (empty($user_doctor)) { Log::getInstance("queue-DoctorNotYetInquiry")->error("医生数据错误"); + return Result::ACK; } - // 发送站内、订阅消息-医生-超时未接诊 - $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']); - $MessagePush->doctorNotYetInquiry(); + // 处理服务包情况 + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + // 检测问诊是否服务包首次问诊 + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); + if ($is_first){ + // 医生-医生xx时间后还未接受服务包订单 + $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->doctorNotYetOrderServicePackage(); + } + }else{ + // 发送站内、订阅消息-医生-超时未接诊 + $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->doctorNotYetInquiry(); + } }catch (\Throwable $e){ - Log::getInstance("queue-DoctorNotYetInquiry")->error("失败:" . $e->getMessage()); + Log::getInstance("queue-DoctorNotYetInquiry")->error($e->getMessage()); return Result::ACK; } diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index b6f6a76..f435af9 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -251,7 +251,7 @@ class CallBackController extends AbstractController $imService->waitDoctorInquiry($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id']); // 发送站内、订阅失败发送短信消息-医生有新问诊 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); $MessagePush->doctorHaveNewInquiry(); // 加入xx时间未接诊通知队列 @@ -365,7 +365,7 @@ class CallBackController extends AbstractController if ($message['refund_status'] == "SUCCESS") { try { // 发送站内、订阅、短信消息-问诊服务退款成功 - $MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['inquiry_no']); // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) $MessagePush->refundInquirySuccess($order_inquiry['cancel_reason']); @@ -2378,7 +2378,25 @@ class CallBackController extends AbstractController return $this->wxPayErrorReturn($e->getMessage()); } - Log::getInstance("CallBack-wxPayServiceRefund")->info("微信退款回调处理成功"); + Log::getInstance("CallBack-wxPayServiceRefund")->info("微信退款回调处理成功,推送消息"); + + // 发送推送消息 + if ($message['refund_status'] == "SUCCESS") { + try { + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); + if (!empty($order_service_package_inquiry)){ + // 患者-服务包服务退款成功 + $MessagePush = new MessagePush($order_service_package['user_id'], $order_service_package_inquiry['inquiry_no']); + $MessagePush->refundServicePackageSuccess(); + } + } catch (\Exception $e) { + // 验证失败 + Log::getInstance("CallBack-wxPayInquiryRefund")->error("微信退款回调处理成功,推送消息失败:" . $e->getMessage()); + return $server->serve(); + } + } return $server->serve(); } @@ -2785,14 +2803,14 @@ class CallBackController extends AbstractController $imService->waitDoctorInquiry($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id']); // 发送站内、订阅失败发送短信消息-医生有新服务包订单 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_service_package['order_service_no']); + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); $MessagePush->doctorHaveNewServicePackage(); // 加入xx时间未接诊通知队列 $data = array(); $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $time = 1000 * 60 * 60 * 2; + $time = 1000 * 60 * 60 * 24; $message = new DoctorNotYetInquiryDelayDirectProducer($data); $message->setDelayMs($time); $producer = $this->container->get(Producer::class); diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 05c8d03..8917e2e 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -1218,11 +1218,11 @@ class InquiryService extends BaseService $imService->inquiryEndEvaluation($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id']); // 医生-发送通知消息-问诊结束 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); $MessagePush->finishInquiryToDoctor(); // 患者-发送通知消息-患者的问诊服务结束 - $MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['inquiry_no']); $MessagePush->patientInquiryFinish(); } catch (\Throwable $e) { Log::getInstance("InquiryService-putFinishInquiry")->error($e->getMessage()); @@ -1399,7 +1399,7 @@ class InquiryService extends BaseService $imService->giveFreeRounds($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id'], $times_number, $give_expiration_time); // 发送站内、订阅失败发送短信消息-患者-赠送回合数 - $MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['inquiry_no']); $MessagePush->doctorGiveFreeRounds($times_number, $give_expiration_time); } catch (\Throwable $e) { Log::getInstance("InquiryService-addDoctorGiveInquiryOrder")->error($e->getMessage()); diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index 14f99f8..ef265bb 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -19,7 +19,9 @@ use App\Model\OrderPrescription; use App\Model\OrderProduct; use App\Model\OrderProductItem; use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageDetail; use App\Model\OrderServicePackageInquiry; +use App\Model\OrderServicePackageProduct; use App\Model\Product; use App\Model\SystemInquiryConfig; use App\Model\User; @@ -58,75 +60,79 @@ class MessagePush extends BaseService * @param string $to_user_id 用户id(存在被推送者时存在,否则为空) * @param string $order_no 问诊订单编号 */ - public function __construct(string $to_user_id, string $order_no) + public function __construct(string $to_user_id = "", string $order_no = "") { - $params = array(); - $params['user_id'] = $to_user_id; - $user = User::getOne($params); - if (!empty($user)) { - $this->user = $user->toArray(); + if (!empty($to_user_id)){ + $params = array(); + $params['user_id'] = $to_user_id; + $user = User::getOne($params); + if (!empty($user)) { + $this->user = $user->toArray(); + } } // 获取订单数据 - $params = array(); - $params['order_no'] = $order_no; - $order = Order::getOne($params); - if (!empty($order)){ - $this->order = $order->toArray(); - - // 判断订单类型 - switch ($order['order_type']) { - case 1: // 问诊订单 - $params = array(); - $params['inquiry_no'] = $order['order_no']; - $order_inquiry = OrderInquiry::getOne($params); - if (!empty($order_inquiry)) { - $this->order_inquiry = $order_inquiry->toArray(); - } - - break; - case 2: // 药品订单 - $params = array(); - $params['order_product_no'] = $order['order_no']; - $order_product = OrderProduct::getOne($params); - if (!empty($order_product)) { - $this->order_product = $order_product->toArray(); - } - - break; - case 3: // 检测订单 - $params = array(); - $params['detection_no'] = $order['order_no']; - $order_detection = OrderDetection::getOne($params); - if (!empty($order_detection)) { - $this->order_detection = $order_detection->toArray(); - } - - break; - case 4: // 健康包订单 - case 5: // 随访包订单 - $params = array(); - $params['inquiry_no'] = $order_no; - $order_inquiry = OrderInquiry::getOne($params); - if (!empty($order_inquiry)) { - $this->order_inquiry = $order_inquiry->toArray(); + if (!empty($order_no)){ + $params = array(); + $params['order_no'] = $order_no; + $order = Order::getOne($params); + if (!empty($order)){ + $this->order = $order->toArray(); + // 判断订单类型 + switch ($order['order_type']) { + case 1: // 问诊订单 $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); - if (!empty($order_service_package_inquiry)){ + $params['inquiry_no'] = $order['order_no']; + $order_inquiry = OrderInquiry::getOne($params); + if (!empty($order_inquiry)) { + $this->order_inquiry = $order_inquiry->toArray(); + } + + break; + case 2: // 药品订单 + $params = array(); + $params['order_product_no'] = $order['order_no']; + $order_product = OrderProduct::getOne($params); + if (!empty($order_product)) { + $this->order_product = $order_product->toArray(); + } + + break; + case 3: // 检测订单 + $params = array(); + $params['detection_no'] = $order['order_no']; + $order_detection = OrderDetection::getOne($params); + if (!empty($order_detection)) { + $this->order_detection = $order_detection->toArray(); + } + + break; + case 4: // 健康包订单 + case 5: // 随访包订单 + $params = array(); + $params['inquiry_no'] = $order_no; + $order_inquiry = OrderInquiry::getOne($params); + if (!empty($order_inquiry)) { + $this->order_inquiry = $order_inquiry->toArray(); + $params = array(); - $params['order_service_no'] = $order_service_package_inquiry['order_service_no']; - $order_service_package = OrderServicePackage::getOne($params); - if (!empty($order_service_package)){ - $this->order_service_package = $order_service_package->toArray(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); + if (!empty($order_service_package_inquiry)){ + $params = array(); + $params['order_service_no'] = $order_service_package_inquiry['order_service_no']; + $order_service_package = OrderServicePackage::getOne($params); + if (!empty($order_service_package)){ + $this->order_service_package = $order_service_package->toArray(); + } } } - } - break; - default: - throw new BusinessException("订单类型错误"); + break; + default: + throw new BusinessException("订单类型错误"); + } } } } @@ -172,7 +178,7 @@ class MessagePush extends BaseService $producer = ApplicationContext::getContainer()->get(Producer::class); $result = $producer->produce($message); if (!$result) { - Log::getInstance("MessagePush")->error("错误:" . json_encode($data, JSON_UNESCAPED_UNICODE)); + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); } // 订阅 @@ -1233,7 +1239,7 @@ class MessagePush extends BaseService $producer = ApplicationContext::getContainer()->get(Producer::class); $result = $producer->produce($message); if (!$result) { - Log::getInstance("MessagePush")->error("错误:加入站内推送队列失败" . json_encode($data, JSON_UNESCAPED_UNICODE)); + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); } $inquiry_type = inquiryTypeToString($this->order_inquiry['inquiry_type']); @@ -1270,10 +1276,10 @@ class MessagePush extends BaseService $producer = ApplicationContext::getContainer()->get(Producer::class); $result = $producer->produce($message); if (!$result) { - Log::getInstance("MessagePush")->error("错误:加入站内推送队列失败" . json_encode($data, JSON_UNESCAPED_UNICODE)); + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); } } catch (\Throwable $e) { - Log::getInstance("MessagePush")->error("错误:加入站内推送队列失败" .$e->getMessage()); + Log::getInstance("MessagePush")->error($e->getMessage()); } return true; @@ -2655,7 +2661,7 @@ class MessagePush extends BaseService } /** - * 医生-医生有新服务包订单 + * 医生-医生有新的服务包订单 * 站内、订阅失败发送短信 * @return void */ @@ -2720,14 +2726,6 @@ class MessagePush extends BaseService } } - if ($this->order_inquiry['inquiry_type'] == 1 || $this->order_inquiry['inquiry_type'] == 3) { - // 专家、公益 - $thing6 = "24小时内未接诊,平台将自动取消问诊"; - } else { - // 快速、购药 - $thing6 = "5分钟内未接诊,平台将自动取消问诊"; - } - $sub_data = array(); $sub_data['push_user_id'] = $this->user['user_id']; $sub_data['wx_template_id'] = "G1RIs0RYqsTQ2CuPQWalIMyb6_deuEEbJfajfhGvNzc";//咨询提醒 @@ -2736,8 +2734,8 @@ class MessagePush extends BaseService "thing1" => "您有一个{$order_type}服务等待接诊",// 提醒内容 "name2" => (string)$this->order_inquiry['patient_name'],// 患者姓名 "thing4" => (string)$disease_desc,// 病情描述 - "thing6" => $thing6,// 提示说明 - "thing5" => "72小时内未接诊,平台将自送取消服务",// 咨询内容 + "thing6" => "72小时内未接诊,平台将自送取消服务",// 提示说明 + "thing5" => "",// 咨询内容 ]; // 短信 @@ -2766,4 +2764,928 @@ class MessagePush extends BaseService } } + /** + * 医生-医生有新的服务包问诊订单 + * 站内、订阅失败发送短信 + * @return void + */ + public function doctorHaveNewServicePackageInquiry(): void + { + try { + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("错误:医生数据为空"); + return; + } + + // 获取问诊订单关联病例 + $params = array(); + $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)) { + Log::getInstance("MessagePush")->error("病例数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 1; + $data['inquiry_type'] = $this->order_inquiry['inquiry_type']; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "{$this->order_inquiry['patient_name']}患者发起{$order_type}服务中的一次问诊,请及时处理。"; + $data['notice_title'] = "{$this->order_inquiry['patient_name']}患者发起{$order_type}服务中的一次问诊,请及时处理。"; + $data['notice_content'] = "{$this->order_inquiry['patient_name']}患者发起{$order_type}服务中的一次问诊,请及时处理。"; + $data['link_type'] = 3; // 问诊消息列表页 + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 订阅 + // 问诊内容-病情主诉 + $disease_desc = $order_inquiry_case['disease_desc']; + if (!empty($disease_desc)) { + if (strlen($disease_desc) > 15) { + $disease_desc = mb_substr($disease_desc, 0, 15); + if ($disease_desc) { + $disease_desc = $disease_desc . "..."; + } + } + } + + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "G1RIs0RYqsTQ2CuPQWalIMyb6_deuEEbJfajfhGvNzc";//咨询提醒 + $sub_data['params']['page'] = "Pages/yishi/wenzhen_v2/wenzhen"; + $sub_data['params']['data'] = [ + "thing1" => "发起{$order_type}服务中一次问诊",// 提醒内容 + "name2" => (string)$this->order_inquiry['patient_name'],// 患者姓名 + "thing4" => (string)$disease_desc,// 病情描述 + "thing6" => "24小时内未接诊,平台将自送取消问诊",// 提示说明 + "thing5" => "",// 咨询内容 + ]; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = []; + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error( $e->getMessage()); + } + } + + /** + * 医生-患者取消服务包订单 + * 站内-订阅 + * @return void + */ + public function doctorPatientCancelServicePackage(): void + { + try { + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("医生数据为空"); + return; + } + + // 获取问诊订单关联病例 + $params = array(); + $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)) { + Log::getInstance("MessagePush")->error("病例数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 1; + $data['inquiry_type'] = $this->order_inquiry['inquiry_type']; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "{$this->order_inquiry['patient_name']}患者已取消{$order_type}服务,您可选择其他患者的问诊咨询进行接诊。"; + $data['notice_title'] = "{$this->order_inquiry['patient_name']}患者已取消{$order_type}服务,您可选择其他患者的问诊咨询进行接诊。"; + $data['notice_content'] = "{$this->order_inquiry['patient_name']}患者已取消{$order_type}服务,您可选择其他患者的问诊咨询进行接诊。"; + $data['link_type'] = 3; // 问诊消息列表页 + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 问诊内容-病情主诉 + $disease_desc = $order_inquiry_case['disease_desc']; + if (!empty($disease_desc)) { + if (strlen($disease_desc) > 15) { + $disease_desc = mb_substr($disease_desc, 0, 15); + if ($disease_desc) { + $disease_desc = $disease_desc . "..."; + } + } + } + + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "G1RIs0RYqsTQ2CuPQWalIMyb6_deuEEbJfajfhGvNzc";//咨询提醒 + $sub_data['params']['page'] = "Pages/yishi/wenzhen_v2/wenzhen"; + $sub_data['params']['data'] = [ + "thing1" => "{$order_type}服务已取消",// 提醒内容 + "name2" => (string)$this->order_inquiry['patient_name'],// 患者姓名 + "thing4" => (string)$disease_desc,// 病情描述 + "thing6" => "您可以选择其他患者的问诊咨询进行接诊",// 提示说明 + "thing5" => "",// 咨询内容 + ]; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = []; + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error($e->getMessage()); + } + } + + /** + * 医生-医生xx时间后还未接受服务包订单 + * 站内、订阅失败发送短信 + * @return void + */ + public function doctorNotYetOrderServicePackage(): void + { + try { + // 获取问诊订单关联病例 + $params = array(); + $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)) { + Log::getInstance("MessagePush")->error("医生数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 1; + $data['inquiry_type'] = $this->order_inquiry['inquiry_type']; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "{$this->order_inquiry['patient_name']}患者的{$order_type}服务您还未接诊,请及时处理。"; + $data['notice_title'] = "{$this->order_inquiry['patient_name']}患者的{$order_type}服务您还未接诊,请及时处理。"; + $data['notice_content'] = "{$this->order_inquiry['patient_name']}患者的{$order_type}服务您还未接诊,请及时处理。"; + $data['link_type'] = 3; // 问诊消息列表页. + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $this->user['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 问诊内容-病情主诉 + $disease_desc = $order_inquiry_case['disease_desc']; + if (!empty($disease_desc)) { + if (strlen($disease_desc) > 15) { + $disease_desc = mb_substr($disease_desc, 0, 15); + if ($disease_desc) { + $disease_desc = $disease_desc . "..."; + } + } + } + + // 订阅 + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "G1RIs0RYqsTQ2CuPQWalIMyb6_deuEEbJfajfhGvNzc"; // 咨询提醒 + $sub_data['params']['page'] = "Pages/yishi/wenzhen_v2/wenzhen"; + $sub_data['params']['data'] = [ + "thing1" => "您好医生,有新的{$order_type}服务您还未接诊",// 提醒内容 + "name2" => $this->order_inquiry['patient_name'],// 患者姓名 + "thing4" => mb_substr($order_inquiry_case['disease_desc'], 0, 18),// 病情描述 + "thing6" => "您还未接诊,请及时上线处理",// 提示说明 + "thing5" => "",// 咨询内容 + ]; + + $sms_data = array(); + $sms_data['template_code'] = "SMS_271905266"; + $sms_data['scene_desc'] = "医生xx时间后还未接诊"; + $sms_data['phone'] = $this->user['mobile']; + $sms_data['user_id'] = $this->user['user_id']; + + $template_param = array(); + $template_param['type'] = $order_type; + $template_param['name'] = $this->order_inquiry['patient_name']; + $sms_data['template_param'] = $template_param; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = $sms_data; + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error($e->getMessage()); + } + } + + /** + * 医生-通知医生患者的服务包服务结束 + * 站内订阅 + * 发送给医生 + * @return void + */ + public function doctorServicePackageFinish(): void + { + try { + // 获取问诊订单关联病例 + $params = array(); + $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)) { + Log::getInstance("MessagePush")->error("问诊病例为空"); + return; + } + + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("医生数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 1; + $data['inquiry_type'] = $this->order_inquiry['inquiry_type']; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "{$this->order_inquiry['patient_name']}患者的{$order_type}服务已完成,您可以提醒患者进行续费。"; + $data['notice_title'] = "{$this->order_inquiry['patient_name']}患者的{$order_type}服务已完成,您可以提醒患者进行续费。"; + $data['notice_content'] = "{$this->order_inquiry['patient_name']}患者的{$order_type}服务已完成,您可以提醒患者进行续费。"; + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 订阅 + // 问诊内容-病情主诉 + $disease_desc = $order_inquiry_case['disease_desc']; + if (!empty($disease_desc)) { + if (strlen($disease_desc) > 15) { + $disease_desc = mb_substr($disease_desc, 0, 15); + if ($disease_desc) { + $disease_desc = $disease_desc . "..."; + } + } + } + + // 订阅 + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "G1RIs0RYqsTQ2CuPQWalIMyb6_deuEEbJfajfhGvNzc"; // 咨询提醒 + $sub_data['params']['page'] = "Pages/yishi/wenzhen_v2/wenzhen"; + $sub_data['params']['data'] = [ + "thing1" => "{$order_type}服务已完成",// 提醒内容 + "name2" => $this->order_inquiry['patient_name'],// 患者姓名 + "thing4" => $disease_desc,// 病情描述 + "thing6" => "您可以提醒患者进行续费",// 提示说明 + "thing5" => "",// 咨询内容 + ]; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = []; + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error("错误:加入推送队列失败" . $e->getMessage()); + } + } + + /** + * 患者-通知患者医生已接受服务包服务 + * 站内、订阅 + * @return void + */ + public function patientAcceptedServicePackage(): void + { + try { + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("医生数据为空"); + return; + } + + // 获取问诊订单关联病例 + $params = array(); + $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)) { + Log::getInstance("MessagePush")->error("病例数据为空"); + return; + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $this->order['order_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + Log::getInstance("MessagePush")->error("服务包订单数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 转换每月次数为汉字 + $monthly_frequency = monthlyFrequencyToString($order_service_package_detail['monthly_frequency']); + + $start_time = date('Y年m月d日 H时i分',strtotime($this->order_service_package['start_time'])); + $finish_time = date('Y年m月d日 H时i分',strtotime($this->order_service_package['finish_time'])); + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 3; + $data['notice_system_type'] = 1; + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "您购买的{$order_type}服务,医生已接受,点击查看详情。"; + $data['notice_title'] = "您购买的{$order_type}服务,医生已接受,点击查看详情。"; + $data['notice_content'] = "您购买的{$order_type}服务,{$user_doctor['user_name']}医生已接受,服务包含:({$monthly_frequency}次问诊/月;30盒肝爽颗粒),服务有效期:{$start_time}~{$finish_time},每次问诊不限制沟通回合数,您可以点击【问诊详情】进行交流。"; + $data['link_type'] = 15;// 聊天详情页 + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['order_no'] = $this->order['order_no']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + + $data['button_type'] = 4; // 问诊详情 + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 订阅 + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 + $sub_data['params']['page'] = "healthyService/pages/healthyOrderDetail/healthyOrderDetail?order_service_id={$this->order['order_no']}"; + $sub_data['params']['data'] = [ + "thing1" => "{$order_type}服务",// 问诊内容 + "thing2" => "医生已接受",// 提醒内容 + "name3" => (string)$user_doctor['user_name'],// 问诊医生 + "thing4" => "点击查看详情",// 提示说明 + ]; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = array(); + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error($e->getMessage()); + } + } + + /** + * 患者-通知患者医生已接诊服务包相关问诊订单 + * 站内、订阅 + * @return void + */ + public function patientAcceptedServicePackageInquiry(): void + { + try { + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("医生数据为空"); + return; + } + + // 获取问诊订单关联病例 + $params = array(); + $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)) { + Log::getInstance("MessagePush")->error("病例数据为空"); + return; + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $this->order['order_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + Log::getInstance("MessagePush")->error("服务包订单数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 获取服务包当月已问诊次数 + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($this->order_service_package['start_time'])) { + $OrderServicePackageService = new OrderServicePackageService(); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($this->order_service_package['start_time'],$this->order_service_package['order_service_type'],$this->order_service_package['user_id'], $this->order_service_package['doctor_id']); + $remaining_inquiry_count = $order_service_package_detail['monthly_frequencys'] - $month_inquiry_count; + if ($remaining_inquiry_count < 0){ + $remaining_inquiry_count = 0; + } + }else{ + $remaining_inquiry_count = "不限"; + } + + // 获取剩余药品数量 + $remaining_quantity = 0; + if ($this->order_service_package['order_service_type'] == 1){ + // 健康包商品数据 + $params = array(); + $params['order_service_id'] = $this->order_service_package['order_service_id']; + $order_service_package_products = OrderServicePackageProduct::getList($params); + if (!empty($order_service_package_products)){ + foreach ($order_service_package_products as $order_service_package_product){ + $remaining_quantity += $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; + if ($remaining_quantity < 0){ + $remaining_quantity = 0; + } + } + } + } + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 3; + $data['notice_system_type'] = 1; + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "您使用{$order_type}服务中问诊,医生已接诊,点击查看详情。"; + $data['notice_title'] = "您使用{$order_type}服务中问诊,医生已接诊,点击查看详情。"; + $data['notice_content'] = "您使用{$order_type}服务中问诊,{$user_doctor['user_name']}医生已接诊,服务剩余:({$remaining_inquiry_count}次问诊/月;{$remaining_quantity}盒肝爽颗粒),您可以点击【问诊详情】进行交流。 +"; + $data['link_type'] = 1; + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['order_no'] = $this->order['order_no']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + + $data['button_type'] = 6; // 问诊详情 + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 订阅 + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 + $sub_data['params']['page'] = "patient/pages/orderDetail/orderDetail?order_inquiry_id={$this->order_inquiry['order_inquiry_id']}"; + $sub_data['params']['data'] = [ + "thing1" => "使用{$order_type}服务中问诊",// 问诊内容 + "thing2" => "医生已接诊",// 提醒内容 + "name3" => (string)$user_doctor['user_name'],// 问诊医生 + "thing4" => "点击查看详情",// 提示说明 + ]; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = array(); + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error($e->getMessage()); + } + } + + /** + * 患者-通知患者服务包服务已结束 + * 站内、订阅 + * @return void + */ + public function patientServicePackageFinish(): void + { + try { + // 获取问诊订单关联病例 + $params = array(); + $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)) { + Log::getInstance("MessagePush")->error("问诊病例为空"); + return; + } + + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("医生数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 1; + $data['inquiry_type'] = $this->order_inquiry['inquiry_type']; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "您购买的{$order_type}服务已结束,点击查看详情。"; + $data['notice_title'] = "您购买的{$order_type}服务已结束,点击查看详情。"; + $data['notice_content'] = "您购买的{$order_type}服务已结束,您可以继续购买医生的{$order_type}进行问诊。"; + $data['link_type'] = 15; + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['order_no'] = $this->order['order_no']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + + $data['button_type'] = 4; // 问诊详情 + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 订阅 + // 问诊内容-病情主诉 + $disease_desc = $order_inquiry_case['disease_desc']; + if (!empty($disease_desc)) { + if (strlen($disease_desc) > 15) { + $disease_desc = mb_substr($disease_desc, 0, 15); + if ($disease_desc) { + $disease_desc = $disease_desc . "..."; + } + } + } + + // 订阅 + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 + $sub_data['params']['page'] = "patient/pages/orderDetail/orderDetail?order_inquiry_id={$this->order_inquiry['order_inquiry_id']}"; + $sub_data['params']['data'] = [ + "thing1" => "使用{$order_type}服务中问诊",// 问诊内容 + "thing2" => "医生已接诊",// 提醒内容 + "name3" => (string)$user_doctor['user_name'],// 问诊医生 + "thing4" => "点击查看详情",// 提示说明 + ]; + + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 + $sub_data['params']['page'] = "healthyService/pages/healthyOrderDetail/healthyOrderDetail?order_service_id={$this->order['order_no']}"; + $sub_data['params']['data'] = [ + "thing1" => "{$order_type}服务",// 问诊内容 + "thing2" => "已结束",// 提醒内容 + "name3" => (string)$user_doctor['user_name'],// 问诊医生 + "thing4" => "如您还需服务,请点击此处续费",// 提示说明 + ]; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = []; + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error($e->getMessage()); + } + } + + /** + * 患者-通知患者服务包药品未使用完 + * 站内 + * @return void + */ + public function patientServicePackageHaveProduct(): void + { + try { + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("医生数据为空"); + return; + } + + // 获取剩余药品数量 + $remaining_quantity = 0; + if ($this->order_service_package['order_service_type'] == 1){ + // 健康包商品数据 + $params = array(); + $params['order_service_id'] = $this->order_service_package['order_service_id']; + $order_service_package_products = OrderServicePackageProduct::getList($params); + if (!empty($order_service_package_products)){ + foreach ($order_service_package_products as $order_service_package_product){ + $remaining_quantity += $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; + if ($remaining_quantity < 0){ + $remaining_quantity = 0; + } + } + } + } + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 3; + $data['notice_system_type'] = 1; + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "您购买的健康包服务中,有福利还未使用,点击查看详情。"; + $data['notice_title'] = "您购买的健康包服务中,有福利还未使用,点击查看详情。"; + $data['notice_content'] = "您购买的健康包服务中,包含30盒“肝爽颗粒(步长)”,目前剩余{$remaining_quantity}盒,您可以进入【订单详情】查看具体情况,在问诊中与医生沟通开具处方。"; + $data['link_type'] = 15; + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['order_no'] = $this->order['order_no']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + + $data['button_type'] = 4; + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error($e->getMessage()); + } + } + + /** + * 患者-医生未接受服务包订单 + * 站内、订阅、短信 + * @return void + */ + public function patientDoctorNoAcceptServicePackage(): void + { + try { + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("医生数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 3; + $data['notice_system_type'] = 1; + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "您购买的{$order_type}服务,医生未及时确认,点击查看详情。"; + $data['notice_title'] = "您购买的{$order_type}服务,医生未及时确认,点击查看详情。"; + $data['notice_content'] = "您购买的{$order_type}服务,{$user_doctor['user_name']}医生未及时确认,平台已自动发起退款,请注意查看账户信息。"; + $data['link_type'] = 15; + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['order_no'] = $this->order['order_no']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + $data['button_type'] = 4; + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 订阅 + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 + $sub_data['params']['page'] = "healthyService/pages/healthyOrderDetail/healthyOrderDetail?order_service_id={$this->order['order_no']}"; + $sub_data['params']['data'] = [ + "thing1" => "{$order_type}服务",// 问诊内容 + "thing2" => "未及时确认",// 提醒内容 + "name3" => (string)$user_doctor['user_name'],// 问诊医生 + "thing4" => "平台已自动发起退款,请注意查看账户信息",// 提示说明 + ]; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = []; + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error("错误:" . $e->getMessage()); + } + } + + /** + * 患者-服务包服务退款成功 + * 站内、订阅 + * @return void + */ + public function refundServicePackageSuccess(): void + { + try { + // 获取医生数据 + $params = array(); + $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Log::getInstance("MessagePush")->error("医生数据为空"); + return; + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + + // 站内 + $data = array(); + $data['user_id'] = $this->user['user_id']; + $data['notice_type'] = 3; + $data['notice_system_type'] = 1; + $data['from_name'] = "肝胆小秘书"; + $data['notice_brief_title'] = "您购买的{$order_type}服务,订单取消成功,点击查看详情。"; + $data['notice_title'] = "您购买的{$order_type}服务,订单取消成功,点击查看详情。"; + $data['notice_content'] = "您购买的{$order_type}服务,订单取消成功,平台已自动发起退款,请注意查看账户信息。"; + $data['link_type'] = 15; + + $link_params = array(); + $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; + $link_params['order_no'] = $this->order['order_no']; + $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['doctor_user_id'] = $user_doctor['user_id']; + $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 + $data['button_type'] = 4; + + $message = new SendStationMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + + // 订阅 + $sub_data = array(); + $sub_data['push_user_id'] = $this->user['user_id']; + $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 + $sub_data['params']['page'] = "healthyService/pages/healthyOrderDetail/healthyOrderDetail?order_service_id={$this->order['order_no']}"; + $sub_data['params']['data'] = [ + "thing1" => "{$order_type}服务",// 问诊内容 + "thing2" => "取消订单成功",// 提醒内容 + "name3" => (string)$user_doctor['user_name'],// 问诊医生 + "thing4" => "平台已自动发起退款,请注意查看账户信息",// 提示说明 + ]; + + // 短信 + $sms_data = array(); + $sms_data['template_code'] = "SMS_465655405"; + $sms_data['scene_desc'] = "服务包服务退款成功"; + $sms_data['phone'] = $this->user['mobile']; + $sms_data['user_id'] = $this->user['user_id']; + + $template_param = array(); + $template_param['type'] = $order_type; + $template_param['name'] = (string)$user_doctor['user_name']; + $sms_data['template_param'] = $template_param; + + $data = array(); + $data['sub_data'] = $sub_data; + $data['sms_data'] = $sms_data; + + $message = new SendSubMessageProducer($data); + $producer = ApplicationContext::getContainer()->get(Producer::class); + $result = $producer->produce($message); + if (!$result) { + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); + } + } catch (\Throwable $e) { + Log::getInstance("MessagePush")->error("错误:" . $e->getMessage()); + } + + } } \ No newline at end of file diff --git a/app/Services/OrderPrescriptionService.php b/app/Services/OrderPrescriptionService.php index 6c29f4c..8902189 100644 --- a/app/Services/OrderPrescriptionService.php +++ b/app/Services/OrderPrescriptionService.php @@ -469,13 +469,13 @@ class OrderPrescriptionService extends BaseService OrderPrescription::edit($params, $data); - // 医生-开具的处方审核未通过 + /*// 医生-开具的处方审核未通过 $MessagePush = new MessagePush($doctor_user_id, $order_inquiry_id); $MessagePush->prescriptionVerifyFail($order_prescription_id); // 患者-处方审核未通过 $MessagePush = new MessagePush($patient_user_id, $order_inquiry_id); - $MessagePush->patientPrescriptionVerifyFail(); + $MessagePush->patientPrescriptionVerifyFail();*/ } catch (\Exception $e) { throw new BusinessException($e->getMessage()); diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index a35d557..50aee1c 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -986,15 +986,25 @@ class OrderServicePackageService extends BaseService // 等待医生接诊 $imService->waitDoctorInquiry($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id']); - // 发送站内、订阅失败发送短信消息-医生有新服务包订单 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_service_package['order_service_no']); - $MessagePush->doctorHaveNewServicePackage(); + // 检测问诊是否服务包首次问诊 + $OrderServicePackageService = new OrderServicePackageService(); + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_no); + if ($is_first){ + // 首次 + // 发送站内、订阅失败发送短信消息-医生有新服务包订单 + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); + $MessagePush->doctorHaveNewServicePackage(); + }else{ + // 发送站内、订阅失败-医生有新的服务包问诊订单 + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); + $MessagePush->doctorHaveNewServicePackageInquiry(); + } // 加入xx时间未接诊通知队列 $data = array(); $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $time = 1000 * 60 * 60 * 2; + $time = 1000 * 60 * 60 * 24; $message = new DoctorNotYetInquiryDelayDirectProducer($data); $message->setDelayMs($time); $producer = $this->container->get(Producer::class); @@ -1260,7 +1270,7 @@ class OrderServicePackageService extends BaseService } /** - * 获取服务包剩余药品数量 + * 获取服务包内某一药品的剩余数量 * @param string|int $order_service_id * @param string|int $product_id * @return int @@ -1303,4 +1313,50 @@ class OrderServicePackageService extends BaseService return false; } + + /** + * 获取服务包订单编号-通过问诊订单id + * @param string|int $inquiry_no + * @return string|int + */ + public function getOrderServiceNoByOrderInquiryId(string|int $inquiry_no): string|int + { + $params = array(); + $params['inquiry_no'] = $inquiry_no; + $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); + if (empty($order_service_package_inquiry)){ + throw new BusinessException("订单错误"); + } + + return $order_service_package_inquiry['order_service_no']; + } + + /** + * 检测患者服务包内是否还存在剩余药品 + * @param string|int $order_no + * @return bool + */ + public function checkOrderServiceRemainingProduct(string|int $order_no): bool + { + // 获取服务包关联商品 + $params = array(); + $params['order_service_no'] = $order_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + return false; + } + + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_products = OrderServicePackageProduct::getList($params); + foreach ($order_service_package_products as $order_service_package_product){ + $remaining_quantity = $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; + if ($remaining_quantity > 0){ + return true; + } + } + + return false; + } + } \ No newline at end of file diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index b2d8a4b..ad59b30 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -413,7 +413,7 @@ class PatientOrderService extends BaseService } // 推送医生-患者取消问诊 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); $MessagePush->patientCancelInquiryToDoctor(); } } catch (\Exception $e) { @@ -1241,7 +1241,7 @@ class PatientOrderService extends BaseService $imService->waitDoctorInquiry($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id']); // 发送站内、订阅失败发送短信消息-医生有新问诊 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); $MessagePush->doctorHaveNewInquiry(); // 加入xx时间未接诊通知队列 @@ -1503,7 +1503,7 @@ class PatientOrderService extends BaseService $amount_total = 0; foreach ($product_datas as &$product_data){ - // 获取服务包剩余药品数量 + // 获取服务包内某一药品的剩余数量 $remaining_quantity = $OrderServicePackageService->getOrderServiceProductRemainingQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id']); // 可用数量大于处方商品数量,此情况把商品价格置为0 @@ -2014,7 +2014,7 @@ class PatientOrderService extends BaseService $amount_total = 0; foreach ($product_datas as &$product_data){ - // 获取服务包剩余药品数量 + // 获取服务包内某一药品的剩余数量 $remaining_quantity = $OrderServicePackageService->getOrderServiceProductRemainingQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id']); // 可用数量大于处方商品数量,此情况把商品价格置为0 @@ -2667,7 +2667,7 @@ class PatientOrderService extends BaseService $user_doctor = UserDoctor::getOne($params); if (!empty($user_doctor)) { // 推送医生-患者取消问诊 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); $MessagePush->patientCancelInquiryToDoctor(); } } @@ -2680,7 +2680,7 @@ class PatientOrderService extends BaseService $order_detection = OrderDetection::getOne($params); if (!empty($order_detection)) { // 推送患者-订单取消成功通知 - $MessagePush = new MessagePush($order_detection['user_id']); + $MessagePush = new MessagePush($order_detection['user_id'],$order_detection['detection_no']); $MessagePush->patientCancelDetectionOrderSuccess($order_detection['order_detection_id']); } @@ -2707,9 +2707,9 @@ class PatientOrderService extends BaseService $params['doctor_id'] = $order_service_package['doctor_id']; $user_doctor = UserDoctor::getOne($params); if (!empty($user_doctor)) { - // 推送医生-患者取消问诊 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_service_package_inquiry['order_inquiry_id']); - $MessagePush->patientCancelInquiryToDoctor(); + // 医生-患者取消服务包订单 + $MessagePush = new MessagePush($user_doctor['user_id'], $order_service_package_inquiry['inquiry_no']); + $MessagePush->doctorPatientCancelServicePackage(); } } diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index 66b43d6..ab0c7ad 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -1985,9 +1985,37 @@ class UserDoctorService extends BaseService // 发送IM消息-患者病例 $imService->patientCase($order_inquiry,$user_doctor['user_id'],$order_inquiry_case['disease_desc']); - // 发送站内、订阅、短信消息-医生已接诊 - $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['order_inquiry_id']); - $MessagePush->patientAcceptedInquiry(); + // 处理服务包情况 + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + // 检测问诊是否服务包首次问诊 + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); + if ($is_first){ + // 患者-通知患者医生已接受服务包服务 + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->patientAcceptedServicePackage(); + }else{ + // 患者-通知患者医生已接诊服务包相关问诊订单 + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->patientAcceptedServicePackageInquiry(); + } + + // 检测患者服务包内是否还存在剩余药品 + $res = $OrderServicePackageService->checkOrderServiceRemainingProduct($order_service_no); + if ($res){ + // 患者-通知患者服务包药品未使用完 + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->patientServicePackageHaveProduct(); + } + }else{ + // 发送站内、订阅、短信消息-医生已接诊 + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->patientAcceptedInquiry(); + } }catch(\Exception $e){ return success([],HttpEnumCode::HTTP_SUCCESS,$e->getMessage()); } diff --git a/app/Services/UserPharmacistService.php b/app/Services/UserPharmacistService.php index 4e0f0a7..641fb6f 100644 --- a/app/Services/UserPharmacistService.php +++ b/app/Services/UserPharmacistService.php @@ -257,12 +257,12 @@ class UserPharmacistService extends BaseService $imService->prescriptionIssued($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id'],$product_name,(string)$order_prescription['order_prescription_id'],7); // 发送站内、短信消息-患者的处方被药师审核通过 - $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); $MessagePush->patientPrescriptionVerifyPass(); // 站内、订阅失败发送短信-医生开具的处方审核通过 // 发送目标不同,重新实例化 - $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['inquiry_no']); $MessagePush->prescriptionVerifySuccess(); // 添加处方过期队列 @@ -279,7 +279,7 @@ class UserPharmacistService extends BaseService } }else{ // 站内、订阅失败发送短信-医生开具的处方审核未通过 - $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']); + $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['inquiry_no']); $MessagePush->prescriptionVerifyFail($order_prescription['order_prescription_id']); } diff --git a/app/Services/UserService.php b/app/Services/UserService.php index f3771cf..4eb7d52 100644 --- a/app/Services/UserService.php +++ b/app/Services/UserService.php @@ -763,7 +763,7 @@ class UserService extends BaseService /** * 通过user_id获取用户openid * @param string|int $user_id - * @param int $user_type + * @param int|string $user_type * @return string */ public function getOpenIdWithUserId(string|int $user_id, int|string $user_type): string @@ -876,6 +876,13 @@ class UserService extends BaseService return true; } + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)){ + return false; + } + $message = "您有一条新的问诊消息"; // 判断消息类型 if (isset($msg_body[0]['MsgType'])){ @@ -907,7 +914,7 @@ class UserService extends BaseService } } - $MessagePush = new MessagePush($user_id, $order_inquiry_id); + $MessagePush = new MessagePush($user_id, $order_inquiry['inquiry_no']); if ($user['user_type'] == 1){ // 患者 From c4d7f5e018e7216140e6f0db42be5a54e8fa0be0 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 19 Apr 2024 16:37:21 +0800 Subject: [PATCH 116/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9im=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/ImService.php | 166 +++++++++++++++++++++++++++++++++++-- 1 file changed, 160 insertions(+), 6 deletions(-) diff --git a/app/Services/ImService.php b/app/Services/ImService.php index 86d4f10..a0e05f4 100644 --- a/app/Services/ImService.php +++ b/app/Services/ImService.php @@ -6,6 +6,9 @@ use App\Constants\DoctorTitleCode; use App\Constants\HttpEnumCode; use App\Exception\BusinessException; use App\Model\Hospital; +use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageDetail; +use App\Model\OrderServicePackageProduct; use App\Model\User; use App\Model\UserDoctor; use App\Model\UserPatient; @@ -333,7 +336,22 @@ class ImService extends BaseService $message_content_data['message_type'] = 1; $message_content_data['title'] = "—等待医生接诊—"; if ($order_inquiry['inquiry_type'] == 1) { - $message_content_data['desc'] = "温馨提示:当前服务为专家问诊,医师接诊后可以在24小时内和医生沟通20个回合。医生繁忙请耐心等待,医生接诊会后第一时间短信通知您。"; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + // 检测问诊是否服务包首次问诊 + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); + if ($is_first){ + $message_content_data['desc'] = "温馨提示:医生繁忙请耐心等待,医生接诊后会第一时间通知您。医生接诊后,服务有效期开始计算。"; + }else{ + $message_content_data['desc'] = "温馨提示:医生繁忙请耐心等待,医生接诊后会第一时间通知您。"; + } + }else{ + $message_content_data['desc'] = "温馨提示:当前服务为专家问诊,医师接诊后可以在24小时内和医生沟通20个回合。医生繁忙请耐心等待,医生接诊会后第一时间短信通知您。"; + } } elseif ($order_inquiry['inquiry_type'] == 2) { $message_content_data['desc'] = "温馨提示:请耐心等待,您可继续补充病情,便于医生接诊后更快确认病情。"; } elseif ($order_inquiry['inquiry_type'] == 3) { @@ -386,7 +404,91 @@ class ImService extends BaseService } $message_content_data['title'] = "—问诊已开始,本次问诊可持续{$time}—"; - $message_content_data['desc'] = "医生已接诊,为提高沟通效率,您可一次性如实补充病情(具体症状,患病时长,用药情况及想咨询的问题等)。线上咨询不能代替面诊,医生建议仅供参考。"; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + throw new BusinessException("im消息发送失败"); + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($order_service_package['order_service_type']); + + $start_time = date('Y年m月d日 H时i分',strtotime($order_service_package['start_time'])); + $finish_time = date('Y年m月d日 H时i分',strtotime($order_service_package['finish_time'])); + + // 获取服务包当月剩余问诊次数 + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { + $OrderServicePackageService = new OrderServicePackageService(); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'],$order_service_package['order_service_type'],$order_service_package['user_id'], $order_service_package['doctor_id']); + $remaining_inquiry_count = $order_service_package_detail['monthly_frequencys'] - $month_inquiry_count; + if ($remaining_inquiry_count < 0){ + $remaining_inquiry_count = 0; + } + }else{ + $remaining_inquiry_count = "不限"; + } + + if ($remaining_inquiry_count == 0){ + $message_content_data['desc'] = "医生已接诊,为提高沟通效率,您可一次性如实补充病情(具体症状,患病时长,用药情况及想咨询的问题等)。线上咨询不能代替面诊,医生建议仅供参考。"; + } + + // 检测问诊是否服务包首次问诊 + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); + if ($is_first){ + $message_content_data['desc'] = "医生已接诊,{$order_type}服务开始,服务周期为:{$start_time}~{$finish_time},线上咨询不能代表面诊,医生的回复仅为建议。"; + }else{ + // 健康包 + if ($order_inquiry['inquiry_mode'] == 8){ + // 检测患者服务包内是否还存在剩余药品 + $res = $OrderServicePackageService->checkOrderServiceRemainingProduct($order_service_no); + if ($res){ + // 获取剩余药品数量 + $remaining_quantity = 0; + + // 健康包商品数据 + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_products = OrderServicePackageProduct::getList($params); + if (!empty($order_service_package_products)){ + foreach ($order_service_package_products as $order_service_package_product){ + $remaining_quantity += $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; + if ($remaining_quantity < 0){ + $remaining_quantity = 0; + } + } + } + + if ($remaining_quantity > 0){ + $message_content_data['desc'] = "医生已接诊,健康包服务本月剩余{$remaining_inquiry_count}次问诊,且还剩余{$remaining_quantity}盒肝爽颗粒,提醒医生开具处方。"; + }else{ + $message_content_data['desc'] = "医生已接诊,健康包服务本月剩余{$remaining_inquiry_count}次问诊,服务周期为:{$start_time}~{$finish_time},线上咨询不能代表面诊,医生的回复仅为建议。"; + } + } + } + + // 随访包 + if ($order_inquiry['inquiry_mode'] == 9){ + $message_content_data['desc'] = "医生已接诊,{$order_type}服务本月剩余{$remaining_inquiry_count}/不限次,服务周期为:{$start_time}~{$finish_time},线上咨询不能代表面诊,医生的回复仅为建议。"; + } + } + }else{ + $message_content_data['desc'] = "医生已接诊,为提高沟通效率,您可一次性如实补充病情(具体症状,患病时长,用药情况及想咨询的问题等)。线上咨询不能代替面诊,医生建议仅供参考。"; + } $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), @@ -423,8 +525,36 @@ class ImService extends BaseService // 消息内容 医生-患者 $message_content_data = array(); $message_content_data['message_type'] = 1; - $message_content_data['title'] = "—医生未接诊—"; - $message_content_data['desc'] = "医生因工作繁忙未能及时接诊,请您谅解。所支付金额会在24小时内原路退回,再次感谢您的支持"; + + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + throw new BusinessException("im消息发送失败"); + } + + // 转换服务包订单类型为汉字 + $order_type = orderServiceTypeToString($order_service_package['order_service_type']); + + // 检测问诊是否服务包首次问诊 + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); + if ($is_first){ + $message_content_data['title'] = "—医生未接诊—"; + $message_content_data['desc'] = "温馨提示:医生因工作繁忙未能及时进行接诊,请您见谅。{$order_type}订单金额会在24小时内原路退回,感谢您的支持。"; + }else{ + $message_content_data['title'] = "—医生未接诊—"; + $message_content_data['desc'] = "温馨提示:医生因工作繁忙未能及时进行接诊,请您见谅;稍后请再次发起问诊。"; + } + }else{ + $message_content_data['title'] = "—医生未接诊—"; + $message_content_data['desc'] = "医生因工作繁忙未能及时接诊,请您谅解。所支付金额会在24小时内原路退回,再次感谢您的支持"; + } $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), @@ -506,8 +636,32 @@ class ImService extends BaseService // 消息内容 医生-患者 $message_content_data = array(); $message_content_data['message_type'] = 1; - $message_content_data['title'] = "—问诊退款—"; - $message_content_data['desc'] = "平台已自动发起退款,请注意查看账户信息。"; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + throw new BusinessException("im消息发送失败"); + } + + // 检测问诊是否服务包首次问诊 + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); + if ($is_first){ + $message_content_data['title'] = "—服务退款—"; + $message_content_data['desc'] = "平台已自动发起退款,请注意查看账户信息。"; + }else{ + $message_content_data['title'] = "—问诊退款—"; + $message_content_data['desc'] = "平台已自动发起退款,请注意查看账户信息。"; + } + }else{ + $message_content_data['title'] = "—问诊退款—"; + $message_content_data['desc'] = "平台已自动发起退款,请注意查看账户信息。"; + } $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), From 4fdf7e2cc2bed1e29ca410a1c3411b58e21d77c5 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 19 Apr 2024 16:39:58 +0800 Subject: [PATCH 117/274] 1 --- app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php b/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php index a4c7efe..5de7b84 100644 --- a/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php +++ b/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php @@ -42,6 +42,7 @@ class UserCouponExpiredDelayDirectConsumer extends ConsumerMessage { Log::getInstance("queue-UserCouponExpired")->info("开始:" . json_encode($data, JSON_UNESCAPED_UNICODE)); + return Result::DROP; // 检测参数 if (!isset($data['user_coupon_id'])){ Log::getInstance("queue-UserCouponExpired")->error("入参错误"); From 5600baf2591270cd455757954d0c32f9db278b0e Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 22 Apr 2024 09:48:27 +0800 Subject: [PATCH 118/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=88=91=E7=9A=84?= =?UTF-8?q?=E8=B4=A6=E6=88=B7=E6=9C=88=E8=B4=A6=E5=8D=95=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=95=B0=E6=8D=AE=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/TestController.php | 161 +++++++++++++++++--------- app/Model/Order.php | 68 ++++++++++- app/Model/OrderInquiry.php | 5 +- app/Model/OrderServicePackage.php | 4 +- app/Services/DoctorAccountService.php | 139 +++++++++++++++------- 5 files changed, 275 insertions(+), 102 deletions(-) diff --git a/app/Controller/TestController.php b/app/Controller/TestController.php index f2851a2..6ac091c 100644 --- a/app/Controller/TestController.php +++ b/app/Controller/TestController.php @@ -7,16 +7,23 @@ use App\Amqp\Producer\AutoCompleteInquiryDelayDirectProducer; use App\Amqp\Producer\AutoFinishInquiryDelayDirectProducer; use App\Amqp\Producer\CancelUnpayOrdersDelayDirectProducer; use App\Amqp\Producer\SendSmsMessageProducer; +use App\Constants\DoctorTitleCode; use App\Constants\HttpEnumCode; use App\Exception\BusinessException; use App\Factory\CacheFactory; use App\Factory\ProdRedisFactory; +use App\Model\DoctorConfigFollowPackage; +use App\Model\DoctorConfigFollowPackageItem; +use App\Model\DoctorConfigHealthPackage; use App\Model\DoctorInquiryTime; use App\Model\HospitalDepartmentCustom; +use App\Model\Order; use App\Model\OrderInquiryCase; +use App\Model\OrderInquiryRefund; use App\Model\OrderPrescriptionProduct; use App\Model\OrderProduct; use App\Model\OrderProductItem; +use App\Model\OrderServicePackageRefund; use App\Model\PatientFamily; use App\Model\ReportRegulatory; use App\Model\User; @@ -447,62 +454,112 @@ class TestController extends AbstractController } public function test_17(){ - $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',1); - $keyword = $this->request->input('keyword',""); - $is_search_welfare_reception = $this->request->input('is_search_welfare_reception',0); // 是否参加公益图文问诊(0:否 1:是) - $is_first_online = $this->request->input('is_first_online',0); // 是否优先在线(1:是) - $page = $this->request->input('page',1); - $per_page = $this->request->input('per_page',10); + $params = array(); + $params['doctor_id'] = "516900370252341248"; - // 组合条件 - $hospital_params = array();// 医院搜索 - $doctor_params = array();// 医生搜索 - $doctor_expertise_params = array();// 医生专长搜索 + // 获取当月开始时间 + $start_date = date('Y-m-01 00:00:00', strtotime("2024-04-19")); - // 省市区 - if (!empty($province_id)) { - if (empty($city_id)) { - // 省份存在时需和城市在一块 - return fail(HttpEnumCode::CLIENT_HTTP_ERROR); + // 获取当月结束时间 + // 获取给定月份的下一个月的第一天,然后减去一天得到当月的最后一天 + $end_date = date("Y-m-d 23:59:59", strtotime("+1 month", strtotime($start_date)) - 1); + + $date_params = [$start_date, $end_date]; + + $results = Order::getDoctorCreatedDateOrderInquiryPage($params,$date_params,1,["*"]); + if (!empty($results['data'])) { + foreach ($results['data'] as &$result) { + // 入账金额 + $result['estimate_income'] = bcmul((string)$result['amount_total'],"0.75",2); + + // 入账状态-问诊订单 + if (!empty($result['OrderInquiry'])){ + if ($result['OrderInquiry']['inquiry_status'] == 4 || $result['OrderInquiry']['inquiry_status'] == 5){ + $result['entry_status'] = 1;// 入账中 + }elseif ($result['OrderInquiry']['inquiry_status'] == 6){ + $result['entry_status'] = 2;// 入账成功 + }elseif ($result['OrderInquiry']['inquiry_status'] == 7){ + $result['entry_status'] = 3;// 入账失败 + // 获取退款数据 + $params = array(); + $params['inquiry_no'] = $result['OrderInquiry']['inquiry_no']; + $order_inquiry_refunds = OrderInquiryRefund::getList($params); + if (!empty($order_inquiry_refunds)){ + $refund_total = 0; + foreach ($order_inquiry_refunds as $order_inquiry_refund){ + $refund_total = $refund_total + $order_inquiry_refund['refund_total']; + } + + // 订单退款金额 + $result['refund_total'] = $refund_total; + + if (($result['OrderInquiry']['payment_amount_total'] - $refund_total) > 0){ + $result['entry_status'] = 2;// 入账成功 + }else{ + $result['entry_status'] = 3;// 入账失败 + } + } + + if (!empty($result['OrderInquiry']['cancel_reason'])){ + $result['cancel_remarks'] = inquiryCancelReasonToPushString($result['OrderInquiry']['cancel_reason']); + } + }else{ + $result['entry_status'] = 0;// 未知 + } + + $result['patient_name'] = $result['OrderInquiry']['patient_name']; + $result['patient_name_mask'] = $result['OrderInquiry']['patient_name_mask']; + $result['patient_sex'] = $result['OrderInquiry']['patient_sex']; + $result['patient_age'] = $result['OrderInquiry']['patient_age']; + $result['start_time'] = $result['OrderInquiry']['reception_time']; + $result['finish_time'] = $result['OrderInquiry']['finish_time']; + $result['inquiry_type'] = $result['OrderInquiry']['inquiry_type']; + $result['inquiry_mode'] = $result['OrderInquiry']['inquiry_mode']; + } + + // 入账状态-服务包订单 + if (!empty($result['OrderServicePackage'])){ + if ($result['OrderServicePackage']['order_service_status'] == 3){ + $result['entry_status'] = 1;// 入账中 + }elseif ($result['OrderServicePackage']['order_service_status'] == 4){ + $result['entry_status'] = 2;// 入账成功 + }elseif ($result['OrderServicePackage']['order_service_status'] == 5){ + // 获取退款数据 + $params = array(); + $params['order_service_no'] = $result['OrderServicePackage']['order_service_no']; + $order_service_package_refunds = OrderServicePackageRefund::getList($params); + if (!empty($order_service_package_refunds)){ + $refund_total = 0; + foreach ($order_service_package_refunds as $order_service_package_refund){ + $refund_total = $refund_total + $order_service_package_refund['refund_total']; + } + + // 订单退款金额 + $result['refund_total'] = $refund_total; + + if (($result['OrderServicePackage']['payment_amount_total'] - $refund_total) > 0){ + $result['entry_status'] = 2;// 入账成功 + }else{ + $result['entry_status'] = 3;// 入账失败 + } + } + }else{ + $result['entry_status'] = 0;// 未知 + } + + $result['patient_name'] = $result['OrderServicePackage']['patient_name']; + $result['patient_name_mask'] = $result['OrderServicePackage']['patient_name_mask']; + $result['patient_sex'] = $result['OrderServicePackage']['patient_sex']; + $result['patient_age'] = $result['OrderServicePackage']['patient_age']; + $result['start_time'] = $result['OrderServicePackage']['start_time']; + $result['finish_time'] = $result['OrderServicePackage']['finish_time']; + } + + unset($result['OrderInquiry']); + unset($result['OrderServicePackage']); } - $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_bind_bank"] = 1;// 是否已绑定结算银行卡(0:否 1:是) - - $fields = [ - "doctor_id", - "user_id", - "user_name", - "multi_point_status", - "is_bind_bank", - "is_recommend", - "avatar", - "doctor_title", - "department_custom_id", - "department_custom_name", - "hospital_id", - "served_patients_num", - "praise_rate", - "avg_response_time", - "number_of_fans", - "be_good_at", - ]; - - $user_doctors = UserDoctor::getInquiryDoctorPageTest($keyword,$hospital_params, $doctor_params,$doctor_expertise_params,$is_search_welfare_reception,$is_first_online, $sort_order, ['*'],$page,$per_page); - return success($user_doctors); + return success($results); } } \ No newline at end of file diff --git a/app/Model/Order.php b/app/Model/Order.php index 0a5002c..daf8aa5 100644 --- a/app/Model/Order.php +++ b/app/Model/Order.php @@ -8,6 +8,8 @@ namespace App\Model; use Carbon\Carbon; use Hyperf\Database\Model\Collection; +use Hyperf\Database\Model\Relations\HasOne; +use Hyperf\DbConnection\Db; use Hyperf\Snowflake\Concern\Snowflake; /** @@ -30,8 +32,8 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property string $cancel_time 订单取消时间 * @property string $cancel_remarks 取消订单备注 * @property string $order_remarks 订单备注 - * @property \Carbon\Carbon $created_at 创建时间 - * @property \Carbon\Carbon $updated_at 修改时间 + * @property Carbon $created_at 创建时间 + * @property Carbon $updated_at 修改时间 */ class Order extends Model { @@ -49,6 +51,22 @@ class Order extends Model protected string $primaryKey = "order_id"; + /** + * 关联问诊订单表 + */ + public function OrderInquiry(): HasOne + { + return $this->hasOne(OrderInquiry::class, 'order_id', 'order_id'); + } + + /** + * 关联服务包订单表 + */ + public function OrderServicePackage(): HasOne + { + return $this->hasOne(OrderServicePackage::class, 'order_id', 'order_id'); + } + /** * 获取信息-单条 * @param array $params @@ -92,4 +110,50 @@ class Order extends Model return self::where($params)->update($data); } + /** + * 获取医生某一时间段收益明细分页数据 + * @param array $params + * @param array $date_params 时间区间 + * @param string|int $is_platform_deep_cooperation + * @param array $fields + * @param int|null $page + * @param int|null $per_page + * @return int|mixed|string + */ + public static function getDoctorCreatedDateOrderInquiryPage(array $params, array $date_params,string|int $is_platform_deep_cooperation,array $fields = ["*"], int $page = null, ?int $per_page = 10): mixed + { + $query = self::with(['OrderInquiry', 'OrderServicePackage'])->where($params); + + // 问诊订单 + $query = $query->where(function ($query) use ($date_params,$is_platform_deep_cooperation){ + $query->whereExists(function ($subQuery) use ($date_params,$is_platform_deep_cooperation){ + $subQuery->from('order_inquiry'); + if ($is_platform_deep_cooperation == 1){ + $subQuery->whereNotIn('inquiry_type', [2,4]); + } + + $subQuery->whereNotIn('inquiry_mode', [7,8,9]) + ->whereIn('inquiry_status', [4,5,6,7]) + ->whereBetween('reception_time', $date_params) + ->whereRaw('gdxz_order.order_id = gdxz_order_inquiry.order_id'); + }) + ->orWhereExists(function ($subQuery) use ($date_params) { + $subQuery->from('order_service_package') + ->whereRaw('gdxz_order.order_id = gdxz_order_service_package.order_id') + ->whereIn('order_service_status', [4,5,6,7]) + ->whereBetween('start_time', $date_params); + }); + }); + + $result = $query->paginate($per_page, $fields, "page", $page); + + $data = array(); + $data['current_page'] = $result->currentPage();// 当前页码 + $data['total'] = $result->total();//数据总数 + $data['data'] = $result->items();//数据 + $data['per_page'] = $result->perPage();//每页个数 + $data['last_page'] = $result->lastPage();//最后一页 + + return $data; + } } diff --git a/app/Model/OrderInquiry.php b/app/Model/OrderInquiry.php index 52a38f8..07c628d 100644 --- a/app/Model/OrderInquiry.php +++ b/app/Model/OrderInquiry.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace App\Model; +use Carbon\Carbon; use Hyperf\Database\Model\Collection; use Hyperf\Database\Model\Relations\HasOne; use Hyperf\Database\Query\Builder; @@ -47,8 +48,8 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property string $patient_name_mask 患者姓名-就诊人(掩码) * @property int $patient_sex 患者性别-就诊人(0:未知 1:男 2:女) * @property int $patient_age 患者年龄-就诊人 - * @property \Carbon\Carbon $created_at 创建时间 - * @property \Carbon\Carbon $updated_at 修改时间 + * @property Carbon $created_at 创建时间 + * @property Carbon $updated_at 修改时间 * @property-read UserDoctor|null $UserDoctor * @property-read OrderInquiryCase|null $OrderInquiryCase */ diff --git a/app/Model/OrderServicePackage.php b/app/Model/OrderServicePackage.php index 98a99f1..92fa5ff 100644 --- a/app/Model/OrderServicePackage.php +++ b/app/Model/OrderServicePackage.php @@ -41,8 +41,8 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property string $patient_name_mask 患者姓名-就诊人(掩码) * @property int $patient_sex 患者性别-就诊人(0:未知 1:男 2:女) * @property int $patient_age 患者年龄-就诊人 - * @property \Carbon\Carbon $created_at 创建时间 - * @property \Carbon\Carbon $updated_at 修改时间 + * @property Carbon $created_at 创建时间 + * @property Carbon $updated_at 修改时间 * @property-read OrderServicePackageCase|null $OrderServicePackageCase */ class OrderServicePackage extends Model diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index a20d06e..db38b1f 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -10,7 +10,10 @@ use App\Model\DoctorBankCard; use App\Model\DoctorWithdrawal; use App\Model\DoctorWithdrawalBank; use App\Model\DoctorWithdrawalOrder; +use App\Model\Order; use App\Model\OrderInquiry; +use App\Model\OrderInquiryRefund; +use App\Model\OrderServicePackageRefund; use App\Model\UserDoctor; use App\Model\UserDoctorInfo; use Hyperf\DbConnection\Db; @@ -105,65 +108,113 @@ class DoctorAccountService extends BaseService return fail(); } + $params = array(); + $params['doctor_id'] = $user_doctor['doctor_id']; + // 获取当月开始时间 - $start_date = date('Y-m-01 00:00:00', strtotime($date)); + $start_date = date('Y-m-01 00:00:00',$date); // 获取当月结束时间 // 获取给定月份的下一个月的第一天,然后减去一天得到当月的最后一天 $end_date = date("Y-m-d 23:59:59", strtotime("+1 month", strtotime($start_date)) - 1); - $reception_time = [$start_date, $end_date]; + $date_params = [$start_date, $end_date]; - // 获取医生当日接诊订单金额 - $fields = [ - 'order_inquiry_id', - 'inquiry_type', - 'inquiry_mode', - 'inquiry_status', - 'inquiry_refund_status', - 'inquiry_no', - 'amount_total', - 'payment_amount_total', - 'reception_time', - 'finish_time', - 'patient_name', - 'patient_sex', - 'patient_age', - 'cancel_reason', - 'cancel_remarks', - 'created_at', - ]; + $results = Order::getDoctorCreatedDateOrderInquiryPage($params,$date_params,$user_doctor['is_platform_deep_cooperation'],['*'],$page,$per_page); + if (!empty($results['data'])) { + foreach ($results['data'] as &$result) { + // 入账金额 + $result['estimate_income'] = bcmul((string)$result['amount_total'],"0.75",2); - $params = array(); - $params['doctor_id'] = $user_info['client_user_id']; - $inquiry_status_params = [4,5,6,7]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + // 入账状态-问诊订单 + if (!empty($result['OrderInquiry'])){ + if ($result['OrderInquiry']['inquiry_status'] == 4 || $result['OrderInquiry']['inquiry_status'] == 5){ + $result['entry_status'] = 1;// 入账中 + }elseif ($result['OrderInquiry']['inquiry_status'] == 6){ + $result['entry_status'] = 2;// 入账成功 + }elseif ($result['OrderInquiry']['inquiry_status'] == 7){ + $result['entry_status'] = 3;// 入账失败 + // 获取退款数据 + $params = array(); + $params['inquiry_no'] = $result['OrderInquiry']['inquiry_no']; + $order_inquiry_refunds = OrderInquiryRefund::getList($params); + if (!empty($order_inquiry_refunds)){ + $refund_total = 0; + foreach ($order_inquiry_refunds as $order_inquiry_refund){ + $refund_total = $refund_total + $order_inquiry_refund['refund_total']; + } - if ($user_doctor['is_platform_deep_cooperation'] == 0){ - $order_inquiry = OrderInquiry:: getDoctorCreatedDateOrderInquiryPage($params, $reception_time, $inquiry_status_params,[],$fields,$page,$per_page); - }else{ - $order_inquiry = OrderInquiry:: getDoctorCreatedDateOrderInquiryPage($params, $reception_time, $inquiry_status_params,[2,4],$fields,$page,$per_page); - } - if (!empty($order_inquiry['data'])) { - foreach ($order_inquiry['data'] as &$item) { - $item['estimate_income'] = bcmul((string)$item['amount_total'],"0.75",2); + // 订单退款金额 + $result['refund_total'] = $refund_total; - // 入账状态 - if ($item['inquiry_status'] == 4 || $item['inquiry_status'] == 5){ - $item['entry_status'] = 1;// 入账中 - }elseif ($item['inquiry_status'] == 6){ - $item['entry_status'] = 2;// 入账成功 - }elseif ($item['inquiry_status'] == 7){ - $item['entry_status'] = 3;// 入账失败 - if (!empty($item['cancel_reason'])){ - $item['cancel_reason'] = inquiryCancelReasonToPushString($item['cancel_reason']); + if (($result['OrderInquiry']['payment_amount_total'] - $refund_total) > 0){ + $result['entry_status'] = 2;// 入账成功 + }else{ + $result['entry_status'] = 3;// 入账失败 + } + } + + if (!empty($result['OrderInquiry']['cancel_reason'])){ + $result['cancel_remarks'] = inquiryCancelReasonToPushString($result['OrderInquiry']['cancel_reason']); + } + }else{ + $result['entry_status'] = 0;// 未知 } - }else{ - $item['entry_status'] = 0;// 未知 + + $result['patient_name'] = $result['OrderInquiry']['patient_name']; + $result['patient_name_mask'] = $result['OrderInquiry']['patient_name_mask']; + $result['patient_sex'] = $result['OrderInquiry']['patient_sex']; + $result['patient_age'] = $result['OrderInquiry']['patient_age']; + $result['start_time'] = $result['OrderInquiry']['reception_time']; + $result['finish_time'] = $result['OrderInquiry']['finish_time']; + $result['inquiry_type'] = $result['OrderInquiry']['inquiry_type']; + $result['inquiry_mode'] = $result['OrderInquiry']['inquiry_mode']; } + + // 入账状态-服务包订单 + if (!empty($result['OrderServicePackage'])){ + if ($result['OrderServicePackage']['order_service_status'] == 3){ + $result['entry_status'] = 1;// 入账中 + }elseif ($result['OrderServicePackage']['order_service_status'] == 4){ + $result['entry_status'] = 2;// 入账成功 + }elseif ($result['OrderServicePackage']['order_service_status'] == 5){ + // 获取退款数据 + $params = array(); + $params['order_service_no'] = $result['OrderServicePackage']['order_service_no']; + $order_service_package_refunds = OrderServicePackageRefund::getList($params); + if (!empty($order_service_package_refunds)){ + $refund_total = 0; + foreach ($order_service_package_refunds as $order_service_package_refund){ + $refund_total = $refund_total + $order_service_package_refund['refund_total']; + } + + // 订单退款金额 + $result['refund_total'] = $refund_total; + + if (($result['OrderServicePackage']['payment_amount_total'] - $refund_total) > 0){ + $result['entry_status'] = 2;// 入账成功 + }else{ + $result['entry_status'] = 3;// 入账失败 + } + } + }else{ + $result['entry_status'] = 0;// 未知 + } + + $result['patient_name'] = $result['OrderServicePackage']['patient_name']; + $result['patient_name_mask'] = $result['OrderServicePackage']['patient_name_mask']; + $result['patient_sex'] = $result['OrderServicePackage']['patient_sex']; + $result['patient_age'] = $result['OrderServicePackage']['patient_age']; + $result['start_time'] = $result['OrderServicePackage']['start_time']; + $result['finish_time'] = $result['OrderServicePackage']['finish_time']; + } + + unset($result['OrderInquiry']); + unset($result['OrderServicePackage']); } } - return success($order_inquiry); + return success($results); } /** From 155ce8d7aa06f426ea9a35ad0ea3bfce07cbf471 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 22 Apr 2024 10:02:23 +0800 Subject: [PATCH 119/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=88=91=E7=9A=84?= =?UTF-8?q?=E8=B4=A6=E6=88=B7=E6=9C=88=E8=B4=A6=E5=8D=95=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=95=B0=E6=8D=AE=E4=BF=AE=E6=94=B91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorAccountService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index db38b1f..f376111 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -112,7 +112,7 @@ class DoctorAccountService extends BaseService $params['doctor_id'] = $user_doctor['doctor_id']; // 获取当月开始时间 - $start_date = date('Y-m-01 00:00:00',$date); + $start_date = date('Y-m-01 00:00:00',strtotime($date)); // 获取当月结束时间 // 获取给定月份的下一个月的第一天,然后减去一天得到当月的最后一天 From 5d79f4795b7eaa02d9b15b727cbf1a51f4cca6e8 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 22 Apr 2024 14:30:46 +0800 Subject: [PATCH 120/274] =?UTF-8?q?=E6=88=91=E7=9A=84=E8=B4=A6=E6=88=B7?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=BF=AE=E6=94=B9-=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=88=91=E7=9A=84=E8=B4=A6=E6=88=B7=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...pleteServicePackageDelayDirectConsumer.php | 119 +++++++++++++++- app/Controller/TestController.php | 134 ++++++------------ app/Model/DoctorAccountDay.php | 5 +- app/Model/Order.php | 88 +++++++++++- app/Model/OrderInquiry.php | 6 +- app/Model/OrderServicePackage.php | 36 ++++- app/Services/DoctorAccountService.php | 37 +++-- app/Services/InquiryService.php | 129 +++++------------ app/Services/OrderServicePackageService.php | 77 ++++++++++ 9 files changed, 426 insertions(+), 205 deletions(-) diff --git a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php index f89d3f5..acf4589 100644 --- a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php @@ -5,7 +5,10 @@ declare(strict_types=1); namespace App\Amqp\Consumer; use App\Amqp\Producer\AutoCompleteServicePackageDelayDirectProducer; +use App\Model\DoctorAccount; +use App\Model\DoctorAccountDay; use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageDetail; use App\Model\OrderServicePackageInquiry; use App\Model\UserDoctor; use App\Services\MessagePush; @@ -70,7 +73,7 @@ class AutoCompleteServicePackageDelayDirectConsumer extends ConsumerMessage $params['order_service_no'] = $data['order_no']; $order_service_package = OrderServicePackage::getOne($params); if (empty($order_service_package)){ - Log::getInstance("queue-AutoCompleteServicePackage")->error("入参错误" ); + Log::getInstance("queue-AutoCompleteServicePackage")->error("订单错误" ); return Result::ACK; } @@ -94,6 +97,14 @@ class AutoCompleteServicePackageDelayDirectConsumer extends ConsumerMessage return Result::DROP; } + // 获取订单详情数据 + $params = array(); + $params['order_service_no'] = $data['order_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + Log::getInstance("queue-AutoCompleteServicePackage")->error("订单详情错误" ); + return Result::ACK; + } }catch (\Throwable $e){ Log::getInstance("queue-AutoCompleteServicePackage")->error($e->getMessage()); return Result::REQUEUE; @@ -110,6 +121,33 @@ class AutoCompleteServicePackageDelayDirectConsumer extends ConsumerMessage $params['order_service_id'] = $order_service_package['order_service_id']; OrderServicePackage::edit($params,$data); + // 处理统计问题 + if ($order_service_package['amount_total'] > 0) { + // 计算本次问诊服务包问诊金额 + $amount_total = bcmul( + (string)$order_service_package_detail['service_count'], + bcmul( + (string)$order_service_package_detail['single_inquiry_price'], + 0.75, + 3), + 3 + ); + + // 处理医生账户总表 + $res = $this->handleDoctorAccount($amount_total,$order_service_package['doctor_id']); + if (!$res) { + Db::rollBack(); + return Result::REQUEUE; + } + + // 处理医生账户表-日 + $res = $this->handleDoctorAccountDay($amount_total,$order_service_package['doctor_id'],$order_service_package['start_time']); + if (!$res) { + Db::rollBack(); + return Result::REQUEUE; + } + } + Db::commit(); }catch (\Throwable $e){ Db::rollBack(); @@ -262,4 +300,83 @@ class AutoCompleteServicePackageDelayDirectConsumer extends ConsumerMessage return true; } + + /** + * 处理医生账户总表 + * 创建/修改医生账户总表中总金额、账户余额数据 + * @param string|int $amount_total + * @param string|int $doctor_id + * @return bool + */ + protected function handleDoctorAccount(string|int $amount_total,string|int $doctor_id): bool + { + $amount_total = bcmul((string)$amount_total,"0.75",8); + + $params = array(); + $params['doctor_id'] = $doctor_id; + $doctor_account = DoctorAccount::getOne($params); + if (empty($doctor_account)) { + // 首次 + $data = array(); + $data['doctor_id'] = $doctor_id; + $data['total_amount'] = $amount_total; + $data['balance_account'] = $amount_total; + $data['applied_withdrawal_amount'] = 0; + $data['actual_withdrawal_amount'] = 0; + $data['income_tax'] = 0; + $doctor_account = DoctorAccount::addDoctorAccount($data); + if (empty($doctor_account)) { + return false; + } + } else { + // 非首次 + // 总金额(已结束订单的总金额) + $params = array(); + $params['account_id'] = $doctor_account['account_id']; + DoctorAccount::inc($params, 'total_amount', (float)$amount_total); + + // 账户余额 + DoctorAccount::inc($params, 'balance_account', (float)$amount_total); + } + + return true; + } + + /** + * 处理医生账户表-日 + * @param string|int $amount_total + * @param string|int $doctor_id + * @param string $start_time + * @return bool + */ + protected function handleDoctorAccountDay(string|int $amount_total,string|int $doctor_id,string $start_time): bool + { + $amount_total = bcmul((string)$amount_total,"0.75",8); + + $params = array(); + $params['doctor_id'] = $doctor_id; + $params['date'] = date('Y-m-d', strtotime($start_time)); + $doctor_account_day = DoctorAccountDay::getOne($params); + if (empty($doctor_account_day)) { + // 当日首次 + $data = array(); + $data['doctor_id'] = $doctor_id; + $data['year'] = date('Y', strtotime($start_time)); + $data['month'] = date('m', strtotime($start_time)); + $data['day'] = date('d', strtotime($start_time)); + $data['date'] = date('Y-m-d', strtotime($start_time)); + $data['total_amount'] = $amount_total; + $doctor_account_day = DoctorAccountDay::addDoctorAccountDay($data); + if (empty($doctor_account_day)) { + return false; + } + } else { + // 非当日首次 + $params = array(); + $params['account_detail_id'] = $doctor_account_day['account_detail_id']; + DoctorAccountDay::inc($params, 'total_amount', (float)$amount_total); + } + + return true; + } } diff --git a/app/Controller/TestController.php b/app/Controller/TestController.php index 6ac091c..6472c79 100644 --- a/app/Controller/TestController.php +++ b/app/Controller/TestController.php @@ -12,6 +12,7 @@ use App\Constants\HttpEnumCode; use App\Exception\BusinessException; use App\Factory\CacheFactory; use App\Factory\ProdRedisFactory; +use App\Model\DoctorAccountDay; use App\Model\DoctorConfigFollowPackage; use App\Model\DoctorConfigFollowPackageItem; use App\Model\DoctorConfigHealthPackage; @@ -454,112 +455,61 @@ class TestController extends AbstractController } public function test_17(){ + + + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $year = $this->request->input('date'); + + $date = date('Y-m-d',strtotime("2024-04-15")); + + // 获取医生数据 + $params = array(); + $params['doctor_id'] = "516900370252341248"; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)){ + return fail(); + } + $params = array(); $params['doctor_id'] = "516900370252341248"; - // 获取当月开始时间 - $start_date = date('Y-m-01 00:00:00', strtotime("2024-04-19")); + // 获取当天开始时间 + $start_date = date('Y-m-d 00:00:00', strtotime($date)); - // 获取当月结束时间 - // 获取给定月份的下一个月的第一天,然后减去一天得到当月的最后一天 - $end_date = date("Y-m-d 23:59:59", strtotime("+1 month", strtotime($start_date)) - 1); + // 获取当天结束时间 + $end_date = date('Y-m-d 23:59:59', strtotime($date)); $date_params = [$start_date, $end_date]; - $results = Order::getDoctorCreatedDateOrderInquiryPage($params,$date_params,1,["*"]); - if (!empty($results['data'])) { - foreach ($results['data'] as &$result) { - // 入账金额 - $result['estimate_income'] = bcmul((string)$result['amount_total'],"0.75",2); - // 入账状态-问诊订单 - if (!empty($result['OrderInquiry'])){ - if ($result['OrderInquiry']['inquiry_status'] == 4 || $result['OrderInquiry']['inquiry_status'] == 5){ - $result['entry_status'] = 1;// 入账中 - }elseif ($result['OrderInquiry']['inquiry_status'] == 6){ - $result['entry_status'] = 2;// 入账成功 - }elseif ($result['OrderInquiry']['inquiry_status'] == 7){ - $result['entry_status'] = 3;// 入账失败 - // 获取退款数据 - $params = array(); - $params['inquiry_no'] = $result['OrderInquiry']['inquiry_no']; - $order_inquiry_refunds = OrderInquiryRefund::getList($params); - if (!empty($order_inquiry_refunds)){ - $refund_total = 0; - foreach ($order_inquiry_refunds as $order_inquiry_refund){ - $refund_total = $refund_total + $order_inquiry_refund['refund_total']; - } + $inquiryService = new InquiryService(); - // 订单退款金额 - $result['refund_total'] = $refund_total; + // 获取医生当日接诊的订单金额 + $doctor_today_inquiry_total = Order::getDoctorDayAmountTotal($params,$date_params,1); - if (($result['OrderInquiry']['payment_amount_total'] - $refund_total) > 0){ - $result['entry_status'] = 2;// 入账成功 - }else{ - $result['entry_status'] = 3;// 入账失败 - } - } + // 获取医生当日已完成待入帐的订单金额 + $doctor_day_completed_amount_total = Order::getDoctorDayCompletedAmountTotal($params,$date_params,0); - if (!empty($result['OrderInquiry']['cancel_reason'])){ - $result['cancel_remarks'] = inquiryCancelReasonToPushString($result['OrderInquiry']['cancel_reason']); - } - }else{ - $result['entry_status'] = 0;// 未知 - } + if ($user_doctor['is_platform_deep_cooperation'] == 0){ +// // 获取医生当日接诊的订单金额 +// $doctor_today_inquiry_total = $inquiryService->getDoctorDayAmountTotal($user_info['client_user_id'],$date); - $result['patient_name'] = $result['OrderInquiry']['patient_name']; - $result['patient_name_mask'] = $result['OrderInquiry']['patient_name_mask']; - $result['patient_sex'] = $result['OrderInquiry']['patient_sex']; - $result['patient_age'] = $result['OrderInquiry']['patient_age']; - $result['start_time'] = $result['OrderInquiry']['reception_time']; - $result['finish_time'] = $result['OrderInquiry']['finish_time']; - $result['inquiry_type'] = $result['OrderInquiry']['inquiry_type']; - $result['inquiry_mode'] = $result['OrderInquiry']['inquiry_mode']; - } + // 获取医生当日已完成未结束的订单金额 +// $doctor_day_completed_amount_total = $inquiryService->getDoctorDayCompletedAmountTotal($user_info['client_user_id'],$date); + }else{ +// // 获取医生当日接诊的订单金额-坐班医生 +// $doctor_today_inquiry_total = $inquiryService->getCooperationDoctorDayAmountTotal($user_info['client_user_id'],$date); - // 入账状态-服务包订单 - if (!empty($result['OrderServicePackage'])){ - if ($result['OrderServicePackage']['order_service_status'] == 3){ - $result['entry_status'] = 1;// 入账中 - }elseif ($result['OrderServicePackage']['order_service_status'] == 4){ - $result['entry_status'] = 2;// 入账成功 - }elseif ($result['OrderServicePackage']['order_service_status'] == 5){ - // 获取退款数据 - $params = array(); - $params['order_service_no'] = $result['OrderServicePackage']['order_service_no']; - $order_service_package_refunds = OrderServicePackageRefund::getList($params); - if (!empty($order_service_package_refunds)){ - $refund_total = 0; - foreach ($order_service_package_refunds as $order_service_package_refund){ - $refund_total = $refund_total + $order_service_package_refund['refund_total']; - } - - // 订单退款金额 - $result['refund_total'] = $refund_total; - - if (($result['OrderServicePackage']['payment_amount_total'] - $refund_total) > 0){ - $result['entry_status'] = 2;// 入账成功 - }else{ - $result['entry_status'] = 3;// 入账失败 - } - } - }else{ - $result['entry_status'] = 0;// 未知 - } - - $result['patient_name'] = $result['OrderServicePackage']['patient_name']; - $result['patient_name_mask'] = $result['OrderServicePackage']['patient_name_mask']; - $result['patient_sex'] = $result['OrderServicePackage']['patient_sex']; - $result['patient_age'] = $result['OrderServicePackage']['patient_age']; - $result['start_time'] = $result['OrderServicePackage']['start_time']; - $result['finish_time'] = $result['OrderServicePackage']['finish_time']; - } - - unset($result['OrderInquiry']); - unset($result['OrderServicePackage']); - } + // 获取医生当日已完成未结束的订单金额-坐班医生 +// $doctor_day_completed_amount_total = $inquiryService->getCooperationDoctorCompletedAmountTotal($user_info['client_user_id'],$date); } - return success($results); + + + $result = array(); + $result['doctor_today_inquiry_total'] = bcmul((string)$doctor_today_inquiry_total,"0.75",2); // 今日接诊收入 + + return success($result); } } \ No newline at end of file diff --git a/app/Model/DoctorAccountDay.php b/app/Model/DoctorAccountDay.php index 9e406cf..1c348f6 100644 --- a/app/Model/DoctorAccountDay.php +++ b/app/Model/DoctorAccountDay.php @@ -115,9 +115,10 @@ class DoctorAccountDay extends Model */ public static function getDoctorMonth(array $params,array $fields = ['*']): \Hyperf\Collection\Collection { - return self::select(['month',Db::raw('SUM(total_amount) AS `total_amount`')]) + return self::select(['year','month',Db::raw('SUM(total_amount) AS `total_amount`')]) ->where($params) - ->groupBy(['month']) + ->groupBy(['year','month']) + ->orderBy('year') ->orderBy('month') ->get($fields); } diff --git a/app/Model/Order.php b/app/Model/Order.php index daf8aa5..1f71093 100644 --- a/app/Model/Order.php +++ b/app/Model/Order.php @@ -118,9 +118,9 @@ class Order extends Model * @param array $fields * @param int|null $page * @param int|null $per_page - * @return int|mixed|string + * @return array */ - public static function getDoctorCreatedDateOrderInquiryPage(array $params, array $date_params,string|int $is_platform_deep_cooperation,array $fields = ["*"], int $page = null, ?int $per_page = 10): mixed + public static function getDoctorCreatedDateOrderInquiryPage(array $params, array $date_params,string|int $is_platform_deep_cooperation,array $fields = ["*"], int $page = null, ?int $per_page = 10): array { $query = self::with(['OrderInquiry', 'OrderServicePackage'])->where($params); @@ -156,4 +156,88 @@ class Order extends Model return $data; } + + /** + * 获取医生当日预计的订单金额 + * @param array $params + * @param array $date_params 时间区间 + * @param string|int $is_platform_deep_cooperation + * @return int|null|string + */ + public static function getDoctorDayAmountTotal(array $params, array $date_params,string|int $is_platform_deep_cooperation): int|null|string + { + $query = self::where($params); + + // 问诊订单 + $query = $query->where(function ($query) use ($date_params,$is_platform_deep_cooperation){ + $query->whereExists(function ($subQuery) use ($date_params,$is_platform_deep_cooperation){ + $subQuery->from('order_inquiry'); + if ($is_platform_deep_cooperation == 1){ + $subQuery->whereNotIn('inquiry_type', [2,4]); + } + + $subQuery->whereNotIn('inquiry_mode', [7,8,9]) + ->whereIn('inquiry_status', [4,5]) + ->whereBetween('reception_time', $date_params) + ->where('inquiry_refund_status', 0) + ->where('inquiry_pay_status', 2) + ->where('is_withdrawal', 0) + ->whereRaw('gdxz_order.order_id = gdxz_order_inquiry.order_id'); + }) + ->orWhereExists(function ($subQuery) use ($date_params) { + $subQuery->from('order_service_package') + ->whereRaw('gdxz_order.order_id = gdxz_order_service_package.order_id') + ->whereIn('order_service_status', [3]) + ->whereBetween('start_time', $date_params) + ->where('refund_status', 0) + ->where('pay_status', 2); + }); + }); + + $result = $query->orderBy('created_at') + ->sum("amount_total");; + return $result; + } + + /** + * 获取医生当日已完成待入帐的订单金额 + * @param array $params + * @param array $date_params 时间区间 + * @param string|int $is_platform_deep_cooperation + * @return int|null|string + */ + public static function getDoctorDayCompletedAmountTotal(array $params, array $date_params,string|int $is_platform_deep_cooperation): int|null|string + { + $query = self::where($params); + + // 问诊订单 + $query = $query->where(function ($query) use ($date_params,$is_platform_deep_cooperation){ + $query->whereExists(function ($subQuery) use ($date_params,$is_platform_deep_cooperation){ + $subQuery->from('order_inquiry'); + if ($is_platform_deep_cooperation == 1){ + $subQuery->whereNotIn('inquiry_type', [2,4]); + } + + $subQuery->whereNotIn('inquiry_mode', [7,8,9]) + ->whereIn('inquiry_status', [5]) + ->whereBetween('reception_time', $date_params) + ->where('inquiry_refund_status', 0) + ->where('inquiry_pay_status', 2) + ->where('is_withdrawal', 0) + ->whereRaw('gdxz_order.order_id = gdxz_order_inquiry.order_id'); + }) + ->orWhereExists(function ($subQuery) use ($date_params) { + $subQuery->from('order_service_package') + ->whereRaw('gdxz_order.order_id = gdxz_order_service_package.order_id') + ->whereIn('order_service_status', [3]) + ->where('finish_time','>', $date_params[0]) + ->where('refund_status', 0) + ->where('pay_status', 2); + }); + }); + + $result = $query->orderBy('created_at') + ->sum("amount_total");; + return $result; + } } diff --git a/app/Model/OrderInquiry.php b/app/Model/OrderInquiry.php index 07c628d..9857fc6 100644 --- a/app/Model/OrderInquiry.php +++ b/app/Model/OrderInquiry.php @@ -292,11 +292,15 @@ class OrderInquiry extends Model * @param array $params * @param array $reception_time 接诊时间区间 * @param array $inquiry_status_params inquiry_status字段搜索条件 + * @param array $inquiry_type_not_params * @return int|mixed|string */ - public static function getDoctorAmountTotal(array $params, array $reception_time, array $inquiry_status_params): mixed + public static function getDoctorAmountTotal(array $params, array $reception_time, array $inquiry_status_params,array $inquiry_type_not_params = []): mixed { return self::where($params) + ->when($inquiry_type_not_params, function ($query, $inquiry_type_not_params) { + $query->whereNotIn('inquiry_type', $inquiry_type_not_params); + }) ->whereIn('inquiry_status', $inquiry_status_params) ->whereBetween('reception_time', $reception_time) ->orderBy('reception_time') diff --git a/app/Model/OrderServicePackage.php b/app/Model/OrderServicePackage.php index 92fa5ff..f070671 100644 --- a/app/Model/OrderServicePackage.php +++ b/app/Model/OrderServicePackage.php @@ -171,7 +171,7 @@ class OrderServicePackage extends Model /** * 获取某一时间段服务包订单-结束时间 * @param array $params - * @param array $finish_time_params 接诊时间区间 + * @param array $finish_time_params 结束时间区间 * @return Collection|array */ public static function getInquiryWithFinishTime(array $params, array $finish_time_params): Collection|array @@ -181,4 +181,38 @@ class OrderServicePackage extends Model ->orderBy('finish_time') ->get(); } + + /** + * 获取医生当日的服务包订单 + * @param array $params + * @param array $order_service_status_params + * @param array $start_time_params 开始时间区间 + * @return Collection|array + */ + public static function getDoctorDayOrderServiceWithStartTime(array $params, array $order_service_status_params,array $start_time_params): Collection|array + { + return self::where($params) + ->whereIn('order_service_status',$order_service_status_params) + ->whereIn('refund_status',[0,4,5]) + ->whereBetween('start_time', $start_time_params) + ->orderBy('start_time') + ->get(); + } + + /** + * 获取医生当日未结束的服务包订单 + * @param array $params + * @param array $order_service_status_params + * @param string $finish_time_params 当前时间 + * @return Collection|array + */ + public static function getDoctorDayNoFinishOrderService(array $params, array $order_service_status_params,string $finish_time_params): Collection|array + { + return self::where($params) + ->whereIn('order_service_status',$order_service_status_params) + ->whereIn('refund_status',[0,4,5]) + ->where('finish_time','>', $finish_time_params) + ->orderBy('start_time') + ->get(); + } } diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index f376111..9271e15 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -44,23 +44,34 @@ class DoctorAccountService extends BaseService } $inquiryService = new InquiryService(); + $OrderServicePackageService = new OrderServicePackageService(); - if ($user_doctor['is_platform_deep_cooperation'] == 0){ - // 获取医生当日接诊的订单金额 - $doctor_today_inquiry_total = $inquiryService->getDoctorDayAmountTotal($user_info['client_user_id'],$date); + // 获取医生当日的接诊订单金额 + $doctor_today_inquiry_total = $inquiryService->getDoctorDayAmountTotal($user_doctor['doctor_id'],$date,$user_doctor['is_platform_deep_cooperation']); - // 获取医生当日已完成未结束的订单金额 - $doctor_day_completed_amount_total = $inquiryService->getDoctorDayCompletedAmountTotal($user_info['client_user_id'],$date); - }else{ - // 获取医生当日接诊的订单金额-坐班医生 - $doctor_today_inquiry_total = $inquiryService->getCooperationDoctorDayAmountTotal($user_info['client_user_id'],$date); + // 获取医生当日的服务包订单问诊金额-开始时间 + $doctor_today_service_package_total = $OrderServicePackageService->getDoctorDayAmountTotal($user_doctor['doctor_id'],$date); - // 获取医生当日已完成未结束的订单金额-坐班医生 - $doctor_day_completed_amount_total = $inquiryService->getCooperationDoctorCompletedAmountTotal($user_info['client_user_id'],$date); - } + // 医生当日的订单金额 + $doctor_today_total = bcadd($doctor_today_inquiry_total,$doctor_today_service_package_total,2); + + // 获取医生当日已完成未结束的问诊订单金额 + $doctor_day_inquiry_completed_amount_total = $inquiryService->getDoctorDayCompletedAmountTotal($user_doctor['doctor_id'],$date,$user_doctor['is_platform_deep_cooperation']); + + // 获取医生当日未完成的服务包订单问诊金额-结束时间 + $doctor_day_service_package_completed_amount_total = $OrderServicePackageService->getDoctorDayNoFinishAmountTotal($user_doctor['doctor_id'],$date); + + // 已完成待入账金额 + $doctor_day_completed_amount_total = bcadd($doctor_day_inquiry_completed_amount_total,$doctor_day_service_package_completed_amount_total,2); // 获取医生账户余额 - $balance_account = $this->getDoctorBalanceAccount($user_info['client_user_id']); + $balance_account = 0; + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + $doctor_account = DoctorAccount::getOne($params); + if (!empty($doctor_account)) { + $balance_account = $doctor_account['balance_account']; + } // 获取医生每月账单数据 $bill = []; @@ -80,7 +91,7 @@ class DoctorAccountService extends BaseService } $result = array(); - $result['doctor_today_inquiry_total'] = bcmul((string)$doctor_today_inquiry_total,"0.75",2); // 今日接诊收入 + $result['doctor_today_inquiry_total'] = bcmul((string)$doctor_today_total,"0.75",2); // 今日预计收入 $result['doctor_day_completed_amount_total'] = bcmul((string)$doctor_day_completed_amount_total ,"0.75",2); // 今日已完成收入 $result['balance_account'] = bcmul((string)$balance_account ,"1",2); // 账户余额 $result['bill'] = $bill; // 账单 diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 8917e2e..e22ab0e 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -107,7 +107,7 @@ class InquiryService extends BaseService // 检测是否存在同类型未完成的问诊订单 $PatientOrderService = new PatientOrderService(); - $order_inquiry_id = $PatientOrderService->getNotFinishedOrderInquiry($request_params['inquiry_type'],$request_params['inquiry_mode'],$user_info['client_user_id']); + $order_inquiry_id = $PatientOrderService->getNotFinishedOrderInquiry($request_params['inquiry_type'], $request_params['inquiry_mode'], $user_info['client_user_id']); if (!empty($order_inquiry_id)) { $result['status'] = 2; $result['message'] = "当前患者存在进行中的问诊订单"; @@ -170,7 +170,7 @@ class InquiryService extends BaseService } // 问诊购药 - if ($request_params['inquiry_type'] == 4){ + if ($request_params['inquiry_type'] == 4) { // 检测当前是否符合系统问诊时间 $inquiryService = new InquiryService(); $is_system_time_pass = $inquiryService->checkSystemInquiryTime($request_params['inquiry_type']); @@ -485,7 +485,7 @@ class InquiryService extends BaseService // 增加至未支付取消订单延迟队列 $time = 60 * 30; - if (\Hyperf\Config\config('app_env') == "dev"){ + if (\Hyperf\Config\config('app_env') == "dev") { $time = 60 * 5; } @@ -506,7 +506,7 @@ class InquiryService extends BaseService // 专家问诊-公益问诊 if (!empty($request_params['doctor_id']) && ($request_params['inquiry_type'] == 1 || $request_params['inquiry_type'] == 3)) { $time = 60 * 60 * 24; - if (\Hyperf\Config\config('app_env') == "dev"){ + if (\Hyperf\Config\config('app_env') == "dev") { $time = 60 * 10; } @@ -974,19 +974,19 @@ class InquiryService extends BaseService // 处理问诊回合数及时长-兼容旧数据 if (empty($order_inquiry['times_number']) || empty($order_inquiry['duration'])) { // 疑难问诊特殊处理 - if ($order_inquiry['inquiry_type'] == 1 && $order_inquiry['inquiry_mode'] == 6 ){ + if ($order_inquiry['inquiry_type'] == 1 && $order_inquiry['inquiry_mode'] == 6) { $params = array(); $params['doctor_id'] = $order_inquiry['doctor_id']; $params['inquiry_type'] = $order_inquiry['inquiry_type']; $params['inquiry_mode'] = $order_inquiry['inquiry_mode']; $doctor_inquiry_config_service = DoctorInquiryConfigService::getOne($params); - if (empty($doctor_inquiry_config_service)){ + if (empty($doctor_inquiry_config_service)) { return fail(); } $order_inquiry['times_number'] = $doctor_inquiry_config_service['service_rounds']; // 服务回合数 $order_inquiry['duration'] = $doctor_inquiry_config_service['service_period'] * 24 * 60; // 服务周期 - }else{ + } else { $params = array(); $params['inquiry_type'] = $order_inquiry['inquiry_type']; $params['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -1187,7 +1187,7 @@ class InquiryService extends BaseService $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $time = 60 * 60 * 24 * 3; - if (\Hyperf\Config\config("app_env") == "dev"){ + if (\Hyperf\Config\config("app_env") == "dev") { $time = 60; } @@ -1299,7 +1299,7 @@ class InquiryService extends BaseService // 检测是否存在同类型未完成的问诊订单 $PatientOrderService = new PatientOrderService(); - $result = $PatientOrderService->getNotFinishedOrderInquiry($order_inquiry['inquiry_type'],$order_inquiry['inquiry_mode'], $order_inquiry['patient_id']); + $result = $PatientOrderService->getNotFinishedOrderInquiry($order_inquiry['inquiry_type'], $order_inquiry['inquiry_mode'], $order_inquiry['patient_id']); if (!empty($result)) { return fail(HttpEnumCode::HTTP_ERROR, "当前患者存在进行中的问诊订单"); } @@ -1506,7 +1506,7 @@ class InquiryService extends BaseService $params = array(); $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); - if (empty($order_service_package_inquiry)){ + if (empty($order_service_package_inquiry)) { return success(); } @@ -1541,26 +1541,26 @@ class InquiryService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { // 获取服务包当月已问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'],$order_service_package['order_service_type'],$order_service_package['user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); } // 处理剩余服务天数 $finish_day = null; - if (!empty($order_service_package['finish_time'])){ + if (!empty($order_service_package['finish_time'])) { $finish_day = ceil((strtotime($order_service_package['finish_time']) - time()) / 60 / 60 / 24); } // 获取剩余药品数量 $remaining_quantity = 0; - if ($order_service_package['order_service_type'] == 1){ + if ($order_service_package['order_service_type'] == 1) { // 健康包商品数据 $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; $order_service_package_products = OrderServicePackageProduct::getList($params); - if (!empty($order_service_package_products)){ - foreach ($order_service_package_products as $order_service_package_product){ + if (!empty($order_service_package_products)) { + foreach ($order_service_package_products as $order_service_package_product) { $remaining_quantity += $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; - if ($remaining_quantity < 0){ + if ($remaining_quantity < 0) { $remaining_quantity = 0; } } @@ -1629,9 +1629,10 @@ class InquiryService extends BaseService * 状态:已接诊 * @param string $doctor_id * @param string $date + * @param string|int $is_platform_deep_cooperation 是否坐班医生 * @return float */ - public function getDoctorDayAmountTotal(string $doctor_id, string $date): float + public function getDoctorDayAmountTotal(string $doctor_id, string $date, string|int $is_platform_deep_cooperation): float { // 获取当天开始时间 $start_date = date('Y-m-d 00:00:00', strtotime($date)); @@ -1650,41 +1651,12 @@ class InquiryService extends BaseService $inquiry_status_params = [4, 5]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - $amount_total_sum = OrderInquiry::getDoctorAmountTotal($params, $reception_time, $inquiry_status_params); + $inquiry_type_not_params = []; + if ($is_platform_deep_cooperation) { + $inquiry_type_not_params = [2, 4]; + } - return $amount_total_sum ?: 0; - } - - /** - * 获取医生当日接诊的订单金额-坐班医生 - * 状态:已接诊 - * 排除快速-购药 - * @param string $doctor_id - * @param string $date - * @return float - */ - public function getCooperationDoctorDayAmountTotal(string $doctor_id, string $date): float - { - // 获取当天开始时间 - $start_date = date('Y-m-d 00:00:00', strtotime($date)); - - // 获取当天结束时间 - $end_date = date('Y-m-d 23:59:59', strtotime($date)); - - // 获取医生当日接诊订单金额 - $params = array(); - $params['doctor_id'] = $doctor_id; - $params['inquiry_refund_status'] = 0; // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) - $params['inquiry_pay_status'] = 2; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - $params['is_withdrawal'] = 0; // 是否提现(0:否 1:是 2:提现中) - - $reception_time = [$start_date, $end_date]; - - $inquiry_status_params = [4, 5]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - - $inquiry_type_not_params = [2, 4]; - - $amount_total_sum = OrderInquiry::getCooperationDoctorAmountTotal($params, $reception_time, $inquiry_status_params, $inquiry_type_not_params); + $amount_total_sum = OrderInquiry::getDoctorAmountTotal($params, $reception_time, $inquiry_status_params, $inquiry_type_not_params); return $amount_total_sum ?: 0; } @@ -1694,9 +1666,10 @@ class InquiryService extends BaseService * 状态:已完成 * @param string $doctor_id * @param string $date + * @param string|int $is_platform_deep_cooperation 是否坐班医生 * @return float */ - public function getDoctorDayCompletedAmountTotal(string $doctor_id, string $date): float + public function getDoctorDayCompletedAmountTotal(string $doctor_id, string $date,string|int $is_platform_deep_cooperation): float { // 获取当天开始时间 $start_date = date('Y-m-d 00:00:00', strtotime($date)); @@ -1715,41 +1688,11 @@ class InquiryService extends BaseService $inquiry_status_params = [5]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - $amount_total_sum = OrderInquiry::getDoctorAmountTotal($params, $reception_time, $inquiry_status_params); + if ($is_platform_deep_cooperation) { + $inquiry_type_not_params = [2, 4]; + } - return $amount_total_sum ?: 0; - } - - /** - * 获取医生当日已完成未结束的订单金额-坐班医生 - * 状态:已完成 - * 排除快速-购药 - * @param string $doctor_id - * @param string $date - * @return float - */ - public function getCooperationDoctorCompletedAmountTotal(string $doctor_id, string $date): float - { - // 获取当天开始时间 - $start_date = date('Y-m-d 00:00:00', strtotime($date)); - - // 获取当天结束时间 - $end_date = date('Y-m-d 23:59:59', strtotime($date)); - - // 获取医生当日接诊订单金额 - $params = array(); - $params['doctor_id'] = $doctor_id; - $params['inquiry_refund_status'] = 0; // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) - $params['inquiry_pay_status'] = 2; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - $params['is_withdrawal'] = 0; // 是否提现(0:否 1:是 2:提现中) - - $reception_time = [$start_date, $end_date]; - - $inquiry_status_params = [5]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - - $inquiry_type_not_params = [2, 4]; - - $amount_total_sum = OrderInquiry::getCooperationDoctorAmountTotal($params, $reception_time, $inquiry_status_params, $inquiry_type_not_params); + $amount_total_sum = OrderInquiry::getDoctorAmountTotal($params, $reception_time, $inquiry_status_params,$inquiry_type_not_params); return $amount_total_sum ?: 0; } @@ -2046,7 +1989,7 @@ class InquiryService extends BaseService } } } - }catch (\Throwable $e){ + } catch (\Throwable $e) { throw new BusinessException($e->getMessage()); } @@ -2247,12 +2190,12 @@ class InquiryService extends BaseService * @param string $end_date * @return array */ - public function getPatientServiceInquiry(string|int $order_service_type,string $patient_id, string $doctor_id,string $start_date,string $end_date): array + public function getPatientServiceInquiry(string|int $order_service_type, string $patient_id, string $doctor_id, string $start_date, string $end_date): array { - if ($order_service_type == 1){ + if ($order_service_type == 1) { $inquiry_type = 1; $inquiry_mode = 8; - }else{ + } else { $inquiry_type = 1; $inquiry_mode = 9; } @@ -2268,10 +2211,10 @@ class InquiryService extends BaseService $created_at = [$start_date, $end_date]; - $inquiry_status_params = [1,2,3,4,5,6]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + $inquiry_status_params = [1, 2, 3, 4, 5, 6]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - $result = OrderInquiry::getInquiryWithCreateTime($params,$created_at,$inquiry_status_params); - if (empty($result)){ + $result = OrderInquiry::getInquiryWithCreateTime($params, $created_at, $inquiry_status_params); + if (empty($result)) { return []; } diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 50aee1c..7f94f26 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1359,4 +1359,81 @@ class OrderServicePackageService extends BaseService return false; } + /** + * 获取医生当日的服务包订单问诊金额-开始时间 + * @param string $doctor_id + * @param string $date + * @return int|string + */ + public function getDoctorDayAmountTotal(string $doctor_id, string $date): int|string + { + $amount_total = 0; + + // 获取当天开始时间 + $start_date = date('Y-m-d 00:00:00', strtotime($date)); + + // 获取当天结束时间 + $end_date = date('Y-m-d 23:59:59', strtotime($date)); + + // 获取医生当日服务包订单 + $params = array(); + $params['doctor_id'] = $doctor_id; + + $order_service_status_params = [3]; + + $start_time_params = [$start_date,$end_date]; + $order_service_packages = OrderServicePackage::getDoctorDayOrderServiceWithStartTime($params,$order_service_status_params,$start_time_params); + foreach ($order_service_packages as $order_service_package){ + // 获取订单详情数据 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (!empty($order_service_package_detail)){ + // 计算本次问诊服务包问诊金额 + $amount_total = bcmul( + (string)$order_service_package_detail['service_count'], + (string)$order_service_package_detail['single_inquiry_price'], + 3 + ); + } + } + + return $amount_total; + } + + /** + * 获取医生当日未完成的服务包订单问诊金额-结束时间 + * @param string $doctor_id + * @param string $date + * @return int|string + */ + public function getDoctorDayNoFinishAmountTotal(string $doctor_id, string $date): int|string + { + $amount_total = 0; + + // 获取医生当日服务包订单 + $params = array(); + $params['doctor_id'] = $doctor_id; + + $order_service_status_params = [3]; + + $start_time_params = date('Y-m-d H:i:s', strtotime($date)); + $order_service_packages = OrderServicePackage::getDoctorDayNoFinishOrderService($params,$order_service_status_params,$start_time_params); + foreach ($order_service_packages as $order_service_package){ + // 获取订单详情数据 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (!empty($order_service_package_detail)){ + // 计算本次问诊服务包问诊金额 + $amount_total = bcmul( + (string)$order_service_package_detail['service_count'], + (string)$order_service_package_detail['single_inquiry_price'], + 3 + ); + } + } + + return $amount_total; + } } \ No newline at end of file From 26d89a58e356fa1525d6f5bd39e2f8ce9b23ede6 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 22 Apr 2024 15:07:09 +0800 Subject: [PATCH 121/274] =?UTF-8?q?=E6=88=91=E7=9A=84=E8=B4=A6=E6=88=B7?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=BF=AE=E6=94=B9-=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=88=91=E7=9A=84=E8=B4=A6=E6=88=B7=E6=95=B0=E6=8D=AE1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/InquiryService.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index e22ab0e..3a8923f 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -1688,6 +1688,7 @@ class InquiryService extends BaseService $inquiry_status_params = [5]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + $inquiry_type_not_params = []; if ($is_platform_deep_cooperation) { $inquiry_type_not_params = [2, 4]; } From 971baa32bfe9a951871bc2f3616d94d15727b262 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 22 Apr 2024 15:36:01 +0800 Subject: [PATCH 122/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=8F=90=E7=8E=B0?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/DoctorAccountController.php | 7 +--- app/Request/DoctorAccountRequest.php | 3 -- app/Services/DoctorAccountService.php | 43 ++++++---------------- config/routes.php | 2 +- 4 files changed, 13 insertions(+), 42 deletions(-) diff --git a/app/Controller/DoctorAccountController.php b/app/Controller/DoctorAccountController.php index e4acb19..89c65a9 100644 --- a/app/Controller/DoctorAccountController.php +++ b/app/Controller/DoctorAccountController.php @@ -50,21 +50,16 @@ class DoctorAccountController extends AbstractController /** * 获取提现数据 * @return ResponseInterface - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function getDoctorWithdrawalInfo(): ResponseInterface { - $request = $this->container->get(DoctorAccountRequest::class); - $request->scene('getDoctorWithdrawalInfo')->validateResolved(); - $DoctorAccountService = new DoctorAccountService(); $data = $DoctorAccountService->getDoctorWithdrawalInfo(); return $this->response->json($data); } /** - * 获取可提现问诊订单列表 + * 获取可提现订单列表 * @return ResponseInterface */ public function getDoctorWithdrawalOrderList(): ResponseInterface diff --git a/app/Request/DoctorAccountRequest.php b/app/Request/DoctorAccountRequest.php index e507033..290d756 100644 --- a/app/Request/DoctorAccountRequest.php +++ b/app/Request/DoctorAccountRequest.php @@ -19,9 +19,6 @@ class DoctorAccountRequest extends FormRequest 'getDoctorWithdrawalRecordList' => [ // 获取医生提现记录列表 'year', ], - 'getDoctorWithdrawalInfo' => [ // 获取提现数据 - 'order_inquiry_ids', - ], 'addDoctorWithdrawal' => [ // 发起提现 'order_inquiry_id', 'withdrawal_amount_total', diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index 9271e15..cf9c3ce 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -236,8 +236,6 @@ class DoctorAccountService extends BaseService { $user_info = $this->request->getAttribute("userInfo") ?? []; - $order_inquiry_ids = $this->request->input('order_inquiry_ids'); - // 获取医生信息 $params = array(); $params['doctor_id'] = $user_info['client_user_id']; @@ -263,7 +261,6 @@ class DoctorAccountService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "非法医生"); } - // 检测医生身份认证 $UserDoctorService = new UserDoctorService(); $res = $UserDoctorService->checkDoctorAuth($user_doctor); @@ -292,42 +289,25 @@ class DoctorAccountService extends BaseService $bank['bank_card_name_mask'] = $user_doctor_info['card_name_mask']; $amount_total = 0; - $order_inquiry_id_array = []; + + // 获取医生账户总表 + // 获取医生账户余额 - if (!empty($order_inquiry_ids)){ - $params = array(); - $params['doctor_id'] = $user_info['client_user_id']; - $params['inquiry_status'] = 6; // inquiry_status:问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - $params['inquiry_refund_status'] = 0; // inquiry_refund_status:问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) - - $in_params = explode(',',$order_inquiry_ids); - $order_inquiry = OrderInquiry::getInList($params,$in_params); - if (!empty($order_inquiry)){ - foreach ($order_inquiry as $value){ - $amount_total = bcadd((string)$amount_total,(string)$value["amount_total"],2); - } - } - - $order_inquiry_id_array = $in_params; + $InquiryService = new InquiryService(); + if ($user_doctor['is_platform_deep_cooperation'] == 0){ + $order_inquiry = $InquiryService->getDoctorCanWithdrawalInquiryOrder($user_info['client_user_id']); }else{ - $InquiryService = new InquiryService(); - if ($user_doctor['is_platform_deep_cooperation'] == 0){ - $order_inquiry = $InquiryService->getDoctorCanWithdrawalInquiryOrder($user_info['client_user_id']); - }else{ - $order_inquiry = $InquiryService->getCooperationDoctorCanWithdrawalInquiryOrder($user_info['client_user_id']); - } + $order_inquiry = $InquiryService->getCooperationDoctorCanWithdrawalInquiryOrder($user_info['client_user_id']); + } - if (!empty($order_inquiry)){ - foreach ($order_inquiry as $value){ - $amount_total = bcadd((string)$amount_total,(string)$value["amount_total"],2); - } - $order_inquiry_id_array = array_column($order_inquiry,'order_inquiry_id'); + if (!empty($order_inquiry)){ + foreach ($order_inquiry as $value){ + $amount_total = bcadd((string)$amount_total,(string)$value["amount_total"],2); } } $amount_total = bcmul((string)$amount_total,"0.75",2); - // 计算医生个人所得税 $income_tax = $this->computeIndividualIncomeTax($amount_total); @@ -340,7 +320,6 @@ class DoctorAccountService extends BaseService $result['amount_total'] = $amount_total; // 账户余额 $result['withdrawal_amount'] = $withdrawal_amount; // 提现金额 $result['income_tax'] = $income_tax; // 个人所得税 - $result['order_inquiry_ids'] = $order_inquiry_id_array; // 订单合集 return success($result); } diff --git a/config/routes.php b/config/routes.php index fc2cdbe..75ca065 100644 --- a/config/routes.php +++ b/config/routes.php @@ -217,7 +217,7 @@ Router::addGroup('/doctor', function () { // 获取提现数据 Router::post('/info', [DoctorAccountController::class, 'getDoctorWithdrawalInfo']); - // 获取可提现问诊订单列表 + // 获取可提现订单列表 Router::get('/order', [DoctorAccountController::class, 'getDoctorWithdrawalOrderList']); // 获取医生提现记录列表 From 337e7272ec2799a158a999bcbb1b1957614d380c Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 22 Apr 2024 16:14:37 +0800 Subject: [PATCH 123/274] 1 --- app/Services/OrderServicePackageService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 7f94f26..0db2cd5 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -423,7 +423,7 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "订单创建失败"); } - if ($service_period === null || $service_count === null || $monthly_frequency === null || $single_inquiry_price === null){ + if ($service_period === null || $single_inquiry_price === null){ return fail(HttpEnumCode::HTTP_ERROR, "订单创建失败"); } From 905d7fec83ffa642fb94504ac8a6b97aec50612c Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 22 Apr 2024 16:44:19 +0800 Subject: [PATCH 124/274] 2 --- app/Services/UserDoctorService.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index ab0c7ad..36f4826 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -35,6 +35,7 @@ use App\Model\OrderPrescriptionIcd; use App\Model\OrderPrescriptionProduct; use App\Model\OrderProductItem; use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageDetail; use App\Model\OrderServicePackageInquiry; use App\Model\PatientFollow; use App\Model\PatientHistoryInquiry; @@ -1887,11 +1888,20 @@ class UserDoctorService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "接诊失败"); } + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package_inquiry['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "接诊失败"); + } + // 开始服务时间 $start_time = date('Y-m-d H:i:s',time()); // 结束服务时间 - $finish_time = date('Y-m-d H:i:s', strtotime('+90 days', strtotime($start_time))); + $finish_time = date('Y-m-d H:i:s', strtotime("+{$order_service_package_detail['service_period']} days", strtotime($start_time))); // 修改服务包 $data = array(); From c499184ebea3e79a6c83cee22a1fe042f2598284 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 22 Apr 2024 17:02:14 +0800 Subject: [PATCH 125/274] 3 --- extend/Ca/Ca.php | 1 + 1 file changed, 1 insertion(+) diff --git a/extend/Ca/Ca.php b/extend/Ca/Ca.php index e621b5c..a8dda30 100644 --- a/extend/Ca/Ca.php +++ b/extend/Ca/Ca.php @@ -359,6 +359,7 @@ abstract class Ca $arg = array_merge($arg, $option); + dump($arg); $response = $this->client->post($path, $arg); if ($response->getStatusCode() != '200') { From 2d0305ea2f45a4b8da6d9ee4bc543f1f9023ac40 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 23 Apr 2024 11:45:21 +0800 Subject: [PATCH 126/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E4=BD=93=E7=8E=B0=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Command/MoveOrderCommand.php | 48 ++ app/Controller/TestController.php | 104 ++-- app/Model/DoctorWithdrawalOrder.php | 14 +- app/Model/Order.php | 76 ++- app/Model/OrderInquiry.php | 29 +- app/Services/DoctorAccountService.php | 662 ++++++++++++++++++-------- config/routes.php | 2 +- extend/Ca/Ca.php | 1 - 8 files changed, 657 insertions(+), 279 deletions(-) diff --git a/app/Command/MoveOrderCommand.php b/app/Command/MoveOrderCommand.php index 1c25ec8..7b8900e 100644 --- a/app/Command/MoveOrderCommand.php +++ b/app/Command/MoveOrderCommand.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace App\Command; +use App\Model\DoctorWithdrawalOrder; use App\Model\Order; use App\Model\OrderCoupon; use App\Model\OrderDetection; @@ -64,6 +65,9 @@ class MoveOrderCommand extends HyperfCommand // 处理检测订单退款 // $this->handleOrderDetectionRefund(); + + // 修正医生提现关联订单表数据 +// $this->handleDoctorWithdrawalOrder(); } /** @@ -120,6 +124,9 @@ class MoveOrderCommand extends HyperfCommand if (!empty($order_inquiry['cancel_reason'])){ $data['cancel_remarks'] = inquiryCancelReasonToString($order_inquiry['cancel_reason']); } + + $data['is_withdrawal'] = $order_inquiry['is_withdrawal']; + $data['withdrawal_time'] = $order_inquiry['withdrawal_time']; $order = Order::addOrder($data); if (empty($order)) { Db::rollBack(); @@ -314,6 +321,7 @@ class MoveOrderCommand extends HyperfCommand } $data['cancel_time'] = $order_product['cancel_time']; $data['cancel_remarks'] = $order_product['cancel_remarks']; + $data['is_withdrawal'] = 3; $order = Order::addOrder($data); if (empty($order)) { Db::rollBack(); @@ -502,6 +510,8 @@ class MoveOrderCommand extends HyperfCommand $data['cancel_remarks'] = detectionCancelReasonToString($order_detection['cancel_reason']); } + $data['is_withdrawal'] = 3; + $order = Order::addOrder($data); if (empty($order)) { Db::rollBack(); @@ -583,4 +593,42 @@ class MoveOrderCommand extends HyperfCommand } } + /** + * 修正医生提现关联订单表数据 + * @return void + */ + public function handleDoctorWithdrawalOrder(): void + { + $params = array(); + $doctor_withdrawal_orders = DoctorWithdrawalOrder::getList($params); + if (empty($doctor_withdrawal_orders)){ + $this->line("无检测退款订单需要执行"); + return; + } + + foreach ($doctor_withdrawal_orders as $doctor_withdrawal_order){ + $params = array(); + $params['order_inquiry_id'] = $doctor_withdrawal_order['order_inquiry_id']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)){ + $this->line("无对应订单数据"); + continue; + } + + Db::beginTransaction(); + try { + $params = array(); + $params['withdrawal_order_id'] = $doctor_withdrawal_order['withdrawal_order_id']; + + $data = array(); + $data['order_id'] = $order_inquiry['order_id']; + DoctorWithdrawalOrder::edit($params,$data); + + Db::commit(); + }catch (\Throwable $e){ + Db::rollBack(); + $this->line($e->getMessage()); + } + } + } } diff --git a/app/Controller/TestController.php b/app/Controller/TestController.php index 6472c79..475ee93 100644 --- a/app/Controller/TestController.php +++ b/app/Controller/TestController.php @@ -86,7 +86,7 @@ class TestController extends AbstractController // $this->test_12(); // $this->test_13(); // $this->test_14(); - $this->test_17(); + $this->test_14(); } // 获取未接诊的医生 @@ -360,6 +360,7 @@ class TestController extends AbstractController if (empty($doctor_pharmacist_cert)){ return fail(); } + return 111; } public function test_15(){ @@ -378,29 +379,29 @@ class TestController extends AbstractController public function test_16(){ $CaOnline = new CaOnline(); - // 测试医生 -// $data = array(); -// $data['user_id'] = "491925054435950592"; -// $data['mobile'] = "13028643897"; -// $data['card_name'] = "郝明明"; -// $data['card_num'] = "130582199202032038"; -// $data['orgDept'] = "科室名称"; -// $data['org_name'] = "成都金牛欣欣相照互联网医院有限公司"; -// $data['org_number'] = "91510106MABTJY4K9R"; -// $result = $CaOnline->getCloudCert($data); -// -// $data = array(); -// $data['user_id'] = "491925054435950592"; -// $data['type'] = 2; -// $data['cert_base64'] = $result['certBase64']; -// $data['cert_chain_p7'] = $result['certP7']; -// $data['cert_serial_number'] = $result['certSerialnumber']; -// $data['ca_pin'] = "491925054435950592"; -// $doctor_pharmacist_cert = UserCaCert::addUserCaCert($data); -// if (empty($doctor_pharmacist_cert)){ -// return fail(); -// } -// dump(111); + // 测试医生 + $data = array(); + $data['user_id'] = "491925054435950592"; + $data['mobile'] = "13028643897"; + $data['card_name'] = "郝明明"; + $data['card_num'] = "130582199202032038"; + $data['orgDept'] = "科室名称"; + $data['org_name'] = "成都金牛欣欣相照互联网医院有限公司"; + $data['org_number'] = "91510106MABTJY4K9R"; + $result = $CaOnline->getCloudCert($data); + + $data = array(); + $data['user_id'] = "491925054435950592"; + $data['type'] = 2; + $data['cert_base64'] = $result['certBase64']; + $data['cert_chain_p7'] = $result['certP7']; + $data['cert_serial_number'] = $result['certSerialnumber']; + $data['ca_pin'] = "491925054435950592"; + $doctor_pharmacist_cert = UserCaCert::addUserCaCert($data); + if (empty($doctor_pharmacist_cert)){ + return fail(); + } + dump(111); // // 测试药师 // $data = array(); @@ -423,35 +424,36 @@ class TestController extends AbstractController // $doctor_pharmacist_cert = UserCaCert::addUserCaCert($data); // if (empty($doctor_pharmacist_cert)){ // return fail(); +// } +// +// $params = array(); +// $params['ca_pin'] = "491925054435950592"; +// $params['type'] = "2"; +// $user_ca_cert = UserCaCert::getOne($params); +// if (empty($user_ca_cert)){ +// return fail(); // } - $params = array(); - $params['ca_pin'] = "491925054435950592"; - $params['type'] = "2"; - $user_ca_cert = UserCaCert::getOne($params); - if (empty($user_ca_cert)){ - return fail(); - } - - // 测试医院 - $data = array(); - $data['user_id'] = "491925054435950592"; - $result = $CaOnline->renewCloudCert($data); - - dump($result); - - $data = array(); - $data['cert_base64'] = $result['certBase64']; - $data['cert_chain_p7'] = $result['certP7']; - $data['cert_serial_number'] = $result['certSerialnumber']; - $data['ca_pin'] = "491925054435950592"; - - $params = array(); - $params['cert_id'] = $user_ca_cert['cert_id']; - $res = UserCaCert::edit($params,$data); - if (empty($res)){ - return fail(); - } + return 122; +// // 测试医院 +// $data = array(); +// $data['user_id'] = "491925054435950592"; +// $result = $CaOnline->renewCloudCert($data); +// +// dump($result); +// +// $data = array(); +// $data['cert_base64'] = $result['certBase64']; +// $data['cert_chain_p7'] = $result['certP7']; +// $data['cert_serial_number'] = $result['certSerialnumber']; +// $data['ca_pin'] = "491925054435950592"; +// +// $params = array(); +// $params['cert_id'] = $user_ca_cert['cert_id']; +// $res = UserCaCert::edit($params,$data); +// if (empty($res)){ +// return fail(); +// } } public function test_17(){ diff --git a/app/Model/DoctorWithdrawalOrder.php b/app/Model/DoctorWithdrawalOrder.php index 44911f8..763bd0c 100644 --- a/app/Model/DoctorWithdrawalOrder.php +++ b/app/Model/DoctorWithdrawalOrder.php @@ -12,6 +12,7 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $withdrawal_order_id 主键id * @property int $withdrawal_id 提现表id * @property int $doctor_id 医生id + * @property int $order_id 订单id * @property int $order_inquiry_id 订单-问诊id * @property \Carbon\Carbon $created_at 创建时间 * @property \Carbon\Carbon $updated_at 修改时间 @@ -28,7 +29,7 @@ class DoctorWithdrawalOrder extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['withdrawal_order_id', 'withdrawal_id', 'doctor_id', 'order_inquiry_id', 'created_at', 'updated_at']; + protected array $fillable = ['withdrawal_order_id', 'withdrawal_id', 'doctor_id', 'order_id', 'order_inquiry_id', 'created_at', 'updated_at']; protected string $primaryKey = "withdrawal_order_id"; @@ -64,4 +65,15 @@ class DoctorWithdrawalOrder extends Model { return self::create($data); } + + /** + * 修改 + * @param array $params + * @param array $data + * @return int + */ + public static function edit(array $params = [], array $data = []): int + { + return self::where($params)->update($data); + } } diff --git a/app/Model/Order.php b/app/Model/Order.php index 1f71093..e899ac2 100644 --- a/app/Model/Order.php +++ b/app/Model/Order.php @@ -22,7 +22,7 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $pay_channel 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) * @property int $pay_status 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) * @property string $pay_time 支付时间 - * @property int $refund_status 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + * @property int $refund_status 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常 7:部分退款) * @property string $order_no 系统订单编号 * @property string $escrow_trade_no 第三方支付流水号 * @property string $amount_total 订单金额 @@ -32,8 +32,12 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property string $cancel_time 订单取消时间 * @property string $cancel_remarks 取消订单备注 * @property string $order_remarks 订单备注 - * @property Carbon $created_at 创建时间 - * @property Carbon $updated_at 修改时间 + * @property int $is_withdrawal 是否提现(0:否 1:是 2:提现中 3:无需提现) + * @property string $withdrawal_time 提现时间 + * @property \Carbon\Carbon $created_at 创建时间 + * @property \Carbon\Carbon $updated_at 修改时间 + * @property-read OrderInquiry|null $OrderInquiry + * @property-read OrderServicePackage|null $OrderServicePackage */ class Order extends Model { @@ -47,7 +51,7 @@ class Order extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['order_id', 'user_id', 'patient_id', 'doctor_id', 'order_type', 'is_delete', 'pay_channel', 'pay_status', 'pay_time', 'refund_status', 'order_no', 'escrow_trade_no', 'amount_total', 'coupon_amount_total', 'payment_amount_total', 'cancel_status', 'cancel_time', 'cancel_remarks', 'order_remarks', 'created_at', 'updated_at']; + protected array $fillable = ['order_id', 'user_id', 'patient_id', 'doctor_id', 'order_type', 'is_delete', 'pay_channel', 'pay_status', 'pay_time', 'refund_status', 'order_no', 'escrow_trade_no', 'amount_total', 'coupon_amount_total', 'payment_amount_total', 'cancel_status', 'cancel_time', 'cancel_remarks', 'order_remarks', 'is_withdrawal', 'withdrawal_time', 'created_at', 'updated_at']; protected string $primaryKey = "order_id"; @@ -122,7 +126,9 @@ class Order extends Model */ public static function getDoctorCreatedDateOrderInquiryPage(array $params, array $date_params,string|int $is_platform_deep_cooperation,array $fields = ["*"], int $page = null, ?int $per_page = 10): array { - $query = self::with(['OrderInquiry', 'OrderServicePackage'])->where($params); + $query = self::with(['OrderInquiry', 'OrderServicePackage']) + ->whereIn('order_type',[1,4,5]) + ->where($params); // 问诊订单 $query = $query->where(function ($query) use ($date_params,$is_platform_deep_cooperation){ @@ -166,7 +172,8 @@ class Order extends Model */ public static function getDoctorDayAmountTotal(array $params, array $date_params,string|int $is_platform_deep_cooperation): int|null|string { - $query = self::where($params); + $query = self::where($params) + ->whereIn('order_type',[1,4,5]); // 问诊订单 $query = $query->where(function ($query) use ($date_params,$is_platform_deep_cooperation){ @@ -208,7 +215,8 @@ class Order extends Model */ public static function getDoctorDayCompletedAmountTotal(array $params, array $date_params,string|int $is_platform_deep_cooperation): int|null|string { - $query = self::where($params); + $query = self::where($params) + ->whereIn('order_type',[1,4,5]); // 问诊订单 $query = $query->where(function ($query) use ($date_params,$is_platform_deep_cooperation){ @@ -240,4 +248,58 @@ class Order extends Model ->sum("amount_total");; return $result; } + + /** + * 获取可提现订单列表 + * @param array $params + * @param string|int $is_platform_deep_cooperation + * @param array $fields + * @param int|null $page + * @param int|null $per_page + * @return array + */ + public static function getDoctorWithdrawalOrderList(array $params, string|int $is_platform_deep_cooperation,array $fields = ["*"], int $page = null, ?int $per_page = 10): array + { + $query = self::with(['OrderInquiry', 'OrderServicePackage']) + ->where($params) + ->whereIn('order_type',[1,4,5]); + + // 问诊订单 + $query = $query->where(function ($query) use ($is_platform_deep_cooperation){ + $query->whereExists(function ($subQuery) use ($is_platform_deep_cooperation){ + $subQuery->from('order_inquiry'); + if ($is_platform_deep_cooperation == 1){ + $subQuery->whereNotIn('inquiry_type', [2,4]); + } + + $subQuery->whereNotIn('inquiry_mode', [7,8,9]) + ->whereIn('inquiry_status', [6]) + ->whereIn('inquiry_refund_status', [0,3]) + ->whereRaw('gdxz_order.order_id = gdxz_order_inquiry.order_id'); + }) + ->orWhereExists(function ($subQuery) { + $subQuery->from('order_service_package') + ->whereRaw('gdxz_order.order_id = gdxz_order_service_package.order_id') + ->whereIn('refund_status', [0,3]) + ->where('pay_status', 2) + ->where('start_time', 2) + ->whereIn('order_service_status', [4,5]) + ->WhereExists(function ($subQuery){ + $subQuery->from("order_service_package_inquiry") + ->whereRaw('gdxz_order_service_package.order_service_id = gdxz_order_service_package_inquiry.order_service_id'); + }); + }); + }); + + $result = $query->paginate($per_page, $fields, "page", $page); + + $data = array(); + $data['current_page'] = $result->currentPage();// 当前页码 + $data['total'] = $result->total();//数据总数 + $data['data'] = $result->items();//数据 + $data['per_page'] = $result->perPage();//每页个数 + $data['last_page'] = $result->lastPage();//最后一页 + + return $data; + } } diff --git a/app/Model/OrderInquiry.php b/app/Model/OrderInquiry.php index 9857fc6..5bc1425 100644 --- a/app/Model/OrderInquiry.php +++ b/app/Model/OrderInquiry.php @@ -234,40 +234,13 @@ class OrderInquiry extends Model * 已结束 * @param array $params * @param array $inquiry_status_params - * @param array $fields - * @param int|null $page - * @param int|null $per_page - * @return int|mixed|string - */ - public static function getDoctorOrderInquiryPage(array $params, array $inquiry_status_params, array $fields = ["*"], int $page = null, ?int $per_page = 10): mixed - { - $raw = self::where($params) - ->whereIn('inquiry_status', $inquiry_status_params) - ->orderBy('finish_time', 'desc') - ->paginate($per_page, $fields, "page", $page); - - $data = array(); - $data['current_page'] = $raw->currentPage();// 当前页码 - $data['total'] = $raw->total();//数据总数 - $data['data'] = $raw->items();//数据 - $data['per_page'] = $raw->perPage();//每页个数 - $data['last_page'] = $raw->lastPage();//最后一页 - - return $data; - } - - /** - * 获取医生接诊订单分页数据-坐班医生 - * 已结束 - * @param array $params - * @param array $inquiry_status_params * @param array $inquiry_type_not_params * @param array $fields * @param int|null $page * @param int|null $per_page * @return int|mixed|string */ - public static function getCooperationDoctorOrderInquiryPage(array $params, array $inquiry_status_params,array $inquiry_type_not_params = [], array $fields = ["*"], int $page = null, ?int $per_page = 10): mixed + public static function getDoctorOrderInquiryPage(array $params, array $inquiry_status_params,array $inquiry_type_not_params = [], array $fields = ["*"], int $page = null, ?int $per_page = 10): mixed { $raw = self::where($params) ->whereIn('inquiry_status', $inquiry_status_params) diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index cf9c3ce..db15842 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -13,6 +13,8 @@ use App\Model\DoctorWithdrawalOrder; use App\Model\Order; use App\Model\OrderInquiry; use App\Model\OrderInquiryRefund; +use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageDetail; use App\Model\OrderServicePackageRefund; use App\Model\UserDoctor; use App\Model\UserDoctorInfo; @@ -33,13 +35,13 @@ class DoctorAccountService extends BaseService $year = $this->request->input('date'); - $date = date('Y-m-d',time()); + $date = date('Y-m-d', time()); // 获取医生数据 $params = array(); $params['doctor_id'] = $user_info['client_user_id']; $user_doctor = UserDoctor::getOne($params); - if (empty($user_doctor)){ + if (empty($user_doctor)) { return fail(); } @@ -47,22 +49,22 @@ class DoctorAccountService extends BaseService $OrderServicePackageService = new OrderServicePackageService(); // 获取医生当日的接诊订单金额 - $doctor_today_inquiry_total = $inquiryService->getDoctorDayAmountTotal($user_doctor['doctor_id'],$date,$user_doctor['is_platform_deep_cooperation']); + $doctor_today_inquiry_total = $inquiryService->getDoctorDayAmountTotal($user_doctor['doctor_id'], $date, $user_doctor['is_platform_deep_cooperation']); // 获取医生当日的服务包订单问诊金额-开始时间 - $doctor_today_service_package_total = $OrderServicePackageService->getDoctorDayAmountTotal($user_doctor['doctor_id'],$date); + $doctor_today_service_package_total = $OrderServicePackageService->getDoctorDayAmountTotal($user_doctor['doctor_id'], $date); // 医生当日的订单金额 - $doctor_today_total = bcadd($doctor_today_inquiry_total,$doctor_today_service_package_total,2); + $doctor_today_total = bcadd($doctor_today_inquiry_total, $doctor_today_service_package_total, 2); // 获取医生当日已完成未结束的问诊订单金额 - $doctor_day_inquiry_completed_amount_total = $inquiryService->getDoctorDayCompletedAmountTotal($user_doctor['doctor_id'],$date,$user_doctor['is_platform_deep_cooperation']); + $doctor_day_inquiry_completed_amount_total = $inquiryService->getDoctorDayCompletedAmountTotal($user_doctor['doctor_id'], $date, $user_doctor['is_platform_deep_cooperation']); // 获取医生当日未完成的服务包订单问诊金额-结束时间 - $doctor_day_service_package_completed_amount_total = $OrderServicePackageService->getDoctorDayNoFinishAmountTotal($user_doctor['doctor_id'],$date); + $doctor_day_service_package_completed_amount_total = $OrderServicePackageService->getDoctorDayNoFinishAmountTotal($user_doctor['doctor_id'], $date); // 已完成待入账金额 - $doctor_day_completed_amount_total = bcadd($doctor_day_inquiry_completed_amount_total,$doctor_day_service_package_completed_amount_total,2); + $doctor_day_completed_amount_total = bcadd($doctor_day_inquiry_completed_amount_total, $doctor_day_service_package_completed_amount_total, 2); // 获取医生账户余额 $balance_account = 0; @@ -83,7 +85,7 @@ class DoctorAccountService extends BaseService if (!empty($doctor_account_days)) { foreach ($doctor_account_days as $doctor_account_day) { $data = array(); - $data['total_amount'] = bcmul((string)$doctor_account_day['total_amount'],1,2); + $data['total_amount'] = bcmul((string)$doctor_account_day['total_amount'], 1, 2); $data['month'] = $doctor_account_day['month']; $bill[] = $data; } @@ -91,9 +93,9 @@ class DoctorAccountService extends BaseService } $result = array(); - $result['doctor_today_inquiry_total'] = bcmul((string)$doctor_today_total,"0.75",2); // 今日预计收入 - $result['doctor_day_completed_amount_total'] = bcmul((string)$doctor_day_completed_amount_total ,"0.75",2); // 今日已完成收入 - $result['balance_account'] = bcmul((string)$balance_account ,"1",2); // 账户余额 + $result['doctor_today_inquiry_total'] = bcmul((string)$doctor_today_total, "0.75", 2); // 今日预计收入 + $result['doctor_day_completed_amount_total'] = bcmul((string)$doctor_day_completed_amount_total, "0.75", 2); // 今日已完成收入 + $result['balance_account'] = bcmul((string)$balance_account, "1", 2); // 账户余额 $result['bill'] = $bill; // 账单 return success($result); @@ -115,15 +117,15 @@ class DoctorAccountService extends BaseService $params = array(); $params['doctor_id'] = $user_info['client_user_id']; $user_doctor = UserDoctor::getOne($params); - if (empty($user_doctor)){ + if (empty($user_doctor)) { return fail(); } $params = array(); - $params['doctor_id'] = $user_doctor['doctor_id']; + $params['doctor_id'] = $user_doctor['doctor_id']; // 获取当月开始时间 - $start_date = date('Y-m-01 00:00:00',strtotime($date)); + $start_date = date('Y-m-01 00:00:00', strtotime($date)); // 获取当月结束时间 // 获取给定月份的下一个月的第一天,然后减去一天得到当月的最后一天 @@ -131,45 +133,13 @@ class DoctorAccountService extends BaseService $date_params = [$start_date, $end_date]; - $results = Order::getDoctorCreatedDateOrderInquiryPage($params,$date_params,$user_doctor['is_platform_deep_cooperation'],['*'],$page,$per_page); + $results = Order::getDoctorCreatedDateOrderInquiryPage($params, $date_params, $user_doctor['is_platform_deep_cooperation'], ['*'], $page, $per_page); if (!empty($results['data'])) { foreach ($results['data'] as &$result) { - // 入账金额 - $result['estimate_income'] = bcmul((string)$result['amount_total'],"0.75",2); - - // 入账状态-问诊订单 - if (!empty($result['OrderInquiry'])){ - if ($result['OrderInquiry']['inquiry_status'] == 4 || $result['OrderInquiry']['inquiry_status'] == 5){ - $result['entry_status'] = 1;// 入账中 - }elseif ($result['OrderInquiry']['inquiry_status'] == 6){ - $result['entry_status'] = 2;// 入账成功 - }elseif ($result['OrderInquiry']['inquiry_status'] == 7){ - $result['entry_status'] = 3;// 入账失败 - // 获取退款数据 - $params = array(); - $params['inquiry_no'] = $result['OrderInquiry']['inquiry_no']; - $order_inquiry_refunds = OrderInquiryRefund::getList($params); - if (!empty($order_inquiry_refunds)){ - $refund_total = 0; - foreach ($order_inquiry_refunds as $order_inquiry_refund){ - $refund_total = $refund_total + $order_inquiry_refund['refund_total']; - } - - // 订单退款金额 - $result['refund_total'] = $refund_total; - - if (($result['OrderInquiry']['payment_amount_total'] - $refund_total) > 0){ - $result['entry_status'] = 2;// 入账成功 - }else{ - $result['entry_status'] = 3;// 入账失败 - } - } - - if (!empty($result['OrderInquiry']['cancel_reason'])){ - $result['cancel_remarks'] = inquiryCancelReasonToPushString($result['OrderInquiry']['cancel_reason']); - } - }else{ - $result['entry_status'] = 0;// 未知 + // 填入字段 + if (!empty($result['OrderInquiry'])) { + if (!empty($result['OrderInquiry']['cancel_reason'])) { + $result['cancel_remarks'] = inquiryCancelReasonToPushString($result['OrderInquiry']['cancel_reason']); } $result['patient_name'] = $result['OrderInquiry']['patient_name']; @@ -182,36 +152,7 @@ class DoctorAccountService extends BaseService $result['inquiry_mode'] = $result['OrderInquiry']['inquiry_mode']; } - // 入账状态-服务包订单 - if (!empty($result['OrderServicePackage'])){ - if ($result['OrderServicePackage']['order_service_status'] == 3){ - $result['entry_status'] = 1;// 入账中 - }elseif ($result['OrderServicePackage']['order_service_status'] == 4){ - $result['entry_status'] = 2;// 入账成功 - }elseif ($result['OrderServicePackage']['order_service_status'] == 5){ - // 获取退款数据 - $params = array(); - $params['order_service_no'] = $result['OrderServicePackage']['order_service_no']; - $order_service_package_refunds = OrderServicePackageRefund::getList($params); - if (!empty($order_service_package_refunds)){ - $refund_total = 0; - foreach ($order_service_package_refunds as $order_service_package_refund){ - $refund_total = $refund_total + $order_service_package_refund['refund_total']; - } - - // 订单退款金额 - $result['refund_total'] = $refund_total; - - if (($result['OrderServicePackage']['payment_amount_total'] - $refund_total) > 0){ - $result['entry_status'] = 2;// 入账成功 - }else{ - $result['entry_status'] = 3;// 入账失败 - } - } - }else{ - $result['entry_status'] = 0;// 未知 - } - + if (!empty($result['OrderServicePackage'])) { $result['patient_name'] = $result['OrderServicePackage']['patient_name']; $result['patient_name_mask'] = $result['OrderServicePackage']['patient_name_mask']; $result['patient_sex'] = $result['OrderServicePackage']['patient_sex']; @@ -220,6 +161,116 @@ class DoctorAccountService extends BaseService $result['finish_time'] = $result['OrderServicePackage']['finish_time']; } + // 默认退款金额为0; + $result['refund_total'] = 0; + // 计算退款金额 + if ($result['refund_status'] == 3){ + // 问诊订单 + if (!empty($result['OrderInquiry'])) { + // 获取退款数据 + $params = array(); + $params['inquiry_no'] = $result['OrderInquiry']['inquiry_no']; + $order_inquiry_refunds = OrderInquiryRefund::getList($params); + if (!empty($order_inquiry_refunds)) { + $refund_total = 0; + foreach ($order_inquiry_refunds as $order_inquiry_refund) { + $refund_total = $refund_total + $order_inquiry_refund['refund_total']; + } + + // 订单退款金额 + $result['refund_total'] = $refund_total; + } + } + + // 服务包订单 + if (!empty($result['OrderServicePackage'])) { + // 获取退款数据 + $params = array(); + $params['order_service_no'] = $result['OrderServicePackage']['order_service_no']; + $order_service_package_refunds = OrderServicePackageRefund::getList($params); + if (!empty($order_service_package_refunds)) { + $refund_total = 0; + foreach ($order_service_package_refunds as $order_service_package_refund) { + $refund_total = $refund_total + $order_service_package_refund['refund_total']; + } + + // 订单退款金额 + $result['refund_total'] = $refund_total; + } + } + } + + // 计算预计收入 + if ($result['order_type'] == 1){ + $result['estimate_income'] = bcmul( + bcsub( + $result['OrderInquiry']['amount_total'], + $result['refund_total'], + 3 + ), + 0.75, + 2 + ); + } + + if ($result['order_type'] == 4 || $result['order_type'] == 5){ + // 获取订单详情数据 + $params = array(); + $params['order_service_no'] = $result['OrderServicePackage']['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (!empty($order_service_package_detail)){ + + $result['estimate_income'] = bcmul( // 可提现费用 + bcsub( // 退款费用 + bcmul( // 问诊费用 + (string)$order_service_package_detail['service_count'], + (string)$order_service_package_detail['single_inquiry_price'], + 3 + ), + $result['refund_total'], + 3 + ), + 0.75, + 2 + ); + } + } + + // 处理入账状态 + if (!empty($result['OrderInquiry'])) { + if ($result['OrderInquiry']['inquiry_status'] == 4 || $result['OrderInquiry']['inquiry_status'] == 5) { + $result['entry_status'] = 1;// 入账中 + } elseif ($result['OrderInquiry']['inquiry_status'] == 6) { + $result['entry_status'] = 2;// 入账成功 + } elseif ($result['OrderInquiry']['inquiry_status'] == 7) { + $result['entry_status'] = 3;// 入账失败 + + if (($result['OrderInquiry']['amount_total'] - $result['refund_total']) > 0) { + $result['entry_status'] = 2;// 入账成功 + } else { + $result['entry_status'] = 3;// 入账失败 + } + } else { + $result['entry_status'] = 0;// 未知 + } + } + + if (!empty($result['OrderServicePackage'])) { + if ($result['OrderServicePackage']['order_service_status'] == 3) { + $result['entry_status'] = 1;// 入账中 + } elseif ($result['OrderServicePackage']['order_service_status'] == 4) { + $result['entry_status'] = 2;// 入账成功 + } elseif ($result['OrderServicePackage']['order_service_status'] == 5) { + if (($result['OrderServicePackage']['amount_total'] - $result['refund_total']) > 0) { + $result['entry_status'] = 2;// 入账成功 + } else { + $result['entry_status'] = 3;// 入账失败 + } + } else { + $result['entry_status'] = 0;// 未知 + } + } + unset($result['OrderInquiry']); unset($result['OrderServicePackage']); } @@ -291,32 +342,22 @@ class DoctorAccountService extends BaseService $amount_total = 0; // 获取医生账户总表 - - // 获取医生账户余额 - $InquiryService = new InquiryService(); - if ($user_doctor['is_platform_deep_cooperation'] == 0){ - $order_inquiry = $InquiryService->getDoctorCanWithdrawalInquiryOrder($user_info['client_user_id']); - }else{ - $order_inquiry = $InquiryService->getCooperationDoctorCanWithdrawalInquiryOrder($user_info['client_user_id']); + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + $doctor_account = DoctorAccount::getOne($params); + if (!empty($doctor_account)) { + $amount_total = $doctor_account['balance_account']; } - if (!empty($order_inquiry)){ - foreach ($order_inquiry as $value){ - $amount_total = bcadd((string)$amount_total,(string)$value["amount_total"],2); - } - } - - $amount_total = bcmul((string)$amount_total,"0.75",2); - // 计算医生个人所得税 $income_tax = $this->computeIndividualIncomeTax($amount_total); - $withdrawal_amount = bcsub($amount_total,$income_tax,2); + $withdrawal_amount = bcsub($amount_total, $income_tax, 2); - $income_tax = bcmul($income_tax,1,2); + $income_tax = bcmul($income_tax, 1, 2); $result = array(); - $result['bank'] = $bank;//银行数据 + $result['bank'] = $bank; //银行数据 $result['amount_total'] = $amount_total; // 账户余额 $result['withdrawal_amount'] = $withdrawal_amount; // 提现金额 $result['income_tax'] = $income_tax; // 个人所得税 @@ -324,6 +365,63 @@ class DoctorAccountService extends BaseService return success($result); } +// /** +// * 获取可提现问诊订单列表 +// * @return array +// */ +// public function getDoctorWithdrawalOrderList(): array +// { +// $user_info = $this->request->getAttribute("userInfo") ?? []; +// +// $page = $this->request->input('page', 1); +// $per_page = $this->request->input('per_page', 10); +// +// // 获取医生信息 +// $params = array(); +// $params['doctor_id'] = $user_info['client_user_id']; +// $user_doctor = UserDoctor::getOne($params); +// if (empty($user_doctor)) { +// return fail(); +// } +// +// $fields = [ +// 'order_inquiry_id', +// 'inquiry_type', +// 'inquiry_mode', +// 'inquiry_status', +// 'inquiry_refund_status', +// 'inquiry_no', +// 'amount_total', +// 'payment_amount_total', +// 'reception_time', +// 'finish_time', +// 'patient_name', +// 'patient_sex', +// 'patient_age', +// ]; +// +// $params = array(); +// $params['doctor_id'] = $user_info['client_user_id']; +// $params['inquiry_refund_status'] = 0; // inquiry_refund_status:问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) +// +// $inquiry_status_params = [6]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) +// +// $inquiry_type_not_params = []; +// if ($user_doctor['is_platform_deep_cooperation'] == 0) { +// $inquiry_type_not_params = [2, 4]; +// } +// +// $order_inquiry = OrderInquiry:: getDoctorOrderInquiryPage($params, $inquiry_status_params, $inquiry_type_not_params, $fields, $page, $per_page); +// +// if (!empty($order_inquiry['data'])) { +// foreach ($order_inquiry['data'] as &$item) { +// $item['expected_amount_total'] = floor($item['amount_total'] * 0.75 * 100) / 100; +// } +// } +// +// return success($order_inquiry); +// } + /** * 获取可提现问诊订单列表 * @return array @@ -343,44 +441,119 @@ class DoctorAccountService extends BaseService return fail(); } - // 获取医生当日接诊订单金额 - $fields = [ - 'order_inquiry_id', - 'inquiry_type', - 'inquiry_mode', - 'inquiry_status', - 'inquiry_refund_status', - 'inquiry_no', - 'amount_total', - 'payment_amount_total', - 'reception_time', - 'finish_time', - 'patient_name', - 'patient_sex', - 'patient_age', - ]; - $params = array(); $params['doctor_id'] = $user_info['client_user_id']; - $params['inquiry_refund_status'] = 0; // inquiry_refund_status:问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + $params['is_withdrawal'] = 0; - $inquiry_status_params = [6]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + $results = Order:: getDoctorWithdrawalOrderList($params, $user_doctor['is_platform_deep_cooperation'], ['*'], $page, $per_page); + if (!empty($results['data'])) { + foreach ($results['data'] as &$result) { + // 填入字段 + if (!empty($result['OrderInquiry'])) { + if (!empty($result['OrderInquiry']['cancel_reason'])) { + $result['cancel_remarks'] = inquiryCancelReasonToPushString($result['OrderInquiry']['cancel_reason']); + } - if ($user_doctor['is_platform_deep_cooperation'] == 0){ - $order_inquiry = OrderInquiry:: getDoctorOrderInquiryPage($params,$inquiry_status_params, $fields,$page,$per_page); - }else{ - $inquiry_type_not_params = [2,4]; - $order_inquiry = OrderInquiry:: getCooperationDoctorOrderInquiryPage($params,$inquiry_status_params,$inquiry_type_not_params, $fields,$page,$per_page); - } + $result['patient_name'] = $result['OrderInquiry']['patient_name']; + $result['patient_name_mask'] = $result['OrderInquiry']['patient_name_mask']; + $result['patient_sex'] = $result['OrderInquiry']['patient_sex']; + $result['patient_age'] = $result['OrderInquiry']['patient_age']; + $result['start_time'] = $result['OrderInquiry']['reception_time']; + $result['finish_time'] = $result['OrderInquiry']['finish_time']; + $result['inquiry_type'] = $result['OrderInquiry']['inquiry_type']; + $result['inquiry_mode'] = $result['OrderInquiry']['inquiry_mode']; + } - if (!empty($order_inquiry['data'])) { - foreach ($order_inquiry['data'] as &$item) { - $item['expected_amount_total'] = floor($item['amount_total'] * 0.75 * 100) / 100; + if (!empty($result['OrderServicePackage'])) { + $result['patient_name'] = $result['OrderServicePackage']['patient_name']; + $result['patient_name_mask'] = $result['OrderServicePackage']['patient_name_mask']; + $result['patient_sex'] = $result['OrderServicePackage']['patient_sex']; + $result['patient_age'] = $result['OrderServicePackage']['patient_age']; + $result['start_time'] = $result['OrderServicePackage']['start_time']; + $result['finish_time'] = $result['OrderServicePackage']['finish_time']; + } + + // 默认退款金额为0; + $result['refund_total'] = 0; + // 计算退款 + if ($result['refund_status'] == 3){ + // 问诊订单 + if (!empty($result['OrderInquiry'])) { + // 获取退款数据 + $params = array(); + $params['inquiry_no'] = $result['OrderInquiry']['inquiry_no']; + $order_inquiry_refunds = OrderInquiryRefund::getList($params); + if (!empty($order_inquiry_refunds)) { + $refund_total = 0; + foreach ($order_inquiry_refunds as $order_inquiry_refund) { + $refund_total = $refund_total + $order_inquiry_refund['refund_total']; + } + + // 订单退款金额 + $result['refund_total'] = $refund_total; + } + } + + // 服务包订单 + if (!empty($result['OrderServicePackage'])) { + // 获取退款数据 + $params = array(); + $params['order_service_no'] = $result['OrderServicePackage']['order_service_no']; + $order_service_package_refunds = OrderServicePackageRefund::getList($params); + if (!empty($order_service_package_refunds)) { + $refund_total = 0; + foreach ($order_service_package_refunds as $order_service_package_refund) { + $refund_total = $refund_total + $order_service_package_refund['refund_total']; + } + + // 订单退款金额 + $result['refund_total'] = $refund_total; + } + } + } + + // 计算可提现金额 + if ($result['order_type'] == 1){ + $result['expected_amount_total'] = bcmul( + bcsub( + $result['OrderInquiry']['amount_total'], + $result['refund_total'], + 3 + ), + 0.75, + 2 + ); + } + + if ($result['order_type'] == 4 || $result['order_type'] == 5){ + // 获取订单详情数据 + $params = array(); + $params['order_service_no'] = $result['OrderServicePackage']['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (!empty($order_service_package_detail)){ + $result['expected_amount_total'] = bcmul( // 可提现费用 + bcsub( // 退款费用 + bcmul( // 问诊费用 + (string)$order_service_package_detail['service_count'], + (string)$order_service_package_detail['single_inquiry_price'], + 3 + ), + $result['refund_total'], + 3 + ), + 0.75, + 2 + ); + } + } + + unset($result['OrderInquiry']); + unset($result['OrderServicePackage']); } } - return success($order_inquiry); + return success($results); } /** @@ -392,21 +565,21 @@ class DoctorAccountService extends BaseService $user_info = $this->request->getAttribute("userInfo") ?? []; $year = $this->request->input('year'); - $page = $this->request->input('page',1); - $per_page = $this->request->input('per_page',10); + $page = $this->request->input('page', 1); + $per_page = $this->request->input('per_page', 10); // 获取当年开始时间 - $start_date = $year.'-1-1 00:00:00'; + $start_date = $year . '-1-1 00:00:00'; // 获取当年结束时间 - $end_date = $year.'-12-31 23:59:59'; + $end_date = $year . '-12-31 23:59:59'; $created_at_params = [$start_date, $end_date]; $params = array(); $params['doctor_id'] = $user_info['client_user_id']; - $doctor_withdrawal = DoctorWithdrawal::getDatePage($params,$created_at_params,['*'],$page,$per_page); - if (empty($doctor_withdrawal['data'])){ + $doctor_withdrawal = DoctorWithdrawal::getDatePage($params, $created_at_params, ['*'], $page, $per_page); + if (empty($doctor_withdrawal['data'])) { return success(); } @@ -422,20 +595,20 @@ class DoctorAccountService extends BaseService { $user_info = $this->request->getAttribute("userInfo") ?? []; - $order_inquiry_id = $this->request->input('order_inquiry_id'); + $order_no = $this->request->input('order_no'); $withdrawal_amount_total = $this->request->input('withdrawal_amount_total'); $bank_card_id = $this->request->input('bank_card_id'); - $order_inquiry_id = explode(',',$order_inquiry_id); - if (empty($order_inquiry_id)){ + $order_nos = explode(',', $order_no); + if (empty($order_nos)) { return fail(); } $app_env = config('app_env'); - if ($app_env != "dev"){ + if ($app_env != "dev") { // 正式环境高于300元才可以提现 - if ($withdrawal_amount_total < 300){ - return fail(HttpEnumCode::HTTP_ERROR,"提现金额小于300元"); + if ($withdrawal_amount_total < 300) { + return fail(HttpEnumCode::HTTP_ERROR, "提现金额小于300元"); } } @@ -443,46 +616,137 @@ class DoctorAccountService extends BaseService $params = array(); $params['doctor_id'] = $user_info['client_user_id']; - $start_time = date('Y-m-01',time()); - $end_time = date('Y-m-t 24:00:00',time()); - $created_at = [$start_time,$end_time]; + $start_time = date('Y-m-01', time()); + $end_time = date('Y-m-t 24:00:00', time()); + $created_at = [$start_time, $end_time]; - $doctor_withdrawal = DoctorWithdrawal::getOneLatestTime($params,$created_at,['*'],); - if (!empty($doctor_withdrawal)){ + $doctor_withdrawal = DoctorWithdrawal::getOneLatestTime($params, $created_at, ['*'],); + if (!empty($doctor_withdrawal)) { return fail("每月只允许提现一次"); } $amount_total = 0; - foreach ($order_inquiry_id as $value){ + foreach ($order_nos as $order_no) { $params = array(); - $params['order_inquiry_id'] = $value; + $params['order_no'] = $order_no; $params['doctor_id'] = $user_info['client_user_id']; - $order_inquiry = OrderInquiry::getOne($params); - if (empty($order_inquiry)){ - return fail(HttpEnumCode::HTTP_ERROR,"存在不可提现订单"); - } - - // 验证订单状态 - if ($order_inquiry['inquiry_status'] != 6){ - return fail(HttpEnumCode::HTTP_ERROR,"提现失败"); + $order = Order::getOne($params); + if (empty($order)) { + return fail(HttpEnumCode::HTTP_ERROR, "存在不可提现订单"); } // 验证订单提现状态 - if ($order_inquiry['is_withdrawal'] != 0){ - return fail(HttpEnumCode::HTTP_ERROR,"存在已提现订单"); + if ($order['is_withdrawal'] != 0) { + return fail(HttpEnumCode::HTTP_ERROR, "存在已提现订单"); } - // 验证订单支付状态 - if ($order_inquiry['inquiry_pay_status'] != 2){ - return fail(HttpEnumCode::HTTP_ERROR,"存在未支付订单"); + // 问诊订单 + if ($order['order_type'] == 1){ + $params = array(); + $params['order_id'] = $order['order_id']; + $params['doctor_id'] = $user_info['client_user_id']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + return fail(HttpEnumCode::HTTP_ERROR, "存在不可提现订单"); + } + + // 验证订单状态 + if ($order_inquiry['inquiry_status'] != 6) { + return fail(HttpEnumCode::HTTP_ERROR, "提现失败"); + } + + // 验证订单提现状态 + if ($order_inquiry['is_withdrawal'] != 0) { + return fail(HttpEnumCode::HTTP_ERROR, "存在已提现订单"); + } + + // 验证订单支付状态 + if ($order_inquiry['inquiry_pay_status'] != 2) { + return fail(HttpEnumCode::HTTP_ERROR, "存在未支付订单"); + } + + // 订单退款金额 + $refund_total = 0; + + $params = array(); + $params['inquiry_no'] = $order_inquiry['inquiry_no']; + $order_inquiry_refunds = OrderInquiryRefund::getList($params); + if (!empty($order_inquiry_refunds)) { + foreach ($order_inquiry_refunds as $order_inquiry_refund) { + $refund_total = $refund_total + $order_inquiry_refund['refund_total']; + } + } + + $amount_total = bcadd( + $amount_total, + bcsub( + $order_inquiry['amount_total'], + $refund_total, + 3 + ), + 3 + ); } - // 计算订单总金额 - $amount_total = bcadd($amount_total,$order_inquiry["amount_total"],2); + // 服务包订单 + if ($order['order_type'] == 4 || $order['order_type'] == 5){ + $params = array(); + $params['order_id'] = $order['order_id']; + $params['doctor_id'] = $user_info['client_user_id']; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + return fail(HttpEnumCode::HTTP_ERROR, "存在不可提现订单"); + } + + // 验证订单状态 + if ($order_service_package['order_service_status'] != 4 || $order_service_package['order_service_status'] != 5) { + return fail(HttpEnumCode::HTTP_ERROR, "提现失败"); + } + + // 验证订单支付状态 + if ($order_service_package['pay_status'] != 2) { + return fail(HttpEnumCode::HTTP_ERROR, "存在未支付订单"); + } + + // 获取退款数据 + $refund_total = 0; + + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_refunds = OrderServicePackageRefund::getList($params); + if (!empty($order_service_package_refunds)) { + foreach ($order_service_package_refunds as $order_service_package_refund) { + $refund_total = $refund_total + $order_service_package_refund['refund_total']; + } + } + + // 获取订单详情数据 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + return fail(HttpEnumCode::HTTP_ERROR, "提现失败"); + } + + // 计算本次问诊服务包问诊金额 + $amount_total = bcadd( + (string)$amount_total, + bcsub( + bcmul( + (string)$order_service_package_detail['service_count'], + (string)$order_service_package_detail['single_inquiry_price'], + 3 + ), + $refund_total, + 3 + ), + 3 + ); + } } // 提现金额 - $amount_total = $amount_total * 0.75; + $amount_total = bcmul((string)$amount_total,0.75,2); // 计算医生个人所得税 $income_tax = $this->computeIndividualIncomeTax($amount_total); @@ -490,28 +754,28 @@ class DoctorAccountService extends BaseService // 实际提现金额 $withdrawal_amount = $amount_total - $income_tax; - if ($withdrawal_amount > 0){ + if ($withdrawal_amount > 0) { $withdrawal_amount = floor($withdrawal_amount * 100) / 100; } - if ($withdrawal_amount_total != $withdrawal_amount){ - return fail(HttpEnumCode::SERVER_ERROR,"金额不符合"); + if ($withdrawal_amount_total != $withdrawal_amount) { + return fail(HttpEnumCode::SERVER_ERROR, "金额不符合"); } // 检测提现银行卡 $params = array(); $params['bank_card_id'] = $bank_card_id; $doctor_bank_card = DoctorBankCard::getOne($params); - if (empty($doctor_bank_card)){ - return fail(HttpEnumCode::HTTP_ERROR,"银行卡错误"); + if (empty($doctor_bank_card)) { + return fail(HttpEnumCode::HTTP_ERROR, "银行卡错误"); } // 获取银行数据 $params = array(); $params['bank_id'] = $doctor_bank_card['bank_id']; $basic_bank = BasicBank::getOne($params); - if (empty($basic_bank)){ - return fail(HttpEnumCode::HTTP_ERROR,"银行卡错误"); + if (empty($basic_bank)) { + return fail(HttpEnumCode::HTTP_ERROR, "银行卡错误"); } Db::beginTransaction(); @@ -522,16 +786,16 @@ class DoctorAccountService extends BaseService $data['account_name'] = $basic_bank['bank_name']; $data['bank_card_code'] = $doctor_bank_card['bank_card_code']; $data['bank_card_code_four'] = substr($doctor_bank_card['bank_card_code'], -4); - if ($amount_total > 0){ - $data['applied_withdrawal_amount'] = floor($amount_total * 100) / 100; // 提现金额 + if ($amount_total > 0) { + $data['applied_withdrawal_amount'] = floor($amount_total * 100) / 100; // 提现金额 } $data['actual_withdrawal_amount'] = $withdrawal_amount; // 实际提现金额 - if ($income_tax > 0){ - $data['income_tax'] = floor($income_tax * 100) / 100; // 提现所得税金额 + if ($income_tax > 0) { + $data['income_tax'] = floor($income_tax * 100) / 100; // 提现所得税金额 } $data['examine_status'] = 1; // 审核状态(1:审核中 2:审核通过 3:审核未通过) $doctor_withdrawal = DoctorWithdrawal::addDoctorWithdrawal($data); - if (empty($doctor_withdrawal)){ + if (empty($doctor_withdrawal)) { Db::rollBack(); return fail(HttpEnumCode::SERVER_ERROR); } @@ -548,53 +812,71 @@ class DoctorAccountService extends BaseService $data['county_id'] = $doctor_bank_card['county_id']; $data['county'] = $doctor_bank_card['county']; $doctor_withdrawal_bank = DoctorWithdrawalBank::addDoctorWithdrawalBank($data); - if (empty($doctor_withdrawal_bank)){ + if (empty($doctor_withdrawal_bank)) { Db::rollBack(); return fail(HttpEnumCode::SERVER_ERROR); } - foreach ($order_inquiry_id as $value){ + foreach ($order_nos as $order_no) { + $params = array(); + $params['order_no'] = $order_no; + $params['doctor_id'] = $user_info['client_user_id']; + $order = Order::getOne($params); + if (empty($order)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "存在不可提现订单"); + } + // 新增医生提现-关联订单表 $data = array(); $data['withdrawal_id'] = $doctor_withdrawal['withdrawal_id']; $data['doctor_id'] = $user_info['client_user_id']; - $data['order_inquiry_id'] = $value; + $data['order_id'] = $order['order_id']; $doctor_withdrawal_order = DoctorWithdrawalOrder::addDoctorWithdrawalOrder($data); - if (empty($doctor_withdrawal_order)){ + if (empty($doctor_withdrawal_order)) { Db::rollBack(); return fail(HttpEnumCode::SERVER_ERROR); } - // 修改问诊订单提现状态 + // 修改订单提现状态 $params = array(); - $params['order_inquiry_id'] = $value; + $params['order_no'] = $order_no; $data = array(); $data['is_withdrawal'] = 2; - $data['withdrawal_time'] = date('Y-m-d H:i:s',time()); - OrderInquiry::edit($params,$data); + $data['withdrawal_time'] = date('Y-m-d H:i:s', time()); + Order::edit($params,$data); + + // 修改问诊订单提现状态 + $params = array(); + $params['order_id'] = $order['order_id'];; + + $data = array(); + $data['is_withdrawal'] = 2; + $data['withdrawal_time'] = date('Y-m-d H:i:s', time()); + OrderInquiry::edit($params, $data); } // 账户表锁定 $params = array(); $params['doctor_id'] = $user_info['client_user_id']; // 账户余额 - DoctorAccount::dec($params,'balance_account',$amount_total); + DoctorAccount::dec($params, 'balance_account', $amount_total); // 提现金额 - DoctorAccount::inc($params,'applied_withdrawal_amount',$amount_total); + DoctorAccount::inc($params, 'applied_withdrawal_amount', $amount_total); // 实际提现金额 - DoctorAccount::inc($params,'actual_withdrawal_amount',$withdrawal_amount); + DoctorAccount::inc($params, 'actual_withdrawal_amount', $withdrawal_amount); // 所得税金额 - DoctorAccount::inc($params,'income_tax',$income_tax); + DoctorAccount::inc($params, 'income_tax', $income_tax); Db::commit(); return success(); } catch (\Exception $e) { Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR,$e->getMessage()); + return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage()); } } @@ -654,7 +936,7 @@ class DoctorAccountService extends BaseService } // 实际纳税金额 - if ($income > 4000){ + if ($income > 4000) { $income = $income * 0.8; } diff --git a/config/routes.php b/config/routes.php index 75ca065..165e953 100644 --- a/config/routes.php +++ b/config/routes.php @@ -892,7 +892,7 @@ Router::addGroup('/case', function () { // 测试使用 Router::addGroup('/test', function () { - Router::get('', [TestController::class, 'test_17']); + Router::get('', [TestController::class, 'test_16']); // // Router::get('/uninquiry', [TestController::class, 'uninquiry']); diff --git a/extend/Ca/Ca.php b/extend/Ca/Ca.php index a8dda30..e621b5c 100644 --- a/extend/Ca/Ca.php +++ b/extend/Ca/Ca.php @@ -359,7 +359,6 @@ abstract class Ca $arg = array_merge($arg, $option); - dump($arg); $response = $this->client->post($path, $arg); if ($response->getStatusCode() != '200') { From 18b6bf72ae9053ef3418d1cb2a8d3298b2113570 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 23 Apr 2024 13:09:23 +0800 Subject: [PATCH 127/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E4=BD=93=E7=8E=B0=E6=95=B0=E6=8D=AE1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Request/DoctorAccountRequest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Request/DoctorAccountRequest.php b/app/Request/DoctorAccountRequest.php index 290d756..5e337df 100644 --- a/app/Request/DoctorAccountRequest.php +++ b/app/Request/DoctorAccountRequest.php @@ -20,7 +20,7 @@ class DoctorAccountRequest extends FormRequest 'year', ], 'addDoctorWithdrawal' => [ // 发起提现 - 'order_inquiry_id', + 'order_no', 'withdrawal_amount_total', 'bank_card_id', ], From 37ca9c1e2120b30026a34a3538465b7e40431a7c Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 23 Apr 2024 14:44:00 +0800 Subject: [PATCH 128/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E4=BD=93=E7=8E=B0=E6=95=B0=E6=8D=AE2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/TestController.php | 70 +++------ app/Model/Order.php | 47 ++++++- app/Services/DoctorAccountService.php | 195 +++++++------------------- app/Services/OrderService.php | 76 ++++++++++ config/routes.php | 2 +- 5 files changed, 189 insertions(+), 201 deletions(-) diff --git a/app/Controller/TestController.php b/app/Controller/TestController.php index 475ee93..0091bc6 100644 --- a/app/Controller/TestController.php +++ b/app/Controller/TestController.php @@ -7,6 +7,7 @@ use App\Amqp\Producer\AutoCompleteInquiryDelayDirectProducer; use App\Amqp\Producer\AutoFinishInquiryDelayDirectProducer; use App\Amqp\Producer\CancelUnpayOrdersDelayDirectProducer; use App\Amqp\Producer\SendSmsMessageProducer; +use App\Amqp\Producer\UserCouponExpiredDelayDirectProducer; use App\Constants\DoctorTitleCode; use App\Constants\HttpEnumCode; use App\Exception\BusinessException; @@ -86,7 +87,7 @@ class TestController extends AbstractController // $this->test_12(); // $this->test_13(); // $this->test_14(); - $this->test_14(); + $this->test_17(); } // 获取未接诊的医生 @@ -457,61 +458,26 @@ class TestController extends AbstractController } public function test_17(){ + $coupon['valid_days'] = 90; + $data['valid_end_time'] = date("Y-m-d H:i:s", strtotime($coupon['valid_days'] . " day")); + $valid_end_time = strtotime($data['valid_end_time']); - $user_info = $this->request->getAttribute("userInfo") ?? []; + $data = array(); + $data['user_coupon_id'] = 1; - $year = $this->request->input('date'); - - $date = date('Y-m-d',strtotime("2024-04-15")); - - // 获取医生数据 - $params = array(); - $params['doctor_id'] = "516900370252341248"; - $user_doctor = UserDoctor::getOne($params); - if (empty($user_doctor)){ - return fail(); + $time = $valid_end_time - time(); + dump($time);die; + if ($time < 0){ + return false; + } + $message = new UserCouponExpiredDelayDirectProducer($data); + $message->setDelayMs(1000 * $time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + return false; } - $params = array(); - $params['doctor_id'] = "516900370252341248"; - - // 获取当天开始时间 - $start_date = date('Y-m-d 00:00:00', strtotime($date)); - - // 获取当天结束时间 - $end_date = date('Y-m-d 23:59:59', strtotime($date)); - - $date_params = [$start_date, $end_date]; - - - $inquiryService = new InquiryService(); - - // 获取医生当日接诊的订单金额 - $doctor_today_inquiry_total = Order::getDoctorDayAmountTotal($params,$date_params,1); - - // 获取医生当日已完成待入帐的订单金额 - $doctor_day_completed_amount_total = Order::getDoctorDayCompletedAmountTotal($params,$date_params,0); - - if ($user_doctor['is_platform_deep_cooperation'] == 0){ -// // 获取医生当日接诊的订单金额 -// $doctor_today_inquiry_total = $inquiryService->getDoctorDayAmountTotal($user_info['client_user_id'],$date); - - // 获取医生当日已完成未结束的订单金额 -// $doctor_day_completed_amount_total = $inquiryService->getDoctorDayCompletedAmountTotal($user_info['client_user_id'],$date); - }else{ -// // 获取医生当日接诊的订单金额-坐班医生 -// $doctor_today_inquiry_total = $inquiryService->getCooperationDoctorDayAmountTotal($user_info['client_user_id'],$date); - - // 获取医生当日已完成未结束的订单金额-坐班医生 -// $doctor_day_completed_amount_total = $inquiryService->getCooperationDoctorCompletedAmountTotal($user_info['client_user_id'],$date); - } - - - - $result = array(); - $result['doctor_today_inquiry_total'] = bcmul((string)$doctor_today_inquiry_total,"0.75",2); // 今日接诊收入 - - return success($result); } } \ No newline at end of file diff --git a/app/Model/Order.php b/app/Model/Order.php index e899ac2..aa1f15e 100644 --- a/app/Model/Order.php +++ b/app/Model/Order.php @@ -250,7 +250,7 @@ class Order extends Model } /** - * 获取可提现订单列表 + * 获取可提现订单列表-分页 * @param array $params * @param string|int $is_platform_deep_cooperation * @param array $fields @@ -258,7 +258,7 @@ class Order extends Model * @param int|null $per_page * @return array */ - public static function getDoctorWithdrawalOrderList(array $params, string|int $is_platform_deep_cooperation,array $fields = ["*"], int $page = null, ?int $per_page = 10): array + public static function getDoctorWithdrawalOrderPage(array $params, string|int $is_platform_deep_cooperation,array $fields = ["*"], int $page = null, ?int $per_page = 10): array { $query = self::with(['OrderInquiry', 'OrderServicePackage']) ->where($params) @@ -302,4 +302,47 @@ class Order extends Model return $data; } + + /** + * 获取可提现订单列表 + * @param array $params + * @param string|int $is_platform_deep_cooperation + * @param array $fields + * @return array + */ + public static function getDoctorWithdrawalOrderList(array $params, string|int $is_platform_deep_cooperation,array $fields = ["*"]): array + { + $query = self::with(['OrderInquiry', 'OrderServicePackage']) + ->where($params) + ->whereIn('order_type',[1,4,5]); + + // 问诊订单 + $query = $query->where(function ($query) use ($is_platform_deep_cooperation){ + $query->whereExists(function ($subQuery) use ($is_platform_deep_cooperation){ + $subQuery->from('order_inquiry'); + if ($is_platform_deep_cooperation == 1){ + $subQuery->whereNotIn('inquiry_type', [2,4]); + } + + $subQuery->whereNotIn('inquiry_mode', [7,8,9]) + ->whereIn('inquiry_status', [6]) + ->whereIn('inquiry_refund_status', [0,3]) + ->whereRaw('gdxz_order.order_id = gdxz_order_inquiry.order_id'); + }) + ->orWhereExists(function ($subQuery) { + $subQuery->from('order_service_package') + ->whereRaw('gdxz_order.order_id = gdxz_order_service_package.order_id') + ->whereIn('refund_status', [0,3]) + ->where('pay_status', 2) + ->where('start_time', 2) + ->whereIn('order_service_status', [4,5]) + ->WhereExists(function ($subQuery){ + $subQuery->from("order_service_package_inquiry") + ->whereRaw('gdxz_order_service_package.order_service_id = gdxz_order_service_package_inquiry.order_service_id'); + }); + }); + }); + + return $query->get(); + } } diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index db15842..6949e16 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -135,6 +135,8 @@ class DoctorAccountService extends BaseService $results = Order::getDoctorCreatedDateOrderInquiryPage($params, $date_params, $user_doctor['is_platform_deep_cooperation'], ['*'], $page, $per_page); if (!empty($results['data'])) { + $OrderService = new OrderService(); + foreach ($results['data'] as &$result) { // 填入字段 if (!empty($result['OrderInquiry'])) { @@ -161,80 +163,11 @@ class DoctorAccountService extends BaseService $result['finish_time'] = $result['OrderServicePackage']['finish_time']; } - // 默认退款金额为0; - $result['refund_total'] = 0; - // 计算退款金额 - if ($result['refund_status'] == 3){ - // 问诊订单 - if (!empty($result['OrderInquiry'])) { - // 获取退款数据 - $params = array(); - $params['inquiry_no'] = $result['OrderInquiry']['inquiry_no']; - $order_inquiry_refunds = OrderInquiryRefund::getList($params); - if (!empty($order_inquiry_refunds)) { - $refund_total = 0; - foreach ($order_inquiry_refunds as $order_inquiry_refund) { - $refund_total = $refund_total + $order_inquiry_refund['refund_total']; - } + // 获取订单退款金额 + $result['refund_total'] = $OrderService->getOrderRefundAmount($result['order_no']); - // 订单退款金额 - $result['refund_total'] = $refund_total; - } - } - - // 服务包订单 - if (!empty($result['OrderServicePackage'])) { - // 获取退款数据 - $params = array(); - $params['order_service_no'] = $result['OrderServicePackage']['order_service_no']; - $order_service_package_refunds = OrderServicePackageRefund::getList($params); - if (!empty($order_service_package_refunds)) { - $refund_total = 0; - foreach ($order_service_package_refunds as $order_service_package_refund) { - $refund_total = $refund_total + $order_service_package_refund['refund_total']; - } - - // 订单退款金额 - $result['refund_total'] = $refund_total; - } - } - } - - // 计算预计收入 - if ($result['order_type'] == 1){ - $result['estimate_income'] = bcmul( - bcsub( - $result['OrderInquiry']['amount_total'], - $result['refund_total'], - 3 - ), - 0.75, - 2 - ); - } - - if ($result['order_type'] == 4 || $result['order_type'] == 5){ - // 获取订单详情数据 - $params = array(); - $params['order_service_no'] = $result['OrderServicePackage']['order_service_no']; - $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (!empty($order_service_package_detail)){ - - $result['estimate_income'] = bcmul( // 可提现费用 - bcsub( // 退款费用 - bcmul( // 问诊费用 - (string)$order_service_package_detail['service_count'], - (string)$order_service_package_detail['single_inquiry_price'], - 3 - ), - $result['refund_total'], - 3 - ), - 0.75, - 2 - ); - } - } + // 获取订单可提现金额 + $result['expected_amount_total'] = $OrderService->getOrderWithdrawalAmount($result,$result['refund_total']); // 处理入账状态 if (!empty($result['OrderInquiry'])) { @@ -349,6 +282,41 @@ class DoctorAccountService extends BaseService $amount_total = $doctor_account['balance_account']; } + // 获取可提现订单列表 + $orders = Order:: getDoctorWithdrawalOrderList($params, $user_doctor['is_platform_deep_cooperation'], ['*']); + if (empty($orders)){ + // 无订单,账户余额强制赋0; + $amount_total = 0; + } + + $OrderService = new OrderService(); + + // 可提现金额 + $expected_amount_total = 0; + + // 订单号数据 + $order_nos = []; + + foreach ($orders as $order){ + // 获取订单退款金额 + $refund_total = $OrderService->getOrderRefundAmount($order['order_no']); + + // 获取订单可提现金额 + $expected_amount_total = bcadd( + $expected_amount_total, + $OrderService->getOrderWithdrawalAmount($order,$refund_total), + 2 + ); + + $order_nos[] = $order['order_no']; + } + + // 对比订单金额和账户金额;金额相差1元及以上返回错误 + $diff_amount_total = abs($amount_total - $expected_amount_total); + if ($diff_amount_total >= 1){ + return fail(HttpEnumCode::HTTP_ERROR, "提现金额错误"); + } + // 计算医生个人所得税 $income_tax = $this->computeIndividualIncomeTax($amount_total); @@ -361,6 +329,7 @@ class DoctorAccountService extends BaseService $result['amount_total'] = $amount_total; // 账户余额 $result['withdrawal_amount'] = $withdrawal_amount; // 提现金额 $result['income_tax'] = $income_tax; // 个人所得税 + $result['order_nos'] = $order_nos; // 订单号 return success($result); } @@ -445,9 +414,11 @@ class DoctorAccountService extends BaseService $params['doctor_id'] = $user_info['client_user_id']; $params['is_withdrawal'] = 0; - $results = Order:: getDoctorWithdrawalOrderList($params, $user_doctor['is_platform_deep_cooperation'], ['*'], $page, $per_page); + $results = Order:: getDoctorWithdrawalOrderPage($params, $user_doctor['is_platform_deep_cooperation'], ['*'], $page, $per_page); if (!empty($results['data'])) { + $OrderService = new OrderService(); + foreach ($results['data'] as &$result) { // 填入字段 if (!empty($result['OrderInquiry'])) { @@ -474,79 +445,11 @@ class DoctorAccountService extends BaseService $result['finish_time'] = $result['OrderServicePackage']['finish_time']; } - // 默认退款金额为0; - $result['refund_total'] = 0; - // 计算退款 - if ($result['refund_status'] == 3){ - // 问诊订单 - if (!empty($result['OrderInquiry'])) { - // 获取退款数据 - $params = array(); - $params['inquiry_no'] = $result['OrderInquiry']['inquiry_no']; - $order_inquiry_refunds = OrderInquiryRefund::getList($params); - if (!empty($order_inquiry_refunds)) { - $refund_total = 0; - foreach ($order_inquiry_refunds as $order_inquiry_refund) { - $refund_total = $refund_total + $order_inquiry_refund['refund_total']; - } + // 获取订单退款金额 + $result['refund_total'] = $OrderService->getOrderRefundAmount($result['order_no']); - // 订单退款金额 - $result['refund_total'] = $refund_total; - } - } - - // 服务包订单 - if (!empty($result['OrderServicePackage'])) { - // 获取退款数据 - $params = array(); - $params['order_service_no'] = $result['OrderServicePackage']['order_service_no']; - $order_service_package_refunds = OrderServicePackageRefund::getList($params); - if (!empty($order_service_package_refunds)) { - $refund_total = 0; - foreach ($order_service_package_refunds as $order_service_package_refund) { - $refund_total = $refund_total + $order_service_package_refund['refund_total']; - } - - // 订单退款金额 - $result['refund_total'] = $refund_total; - } - } - } - - // 计算可提现金额 - if ($result['order_type'] == 1){ - $result['expected_amount_total'] = bcmul( - bcsub( - $result['OrderInquiry']['amount_total'], - $result['refund_total'], - 3 - ), - 0.75, - 2 - ); - } - - if ($result['order_type'] == 4 || $result['order_type'] == 5){ - // 获取订单详情数据 - $params = array(); - $params['order_service_no'] = $result['OrderServicePackage']['order_service_no']; - $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (!empty($order_service_package_detail)){ - $result['expected_amount_total'] = bcmul( // 可提现费用 - bcsub( // 退款费用 - bcmul( // 问诊费用 - (string)$order_service_package_detail['service_count'], - (string)$order_service_package_detail['single_inquiry_price'], - 3 - ), - $result['refund_total'], - 3 - ), - 0.75, - 2 - ); - } - } + // 获取订单可提现金额 + $result['expected_amount_total'] = $OrderService->getOrderWithdrawalAmount($result,$result['refund_total']); unset($result['OrderInquiry']); unset($result['OrderServicePackage']); diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 9c7b220..5656c27 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -15,6 +15,7 @@ use App\Model\OrderProduct; use App\Model\OrderProductRefund; use App\Model\OrderRefund; use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageDetail; use App\Model\OrderServicePackageInquiry; use App\Model\OrderServicePackageRefund; use App\Utils\Log; @@ -1009,4 +1010,79 @@ class OrderService extends BaseService return $result; } + /** + * 获取订单退款金额 + * @param string|int $order_no + * @return string|int + */ + public function getOrderRefundAmount(string|int $order_no): string|int + { + // 退款金额 + $refund_total = 0; + + // 获取订单退款数据 + $params = array(); + $params['inquiry_no'] = $order_no; + $order_refunds = OrderRefund::getList($params); + if (!empty($order_refunds)) { + foreach ($order_refunds as $order_refund) { + $refund_total = bcadd( + (string)$refund_total, + (string)$order_refund['refund_total'], + 2 + ); + } + } + + return $refund_total; + } + + /** + * 获取订单可提现金额 + * @param array|object $order + * @param string|int $refund_total 订单退款金额 + * @return int|string + */ + public function getOrderWithdrawalAmount(array|object $order,string|int $refund_total): int|string + { + // 可提现金额 + $expected_amount_total = 0; + + // 计算可提现金额 + if ($order['order_type'] == 1){ + $expected_amount_total = bcmul( + bcsub( + $order['amount_total'], + $refund_total, + 3 + ), + 0.75, + 2 + ); + } + + if ($order['order_type'] == 4 || $order['order_type'] == 5){ + // 获取订单详情数据 + $params = array(); + $params['order_service_no'] = $order['order_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (!empty($order_service_package_detail)){ + $expected_amount_total = bcmul( // 可提现费用 + bcsub( // 退款费用 + bcmul( // 问诊费用 + (string)$order_service_package_detail['service_count'], + (string)$order_service_package_detail['single_inquiry_price'], + 3 + ), + $refund_total, + 3 + ), + 0.75, + 2 + ); + } + } + + return $expected_amount_total; + } } \ No newline at end of file diff --git a/config/routes.php b/config/routes.php index 165e953..d9ba7f0 100644 --- a/config/routes.php +++ b/config/routes.php @@ -892,7 +892,7 @@ Router::addGroup('/case', function () { // 测试使用 Router::addGroup('/test', function () { - Router::get('', [TestController::class, 'test_16']); + Router::get('', [TestController::class, 'test1111']); // // Router::get('/uninquiry', [TestController::class, 'uninquiry']); From 1c302c84a2283cda1f96a584c7562884d47204de Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 23 Apr 2024 14:57:46 +0800 Subject: [PATCH 129/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E4=BD=93=E7=8E=B0=E6=95=B0=E6=8D=AE3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorAccountService.php | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index 6949e16..63db476 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -224,16 +224,7 @@ class DoctorAccountService extends BaseService $params = array(); $params['doctor_id'] = $user_info['client_user_id']; - $fields = [ - 'doctor_id', - 'user_name', - 'iden_auth_status', - 'idcard_status', - 'multi_point_status', - 'avatar', - 'is_bind_bank', - ]; - $user_doctor = UserDoctor::getOne($params, $fields); + $user_doctor = UserDoctor::getOne($params); if (empty($user_doctor)) { return fail(HttpEnumCode::HTTP_ERROR, "非法医生"); } From 9b8bf264a377a7498182f81f3b57808a4410baef Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 23 Apr 2024 15:09:56 +0800 Subject: [PATCH 130/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=BA=86im=E6=8E=A8?= =?UTF-8?q?=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/ImService.php | 79 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/app/Services/ImService.php b/app/Services/ImService.php index a0e05f4..da46cc7 100644 --- a/app/Services/ImService.php +++ b/app/Services/ImService.php @@ -342,6 +342,30 @@ class ImService extends BaseService // 获取服务包订单编号-通过问诊订单id $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + // 获取服务包订单数据 + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包订单详情数据 + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包当月已问诊次数 + $month_inquiry_count = 0; + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { + // 获取服务包当月已问诊次数 + $OrderServicePackageService = new OrderServicePackageService(); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + } + // 检测问诊是否服务包首次问诊 $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); if ($is_first){ @@ -349,6 +373,16 @@ class ImService extends BaseService }else{ $message_content_data['desc'] = "温馨提示:医生繁忙请耐心等待,医生接诊后会第一时间通知您。"; } + + $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 + if (!empty($order_service_package['start_time'])){ + $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 + } + + if (!empty($order_service_package['finish_time'])){ + $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 + } + $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 }else{ $message_content_data['desc'] = "温馨提示:当前服务为专家问诊,医师接诊后可以在24小时内和医生沟通20个回合。医生繁忙请耐心等待,医生接诊会后第一时间短信通知您。"; } @@ -425,6 +459,14 @@ class ImService extends BaseService throw new BusinessException("im消息发送失败"); } + // 获取服务包当月已问诊次数 + $month_inquiry_count = 0; + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { + // 获取服务包当月已问诊次数 + $OrderServicePackageService = new OrderServicePackageService(); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + } + // 转换服务包订单类型为汉字 $order_type = orderServiceTypeToString($order_service_package['order_service_type']); @@ -486,6 +528,17 @@ class ImService extends BaseService $message_content_data['desc'] = "医生已接诊,{$order_type}服务本月剩余{$remaining_inquiry_count}/不限次,服务周期为:{$start_time}~{$finish_time},线上咨询不能代表面诊,医生的回复仅为建议。"; } } + + $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 + if (!empty($order_service_package['start_time'])){ + $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 + } + + if (!empty($order_service_package['finish_time'])){ + $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 + } + $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 + }else{ $message_content_data['desc'] = "医生已接诊,为提高沟通效率,您可一次性如实补充病情(具体症状,患病时长,用药情况及想咨询的问题等)。线上咨询不能代替面诊,医生建议仅供参考。"; } @@ -649,6 +702,22 @@ class ImService extends BaseService throw new BusinessException("im消息发送失败"); } + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包当月已问诊次数 + $month_inquiry_count = 0; + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { + // 获取服务包当月已问诊次数 + $OrderServicePackageService = new OrderServicePackageService(); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + } + // 检测问诊是否服务包首次问诊 $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); if ($is_first){ @@ -658,6 +727,16 @@ class ImService extends BaseService $message_content_data['title'] = "—问诊退款—"; $message_content_data['desc'] = "平台已自动发起退款,请注意查看账户信息。"; } + + $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 + if (!empty($order_service_package['start_time'])){ + $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 + } + + if (!empty($order_service_package['finish_time'])){ + $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 + } + $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 }else{ $message_content_data['title'] = "—问诊退款—"; $message_content_data['desc'] = "平台已自动发起退款,请注意查看账户信息。"; From 01568416c952c0017e423c5618efcc0fb35c597b Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 23 Apr 2024 15:31:03 +0800 Subject: [PATCH 131/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=BA=86im=E6=8E=A8?= =?UTF-8?q?=E9=80=811?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/ImService.php | 396 ++++++++++++++++++++++++++++++++++++- 1 file changed, 394 insertions(+), 2 deletions(-) diff --git a/app/Services/ImService.php b/app/Services/ImService.php index da46cc7..3092742 100644 --- a/app/Services/ImService.php +++ b/app/Services/ImService.php @@ -299,6 +299,47 @@ class ImService extends BaseService $message_content_data['message_type'] = 1; $message_content_data['title'] = "—问诊已结束—"; $message_content_data['desc'] = "线上咨询不能代替面诊,医生建议仅供参考。"; + + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包当月已问诊次数 + $month_inquiry_count = 0; + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { + // 获取服务包当月已问诊次数 + $OrderServicePackageService = new OrderServicePackageService(); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + } + + $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 + if (!empty($order_service_package['start_time'])){ + $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 + } + + if (!empty($order_service_package['finish_time'])){ + $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 + } + $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 + } + $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; @@ -592,6 +633,22 @@ class ImService extends BaseService throw new BusinessException("im消息发送失败"); } + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包当月已问诊次数 + $month_inquiry_count = 0; + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { + // 获取服务包当月已问诊次数 + $OrderServicePackageService = new OrderServicePackageService(); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + } + // 转换服务包订单类型为汉字 $order_type = orderServiceTypeToString($order_service_package['order_service_type']); @@ -604,6 +661,16 @@ class ImService extends BaseService $message_content_data['title'] = "—医生未接诊—"; $message_content_data['desc'] = "温馨提示:医生因工作繁忙未能及时进行接诊,请您见谅;稍后请再次发起问诊。"; } + + $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 + if (!empty($order_service_package['start_time'])){ + $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 + } + + if (!empty($order_service_package['finish_time'])){ + $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 + } + $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 }else{ $message_content_data['title'] = "—医生未接诊—"; $message_content_data['desc'] = "医生因工作繁忙未能及时接诊,请您谅解。所支付金额会在24小时内原路退回,再次感谢您的支持"; @@ -652,7 +719,48 @@ class ImService extends BaseService $message_content_data['data']['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; $message_content_data['data']['order_prescription_id'] = $order_prescription_id; $message_content_data['data']['product_name'] = $product_name ?? "药品"; - $message_content_data['data']['pharmacist_verify_time'] = date('Y-m-d H:i:s', time());; + $message_content_data['data']['pharmacist_verify_time'] = date('Y-m-d H:i:s', time()); + + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包当月已问诊次数 + $month_inquiry_count = 0; + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { + // 获取服务包当月已问诊次数 + $OrderServicePackageService = new OrderServicePackageService(); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + } + + $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 + if (!empty($order_service_package['start_time'])){ + $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 + } + + if (!empty($order_service_package['finish_time'])){ + $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 + } + $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 + } + $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; @@ -776,10 +884,49 @@ class ImService extends BaseService // 消息内容 - 患者-医生 $message_content_data = array(); $message_content_data['message_type'] = 2; // 订单结束评价弹出 -// $message_content_data['title'] = "评价"; $message_content_data['desc'] = ""; $message_content_data['data']['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包当月已问诊次数 + $month_inquiry_count = 0; + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { + // 获取服务包当月已问诊次数 + $OrderServicePackageService = new OrderServicePackageService(); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + } + + $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 + if (!empty($order_service_package['start_time'])){ + $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 + } + + if (!empty($order_service_package['finish_time'])){ + $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 + } + $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 + } + $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; @@ -822,6 +969,46 @@ class ImService extends BaseService $message_content_data['data']['product_name'] = $product_name ?: "药品"; $message_content_data['data']['pharmacist_verify_time'] = date('Y-m-d H:i:s', time());; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包当月已问诊次数 + $month_inquiry_count = 0; + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { + // 获取服务包当月已问诊次数 + $OrderServicePackageService = new OrderServicePackageService(); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + } + + $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 + if (!empty($order_service_package['start_time'])){ + $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 + } + + if (!empty($order_service_package['finish_time'])){ + $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 + } + $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 + } + $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; @@ -859,6 +1046,47 @@ class ImService extends BaseService $message_content_data['message_type'] = 1; $message_content_data['title'] = "—问诊已结束—"; $message_content_data['desc'] = "本次问诊服务已正式结束,祝您早日康复,再次感谢您的支持。"; + + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包当月已问诊次数 + $month_inquiry_count = 0; + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { + // 获取服务包当月已问诊次数 + $OrderServicePackageService = new OrderServicePackageService(); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + } + + $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 + if (!empty($order_service_package['start_time'])){ + $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 + } + + if (!empty($order_service_package['finish_time'])){ + $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 + } + $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 + } + $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; @@ -904,6 +1132,47 @@ class ImService extends BaseService $message_content_data['title'] = "您有一个新的问诊服务等待接诊"; $message_content_data['desc'] = $desc; $message_content_data['data']['message_path'] = "/Pages/yishi/wenzhen_v2/wenzhen"; + + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包当月已问诊次数 + $month_inquiry_count = 0; + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { + // 获取服务包当月已问诊次数 + $OrderServicePackageService = new OrderServicePackageService(); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + } + + $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 + if (!empty($order_service_package['start_time'])){ + $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 + } + + if (!empty($order_service_package['finish_time'])){ + $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 + } + $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 + } + $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; @@ -1015,6 +1284,47 @@ class ImService extends BaseService $message_content_data['data']['order_no'] = (string)$order_inquiry['inquiry_no']; $message_content_data['data']['disease_desc'] = $disease_desc ?: ""; $message_content_data['data']['message_path'] = "user/pages/case/index?order_inquiry_id=" . $order_inquiry['order_inquiry_id']; // 跳转地址(小程序内页) + + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包当月已问诊次数 + $month_inquiry_count = 0; + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { + // 获取服务包当月已问诊次数 + $OrderServicePackageService = new OrderServicePackageService(); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + } + + $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 + if (!empty($order_service_package['start_time'])){ + $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 + } + + if (!empty($order_service_package['finish_time'])){ + $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 + } + $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 + } + $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; @@ -1058,6 +1368,47 @@ class ImService extends BaseService $message_content_data['data']['order_no'] = (string)$order_inquiry['inquiry_no']; $message_content_data['data']['message_path'] = "patient/pages/sickForm/sickForm"; // 跳转地址(小程序内页) $message_content_data['data']['case_not_fill_fields'] = $case_fields; // 病例字段,json格式,医生端发送患者端使用(此字段仅针对message_type为12的情况) + + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包当月已问诊次数 + $month_inquiry_count = 0; + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { + // 获取服务包当月已问诊次数 + $OrderServicePackageService = new OrderServicePackageService(); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + } + + $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 + if (!empty($order_service_package['start_time'])){ + $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 + } + + if (!empty($order_service_package['finish_time'])){ + $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 + } + $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 + } + $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; @@ -1102,6 +1453,47 @@ class ImService extends BaseService $message_content_data['data']['message_path'] = "user/pages/sick_detail/index"; // 跳转地址(小程序内页) $message_content_data['data']['case_patient_message_path'] = "/patient/sickDetail/sickDetail"; // 跳转地址(小程序内页) $message_content_data['data']['case_filled_fields'] = $case_fields; // 病例字段,json格式,患者端发送医生端使用(此字段仅针对message_type为12的情况) + + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + throw new BusinessException("im消息发送失败"); + } + + // 获取服务包当月已问诊次数 + $month_inquiry_count = 0; + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { + // 获取服务包当月已问诊次数 + $OrderServicePackageService = new OrderServicePackageService(); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + } + + $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 + if (!empty($order_service_package['start_time'])){ + $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 + } + + if (!empty($order_service_package['finish_time'])){ + $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 + } + $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 + } + $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; From 0df8d9b043e68f5e93ecc002e109acf3eda194af Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 23 Apr 2024 15:44:34 +0800 Subject: [PATCH 132/274] 1 --- app/Model/Order.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Model/Order.php b/app/Model/Order.php index aa1f15e..cd83f02 100644 --- a/app/Model/Order.php +++ b/app/Model/Order.php @@ -308,9 +308,9 @@ class Order extends Model * @param array $params * @param string|int $is_platform_deep_cooperation * @param array $fields - * @return array + * @return array|Collection|\Hyperf\Collection\Collection */ - public static function getDoctorWithdrawalOrderList(array $params, string|int $is_platform_deep_cooperation,array $fields = ["*"]): array + public static function getDoctorWithdrawalOrderList(array $params, string|int $is_platform_deep_cooperation,array $fields = ["*"]): array|Collection|\Hyperf\Collection\Collection { $query = self::with(['OrderInquiry', 'OrderServicePackage']) ->where($params) @@ -343,6 +343,6 @@ class Order extends Model }); }); - return $query->get(); + return $query->get($fields); } } From 236b34d4d1935b9445cb8a5b5be389d90b4bd278 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 23 Apr 2024 15:47:05 +0800 Subject: [PATCH 133/274] 3 --- app/Services/OrderService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 5656c27..338fffe 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -1022,7 +1022,7 @@ class OrderService extends BaseService // 获取订单退款数据 $params = array(); - $params['inquiry_no'] = $order_no; + $params['refund_no'] = $order_no; $order_refunds = OrderRefund::getList($params); if (!empty($order_refunds)) { foreach ($order_refunds as $order_refund) { From f814d79b7b73b7caeb32af388c3f1884ee4ae589 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 23 Apr 2024 16:19:51 +0800 Subject: [PATCH 134/274] 34444 --- app/Common/Common.php | 31 ++++++++++++ app/Services/MessagePush.php | 92 ++++++++++++++++++------------------ 2 files changed, 77 insertions(+), 46 deletions(-) diff --git a/app/Common/Common.php b/app/Common/Common.php index 442ba8b..6034e40 100644 --- a/app/Common/Common.php +++ b/app/Common/Common.php @@ -349,5 +349,36 @@ function monthlyFrequencyToString(int|string $monthly_frequency): string $result = "不限"; } + return $result; +} + +/** + * 转换问诊订单订单接诊方式-字符串 + * @param int|string $inquiry_mode 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) + * @return string + */ +function inquiryModeToString(int|string $inquiry_mode): string +{ + if ($inquiry_mode == 1) { + $result = "图文"; + } elseif ($inquiry_mode == 2) { + $result = "视频"; + } elseif ($inquiry_mode == 3) { + $result = "语音"; + } elseif ($inquiry_mode == 4) { + $result = "电话"; + } elseif ($inquiry_mode == 5) { + $result = "会员"; + } elseif ($inquiry_mode == 6) { + $result = "疑难会诊"; + } elseif ($inquiry_mode == 7) { + $result = "附赠"; + } elseif ($inquiry_mode == 8) { + $result = "健康包"; + } elseif ($inquiry_mode == 9) { + $result = "随访包"; + } else { + $result = "未知"; + } return $result; } \ No newline at end of file diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index ef265bb..9e53993 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -2673,7 +2673,7 @@ class MessagePush extends BaseService $params['doctor_id'] = $this->order_inquiry['doctor_id']; $user_doctor = UserDoctor::getOne($params); if (empty($user_doctor)) { - Log::getInstance("MessagePush")->error("错误:医生数据为空"); + Log::getInstance("MessagePush")->error("医生数据为空"); return; } @@ -2686,8 +2686,8 @@ class MessagePush extends BaseService return; } - // 转换服务包订单类型为汉字 - $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + // 转换问诊订单订单接诊方式-字符串 + $inquiry_mode = orderServiceTypeToString($this->order_inquiry['inquiry_mode']); // 站内 $data = array(); @@ -2695,9 +2695,9 @@ class MessagePush extends BaseService $data['notice_type'] = 1; $data['inquiry_type'] = $this->order_inquiry['inquiry_type']; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) $data['from_name'] = "肝胆小秘书"; - $data['notice_brief_title'] = "您有新的{$order_type}服务等待接诊,请及时处理。"; - $data['notice_title'] = "您有新的{$order_type}服务等待接诊,请及时处理。"; - $data['notice_content'] = "您有新的{$order_type}服务等待接诊,请及时处理。"; + $data['notice_brief_title'] = "您有新的{$inquiry_mode}服务等待接诊,请及时处理。"; + $data['notice_title'] = "您有新的{$inquiry_mode}服务等待接诊,请及时处理。"; + $data['notice_content'] = "您有新的{$inquiry_mode}服务等待接诊,请及时处理。"; $data['link_type'] = 3; // 问诊消息列表页 $link_params = array(); @@ -2731,7 +2731,7 @@ class MessagePush extends BaseService $sub_data['wx_template_id'] = "G1RIs0RYqsTQ2CuPQWalIMyb6_deuEEbJfajfhGvNzc";//咨询提醒 $sub_data['params']['page'] = "Pages/yishi/wenzhen_v2/wenzhen"; $sub_data['params']['data'] = [ - "thing1" => "您有一个{$order_type}服务等待接诊",// 提醒内容 + "thing1" => "您有一个{$inquiry_mode}服务等待接诊",// 提醒内容 "name2" => (string)$this->order_inquiry['patient_name'],// 患者姓名 "thing4" => (string)$disease_desc,// 病情描述 "thing6" => "72小时内未接诊,平台将自送取消服务",// 提示说明 @@ -2746,7 +2746,7 @@ class MessagePush extends BaseService $sms_data['user_id'] = $this->user['user_id']; $template_param = array(); - $template_param['type'] = $order_type; + $template_param['type'] = $inquiry_mode; $sms_data['template_param'] = $template_param; $data = array(); @@ -2790,8 +2790,8 @@ class MessagePush extends BaseService return; } - // 转换服务包订单类型为汉字 - $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + // 转换问诊订单订单接诊方式-字符串 + $inquiry_mode = orderServiceTypeToString($this->order_inquiry['inquiry_mode']); // 站内 $data = array(); @@ -2799,9 +2799,9 @@ class MessagePush extends BaseService $data['notice_type'] = 1; $data['inquiry_type'] = $this->order_inquiry['inquiry_type']; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) $data['from_name'] = "肝胆小秘书"; - $data['notice_brief_title'] = "{$this->order_inquiry['patient_name']}患者发起{$order_type}服务中的一次问诊,请及时处理。"; - $data['notice_title'] = "{$this->order_inquiry['patient_name']}患者发起{$order_type}服务中的一次问诊,请及时处理。"; - $data['notice_content'] = "{$this->order_inquiry['patient_name']}患者发起{$order_type}服务中的一次问诊,请及时处理。"; + $data['notice_brief_title'] = "{$this->order_inquiry['patient_name']}患者发起{$inquiry_mode}服务中的一次问诊,请及时处理。"; + $data['notice_title'] = "{$this->order_inquiry['patient_name']}患者发起{$inquiry_mode}服务中的一次问诊,请及时处理。"; + $data['notice_content'] = "{$this->order_inquiry['patient_name']}患者发起{$inquiry_mode}服务中的一次问诊,请及时处理。"; $data['link_type'] = 3; // 问诊消息列表页 $link_params = array(); @@ -2835,7 +2835,7 @@ class MessagePush extends BaseService $sub_data['wx_template_id'] = "G1RIs0RYqsTQ2CuPQWalIMyb6_deuEEbJfajfhGvNzc";//咨询提醒 $sub_data['params']['page'] = "Pages/yishi/wenzhen_v2/wenzhen"; $sub_data['params']['data'] = [ - "thing1" => "发起{$order_type}服务中一次问诊",// 提醒内容 + "thing1" => "发起{$inquiry_mode}服务中一次问诊",// 提醒内容 "name2" => (string)$this->order_inquiry['patient_name'],// 患者姓名 "thing4" => (string)$disease_desc,// 病情描述 "thing6" => "24小时内未接诊,平台将自送取消问诊",// 提示说明 @@ -2883,8 +2883,8 @@ class MessagePush extends BaseService return; } - // 转换服务包订单类型为汉字 - $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + // 转换问诊订单订单接诊方式-字符串 + $inquiry_mode = orderServiceTypeToString($this->order_inquiry['inquiry_mode']); // 站内 $data = array(); @@ -2892,9 +2892,9 @@ class MessagePush extends BaseService $data['notice_type'] = 1; $data['inquiry_type'] = $this->order_inquiry['inquiry_type']; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) $data['from_name'] = "肝胆小秘书"; - $data['notice_brief_title'] = "{$this->order_inquiry['patient_name']}患者已取消{$order_type}服务,您可选择其他患者的问诊咨询进行接诊。"; - $data['notice_title'] = "{$this->order_inquiry['patient_name']}患者已取消{$order_type}服务,您可选择其他患者的问诊咨询进行接诊。"; - $data['notice_content'] = "{$this->order_inquiry['patient_name']}患者已取消{$order_type}服务,您可选择其他患者的问诊咨询进行接诊。"; + $data['notice_brief_title'] = "{$this->order_inquiry['patient_name']}患者已取消{$inquiry_mode}服务,您可选择其他患者的问诊咨询进行接诊。"; + $data['notice_title'] = "{$this->order_inquiry['patient_name']}患者已取消{$inquiry_mode}服务,您可选择其他患者的问诊咨询进行接诊。"; + $data['notice_content'] = "{$this->order_inquiry['patient_name']}患者已取消{$inquiry_mode}服务,您可选择其他患者的问诊咨询进行接诊。"; $data['link_type'] = 3; // 问诊消息列表页 $link_params = array(); @@ -2927,7 +2927,7 @@ class MessagePush extends BaseService $sub_data['wx_template_id'] = "G1RIs0RYqsTQ2CuPQWalIMyb6_deuEEbJfajfhGvNzc";//咨询提醒 $sub_data['params']['page'] = "Pages/yishi/wenzhen_v2/wenzhen"; $sub_data['params']['data'] = [ - "thing1" => "{$order_type}服务已取消",// 提醒内容 + "thing1" => "{$inquiry_mode}服务已取消",// 提醒内容 "name2" => (string)$this->order_inquiry['patient_name'],// 患者姓名 "thing4" => (string)$disease_desc,// 病情描述 "thing6" => "您可以选择其他患者的问诊咨询进行接诊",// 提示说明 @@ -2966,8 +2966,8 @@ class MessagePush extends BaseService return; } - // 转换服务包订单类型为汉字 - $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + // 转换问诊订单订单接诊方式-字符串 + $inquiry_mode = orderServiceTypeToString($this->order_inquiry['inquiry_mode']); // 站内 $data = array(); @@ -2975,9 +2975,9 @@ class MessagePush extends BaseService $data['notice_type'] = 1; $data['inquiry_type'] = $this->order_inquiry['inquiry_type']; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) $data['from_name'] = "肝胆小秘书"; - $data['notice_brief_title'] = "{$this->order_inquiry['patient_name']}患者的{$order_type}服务您还未接诊,请及时处理。"; - $data['notice_title'] = "{$this->order_inquiry['patient_name']}患者的{$order_type}服务您还未接诊,请及时处理。"; - $data['notice_content'] = "{$this->order_inquiry['patient_name']}患者的{$order_type}服务您还未接诊,请及时处理。"; + $data['notice_brief_title'] = "{$this->order_inquiry['patient_name']}患者的{$inquiry_mode}服务您还未接诊,请及时处理。"; + $data['notice_title'] = "{$this->order_inquiry['patient_name']}患者的{$inquiry_mode}服务您还未接诊,请及时处理。"; + $data['notice_content'] = "{$this->order_inquiry['patient_name']}患者的{$inquiry_mode}服务您还未接诊,请及时处理。"; $data['link_type'] = 3; // 问诊消息列表页. $link_params = array(); @@ -3011,7 +3011,7 @@ class MessagePush extends BaseService $sub_data['wx_template_id'] = "G1RIs0RYqsTQ2CuPQWalIMyb6_deuEEbJfajfhGvNzc"; // 咨询提醒 $sub_data['params']['page'] = "Pages/yishi/wenzhen_v2/wenzhen"; $sub_data['params']['data'] = [ - "thing1" => "您好医生,有新的{$order_type}服务您还未接诊",// 提醒内容 + "thing1" => "您好医生,有新的{$inquiry_mode}服务您还未接诊",// 提醒内容 "name2" => $this->order_inquiry['patient_name'],// 患者姓名 "thing4" => mb_substr($order_inquiry_case['disease_desc'], 0, 18),// 病情描述 "thing6" => "您还未接诊,请及时上线处理",// 提示说明 @@ -3025,7 +3025,7 @@ class MessagePush extends BaseService $sms_data['user_id'] = $this->user['user_id']; $template_param = array(); - $template_param['type'] = $order_type; + $template_param['type'] = $inquiry_mode; $template_param['name'] = $this->order_inquiry['patient_name']; $sms_data['template_param'] = $template_param; @@ -3071,8 +3071,8 @@ class MessagePush extends BaseService return; } - // 转换服务包订单类型为汉字 - $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + // 转换问诊订单订单接诊方式-字符串 + $inquiry_mode = orderServiceTypeToString($this->order_inquiry['inquiry_mode']); // 站内 $data = array(); @@ -3080,9 +3080,9 @@ class MessagePush extends BaseService $data['notice_type'] = 1; $data['inquiry_type'] = $this->order_inquiry['inquiry_type']; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) $data['from_name'] = "肝胆小秘书"; - $data['notice_brief_title'] = "{$this->order_inquiry['patient_name']}患者的{$order_type}服务已完成,您可以提醒患者进行续费。"; - $data['notice_title'] = "{$this->order_inquiry['patient_name']}患者的{$order_type}服务已完成,您可以提醒患者进行续费。"; - $data['notice_content'] = "{$this->order_inquiry['patient_name']}患者的{$order_type}服务已完成,您可以提醒患者进行续费。"; + $data['notice_brief_title'] = "{$this->order_inquiry['patient_name']}患者的{$inquiry_mode}服务已完成,您可以提醒患者进行续费。"; + $data['notice_title'] = "{$this->order_inquiry['patient_name']}患者的{$inquiry_mode}服务已完成,您可以提醒患者进行续费。"; + $data['notice_content'] = "{$this->order_inquiry['patient_name']}患者的{$inquiry_mode}服务已完成,您可以提醒患者进行续费。"; $message = new SendStationMessageProducer($data); $producer = ApplicationContext::getContainer()->get(Producer::class); @@ -3109,7 +3109,7 @@ class MessagePush extends BaseService $sub_data['wx_template_id'] = "G1RIs0RYqsTQ2CuPQWalIMyb6_deuEEbJfajfhGvNzc"; // 咨询提醒 $sub_data['params']['page'] = "Pages/yishi/wenzhen_v2/wenzhen"; $sub_data['params']['data'] = [ - "thing1" => "{$order_type}服务已完成",// 提醒内容 + "thing1" => "{$inquiry_mode}服务已完成",// 提醒内容 "name2" => $this->order_inquiry['patient_name'],// 患者姓名 "thing4" => $disease_desc,// 病情描述 "thing6" => "您可以提醒患者进行续费",// 提示说明 @@ -3545,8 +3545,8 @@ class MessagePush extends BaseService return; } - // 转换服务包订单类型为汉字 - $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + // 转换问诊订单订单接诊方式-字符串 + $inquiry_mode = orderServiceTypeToString($this->order_inquiry['inquiry_mode']); // 站内 $data = array(); @@ -3554,9 +3554,9 @@ class MessagePush extends BaseService $data['notice_type'] = 3; $data['notice_system_type'] = 1; $data['from_name'] = "肝胆小秘书"; - $data['notice_brief_title'] = "您购买的{$order_type}服务,医生未及时确认,点击查看详情。"; - $data['notice_title'] = "您购买的{$order_type}服务,医生未及时确认,点击查看详情。"; - $data['notice_content'] = "您购买的{$order_type}服务,{$user_doctor['user_name']}医生未及时确认,平台已自动发起退款,请注意查看账户信息。"; + $data['notice_brief_title'] = "您购买的{$inquiry_mode}服务,医生未及时确认,点击查看详情。"; + $data['notice_title'] = "您购买的{$inquiry_mode}服务,医生未及时确认,点击查看详情。"; + $data['notice_content'] = "您购买的{$inquiry_mode}服务,{$user_doctor['user_name']}医生未及时确认,平台已自动发起退款,请注意查看账户信息。"; $data['link_type'] = 15; $link_params = array(); @@ -3581,7 +3581,7 @@ class MessagePush extends BaseService $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 $sub_data['params']['page'] = "healthyService/pages/healthyOrderDetail/healthyOrderDetail?order_service_id={$this->order['order_no']}"; $sub_data['params']['data'] = [ - "thing1" => "{$order_type}服务",// 问诊内容 + "thing1" => "{$inquiry_mode}服务",// 问诊内容 "thing2" => "未及时确认",// 提醒内容 "name3" => (string)$user_doctor['user_name'],// 问诊医生 "thing4" => "平台已自动发起退款,请注意查看账户信息",// 提示说明 @@ -3619,8 +3619,8 @@ class MessagePush extends BaseService return; } - // 转换服务包订单类型为汉字 - $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + // 转换问诊订单订单接诊方式-字符串 + $inquiry_mode = orderServiceTypeToString($this->order_inquiry['inquiry_mode']); // 站内 $data = array(); @@ -3628,9 +3628,9 @@ class MessagePush extends BaseService $data['notice_type'] = 3; $data['notice_system_type'] = 1; $data['from_name'] = "肝胆小秘书"; - $data['notice_brief_title'] = "您购买的{$order_type}服务,订单取消成功,点击查看详情。"; - $data['notice_title'] = "您购买的{$order_type}服务,订单取消成功,点击查看详情。"; - $data['notice_content'] = "您购买的{$order_type}服务,订单取消成功,平台已自动发起退款,请注意查看账户信息。"; + $data['notice_brief_title'] = "您购买的{$inquiry_mode}服务,订单取消成功,点击查看详情。"; + $data['notice_title'] = "您购买的{$inquiry_mode}服务,订单取消成功,点击查看详情。"; + $data['notice_content'] = "您购买的{$inquiry_mode}服务,订单取消成功,平台已自动发起退款,请注意查看账户信息。"; $data['link_type'] = 15; $link_params = array(); @@ -3655,7 +3655,7 @@ class MessagePush extends BaseService $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 $sub_data['params']['page'] = "healthyService/pages/healthyOrderDetail/healthyOrderDetail?order_service_id={$this->order['order_no']}"; $sub_data['params']['data'] = [ - "thing1" => "{$order_type}服务",// 问诊内容 + "thing1" => "{$inquiry_mode}服务",// 问诊内容 "thing2" => "取消订单成功",// 提醒内容 "name3" => (string)$user_doctor['user_name'],// 问诊医生 "thing4" => "平台已自动发起退款,请注意查看账户信息",// 提示说明 @@ -3669,7 +3669,7 @@ class MessagePush extends BaseService $sms_data['user_id'] = $this->user['user_id']; $template_param = array(); - $template_param['type'] = $order_type; + $template_param['type'] = $inquiry_mode; $template_param['name'] = (string)$user_doctor['user_name']; $sms_data['template_param'] = $template_param; From 7bf0b4d44be5aacdf6a4874be986341325c1adb6 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 23 Apr 2024 16:29:56 +0800 Subject: [PATCH 135/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95=E9=94=99=E8=AF=AF=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/CallBackController.php | 9 +++------ app/Services/OrderServicePackageService.php | 3 ++- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index f435af9..397d53e 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -2570,14 +2570,11 @@ class CallBackController extends AbstractController $data['user_id'] = $order_service_package['user_id']; $data['patient_id'] = $order_service_package['patient_id']; $data['doctor_id'] = $order_service_package['doctor_id']; - if ($order_service_package['order_service_type'] == 1){ - $data['order_type'] = 5; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) - }else{ - $data['order_type'] = 4; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) - } + $data['order_type'] = 1; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付) $data['pay_status'] = 2; // 1:待支付 $data['order_no'] = "I" . $generator->generate(); // 订单编号 + $data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号 $data['amount_total'] = 0; // 订单金额 $data['coupon_amount_total'] = 0; // 优惠卷总金额 $data['payment_amount_total'] = 0; // 实际付款金额 @@ -2600,7 +2597,7 @@ class CallBackController extends AbstractController $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) $data['inquiry_pay_status'] = 2; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) $data['inquiry_no'] = $order['order_no'];// 订单编号 - $data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号 + $data['escrow_trade_no'] = $order['escrow_trade_no']; // 第三方支付流水号 $data['amount_total'] = 0;// 订单金额 $data['coupon_amount_total'] = 0;// 优惠卷总金额 $data['payment_amount_total'] = 0;// 实际付款金额 diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 0db2cd5..05802b5 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -773,6 +773,7 @@ class OrderServicePackageService extends BaseService $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付) $data['pay_status'] = 2; // 1:待支付 $data['order_no'] = "I" . $generator->generate(); // 订单编号 + $data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号 $data['amount_total'] = 0; // 订单金额 $data['coupon_amount_total'] = 0; // 优惠卷总金额 $data['payment_amount_total'] = 0; // 实际付款金额 @@ -794,7 +795,7 @@ class OrderServicePackageService extends BaseService $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) $data['inquiry_pay_status'] = 2; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) $data['inquiry_no'] = $order['order_no'];// 订单编号 - $data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号 + $data['escrow_trade_no'] = $order['escrow_trade_no']; // 第三方支付流水号 $data['amount_total'] = 0;// 订单金额 $data['coupon_amount_total'] = 0;// 优惠卷总金额 $data['payment_amount_total'] = 0;// 实际付款金额 From cf6ddb356a0539e829b2b6feead1fd892ec28449 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 23 Apr 2024 16:33:32 +0800 Subject: [PATCH 136/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E6=9C=AA=E6=8E=A5=E8=AF=8A=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php index 102582d..bbd7fc6 100644 --- a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php @@ -167,7 +167,7 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage if (count($order_service_package_inquiry) == 1){ // 首单服务包问诊订单,但问诊订单未接诊,执行服务包退款 $OrderService = new OrderService(); - $OrderService->orderRefund($order_service_package_inquiry['order_service_no'], "医生未接诊"); + $OrderService->orderRefund($order_service_package_inquiry[0]['order_service_no'], "医生未接诊"); } } } From 013480a3cb6a6ed66d8d9396ab1ee0baea3c6ef3 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 23 Apr 2024 16:49:16 +0800 Subject: [PATCH 137/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E5=BD=93=E6=9C=88=E5=B7=B2=E9=97=AE?= =?UTF-8?q?=E8=AF=8A=E6=AC=A1=E6=95=B0=20=EF=BC=8C=E4=BB=A5=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E6=97=B6=E9=97=B4=E4=B8=BA=E5=87=86=E3=80=82=20?= =?UTF-8?q?=E5=BD=93=E4=B8=80=E4=B8=AA=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=98=AF2024-4-22=2015=EF=BC=9A30=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E7=9A=84=20=E6=AD=A4=E6=97=B6=E4=BC=9A=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E6=9C=8D=E5=8A=A1=E5=8C=85=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=EF=BC=8C=E5=BD=93=E6=9C=8D=E5=8A=A1=E5=8C=85?= =?UTF-8?q?=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95=20=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E5=89=A9=E4=BD=99=E6=AC=A1=E6=95=B0=E6=97=B6=EF=BC=8C=E6=98=AF?= =?UTF-8?q?=E4=BB=A5=E6=9C=8D=E5=8A=A1=E5=8C=85=E7=9A=84=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E6=97=B6=E9=97=B4=EF=BC=8C=E5=A6=82=E6=9E=9C=E4=BB=A5=E5=BC=80?= =?UTF-8?q?=E5=A7=8B=E6=97=B6=E9=97=B4=EF=BC=8C=E4=BC=9A=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E6=BC=8F=E6=8E=89=E9=A6=96=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/ImService.php | 28 ++++++++++----------- app/Services/InquiryService.php | 2 +- app/Services/MessagePush.php | 2 +- app/Services/OrderServicePackageService.php | 6 ++--- app/Services/PatientOrderService.php | 2 +- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/app/Services/ImService.php b/app/Services/ImService.php index 3092742..2119b87 100644 --- a/app/Services/ImService.php +++ b/app/Services/ImService.php @@ -326,7 +326,7 @@ class ImService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { // 获取服务包当月已问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); } $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 @@ -404,7 +404,7 @@ class ImService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { // 获取服务包当月已问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); } // 检测问诊是否服务包首次问诊 @@ -505,7 +505,7 @@ class ImService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { // 获取服务包当月已问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); } // 转换服务包订单类型为汉字 @@ -517,7 +517,7 @@ class ImService extends BaseService // 获取服务包当月剩余问诊次数 if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'],$order_service_package['order_service_type'],$order_service_package['user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$order_service_package['user_id'], $order_service_package['doctor_id']); $remaining_inquiry_count = $order_service_package_detail['monthly_frequencys'] - $month_inquiry_count; if ($remaining_inquiry_count < 0){ $remaining_inquiry_count = 0; @@ -646,7 +646,7 @@ class ImService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { // 获取服务包当月已问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); } // 转换服务包订单类型为汉字 @@ -747,7 +747,7 @@ class ImService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { // 获取服务包当月已问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); } $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 @@ -823,7 +823,7 @@ class ImService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { // 获取服务包当月已问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); } // 检测问诊是否服务包首次问诊 @@ -913,7 +913,7 @@ class ImService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { // 获取服务包当月已问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); } $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 @@ -995,7 +995,7 @@ class ImService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { // 获取服务包当月已问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); } $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 @@ -1073,7 +1073,7 @@ class ImService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { // 获取服务包当月已问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); } $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 @@ -1159,7 +1159,7 @@ class ImService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { // 获取服务包当月已问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); } $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 @@ -1311,7 +1311,7 @@ class ImService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { // 获取服务包当月已问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); } $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 @@ -1395,7 +1395,7 @@ class ImService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { // 获取服务包当月已问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); } $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 @@ -1480,7 +1480,7 @@ class ImService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { // 获取服务包当月已问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); } $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 3a8923f..ad10b1e 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -1541,7 +1541,7 @@ class InquiryService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { // 获取服务包当月已问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); } // 处理剩余服务天数 diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index 9e53993..aedc4a3 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -3272,7 +3272,7 @@ class MessagePush extends BaseService // 获取服务包当月已问诊次数 if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($this->order_service_package['start_time'])) { $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($this->order_service_package['start_time'],$this->order_service_package['order_service_type'],$this->order_service_package['user_id'], $this->order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($this->order_service_package['pay_time'],$this->order_service_package['order_service_type'],$this->order_service_package['user_id'], $this->order_service_package['doctor_id']); $remaining_inquiry_count = $order_service_package_detail['monthly_frequencys'] - $month_inquiry_count; if ($remaining_inquiry_count < 0){ $remaining_inquiry_count = 0; diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 05802b5..fa74098 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -173,7 +173,7 @@ class OrderServicePackageService extends BaseService // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 if ($order_service_package_detail['monthly_frequency'] != 0) { // 获取服务包当月已问诊次数 - $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['start_time'],$service_type,$user_info['client_user_id'], $doctor_id); + $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['pay_time'],$service_type,$user_info['client_user_id'], $doctor_id); if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']) { // 超出当月问诊次数 @@ -696,7 +696,7 @@ class OrderServicePackageService extends BaseService // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 if ($order_service_package_detail['monthly_frequency'] != 0) { // 获取服务包当月已问诊次数 - $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['start_time'],$order_service_package['order_service_type'],$user_info['client_user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$user_info['client_user_id'], $order_service_package['doctor_id']); if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']) { return fail(HttpEnumCode::HTTP_ERROR, "超出服务包所包含的当月问诊次数"); @@ -1106,7 +1106,7 @@ class OrderServicePackageService extends BaseService // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 if ($order_service_package_detail['monthly_frequency'] != 0) { // 获取服务包当月已问诊次数 - $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['start_time'],$order_service_package['order_service_type'],$user_info['client_user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$user_info['client_user_id'], $order_service_package['doctor_id']); if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']) { // 超出当月问诊次数 diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index ad59b30..b2afcf1 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -3064,7 +3064,7 @@ class PatientOrderService extends BaseService $result['order_service_package']['current_month_finish_date'] = $current_month_date['current_month_finish_date']; // 获取服务包当月已问诊次数 - $result['order_service_package']['month_inquiry_count'] = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'],$order_service_package['order_service_type'],$user_info['client_user_id'], $order_service_package['doctor_id']); + $result['order_service_package']['month_inquiry_count'] = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$user_info['client_user_id'], $order_service_package['doctor_id']); } } From ce47eda1f40feb78f2d4fe6620ca48dd97e997fa Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 23 Apr 2024 16:51:59 +0800 Subject: [PATCH 138/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=82=A3=E8=80=85?= =?UTF-8?q?=E5=9C=A8=E6=9F=90=E4=B8=80=E6=97=B6=E9=97=B4=E6=AE=B5=E7=9A=84?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95?= =?UTF-8?q?-=E5=88=9B=E5=BB=BA=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/InquiryService.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index ad10b1e..171cc7e 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -2185,13 +2185,13 @@ class InquiryService extends BaseService /** * 获取患者在某一时间段的服务包问诊订单-创建时间 * @param string|int $order_service_type 服务包类型(1:健康包 2:随访包) - * @param string $patient_id + * @param string $user_id * @param string $doctor_id * @param string $start_date * @param string $end_date * @return array */ - public function getPatientServiceInquiry(string|int $order_service_type, string $patient_id, string $doctor_id, string $start_date, string $end_date): array + public function getPatientServiceInquiry(string|int $order_service_type, string $user_id, string $doctor_id, string $start_date, string $end_date): array { if ($order_service_type == 1) { $inquiry_type = 1; @@ -2203,7 +2203,7 @@ class InquiryService extends BaseService // 获取医生当日接诊订单金额 $params = array(); - $params['patient_id'] = $patient_id; + $params['user_id'] = $user_id; $params['doctor_id'] = $doctor_id; $params['inquiry_type'] = $inquiry_type; $params['inquiry_mode'] = $inquiry_mode; From ed3909679006c97475f7064c0d0d190411f9e7f5 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 23 Apr 2024 17:38:02 +0800 Subject: [PATCH 139/274] 1 --- app/Services/PatientOrderService.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index b2afcf1..13dd489 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -3002,6 +3002,7 @@ class PatientOrderService extends BaseService "family_id", "doctor_id", "user_id", + "pay_time", ]; $params = array(); From 955b24a2051cb8d761b9a6585aac9a4fc6fb25d2 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 24 Apr 2024 09:44:49 +0800 Subject: [PATCH 140/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E5=86=85=E6=9F=90=E4=B8=80=E8=8D=AF?= =?UTF-8?q?=E5=93=81=E7=9A=84=E5=89=A9=E4=BD=99=E6=95=B0=E9=87=8F=E8=AE=A1?= =?UTF-8?q?=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/TestController.php | 5 ++ app/Model/OrderServicePackageProduct.php | 24 ++++-- app/Services/ImService.php | 26 +++--- app/Services/InquiryService.php | 16 ++-- app/Services/MessagePush.php | 37 +++++---- app/Services/OrderProductService.php | 22 ++++++ app/Services/OrderServicePackageService.php | 87 ++++++++++++++++++--- app/Services/PatientOrderService.php | 52 ++++++++++-- config/routes.php | 2 +- 9 files changed, 205 insertions(+), 66 deletions(-) diff --git a/app/Controller/TestController.php b/app/Controller/TestController.php index 0091bc6..972ff72 100644 --- a/app/Controller/TestController.php +++ b/app/Controller/TestController.php @@ -480,4 +480,9 @@ class TestController extends AbstractController } } + + // 退款 + public function refund(){ + + } } \ No newline at end of file diff --git a/app/Model/OrderServicePackageProduct.php b/app/Model/OrderServicePackageProduct.php index acc979d..7fcf41e 100644 --- a/app/Model/OrderServicePackageProduct.php +++ b/app/Model/OrderServicePackageProduct.php @@ -13,13 +13,13 @@ use Hyperf\Snowflake\Concern\Snowflake; /** * @property int $service_product_id 主键id * @property int $order_service_id 订单-服务包id + * @property int $order_product_id 订单-商品id + * @property string $order_product_no 订单-商品系统编号 + * @property int $product_item_id 订单-商品明细id * @property int $product_id 商品id - * @property string $product_name 商品名称 - * @property int $quantity 商品数量 - * @property int $used_quantity 已使用数量 - * @property string $discount_product_price 折扣商品价格 - * @property \Carbon\Carbon $created_at 创建时间 - * @property \Carbon\Carbon $updated_at 修改时间 + * @property int $used_quantity 订单使用数量 + * @property Carbon $created_at 创建时间 + * @property Carbon $updated_at 修改时间 */ class OrderServicePackageProduct extends Model { @@ -33,7 +33,7 @@ class OrderServicePackageProduct extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['service_product_id', 'order_service_id', 'product_id', 'product_name', 'quantity', 'used_quantity', 'discount_product_price', 'created_at', 'updated_at']; + protected array $fillable = ['service_product_id', 'order_service_id', 'order_product_id', 'order_product_no', 'product_item_id', 'product_id', 'used_quantity', 'created_at', 'updated_at']; protected string $primaryKey = "service_product_id"; @@ -79,4 +79,14 @@ class OrderServicePackageProduct extends Model { return self::where($params)->update($data); } + + /** + * 删除 + * @param array $params + * @return int|mixed + */ + public static function deleteOrderServicePackageProduct(array $params): mixed + { + return self::where($params)->delete(); + } } diff --git a/app/Services/ImService.php b/app/Services/ImService.php index 2119b87..b0c6057 100644 --- a/app/Services/ImService.php +++ b/app/Services/ImService.php @@ -537,22 +537,20 @@ class ImService extends BaseService }else{ // 健康包 if ($order_inquiry['inquiry_mode'] == 8){ - // 检测患者服务包内是否还存在剩余药品 - $res = $OrderServicePackageService->checkOrderServiceRemainingProduct($order_service_no); - if ($res){ - // 获取剩余药品数量 + // 获取服务包内药品 + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_products = OrderServicePackageProduct::getList($params); + if (!empty($order_service_package_products)){ $remaining_quantity = 0; + foreach ($order_service_package_products as $order_service_package_product){ + // 获取服务包内某一药品的总数量 + $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_product['product_id']); - // 健康包商品数据 - $params = array(); - $params['order_service_id'] = $order_service_package['order_service_id']; - $order_service_package_products = OrderServicePackageProduct::getList($params); - if (!empty($order_service_package_products)){ - foreach ($order_service_package_products as $order_service_package_product){ - $remaining_quantity += $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; - if ($remaining_quantity < 0){ - $remaining_quantity = 0; - } + // 获取服务包内某一药品的剩余数量 + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$order_service_package_product['product_id'],$total_quantity); + if ($remaining_quantity > 0){ + break; } } diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 171cc7e..a657d3c 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -1553,16 +1553,18 @@ class InquiryService extends BaseService // 获取剩余药品数量 $remaining_quantity = 0; if ($order_service_package['order_service_type'] == 1) { - // 健康包商品数据 + $OrderServicePackageService = new OrderServicePackageService(); + $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; $order_service_package_products = OrderServicePackageProduct::getList($params); - if (!empty($order_service_package_products)) { - foreach ($order_service_package_products as $order_service_package_product) { - $remaining_quantity += $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; - if ($remaining_quantity < 0) { - $remaining_quantity = 0; - } + if (!empty($order_service_package_products)){ + foreach ($order_service_package_products as $order_service_package_product){ + // 获取服务包内某一药品的总数量 + $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_product['product_id']); + + // 获取服务包内某一药品的剩余数量 + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$order_service_package_product['product_id'],$total_quantity); } } } diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index aedc4a3..f92dac7 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -3284,16 +3284,18 @@ class MessagePush extends BaseService // 获取剩余药品数量 $remaining_quantity = 0; if ($this->order_service_package['order_service_type'] == 1){ - // 健康包商品数据 + $OrderServicePackageService = new OrderServicePackageService(); + $params = array(); $params['order_service_id'] = $this->order_service_package['order_service_id']; $order_service_package_products = OrderServicePackageProduct::getList($params); if (!empty($order_service_package_products)){ foreach ($order_service_package_products as $order_service_package_product){ - $remaining_quantity += $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; - if ($remaining_quantity < 0){ - $remaining_quantity = 0; - } + // 获取服务包内某一药品的总数量 + $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_product['product_id']); + + // 获取服务包内某一药品的剩余数量 + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($this->order_service_package['order_service_id'],$order_service_package_product['product_id'],$total_quantity); } } } @@ -3479,19 +3481,22 @@ class MessagePush extends BaseService return; } + $OrderServicePackageService = new OrderServicePackageService(); + // 获取剩余药品数量 $remaining_quantity = 0; - if ($this->order_service_package['order_service_type'] == 1){ - // 健康包商品数据 - $params = array(); - $params['order_service_id'] = $this->order_service_package['order_service_id']; - $order_service_package_products = OrderServicePackageProduct::getList($params); - if (!empty($order_service_package_products)){ - foreach ($order_service_package_products as $order_service_package_product){ - $remaining_quantity += $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; - if ($remaining_quantity < 0){ - $remaining_quantity = 0; - } + $params = array(); + $params['order_service_id'] = $this->order_service_package['order_service_id']; + $order_service_package_products = OrderServicePackageProduct::getList($params); + if (!empty($order_service_package_products)){ + foreach ($order_service_package_products as $order_service_package_product){ + // 获取服务包内某一药品的总数量 + $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_product['product_id']); + + // 获取服务包内某一药品的剩余数量 + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($this->order_service_package['order_service_id'],$order_service_package_product['product_id'],$total_quantity); + if ($remaining_quantity > 0){ + break; } } } diff --git a/app/Services/OrderProductService.php b/app/Services/OrderProductService.php index 6362607..2a33267 100644 --- a/app/Services/OrderProductService.php +++ b/app/Services/OrderProductService.php @@ -4,6 +4,7 @@ namespace App\Services; use App\Constants\HttpEnumCode; use App\Exception\BusinessException; +use App\Model\OrderInquiry; use App\Model\OrderInquiryCoupon; use App\Model\OrderInquiryRefund; use App\Model\OrderPrescription; @@ -12,6 +13,8 @@ use App\Model\OrderProduct; use App\Model\OrderProductCoupon; use App\Model\OrderProductItem; use App\Model\OrderProductRefund; +use App\Model\OrderServicePackageInquiry; +use App\Model\OrderServicePackageProduct; use App\Model\Product; use App\Model\ProductPlatformAmount; use App\Model\UserPatient; @@ -100,6 +103,16 @@ class OrderProductService extends BaseService return $result; } + // 获取问诊订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_product['order_inquiry_id']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)){ + $result['status'] = 0; + $result['message'] = "未查询到对应订单数据"; + return $result; + } + // 取消药品订单 $data = array(); $data['order_product_status'] = 5; @@ -151,6 +164,15 @@ class OrderProductService extends BaseService $params = array(); $params['amount_id'] = $product_platform_amount['amount_id']; ProductPlatformAmount::inc($params, 'stock', (float)$item['amount']); + + // 回退服务包已使用药品数量 + if ($order_inquiry['inquiry_type'] == 1 && $order_inquiry['inquiry_mode'] == 8){ + $params = array(); + $params['order_product_id'] = $item['order_product_id']; + $params['product_item_id'] = $item['product_item_id']; + $params['product_id'] = $item['product_id']; + OrderServicePackageProduct::deleteOrderServicePackageProduct($params); + } } // 获取处方数据 diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index fa74098..8513231 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1271,24 +1271,62 @@ class OrderServicePackageService extends BaseService } /** - * 获取服务包内某一药品的剩余数量 - * @param string|int $order_service_id + * 获取服务包内某一药品的总数量 * @param string|int $product_id * @return int */ - public function getOrderServiceProductRemainingQuantity(string|int $order_service_id,string|int $product_id): int + public function getOrderServiceProductTotalQuantity(string|int $product_id): int + { + $total_quantity = 0; + + // 获取健康包内容 + $params = array(); + $health_package = HealthPackage::getOne($params); + if (empty($health_package)){ + return $total_quantity; + } + + $params = array(); + $params['package_id'] = $health_package['package_id']; + $params['product_id'] = $product_id; + $health_package_product = HealthPackage::getOne($params); + if (empty($health_package_product)){ + return $total_quantity; + } + + return $health_package_product['quantity']; + } + + /** + * 获取服务包内某一药品的可使用数量 + * @param string|int $order_service_id + * @param string|int $product_id + * @param string|int $total_quantity + * @return int + */ + public function getOrderServiceProductCanUseQuantity(string|int $order_service_id,string|int $product_id,string|int $total_quantity): int { $remaining_quantity = 0; $params = array(); $params['order_service_id'] = $order_service_id; $params['product_id'] = $product_id; - $order_service_package_product = OrderServicePackageProduct::getOne($params); - if (!empty($order_service_package_product)){ - $remaining_quantity = $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; - if ($remaining_quantity < 0){ - $remaining_quantity = 0; - } + $order_service_package_products = OrderServicePackageProduct::getList($params); + if (empty($order_service_package_products)){ + return $remaining_quantity; + } + + // 订单使用数量 + $used_quantity = 0; + foreach ($order_service_package_products as $order_service_package_product){ + $used_quantity = $used_quantity + $order_service_package_product['used_quantity']; + } + + // 剩余数量 = 总数量-使用数量 + $remaining_quantity = $total_quantity - $used_quantity; + + if ($remaining_quantity < 0){ + $remaining_quantity = 0; } return $remaining_quantity; @@ -1339,6 +1377,13 @@ class OrderServicePackageService extends BaseService */ public function checkOrderServiceRemainingProduct(string|int $order_no): bool { + // 获取健康包内容 + $params = array(); + $health_package = HealthPackage::getOne($params); + if (empty($health_package)){ + return false; + } + // 获取服务包关联商品 $params = array(); $params['order_service_no'] = $order_no; @@ -1348,10 +1393,26 @@ class OrderServicePackageService extends BaseService } $params = array(); - $params['order_service_id'] = $order_service_package['order_service_id']; - $order_service_package_products = OrderServicePackageProduct::getList($params); - foreach ($order_service_package_products as $order_service_package_product){ - $remaining_quantity = $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; + $params['package_id'] = $health_package['package_id']; + $health_package_products = HealthPackage::getList($params); + if (empty($health_package_products)){ + return false; + } + + foreach ($health_package_products as $health_package_product){ + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $params['product_id'] = $health_package_product['product_id']; + $order_service_package_products = OrderServicePackageProduct::getList($params); + + $used_quantity = 0; + foreach ($order_service_package_products as $order_service_package_product){ + $used_quantity = $used_quantity + $order_service_package_product['used_quantity']; + } + + $remaining_quantity = $health_package_product['quantity'] - $used_quantity; + + // 存在一个可使用商品数量即返回 if ($remaining_quantity > 0){ return true; } diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 13dd489..c343ff8 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1487,7 +1487,7 @@ class PatientOrderService extends BaseService return fail(); } - // 处理健康包赠送商品 + // 处理健康包赠送商品-金额、数量 if ($order_inquiry['inquiry_type'] == 1 && $order_inquiry['inquiry_mode'] == 8){ // 获取问诊订单关联服务包id $params = array(); @@ -1503,12 +1503,22 @@ class PatientOrderService extends BaseService $amount_total = 0; foreach ($product_datas as &$product_data){ - // 获取服务包内某一药品的剩余数量 - $remaining_quantity = $OrderServicePackageService->getOrderServiceProductRemainingQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id']); + // 获取服务包内某一药品的总数量 + $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($product_data['product_id']); - // 可用数量大于处方商品数量,此情况把商品价格置为0 + // 获取服务包内某一药品的剩余数量 + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id'],$total_quantity); + + // 可用数量大于处方商品数量 if ($remaining_quantity >= $product_data['product_num']){ + // 把商品价格置为0。金额按照0计算 $product_data['product_price'] = 0; + + // 已使用数量 = 原数量+此次使用数量 + $product_data['used_quantity'] = $product_data['product_num']; + }else{ + // 已使用数量 = 最大可用数量;表示此服务包商品已使用完毕 + $product_data['used_quantity'] = $remaining_quantity; } // 此处重新计算药品总金额 @@ -1674,6 +1684,28 @@ class PatientOrderService extends BaseService $params = array(); $params['amount_id'] = $product_platform_amount['amount_id']; ProductPlatformAmount::dec($params, 'stock', $product_data['product_num']); + + // 处理健康包数据,增加使用数量 + if ($order_inquiry['inquiry_type'] == 1 && $order_inquiry['inquiry_mode'] == 8){ + // 获取问诊订单关联服务包id + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); + if (empty($order_service_package_inquiry)){ + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + } + + $data = array(); + $data['order_service_id'] = $order_service_package_inquiry['order_service_id']; + $data['order_product_id'] = $order_product['order_product_id']; + $data['order_product_no'] = $order_product['order_product_no']; + $data['product_item_id'] = $order_product_item['product_item_id']; + $data['product_id'] = $product_data['product_id']; + $data['used_quantity'] = $product_data['used_quantity']; + + OrderServicePackageProduct::addOrderServicePackageProduct($data); + } } // 修改处方为已使用 @@ -2009,16 +2041,20 @@ class PatientOrderService extends BaseService } // 此处不检测未支付的商品订单,在创建订单时会进行数量的扣减 - // 处理商品数量 + // 处理商品数量、金额 $OrderServicePackageService = new OrderServicePackageService(); $amount_total = 0; foreach ($product_datas as &$product_data){ - // 获取服务包内某一药品的剩余数量 - $remaining_quantity = $OrderServicePackageService->getOrderServiceProductRemainingQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id']); + // 获取服务包内某一药品的总数量 + $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($product_data['product_id']); - // 可用数量大于处方商品数量,此情况把商品价格置为0 + // 获取服务包内某一药品的剩余数量 + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id'],$total_quantity); + + // 可用数量大于处方商品数量 if ($remaining_quantity >= $product_data['product_num']){ + // 把商品价格置为0。金额按照0计算 $product_data['product_price'] = 0; } diff --git a/config/routes.php b/config/routes.php index d9ba7f0..a2cf5c1 100644 --- a/config/routes.php +++ b/config/routes.php @@ -897,7 +897,7 @@ Router::addGroup('/test', function () { // // Router::get('/uninquiry', [TestController::class, 'uninquiry']); // 模拟退款 -// Router::get('/refund', [TestController::class, 'refund']); + Router::get('/refund', [TestController::class, 'refund']); }); From 43152742d5a991d201a6bfd0ca03bca5edc446ed Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 24 Apr 2024 13:14:52 +0800 Subject: [PATCH 141/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E5=8D=B7=E8=BF=87=E6=9C=9F=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php b/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php index 5de7b84..67c0e06 100644 --- a/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php +++ b/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php @@ -42,7 +42,6 @@ class UserCouponExpiredDelayDirectConsumer extends ConsumerMessage { Log::getInstance("queue-UserCouponExpired")->info("开始:" . json_encode($data, JSON_UNESCAPED_UNICODE)); - return Result::DROP; // 检测参数 if (!isset($data['user_coupon_id'])){ Log::getInstance("queue-UserCouponExpired")->error("入参错误"); @@ -78,6 +77,11 @@ class UserCouponExpiredDelayDirectConsumer extends ConsumerMessage // 先删除-重新添加队列 if ($valid_end_time > time()){ $time = $valid_end_time - time(); + Log::getInstance("queue-UserCouponExpired")->info($time); + + if ($time < 60 * 60 * 24){ + $time = 60 * 60 * 24; + } $queue_data = array(); $queue_data['user_coupon_id'] = $user_coupon['user_coupon_id']; From 4d5547f532a00433e5cb0fa207a6395293466196 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 24 Apr 2024 13:21:02 +0800 Subject: [PATCH 142/274] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2=E5=8D=95=E6=97=B6=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=85=B3=E8=81=94=E5=95=86=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 35 --------------------- 1 file changed, 35 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 8513231..ea08a07 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -515,41 +515,6 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } - // 处理健康包数据 - if ($request_params['service_type'] == 1){ - // 获取医生健康包配置 - $params = array(); - $health_package = HealthPackage::getOne($params); - if (empty($health_package)){ - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); - } - - // 获取医生健康包关联商品 - $params = array(); - $params['package_id'] = $health_package['package_id']; - $health_package_products = HealthPackageProduct::getList($params); - if (empty($health_package_products)){ - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); - } - - // 增加健康包订单关联商品 - foreach ($health_package_products as $health_package_product){ - $data = array(); - $data['order_service_id'] = $order_service_package['order_service_id']; - $data['product_id'] = $health_package_product['product_id']; - $data['product_name'] = $health_package_product['product_name']; - $data['quantity'] = $health_package_product['quantity']; - $data['discount_product_price'] = $health_package_product['discount_product_price']; - $order_service_package_product = OrderServicePackageProduct::addOrderServicePackageProduct($data); - if (empty($order_service_package_product)){ - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); - } - } - } - // 增加患者服务包病例 $data = array(); $data['user_id'] = $user_info['user_id']; From 7f20643bcd2fb7d14329bd04be3982389372190f Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 24 Apr 2024 14:10:08 +0800 Subject: [PATCH 143/274] 1 --- app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php b/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php index 67c0e06..dd991e0 100644 --- a/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php +++ b/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php @@ -42,6 +42,8 @@ class UserCouponExpiredDelayDirectConsumer extends ConsumerMessage { Log::getInstance("queue-UserCouponExpired")->info("开始:" . json_encode($data, JSON_UNESCAPED_UNICODE)); + return Result::DROP; + // 检测参数 if (!isset($data['user_coupon_id'])){ Log::getInstance("queue-UserCouponExpired")->error("入参错误"); From 8573354f343018f5c9190302e6a4489a59b9654e Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 24 Apr 2024 14:19:26 +0800 Subject: [PATCH 144/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/CallBackController.php | 1 + app/Services/OrderServicePackageService.php | 1 + 2 files changed, 2 insertions(+) diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index 397d53e..b527ada 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -2587,6 +2587,7 @@ class CallBackController extends AbstractController // 创建问诊订单 $data = array(); + $data['order_id'] = $order['order_id']; $data['user_id'] = $order_service_package['user_id']; $data['patient_id'] = $order_service_package['patient_id']; $data['doctor_id'] = $order_service_package['doctor_id']; diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index ea08a07..a493e09 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -750,6 +750,7 @@ class OrderServicePackageService extends BaseService // 新增问诊订单 $data = array(); + $data['order_id'] = $order['order_id']; $data['user_id'] = $order_service_package['user_id']; $data['patient_id'] = $order_service_package['patient_id']; $data['doctor_id'] = $order_service_package['doctor_id']; From 695fe7c55be3a3a6dfdf88231592a45c6ce12ac1 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 24 Apr 2024 14:30:14 +0800 Subject: [PATCH 145/274] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DetectionCompleteDelayDirectConsumer.php | 26 +++++++++++++++++-- app/Controller/CallBackController.php | 24 +++++++++++++++-- app/Services/DetectionService.php | 8 +++--- app/Services/InquiryService.php | 24 +++++++++++++++-- 4 files changed, 73 insertions(+), 9 deletions(-) diff --git a/app/Amqp/Consumer/DetectionCompleteDelayDirectConsumer.php b/app/Amqp/Consumer/DetectionCompleteDelayDirectConsumer.php index f3f9529..d381af2 100644 --- a/app/Amqp/Consumer/DetectionCompleteDelayDirectConsumer.php +++ b/app/Amqp/Consumer/DetectionCompleteDelayDirectConsumer.php @@ -8,6 +8,7 @@ use App\Amqp\Producer\AutoCompleteInquiryDelayDirectProducer; use App\Amqp\Producer\DetectionCompleteDelayDirectProducer; use App\Exception\BusinessException; use App\Model\DetectionProject; +use App\Model\Order; use App\Model\OrderDetection; use App\Model\OrderDetectionCase; use App\Model\OrderInquiry; @@ -150,8 +151,29 @@ class DetectionCompleteDelayDirectConsumer extends ConsumerMessage try { $generator = $this->container->get(IdGeneratorInterface::class); + // 生成订单表 + $data = array(); + $data['user_id'] = $order_detection['user_id']; + $data['patient_id'] = $order_detection['patient_id']; + $data['doctor_id'] = $order_detection['doctor_id']; + $data['order_type'] = 1; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) + $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付) + $data['pay_status'] = 2; // 1:待支付 + $data['order_no'] = "I" . $generator->generate(); // 订单编号 + $data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号 + $data['amount_total'] = 0; // 订单金额 + $data['coupon_amount_total'] = 0; // 优惠卷总金额 + $data['payment_amount_total'] = 0; // 实际付款金额 + $order = Order::addOrder($data); + if (empty($order)) { + Db::rollBack(); + Log::getInstance("queue-DetectionComplete")->error("问诊订单创建失败"); + return Result::DROP; + } + // 创建问诊订单 $data = array(); + $data['order_id'] = $order['order_id']; $data['user_id'] = $order_detection['user_id']; $data['patient_id'] = $order_detection['patient_id']; $data['doctor_id'] = $order_detection['doctor_id']; @@ -161,8 +183,8 @@ class DetectionCompleteDelayDirectConsumer extends ConsumerMessage $data['inquiry_status'] = 4; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) $data['inquiry_pay_status'] = 2; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - $data['inquiry_no'] = $generator->generate();// 订单编号 - $data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号 + $data['inquiry_no'] = $order['order_no'];// 订单编号 + $data['escrow_trade_no'] = $order['escrow_trade_no']; // 第三方支付流水号 $data['amount_total'] = 0;// 订单金额 $data['coupon_amount_total'] = 0;// 优惠卷总金额 $data['payment_amount_total'] = 0;// 实际付款金额 diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index b527ada..3522ee1 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -1514,8 +1514,28 @@ class CallBackController extends AbstractController try { $generator = $this->container->get(IdGeneratorInterface::class); + // 生成订单表 + $data = array(); + $data['user_id'] = $order_detection['user_id']; + $data['patient_id'] = $order_detection['patient_id']; + $data['doctor_id'] = $order_detection['doctor_id']; + $data['order_type'] = 1; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) + $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付) + $data['pay_status'] = 2; // 1:待支付 + $data['order_no'] = "I" . $generator->generate(); // 订单编号 + $data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号 + $data['amount_total'] = 0; // 订单金额 + $data['coupon_amount_total'] = 0; // 优惠卷总金额 + $data['payment_amount_total'] = 0; // 实际付款金额 + $order = Order::addOrder($data); + if (empty($order)) { + Db::rollBack(); + return $this->detectionResultFailReturn("问诊订单创建失败"); + } + // 创建问诊订单 $data = array(); + $data['order_id'] = $order['order_id']; $data['user_id'] = $order_detection['user_id']; $data['patient_id'] = $order_detection['patient_id']; $data['doctor_id'] = $order_detection['doctor_id']; @@ -1525,8 +1545,8 @@ class CallBackController extends AbstractController $data['inquiry_status'] = 4; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) $data['inquiry_pay_status'] = 2; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - $data['inquiry_no'] = $generator->generate();// 订单编号 - $data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号 + $data['inquiry_no'] = $order['order_no'];// 订单编号 + $data['escrow_trade_no'] = $order['escrow_trade_no']; // 第三方支付流水号 $data['amount_total'] = 0;// 订单金额 $data['coupon_amount_total'] = 0;// 优惠卷总金额 $data['payment_amount_total'] = 0;// 实际付款金额 diff --git a/app/Services/DetectionService.php b/app/Services/DetectionService.php index d102e29..dafa1b6 100644 --- a/app/Services/DetectionService.php +++ b/app/Services/DetectionService.php @@ -672,23 +672,25 @@ class DetectionService extends BaseService // 生成订单表 $data = array(); $data['user_id'] = $order_detection['user_id']; - $data['patient_id'] = $order_detection['client_user_id']; + $data['patient_id'] = $order_detection['patient_id']; $data['doctor_id'] = $order_detection['doctor_id']; $data['order_type'] = 1; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付) $data['pay_status'] = 2; // 1:待支付 $data['order_no'] = "I" . $generator->generate(); // 订单编号 + $data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号 $data['amount_total'] = 0; // 订单金额 $data['coupon_amount_total'] = 0; // 优惠卷总金额 $data['payment_amount_total'] = 0; // 实际付款金额 $order = Order::addOrder($data); if (empty($order)) { Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + return fail(); } // 创建问诊订单 $data = array(); + $data['order_id'] = $order['order_id']; $data['user_id'] = $order_detection['user_id']; $data['patient_id'] = $order_detection['patient_id']; $data['doctor_id'] = $order_detection['doctor_id']; @@ -699,7 +701,7 @@ class DetectionService extends BaseService $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) $data['inquiry_pay_status'] = 2; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) $data['inquiry_no'] = $order['order_no'];// 订单编号 - $data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号 + $data['escrow_trade_no'] = $order['escrow_trade_no']; // 第三方支付流水号 $data['amount_total'] = 0;// 订单金额 $data['coupon_amount_total'] = 0;// 优惠卷总金额 $data['payment_amount_total'] = 0;// 实际付款金额 diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index a657d3c..04a01d4 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -1325,8 +1325,28 @@ class InquiryService extends BaseService $generator = $this->container->get(IdGeneratorInterface::class); try { + // 生成订单表 + $data = array(); + $data['user_id'] = $order_inquiry['user_id']; + $data['patient_id'] = $order_inquiry['patient_id']; + $data['doctor_id'] = $order_inquiry['doctor_id']; + $data['order_type'] = 1; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单) + $data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付) + $data['pay_status'] = 2; // 1:待支付 + $data['order_no'] = "I" . $generator->generate(); // 订单编号 + $data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号 + $data['amount_total'] = 0; // 订单金额 + $data['coupon_amount_total'] = 0; // 优惠卷总金额 + $data['payment_amount_total'] = 0; // 实际付款金额 + $order = Order::addOrder($data); + if (empty($order)) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "赠送失败"); + } + // 生成问诊订单 $data = array(); + $data['order_id'] = $order['order_id']; $data['user_id'] = $order_inquiry['user_id']; $data['patient_id'] = $order_inquiry['patient_id']; $data['doctor_id'] = $order_inquiry['doctor_id']; @@ -1336,8 +1356,8 @@ class InquiryService extends BaseService $data['inquiry_status'] = 4; $data['inquiry_pay_channel'] = 3;// 支付渠道(1:小程序支付 2:微信扫码支付) $data['inquiry_pay_status'] = 2; - $data['inquiry_no'] = $generator->generate();// 订单编号 - $data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号 + $data['inquiry_no'] = $order['order_no'];// 订单编号 + $data['escrow_trade_no'] = $order['escrow_trade_no']; // 第三方支付流水号 $data['amount_total'] = 0;// 订单金额 $data['coupon_amount_total'] = 0;// 优惠卷总金额 $data['payment_amount_total'] = 0;// 实际付款金额 From f7b84e2da4be50982747d7937b0dc56ac9ff2c57 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 24 Apr 2024 14:44:10 +0800 Subject: [PATCH 146/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E5=85=B3=E8=81=94=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=B6=88=E6=81=AF=E5=86=85=E9=A1=B5=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/InquiryService.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 04a01d4..5e26f9f 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -1590,10 +1590,18 @@ class InquiryService extends BaseService } $result = array(); - $result['finish_time'] = $finish_day; // 剩余服务天数 + $result['remaining_finish_day'] = $finish_day; // 剩余服务天数 $result['month_inquiry_count'] = $month_inquiry_count; // 服务包当月已问诊次数 $result['monthly_frequency'] = $order_service_package_detail['monthly_frequency']; // 每月次数(0表示不限次) $result['remaining_quantity'] = $remaining_quantity; // 剩余药品数量 + if (!empty($order_service_package['start_time'])){ + $result['start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 + } + if (!empty($order_service_package['finish_time'])){ + $result['finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 + } + $result['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 + $result['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 return success($result); } From fc2af73274dce1f1d4f731204a26c417c0bc4bf9 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 24 Apr 2024 15:01:16 +0800 Subject: [PATCH 147/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E5=85=B3=E8=81=94=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=B6=88=E6=81=AF=E5=86=85=E9=A1=B5=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E6=95=B0=E6=8D=AE1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 31 +++++++--------------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index c343ff8..2c326a0 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -3106,8 +3106,9 @@ class PatientOrderService extends BaseService } // 获取服务包当月已问诊次数 - if ($order_service_package['order_service_status'] == 2){ - $result['order_service_package']['month_inquiry_count'] = 1; + if (!empty($order_service_package['pay_time'])){ + $OrderServicePackageService = new OrderServicePackageService(); + $result['order_service_package_detail']['month_inquiry_count'] = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); } // 健康包数据 @@ -3145,27 +3146,11 @@ class PatientOrderService extends BaseService $result['order_product'] = $order_products->toArray(); } -// // 已使用商品数量 -// $used_quantity = 0; -// foreach ($order_products as $order_product){ -// // 获取详情item -// $params = array(); -// $params['order_product_id'] = $order_product['order_product_id']; -// $order_product_items = OrderProductItem::getList($params); -// if (empty($order_product_items)){ -// return fail(HttpEnumCode::SERVER_ERROR); -// } -// -// foreach ($order_product_items as $order_product_item){ -// $used_quantity = $order_product_item["amount"]; -// } -// } -// -// if ($used_quantity > 30){ -// $used_quantity = 30; -// } -// -// $result['order_service_package_product'][0]['remaining_quantity'] = $used_quantity; + // 获取服务包内某一药品的总数量 + $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_product['product_id']); + + // 获取服务包内某一药品的剩余数量 + $result['order_service_package_detail']['remaining_quantity'] = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$order_service_package_product['product_id'],$total_quantity); } } From 9d8eade3753dca0810cd5e10d30b90f095dd9509 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 24 Apr 2024 15:16:34 +0800 Subject: [PATCH 148/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E5=85=B3=E8=81=94=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=B6=88=E6=81=AF=E5=86=85=E9=A1=B5=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E6=95=B0=E6=8D=AE2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 2c326a0..4b5f2f8 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -3116,9 +3116,9 @@ class PatientOrderService extends BaseService // 健康包商品数据 $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; - $order_service_package_product = OrderServicePackageProduct::getList($params); - if (!empty($order_service_package_product)){ - $result['order_service_package_product'] = $order_service_package_product->toArray(); + $order_service_package_products = OrderServicePackageProduct::getList($params); + if (!empty($order_service_package_products)){ + $result['order_service_package_product'] = $order_service_package_products->toArray(); } // 健康包关联优惠卷数据 @@ -3146,11 +3146,15 @@ class PatientOrderService extends BaseService $result['order_product'] = $order_products->toArray(); } - // 获取服务包内某一药品的总数量 - $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_product['product_id']); + if (!empty($order_service_package_products)) { + foreach ($order_service_package_products as $order_service_package_product) { + // 获取服务包内某一药品的总数量 + $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_product['product_id']); - // 获取服务包内某一药品的剩余数量 - $result['order_service_package_detail']['remaining_quantity'] = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$order_service_package_product['product_id'],$total_quantity); + // 获取服务包内某一药品的剩余数量 + $result['order_service_package_detail']['remaining_quantity'] = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$order_service_package_product['product_id'],$total_quantity); + } + } } } From 3b427b34de89e16403bb5657abc5a6d9c9386eac Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 24 Apr 2024 16:04:09 +0800 Subject: [PATCH 149/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E5=85=B3=E8=81=94=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=B6=88=E6=81=AF=E5=86=85=E9=A1=B5=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E6=95=B0=E6=8D=AE3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/OrderServicePackageDetail.php | 7 ++++--- app/Services/OrderServicePackageService.php | 20 ++++++++++++++++++++ app/Services/PatientOrderService.php | 21 ++++++++++----------- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/app/Model/OrderServicePackageDetail.php b/app/Model/OrderServicePackageDetail.php index 3a43bfd..eba323e 100644 --- a/app/Model/OrderServicePackageDetail.php +++ b/app/Model/OrderServicePackageDetail.php @@ -14,14 +14,15 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $order_service_detail_id 主键id * @property int $order_service_id 服务包订单id * @property int $order_id 订单id + * @property int $package_id 健康包配置id(随访包时为空) * @property string $order_service_no 系统订单编号 * @property int $service_period 服务周期(天) * @property int $service_count 总服务次数(0表示不限次) * @property int $monthly_frequency 每月次数(0表示不限次) * @property string $single_inquiry_price 单次图文问诊价格 * @property string $service_price 总服务价格 - * @property Carbon $created_at 创建时间 - * @property Carbon $updated_at 修改时间 + * @property \Carbon\Carbon $created_at 创建时间 + * @property \Carbon\Carbon $updated_at 修改时间 */ class OrderServicePackageDetail extends Model { @@ -35,7 +36,7 @@ class OrderServicePackageDetail extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['order_service_detail_id', 'order_service_id', 'order_id', 'order_service_no', 'service_period', 'service_count', 'monthly_frequency', 'single_inquiry_price', 'service_price', 'created_at', 'updated_at']; + protected array $fillable = ['order_service_detail_id', 'order_service_id', 'order_id', 'package_id', 'order_service_no', 'service_period', 'service_count', 'monthly_frequency', 'single_inquiry_price', 'service_price', 'created_at', 'updated_at']; protected string $primaryKey = "order_service_detail_id"; diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index a493e09..af63096 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -503,6 +503,9 @@ class OrderServicePackageService extends BaseService $data = array(); $data['order_service_id'] = $order_service_package['order_service_id']; $data['order_id'] = $order_service_package['order_id']; + if ($order_service_package['order_service_type'] == 1){ + $data['package_id'] = 1; + } $data['order_service_no'] = $order_service_package['order_service_no']; $data['service_period'] = $service_period; // 服务周期(天) $data['service_count'] = $service_count; // 总服务次数(0表示不限次) @@ -1236,6 +1239,23 @@ class OrderServicePackageService extends BaseService return $result; } + /** + * 获取服务包内所有药品 + * @param string|int $package_id + * @return array + */ + public function getOrderServiceProduct(string|int $package_id): array + { + $params = array(); + $params['package_id'] = $$package_id; + $health_package_products = HealthPackage::getList($params); + if (empty($health_package_products)){ + return []; + } + + return $health_package_products->toArray(); + } + /** * 获取服务包内某一药品的总数量 * @param string|int $product_id diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 4b5f2f8..c6248ae 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -3101,16 +3101,13 @@ class PatientOrderService extends BaseService $result['order_service_package']['current_month_finish_date'] = $current_month_date['current_month_finish_date']; // 获取服务包当月已问诊次数 - $result['order_service_package']['month_inquiry_count'] = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$user_info['client_user_id'], $order_service_package['doctor_id']); + if (!empty($order_service_package['pay_time'])){ + $OrderServicePackageService = new OrderServicePackageService(); + $result['order_service_package_detail']['month_inquiry_count'] = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + } } } - // 获取服务包当月已问诊次数 - if (!empty($order_service_package['pay_time'])){ - $OrderServicePackageService = new OrderServicePackageService(); - $result['order_service_package_detail']['month_inquiry_count'] = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); - } - // 健康包数据 if ($order_service_package['order_service_type'] == 1){ // 健康包商品数据 @@ -3146,13 +3143,15 @@ class PatientOrderService extends BaseService $result['order_product'] = $order_products->toArray(); } - if (!empty($order_service_package_products)) { - foreach ($order_service_package_products as $order_service_package_product) { + // 获取服务包内所有药品 + $health_package_products = $OrderServicePackageService->getOrderServiceProduct($order_service_package_detail['package_id']); + if (!empty($health_package_products)) { + foreach ($health_package_products as $health_package_product) { // 获取服务包内某一药品的总数量 - $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_product['product_id']); + $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($health_package_product['product_id']); // 获取服务包内某一药品的剩余数量 - $result['order_service_package_detail']['remaining_quantity'] = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$order_service_package_product['product_id'],$total_quantity); + $result['order_service_package_detail']['remaining_quantity'] = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$health_package_product['product_id'],$total_quantity); } } } From dac179e8454eb24aa48934ca00eed5dac3c97379 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 24 Apr 2024 16:07:36 +0800 Subject: [PATCH 150/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E5=85=B3=E8=81=94=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=B6=88=E6=81=AF=E5=86=85=E9=A1=B5=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E6=95=B0=E6=8D=AE4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index af63096..357ceb4 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1247,7 +1247,7 @@ class OrderServicePackageService extends BaseService public function getOrderServiceProduct(string|int $package_id): array { $params = array(); - $params['package_id'] = $$package_id; + $params['package_id'] = $package_id; $health_package_products = HealthPackage::getList($params); if (empty($health_package_products)){ return []; From de9a666b792b0e4b5dddaa60522445169543555b Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 24 Apr 2024 16:13:30 +0800 Subject: [PATCH 151/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E5=85=B3=E8=81=94=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=B6=88=E6=81=AF=E5=86=85=E9=A1=B5=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E6=95=B0=E6=8D=AE5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 14 ++++---------- app/Services/PatientOrderService.php | 5 +---- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 357ceb4..e9b78bb 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1248,7 +1248,7 @@ class OrderServicePackageService extends BaseService { $params = array(); $params['package_id'] = $package_id; - $health_package_products = HealthPackage::getList($params); + $health_package_products = HealthPackageProduct::getList($params); if (empty($health_package_products)){ return []; } @@ -1258,22 +1258,16 @@ class OrderServicePackageService extends BaseService /** * 获取服务包内某一药品的总数量 + * @param string|int $package_id * @param string|int $product_id * @return int */ - public function getOrderServiceProductTotalQuantity(string|int $product_id): int + public function getOrderServiceProductTotalQuantity(string|int $package_id,string|int $product_id): int { $total_quantity = 0; - // 获取健康包内容 $params = array(); - $health_package = HealthPackage::getOne($params); - if (empty($health_package)){ - return $total_quantity; - } - - $params = array(); - $params['package_id'] = $health_package['package_id']; + $params['package_id'] = $package_id; $params['product_id'] = $product_id; $health_package_product = HealthPackage::getOne($params); if (empty($health_package_product)){ diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index c6248ae..b4f3f0e 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -3147,11 +3147,8 @@ class PatientOrderService extends BaseService $health_package_products = $OrderServicePackageService->getOrderServiceProduct($order_service_package_detail['package_id']); if (!empty($health_package_products)) { foreach ($health_package_products as $health_package_product) { - // 获取服务包内某一药品的总数量 - $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($health_package_product['product_id']); - // 获取服务包内某一药品的剩余数量 - $result['order_service_package_detail']['remaining_quantity'] = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$health_package_product['product_id'],$total_quantity); + $result['order_service_package_detail']['remaining_quantity'] = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$health_package_product['product_id'],$health_package_product['quantity']); } } } From 666cd06c8258a7fc5bf31ae8337712953a4cabc1 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 24 Apr 2024 16:25:42 +0800 Subject: [PATCH 152/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E5=85=B3=E8=81=94=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=B6=88=E6=81=AF=E5=86=85=E9=A1=B5=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E6=95=B0=E6=8D=AE6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index b4f3f0e..f9b3cbd 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -3100,17 +3100,31 @@ class PatientOrderService extends BaseService $result['order_service_package']['current_month_start_date'] = $current_month_date['current_month_start_date']; $result['order_service_package']['current_month_finish_date'] = $current_month_date['current_month_finish_date']; - // 获取服务包当月已问诊次数 - if (!empty($order_service_package['pay_time'])){ + // 获取服务包当月已问诊/剩余次数 + if ($order_service_package_detail['monthly_frequency'] != 0) { $OrderServicePackageService = new OrderServicePackageService(); - $result['order_service_package_detail']['month_inquiry_count'] = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + + // 获取服务包当月已问诊次数 + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$order_service_package['user_id'], $order_service_package['doctor_id']); + + // 获取服务包当月剩余问诊次数 + $remaining_inquiry_count = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; + if ($remaining_inquiry_count < 0){ + $remaining_inquiry_count = 0; + } + }else{ + $remaining_inquiry_count = "不限"; + $month_inquiry_count = "不限"; } + + $result['order_service_package_detail']['month_inquiry_count'] = $month_inquiry_count; + $result['order_service_package_detail']['remaining_inquiry_count'] = $remaining_inquiry_count; } } // 健康包数据 if ($order_service_package['order_service_type'] == 1){ - // 健康包商品数据 + // 健康包商品订单数据 $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; $order_service_package_products = OrderServicePackageProduct::getList($params); From 5103fe875f3f5a98915b40bc70ba9690246cafde Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 24 Apr 2024 16:30:32 +0800 Subject: [PATCH 153/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E5=85=B3=E8=81=94=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=B6=88=E6=81=AF=E5=86=85=E9=A1=B5=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E6=95=B0=E6=8D=AE7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index f9b3cbd..71b0f65 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -3124,14 +3124,6 @@ class PatientOrderService extends BaseService // 健康包数据 if ($order_service_package['order_service_type'] == 1){ - // 健康包商品订单数据 - $params = array(); - $params['order_service_id'] = $order_service_package['order_service_id']; - $order_service_package_products = OrderServicePackageProduct::getList($params); - if (!empty($order_service_package_products)){ - $result['order_service_package_product'] = $order_service_package_products->toArray(); - } - // 健康包关联优惠卷数据 if (in_array($order_service_package['order_service_status'],[3,4,5])){ // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) @@ -3145,16 +3137,15 @@ class PatientOrderService extends BaseService // 健康包药品订单数据-周期内所有药品订单 if (in_array($order_service_package['order_service_status'],[3,4,5])){ $params = array(); - $params['doctor_id'] = $order_service_package['doctor_id']; - $params['patient_id'] = $order_service_package['patient_id']; - $params['family_id'] = $order_service_package['family_id']; - - $created_at = [$order_service_package['start_time'],$order_service_package['finish_time']]; - - $order_product_status_params = [2,3,4]; - $order_products = OrderProduct::getProductWithCreateTime($params,$created_at,$order_product_status_params); - if (!empty($order_products)){ - $result['order_product'] = $order_products->toArray(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_products = OrderServicePackageProduct::getList($params); + foreach ($order_service_package_products as $order_service_package_product){ + $params = array(); + $params['order_product_id'] = $order_service_package_product['order_product_id']; + $order_product = OrderProduct::getOne($params); + if (!empty($order_product)){ + $result['order_product'] = $order_product->toArray(); + } } // 获取服务包内所有药品 From ace286e096528f6dcbda0b6a60a8a03aea34ed69 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 24 Apr 2024 17:46:30 +0800 Subject: [PATCH 154/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=89=A9=E4=BD=99?= =?UTF-8?q?=E8=8D=AF=E5=93=81=E6=95=B0=E9=87=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...pleteServicePackageDelayDirectConsumer.php | 23 +-- .../Consumer/SendStationMessageConsumer.php | 1 + app/Services/MessagePush.php | 136 ++++++++++-------- app/Services/PatientOrderService.php | 59 +++++--- app/Services/UserDoctorService.php | 53 +++++-- 5 files changed, 164 insertions(+), 108 deletions(-) diff --git a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php index acf4589..f3763c2 100644 --- a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php @@ -166,24 +166,13 @@ class AutoCompleteServicePackageDelayDirectConsumer extends ConsumerMessage return Result::ACK; } - $params = array(); - $params['order_service_id'] = $order_service_package['order_service_id']; - $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); - if (!empty($order_service_package_inquiry)){ - // 获取医生数据 - $params = array(); - $params['doctor_id'] = $order_service_package['doctor_id']; - $user_doctor = UserDoctor::getOne($params); - if (!empty($user_doctor)) { - // 医生-通知医生患者的服务包服务结束 - $MessagePush = new MessagePush($user_doctor['user_id'], $order_service_package_inquiry['inquiry_no']); - $MessagePush->doctorServicePackageFinish(); - } + // 医生-通知医生患者的服务包服务结束 + $MessagePush = new MessagePush($user_doctor['user_id'], $order_service_package['order_service_no']); + $MessagePush->doctorServicePackageFinish(); - // 患者-通知患者服务包服务已结束 - $MessagePush = new MessagePush($order_service_package['user_id'], $order_service_package_inquiry['inquiry_no']); - $MessagePush->patientServicePackageFinish(); - } + // 患者-通知患者服务包服务已结束 + $MessagePush = new MessagePush($order_service_package['user_id'], $order_service_package['order_service_no']); + $MessagePush->patientServicePackageFinish(); }catch (\Throwable $e){ Log::getInstance("queue-AutoCompleteServicePackage")->error($e->getMessage()); return Result::ACK; diff --git a/app/Amqp/Consumer/SendStationMessageConsumer.php b/app/Amqp/Consumer/SendStationMessageConsumer.php index 842a5f5..edf1664 100644 --- a/app/Amqp/Consumer/SendStationMessageConsumer.php +++ b/app/Amqp/Consumer/SendStationMessageConsumer.php @@ -71,6 +71,7 @@ class SendStationMessageConsumer extends ConsumerMessage $cloud_custom_data['order_inquiry_id'] = ""; $cloud_custom_data['is_system'] = 1; $cloud_custom_data['inquiry_type'] = $data['inquiry_type'] ?? ""; + $cloud_custom_data['inquiry_mode'] = $data['inquiry_mode'] ?? ""; $cloud_custom_data['message_rounds'] = 0; $cloud_custom_data['patient_family_data'] = []; diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index f92dac7..33ed3b9 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -19,6 +19,7 @@ use App\Model\OrderPrescription; use App\Model\OrderProduct; use App\Model\OrderProductItem; use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageCase; use App\Model\OrderServicePackageDetail; use App\Model\OrderServicePackageInquiry; use App\Model\OrderServicePackageProduct; @@ -1139,7 +1140,7 @@ class MessagePush extends BaseService $producer = ApplicationContext::getContainer()->get(Producer::class); $result = $producer->produce($message); if (!$result) { - Log::getInstance("MessagePush")->error("错误:加入站内推送队列失败" . json_encode($data, JSON_UNESCAPED_UNICODE)); + Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); } // 订阅 @@ -3053,18 +3054,26 @@ class MessagePush extends BaseService public function doctorServicePackageFinish(): void { try { + $params = array(); + $params['order_service_no'] = $this->order['order_no']; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + Log::getInstance("MessagePush")->error("服务包订单为空"); + return; + } + // 获取问诊订单关联病例 $params = array(); - $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; - $order_inquiry_case = OrderInquiryCase::getOne($params); - if (empty($order_inquiry_case)) { - Log::getInstance("MessagePush")->error("问诊病例为空"); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_case= OrderServicePackageCase::getOne($params); + if (empty($order_service_package_case)) { + Log::getInstance("MessagePush")->error("服务包病例为空"); return; } // 获取医生数据 $params = array(); - $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $params['doctor_id'] = $order_service_package['doctor_id']; $user_doctor = UserDoctor::getOne($params); if (empty($user_doctor)) { Log::getInstance("MessagePush")->error("医生数据为空"); @@ -3072,17 +3081,24 @@ class MessagePush extends BaseService } // 转换问诊订单订单接诊方式-字符串 - $inquiry_mode = orderServiceTypeToString($this->order_inquiry['inquiry_mode']); + $order_service_type = orderServiceTypeToString($order_service_package['order_service_type']); + + if ($order_service_package['order_service_type'] == 1){ + $inquiry_mode = 8; + }else{ + $inquiry_mode = 9; + } // 站内 $data = array(); $data['user_id'] = $this->user['user_id']; $data['notice_type'] = 1; - $data['inquiry_type'] = $this->order_inquiry['inquiry_type']; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + $data['inquiry_type'] = 1; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + $data['inquiry_mode'] = $inquiry_mode; // 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) $data['from_name'] = "肝胆小秘书"; - $data['notice_brief_title'] = "{$this->order_inquiry['patient_name']}患者的{$inquiry_mode}服务已完成,您可以提醒患者进行续费。"; - $data['notice_title'] = "{$this->order_inquiry['patient_name']}患者的{$inquiry_mode}服务已完成,您可以提醒患者进行续费。"; - $data['notice_content'] = "{$this->order_inquiry['patient_name']}患者的{$inquiry_mode}服务已完成,您可以提醒患者进行续费。"; + $data['notice_brief_title'] = "{$order_service_package['patient_name']}患者的{$order_service_type}服务已完成,您可以提醒患者进行续费。"; + $data['notice_title'] = "{$order_service_package['patient_name']}患者的{$order_service_type}服务已完成,您可以提醒患者进行续费。"; + $data['notice_content'] = "{$order_service_package['patient_name']}患者的{$order_service_type}服务已完成,您可以提醒患者进行续费。"; $message = new SendStationMessageProducer($data); $producer = ApplicationContext::getContainer()->get(Producer::class); @@ -3093,7 +3109,7 @@ class MessagePush extends BaseService // 订阅 // 问诊内容-病情主诉 - $disease_desc = $order_inquiry_case['disease_desc']; + $disease_desc = $order_service_package_case['disease_desc']; if (!empty($disease_desc)) { if (strlen($disease_desc) > 15) { $disease_desc = mb_substr($disease_desc, 0, 15); @@ -3109,7 +3125,7 @@ class MessagePush extends BaseService $sub_data['wx_template_id'] = "G1RIs0RYqsTQ2CuPQWalIMyb6_deuEEbJfajfhGvNzc"; // 咨询提醒 $sub_data['params']['page'] = "Pages/yishi/wenzhen_v2/wenzhen"; $sub_data['params']['data'] = [ - "thing1" => "{$inquiry_mode}服务已完成",// 提醒内容 + "thing1" => "{$order_service_type}服务已完成",// 提醒内容 "name2" => $this->order_inquiry['patient_name'],// 患者姓名 "thing4" => $disease_desc,// 病情描述 "thing6" => "您可以提醒患者进行续费",// 提示说明 @@ -3181,6 +3197,7 @@ class MessagePush extends BaseService $data['user_id'] = $this->user['user_id']; $data['notice_type'] = 3; $data['notice_system_type'] = 1; + $data['inquiry_mode'] = $this->order_inquiry['inquiry_mode']; // 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) $data['from_name'] = "肝胆小秘书"; $data['notice_brief_title'] = "您购买的{$order_type}服务,医生已接受,点击查看详情。"; $data['notice_title'] = "您购买的{$order_type}服务,医生已接受,点击查看详情。"; @@ -3195,7 +3212,7 @@ class MessagePush extends BaseService $link_params['patient_user_id'] = $this->order_inquiry['user_id']; $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 - $data['button_type'] = 4; // 问诊详情 + $data['button_type'] = 4; $message = new SendStationMessageProducer($data); $producer = ApplicationContext::getContainer()->get(Producer::class); @@ -3269,10 +3286,13 @@ class MessagePush extends BaseService // 转换服务包订单类型为汉字 $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); - // 获取服务包当月已问诊次数 - if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($this->order_service_package['start_time'])) { - $OrderServicePackageService = new OrderServicePackageService(); + $OrderServicePackageService = new OrderServicePackageService(); + + if ($order_service_package_detail['monthly_frequency'] != 0) { + // 获取服务包当月已问诊次数 $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($this->order_service_package['pay_time'],$this->order_service_package['order_service_type'],$this->order_service_package['user_id'], $this->order_service_package['doctor_id']); + + // 获取服务包当月剩余问诊次数 $remaining_inquiry_count = $order_service_package_detail['monthly_frequencys'] - $month_inquiry_count; if ($remaining_inquiry_count < 0){ $remaining_inquiry_count = 0; @@ -3284,19 +3304,11 @@ class MessagePush extends BaseService // 获取剩余药品数量 $remaining_quantity = 0; if ($this->order_service_package['order_service_type'] == 1){ - $OrderServicePackageService = new OrderServicePackageService(); - - $params = array(); - $params['order_service_id'] = $this->order_service_package['order_service_id']; - $order_service_package_products = OrderServicePackageProduct::getList($params); - if (!empty($order_service_package_products)){ - foreach ($order_service_package_products as $order_service_package_product){ - // 获取服务包内某一药品的总数量 - $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_product['product_id']); - - // 获取服务包内某一药品的剩余数量 - $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($this->order_service_package['order_service_id'],$order_service_package_product['product_id'],$total_quantity); - } + // 获取服务包内所有药品 + $health_package_products = $OrderServicePackageService->getOrderServiceProduct($order_service_package_detail['package_id']); + foreach ($health_package_products as $health_package_product) { + // 获取服务包内某一药品的剩余数量 + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($this->order_service_package['order_service_id'],$health_package_product['product_id'],$health_package_product['quantity']); } } @@ -3305,6 +3317,7 @@ class MessagePush extends BaseService $data['user_id'] = $this->user['user_id']; $data['notice_type'] = 3; $data['notice_system_type'] = 1; + $data['inquiry_mode'] = $this->order_inquiry['inquiry_mode']; // 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) $data['from_name'] = "肝胆小秘书"; $data['notice_brief_title'] = "您使用{$order_type}服务中问诊,医生已接诊,点击查看详情。"; $data['notice_title'] = "您使用{$order_type}服务中问诊,医生已接诊,点击查看详情。"; @@ -3397,14 +3410,12 @@ class MessagePush extends BaseService $data['link_type'] = 15; $link_params = array(); - $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; $link_params['order_no'] = $this->order['order_no']; - $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; $link_params['doctor_user_id'] = $user_doctor['user_id']; - $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $link_params['patient_user_id'] = $this->order_service_package['user_id']; $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 - $data['button_type'] = 4; // 问诊详情 + $data['button_type'] = 4; $message = new SendStationMessageProducer($data); $producer = ApplicationContext::getContainer()->get(Producer::class); @@ -3426,17 +3437,6 @@ class MessagePush extends BaseService } // 订阅 - $sub_data = array(); - $sub_data['push_user_id'] = $this->user['user_id']; - $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 - $sub_data['params']['page'] = "patient/pages/orderDetail/orderDetail?order_inquiry_id={$this->order_inquiry['order_inquiry_id']}"; - $sub_data['params']['data'] = [ - "thing1" => "使用{$order_type}服务中问诊",// 问诊内容 - "thing2" => "医生已接诊",// 提醒内容 - "name3" => (string)$user_doctor['user_name'],// 问诊医生 - "thing4" => "点击查看详情",// 提示说明 - ]; - $sub_data = array(); $sub_data['push_user_id'] = $this->user['user_id']; $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 @@ -3467,9 +3467,10 @@ class MessagePush extends BaseService /** * 患者-通知患者服务包药品未使用完 * 站内 + * @param string|int $remaining_quantity * @return void */ - public function patientServicePackageHaveProduct(): void + public function patientServicePackageHaveProduct(string|int $remaining_quantity = 0): void { try { // 获取医生数据 @@ -3481,24 +3482,37 @@ class MessagePush extends BaseService return; } - $OrderServicePackageService = new OrderServicePackageService(); + if ($remaining_quantity == 0){ + $OrderServicePackageService = new OrderServicePackageService(); - // 获取剩余药品数量 - $remaining_quantity = 0; - $params = array(); - $params['order_service_id'] = $this->order_service_package['order_service_id']; - $order_service_package_products = OrderServicePackageProduct::getList($params); - if (!empty($order_service_package_products)){ - foreach ($order_service_package_products as $order_service_package_product){ - // 获取服务包内某一药品的总数量 - $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_product['product_id']); + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($this->order_inquiry['inquiry_no']); - // 获取服务包内某一药品的剩余数量 - $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($this->order_service_package['order_service_id'],$order_service_package_product['product_id'],$total_quantity); - if ($remaining_quantity > 0){ - break; - } + // 获取服务包订单 + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + Log::getInstance("MessagePush")->error("服务包订单错误"); + return; } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + Log::getInstance("MessagePush")->error("服务包订单详情错误"); + return; + } + + // 获取服务包内所有药品 + $health_package_products = $OrderServicePackageService->getOrderServiceProduct($order_service_package_detail['package_id']); + foreach ($health_package_products as $health_package_product) { + // 获取服务包内某一药品的剩余数量 + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$health_package_product['product_id'],$health_package_product['quantity']); + } + } // 站内 diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 71b0f65..d92f700 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1354,18 +1354,14 @@ class PatientOrderService extends BaseService case 3: // 检测订单 Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "非法订单类型"); - - break; case 4: // 健康包订单 Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "非法订单类型"); - break; case 5: // 随访包订单 Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "非法订单类型"); - break; default: Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "支付失败"); @@ -1497,6 +1493,22 @@ class PatientOrderService extends BaseService return fail(); } + // 获取服务包订单 + $params = array(); + $params['order_service_no'] = $order_service_package_inquiry['order_service_no']; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + return fail(); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + return fail(); + } + // 此处不检测未支付的商品订单,在创建订单时会进行数量的扣减 // 处理商品数量 $OrderServicePackageService = new OrderServicePackageService(); @@ -1504,7 +1516,7 @@ class PatientOrderService extends BaseService $amount_total = 0; foreach ($product_datas as &$product_data){ // 获取服务包内某一药品的总数量 - $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($product_data['product_id']); + $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_detail['package_id'],$product_data['product_id']); // 获取服务包内某一药品的剩余数量 $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id'],$total_quantity); @@ -2040,6 +2052,22 @@ class PatientOrderService extends BaseService return fail(); } + // 获取服务包订单 + $params = array(); + $params['order_service_no'] = $order_service_package_inquiry['order_service_no']; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + return fail(); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + return fail(); + } + // 此处不检测未支付的商品订单,在创建订单时会进行数量的扣减 // 处理商品数量、金额 $OrderServicePackageService = new OrderServicePackageService(); @@ -2047,7 +2075,7 @@ class PatientOrderService extends BaseService $amount_total = 0; foreach ($product_datas as &$product_data){ // 获取服务包内某一药品的总数量 - $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($product_data['product_id']); + $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_detail['package_id'],$product_data['product_id']); // 获取服务包内某一药品的剩余数量 $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id'],$total_quantity); @@ -3100,13 +3128,11 @@ class PatientOrderService extends BaseService $result['order_service_package']['current_month_start_date'] = $current_month_date['current_month_start_date']; $result['order_service_package']['current_month_finish_date'] = $current_month_date['current_month_finish_date']; - // 获取服务包当月已问诊/剩余次数 + // 获取服务包当月已问诊次数 + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$order_service_package['user_id'], $order_service_package['doctor_id']); + + // 获取服务包当月剩余问诊次数 if ($order_service_package_detail['monthly_frequency'] != 0) { - $OrderServicePackageService = new OrderServicePackageService(); - - // 获取服务包当月已问诊次数 - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$order_service_package['user_id'], $order_service_package['doctor_id']); - // 获取服务包当月剩余问诊次数 $remaining_inquiry_count = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; if ($remaining_inquiry_count < 0){ @@ -3114,7 +3140,6 @@ class PatientOrderService extends BaseService } }else{ $remaining_inquiry_count = "不限"; - $month_inquiry_count = "不限"; } $result['order_service_package_detail']['month_inquiry_count'] = $month_inquiry_count; @@ -3150,11 +3175,9 @@ class PatientOrderService extends BaseService // 获取服务包内所有药品 $health_package_products = $OrderServicePackageService->getOrderServiceProduct($order_service_package_detail['package_id']); - if (!empty($health_package_products)) { - foreach ($health_package_products as $health_package_product) { - // 获取服务包内某一药品的剩余数量 - $result['order_service_package_detail']['remaining_quantity'] = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$health_package_product['product_id'],$health_package_product['quantity']); - } + foreach ($health_package_products as $health_package_product) { + // 获取服务包内某一药品的剩余数量 + $result['order_service_package_detail']['remaining_quantity'] = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$health_package_product['product_id'],$health_package_product['quantity']); } } } diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index 36f4826..f276b5f 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -1962,7 +1962,7 @@ class UserDoctorService extends BaseService $res = $producer->produce($message); if (!$res) { Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); + return fail(HttpEnumCode::SERVER_ERROR, "接诊失败"); } Db::commit(); @@ -1977,7 +1977,8 @@ class UserDoctorService extends BaseService $params['doctor_id'] = $order_inquiry['doctor_id']; $user_doctor = UserDoctor::getOne($params); if (empty($user_doctor)) { - return success([],HttpEnumCode::HTTP_SUCCESS,"医生数据错误"); + Log::getInstance('UserDoctorService-addDoctorInquiry')->error("医生数据错误"); + return success(); } // 获取病例数据 @@ -1985,7 +1986,8 @@ class UserDoctorService extends BaseService $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $order_inquiry_case = OrderInquiryCase::getOne($params); if (empty($order_inquiry_case)){ - return success([],HttpEnumCode::HTTP_SUCCESS,"患者病例错误"); + Log::getInstance('UserDoctorService-addDoctorInquiry')->error("患者病例错误"); + return success(); } // 发送IM消息-医生接诊 @@ -2002,6 +2004,24 @@ class UserDoctorService extends BaseService // 获取服务包订单编号-通过问诊订单id $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + // 获取服务包订单 + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + Log::getInstance('UserDoctorService-addDoctorInquiry')->error("服务包订单错误"); + return success(); + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + Log::getInstance('UserDoctorService-addDoctorInquiry')->error("服务包订单详情错误"); + return success(); + } + // 检测问诊是否服务包首次问诊 $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); if ($is_first){ @@ -2012,14 +2032,23 @@ class UserDoctorService extends BaseService // 患者-通知患者医生已接诊服务包相关问诊订单 $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); $MessagePush->patientAcceptedServicePackageInquiry(); - } - // 检测患者服务包内是否还存在剩余药品 - $res = $OrderServicePackageService->checkOrderServiceRemainingProduct($order_service_no); - if ($res){ - // 患者-通知患者服务包药品未使用完 - $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); - $MessagePush->patientServicePackageHaveProduct(); + if ($order_service_package['order_service_type'] == 1){ + $remaining_quantity = 0; + + // 获取服务包内所有药品 + $health_package_products = $OrderServicePackageService->getOrderServiceProduct($order_service_package_detail['package_id']); + foreach ($health_package_products as $health_package_product) { + // 获取服务包内某一药品的剩余数量 + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$health_package_product['product_id'],$health_package_product['quantity']); + } + + if ($remaining_quantity > 0){ + // 患者-通知患者服务包药品未使用完 + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); + $MessagePush->patientServicePackageHaveProduct($remaining_quantity); + } + } } }else{ // 发送站内、订阅、短信消息-医生已接诊 @@ -2027,7 +2056,8 @@ class UserDoctorService extends BaseService $MessagePush->patientAcceptedInquiry(); } }catch(\Exception $e){ - return success([],HttpEnumCode::HTTP_SUCCESS,$e->getMessage()); + Log::getInstance('UserDoctorService-addDoctorInquiry')->error($e->getMessage()); + return success(); } return success(); @@ -2866,7 +2896,6 @@ class UserDoctorService extends BaseService return $result; } - /** * 获取医生是否可处方图标展示状态 * @param string $doctor_id 医生id From 35ad7ae43af9d134294e7fb2263ef4c16e7f4ed6 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 25 Apr 2024 10:18:06 +0800 Subject: [PATCH 155/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9im=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/ImService.php | 633 ++++---------------- app/Services/OrderServicePackageService.php | 74 +++ 2 files changed, 203 insertions(+), 504 deletions(-) diff --git a/app/Services/ImService.php b/app/Services/ImService.php index b0c6057..2d54ee1 100644 --- a/app/Services/ImService.php +++ b/app/Services/ImService.php @@ -294,52 +294,20 @@ class ImService extends BaseService $cloud_custom_data['patient_family_data']['patient_sex'] = $order_inquiry['patient_sex']; $cloud_custom_data['patient_family_data']['patient_age'] = $order_inquiry['patient_age']; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取im消息推送中,服务包订单相关的自定义参数 + $OrderServicePackageService = new OrderServicePackageService(); + $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); + if (!empty($result)){ + $cloud_custom_data = $result; + } + } + // 消息内容 医生-患者 $message_content_data = array(); $message_content_data['message_type'] = 1; $message_content_data['title'] = "—问诊已结束—"; $message_content_data['desc'] = "线上咨询不能代替面诊,医生建议仅供参考。"; - - if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ - $OrderServicePackageService = new OrderServicePackageService(); - - // 获取服务包订单编号-通过问诊订单id - $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); - - $params = array(); - $params['order_service_no'] = $order_service_no; - $order_service_package = OrderServicePackage::getOne($params); - if (empty($order_service_package)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包订单详情 - $params = array(); - $params['order_service_no'] = $order_service_package['order_service_no']; - $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (empty($order_service_package_detail)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包当月已问诊次数 - $month_inquiry_count = 0; - if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { - // 获取服务包当月已问诊次数 - $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); - } - - $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 - if (!empty($order_service_package['start_time'])){ - $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 - } - - if (!empty($order_service_package['finish_time'])){ - $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 - } - $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 - } - $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; @@ -372,6 +340,15 @@ class ImService extends BaseService $cloud_custom_data['patient_family_data']['patient_sex'] = $order_inquiry['patient_sex']; $cloud_custom_data['patient_family_data']['patient_age'] = $order_inquiry['patient_age']; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取im消息推送中,服务包订单相关的自定义参数 + $OrderServicePackageService = new OrderServicePackageService(); + $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); + if (!empty($result)){ + $cloud_custom_data = $result; + } + } + // 消息内容 医生-患者 $message_content_data = array(); $message_content_data['message_type'] = 1; @@ -383,30 +360,6 @@ class ImService extends BaseService // 获取服务包订单编号-通过问诊订单id $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); - // 获取服务包订单数据 - $params = array(); - $params['order_service_no'] = $order_service_no; - $order_service_package = OrderServicePackage::getOne($params); - if (empty($order_service_package)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包订单详情数据 - $params = array(); - $params['order_service_no'] = $order_service_no; - $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (empty($order_service_package_detail)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包当月已问诊次数 - $month_inquiry_count = 0; - if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { - // 获取服务包当月已问诊次数 - $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); - } - // 检测问诊是否服务包首次问诊 $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); if ($is_first){ @@ -414,16 +367,6 @@ class ImService extends BaseService }else{ $message_content_data['desc'] = "温馨提示:医生繁忙请耐心等待,医生接诊后会第一时间通知您。"; } - - $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 - if (!empty($order_service_package['start_time'])){ - $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 - } - - if (!empty($order_service_package['finish_time'])){ - $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 - } - $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 }else{ $message_content_data['desc'] = "温馨提示:当前服务为专家问诊,医师接诊后可以在24小时内和医生沟通20个回合。医生繁忙请耐心等待,医生接诊会后第一时间短信通知您。"; } @@ -467,6 +410,15 @@ class ImService extends BaseService $cloud_custom_data['patient_family_data']['patient_sex'] = $order_inquiry['patient_sex']; $cloud_custom_data['patient_family_data']['patient_age'] = $order_inquiry['patient_age']; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取im消息推送中,服务包订单相关的自定义参数 + $OrderServicePackageService = new OrderServicePackageService(); + $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); + if (!empty($result)){ + $cloud_custom_data = $result; + } + } + // 消息内容 医生-患者 $message_content_data = array(); $message_content_data['message_type'] = 1; @@ -500,14 +452,6 @@ class ImService extends BaseService throw new BusinessException("im消息发送失败"); } - // 获取服务包当月已问诊次数 - $month_inquiry_count = 0; - if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { - // 获取服务包当月已问诊次数 - $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); - } - // 转换服务包订单类型为汉字 $order_type = orderServiceTypeToString($order_service_package['order_service_type']); @@ -526,10 +470,6 @@ class ImService extends BaseService $remaining_inquiry_count = "不限"; } - if ($remaining_inquiry_count == 0){ - $message_content_data['desc'] = "医生已接诊,为提高沟通效率,您可一次性如实补充病情(具体症状,患病时长,用药情况及想咨询的问题等)。线上咨询不能代替面诊,医生建议仅供参考。"; - } - // 检测问诊是否服务包首次问诊 $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); if ($is_first){ @@ -537,47 +477,28 @@ class ImService extends BaseService }else{ // 健康包 if ($order_inquiry['inquiry_mode'] == 8){ - // 获取服务包内药品 - $params = array(); - $params['order_service_id'] = $order_service_package['order_service_id']; - $order_service_package_products = OrderServicePackageProduct::getList($params); - if (!empty($order_service_package_products)){ - $remaining_quantity = 0; - foreach ($order_service_package_products as $order_service_package_product){ - // 获取服务包内某一药品的总数量 - $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_product['product_id']); - + $remaining_quantity = 0; + if ($order_service_package['order_service_type'] == 1){ + // 获取服务包内所有药品 + $health_package_products = $OrderServicePackageService->getOrderServiceProduct($order_service_package_detail['package_id']); + foreach ($health_package_products as $health_package_product) { // 获取服务包内某一药品的剩余数量 - $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$order_service_package_product['product_id'],$total_quantity); - if ($remaining_quantity > 0){ - break; - } + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$health_package_product['product_id'],$health_package_product['quantity']); } + } - if ($remaining_quantity > 0){ - $message_content_data['desc'] = "医生已接诊,健康包服务本月剩余{$remaining_inquiry_count}次问诊,且还剩余{$remaining_quantity}盒肝爽颗粒,提醒医生开具处方。"; - }else{ - $message_content_data['desc'] = "医生已接诊,健康包服务本月剩余{$remaining_inquiry_count}次问诊,服务周期为:{$start_time}~{$finish_time},线上咨询不能代表面诊,医生的回复仅为建议。"; - } + if ($remaining_quantity > 0){ + $message_content_data['desc'] = "医生已接诊,健康包服务本月剩余{$remaining_inquiry_count}次问诊,且还剩余{$remaining_quantity}盒肝爽颗粒,提醒医生开具处方。"; + }else{ + $message_content_data['desc'] = "医生已接诊,健康包服务本月剩余{$remaining_inquiry_count}次问诊,服务周期为:{$start_time}~{$finish_time},线上咨询不能代表面诊,医生的回复仅为建议。"; } } // 随访包 if ($order_inquiry['inquiry_mode'] == 9){ - $message_content_data['desc'] = "医生已接诊,{$order_type}服务本月剩余{$remaining_inquiry_count}/不限次,服务周期为:{$start_time}~{$finish_time},线上咨询不能代表面诊,医生的回复仅为建议。"; + $message_content_data['desc'] = "医生已接诊,{$order_type}服务本月剩余{$remaining_inquiry_count}次,服务周期为:{$start_time}~{$finish_time},线上咨询不能代表面诊,医生的回复仅为建议。"; } } - - $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 - if (!empty($order_service_package['start_time'])){ - $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 - } - - if (!empty($order_service_package['finish_time'])){ - $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 - } - $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 - }else{ $message_content_data['desc'] = "医生已接诊,为提高沟通效率,您可一次性如实补充病情(具体症状,患病时长,用药情况及想咨询的问题等)。线上咨询不能代替面诊,医生建议仅供参考。"; } @@ -614,6 +535,15 @@ class ImService extends BaseService $cloud_custom_data['patient_family_data']['patient_sex'] = $order_inquiry['patient_sex']; $cloud_custom_data['patient_family_data']['patient_age'] = $order_inquiry['patient_age']; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取im消息推送中,服务包订单相关的自定义参数 + $OrderServicePackageService = new OrderServicePackageService(); + $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); + if (!empty($result)){ + $cloud_custom_data = $result; + } + } + // 消息内容 医生-患者 $message_content_data = array(); $message_content_data['message_type'] = 1; @@ -631,22 +561,6 @@ class ImService extends BaseService throw new BusinessException("im消息发送失败"); } - // 获取服务包订单详情 - $params = array(); - $params['order_service_no'] = $order_service_package['order_service_no']; - $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (empty($order_service_package_detail)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包当月已问诊次数 - $month_inquiry_count = 0; - if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { - // 获取服务包当月已问诊次数 - $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); - } - // 转换服务包订单类型为汉字 $order_type = orderServiceTypeToString($order_service_package['order_service_type']); @@ -659,16 +573,6 @@ class ImService extends BaseService $message_content_data['title'] = "—医生未接诊—"; $message_content_data['desc'] = "温馨提示:医生因工作繁忙未能及时进行接诊,请您见谅;稍后请再次发起问诊。"; } - - $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 - if (!empty($order_service_package['start_time'])){ - $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 - } - - if (!empty($order_service_package['finish_time'])){ - $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 - } - $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 }else{ $message_content_data['title'] = "—医生未接诊—"; $message_content_data['desc'] = "医生因工作繁忙未能及时接诊,请您谅解。所支付金额会在24小时内原路退回,再次感谢您的支持"; @@ -709,6 +613,15 @@ class ImService extends BaseService $cloud_custom_data['patient_family_data']['patient_sex'] = $order_inquiry['patient_sex']; $cloud_custom_data['patient_family_data']['patient_age'] = $order_inquiry['patient_age']; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取im消息推送中,服务包订单相关的自定义参数 + $OrderServicePackageService = new OrderServicePackageService(); + $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); + if (!empty($result)){ + $cloud_custom_data = $result; + } + } + // 消息内容 $message_content_data = array(); $message_content_data['message_type'] = $message_type; @@ -719,46 +632,6 @@ class ImService extends BaseService $message_content_data['data']['product_name'] = $product_name ?? "药品"; $message_content_data['data']['pharmacist_verify_time'] = date('Y-m-d H:i:s', time()); - if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ - $OrderServicePackageService = new OrderServicePackageService(); - - // 获取服务包订单编号-通过问诊订单id - $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); - - $params = array(); - $params['order_service_no'] = $order_service_no; - $order_service_package = OrderServicePackage::getOne($params); - if (empty($order_service_package)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包订单详情 - $params = array(); - $params['order_service_no'] = $order_service_package['order_service_no']; - $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (empty($order_service_package_detail)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包当月已问诊次数 - $month_inquiry_count = 0; - if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { - // 获取服务包当月已问诊次数 - $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); - } - - $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 - if (!empty($order_service_package['start_time'])){ - $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 - } - - if (!empty($order_service_package['finish_time'])){ - $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 - } - $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 - } - $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; @@ -791,6 +664,14 @@ class ImService extends BaseService $cloud_custom_data['patient_family_data']['patient_name'] = $order_inquiry['patient_name']; $cloud_custom_data['patient_family_data']['patient_sex'] = $order_inquiry['patient_sex']; $cloud_custom_data['patient_family_data']['patient_age'] = $order_inquiry['patient_age']; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取im消息推送中,服务包订单相关的自定义参数 + $OrderServicePackageService = new OrderServicePackageService(); + $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); + if (!empty($result)){ + $cloud_custom_data = $result; + } + } // 消息内容 医生-患者 $message_content_data = array(); @@ -801,29 +682,6 @@ class ImService extends BaseService // 获取服务包订单编号-通过问诊订单id $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); - $params = array(); - $params['order_service_no'] = $order_service_no; - $order_service_package = OrderServicePackage::getOne($params); - if (empty($order_service_package)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包订单详情 - $params = array(); - $params['order_service_no'] = $order_service_package['order_service_no']; - $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (empty($order_service_package_detail)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包当月已问诊次数 - $month_inquiry_count = 0; - if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { - // 获取服务包当月已问诊次数 - $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); - } - // 检测问诊是否服务包首次问诊 $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); if ($is_first){ @@ -833,16 +691,6 @@ class ImService extends BaseService $message_content_data['title'] = "—问诊退款—"; $message_content_data['desc'] = "平台已自动发起退款,请注意查看账户信息。"; } - - $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 - if (!empty($order_service_package['start_time'])){ - $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 - } - - if (!empty($order_service_package['finish_time'])){ - $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 - } - $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 }else{ $message_content_data['title'] = "—问诊退款—"; $message_content_data['desc'] = "平台已自动发起退款,请注意查看账户信息。"; @@ -878,6 +726,14 @@ class ImService extends BaseService $cloud_custom_data['patient_family_data']['patient_name'] = $order_inquiry['patient_name']; $cloud_custom_data['patient_family_data']['patient_sex'] = $order_inquiry['patient_sex']; $cloud_custom_data['patient_family_data']['patient_age'] = $order_inquiry['patient_age']; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取im消息推送中,服务包订单相关的自定义参数 + $OrderServicePackageService = new OrderServicePackageService(); + $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); + if (!empty($result)){ + $cloud_custom_data = $result; + } + } // 消息内容 - 患者-医生 $message_content_data = array(); @@ -885,52 +741,11 @@ class ImService extends BaseService $message_content_data['desc'] = ""; $message_content_data['data']['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; - if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ - $OrderServicePackageService = new OrderServicePackageService(); - - // 获取服务包订单编号-通过问诊订单id - $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); - - $params = array(); - $params['order_service_no'] = $order_service_no; - $order_service_package = OrderServicePackage::getOne($params); - if (empty($order_service_package)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包订单详情 - $params = array(); - $params['order_service_no'] = $order_service_package['order_service_no']; - $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (empty($order_service_package_detail)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包当月已问诊次数 - $month_inquiry_count = 0; - if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { - // 获取服务包当月已问诊次数 - $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); - } - - $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 - if (!empty($order_service_package['start_time'])){ - $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 - } - - if (!empty($order_service_package['finish_time'])){ - $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 - } - $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 - } - $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; $this->sendMessage($doctor_user_id, $patient_user_id, $message_content, "TIMCustomElem", $cloud_custom_data); - } /** @@ -956,6 +771,14 @@ class ImService extends BaseService $cloud_custom_data['patient_family_data']['patient_name'] = $order_inquiry['patient_name']; $cloud_custom_data['patient_family_data']['patient_sex'] = $order_inquiry['patient_sex']; $cloud_custom_data['patient_family_data']['patient_age'] = $order_inquiry['patient_age']; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取im消息推送中,服务包订单相关的自定义参数 + $OrderServicePackageService = new OrderServicePackageService(); + $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); + if (!empty($result)){ + $cloud_custom_data = $result; + } + } // 消息内容 医生-患者 $message_content_data = array(); @@ -966,47 +789,6 @@ class ImService extends BaseService $message_content_data['data']['order_prescription_id'] = $order_prescription_id; $message_content_data['data']['product_name'] = $product_name ?: "药品"; $message_content_data['data']['pharmacist_verify_time'] = date('Y-m-d H:i:s', time());; - - if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ - $OrderServicePackageService = new OrderServicePackageService(); - - // 获取服务包订单编号-通过问诊订单id - $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); - - $params = array(); - $params['order_service_no'] = $order_service_no; - $order_service_package = OrderServicePackage::getOne($params); - if (empty($order_service_package)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包订单详情 - $params = array(); - $params['order_service_no'] = $order_service_package['order_service_no']; - $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (empty($order_service_package_detail)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包当月已问诊次数 - $month_inquiry_count = 0; - if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { - // 获取服务包当月已问诊次数 - $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); - } - - $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 - if (!empty($order_service_package['start_time'])){ - $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 - } - - if (!empty($order_service_package['finish_time'])){ - $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 - } - $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 - } - $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; @@ -1038,53 +820,20 @@ class ImService extends BaseService $cloud_custom_data['patient_family_data']['patient_name'] = $order_inquiry['patient_name']; $cloud_custom_data['patient_family_data']['patient_sex'] = $order_inquiry['patient_sex']; $cloud_custom_data['patient_family_data']['patient_age'] = $order_inquiry['patient_age']; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取im消息推送中,服务包订单相关的自定义参数 + $OrderServicePackageService = new OrderServicePackageService(); + $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); + if (!empty($result)){ + $cloud_custom_data = $result; + } + } // 消息内容 医生-患者 $message_content_data = array(); $message_content_data['message_type'] = 1; $message_content_data['title'] = "—问诊已结束—"; $message_content_data['desc'] = "本次问诊服务已正式结束,祝您早日康复,再次感谢您的支持。"; - - if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ - $OrderServicePackageService = new OrderServicePackageService(); - - // 获取服务包订单编号-通过问诊订单id - $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); - - $params = array(); - $params['order_service_no'] = $order_service_no; - $order_service_package = OrderServicePackage::getOne($params); - if (empty($order_service_package)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包订单详情 - $params = array(); - $params['order_service_no'] = $order_service_package['order_service_no']; - $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (empty($order_service_package_detail)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包当月已问诊次数 - $month_inquiry_count = 0; - if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { - // 获取服务包当月已问诊次数 - $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); - } - - $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 - if (!empty($order_service_package['start_time'])){ - $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 - } - - if (!empty($order_service_package['finish_time'])){ - $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 - } - $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 - } - $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; @@ -1115,6 +864,14 @@ class ImService extends BaseService $cloud_custom_data['patient_family_data']['patient_name'] = $order_inquiry['patient_name']; $cloud_custom_data['patient_family_data']['patient_sex'] = $order_inquiry['patient_sex']; $cloud_custom_data['patient_family_data']['patient_age'] = $order_inquiry['patient_age']; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取im消息推送中,服务包订单相关的自定义参数 + $OrderServicePackageService = new OrderServicePackageService(); + $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); + if (!empty($result)){ + $cloud_custom_data = $result; + } + } if ($order_inquiry['inquiry_type'] == 1 || $order_inquiry['inquiry_type'] == 3) { // 专家、公益 @@ -1130,47 +887,6 @@ class ImService extends BaseService $message_content_data['title'] = "您有一个新的问诊服务等待接诊"; $message_content_data['desc'] = $desc; $message_content_data['data']['message_path'] = "/Pages/yishi/wenzhen_v2/wenzhen"; - - if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ - $OrderServicePackageService = new OrderServicePackageService(); - - // 获取服务包订单编号-通过问诊订单id - $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); - - $params = array(); - $params['order_service_no'] = $order_service_no; - $order_service_package = OrderServicePackage::getOne($params); - if (empty($order_service_package)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包订单详情 - $params = array(); - $params['order_service_no'] = $order_service_package['order_service_no']; - $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (empty($order_service_package_detail)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包当月已问诊次数 - $month_inquiry_count = 0; - if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { - // 获取服务包当月已问诊次数 - $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); - } - - $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 - if (!empty($order_service_package['start_time'])){ - $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 - } - - if (!empty($order_service_package['finish_time'])){ - $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 - } - $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 - } - $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; @@ -1273,6 +989,14 @@ class ImService extends BaseService $cloud_custom_data['patient_family_data']['patient_name'] = $order_inquiry['patient_name']; $cloud_custom_data['patient_family_data']['patient_sex'] = $order_inquiry['patient_sex']; $cloud_custom_data['patient_family_data']['patient_age'] = $order_inquiry['patient_age']; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取im消息推送中,服务包订单相关的自定义参数 + $OrderServicePackageService = new OrderServicePackageService(); + $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); + if (!empty($result)){ + $cloud_custom_data = $result; + } + } // 消息内容 $message_content_data = array(); @@ -1282,47 +1006,6 @@ class ImService extends BaseService $message_content_data['data']['order_no'] = (string)$order_inquiry['inquiry_no']; $message_content_data['data']['disease_desc'] = $disease_desc ?: ""; $message_content_data['data']['message_path'] = "user/pages/case/index?order_inquiry_id=" . $order_inquiry['order_inquiry_id']; // 跳转地址(小程序内页) - - if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ - $OrderServicePackageService = new OrderServicePackageService(); - - // 获取服务包订单编号-通过问诊订单id - $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); - - $params = array(); - $params['order_service_no'] = $order_service_no; - $order_service_package = OrderServicePackage::getOne($params); - if (empty($order_service_package)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包订单详情 - $params = array(); - $params['order_service_no'] = $order_service_package['order_service_no']; - $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (empty($order_service_package_detail)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包当月已问诊次数 - $month_inquiry_count = 0; - if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { - // 获取服务包当月已问诊次数 - $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); - } - - $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 - if (!empty($order_service_package['start_time'])){ - $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 - } - - if (!empty($order_service_package['finish_time'])){ - $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 - } - $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 - } - $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; @@ -1356,6 +1039,14 @@ class ImService extends BaseService $cloud_custom_data['patient_family_data']['patient_name'] = $order_inquiry['patient_name']; $cloud_custom_data['patient_family_data']['patient_sex'] = $order_inquiry['patient_sex']; $cloud_custom_data['patient_family_data']['patient_age'] = $order_inquiry['patient_age']; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取im消息推送中,服务包订单相关的自定义参数 + $OrderServicePackageService = new OrderServicePackageService(); + $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); + if (!empty($result)){ + $cloud_custom_data = $result; + } + } // 消息内容 $message_content_data = array(); @@ -1366,47 +1057,6 @@ class ImService extends BaseService $message_content_data['data']['order_no'] = (string)$order_inquiry['inquiry_no']; $message_content_data['data']['message_path'] = "patient/pages/sickForm/sickForm"; // 跳转地址(小程序内页) $message_content_data['data']['case_not_fill_fields'] = $case_fields; // 病例字段,json格式,医生端发送患者端使用(此字段仅针对message_type为12的情况) - - if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ - $OrderServicePackageService = new OrderServicePackageService(); - - // 获取服务包订单编号-通过问诊订单id - $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); - - $params = array(); - $params['order_service_no'] = $order_service_no; - $order_service_package = OrderServicePackage::getOne($params); - if (empty($order_service_package)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包订单详情 - $params = array(); - $params['order_service_no'] = $order_service_package['order_service_no']; - $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (empty($order_service_package_detail)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包当月已问诊次数 - $month_inquiry_count = 0; - if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { - // 获取服务包当月已问诊次数 - $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); - } - - $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 - if (!empty($order_service_package['start_time'])){ - $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 - } - - if (!empty($order_service_package['finish_time'])){ - $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 - } - $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 - } - $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; @@ -1440,6 +1090,14 @@ class ImService extends BaseService $cloud_custom_data['patient_family_data']['patient_name'] = $order_inquiry['patient_name']; $cloud_custom_data['patient_family_data']['patient_sex'] = $order_inquiry['patient_sex']; $cloud_custom_data['patient_family_data']['patient_age'] = $order_inquiry['patient_age']; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取im消息推送中,服务包订单相关的自定义参数 + $OrderServicePackageService = new OrderServicePackageService(); + $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); + if (!empty($result)){ + $cloud_custom_data = $result; + } + } // 消息内容 $message_content_data = array(); @@ -1451,47 +1109,6 @@ class ImService extends BaseService $message_content_data['data']['message_path'] = "user/pages/sick_detail/index"; // 跳转地址(小程序内页) $message_content_data['data']['case_patient_message_path'] = "/patient/sickDetail/sickDetail"; // 跳转地址(小程序内页) $message_content_data['data']['case_filled_fields'] = $case_fields; // 病例字段,json格式,患者端发送医生端使用(此字段仅针对message_type为12的情况) - - if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ - $OrderServicePackageService = new OrderServicePackageService(); - - // 获取服务包订单编号-通过问诊订单id - $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); - - $params = array(); - $params['order_service_no'] = $order_service_no; - $order_service_package = OrderServicePackage::getOne($params); - if (empty($order_service_package)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包订单详情 - $params = array(); - $params['order_service_no'] = $order_service_package['order_service_no']; - $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (empty($order_service_package_detail)){ - throw new BusinessException("im消息发送失败"); - } - - // 获取服务包当月已问诊次数 - $month_inquiry_count = 0; - if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { - // 获取服务包当月已问诊次数 - $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); - } - - $message_content_data['data']['remaining_month_inquiry_count'] = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; // 服务包当月剩余问诊次数 - if (!empty($order_service_package['start_time'])){ - $message_content_data['data']['service_package_start_time'] = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); // 服务包开始时间 - } - - if (!empty($order_service_package['finish_time'])){ - $message_content_data['data']['service_package_finish_time'] = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); // 服务包结束时间 - } - $message_content_data['data']['service_period'] = $order_service_package_detail['service_period']; // 服务包服务周期 - } - $message_content = [ 'Data' => json_encode($message_content_data, JSON_UNESCAPED_UNICODE), ]; @@ -1567,6 +1184,14 @@ class ImService extends BaseService $cloud_custom_data['patient_family_data']['patient_name'] = $order_inquiry['patient_name']; $cloud_custom_data['patient_family_data']['patient_sex'] = $order_inquiry['patient_sex']; $cloud_custom_data['patient_family_data']['patient_age'] = $order_inquiry['patient_age']; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取im消息推送中,服务包订单相关的自定义参数 + $OrderServicePackageService = new OrderServicePackageService(); + $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); + if (!empty($result)){ + $cloud_custom_data = $result; + } + } // 消息内容 医生-患者 $message_content_data = array(); diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index e9b78bb..60c6910 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1478,4 +1478,78 @@ class OrderServicePackageService extends BaseService return $amount_total; } + + /** + * 获取im消息推送中,服务包订单相关的自定义参数 + * @param string|int $inquiry_no + * @return array + */ + public function getImServicePackageCloudCustomData(string|int $inquiry_no): array + { + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($inquiry_no); + + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)){ + return []; + } + + // 获取服务包订单详情 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + return []; + } + + // 每月问诊次数(0表示不限次) + $monthly_frequency = $order_service_package_detail['monthly_frequency']; + + // 获取服务包当月已问诊次数 + $month_inquiry_count = 0; + if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + } + + // 服务包当月剩余问诊次数 + $remaining_month_inquiry_count = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; + + // 服务包开始时间 + if (!empty($order_service_package['start_time'])){ + $service_package_start_time = date('Y-m-d H:i',strtotime($order_service_package['start_time'])); + } + + // 服务包结束时间 + if (!empty($order_service_package['finish_time'])){ + $service_package_finish_time = date('Y-m-d H:i',strtotime($order_service_package['finish_time'])); + } + + // 服务包服务周期 + $service_period = $order_service_package_detail['service_period']; + + // 药品剩余数量 + $remaining_quantity = 0; + + // 获取服务包内所有药品 + $health_package_products = $OrderServicePackageService->getOrderServiceProduct($order_service_package_detail['package_id']); + foreach ($health_package_products as $health_package_product) { + // 获取服务包内某一药品的剩余数量 + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$health_package_product['product_id'],$health_package_product['quantity']); + } + + $result = array(); + $result['monthly_frequency'] = $monthly_frequency; // 每月问诊次数(0表示不限次) + $result['month_inquiry_count'] = $month_inquiry_count; // 获取服务包当月已问诊次数 + $result['remaining_month_inquiry_count'] = $remaining_month_inquiry_count; // 服务包当月剩余问诊次数 + $result['service_package_start_time'] = $service_package_start_time ?? ""; // 服务包开始时间 + $result['service_package_finish_time'] = $service_package_finish_time ?? ""; // 服务包结束时间 + $result['service_period'] = $service_period; // 服务包服务周期 + $result['remaining_quantity'] = $remaining_quantity; // 药品剩余数量 + + return $result; + } } \ No newline at end of file From 5e9f7bed992e0a8eea6368029b9fc4d98620179b Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 25 Apr 2024 14:11:08 +0800 Subject: [PATCH 156/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E5=8D=B7=E8=BF=87=E6=9C=9F=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserCouponExpiredDelayDirectConsumer.php | 11 +- .../AddUserCouponExpiredQueueCommand.php | 163 ++++++++++++++++++ app/Controller/TestController.php | 21 +-- app/Model/UserCoupon.php | 19 +- app/Services/CouponService.php | 70 ++++---- config/routes.php | 2 +- 6 files changed, 216 insertions(+), 70 deletions(-) create mode 100644 app/Command/AddUserCouponExpiredQueueCommand.php diff --git a/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php b/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php index dd991e0..3bf133d 100644 --- a/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php +++ b/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php @@ -42,8 +42,6 @@ class UserCouponExpiredDelayDirectConsumer extends ConsumerMessage { Log::getInstance("queue-UserCouponExpired")->info("开始:" . json_encode($data, JSON_UNESCAPED_UNICODE)); - return Result::DROP; - // 检测参数 if (!isset($data['user_coupon_id'])){ Log::getInstance("queue-UserCouponExpired")->error("入参错误"); @@ -77,12 +75,11 @@ class UserCouponExpiredDelayDirectConsumer extends ConsumerMessage try { // 处理未过期事件 // 先删除-重新添加队列 - if ($valid_end_time > time()){ + $time = $valid_end_time - time(); + if ($time > 0){ $time = $valid_end_time - time(); - Log::getInstance("queue-UserCouponExpired")->info($time); - - if ($time < 60 * 60 * 24){ - $time = 60 * 60 * 24; + if ($time <= 0){ + $time = 60 * 5; } $queue_data = array(); diff --git a/app/Command/AddUserCouponExpiredQueueCommand.php b/app/Command/AddUserCouponExpiredQueueCommand.php new file mode 100644 index 0000000..e2cb5ba --- /dev/null +++ b/app/Command/AddUserCouponExpiredQueueCommand.php @@ -0,0 +1,163 @@ +setDescription('添加即将过期优惠卷添加至优惠卷过期队列'); + } + + public function handle(): void + { + $this->line('开始'); + + try { + // 获取需执行的用户优惠卷 + $user_coupons = $this->getExecUserCoupon(); + if (empty($user_coupons)){ + $this->line("结束,无优惠卷可执行"); + return; + } + }catch (\Throwable $e){ + $this->line($e->getMessage()); + return; + } + + foreach ($user_coupons as $user_coupon){ + Db::beginTransaction(); + try { + // 添加优惠卷过期队列 + $valid_end_time = strtotime($user_coupon['valid_end_time']); + + $data = array(); + $data['user_coupon_id'] = $user_coupon['user_coupon_id']; + + $time = $valid_end_time - time(); + if ($time < 0){ + $time = 60 * 5; + } + + $message = new UserCouponExpiredDelayDirectProducer($data); + $message->setDelayMs(1000 * $time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + Db::rollBack(); + $this->line("添加队列失败"); + } + + Db::commit(); + }catch (\Throwable $e){ + // 修改优惠卷执行失败 + Db::rollBack(); + $this->line($e->getMessage()); + } + } + + try { + // 获取需执行提醒的用户优惠卷 + $user_coupons = $this->getExecNoticeUserCoupon(); + if (empty($user_coupons)){ + $this->line("结束,无可执行需要提醒的优惠卷"); + return; + } + }catch (\Throwable $e){ + $this->line($e->getMessage()); + return; + } + + foreach ($user_coupons as $user_coupon){ + try { + // 添加优惠卷过期队列 + $valid_end_time = strtotime($user_coupon['valid_end_time']); + + $data = array(); + $data['user_coupon_id'] = $user_coupon['user_coupon_id']; + + $time = $valid_end_time - time(); + if ($time < 0){ + continue; + } + + $message = new UserCouponExpiredNoticeDelayDirectProducer($data); + $message->setDelayMs(1000 * $time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + $this->line("添加提醒队列失败"); + } + }catch (\Throwable $e){ + // 修改优惠卷执行失败 + $this->line($e->getMessage()); + } + } + } + + /** + * 获取需执行的用户优惠卷 + * @return array + */ + public function getExecUserCoupon(): array + { + // 过期使用时间 + $valid_end_time_1 = date('Y-m-d 00:00:00',time()); + $valid_end_time_2 = date('Y-m-d 23:59:59',time()); + $valid_end_time = [$valid_end_time_1,$valid_end_time_2]; + + $params = array(); + $params['user_coupon_status'] = 0; + + $user_coupons = UserCoupon::getUserTodayExpiredCoupon($params,$valid_end_time); + if (empty($user_coupons)){ + return []; + } + + return $user_coupons->toArray(); + } + + /** + * 获取需执行提醒的用户优惠卷 + * @return array + */ + public function getExecNoticeUserCoupon(): array + { + // 获取三天后时间 + $start_time = date('Y-m-d 00:00:00', strtotime(" +3 days")); // 当月第一天的开始时间 + $end_time = date('Y-m-d 23:59:59', strtotime(" +3 days")); // 从开始时间起的指定天数后的结束时间 + + $valid_end_time = [$start_time,$end_time]; + + $params = array(); + $params['user_coupon_status'] = 0; + + $user_coupons = UserCoupon::getUserTodayExpiredCoupon($params,$valid_end_time); + if (empty($user_coupons)){ + return []; + } + + return $user_coupons->toArray(); + } +} diff --git a/app/Controller/TestController.php b/app/Controller/TestController.php index 972ff72..ffe19c0 100644 --- a/app/Controller/TestController.php +++ b/app/Controller/TestController.php @@ -35,6 +35,7 @@ use App\Model\OrderPrescription; use App\Model\OrderPrescriptionIcd; use App\Model\UserDoctor; use App\Model\UserDoctorInfo; +use App\Services\CouponService; use App\Services\ImService; use App\Services\InquiryService; use App\Services\MessagePush; @@ -458,26 +459,6 @@ class TestController extends AbstractController } public function test_17(){ - $coupon['valid_days'] = 90; - $data['valid_end_time'] = date("Y-m-d H:i:s", strtotime($coupon['valid_days'] . " day")); - - $valid_end_time = strtotime($data['valid_end_time']); - - $data = array(); - $data['user_coupon_id'] = 1; - - $time = $valid_end_time - time(); - dump($time);die; - if ($time < 0){ - return false; - } - $message = new UserCouponExpiredDelayDirectProducer($data); - $message->setDelayMs(1000 * $time); - $producer = $this->container->get(Producer::class); - $res = $producer->produce($message); - if (!$res) { - return false; - } } diff --git a/app/Model/UserCoupon.php b/app/Model/UserCoupon.php index b3a3b56..2481c13 100644 --- a/app/Model/UserCoupon.php +++ b/app/Model/UserCoupon.php @@ -6,6 +6,7 @@ namespace App\Model; +use Carbon\Carbon; use Hyperf\Database\Model\Collection; use Hyperf\Database\Model\Relations\HasOne; use Hyperf\Snowflake\Concern\Snowflake; @@ -19,8 +20,8 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property string $coupon_use_date 使用时间 * @property string $valid_start_time 开始使用时间 * @property string $valid_end_time 过期使用时间 - * @property \Carbon\Carbon $created_at 创建时间 - * @property \Carbon\Carbon $updated_at 修改时间 + * @property Carbon $created_at 创建时间 + * @property Carbon $updated_at 修改时间 * @property-read Coupon $Coupon */ class UserCoupon extends Model @@ -183,4 +184,18 @@ class UserCoupon extends Model ->get($fields); } + /** + * 获取患者今日过期优惠卷 + * @param array $params + * @param array $valid_end_time + * @param array $fields + * @return Collection|array + */ + public static function getUserTodayExpiredCoupon(array $params,array $valid_end_time,array $fields = ['*']): Collection|array + { + return self::where($params) +// ->where('valid_start_time',">=","2024-05-01 00:00:00") // 此处是为了区分于1.3版本上线前的优惠卷 + ->whereBetween('valid_end_time', $valid_end_time) + ->get($fields); + } } diff --git a/app/Services/CouponService.php b/app/Services/CouponService.php index 14cbb23..771205d 100644 --- a/app/Services/CouponService.php +++ b/app/Services/CouponService.php @@ -51,15 +51,15 @@ class CouponService extends BaseService } // 判断用户是否已有该优惠卷 - $params = array(); - $params['user_id'] = $user_id; - $params['coupon_id'] = $coupon['coupon_id']; - $user_coupon = UserCoupon::getOne($params); - if (!empty($user_coupon)){ - if ($user_coupon['user_coupon_status'] == 0){ - return true; - } - } +// $params = array(); +// $params['user_id'] = $user_id; +// $params['coupon_id'] = $coupon['coupon_id']; +// $user_coupon = UserCoupon::getOne($params); +// if (!empty($user_coupon)){ +// if ($user_coupon['user_coupon_status'] == 0){ +// return true; +// } +// } // 判断该优惠卷状态 if ($coupon['coupon_status'] != 1){ @@ -132,22 +132,24 @@ class CouponService extends BaseService } } - // 添加优惠卷过期队列 + // 优惠卷过期时间 $valid_end_time = strtotime($user_coupon['valid_end_time']); - $data = array(); - $data['user_coupon_id'] = $user_coupon['user_coupon_id']; + // 当天结束时间 + $day_end_time = strtotime(date('Y-m-d 23:59:59',time())); - $time = $valid_end_time - time(); - if ($time < 0){ - return false; - } - $message = new UserCouponExpiredDelayDirectProducer($data); - $message->setDelayMs(1000 * $time); - $producer = $this->container->get(Producer::class); - $res = $producer->produce($message); - if (!$res) { - return false; + if ($valid_end_time <= $day_end_time){ + $data = array(); + $data['user_coupon_id'] = $user_coupon['user_coupon_id']; + + $time = $valid_end_time - time(); + $message = new UserCouponExpiredDelayDirectProducer($data); + $message->setDelayMs(1000 * $time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + return false; + } } }catch (\Throwable $e){ Log::getInstance("CouponService-GrantUserCoupon")->error($e->getMessage()); @@ -155,20 +157,6 @@ class CouponService extends BaseService } try { - // 添加优惠卷即将过期提醒队列 - $time = floor($time * 0.75); - - // 时间低于5小时,不进行过期提醒 - if ($time > 60 * 60 * 5){ - $message = new UserCouponExpiredNoticeDelayDirectProducer($data); - $message->setDelayMs(1000 * $time); - $producer = $this->container->get(Producer::class); - $res = $producer->produce($message); - if (!$res) { - Log::getInstance("CouponService-GrantUserCoupon")->error("添加优惠卷即将过期提醒队列"); - } - } - // 通知-患者-优惠卷发放 $MessagePush = new MessagePush($user_id); $MessagePush->patientDistributeCoupon($coupon['coupon_name']); @@ -212,14 +200,16 @@ class CouponService extends BaseService public function GrantBuyOrderServicePackageCoupon(string $user_id): bool { // 获取购买服务包的用户可领取的优惠卷列表 - $coupon = Coupon::getOrderServicePackageCouponList(); - if (empty($coupon)) { + $coupons = Coupon::getOrderServicePackageCouponList(); + if (empty($coupons)) { return true; } - foreach ($coupon as $value){ +// dump($coupon->toArray());die; + foreach ($coupons as $coupon){ // 发放优惠卷 - $res = $this->GrantUserCoupon($value['coupon_id'],$user_id); + $res = $this->GrantUserCoupon($coupon['coupon_id'],$user_id); + dump($res);die; if (!$res){ // 发放失败 return false; diff --git a/config/routes.php b/config/routes.php index a2cf5c1..51f5c4b 100644 --- a/config/routes.php +++ b/config/routes.php @@ -892,7 +892,7 @@ Router::addGroup('/case', function () { // 测试使用 Router::addGroup('/test', function () { - Router::get('', [TestController::class, 'test1111']); + Router::get('', [TestController::class, 'test']); // // Router::get('/uninquiry', [TestController::class, 'uninquiry']); From 64eebd5fbfc362e28c8ef2ae84866a095dfa55e5 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 25 Apr 2024 14:18:28 +0800 Subject: [PATCH 157/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E9=97=AE=E8=AF=8A=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorInquiryService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/DoctorInquiryService.php b/app/Services/DoctorInquiryService.php index ef9523a..f5ffd17 100644 --- a/app/Services/DoctorInquiryService.php +++ b/app/Services/DoctorInquiryService.php @@ -371,7 +371,7 @@ class DoctorInquiryService extends BaseService } // 处理医生健康包 - if ($inquiry_type == 1 || $inquiry_mode == 8){ + if ($inquiry_type == 1 && $inquiry_mode == 8){ // 获取健康包配置 $params = array(); $health_package = HealthPackage::getOne($params); From e43dbe60437c8901406de4d721f901db96fbaad7 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 25 Apr 2024 14:35:12 +0800 Subject: [PATCH 158/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E7=96=91=E9=9A=BE=E9=97=AE=E8=AF=8A=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/DoctorInquiryConfigService.php | 5 ++- app/Services/DoctorInquiryService.php | 47 +++++++++--------------- app/Services/InquiryService.php | 36 ++++++------------ app/Services/UserDoctorService.php | 25 ++++++------- 4 files changed, 42 insertions(+), 71 deletions(-) diff --git a/app/Model/DoctorInquiryConfigService.php b/app/Model/DoctorInquiryConfigService.php index a030b1d..b33ddad 100644 --- a/app/Model/DoctorInquiryConfigService.php +++ b/app/Model/DoctorInquiryConfigService.php @@ -6,6 +6,7 @@ namespace App\Model; +use Carbon\Carbon; use Hyperf\Snowflake\Concern\Snowflake; /** @@ -17,8 +18,8 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property string $service_process 服务流程 * @property int $service_period 服务周期 * @property int $service_rounds 服务回合数(0表示不限次) - * @property \Carbon\Carbon $created_at 创建时间 - * @property \Carbon\Carbon $updated_at 修改时间 + * @property Carbon $created_at 创建时间 + * @property Carbon $updated_at 修改时间 */ class DoctorInquiryConfigService extends Model { diff --git a/app/Services/DoctorInquiryService.php b/app/Services/DoctorInquiryService.php index f5ffd17..97321fd 100644 --- a/app/Services/DoctorInquiryService.php +++ b/app/Services/DoctorInquiryService.php @@ -632,13 +632,6 @@ class DoctorInquiryService extends BaseService { $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:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) - - if ($inquiry_mode != 6) { - return fail(); - } - // 获取医生信息 $params = array(); $params['doctor_id'] = $user_info['client_user_id']; @@ -661,13 +654,11 @@ class DoctorInquiryService extends BaseService $params = array(); $params['doctor_id'] = $user_info['client_user_id']; - $params['inquiry_type'] = $inquiry_type; - $params['inquiry_mode'] = $inquiry_mode; - $doctor_inquiry_config_service = DoctorInquiryConfigService::getOne($params); - if (empty($doctor_inquiry_config_service)) { + $doctor_config_difficult_consultation = DoctorConfigDifficultConsultation::getOne($params); + if (empty($doctor_config_difficult_consultation)) { return success(null); } else { - return success($doctor_inquiry_config_service->toArray()); + return success($doctor_config_difficult_consultation->toArray()); } } @@ -706,23 +697,19 @@ class DoctorInquiryService extends BaseService $params = array(); $params['doctor_id'] = $user_info['client_user_id']; - $params['inquiry_type'] = 1; - $params['inquiry_mode'] = 6; - $doctor_inquiry_config_service = DoctorInquiryConfigService::getOne($params); - if (!empty($doctor_inquiry_config_service)) { + $doctor_config_difficult_consultation = DoctorConfigDifficultConsultation::getOne($params); + if (!empty($doctor_config_difficult_consultation)) { return fail(HttpEnumCode::HTTP_ERROR, "已存在服务设置,请勿重复设置"); } $data = array(); $data['doctor_id'] = $doctor['doctor_id']; - $data['inquiry_type'] = 1; - $data['inquiry_mode'] = 6; $data['service_content'] = $service_content; $data['service_process'] = $service_process; $data['service_period'] = $service_period; $data['service_rounds'] = $service_rounds; - $doctor_inquiry_config_service = DoctorInquiryConfigService::addDoctorInquiryConfigService($data); - if (empty($doctor_inquiry_config_service)) { + $doctor_config_difficult_consultation = DoctorConfigDifficultConsultation::addDoctorConfigDifficultConsultation($data); + if (empty($doctor_config_difficult_consultation)) { return fail(); } @@ -737,7 +724,7 @@ class DoctorInquiryService extends BaseService { $user_info = $this->request->getAttribute("userInfo") ?? []; - $config_service_id = $this->request->route('config_service_id'); + $difficult_consultation_id = $this->request->route('difficult_consultation_id'); $service_content = $this->request->input('service_content'); $service_process = $this->request->input('service_process'); @@ -765,34 +752,34 @@ class DoctorInquiryService extends BaseService } $params = array(); - $params['config_service_id'] = $config_service_id; + $params['difficult_consultation_id'] = $difficult_consultation_id; $params['doctor_id'] = $user_info['client_user_id']; - $doctor_inquiry_config_service = DoctorInquiryConfigService::getOne($params); - if (empty($doctor_inquiry_config_service)) { + $doctor_config_difficult_consultation = DoctorConfigDifficultConsultation::getOne($params); + if (empty($doctor_config_difficult_consultation)) { return fail(); } $data = array(); - if ($doctor_inquiry_config_service['service_content'] != $service_content) { + if ($doctor_config_difficult_consultation['service_content'] != $service_content) { $data['service_content'] = $service_content; } - if ($doctor_inquiry_config_service['service_process'] != $service_process) { + if ($doctor_config_difficult_consultation['service_process'] != $service_process) { $data['service_process'] = $service_process; } - if ($doctor_inquiry_config_service['service_period'] != $service_period) { + if ($doctor_config_difficult_consultation['service_period'] != $service_period) { $data['service_period'] = $service_period; } - if ($doctor_inquiry_config_service['service_rounds'] != $service_rounds) { + if ($doctor_config_difficult_consultation['service_rounds'] != $service_rounds) { $data['service_rounds'] = $service_rounds; } if (!empty($data)) { $params = array(); - $params['config_service_id'] = $doctor_inquiry_config_service['config_service_id']; - $res = DoctorInquiryConfigService::edit($params, $data); + $params['difficult_consultation_id'] = $doctor_config_difficult_consultation['difficult_consultation_id']; + $res = DoctorConfigDifficultConsultation::edit($params, $data); if (!$res) { return fail(); } diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 5e26f9f..a003cdf 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -12,6 +12,7 @@ use App\Constants\HttpEnumCode; use App\Exception\BusinessException; use App\Model\DetectionProject; use App\Model\DiseaseClass; +use App\Model\DoctorConfigDifficultConsultation; use App\Model\DoctorInquiryConfig; use App\Model\DoctorInquiryConfigService; use App\Model\Hospital; @@ -977,15 +978,13 @@ class InquiryService extends BaseService if ($order_inquiry['inquiry_type'] == 1 && $order_inquiry['inquiry_mode'] == 6) { $params = array(); $params['doctor_id'] = $order_inquiry['doctor_id']; - $params['inquiry_type'] = $order_inquiry['inquiry_type']; - $params['inquiry_mode'] = $order_inquiry['inquiry_mode']; - $doctor_inquiry_config_service = DoctorInquiryConfigService::getOne($params); - if (empty($doctor_inquiry_config_service)) { + $doctor_config_difficult_consultation = DoctorConfigDifficultConsultation::getOne($params); + if (empty($doctor_config_difficult_consultation)) { return fail(); } - $order_inquiry['times_number'] = $doctor_inquiry_config_service['service_rounds']; // 服务回合数 - $order_inquiry['duration'] = $doctor_inquiry_config_service['service_period'] * 24 * 60; // 服务周期 + $order_inquiry['times_number'] = $doctor_config_difficult_consultation['service_rounds']; // 服务回合数 + $order_inquiry['duration'] = $doctor_config_difficult_consultation['service_period'] * 24 * 60; // 服务周期 } else { $params = array(); $params['inquiry_type'] = $order_inquiry['inquiry_type']; @@ -1003,14 +1002,8 @@ class InquiryService extends BaseService $order_inquiry['duration'] = $system_inquiry_config['duration']; } } - } - // 获取服务包当月剩余次数 - - // 获取服务包到期天数 - - $result = array(); $result['doctor_user_id'] = $user_doctor['user_id']; $result['patient_user_id'] = $order_inquiry['user_id']; @@ -1570,22 +1563,15 @@ class InquiryService extends BaseService $finish_day = ceil((strtotime($order_service_package['finish_time']) - time()) / 60 / 60 / 24); } - // 获取剩余药品数量 $remaining_quantity = 0; - if ($order_service_package['order_service_type'] == 1) { + if ($order_service_package['order_service_type'] == 1){ $OrderServicePackageService = new OrderServicePackageService(); - $params = array(); - $params['order_service_id'] = $order_service_package['order_service_id']; - $order_service_package_products = OrderServicePackageProduct::getList($params); - if (!empty($order_service_package_products)){ - foreach ($order_service_package_products as $order_service_package_product){ - // 获取服务包内某一药品的总数量 - $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_product['product_id']); - - // 获取服务包内某一药品的剩余数量 - $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$order_service_package_product['product_id'],$total_quantity); - } + // 获取服务包内所有药品 + $health_package_products = $OrderServicePackageService->getOrderServiceProduct($order_service_package_detail['package_id']); + foreach ($health_package_products as $health_package_product) { + // 获取服务包内某一药品的剩余数量 + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$health_package_product['product_id'],$health_package_product['quantity']); } } diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index f276b5f..db1aeda 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -15,6 +15,7 @@ use App\Model\DiseaseClassExpertise; use App\Model\DiseaseClassIcd; use App\Model\DoctorAccount; use App\Model\DoctorBankCard; +use App\Model\DoctorConfigDifficultConsultation; use App\Model\DoctorConfigFollowPackage; use App\Model\DoctorConfigFollowPackageItem; use App\Model\DoctorConfigHealthPackage; @@ -1940,15 +1941,13 @@ class UserDoctorService extends BaseService // 疑难问诊为自己配置周期。 $params = array(); $params['doctor_id'] = $order_inquiry['doctor_id']; - $params['inquiry_type'] = $order_inquiry['inquiry_type']; - $params['inquiry_mode'] = $order_inquiry['inquiry_mode']; - $doctor_inquiry_config_service = DoctorInquiryConfigService::getOne($params); - if(empty($doctor_inquiry_config_service)){ + $doctor_config_difficult_consultation = DoctorConfigDifficultConsultation::getOne($params); + if(empty($doctor_config_difficult_consultation)){ Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "接诊失败"); } - $time = $doctor_inquiry_config_service['service_period'] * 24 * 60 * 60; + $time = $doctor_config_difficult_consultation['service_period'] * 24 * 60 * 60; }else{ $time = $system_inquiry_config['duration'] * 60; } @@ -2430,19 +2429,17 @@ class UserDoctorService extends BaseService if ($value['inquiry_mode'] == 6){ $params = array(); $params['doctor_id'] = $doctor_id; - $params['inquiry_type'] = $value['inquiry_type']; - $params['inquiry_mode'] = $value['inquiry_mode']; - $doctor_inquiry_config_service = DoctorInquiryConfigService::getOne($params); - if (empty($doctor_inquiry_config_service)){ + $doctor_config_difficult_consultation = DoctorConfigDifficultConsultation::getOne($params); + if (empty($doctor_config_difficult_consultation)){ return fail(); } - $value['times_number'] = $doctor_inquiry_config_service['service_rounds']; // 服务回合数(0表示不限次) - $value['duration'] = $doctor_inquiry_config_service['service_period']; // 服务周期(天,不存在0的情况) - $value['service_content'] = $doctor_inquiry_config_service['service_content'];// 服务内容 - $value['service_process'] = $doctor_inquiry_config_service['service_process'];// 服务流程 + $value['times_number'] = $doctor_config_difficult_consultation['service_rounds']; // 服务回合数(0表示不限次) + $value['duration'] = $doctor_config_difficult_consultation['service_period']; // 服务周期(天,不存在0的情况) + $value['service_content'] = $doctor_config_difficult_consultation['service_content'];// 服务内容 + $value['service_process'] = $doctor_config_difficult_consultation['service_process'];// 服务流程 - unset($doctor_inquiry_config_service); + unset($doctor_config_difficult_consultation); }else{ // 获取系统问诊配置 $fields = [ From 9817d1dce4bfc7f410439b597638d8c37ceb8c8e Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 25 Apr 2024 14:44:42 +0800 Subject: [PATCH 159/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E7=96=91=E9=9A=BE=E9=97=AE=E8=AF=8A=E9=85=8D=E7=BD=AE1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/DoctorInquiryConfigController.php | 5 ----- app/Request/DoctorInquiryConfigRequest.php | 4 ---- 2 files changed, 9 deletions(-) diff --git a/app/Controller/DoctorInquiryConfigController.php b/app/Controller/DoctorInquiryConfigController.php index 4df29af..607561b 100644 --- a/app/Controller/DoctorInquiryConfigController.php +++ b/app/Controller/DoctorInquiryConfigController.php @@ -79,14 +79,9 @@ class DoctorInquiryConfigController extends AbstractController /** * 获取医生问诊配置-疑难会诊-服务设置 * @return ResponseInterface - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function getDoctorInquiryDifficultConfig(): ResponseInterface { - $request = $this->container->get(DoctorInquiryConfigRequest::class); - $request->scene('getDoctorInquiryDifficultConfig')->validateResolved(); - $DoctorInquiryService = new DoctorInquiryService(); $data = $DoctorInquiryService->getDoctorInquiryDifficultConfig(); return $this->response->json($data); diff --git a/app/Request/DoctorInquiryConfigRequest.php b/app/Request/DoctorInquiryConfigRequest.php index 0e02479..73ce201 100644 --- a/app/Request/DoctorInquiryConfigRequest.php +++ b/app/Request/DoctorInquiryConfigRequest.php @@ -30,10 +30,6 @@ class DoctorInquiryConfigRequest extends FormRequest 'inquiry_price', 'work_num_day', ], - 'getDoctorInquiryDifficultConfig' => [ // 获取医生问诊配置-疑难会诊-服务设置 - 'inquiry_type', - 'inquiry_mode', - ], 'addDoctorInquiryDifficultConfig' => [ // 新增医生问诊配置-疑难会诊-服务设置 'service_content', 'service_process', From f90f99384b1cdffef31dc4c4c3bfc7e4daddda2f Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 25 Apr 2024 14:47:55 +0800 Subject: [PATCH 160/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E9=97=AE=E8=AF=8A=E9=85=8D=E7=BD=AE=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorInquiryService.php | 42 +++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/app/Services/DoctorInquiryService.php b/app/Services/DoctorInquiryService.php index 97321fd..a59c908 100644 --- a/app/Services/DoctorInquiryService.php +++ b/app/Services/DoctorInquiryService.php @@ -414,6 +414,48 @@ class DoctorInquiryService extends BaseService $data['is_enable'] = $is_open; $data['last_enable_method'] = 1; DoctorInquiryConfig::editInquiryConfig($params, $data); + + // 处理医生健康包 + if ($inquiry_mode == 8){ + // 获取健康包配置 + $params = array(); + $health_package = HealthPackage::getOne($params); + if (empty($health_package)){ + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR); + } + + // 获取医生健康包 + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + $doctor_config_health_package = DoctorConfigHealthPackage::getOne($params); + if (empty($doctor_config_health_package)){ + return fail(HttpEnumCode::HTTP_ERROR, "请添加服务内容后开启"); + } + + // 获取专家图文问诊价格 + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + $params['inquiry_type'] = 1; + $params['inquiry_mode'] = 1; + $doctor_inquiry_config = DoctorInquiryConfig::getOne($params); + if (empty($doctor_inquiry_config)){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "本服务需设置图文问诊的价格,才可开启"); + } + + // 重新价格计算(专家图文问诊价格*费率+30盒35元的干爽颗粒) + $service_price = $doctor_inquiry_config['inquiry_price'] * $health_package['service_rate'] / 100 * 6 + $health_package['discount_product_total_amount']; + + if ($doctor_config_health_package['service_price'] != $service_price){ + // 修改医生服务包 + $params = array(); + $params['health_package_id'] = $doctor_config_health_package['health_package_id']; + + $data['service_price'] = $service_price; + DoctorConfigHealthPackage::edit($params,$data); + } + } } Db::commit(); From 5044b4a9fa808ff3d71acca5eeac5276c19f9bec Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 25 Apr 2024 14:58:39 +0800 Subject: [PATCH 161/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E9=97=AE=E8=AF=8A=E9=85=8D=E7=BD=AE=E5=BC=80=E5=85=B31?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorInquiryService.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Services/DoctorInquiryService.php b/app/Services/DoctorInquiryService.php index a59c908..6cd1acb 100644 --- a/app/Services/DoctorInquiryService.php +++ b/app/Services/DoctorInquiryService.php @@ -452,6 +452,7 @@ class DoctorInquiryService extends BaseService $params = array(); $params['health_package_id'] = $doctor_config_health_package['health_package_id']; + $data = array(); $data['service_price'] = $service_price; DoctorConfigHealthPackage::edit($params,$data); } From a8d91f65b0d0ff00c18dccd863f19cd5734ed564 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 25 Apr 2024 14:59:22 +0800 Subject: [PATCH 162/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E9=97=AE=E8=AF=8A=E9=85=8D=E7=BD=AE=E5=BC=80=E5=85=B31?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorInquiryService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/DoctorInquiryService.php b/app/Services/DoctorInquiryService.php index 6cd1acb..eb885e9 100644 --- a/app/Services/DoctorInquiryService.php +++ b/app/Services/DoctorInquiryService.php @@ -416,7 +416,7 @@ class DoctorInquiryService extends BaseService DoctorInquiryConfig::editInquiryConfig($params, $data); // 处理医生健康包 - if ($inquiry_mode == 8){ + if ($inquiry_mode == 8 && $is_open == 1){ // 获取健康包配置 $params = array(); $health_package = HealthPackage::getOne($params); From 5c1bfbd22e804299ea59dc4ad777dcd2fc862407 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 25 Apr 2024 15:06:01 +0800 Subject: [PATCH 163/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9im=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/ImService.php | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/app/Services/ImService.php b/app/Services/ImService.php index 2d54ee1..a87e7ac 100644 --- a/app/Services/ImService.php +++ b/app/Services/ImService.php @@ -299,7 +299,7 @@ class ImService extends BaseService $OrderServicePackageService = new OrderServicePackageService(); $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); if (!empty($result)){ - $cloud_custom_data = $result; + $cloud_custom_data = array_merge($cloud_custom_data,$result); } } @@ -345,7 +345,7 @@ class ImService extends BaseService $OrderServicePackageService = new OrderServicePackageService(); $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); if (!empty($result)){ - $cloud_custom_data = $result; + $cloud_custom_data = array_merge($cloud_custom_data,$result); } } @@ -415,7 +415,7 @@ class ImService extends BaseService $OrderServicePackageService = new OrderServicePackageService(); $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); if (!empty($result)){ - $cloud_custom_data = $result; + $cloud_custom_data = array_merge($cloud_custom_data,$result); } } @@ -540,7 +540,7 @@ class ImService extends BaseService $OrderServicePackageService = new OrderServicePackageService(); $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); if (!empty($result)){ - $cloud_custom_data = $result; + $cloud_custom_data = array_merge($cloud_custom_data,$result); } } @@ -618,7 +618,7 @@ class ImService extends BaseService $OrderServicePackageService = new OrderServicePackageService(); $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); if (!empty($result)){ - $cloud_custom_data = $result; + $cloud_custom_data = array_merge($cloud_custom_data,$result); } } @@ -669,7 +669,7 @@ class ImService extends BaseService $OrderServicePackageService = new OrderServicePackageService(); $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); if (!empty($result)){ - $cloud_custom_data = $result; + $cloud_custom_data = array_merge($cloud_custom_data,$result); } } @@ -731,7 +731,7 @@ class ImService extends BaseService $OrderServicePackageService = new OrderServicePackageService(); $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); if (!empty($result)){ - $cloud_custom_data = $result; + $cloud_custom_data = array_merge($cloud_custom_data,$result); } } @@ -776,7 +776,7 @@ class ImService extends BaseService $OrderServicePackageService = new OrderServicePackageService(); $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); if (!empty($result)){ - $cloud_custom_data = $result; + $cloud_custom_data = array_merge($cloud_custom_data,$result); } } @@ -825,7 +825,7 @@ class ImService extends BaseService $OrderServicePackageService = new OrderServicePackageService(); $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); if (!empty($result)){ - $cloud_custom_data = $result; + $cloud_custom_data = array_merge($cloud_custom_data,$result); } } @@ -869,7 +869,7 @@ class ImService extends BaseService $OrderServicePackageService = new OrderServicePackageService(); $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); if (!empty($result)){ - $cloud_custom_data = $result; + $cloud_custom_data = array_merge($cloud_custom_data,$result); } } @@ -994,7 +994,7 @@ class ImService extends BaseService $OrderServicePackageService = new OrderServicePackageService(); $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); if (!empty($result)){ - $cloud_custom_data = $result; + $cloud_custom_data = array_merge($cloud_custom_data,$result); } } @@ -1044,7 +1044,7 @@ class ImService extends BaseService $OrderServicePackageService = new OrderServicePackageService(); $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); if (!empty($result)){ - $cloud_custom_data = $result; + $cloud_custom_data = array_merge($cloud_custom_data,$result); } } @@ -1095,7 +1095,7 @@ class ImService extends BaseService $OrderServicePackageService = new OrderServicePackageService(); $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); if (!empty($result)){ - $cloud_custom_data = $result; + $cloud_custom_data = array_merge($cloud_custom_data,$result); } } @@ -1189,7 +1189,7 @@ class ImService extends BaseService $OrderServicePackageService = new OrderServicePackageService(); $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); if (!empty($result)){ - $cloud_custom_data = $result; + $cloud_custom_data = array_merge($cloud_custom_data,$result); } } From 14ee6ebefe4107df889ab89434e62bcaec8771ed Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 25 Apr 2024 15:11:12 +0800 Subject: [PATCH 164/274] 1 --- app/Services/CouponService.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/Services/CouponService.php b/app/Services/CouponService.php index 771205d..7bc1650 100644 --- a/app/Services/CouponService.php +++ b/app/Services/CouponService.php @@ -205,11 +205,9 @@ class CouponService extends BaseService return true; } -// dump($coupon->toArray());die; foreach ($coupons as $coupon){ // 发放优惠卷 $res = $this->GrantUserCoupon($coupon['coupon_id'],$user_id); - dump($res);die; if (!$res){ // 发放失败 return false; From 66f6f1982d1c38ddf40b40cc88627a82abcc5bf5 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 25 Apr 2024 15:26:35 +0800 Subject: [PATCH 165/274] =?UTF-8?q?=E9=97=AE=E8=AF=8A=E7=BB=93=E6=9D=9F?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/ImService.php | 1 - app/Services/InquiryService.php | 9 +++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/Services/ImService.php b/app/Services/ImService.php index a87e7ac..79a2011 100644 --- a/app/Services/ImService.php +++ b/app/Services/ImService.php @@ -409,7 +409,6 @@ class ImService extends BaseService $cloud_custom_data['patient_family_data']['patient_name'] = $order_inquiry['patient_name']; $cloud_custom_data['patient_family_data']['patient_sex'] = $order_inquiry['patient_sex']; $cloud_custom_data['patient_family_data']['patient_age'] = $order_inquiry['patient_age']; - if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ // 获取im消息推送中,服务包订单相关的自定义参数 $OrderServicePackageService = new OrderServicePackageService(); diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index a003cdf..1856de3 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -1087,6 +1087,15 @@ class InquiryService extends BaseService $params['message_send_result'] = 1; $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $item['message_im'] = MessageIm::getOne($params); + + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取im消息推送中,服务包订单相关的自定义参数 + $OrderServicePackageService = new OrderServicePackageService(); + $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); + if (!empty($result)){ + $item = array_merge($item,$result); + } + } } } } From 59c73e82b6dfe561f4b26a2363e98035b5ff7c2b Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 25 Apr 2024 15:36:00 +0800 Subject: [PATCH 166/274] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E9=80=80=E6=AC=BE=E9=87=91=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index d92f700..5863dfe 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -31,6 +31,7 @@ use App\Model\OrderProduct; use App\Model\OrderProductCoupon; use App\Model\OrderProductItem; use App\Model\OrderProductLogistic; +use App\Model\OrderRefund; use App\Model\OrderServicePackage; use App\Model\OrderServicePackageCase; use App\Model\OrderServicePackageDetail; @@ -3042,6 +3043,26 @@ class PatientOrderService extends BaseService $order_service_package['discount_product_total_amount'] = $health_package['discount_product_total_amount']; } + // 获取退款金额 + $order_service_package['refund_total'] = 0; + + $params = array(); + $params['order_id'] = $order_service_package['order_id']; + $order_refund = OrderRefund::getOne($params); + if (!empty($order_refund)){ + $order_service_package['refund_total'] = $order_refund['refund_total']; + } + + // 获取退款数据 + $order_service_package['order_refund'] = array(); + + $params = array(); + $params['order_id'] = $order_service_package['order_id']; + $order_refund = OrderRefund::getList($params); + if (!empty($order_refund)){ + $order_service_package['order_refund'] = $order_refund; + } + return success($order_service_package->toArray()); } From c172908f114744811854ca7e101050e644e1e5a9 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 25 Apr 2024 15:57:21 +0800 Subject: [PATCH 167/274] =?UTF-8?q?=E6=9C=AA=E6=8E=A5=E8=AF=8A=E9=80=80?= =?UTF-8?q?=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php index bbd7fc6..e070492 100644 --- a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php @@ -164,7 +164,7 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage } // 如果是服务包的首单问诊订单即执行服务包退款 - if (count($order_service_package_inquiry) == 1){ + if (count($order_service_package_inquiry) != 0){ // 首单服务包问诊订单,但问诊订单未接诊,执行服务包退款 $OrderService = new OrderService(); $OrderService->orderRefund($order_service_package_inquiry[0]['order_service_no'], "医生未接诊"); From 10371cd945400beaf39b5b847a98541b6aea435b Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 25 Apr 2024 16:04:30 +0800 Subject: [PATCH 168/274] 1 --- config/routes.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/routes.php b/config/routes.php index 51f5c4b..1261d9e 100644 --- a/config/routes.php +++ b/config/routes.php @@ -125,7 +125,7 @@ Router::addGroup('/doctor', function () { Router::post('', [DoctorInquiryConfigController::class, 'addDoctorInquiryDifficultConfig']); // 修改医生问诊配置-疑难会诊-服务设置 - Router::put('/{config_service_id:\d+}', [DoctorInquiryConfigController::class, 'putDoctorInquiryDifficultConfig']); + Router::put('/{difficult_consultation_id:\d+}', [DoctorInquiryConfigController::class, 'putDoctorInquiryDifficultConfig']); }); // 随访包 From 7336febb168f1472950b0ed90157799cc310b01d Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 25 Apr 2024 16:24:29 +0800 Subject: [PATCH 169/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E6=AD=A4=E5=A4=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 60c6910..d03c977 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1511,8 +1511,8 @@ class OrderServicePackageService extends BaseService // 获取服务包当月已问诊次数 $month_inquiry_count = 0; - if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + if ($order_service_package_detail['monthly_frequency'] != 0) { + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); } // 服务包当月剩余问诊次数 From bfad01fda95cdb4ec1bc66e5ca0f9c8ebe7b8cc7 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 25 Apr 2024 16:42:15 +0800 Subject: [PATCH 170/274] 1 --- app/Controller/TestController.php | 5 ++++- app/Services/OrderServicePackageService.php | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/Controller/TestController.php b/app/Controller/TestController.php index ffe19c0..0d714d1 100644 --- a/app/Controller/TestController.php +++ b/app/Controller/TestController.php @@ -41,6 +41,7 @@ use App\Services\InquiryService; use App\Services\MessagePush; use App\Services\OrderPrescriptionService; use App\Services\OrderProductService; +use App\Services\OrderServicePackageService; use App\Services\PatientOrderService; use App\Services\UserDoctorService; use App\Utils\Data; @@ -459,7 +460,9 @@ class TestController extends AbstractController } public function test_17(){ - + $OrderServicePackageService = new OrderServicePackageService(); + $result = $OrderServicePackageService->getImServicePackageCloudCustomData("I642033922058559488"); + dump($result); } // 退款 diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index d03c977..6841821 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1269,7 +1269,7 @@ class OrderServicePackageService extends BaseService $params = array(); $params['package_id'] = $package_id; $params['product_id'] = $product_id; - $health_package_product = HealthPackage::getOne($params); + $health_package_product = HealthPackageProduct::getOne($params); if (empty($health_package_product)){ return $total_quantity; } From 7bfe86cb940cc46384f659e578b024ebdc1d2ed5 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 26 Apr 2024 13:30:09 +0800 Subject: [PATCH 171/274] 3 --- app/Services/PatientOrderService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 5863dfe..daef9f3 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -3190,7 +3190,7 @@ class PatientOrderService extends BaseService $params['order_product_id'] = $order_service_package_product['order_product_id']; $order_product = OrderProduct::getOne($params); if (!empty($order_product)){ - $result['order_product'] = $order_product->toArray(); + $result['order_product'][] = $order_product->toArray(); } } From 43d56eced78bf9ca44ce6562dcae160da086ac79 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 26 Apr 2024 13:41:55 +0800 Subject: [PATCH 172/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E5=8F=AF=E5=88=9B=E5=BB=BA=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95=20=E9=97=AE?= =?UTF-8?q?=E8=AF=8A=E6=AC=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 6841821..5fab6e3 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -173,7 +173,7 @@ class OrderServicePackageService extends BaseService // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 if ($order_service_package_detail['monthly_frequency'] != 0) { // 获取服务包当月已问诊次数 - $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['pay_time'],$service_type,$user_info['client_user_id'], $doctor_id); + $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['pay_time'],$service_type,$user_info['user_id'], $doctor_id); if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']) { // 超出当月问诊次数 @@ -664,7 +664,7 @@ class OrderServicePackageService extends BaseService // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 if ($order_service_package_detail['monthly_frequency'] != 0) { // 获取服务包当月已问诊次数 - $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$user_info['client_user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$user_info['user_id'], $order_service_package['doctor_id']); if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']) { return fail(HttpEnumCode::HTTP_ERROR, "超出服务包所包含的当月问诊次数"); @@ -1075,7 +1075,7 @@ class OrderServicePackageService extends BaseService // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 if ($order_service_package_detail['monthly_frequency'] != 0) { // 获取服务包当月已问诊次数 - $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$user_info['client_user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$user_info['user_id'], $order_service_package['doctor_id']); if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']) { // 超出当月问诊次数 From bbdb23e30d2430ae75dc648c8c3bd8e6def0d327 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 26 Apr 2024 14:05:31 +0800 Subject: [PATCH 173/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 5fab6e3..ec94b43 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -240,7 +240,7 @@ class OrderServicePackageService extends BaseService $result['status'] = 4; $result['message'] = "当前患者存在进行中的问诊订单"; - $result['data']['order_no'] = $order_inquiry['inquiry_no']; + $result['data']['order_no'] = $order_inquiry['order_inquiry_id']; return success($result); } @@ -250,7 +250,7 @@ class OrderServicePackageService extends BaseService if (!empty($order_inquiry)) { $result['status'] = 4; $result['message'] = "您和当前医生存在问诊中订单,无法够买服务包"; - $result['data']['order_no'] = $order_inquiry['inquiry_no']; + $result['data']['order_no'] = $order_inquiry['order_inquiry_id']; return success($result); } From 2f666ff37c2192178f49049db80c8aee94ce8e34 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 26 Apr 2024 14:07:24 +0800 Subject: [PATCH 174/274] =?UTF-8?q?=E6=97=A5=E5=BF=97=E7=BA=A7=E5=88=AB?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php index e070492..9c2f3cf 100644 --- a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php @@ -179,8 +179,8 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage return Result::REQUEUE; } - Log::getInstance("queue-CancelUnInquiryOrders")->error("取消未接诊问诊订单成功"); - Log::getInstance("queue-CancelUnInquiryOrders")->error("开始发送IM消息"); + Log::getInstance("queue-CancelUnInquiryOrders")->info("取消未接诊问诊订单成功"); + Log::getInstance("queue-CancelUnInquiryOrders")->info("开始发送IM消息"); try { // 获取订单医生数据 @@ -188,7 +188,7 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage $params['doctor_id'] = $order_inquiry['doctor_id']; $user_doctor = UserDoctor::getOne($params); if (empty($user_doctor)) { - Log::getInstance("queue-CancelUnInquiryOrders")->error("发送IM消息失败:医生数据错误"); + Log::getInstance("queue-CancelUnInquiryOrders")->error("医生数据错误"); return Result::ACK; } From 80a02857059749444a0a57420be3beb8cd3d7102 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 26 Apr 2024 14:24:51 +0800 Subject: [PATCH 175/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Common/Common.php | 23 +++++++++++++++++++++++ app/Controller/CallBackController.php | 11 +++-------- app/Services/MessagePush.php | 21 ++++++++++----------- 3 files changed, 36 insertions(+), 19 deletions(-) diff --git a/app/Common/Common.php b/app/Common/Common.php index 6034e40..49b476a 100644 --- a/app/Common/Common.php +++ b/app/Common/Common.php @@ -381,4 +381,27 @@ function inquiryModeToString(int|string $inquiry_mode): string $result = "未知"; } return $result; +} + +/** + * 转换订单类型为汉字 + * @param int|string $order_type + * @return string + */ +function orderTypeToString(int|string $order_type): string +{ + if ($order_type == 1) { + $result = "问诊订单"; + } elseif ($order_type == 2) { + $result = "药品订单"; + } elseif ($order_type == 3) { + $result = "检测订单"; + } elseif ($order_type == 4) { + $result = "随访包"; + } elseif ($order_type == 5) { + $result = "健康包"; + } else { + $result = "未知"; + } + return $result; } \ No newline at end of file diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index 3522ee1..c6c0541 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -2403,14 +2403,9 @@ class CallBackController extends AbstractController // 发送推送消息 if ($message['refund_status'] == "SUCCESS") { try { - $params = array(); - $params['order_service_id'] = $order_service_package['order_service_id']; - $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); - if (!empty($order_service_package_inquiry)){ - // 患者-服务包服务退款成功 - $MessagePush = new MessagePush($order_service_package['user_id'], $order_service_package_inquiry['inquiry_no']); - $MessagePush->refundServicePackageSuccess(); - } + // 患者-服务包服务退款成功 + $MessagePush = new MessagePush($order_service_package['user_id'], $order_service_package['order_service_no']); + $MessagePush->refundServicePackageSuccess(); } catch (\Exception $e) { // 验证失败 Log::getInstance("CallBack-wxPayInquiryRefund")->error("微信退款回调处理成功,推送消息失败:" . $e->getMessage()); diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index 33ed3b9..a70acca 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -3580,7 +3580,7 @@ class MessagePush extends BaseService $link_params = array(); $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; - $link_params['order_no'] = $this->order['order_no']; + $link_params['order_no'] = $this->order_service_package['order_no']; $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; $link_params['doctor_user_id'] = $user_doctor['user_id']; $link_params['patient_user_id'] = $this->order_inquiry['user_id']; @@ -3631,7 +3631,7 @@ class MessagePush extends BaseService try { // 获取医生数据 $params = array(); - $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $params['doctor_id'] = $this->order['doctor_id']; $user_doctor = UserDoctor::getOne($params); if (empty($user_doctor)) { Log::getInstance("MessagePush")->error("医生数据为空"); @@ -3639,7 +3639,7 @@ class MessagePush extends BaseService } // 转换问诊订单订单接诊方式-字符串 - $inquiry_mode = orderServiceTypeToString($this->order_inquiry['inquiry_mode']); + $order_type = orderTypeToString($this->order['order_type']); // 站内 $data = array(); @@ -3647,17 +3647,16 @@ class MessagePush extends BaseService $data['notice_type'] = 3; $data['notice_system_type'] = 1; $data['from_name'] = "肝胆小秘书"; - $data['notice_brief_title'] = "您购买的{$inquiry_mode}服务,订单取消成功,点击查看详情。"; - $data['notice_title'] = "您购买的{$inquiry_mode}服务,订单取消成功,点击查看详情。"; - $data['notice_content'] = "您购买的{$inquiry_mode}服务,订单取消成功,平台已自动发起退款,请注意查看账户信息。"; + $data['notice_brief_title'] = "您购买的{$order_type}服务,订单取消成功,点击查看详情。"; + $data['notice_title'] = "您购买的{$order_type}服务,订单取消成功,点击查看详情。"; + $data['notice_content'] = "您购买的{$order_type}服务,订单取消成功,平台已自动发起退款,请注意查看账户信息。"; $data['link_type'] = 15; $link_params = array(); - $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; $link_params['order_no'] = $this->order['order_no']; - $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['inquiry_type'] = 1; $link_params['doctor_user_id'] = $user_doctor['user_id']; - $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $link_params['patient_user_id'] = $this->order['user_id']; $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 $data['button_type'] = 4; @@ -3674,7 +3673,7 @@ class MessagePush extends BaseService $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 $sub_data['params']['page'] = "healthyService/pages/healthyOrderDetail/healthyOrderDetail?order_service_id={$this->order['order_no']}"; $sub_data['params']['data'] = [ - "thing1" => "{$inquiry_mode}服务",// 问诊内容 + "thing1" => "{$order_type}服务",// 问诊内容 "thing2" => "取消订单成功",// 提醒内容 "name3" => (string)$user_doctor['user_name'],// 问诊医生 "thing4" => "平台已自动发起退款,请注意查看账户信息",// 提示说明 @@ -3688,7 +3687,7 @@ class MessagePush extends BaseService $sms_data['user_id'] = $this->user['user_id']; $template_param = array(); - $template_param['type'] = $inquiry_mode; + $template_param['type'] = $order_type; $template_param['name'] = (string)$user_doctor['user_name']; $sms_data['template_param'] = $template_param; From a342639ee86fc9f3c81501f34253408f2300d58d Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 26 Apr 2024 14:29:53 +0800 Subject: [PATCH 176/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=A8=E9=80=811?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ncelUnInquiryOrdersDelayDirectConsumer.php | 23 ++++++++----------- app/Services/MessagePush.php | 4 ++-- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php index 9c2f3cf..cd0a95d 100644 --- a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php @@ -153,21 +153,18 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage // 服务包问诊订单处理 if ($order_inquiry['inquiry_type'] == 1){ if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ - // 获取服务包订单数据 - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $order_service_package_inquiry = OrderServicePackageInquiry::getList($params); - if (empty($order_service_package_inquiry)){ - Db::rollBack(); - Log::getInstance("queue-CancelUnInquiryOrders")->error("获取服务包订单数据失败"); - return Result::ACK; - } + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + // 检测问诊是否服务包首次问诊 + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); + if ($is_first){ + // 如果是服务包的首单问诊订单即执行服务包退款 - // 如果是服务包的首单问诊订单即执行服务包退款 - if (count($order_service_package_inquiry) != 0){ - // 首单服务包问诊订单,但问诊订单未接诊,执行服务包退款 $OrderService = new OrderService(); - $OrderService->orderRefund($order_service_package_inquiry[0]['order_service_no'], "医生未接诊"); + $OrderService->orderRefund($order_service_no, "医生未接诊"); } } } diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index a70acca..5e094ed 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -3225,7 +3225,7 @@ class MessagePush extends BaseService $sub_data = array(); $sub_data['push_user_id'] = $this->user['user_id']; $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 - $sub_data['params']['page'] = "healthyService/pages/healthyOrderDetail/healthyOrderDetail?order_service_id={$this->order['order_no']}"; + $sub_data['params']['page'] = "healthyService/pages/healthyOrderDetail/healthyOrderDetail?order_service_id={$this->order_service_package['order_service_no']}"; $sub_data['params']['data'] = [ "thing1" => "{$order_type}服务",// 问诊内容 "thing2" => "医生已接受",// 提醒内容 @@ -3598,7 +3598,7 @@ class MessagePush extends BaseService $sub_data = array(); $sub_data['push_user_id'] = $this->user['user_id']; $sub_data['wx_template_id'] = "9v6dZhjg09CttLd3W9nEUV_-eshNc4BYYNy59jglvZE";// 问诊提醒 - $sub_data['params']['page'] = "healthyService/pages/healthyOrderDetail/healthyOrderDetail?order_service_id={$this->order['order_no']}"; + $sub_data['params']['page'] = "healthyService/pages/healthyOrderDetail/healthyOrderDetail?order_service_id={$this->order_service_package['order_service_no']}"; $sub_data['params']['data'] = [ "thing1" => "{$inquiry_mode}服务",// 问诊内容 "thing2" => "未及时确认",// 提醒内容 From 259143a47172553097165c4b0c65fdb9d5e7c31c Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 26 Apr 2024 14:36:59 +0800 Subject: [PATCH 177/274] 1 --- app/Services/OrderService.php | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 338fffe..f7bcca0 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -764,10 +764,31 @@ class OrderService extends BaseService return $result; } - if (!in_array($order['refund_status'], [0, 4, 5])) { + if ($order['refund_status'] == 1) { // 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) $result['status'] = 0; - $result['message'] = "订单正在退款中"; + $result['message'] = "订单已申请退款"; + return $result; + } + + if ($order['refund_status'] == 2) { + // 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + $result['status'] = 0; + $result['message'] = "订单退款中"; + return $result; + } + + if ($order['refund_status'] == 3) { + // 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + $result['status'] = 0; + $result['message'] = "订单已退款成功"; + return $result; + } + + if ($order['refund_status'] == 6) { + // 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + $result['status'] = 0; + $result['message'] = "订单退款异常"; return $result; } From 3c6d820ee2c05eba6b46259f405d14541cb67ec2 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 26 Apr 2024 17:07:42 +0800 Subject: [PATCH 178/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95=E9=80=80=E6=AC=BE=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AssignDoctorDelayDirectConsumer.php | 29 ++++++++++++++----- ...ncelUnInquiryOrdersDelayDirectConsumer.php | 29 ++++++++++++++++--- .../getPrescriptionOrderStatusCommand.php | 14 ++++++++- app/Services/OrderService.php | 11 ------- 4 files changed, 59 insertions(+), 24 deletions(-) diff --git a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php index 0ede303..8bf5619 100644 --- a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php @@ -9,6 +9,7 @@ use App\Amqp\Producer\CancelUnInquiryOrdersDelayDirectProducer; use App\Amqp\Producer\DoctorNotYetInquiryDelayDirectProducer; use App\Amqp\Producer\UserCouponExpiredDelayDirectProducer; use App\Constants\HttpEnumCode; +use App\Model\Order; use App\Model\OrderInquiry; use App\Model\OrderInquiryCase; use App\Model\UserDoctor; @@ -105,12 +106,19 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage return Result::ACK; } - Log::getInstance("queue-AssignDoctor")->info("信息:订单退款"); - $OrderService = new OrderService(); $OrderService->orderRefund($order_inquiry['inquiry_no'], "无可分配医生"); - Log::getInstance("queue-AssignDoctor")->info("取消问诊订单"); + // 取消订单 + $order_data = array(); + $order_data['cancel_status'] = 1; + $order_data['cancel_time'] = date("Y-m-d H:i:s", time()); + $order_data['cancel_remarks'] = "未分配到合适的医生"; + $order_data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_id'] = $order_inquiry['order_id']; + Order::edit($params, $order_data); $save_data = array(); $save_data['inquiry_status'] = 7; @@ -123,8 +131,6 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; OrderInquiry::edit($params, $save_data); - Log::getInstance("queue-AssignDoctor")->info("已退款"); - Db::commit(); try { @@ -152,12 +158,19 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage return Result::ACK; } - Log::getInstance("queue-AssignDoctor")->info("订单退款"); - $OrderService = new OrderService(); $OrderService->orderRefund($order_inquiry['inquiry_no'], "未分配到合适的医生"); - Log::getInstance("queue-AssignDoctor")->info("取消问诊订单"); + // 取消订单 + $order_data = array(); + $order_data['cancel_status'] = 1; + $order_data['cancel_time'] = date("Y-m-d H:i:s", time()); + $order_data['cancel_remarks'] = "未分配到合适的医生"; + $order_data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_id'] = $order_inquiry['order_id']; + Order::edit($params, $order_data); $save_data = array(); $save_data['inquiry_status'] = 7; diff --git a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php index cd0a95d..053f7a1 100644 --- a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php @@ -120,8 +120,8 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage $order_data['updated_at'] = date("Y-m-d H:i:s", time()); $params = array(); - $params['order_no'] = $order_inquiry['inquiry_no']; - Order::edit($params,$order_data); + $params['order_id'] = $order_inquiry['order_id']; + Order::edit($params, $order_data); // 取消问诊订单 $order_inquiry_data = array(); @@ -161,10 +161,31 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage // 检测问诊是否服务包首次问诊 $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); if ($is_first){ - // 如果是服务包的首单问诊订单即执行服务包退款 + // 取消订单 + $order_data = array(); + $order_data['cancel_status'] = 1; + $order_data['cancel_time'] = date("Y-m-d H:i:s", time()); + $order_data['cancel_remarks'] = "医生未接受服务"; + $order_data['updated_at'] = date("Y-m-d H:i:s", time()); + $params = array(); + $params['order_no'] = $order_service_no; + Order::edit($params, $order_data); + + // 取消问诊订单 + $order_inquiry_data = array(); + $order_inquiry_data['order_service_status'] = 5; + $order_inquiry_data['cancel_time'] = date("Y-m-d H:i:s", time()); + $order_inquiry_data['cancel_remarks'] = "医生未接受服务"; // 取消订单备注 + $order_inquiry_data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_service_no'] = $order_service_no; + OrderInquiry::edit($params, $order_inquiry_data); + + // 如果是服务包的首单问诊订单即执行服务包退款 $OrderService = new OrderService(); - $OrderService->orderRefund($order_service_no, "医生未接诊"); + $OrderService->orderRefund($order_service_no, "医生未接受服务"); } } } diff --git a/app/Command/getPrescriptionOrderStatusCommand.php b/app/Command/getPrescriptionOrderStatusCommand.php index ae56a5c..97e6014 100644 --- a/app/Command/getPrescriptionOrderStatusCommand.php +++ b/app/Command/getPrescriptionOrderStatusCommand.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace App\Command; +use App\Model\Order; use App\Model\OrderPrescription; use App\Model\OrderProduct; use App\Model\UserPatient; @@ -277,8 +278,19 @@ class getPrescriptionOrderStatusCommand extends HyperfCommand * @param array|object $order_product * @param string $cancel_remarks */ - protected function savePreFailedOrderStatus(array|object $order_product,string $cancel_remarks) + protected function savePreFailedOrderStatus(array|object $order_product,string $cancel_remarks): void { + // 取消订单 + $order_data = array(); + $order_data['cancel_status'] = 1; + $order_data['cancel_time'] = date("Y-m-d H:i:s", time()); + $order_data['cancel_remarks'] = $cancel_remarks; + $order_data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_id'] = $order_product['order_id']; + Order::edit($params, $order_data); + // 订单状态(1:待支付 2:待发货 3:已发货 4:已签收 5:已取消) $params = array(); $params['order_product_id'] = $order_product['order_product_id']; diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index f7bcca0..6dbee40 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -148,17 +148,6 @@ class OrderService extends BaseService throw new BusinessException("订单支付状态错误"); } -// // 取消订单 -// $order_data = array(); -// $order_data['cancel_status'] = 1; -// $order_data['cancel_time'] = date("Y-m-d H:i:s", time()); -// $order_data['cancel_remarks'] = "医生未接诊"; -// $order_data['updated_at'] = date("Y-m-d H:i:s", time()); -// -// $params = array(); -// $params['order_id'] = $order['order_id']; -// Order::edit($params, $order_data); - // 处理对应订单 if ($order['order_type'] == 1) { // 检测问诊订单可退款状态 From cc1215ffdbffeb5498cd38121d5376d655a0f6fb Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Sun, 28 Apr 2024 09:25:58 +0800 Subject: [PATCH 179/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E5=8D=B7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/UserCoupon.php | 14 +- app/Services/UserCouponService.php | 285 +++++++++++++++++++++++++---- 2 files changed, 260 insertions(+), 39 deletions(-) diff --git a/app/Model/UserCoupon.php b/app/Model/UserCoupon.php index 2481c13..220e43d 100644 --- a/app/Model/UserCoupon.php +++ b/app/Model/UserCoupon.php @@ -132,7 +132,7 @@ class UserCoupon extends Model * @param array $fields 字段 * @return Collection|array */ - public static function getUserProductUsableCoupon(string|int $user_id,array $coupon_product_datas,array $fields = ['*']): Collection|array + public static function getUserProductUsableCoupon(string|int $user_id,array $coupon_product_datas = [],array $fields = ['*']): Collection|array { $params = array(); $params[] = ['user_id', '=', $user_id]; @@ -144,12 +144,12 @@ class UserCoupon extends Model ->whereHas('Coupon', function ($query) use ($coupon_product_datas) { $query->where("coupon_client",1) ->where("coupon_status",1) - ->whereIn("application_scope",[1,3,4,5]) - ->where(function ($query) use ($coupon_product_datas) { - foreach ($coupon_product_datas as $coupon_product_data){ - $query->orwhere("product_id","=",$coupon_product_data['product_id']); - } - }); + ->whereIn("application_scope",[1,3,4,5,6]); +// ->when(function ($query) use ($coupon_product_datas) { +// foreach ($coupon_product_datas as $coupon_product_data){ +// $query->orwhere("product_id","=",$coupon_product_data['product_id']); +// } +// }); }) ->where($params) ->groupBy("coupon_id") diff --git a/app/Services/UserCouponService.php b/app/Services/UserCouponService.php index 658ee85..7a9132c 100644 --- a/app/Services/UserCouponService.php +++ b/app/Services/UserCouponService.php @@ -103,9 +103,166 @@ class UserCouponService extends BaseService * @param array $coupon_product_datas * @return array */ +// public function getUserProductUsableCoupon(string|int $user_id, array $coupon_product_datas): array +// { +// $user_coupons = UserCoupon::getUserProductUsableCoupon($user_id); +// if (empty($user_coupons)) { +// return array(); +// } +// +// $user_coupons = $user_coupons->toArray(); +// +// $coupons = array(); +// foreach ($user_coupons as $user_coupon){ +// $user_coupon['coupon']['user_coupon_id'] = $user_coupon['user_coupon_id']; +// $coupons[] = $user_coupon['coupon']; +// } +// +// // 选中的优惠卷 +// $selected_coupons = array(); +// +// // 优惠卷最高金额 +// $coupon_high_price = 0; +// +// // 是否存在互斥卷 +// $is_mutex = 0; +// +// // 新增字段 +// foreach ($coupons as $key => $coupon) { +// $coupons[$key]['is_can_use'] = 1;// 是否可使用 +// $coupons[$key]['cannot_use_coupon_reason'] = ""; // 不可使用原因 +// } +// +// // 处理优惠卷数量限制问题 +// foreach ($coupons as $key => $coupon) { +// // 处理数量优惠卷 +// if ($coupon['coupon_type'] == 3){ +// // 数量是否足够标识字段 +// $quantity_quantity = 0; +// +// foreach ($coupon_product_datas as $coupon_product_data){ +// // 存在指定商品的情况,如该优惠卷不包含此商品,跳过 +// if (!empty($coupon['product_id'])){ +// if (!str_contains($coupon['product_id'], $coupon_product_data['product_id'])){ +// continue; +// } +// } +// +// // 判断商品数量是否满足 +// if($coupon['min_usable_number'] > $coupon_product_data['product_num']){ +// continue; +// } +// +// // 标记为数量足够 +// $quantity_quantity = 1; +// } +// +// if ($quantity_quantity == 0){ +// // 此优惠卷无商品能达到规定最小数量 +// $coupons[$key]['is_can_use'] = 0; +// $coupons[$key]['cannot_use_coupon_reason'] = "商品不足" . $coupon['min_usable_number'] . "盒,不满足使用优惠卷条件"; +// continue; +// } +// } +// +// // 处理满减金额/无门槛优惠卷 +// if ($coupon['coupon_type'] == 2 || $coupon['coupon_type'] == 1){ +// // 可共用一个优惠卷的商品金额问题 +// $product_price = 0; +// +// foreach ($coupon_product_datas as $coupon_product_data) { +// // 如该优惠卷不包含此商品,跳过 +// if (!empty($coupon['product_id'])){ +// if (!str_contains($coupon['product_id'], $coupon_product_data['product_id'])) { +// continue; +// } +// } +// +// $product_price = bcadd($product_price, +// bcmul( // 商品价格*数量 +// $coupon_product_data['product_price'], +// $coupon_product_data['product_num'], +// 2 +// ), +// 2 +// ); +// } +// +// // 满减金额优惠卷 +// if ($coupon['coupon_type'] == 2){ +// if ($coupon['with_amount'] > $product_price){ +// // 此优惠卷因商品金额不足,无法使用 +// $coupons[$key]['is_can_use'] = 0; +// continue; +// } +// } +// +// // 无门槛优惠卷 +// if ($coupon['coupon_type'] == 1){ +// if ($product_price <= 0){ +// // 商品总金额已经为0,不使用优惠卷 +// $coupons[$key]['is_can_use'] = 0; +// continue; +// } +// } +// } +// +// // 判断品牌是否符合-暂无品牌 +// // +// } +// +// // 可选择优惠卷中是否存在互斥卷 +// foreach ($coupons as $coupon) { +// if ($coupon['is_can_use'] == 0){ +// continue; +// } +// +// if ($coupon['is_mutex'] == 1) { +// $is_mutex = 1; +// } +// } +// +// // 处理存在互斥卷情况 +// foreach ($coupons as $coupon) { +// if ($coupon['is_can_use'] == 0){ +// continue; +// } +// +// if (empty($selected_coupons)) { +// $selected_coupons[] = $coupon; // 选中的优惠卷数据 +// +// $coupon_high_price = $coupon['coupon_price']; +// +// continue; +// } +// +// // 处理存在互斥卷情况 +// if ($is_mutex == 1) { +// // 选择金额最高的为选中 +// if ($coupon['coupon_price'] < $coupon_high_price){ +// continue; +// } +// +// if ($coupon['coupon_price'] > $coupon_high_price) { +// $coupon_high_price = $coupon['coupon_price']; +// +// // 选中的优惠卷数据置空 +// $selected_coupons = array(); +// $selected_coupons[] = $coupon; +// +// continue; +// } +// } +// +// $selected_coupons[] = $coupon; // 选中的优惠卷数据 +// } +// +// return $selected_coupons; +// } + public function getUserProductUsableCoupon(string|int $user_id, array $coupon_product_datas): array { - $user_coupons = UserCoupon::getUserProductUsableCoupon($user_id,$coupon_product_datas); + $user_coupons = UserCoupon::getUserProductUsableCoupon($user_id); if (empty($user_coupons)) { return array(); } @@ -133,21 +290,57 @@ class UserCouponService extends BaseService $coupons[$key]['cannot_use_coupon_reason'] = ""; // 不可使用原因 } - // 处理优惠卷数量限制问题 foreach ($coupons as $key => $coupon) { - // 处理数量优惠卷 - if ($coupon['coupon_type'] == 3 && !empty($coupon['product_id'])){ + // 优惠卷类型(1:无门槛 2:满减 3:数量) + if ($coupon['coupon_type'] == 3){ // 数量是否足够标识字段 $quantity_quantity = 0; - foreach ($coupon_product_datas as $coupon_product_data){ - // 如该优惠卷不包含此商品,跳过 - if (!str_contains($coupon['product_id'], $coupon_product_data['product_id'])){ - continue; + // 品牌 + if ($coupon['application_scope'] == 3){ + // 获取商品品牌 + // 计算相同品牌的商品总数量 + // 标记为数量足够 + continue; + } + + // 类别 + if ($coupon['application_scope'] == 4){ + // 获取商品类别 + // 计算相同类别的商品总数量 + // 标记为数量足够 + continue; + } + + // 单品使用 + if ($coupon['application_scope'] == 5){ + foreach ($coupon_product_datas as $coupon_product_data){ + if (!str_contains($coupon['product_id'], $coupon_product_data['product_id'])){ + continue; + } + + // 判断商品数量是否满足 + if($coupon['min_usable_number'] > $coupon_product_data['product_num']){ + continue; + } + + // 标记为数量足够 + $quantity_quantity = 1; + + break; + } + } + + // 全场通用/全品类药品 + if ($coupon['application_scope'] == 1 || $coupon['application_scope'] == 6){ + // 获取总商品数量 + $product_num = 0; + foreach ($coupon_product_datas as $coupon_product_data){ + $product_num = $product_num + $coupon_product_data['product_num']; } // 判断商品数量是否满足 - if($coupon['min_usable_number'] > $coupon_product_data['product_num']){ + if($coupon['min_usable_number'] > $product_num){ continue; } @@ -159,30 +352,60 @@ class UserCouponService extends BaseService // 此优惠卷无商品能达到规定最小数量 $coupons[$key]['is_can_use'] = 0; $coupons[$key]['cannot_use_coupon_reason'] = "商品不足" . $coupon['min_usable_number'] . "盒,不满足使用优惠卷条件"; + continue; } } - // 处理满减金额/无门槛优惠卷 + // 满减金额/无门槛优惠卷 if ($coupon['coupon_type'] == 2 || $coupon['coupon_type'] == 1){ - // 可共用一个优惠卷的商品金额问题 + // 获取商品总金额 $product_price = 0; - foreach ($coupon_product_datas as $coupon_product_data) { - // 如该优惠卷不包含此商品,跳过 - if (!empty($coupon['product_id'])){ - if (!str_contains($coupon['product_id'], $coupon_product_data['product_id'])) { + // 品牌 + if ($coupon['application_scope'] == 3){ + // 获取商品品牌 + // 计算相同品牌的商品总金额 + continue; + } + + // 类别 + if ($coupon['application_scope'] == 4){ + // 获取商品类别 + // 计算相同类别的商品总金额 + continue; + } + + // 单品使用 + if ($coupon['application_scope'] == 5){ + foreach ($coupon_product_datas as $coupon_product_data){ + if (!str_contains($coupon['product_id'], $coupon_product_data['product_id'])){ continue; } - } - $product_price = bcadd($product_price, - bcmul( // 商品价格*数量 - $coupon_product_data['product_price'], - $coupon_product_data['product_num'], + $product_price = bcadd($product_price, + bcmul( // 商品价格*数量 + $coupon_product_data['product_price'], + $coupon_product_data['product_num'], + 2 + ), 2 - ), - 2 - ); + ); + } + } + + // 全场通用/全品类药品 + if ($coupon['application_scope'] == 1 || $coupon['application_scope'] == 6){ + foreach ($coupon_product_datas as $coupon_product_data){ + // 计算商品总金额 + $product_price = bcadd($product_price, + bcmul( // 商品价格*数量 + $coupon_product_data['product_price'], + $coupon_product_data['product_num'], + 2 + ), + 2 + ); + } } // 满减金额优惠卷 @@ -190,6 +413,7 @@ class UserCouponService extends BaseService if ($coupon['with_amount'] > $product_price){ // 此优惠卷因商品金额不足,无法使用 $coupons[$key]['is_can_use'] = 0; + continue; } } @@ -198,11 +422,10 @@ class UserCouponService extends BaseService if ($product_price <= 0){ // 商品总金额已经为0,不使用优惠卷 $coupons[$key]['is_can_use'] = 0; + continue; } } } - - // 判断品牌是否符合-暂无品牌 } // 可选择优惠卷中是否存在互斥卷 @@ -237,15 +460,13 @@ class UserCouponService extends BaseService continue; } - if ($coupon['coupon_price'] > $coupon_high_price) { - $coupon_high_price = $coupon['coupon_price']; + $coupon_high_price = $coupon['coupon_price']; - // 选中的优惠卷数据置空 - $selected_coupons = array(); - $selected_coupons[] = $coupon; + // 选中的优惠卷数据置空 + $selected_coupons = array(); + $selected_coupons[] = $coupon; - continue; - } + continue; } $selected_coupons[] = $coupon; // 选中的优惠卷数据 From 85024656836dd59d387cc13cdc9f3f81a7ec3e5e Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Sun, 28 Apr 2024 10:17:25 +0800 Subject: [PATCH 180/274] 1 --- app/Controller/CallBackController.php | 4 ++-- app/Controller/TestController.php | 12 +++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index c6c0541..cb12a3b 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -2461,9 +2461,9 @@ class CallBackController extends AbstractController // 验证订单状态 if ($order_service_package['order_service_status'] != 1) { - // 检测订单状态(1:待支付 2:待绑定 3:检测中 4:检测完成 5:已取消) + // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) Db::rollBack(); - Log::getInstance("CallBack-wxPayServiceSuccess")->error("检测微信支付回调数据处理失败,订单状态当前为" . $order_service_package['order_service_status']); + Log::getInstance("CallBack-wxPayServiceSuccess")->error($order_service_package['order_service_status']); return $server->serve(); } diff --git a/app/Controller/TestController.php b/app/Controller/TestController.php index 0d714d1..cee9246 100644 --- a/app/Controller/TestController.php +++ b/app/Controller/TestController.php @@ -460,9 +460,15 @@ class TestController extends AbstractController } public function test_17(){ - $OrderServicePackageService = new OrderServicePackageService(); - $result = $OrderServicePackageService->getImServicePackageCloudCustomData("I642033922058559488"); - dump($result); + $params = array(); + $params['order_inquiry_id'] = "643019792966791168"; + $order_inquiry = OrderInquiry::getOne($params); + + // 发送im消息 + $imService = new ImService(); + + // 等待医生接诊 + $imService->waitDoctorInquiry($order_inquiry, "516900370248146944", "516898713896521728"); } // 退款 From 20948496f6105fca1e2bd22ed49ae7df7386e9f4 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Sun, 28 Apr 2024 10:28:50 +0800 Subject: [PATCH 181/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96im=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E4=B8=AD=EF=BC=8C=E6=9C=8D=E5=8A=A1=E5=8C=85?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=9B=B8=E5=85=B3=E7=9A=84=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E5=8F=82=E6=95=B0=E5=A2=9E=E5=8A=A0=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E7=B1=BB=E5=9E=8B=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/CallBackController.php | 1 - app/Services/OrderServicePackageService.php | 10 ++++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index cb12a3b..e34b827 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -2774,7 +2774,6 @@ class CallBackController extends AbstractController $time = 60 * 10; } - Log::getInstance("CallBack-wxPayServiceSuccess")->info($time); $data = array(); $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $data['order_no'] = $order_inquiry['inquiry_no']; diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index ec94b43..1f32903 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1535,10 +1535,12 @@ class OrderServicePackageService extends BaseService $remaining_quantity = 0; // 获取服务包内所有药品 - $health_package_products = $OrderServicePackageService->getOrderServiceProduct($order_service_package_detail['package_id']); - foreach ($health_package_products as $health_package_product) { - // 获取服务包内某一药品的剩余数量 - $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$health_package_product['product_id'],$health_package_product['quantity']); + if ($order_service_package['order_service_type'] == 1){ + $health_package_products = $OrderServicePackageService->getOrderServiceProduct($order_service_package_detail['package_id']); + foreach ($health_package_products as $health_package_product) { + // 获取服务包内某一药品的剩余数量 + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$health_package_product['product_id'],$health_package_product['quantity']); + } } $result = array(); From ef7ebc2f891442498da2a8278f90babe2088fd0a Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Sun, 28 Apr 2024 10:31:45 +0800 Subject: [PATCH 182/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96im=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E4=B8=AD=EF=BC=8C=E6=9C=8D=E5=8A=A1=E5=8C=85?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=9B=B8=E5=85=B3=E7=9A=84=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E5=8F=82=E6=95=B0=E5=A2=9E=E5=8A=A0=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E7=B1=BB=E5=9E=8B=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/CallBackController.php | 40 +++++++++++++-------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index e34b827..78c68c1 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -104,7 +104,7 @@ class CallBackController extends AbstractController Log::getInstance("CallBack-wxPayInquirySuccess")->error("问诊微信支付回调数据处理失败,缺少外部订单号"); return $server->serve(); } - } catch (\Exception $e) { + } catch (\Throwable $e) { // 验证失败 Log::getInstance("CallBack-wxPayInquirySuccess")->error($e->getMessage()); return $this->wxPayErrorReturn($e->getMessage()); @@ -201,7 +201,7 @@ class CallBackController extends AbstractController Order::edit($params,$data); Db::commit(); - } catch (\Exception $e) { + } catch (\Throwable $e) { // 验证失败 Db::rollBack(); Log::getInstance("CallBack-wxPayInquirySuccess")->error($e->getMessage()); @@ -267,7 +267,7 @@ class CallBackController extends AbstractController Log::getInstance("CallBack-wxPayInquirySuccess")->info("发送im消息成功"); } } - } catch (\Exception $e) { + } catch (\Throwable $e) { // 验证失败 Log::getInstance("CallBack-wxPayInquirySuccess")->error("问诊微信支付回调数据处理成功,分配医生/发送问诊消息失败:" . $e->getMessage()); return $server->serve(); @@ -305,7 +305,7 @@ class CallBackController extends AbstractController Log::getInstance("CallBack-wxPayInquiryRefund")->error("微信退款回调数据错误"); return $server->serve(); } - } catch (\Exception $e) { + } catch (\Throwable $e) { // 验证失败 Log::getInstance("CallBack-wxPayInquiryRefund")->error($e->getMessage()); return $this->wxPayErrorReturn($e->getMessage()); @@ -352,7 +352,7 @@ class CallBackController extends AbstractController $OrderService->orderRefundResult($order_inquiry['inquiry_no'],$message['refund_status'],$message['success_time']); Db::commit(); - } catch (\Exception $e) { + } catch (\Throwable $e) { // 验证失败 Db::rollBack(); Log::getInstance("CallBack-wxPayInquiryRefund")->error("微信支付回调数据验证失败:" . $e->getMessage()); @@ -404,7 +404,7 @@ class CallBackController extends AbstractController Log::getInstance("CallBack-wxPayProductSuccess")->error("缺少外部订单号"); return $server->serve(); } - } catch (\Exception $e) { + } catch (\Throwable $e) { // 验证失败 Log::getInstance("CallBack-wxPayProductSuccess")->error($e->getMessage()); return $this->wxPayErrorReturn($e->getMessage()); @@ -498,7 +498,7 @@ class CallBackController extends AbstractController } Db::commit(); - } catch (\Exception $e) { + } catch (\Throwable $e) { Db::rollBack(); Log::getInstance("CallBack-wxPayProductSuccess")->error("药品微信支付回调数据处理失败:" . $e->getMessage()); return $this->wxPayErrorReturn($e->getMessage()); @@ -580,7 +580,7 @@ class CallBackController extends AbstractController Log::getInstance("CallBack-wxPayProductRefund")->error("缺少外部订单号"); return $server->serve(); } - } catch (\Exception $e) { + } catch (\Throwable $e) { // 验证失败 Log::getInstance("CallBack-wxPayProductRefund")->error($e->getMessage()); return $this->wxPayErrorReturn($e->getMessage()); @@ -637,7 +637,7 @@ class CallBackController extends AbstractController $OrderService->orderRefundResult($order_product['order_product_no'],$message['refund_status'],$message['success_time']); Db::commit(); - } catch (\Exception $e) { + } catch (\Throwable $e) { // 验证失败 Db::rollBack(); Log::getInstance("CallBack-wxPayProductRefund")->error("药品微信退款回调数据处理失败:" . $e->getMessage()); @@ -657,7 +657,7 @@ class CallBackController extends AbstractController $MessagePush = new MessagePush($user_patient['user_id']); $MessagePush->refundProductSuccess($order_product['order_product_id']); } - } catch (\Exception $e) { + } catch (\Throwable $e) { // 验证失败 Log::getInstance("CallBack-wxPayProductRefund")->error("微信退款回调处理成功,推送消息失败:" . $e->getMessage()); return $server->serve(); @@ -726,7 +726,7 @@ class CallBackController extends AbstractController }else{ return $this->ImErrorReturn("非法事件"); } - } catch (\Exception $e) { + } catch (\Throwable $e) { // 验证失败 return $this->ImErrorReturn($e->getMessage()); } @@ -830,7 +830,7 @@ class CallBackController extends AbstractController } - } catch (\Exception $e) { + } catch (\Throwable $e) { // 验证失败 Log::getInstance()->error("处方平台物流回调数据处理失败:" . $e->getMessage()); return $this->platformLogisticsErrorReturn($e->getMessage()); @@ -1064,7 +1064,7 @@ class CallBackController extends AbstractController } return $this->LogisticsSuccessReturn(); - } catch (\Exception $e) { + } catch (\Throwable $e) { return $this->LogisticsFailReturn("异常:" . $e->getMessage()); } } @@ -1224,7 +1224,7 @@ class CallBackController extends AbstractController Order::edit($params,$data); Db::commit(); - } catch (\Exception $e) { + } catch (\Throwable $e) { // 验证失败 Db::rollBack(); Log::getInstance("CallBack-xPayDetectionSuccess")->error("问诊微信支付回调数据处理失败:" . $e->getMessage()); @@ -1264,7 +1264,7 @@ class CallBackController extends AbstractController Log::getInstance("CallBack-wxPayDetectionRefund")->error("缺少外部订单号"); return $server->serve(); } - } catch (\Exception $e) { + } catch (\Throwable $e) { // 验证失败 Log::getInstance("CallBack-wxPayDetectionRefund")->error($e->getMessage()); return $this->wxPayErrorReturn($e->getMessage()); @@ -1311,7 +1311,7 @@ class CallBackController extends AbstractController $OrderService->orderRefundResult($order_detection['detection_no'],$message['refund_status'],$message['success_time']); Db::commit(); - } catch (\Exception $e) { + } catch (\Throwable $e) { // 验证失败 Db::rollBack(); Log::getInstance("CallBack-wxPayDetectionRefund")->error("微信支付回调数据验证失败:" . $e->getMessage()); @@ -2344,7 +2344,7 @@ class CallBackController extends AbstractController Log::getInstance("CallBack-wxPayServiceRefund")->error("缺少外部订单号"); return $server->serve(); } - } catch (\Exception $e) { + } catch (\Throwable $e) { // 验证失败 Log::getInstance("CallBack-wxPayServiceRefund")->error($e->getMessage()); return $this->wxPayErrorReturn($e->getMessage()); @@ -2391,7 +2391,7 @@ class CallBackController extends AbstractController $OrderService->orderRefundResult($order_service_package['order_service_no'],$message['refund_status'],$message['success_time']); Db::commit(); - } catch (\Exception $e) { + } catch (\Throwable $e) { // 验证失败 Db::rollBack(); Log::getInstance("CallBack-wxPayServiceRefund")->error("微信支付回调数据验证失败:" . $e->getMessage()); @@ -2788,7 +2788,7 @@ class CallBackController extends AbstractController } Db::commit(); - } catch (\Exception $e) { + } catch (\Throwable $e) { // 验证失败 Db::rollBack(); Log::getInstance("CallBack-wxPayServiceSuccess")->error("问诊微信支付回调数据处理失败:" . $e->getMessage()); @@ -2830,7 +2830,7 @@ class CallBackController extends AbstractController Log::getInstance("CallBack-wxPayServiceSuccess")->info("发送im消息成功"); } - } catch (\Exception $e) { + } catch (\Throwable $e) { // 验证失败 Log::getInstance("CallBack-wxPayInquirySuccess")->error("微信支付回调处理成功,分配医生/发送问诊消息失败:" . $e->getMessage()); return $server->serve(); From c2b6170106923a1f6143b5e1217f2ab9e3301694 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Sun, 28 Apr 2024 10:50:37 +0800 Subject: [PATCH 183/274] =?UTF-8?q?=E6=94=AF=E4=BB=98=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95=E9=99=90?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 34 ++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index daef9f3..19d7257 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1107,6 +1107,40 @@ class PatientOrderService extends BaseService $result['payment_amount_total'] = $order_service_package['amount_total'] - 0; // 实际订单金额 $result['coupon_amount_total'] = 0; // 优惠金额 + // 检测是否存在同类型未完成的问诊订单 + $PatientOrderService = new PatientOrderService(); + $order_inquiry_id = $PatientOrderService->getNotFinishedOrderInquiry(1, $inquiry_mode, $user_info['client_user_id']); + if (!empty($order_inquiry_id)) { + // 获取问诊订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + return fail(HttpEnumCode::SERVER_ERROR); + } + + $return_result['message'] = "当前患者存在进行中的问诊订单"; + $return_result['data'] = $result; + $return_result['data']['order_no'] = $order_inquiry['inquiry_no']; + $return_result['data']['order_id'] = $order_inquiry['order_inquiry_id']; + $return_result['data']['order_status'] = $order_inquiry['inquiry_status']; + $return_result['data']['order_pay_status'] = $order_inquiry['inquiry_pay_status']; + return success($return_result); + } + + // 检测当前医生是否和患者存在未完成问诊订单 + $InquiryService = new InquiryService(); + $order_inquiry = $InquiryService->checkPatientDoctorProgressInquiry($user_info['client_user_id'], $order_service_package['doctor_id']); + if (!empty($order_inquiry)) { + $return_result['message'] = "您和当前医生存在问诊中订单,无法够买服务包"; + $return_result['data'] = $result; + $return_result['data']['order_no'] = $order_inquiry['inquiry_no']; + $return_result['data']['order_id'] = $order_inquiry['order_inquiry_id']; + $return_result['data']['order_status'] = $order_inquiry['inquiry_status']; + $return_result['data']['order_pay_status'] = $order_inquiry['inquiry_pay_status']; + return success($return_result); + } + if ($order_service_package['payment_amount_total'] > 0) { // 发起支付 $WechatPay = new WechatPay(1, 4); From fa6492d9c17143745e90cec2b6b1058f91413d3c Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Sun, 28 Apr 2024 10:52:57 +0800 Subject: [PATCH 184/274] =?UTF-8?q?=E6=94=AF=E4=BB=98=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95=E9=99=90?= =?UTF-8?q?=E5=88=B61?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 19d7257..72e10af 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -777,7 +777,7 @@ class PatientOrderService extends BaseService $return_result = array(); $return_result['data'] = null; - $return_result['status'] = 2; // 状态 1:正常 2:状态错误 + $return_result['status'] = 2; // 状态 1:正常 2:状态错误 3:存在问诊订单 $return_result['message'] = ""; // 获取订单金额 @@ -1120,6 +1120,7 @@ class PatientOrderService extends BaseService } $return_result['message'] = "当前患者存在进行中的问诊订单"; + $return_result['status'] = 3; $return_result['data'] = $result; $return_result['data']['order_no'] = $order_inquiry['inquiry_no']; $return_result['data']['order_id'] = $order_inquiry['order_inquiry_id']; @@ -1133,6 +1134,7 @@ class PatientOrderService extends BaseService $order_inquiry = $InquiryService->checkPatientDoctorProgressInquiry($user_info['client_user_id'], $order_service_package['doctor_id']); if (!empty($order_inquiry)) { $return_result['message'] = "您和当前医生存在问诊中订单,无法够买服务包"; + $return_result['status'] = 3; $return_result['data'] = $result; $return_result['data']['order_no'] = $order_inquiry['inquiry_no']; $return_result['data']['order_id'] = $order_inquiry['order_inquiry_id']; From c2d0b965bf6d40ca79578acbc4e9d8a699eabc8b Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Sun, 28 Apr 2024 11:13:03 +0800 Subject: [PATCH 185/274] 1 --- app/Services/PatientDoctorService.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Services/PatientDoctorService.php b/app/Services/PatientDoctorService.php index 0ddc99b..55fa931 100644 --- a/app/Services/PatientDoctorService.php +++ b/app/Services/PatientDoctorService.php @@ -349,6 +349,7 @@ class PatientDoctorService extends BaseService } // 问诊购药 + $is_system_time_pass = false; if ($inquiry_type == 4){ // 检测当前是否符合系统问诊时间 $inquiryService = new InquiryService(); From 08f71a2d5bed9d5a4de43adae08615e274d1bb17 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Sun, 28 Apr 2024 11:14:44 +0800 Subject: [PATCH 186/274] 1 --- app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php index 8bf5619..6c9e8ec 100644 --- a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php @@ -52,6 +52,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage public function consumeMessage($data, AMQPMessage $message): string { + return Result::ACK; Log::getInstance('queue-AssignDoctor')->info(json_encode($data, JSON_UNESCAPED_UNICODE)); // 获取订单数据 From 1fd14e5acaf3cf6c0c66b0e67fbc08f2be08a4b6 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Sun, 28 Apr 2024 11:50:45 +0800 Subject: [PATCH 187/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=86=E9=85=8D?= =?UTF-8?q?=E5=8C=BB=E7=94=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AssignDoctorDelayDirectConsumer.php | 254 ++++++++---------- 1 file changed, 111 insertions(+), 143 deletions(-) diff --git a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php index 6c9e8ec..8df9858 100644 --- a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php @@ -52,85 +52,88 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage public function consumeMessage($data, AMQPMessage $message): string { - return Result::ACK; Log::getInstance('queue-AssignDoctor')->info(json_encode($data, JSON_UNESCAPED_UNICODE)); - // 获取订单数据 - $params = array(); - $params['order_inquiry_id'] = $data['order_inquiry_id']; - $order_inquiry = OrderInquiry::getOne($params); - if (empty($order_inquiry)) { - Log::getInstance('queue-AssignDoctor')->error("未查询到对应订单数据"); - return Result::DROP;// 销毁 - } + // 检测执行次数并处理分配医生失败情况 + Db::beginTransaction(); + try { + // 获取订单数据 + $params = array(); + $params['order_inquiry_id'] = $data['order_inquiry_id']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + Log::getInstance('queue-AssignDoctor')->error("未查询到对应订单数据"); + return Result::DROP;// 销毁 + } - // 获取病例数据 - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $order_inquiry_case = OrderInquiryCase::getOne($params); - if (empty($order_inquiry_case)){ - Log::getInstance('queue-AssignDoctor')->error("患者病例错误"); - return Result::DROP;// 销毁 - } + // 检测执行次数 + $Utils = new Utils(); + $redis_key = "assign_doctor_number_" . $data['order_inquiry_id']; + $res = $Utils->checkHandleNumber($redis_key); + if (!$res) { + Log::getInstance("queue-AssignDoctor")->error("超出最大执行次数或检测错误"); - // 检测订单状态 - $res = $this->checkInquiryStatus($order_inquiry); - if (!$res){ - Log::getInstance('queue-AssignDoctor')->error("订单状态错误"); - return Result::DROP;// 销毁 - } + // 处理分配医生失败 + $this->handleAssignDoctorFail($order_inquiry['inquiry_no']); - // 检测分配时间 - $pay_time = strtotime($order_inquiry['pay_time']); - $diff_time = time() - $pay_time; - if ($diff_time < 0) { - Log::getInstance('queue-AssignDoctor')->error("支付时间错误"); - return Result::DROP;// 销毁 + Db::commit(); + return Result::ACK; + }else{ + Db::commit(); + } + }catch (\Throwable $e){ + Db::rollBack(); + Log::getInstance("queue-AssignDoctor")->error($e->getMessage()); + return Result::REQUEUE; } Db::beginTransaction(); try { - // 检测当前是否符合系统问诊时间 + // 获取病例数据 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_inquiry_case = OrderInquiryCase::getOne($params); + if (empty($order_inquiry_case)){ + Log::getInstance('queue-AssignDoctor')->error("患者病例错误"); + + // 处理分配医生失败 + $this->handleAssignDoctorFail($order_inquiry['inquiry_no']); + + Db::commit(); + return Result::DROP;// 销毁 + } + + // 检测订单状态 + $res = $this->checkInquiryStatus($order_inquiry); + if (!$res){ + Log::getInstance('queue-AssignDoctor')->error("订单状态错误"); + + // 处理分配医生失败 + $this->handleAssignDoctorFail($order_inquiry['inquiry_no']); + + Db::commit(); + return Result::DROP;// 销毁 + } + + // 检测分配时间 + $pay_time = strtotime($order_inquiry['pay_time']); + $diff_time = time() - $pay_time; + if ($diff_time < 0) { + Log::getInstance('queue-AssignDoctor')->error("支付时间错误"); + + // 处理分配医生失败 + $this->handleAssignDoctorFail($order_inquiry['inquiry_no']); + + Db::commit(); + return Result::DROP;// 销毁 + } + + // 检测当前是否符合系统问诊时间-非坐班时间,执行退款 $inquiryService = new InquiryService(); $is_system_time_pass = $inquiryService->checkSystemInquiryTime($order_inquiry['inquiry_type']); if (!$is_system_time_pass && $order_inquiry['inquiry_type'] == 4){ - // 非坐班时间 - Log::getInstance("queue-AssignDoctor")->info("非坐班时间,执行退款"); - - // 检测执行次数 - $Utils = new Utils(); - $redis_key = "inquiryRefund" . $order_inquiry['inquiry_no']; - $res = $Utils->checkHandleNumber($redis_key); - if (!$res) { - Db::rollBack(); - Log::getInstance("queue-CancelUnInquiryOrders")->error("超出最大执行次数或检测错误"); - return Result::ACK; - } - - $OrderService = new OrderService(); - $OrderService->orderRefund($order_inquiry['inquiry_no'], "无可分配医生"); - - // 取消订单 - $order_data = array(); - $order_data['cancel_status'] = 1; - $order_data['cancel_time'] = date("Y-m-d H:i:s", time()); - $order_data['cancel_remarks'] = "未分配到合适的医生"; - $order_data['updated_at'] = date("Y-m-d H:i:s", time()); - - $params = array(); - $params['order_id'] = $order_inquiry['order_id']; - Order::edit($params, $order_data); - - $save_data = array(); - $save_data['inquiry_status'] = 7; - $save_data['cancel_time'] = date("Y-m-d H:i:s", time()); - $save_data['cancel_reason'] = 3; // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) - $save_data['cancel_remarks'] = "未分配到合适的医生"; // 取消订单备注 - $save_data['updated_at'] = date("Y-m-d H:i:s", time()); - - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - OrderInquiry::edit($params, $save_data); + // 处理分配医生失败 + $this->handleAssignDoctorFail($order_inquiry['inquiry_no']); Db::commit(); @@ -145,46 +148,10 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage return Result::ACK; } - // 检测分配时间 + // 检测分配时间-超出10分钟,执行退款 if ($diff_time > 600) { - Log::getInstance("queue-AssignDoctor")->info("超出10分钟,执行退款"); - - // 检测执行次数 - $Utils = new Utils(); - $redis_key = "inquiryRefund" . $order_inquiry['inquiry_no']; - $res = $Utils->checkHandleNumber($redis_key); - if (!$res) { - Db::rollBack(); - Log::getInstance("queue-CancelUnInquiryOrders")->error("超出最大执行次数或检测错误"); - return Result::ACK; - } - - $OrderService = new OrderService(); - $OrderService->orderRefund($order_inquiry['inquiry_no'], "未分配到合适的医生"); - - // 取消订单 - $order_data = array(); - $order_data['cancel_status'] = 1; - $order_data['cancel_time'] = date("Y-m-d H:i:s", time()); - $order_data['cancel_remarks'] = "未分配到合适的医生"; - $order_data['updated_at'] = date("Y-m-d H:i:s", time()); - - $params = array(); - $params['order_id'] = $order_inquiry['order_id']; - Order::edit($params, $order_data); - - $save_data = array(); - $save_data['inquiry_status'] = 7; - $save_data['cancel_time'] = date("Y-m-d H:i:s", time()); - $save_data['cancel_reason'] = 3; // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) - $save_data['cancel_remarks'] = "未分配到合适的医生"; // 取消订单备注 - $save_data['updated_at'] = date("Y-m-d H:i:s", time()); - - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - OrderInquiry::edit($params, $save_data); - - Log::getInstance("queue-AssignDoctor")->info("已退款"); + // 处理分配医生失败 + $this->handleAssignDoctorFail($order_inquiry['inquiry_no']); Db::commit(); @@ -199,49 +166,18 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage return Result::ACK; } - // 检测执行次数 - $res = $this->checkHandleNumber($data['order_inquiry_id']); - if (!$res) { - // 超出执行次数后,不再进行分配,按照结束分配时间,重新加入队列。 - Log::getInstance("queue-AssignDoctor")->info("超出最大执行次数或检测错误"); - - Log::getInstance("queue-AssignDoctor")->info("重新加入延迟队列"); - + // 分配医生 + $UserDoctorService = new UserDoctorService(); + $doctor_id = $UserDoctorService->getInquiryAssignDoctor($order_inquiry['inquiry_type'],$order_inquiry['patient_id'],$is_system_time_pass); + if (empty($doctor_id)){ $queue_data = array(); $queue_data['order_inquiry_id'] = $data['order_inquiry_id']; // 5分钟-支付时间-1s:10:00支付 此时10:04 5-(10:04-10:00) - $time = 1000 * (300- (time() - $pay_time) - 1); + $time = 300- (time() - $pay_time) - 1; $message = new AssignDoctorDelayDirectProducer($queue_data); - $message->setDelayMs($time); - $producer = $this->container->get(Producer::class); - $res = $producer->produce($message); - if (!$res) { - Db::rollBack(); - Log::getInstance("queue-AssignDoctor")->error("重新加入分配医生队列失败,重回队列"); - return Result::REQUEUE; - } - - Db::commit(); - Log::getInstance("queue-AssignDoctor")->info("结束"); - return Result::ACK; - } - - Log::getInstance("queue-AssignDoctor")->info("分配医生"); - $UserDoctorService = new UserDoctorService(); - $doctor_id = $UserDoctorService->getInquiryAssignDoctor($order_inquiry['inquiry_type'],$order_inquiry['patient_id'],$is_system_time_pass); - if (empty($doctor_id)){ - Log::getInstance("queue-AssignDoctor")->info("无合适医生"); - Db::rollBack(); - - Log::getInstance("queue-AssignDoctor")->info("重新加入延迟队列"); - - $queue_data = array(); - $queue_data['order_inquiry_id'] = $data['order_inquiry_id']; - - $message = new AssignDoctorDelayDirectProducer($queue_data); - $message->setDelayMs(1000 * 60); + $message->setDelayMs(1000 * $time); $producer = $this->container->get(Producer::class); $res = $producer->produce($message); if (!$res) { @@ -401,4 +337,36 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage return true; } + /** + * 处理分配医生失败 + * @param string $inquiry_no + * @return void + */ + protected function handleAssignDoctorFail(string $inquiry_no): void + { + $OrderService = new OrderService(); + $OrderService->orderRefund($inquiry_no, "无可分配医生"); + + // 取消订单 + $order_data = array(); + $order_data['cancel_status'] = 1; + $order_data['cancel_time'] = date("Y-m-d H:i:s", time()); + $order_data['cancel_remarks'] = "未分配到合适的医生"; + $order_data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_no'] = $inquiry_no; + Order::edit($params, $order_data); + + $save_data = array(); + $save_data['inquiry_status'] = 7; + $save_data['cancel_time'] = date("Y-m-d H:i:s", time()); + $save_data['cancel_reason'] = 3; // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) + $save_data['cancel_remarks'] = "未分配到合适的医生"; // 取消订单备注 + $save_data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['inquiry_no'] = $inquiry_no; + OrderInquiry::edit($params, $save_data); + } } From 8f80c8e7e94495b9b92bbefe91e9a6b524484d3b Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Sun, 28 Apr 2024 14:36:05 +0800 Subject: [PATCH 188/274] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E8=8D=AF=E5=93=81?= =?UTF-8?q?=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 72e10af..58e80e1 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1662,6 +1662,7 @@ class PatientOrderService extends BaseService // 新增药品订单 $data = array(); $data['order_inquiry_id'] = $order_prescription['order_inquiry_id']; + $data['order_id'] = $order['order_id']; $data['order_prescription_id'] = $order_prescription['order_prescription_id']; $data['doctor_id'] = $order_prescription['doctor_id']; $data['patient_id'] = $order_prescription['patient_id']; From 67faeeb85ed08b52728ea796d3afcb62dfb4e84e Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Sun, 28 Apr 2024 15:31:17 +0800 Subject: [PATCH 189/274] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=81=A5=E5=BA=B7?= =?UTF-8?q?=E5=8C=85=E8=B5=A0=E9=80=81=E8=8D=AF=E5=93=81=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 26 +++++++++++ app/Services/PatientOrderService.php | 52 +++++---------------- 2 files changed, 38 insertions(+), 40 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 1f32903..208a792 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1554,4 +1554,30 @@ class OrderServicePackageService extends BaseService return $result; } + + /** + * 获取患者家庭成员进行中的服务包订单 + * @param string|int $patient_user_id + * @param string|int $family_id + * @param string|int $doctor_id + * @param string|int $service_type + * @return array + */ + public function getPatientFamilyInProgressServicePackage(string|int $patient_user_id,string|int $family_id,string|int $doctor_id,string|int $service_type): array + { + // 检测患者是否购买服务包 + $params = array(); + $params['user_id'] = $patient_user_id; + $params['doctor_id'] = $doctor_id; + $params['family_id'] = $family_id; + $params['order_service_type'] = $service_type; + + $order_service_status = ['3']; + $order_service_package = OrderServicePackage::getStatusOne($params, $order_service_status); + if (empty($order_service_package)) { + return []; + } + + return $order_service_package->toArray(); + } } \ No newline at end of file diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 58e80e1..b9ec65d 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1520,24 +1520,11 @@ class PatientOrderService extends BaseService return fail(); } - // 处理健康包赠送商品-金额、数量 - if ($order_inquiry['inquiry_type'] == 1 && $order_inquiry['inquiry_mode'] == 8){ - // 获取问诊订单关联服务包id - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); - if (empty($order_service_package_inquiry)){ - return fail(); - } - - // 获取服务包订单 - $params = array(); - $params['order_service_no'] = $order_service_package_inquiry['order_service_no']; - $order_service_package = OrderServicePackage::getOne($params); - if (empty($order_service_package)){ - return fail(); - } - + // 获取患者家庭成员进行中的服务包订单 + $OrderServicePackageService = new OrderServicePackageService(); + $order_service_package = $OrderServicePackageService->getPatientFamilyInProgressServicePackage($order_inquiry['user_id'],$order_inquiry['family_id'],$order_inquiry['doctor_id'],1); + if (!empty($order_service_package)){ + // 处理健康包赠送商品-金额、数量 // 获取服务包订单详情 $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; @@ -1556,7 +1543,7 @@ class PatientOrderService extends BaseService $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_detail['package_id'],$product_data['product_id']); // 获取服务包内某一药品的剩余数量 - $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id'],$total_quantity); + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$product_data['product_id'],$total_quantity); // 可用数量大于处方商品数量 if ($remaining_quantity >= $product_data['product_num']){ @@ -2080,24 +2067,11 @@ class PatientOrderService extends BaseService return fail(); } - // 处理健康包赠送商品 - if ($order_inquiry['inquiry_type'] == 1 && $order_inquiry['inquiry_mode'] == 8){ - // 获取问诊订单关联服务包id - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); - if (empty($order_service_package_inquiry)){ - return fail(); - } - - // 获取服务包订单 - $params = array(); - $params['order_service_no'] = $order_service_package_inquiry['order_service_no']; - $order_service_package = OrderServicePackage::getOne($params); - if (empty($order_service_package)){ - return fail(); - } - + // 获取患者家庭成员进行中的服务包订单 + $OrderServicePackageService = new OrderServicePackageService(); + $order_service_package = $OrderServicePackageService->getPatientFamilyInProgressServicePackage($order_inquiry['user_id'],$order_inquiry['family_id'],$order_inquiry['doctor_id'],1); + if (!empty($order_service_package)){ + // 处理健康包赠送商品 // 获取服务包订单详情 $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; @@ -2108,15 +2082,13 @@ class PatientOrderService extends BaseService // 此处不检测未支付的商品订单,在创建订单时会进行数量的扣减 // 处理商品数量、金额 - $OrderServicePackageService = new OrderServicePackageService(); - $amount_total = 0; foreach ($product_datas as &$product_data){ // 获取服务包内某一药品的总数量 $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_detail['package_id'],$product_data['product_id']); // 获取服务包内某一药品的剩余数量 - $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id'],$total_quantity); + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$product_data['product_id'],$total_quantity); // 可用数量大于处方商品数量 if ($remaining_quantity >= $product_data['product_num']){ From 43876a9d578072aebf2455c52d21f96f406472dc Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Sun, 28 Apr 2024 16:02:40 +0800 Subject: [PATCH 190/274] 1 --- app/Services/OrderServicePackageService.php | 26 +++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 208a792..744cb7e 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -624,11 +624,19 @@ class OrderServicePackageService extends BaseService // 检测服务包订单订单状态 if ($order_service_package['order_service_status'] == 1) { - return fail(HttpEnumCode::HTTP_ERROR); + return fail(HttpEnumCode::HTTP_ERROR,"服务包订单未支付,不可使用"); } if ($order_service_package['order_service_status'] == 2) { - return fail(HttpEnumCode::HTTP_ERROR); + return fail(HttpEnumCode::HTTP_ERROR,"服务包订单未生效,不可使用"); + } + + if ($order_service_package['order_service_status'] == 5) { + return fail(HttpEnumCode::HTTP_ERROR,"服务包订单已取消,不可使用"); + } + + if ($order_service_package['order_service_status'] == 4) { + return fail(HttpEnumCode::HTTP_ERROR,"服务包订单已完成,不可使用"); } // 获取服务包订单详情 @@ -1026,6 +1034,20 @@ class OrderServicePackageService extends BaseService return success($result); } + if ($order_service_package['order_service_status'] == 4) { + $result['status'] = 2; + $result['message'] = "服务已完成,请重新购买服务包"; + $result['data']['order_no'] = $order_service_package['order_service_no']; + return success($result); + } + + if ($order_service_package['order_service_status'] == 5) { + $result['status'] = 2; + $result['message'] = "服务已取消,请重新购买服务包"; + $result['data']['order_no'] = $order_service_package['order_service_no']; + return success($result); + } + // 获取服务包订单详情 $params = array(); $params['order_service_no'] = $order_service_package['order_service_no']; From 3f9d065d7e5fbbdabe0885de93d67fd417f7965a Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Sun, 28 Apr 2024 18:58:10 +0800 Subject: [PATCH 191/274] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=AE=9E?= =?UTF-8?q?=E5=90=8D=E8=AE=A4=E8=AF=81=E7=9A=84=E6=97=A5=E5=BF=97=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E3=80=81=E6=9A=82=E6=97=B6=E5=8E=BB=E9=99=A4=E4=BA=86?= =?UTF-8?q?=E7=BD=91=E6=98=93=E6=98=93=E7=9B=BE=E7=8E=AF=E5=A2=83=E7=9A=84?= =?UTF-8?q?=E5=8C=BA=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/LogIdCard.php | 83 +++++++++++++++++++++++++++ app/Services/DoctorAuthService.php | 3 +- app/Services/PatientFamilyService.php | 5 +- extend/VerifyDun/IdCard.php | 36 ++++++++++-- 4 files changed, 119 insertions(+), 8 deletions(-) create mode 100644 app/Model/LogIdCard.php diff --git a/app/Model/LogIdCard.php b/app/Model/LogIdCard.php new file mode 100644 index 0000000..365f9fa --- /dev/null +++ b/app/Model/LogIdCard.php @@ -0,0 +1,83 @@ +first($fields); + } + + /** + * 获取数据-多 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params = [], array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + + /** + * 修改 + * @param array $params + * @param array $data + * @return int + */ + public static function edit(array $params = [], array $data = []): int + { + return self::where($params)->update($data); + } + + /** + * 新增 + * @param array $data + * @return LogIdCard|\Hyperf\Database\Model\Model + */ + public static function addLogIdCard(array $data): LogIdCard|\Hyperf\Database\Model\Model + { + return self::create($data); + } + +} diff --git a/app/Services/DoctorAuthService.php b/app/Services/DoctorAuthService.php index c83f6ae..0efb59e 100644 --- a/app/Services/DoctorAuthService.php +++ b/app/Services/DoctorAuthService.php @@ -122,12 +122,13 @@ class DoctorAuthService extends BaseService // 网易易盾认证 // 实人认证-生产环境开启 $app_env = config('app_env','dev'); - if ($app_env != "dev"){ + if ($app_env == "dev"){ $IdCard = new IdCard(); $params = array(); $params['name'] = $card_name; $params['cardNo'] = $card_num; + $params['dataId'] = $doctor['user_id']; $res = $IdCard->checkIdCard($params); if (!empty($res)) { return fail(HttpEnumCode::HTTP_ERROR, $res); diff --git a/app/Services/PatientFamilyService.php b/app/Services/PatientFamilyService.php index 9c4dba6..e6359f4 100644 --- a/app/Services/PatientFamilyService.php +++ b/app/Services/PatientFamilyService.php @@ -174,15 +174,14 @@ class PatientFamilyService extends BaseService } // 实人认证-生产环境开启 - - $app_env = config('app_env', 'dev'); - if ($app_env != "dev") { + if ($app_env == "dev") { $IdCard = new IdCard(); $params = array(); $params['name'] = $request_params['card_name']; $params['cardNo'] = $request_params['id_number']; + $params['dataId'] = $user_info['user_id']; $res = $IdCard->checkIdCard($params); if (!empty($res)) { return fail(HttpEnumCode::HTTP_ERROR, $res); diff --git a/extend/VerifyDun/IdCard.php b/extend/VerifyDun/IdCard.php index b0b0e11..33f1e17 100644 --- a/extend/VerifyDun/IdCard.php +++ b/extend/VerifyDun/IdCard.php @@ -4,6 +4,7 @@ namespace Extend\VerifyDun; use App\Constants\HttpEnumCode; use App\Exception\BusinessException; +use App\Model\LogIdCard; use App\Utils\HttpRequest; use App\Utils\Log; use GuzzleHttp\Exception\GuzzleException; @@ -35,6 +36,10 @@ class IdCard extends Base $this->options["form_params"] = $this->params; $result = $this->httpRuest->postRequest($api_url,$this->options); + + // 记录日志,ca认证要求 + Log::getInstance("VerifyDun-IdCard-checkIdCard")->info(json_encode($result,JSON_UNESCAPED_UNICODE)); + if (empty($result)){ return "身份证认证失败"; } @@ -50,22 +55,21 @@ class IdCard extends Base return "身份证认证失败"; } + // 记录日志 + $this->recordLog($params['dataId'],$params['name'],$params['cardNo'],$result); + // 处理不通过情况 if ($result['result']['status'] == 2){ switch ($result['result']['reasonType']) { case 2: return "输入姓名和身份证号不一致"; - break; case 3: return "查无此身份证"; - break; case 4: return "身份证照片信息与输入信息不一致"; - break; default: return "身份证认证失败"; - break; } } @@ -79,4 +83,28 @@ class IdCard extends Base throw new BusinessException($e->getMessage()); } } + + /** + * 记录日志 + * @param string $data_id + * @param string $name + * @param string $card_no + * @param array $result + * @return void + */ + public function recordLog(string $data_id,string $name,string $card_no,array $result): void + { + try { + $data = array(); + $data['name'] = $name; + $data['card_no'] = $card_no; + $data['status'] = $result['result']['status']; + $data['data_id'] = $data_id; + $data['task_id'] = $result['result']['taskId']; + $data['content'] = json_encode($result,JSON_UNESCAPED_UNICODE); + LogIdCard::addLogIdCard($data); + }catch (\Throwable $e){ + Log::getInstance("VerifyDun-IdCard-checkIdCard")->error($e->getMessage()); + } + } } \ No newline at end of file From d646b136ab3e7053626a6ff9e8dd3f415d39a19b Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 29 Apr 2024 14:04:21 +0800 Subject: [PATCH 192/274] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=EF=BC=882196=EF=BC=89=20=09=09=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=BA=86order=5Fno=E7=9A=84=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=80=BC=E3=80=82=E6=96=B0=E5=A2=9E=E4=BA=86status=3D3?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/TestController.php | 9 +------ app/Services/InquiryService.php | 30 ++++++++++++++++++++- app/Services/OrderServicePackageService.php | 24 +++++++++++++++++ 3 files changed, 54 insertions(+), 9 deletions(-) diff --git a/app/Controller/TestController.php b/app/Controller/TestController.php index cee9246..c209ab5 100644 --- a/app/Controller/TestController.php +++ b/app/Controller/TestController.php @@ -55,6 +55,7 @@ use Extend\Kuaidi100\Kuaidi; use Extend\Prescription\Prescription; use Extend\RegulatoryPlatform\regulatoryPlatform; use Extend\TencentIm\RecentContact; +use Extend\VerifyDun\IdCard; use Extend\Wechat\Wechat; use GuzzleHttp\Client; use Hyperf\Amqp\Producer; @@ -460,15 +461,7 @@ class TestController extends AbstractController } public function test_17(){ - $params = array(); - $params['order_inquiry_id'] = "643019792966791168"; - $order_inquiry = OrderInquiry::getOne($params); - // 发送im消息 - $imService = new ImService(); - - // 等待医生接诊 - $imService->waitDoctorInquiry($order_inquiry, "516900370248146944", "516898713896521728"); } // 退款 diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 1856de3..4f8035c 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -81,6 +81,7 @@ class InquiryService extends BaseService $result['data'] = [ "inquiry_no" => "", "order_inquiry_id" => "", + "order_no" => "", ]; $user_info = $this->request->getAttribute("userInfo") ?? []; @@ -110,9 +111,17 @@ class InquiryService extends BaseService $PatientOrderService = new PatientOrderService(); $order_inquiry_id = $PatientOrderService->getNotFinishedOrderInquiry($request_params['inquiry_type'], $request_params['inquiry_mode'], $user_info['client_user_id']); if (!empty($order_inquiry_id)) { + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)){ + return fail(HttpEnumCode::HTTP_ERROR, "无法问诊"); + } + $result['status'] = 2; $result['message'] = "当前患者存在进行中的问诊订单"; $result['data']['order_inquiry_id'] = $order_inquiry_id; + $result['data']['order_no'] = $order_inquiry['inquiry_no']; return success($result); } @@ -165,7 +174,18 @@ class InquiryService extends BaseService if (!empty($order_inquiry)) { $result['status'] = 2; $result['message'] = "您和当前医生存在问诊中订单,无法再次发起问诊"; - $result['data']['order_inquiry_id'] = $order_inquiry_id; + $result['data']['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $result['data']['order_no'] = $order_inquiry['inquiry_no']; + return success($result); + } + + // 获取患者家庭成员是否存在服务包订单 + $OrderServicePackageService = new OrderServicePackageService(); + $order_service_package = $OrderServicePackageService->getExitsPatientFamilyServicePackage($user_info['user_id'], $request_params['family_id'], $request_params['doctor_id']); + if (!empty($order_service_package)){ + $result['status'] = 3; + $result['message'] = "您和当前医生存在未支付的服务包订单,无法再次发起问诊"; + $result['data']['order_no'] = $order_service_package['order_service_no']; return success($result); } } @@ -534,6 +554,7 @@ class InquiryService extends BaseService $result['status'] = 1; $result['data']['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; // 订单主键id $result['data']['inquiry_no'] = (string)$order_inquiry['inquiry_no']; // 订单编号 + $result['data']['order_no'] = (string)$order_inquiry['inquiry_no']; // 订单编号 return success($result); } @@ -1313,6 +1334,13 @@ class InquiryService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "当前患者和您存在问诊订单,不可赠送"); } + // 获取患者家庭成员是否存在服务包订单 + $OrderServicePackageService = new OrderServicePackageService(); + $order_service_package = $OrderServicePackageService->getExitsPatientFamilyServicePackage($order_inquiry['user_id'], $order_inquiry['family_id'], $order_inquiry['doctor_id']); + if (!empty($order_service_package)){ + return fail(HttpEnumCode::HTTP_ERROR, "当前用户存在未支付订单,不支持赠送"); + } + // 获取本次问诊病例 $params = array(); $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 744cb7e..5a8cccc 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1602,4 +1602,28 @@ class OrderServicePackageService extends BaseService return $order_service_package->toArray(); } + + /** + * 获取患者家庭成员是否存在服务包订单 + * @param string|int $patient_user_id + * @param string|int $family_id + * @param string|int $doctor_id + * @return array + */ + public function getExitsPatientFamilyServicePackage(string|int $patient_user_id,string|int $family_id,string|int $doctor_id): array + { + // 检测患者是否购买服务包 + $params = array(); + $params['user_id'] = $patient_user_id; + $params['doctor_id'] = $doctor_id; + $params['family_id'] = $family_id; + + $order_service_status = ['1','2','3']; + $order_service_package = OrderServicePackage::getStatusOne($params, $order_service_status); + if (empty($order_service_package)) { + return []; + } + + return $order_service_package->toArray(); + } } \ No newline at end of file From a2bb108c95247f427f222ce417287c38a7c53026 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 29 Apr 2024 14:06:02 +0800 Subject: [PATCH 193/274] 1 --- app/Services/InquiryService.php | 4 ++-- app/Services/OrderServicePackageService.php | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 4f8035c..9c43ab8 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -181,7 +181,7 @@ class InquiryService extends BaseService // 获取患者家庭成员是否存在服务包订单 $OrderServicePackageService = new OrderServicePackageService(); - $order_service_package = $OrderServicePackageService->getExitsPatientFamilyServicePackage($user_info['user_id'], $request_params['family_id'], $request_params['doctor_id']); + $order_service_package = $OrderServicePackageService->getPatientFamilyNoPayServicePackage($user_info['user_id'], $request_params['family_id'], $request_params['doctor_id']); if (!empty($order_service_package)){ $result['status'] = 3; $result['message'] = "您和当前医生存在未支付的服务包订单,无法再次发起问诊"; @@ -1336,7 +1336,7 @@ class InquiryService extends BaseService // 获取患者家庭成员是否存在服务包订单 $OrderServicePackageService = new OrderServicePackageService(); - $order_service_package = $OrderServicePackageService->getExitsPatientFamilyServicePackage($order_inquiry['user_id'], $order_inquiry['family_id'], $order_inquiry['doctor_id']); + $order_service_package = $OrderServicePackageService->getPatientFamilyNoPayServicePackage($order_inquiry['user_id'], $order_inquiry['family_id'], $order_inquiry['doctor_id']); if (!empty($order_service_package)){ return fail(HttpEnumCode::HTTP_ERROR, "当前用户存在未支付订单,不支持赠送"); } diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 5a8cccc..5bdff44 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1604,13 +1604,13 @@ class OrderServicePackageService extends BaseService } /** - * 获取患者家庭成员是否存在服务包订单 + * 获取患者家庭成员是否存在未支付的服务包订单 * @param string|int $patient_user_id * @param string|int $family_id * @param string|int $doctor_id * @return array */ - public function getExitsPatientFamilyServicePackage(string|int $patient_user_id,string|int $family_id,string|int $doctor_id): array + public function getPatientFamilyNoPayServicePackage(string|int $patient_user_id,string|int $family_id,string|int $doctor_id): array { // 检测患者是否购买服务包 $params = array(); @@ -1618,7 +1618,7 @@ class OrderServicePackageService extends BaseService $params['doctor_id'] = $doctor_id; $params['family_id'] = $family_id; - $order_service_status = ['1','2','3']; + $order_service_status = ['1']; $order_service_package = OrderServicePackage::getStatusOne($params, $order_service_status); if (empty($order_service_package)) { return []; From 79a8c6d4a70ebe372ced62a0732b964a521ac030 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 29 Apr 2024 14:15:16 +0800 Subject: [PATCH 194/274] 2 --- app/Services/DetectionService.php | 29 ++++++++++++++++++++++++----- app/Services/InquiryService.php | 4 ++-- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/app/Services/DetectionService.php b/app/Services/DetectionService.php index dafa1b6..de677b2 100644 --- a/app/Services/DetectionService.php +++ b/app/Services/DetectionService.php @@ -566,7 +566,8 @@ class DetectionService extends BaseService $result = array(); $result['status'] = 1; $result['message'] = "成功"; - $result['data'] = ""; + $result['data']['order_inquiry_id'] = ""; + $result['data']['order_no'] = ""; $params = array(); $params['patient_id'] = $user_info['client_user_id']; @@ -585,7 +586,8 @@ class DetectionService extends BaseService if (!empty($order_detection['order_inquiry_id'])) { $result['status'] = 1; $result['message'] = "成功"; - $result['data'] = (string)$order_detection['order_inquiry_id']; + $result['data']['order_inquiry_id'] = (string)$order_detection['order_inquiry_id']; + $result['data']['order_no'] = (string)$order_detection['detection_no']; return success($result); } @@ -602,7 +604,8 @@ class DetectionService extends BaseService $result['status'] = 2; $result['message'] = "当前医生有您未支付的订单,点击“继续”将为您取消订单直接进入报告解读服务。"; - $result['data'] = (string)$order_inquiry['order_inquiry_id']; + $result['data']['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $result['data']['order_no'] = (string)$order_inquiry['inquiry_no']; return success($result); } @@ -613,7 +616,8 @@ class DetectionService extends BaseService $result['status'] = 3; $result['message'] = "当前医生有您待接诊的订单,点击“继续”将为您取消订单直接进入报告解读服务。"; - $result['data'] = (string)$order_inquiry['order_inquiry_id']; + $result['data']['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $result['data']['order_no'] = (string)$order_inquiry['inquiry_no']; return success($result); } @@ -624,12 +628,27 @@ class DetectionService extends BaseService $result['status'] = 4; $result['message'] = "当前医生有您问诊中的订单,点击“继续”将进入聊天详情。"; - $result['data'] = (string)$order_inquiry['order_inquiry_id']; + $result['data']['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $result['data']['order_no'] = (string)$order_inquiry['inquiry_no']; return success($result); } } + // 获取患者家庭成员是否存在未支付的服务包订单 + $OrderServicePackageService = new OrderServicePackageService(); + $order_service_package = $OrderServicePackageService->getPatientFamilyNoPayServicePackage($user_info['user_id'], $order_detection['family_id'], $order_detection['doctor_id']); + if (!empty($order_service_package)){ + // 待支付 + Db::rollBack(); + + $result['status'] = 5; + $result['message'] = "您和当前医生存在未支付的服务包订单,点击“继续”将进入订单详情。"; + $result['data']['order_no'] = (string)$order_service_package['order_service_no']; + + return success($result); + } + // 获取医生数据 $params = array(); $params['doctor_id'] = $order_detection['doctor_id']; diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 9c43ab8..c6f1ffc 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -179,7 +179,7 @@ class InquiryService extends BaseService return success($result); } - // 获取患者家庭成员是否存在服务包订单 + // 获取患者家庭成员是否存在未支付的服务包订单 $OrderServicePackageService = new OrderServicePackageService(); $order_service_package = $OrderServicePackageService->getPatientFamilyNoPayServicePackage($user_info['user_id'], $request_params['family_id'], $request_params['doctor_id']); if (!empty($order_service_package)){ @@ -1334,7 +1334,7 @@ class InquiryService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "当前患者和您存在问诊订单,不可赠送"); } - // 获取患者家庭成员是否存在服务包订单 + // 获取患者家庭成员是否存在未支付的服务包订单 $OrderServicePackageService = new OrderServicePackageService(); $order_service_package = $OrderServicePackageService->getPatientFamilyNoPayServicePackage($order_inquiry['user_id'], $order_inquiry['family_id'], $order_inquiry['doctor_id']); if (!empty($order_service_package)){ From 3adc8ec38b14ecc7154d4d6c399e48894714c231 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 29 Apr 2024 14:28:37 +0800 Subject: [PATCH 195/274] =?UTF-8?q?=E5=88=86=E9=85=8D=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A3=80=E6=B5=8B=20=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=82=A3=E8=80=85=E5=AE=B6=E5=BA=AD=E6=88=90=E5=91=98=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E5=AD=98=E5=9C=A8=E6=9C=AA=E6=94=AF=E4=BB=98=E7=9A=84?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AssignDoctorDelayDirectConsumer.php | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php index 8df9858..a9c9519 100644 --- a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php @@ -17,6 +17,7 @@ use App\Services\ImService; use App\Services\InquiryService; use App\Services\MessagePush; use App\Services\OrderService; +use App\Services\OrderServicePackageService; use App\Services\UserDoctorService; use App\Utils\Log; use App\Utils\Utils; @@ -116,8 +117,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage } // 检测分配时间 - $pay_time = strtotime($order_inquiry['pay_time']); - $diff_time = time() - $pay_time; + $diff_time = time() - strtotime($order_inquiry['pay_time']); if ($diff_time < 0) { Log::getInstance('queue-AssignDoctor')->error("支付时间错误"); @@ -174,7 +174,7 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage $queue_data['order_inquiry_id'] = $data['order_inquiry_id']; // 5分钟-支付时间-1s:10:00支付 此时10:04 5-(10:04-10:00) - $time = 300- (time() - $pay_time) - 1; + $time = 300- (time() - strtotime($order_inquiry['pay_time'])) - 1; $message = new AssignDoctorDelayDirectProducer($queue_data); $message->setDelayMs(1000 * $time); @@ -190,6 +190,31 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage return Result::ACK; } + // 获取患者家庭成员是否存在未支付的服务包订单 + $OrderServicePackageService = new OrderServicePackageService(); + $order_service_package = $OrderServicePackageService->getPatientFamilyNoPayServicePackage($order_inquiry['user_id'], $order_inquiry['family_id'], $doctor_id); + if (!empty($order_service_package)){ + $queue_data = array(); + $queue_data['order_inquiry_id'] = $data['order_inquiry_id']; + + // 5分钟-支付时间-1s:10:00支付 此时10:04 5-(10:04-10:00) + $time = 300- (time() - strtotime($order_inquiry['pay_time'])) - 1; + + $message = new AssignDoctorDelayDirectProducer($queue_data); + $message->setDelayMs(1000 * $time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + Db::rollBack(); + Log::getInstance("queue-AssignDoctor")->error("患者和医生存在未支付的服务包订单,无法分配给该医生,重回队列"); + return Result::REQUEUE; + } + + Log::getInstance("queue-AssignDoctor")->info("重回队列"); + return Result::ACK; + } + + // 更改数据库 $save_data = array(); $save_data['doctor_id'] = $doctor_id; From 2bfd1c99cf951b402da59a96d4680cb10997f6dd Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 29 Apr 2024 15:29:10 +0800 Subject: [PATCH 196/274] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E9=A1=B5=20=E8=8E=B7=E5=8F=96=E4=BC=98=E6=83=A0=E5=8D=B7?= =?UTF-8?q?=E4=B8=8D=E5=8F=AF=E7=94=A8=E5=8E=9F=E5=9B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 15 ++++++--------- app/Services/UserCouponService.php | 6 ++++++ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index b9ec65d..04e7599 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -915,8 +915,8 @@ class PatientOrderService extends BaseService $result['payment_amount_total'] = $order_product['payment_amount_total']; // 实际订单金额 $result['coupon_amount_total'] = $order_product['coupon_amount_total']; // 优惠金额 - // 获取优惠卷不可用原因。存在优惠卷,但是未使用 - if ($order_product['coupon_amount_total'] == 0){ + // 获取优惠卷不可用原因。存在优惠卷,但是未使用-暂时废弃 + /*if ($order_product['coupon_amount_total'] == 0){ // 优惠卷商品数据 $coupon_product_datas = array(); @@ -954,13 +954,10 @@ class PatientOrderService extends BaseService $coupon_product_datas[] = $coupon_product_data; } - $user_coupons = UserCoupon::getUserProductUsableCoupon($user_info['user_id'],$coupon_product_datas); - if (!empty($user_coupons)) { - foreach ($user_coupons as $user_coupon){ - $result['cannot_use_coupon_reason'] = "商品不足" . $user_coupon['coupon']['min_usable_number'] . "盒,不满足使用优惠卷条件";; // 不可使用优惠卷原因 - } - } - } + // 获取患者购药可用的优惠卷 + $userCouponService = new UserCouponService(); + $user_coupons = $userCouponService->getUserProductUsableCoupon($user_info['user_id'], $coupon_product_datas); + }*/ if ($order_product['payment_amount_total'] > 0) { // 发起支付 diff --git a/app/Services/UserCouponService.php b/app/Services/UserCouponService.php index 7a9132c..1e1f3f6 100644 --- a/app/Services/UserCouponService.php +++ b/app/Services/UserCouponService.php @@ -260,6 +260,12 @@ class UserCouponService extends BaseService // return $selected_coupons; // } + /** + * 获取患者购药可用的优惠卷 + * @param string|int $user_id + * @param array $coupon_product_datas + * @return array + */ public function getUserProductUsableCoupon(string|int $user_id, array $coupon_product_datas): array { $user_coupons = UserCoupon::getUserProductUsableCoupon($user_id); From 644b0820096efb3d99b747712c0c01a25e1da11d Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 29 Apr 2024 15:45:52 +0800 Subject: [PATCH 197/274] 1111 --- app/Services/DetectionService.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/Services/DetectionService.php b/app/Services/DetectionService.php index de677b2..0410390 100644 --- a/app/Services/DetectionService.php +++ b/app/Services/DetectionService.php @@ -793,6 +793,7 @@ class DetectionService extends BaseService $data = [ "order_inquiry_id" => $order_inquiry['order_inquiry_id'], "inquiry_type" => $order_inquiry['inquiry_type'], + "inquiry_mode" => $order_inquiry['inquiry_mode'], "detection_no" => $order_detection['detection_no'], "patient_name" => $order_detection['patient_name'], "patient_sex" => $order_detection['patient_sex'], @@ -809,6 +810,7 @@ class DetectionService extends BaseService $data = [ "order_inquiry_id" => $order_inquiry['order_inquiry_id'], "inquiry_type" => $order_inquiry['inquiry_type'], + "inquiry_mode" => $order_inquiry['inquiry_mode'], "detection_no" => $order_detection['detection_no'], "doctor_name" => $user_doctor['user_name'], "patient_name" => $order_detection['patient_name'], From 3f804845a30818608d4274a7ebe280928646ee8c Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 29 Apr 2024 16:39:47 +0800 Subject: [PATCH 198/274] 1 --- app/Command/ReportPreProductOrderCommand.php | 2 +- app/Model/ReportRegulatory.php | 5 +++-- app/Services/MessagePush.php | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/Command/ReportPreProductOrderCommand.php b/app/Command/ReportPreProductOrderCommand.php index 6c23d29..daf355f 100644 --- a/app/Command/ReportPreProductOrderCommand.php +++ b/app/Command/ReportPreProductOrderCommand.php @@ -44,7 +44,7 @@ class ReportPreProductOrderCommand extends HyperfCommand * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ - public function handle() + public function handle(): void { $this->line("开始"); diff --git a/app/Model/ReportRegulatory.php b/app/Model/ReportRegulatory.php index 29b737f..e2ca5a9 100644 --- a/app/Model/ReportRegulatory.php +++ b/app/Model/ReportRegulatory.php @@ -6,6 +6,7 @@ namespace App\Model; +use Carbon\Carbon; use Hyperf\Database\Model\Builder; use Hyperf\Database\Model\Collection; use Hyperf\Snowflake\Concern\Snowflake; @@ -29,8 +30,8 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $report_prescription_int 处方上报次数 * @property string $report_prescription_time 处方上报时间 * @property string $report_prescription_fail_reason 处方上报失败原因 - * @property \Carbon\Carbon $created_at 创建时间 - * @property \Carbon\Carbon $updated_at 修改时间 + * @property Carbon $created_at 创建时间 + * @property Carbon $updated_at 修改时间 */ class ReportRegulatory extends Model { diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index 5e094ed..2202369 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -3528,7 +3528,7 @@ class MessagePush extends BaseService $link_params = array(); $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; - $link_params['order_no'] = $this->order['order_no']; + $link_params['order_no'] = $this->order_service_package['order_no']; $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; $link_params['doctor_user_id'] = $user_doctor['user_id']; $link_params['patient_user_id'] = $this->order_inquiry['user_id']; From 5baf6de53759ee57ff3adfc544d77d3ad2f9ca89 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 29 Apr 2024 16:44:38 +0800 Subject: [PATCH 199/274] =?UTF-8?q?=E8=8D=AF=E5=93=81=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 04e7599..07565e4 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1517,7 +1517,7 @@ class PatientOrderService extends BaseService return fail(); } - // 获取患者家庭成员进行中的服务包订单 + // 获取患者家庭成员进行中的服务包订单-健康包 $OrderServicePackageService = new OrderServicePackageService(); $order_service_package = $OrderServicePackageService->getPatientFamilyInProgressServicePackage($order_inquiry['user_id'],$order_inquiry['family_id'],$order_inquiry['doctor_id'],1); if (!empty($order_service_package)){ @@ -1720,18 +1720,9 @@ class PatientOrderService extends BaseService ProductPlatformAmount::dec($params, 'stock', $product_data['product_num']); // 处理健康包数据,增加使用数量 - if ($order_inquiry['inquiry_type'] == 1 && $order_inquiry['inquiry_mode'] == 8){ - // 获取问诊订单关联服务包id - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); - if (empty($order_service_package_inquiry)){ - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); - } - + if (!empty($order_service_package)){ $data = array(); - $data['order_service_id'] = $order_service_package_inquiry['order_service_id']; + $data['order_service_id'] = $order_service_package['order_service_id']; $data['order_product_id'] = $order_product['order_product_id']; $data['order_product_no'] = $order_product['order_product_no']; $data['product_item_id'] = $order_product_item['product_item_id']; From 7967447f6a79965b6f0938a034039a761ff8b507 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 29 Apr 2024 17:28:23 +0800 Subject: [PATCH 200/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8D=AF=E5=93=81?= =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=8D=B7=E5=8F=8A=E8=8D=AF=E5=93=81=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/UserCoupon.php | 27 +++++++++++++++++++++++++ app/Services/PatientOrderService.php | 30 ++++++++++++++++++---------- 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/app/Model/UserCoupon.php b/app/Model/UserCoupon.php index 220e43d..216f3a7 100644 --- a/app/Model/UserCoupon.php +++ b/app/Model/UserCoupon.php @@ -184,6 +184,33 @@ class UserCoupon extends Model ->get($fields); } + /** + * 获取患者某一类型下的全部优惠卷 + * @param string|int $user_id + * @param int $distribution_object + * @param array $fields + * @return Collection|array + */ + public static function getUserAllObjectTypeCoupon(string|int $user_id,int $distribution_object,array $fields = ['*']): Collection|array + { + $params = array(); + $params[] = ['user_id', '=', $user_id]; + $params[] = ['valid_start_time', '<', date('Y-m-d H:i:s', time())]; // 有效使用时间 + $params[] = ['valid_end_time', '>', date('Y-m-d H:i:s', time())]; // 过期使用时间 + + return self::with(['Coupon']) + ->whereHas('Coupon', function ($query) use ($distribution_object) { + $query->where("coupon_client",1) + ->where("coupon_status",1) + ->where(function ($query) use ($distribution_object) { + $query->orwhere("distribution_object",$distribution_object); + }); + }) + ->where($params) + ->groupBy("coupon_id") + ->get($fields); + } + /** * 获取患者今日过期优惠卷 * @param array $params diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 07565e4..38bf76b 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1720,16 +1720,24 @@ class PatientOrderService extends BaseService ProductPlatformAmount::dec($params, 'stock', $product_data['product_num']); // 处理健康包数据,增加使用数量 - if (!empty($order_service_package)){ - $data = array(); - $data['order_service_id'] = $order_service_package['order_service_id']; - $data['order_product_id'] = $order_product['order_product_id']; - $data['order_product_no'] = $order_product['order_product_no']; - $data['product_item_id'] = $order_product_item['product_item_id']; - $data['product_id'] = $product_data['product_id']; - $data['used_quantity'] = $product_data['used_quantity']; + if (!empty($order_service_package) && !empty($order_service_package_detail)){ + // 获取服务包内所有药品 + $health_package_products = $OrderServicePackageService->getOrderServiceProduct($order_service_package_detail['package_id']); + foreach ($health_package_products as $health_package_product) { + if ($health_package_product['product_id'] == $product_data['product_id']){ + $data = array(); + $data['order_service_id'] = $order_service_package['order_service_id']; + $data['order_product_id'] = $order_product['order_product_id']; + $data['order_product_no'] = $order_product['order_product_no']; + $data['product_item_id'] = $order_product_item['product_item_id']; + $data['product_id'] = $product_data['product_id']; + $data['used_quantity'] = $product_data['used_quantity']; - OrderServicePackageProduct::addOrderServicePackageProduct($data); + OrderServicePackageProduct::addOrderServicePackageProduct($data); + + break; + } + } } } @@ -3170,8 +3178,8 @@ class PatientOrderService extends BaseService // 健康包关联优惠卷数据 if (in_array($order_service_package['order_service_status'],[3,4,5])){ // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) - // 获取用户优惠卷 - $coupon = UserCoupon::getUserObjectTypeCoupon($order_service_package['user_id'],7); + // 获取患者某一类型下的全部优惠卷 + $coupon = UserCoupon::getUserAllObjectTypeCoupon($order_service_package['user_id'],7); if (!empty($coupon)){ $result['order_service_package_coupon'] = $coupon->toArray(); } From 95efdc896ab346cd1e2aecaf1b37aaa690625ca7 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 29 Apr 2024 17:31:10 +0800 Subject: [PATCH 201/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8D=AF=E5=93=81?= =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=8D=B7=E5=8F=8A=E8=8D=AF=E5=93=81=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=95=B0=E6=8D=AE1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 32 ++++++++++++++++------------ 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 38bf76b..d38d4de 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1718,27 +1718,31 @@ class PatientOrderService extends BaseService $params = array(); $params['amount_id'] = $product_platform_amount['amount_id']; ProductPlatformAmount::dec($params, 'stock', $product_data['product_num']); + } + foreach ($product_datas as $product_data) { // 处理健康包数据,增加使用数量 if (!empty($order_service_package) && !empty($order_service_package_detail)){ - // 获取服务包内所有药品 - $health_package_products = $OrderServicePackageService->getOrderServiceProduct($order_service_package_detail['package_id']); - foreach ($health_package_products as $health_package_product) { - if ($health_package_product['product_id'] == $product_data['product_id']){ - $data = array(); - $data['order_service_id'] = $order_service_package['order_service_id']; - $data['order_product_id'] = $order_product['order_product_id']; - $data['order_product_no'] = $order_product['order_product_no']; - $data['product_item_id'] = $order_product_item['product_item_id']; - $data['product_id'] = $product_data['product_id']; - $data['used_quantity'] = $product_data['used_quantity']; + // 获取服务包内某一药品的总数量 + $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_detail['package_id'],$product_data['product_id']); - OrderServicePackageProduct::addOrderServicePackageProduct($data); + // 获取服务包内某一药品的剩余数量 + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$product_data['product_id'],$total_quantity); - break; - } + // 可用数量大于处方商品数量 + if ($remaining_quantity >= $product_data['product_num']){ + $data = array(); + $data['order_service_id'] = $order_service_package['order_service_id']; + $data['order_product_id'] = $order_product['order_product_id']; + $data['order_product_no'] = $order_product['order_product_no']; + $data['product_item_id'] = $order_product_item['product_item_id']; + $data['product_id'] = $product_data['product_id']; + $data['used_quantity'] = $product_data['used_quantity']; + + OrderServicePackageProduct::addOrderServicePackageProduct($data); } } + break; } // 修改处方为已使用 From 8d564d885b2fdec9a85844dd9609b002ded95c7e Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 29 Apr 2024 17:37:17 +0800 Subject: [PATCH 202/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8D=AF=E5=93=81?= =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=8D=B7=E5=8F=8A=E8=8D=AF=E5=93=81=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=95=B0=E6=8D=AE12?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index d38d4de..f15ad6e 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1741,8 +1741,9 @@ class PatientOrderService extends BaseService OrderServicePackageProduct::addOrderServicePackageProduct($data); } + + break; } - break; } // 修改处方为已使用 From d4f1ad70867026f9af1148b46ebb6ef0f8451698 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 30 Apr 2024 09:10:03 +0800 Subject: [PATCH 203/274] 1 --- app/Services/PatientOrderService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index f15ad6e..0481cf1 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -2827,7 +2827,7 @@ class PatientOrderService extends BaseService } if ($order_service_status == 2) { - $order_service_status_params = [3]; + $order_service_status_params = [2]; } if ($order_service_status == 3) { From 60951d52d8f2330d670cc5c91ede3b09076830fa Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 30 Apr 2024 09:24:39 +0800 Subject: [PATCH 204/274] =?UTF-8?q?=E4=B8=B4=E6=97=B6=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 56 +++++++++++++++------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 0481cf1..8c32726 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1425,6 +1425,11 @@ class PatientOrderService extends BaseService $product_ids = $this->request->input('product_ids'); $client_type = $this->request->input('client_type'); + dump($order_prescription_id); + dump($address_id); + dump($product_ids); + dump($client_type);die; + // 获取处方数据 $params = array(); $params['order_prescription_id'] = $order_prescription_id; @@ -1704,6 +1709,31 @@ class PatientOrderService extends BaseService return fail(HttpEnumCode::SERVER_ERROR); } + if (!empty($order_service_package) && !empty($order_service_package_detail)){ + // 获取服务包内某一药品的总数量 + $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_detail['package_id'],$product_data['product_id']); + + // 获取服务包内某一药品的剩余数量 + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$product_data['product_id'],$total_quantity); + + // 获取服务包内所有药品 + $health_package_products = $OrderServicePackageService->getOrderServiceProduct($order_service_package_detail['package_id']); + foreach ($health_package_products as $health_package_product){ + // 可用数量大于处方商品数量 + if ($remaining_quantity >= $product_data['product_num'] && $health_package_product['product_id'] == $product_data['product_id']){ + $data = array(); + $data['order_service_id'] = $order_service_package['order_service_id']; + $data['order_product_id'] = $order_product['order_product_id']; + $data['order_product_no'] = $order_product['order_product_no']; + $data['product_item_id'] = $order_product_item['product_item_id']; + $data['product_id'] = $product_data['product_id']; + $data['used_quantity'] = $product_data['used_quantity']; + + OrderServicePackageProduct::addOrderServicePackageProduct($data); + } + } + } + // 处方药品表标记为已使用 $data = array(); $data['use_status'] = 1; @@ -1720,32 +1750,6 @@ class PatientOrderService extends BaseService ProductPlatformAmount::dec($params, 'stock', $product_data['product_num']); } - foreach ($product_datas as $product_data) { - // 处理健康包数据,增加使用数量 - if (!empty($order_service_package) && !empty($order_service_package_detail)){ - // 获取服务包内某一药品的总数量 - $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_detail['package_id'],$product_data['product_id']); - - // 获取服务包内某一药品的剩余数量 - $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$product_data['product_id'],$total_quantity); - - // 可用数量大于处方商品数量 - if ($remaining_quantity >= $product_data['product_num']){ - $data = array(); - $data['order_service_id'] = $order_service_package['order_service_id']; - $data['order_product_id'] = $order_product['order_product_id']; - $data['order_product_no'] = $order_product['order_product_no']; - $data['product_item_id'] = $order_product_item['product_item_id']; - $data['product_id'] = $product_data['product_id']; - $data['used_quantity'] = $product_data['used_quantity']; - - OrderServicePackageProduct::addOrderServicePackageProduct($data); - } - - break; - } - } - // 修改处方为已使用 $data = array(); $data['prescription_status'] = 4; From 93c3ca45e3dfd904354f9f770f128a46318426ef Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 30 Apr 2024 09:31:22 +0800 Subject: [PATCH 205/274] =?UTF-8?q?=E4=B8=B4=E6=97=B6=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=8E=BB=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 8c32726..c8da7de 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1425,11 +1425,6 @@ class PatientOrderService extends BaseService $product_ids = $this->request->input('product_ids'); $client_type = $this->request->input('client_type'); - dump($order_prescription_id); - dump($address_id); - dump($product_ids); - dump($client_type);die; - // 获取处方数据 $params = array(); $params['order_prescription_id'] = $order_prescription_id; From d6220dbd5fc15eab2981838201a3199a500bdae1 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 30 Apr 2024 09:59:06 +0800 Subject: [PATCH 206/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E8=8D=AF=E5=93=81=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 42 ++++++++++------------------ 1 file changed, 15 insertions(+), 27 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index c8da7de..72ef003 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1504,6 +1504,7 @@ class PatientOrderService extends BaseService // 商品数据 $product['product_num'] = $order_prescription_product['prescription_product_num']; + $product['used_quantity'] = 0; // 健康包服务下已使用赠送药品的数量,默认赋0 $product_data = $product->toArray(); $product_datas[] = $product_data; } @@ -1535,7 +1536,7 @@ class PatientOrderService extends BaseService $OrderServicePackageService = new OrderServicePackageService(); $amount_total = 0; - foreach ($product_datas as &$product_data){ + foreach ($product_datas as $key => $product_data){ // 获取服务包内某一药品的总数量 $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_detail['package_id'],$product_data['product_id']); @@ -1545,13 +1546,13 @@ class PatientOrderService extends BaseService // 可用数量大于处方商品数量 if ($remaining_quantity >= $product_data['product_num']){ // 把商品价格置为0。金额按照0计算 - $product_data['product_price'] = 0; + $product_datas[$key]['product_price'] = 0; // 已使用数量 = 原数量+此次使用数量 - $product_data['used_quantity'] = $product_data['product_num']; + $product_datas[$key]['used_quantity'] = $product_data['product_num']; }else{ // 已使用数量 = 最大可用数量;表示此服务包商品已使用完毕 - $product_data['used_quantity'] = $remaining_quantity; + $product_datas[$key]['used_quantity'] = $remaining_quantity; } // 此处重新计算药品总金额 @@ -1704,29 +1705,16 @@ class PatientOrderService extends BaseService return fail(HttpEnumCode::SERVER_ERROR); } - if (!empty($order_service_package) && !empty($order_service_package_detail)){ - // 获取服务包内某一药品的总数量 - $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_detail['package_id'],$product_data['product_id']); - - // 获取服务包内某一药品的剩余数量 - $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$product_data['product_id'],$total_quantity); - - // 获取服务包内所有药品 - $health_package_products = $OrderServicePackageService->getOrderServiceProduct($order_service_package_detail['package_id']); - foreach ($health_package_products as $health_package_product){ - // 可用数量大于处方商品数量 - if ($remaining_quantity >= $product_data['product_num'] && $health_package_product['product_id'] == $product_data['product_id']){ - $data = array(); - $data['order_service_id'] = $order_service_package['order_service_id']; - $data['order_product_id'] = $order_product['order_product_id']; - $data['order_product_no'] = $order_product['order_product_no']; - $data['product_item_id'] = $order_product_item['product_item_id']; - $data['product_id'] = $product_data['product_id']; - $data['used_quantity'] = $product_data['used_quantity']; - - OrderServicePackageProduct::addOrderServicePackageProduct($data); - } - } + // 存在已使用药品数量 + if ($product_data['used_quantity'] > 0){ + $data = array(); + $data['order_service_id'] = $order_service_package['order_service_id']; + $data['order_product_id'] = $order_product['order_product_id']; + $data['order_product_no'] = $order_product['order_product_no']; + $data['product_item_id'] = $order_product_item['product_item_id']; + $data['product_id'] = $product_data['product_id']; + $data['used_quantity'] = $product_data['used_quantity']; + OrderServicePackageProduct::addOrderServicePackageProduct($data); } // 处方药品表标记为已使用 From bf94959b06c469e7c5742b1b191d50387948af46 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 30 Apr 2024 10:42:39 +0800 Subject: [PATCH 207/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E6=94=AF=E4=BB=98/=E4=B8=8A=E6=8A=A5=E5=90=8E=EF=BC=8C?= =?UTF-8?q?=E5=A4=84=E6=96=B9=E5=B9=B3=E5=8F=B0=E5=AE=A1=E6=A0=B8=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E6=83=85=E5=86=B5=E4=B8=8B=E5=81=A5=E5=BA=B7=E5=8C=85?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=9A=84=E8=8D=AF=E5=93=81=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E6=95=B0=E9=87=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderProductService.php | 19 ++++++++++-- app/Services/OrderService.php | 46 +++++++++++++++++++++++++--- 2 files changed, 57 insertions(+), 8 deletions(-) diff --git a/app/Services/OrderProductService.php b/app/Services/OrderProductService.php index 2a33267..2506693 100644 --- a/app/Services/OrderProductService.php +++ b/app/Services/OrderProductService.php @@ -13,6 +13,7 @@ use App\Model\OrderProduct; use App\Model\OrderProductCoupon; use App\Model\OrderProductItem; use App\Model\OrderProductRefund; +use App\Model\OrderServicePackageDetail; use App\Model\OrderServicePackageInquiry; use App\Model\OrderServicePackageProduct; use App\Model\Product; @@ -165,13 +166,25 @@ class OrderProductService extends BaseService $params['amount_id'] = $product_platform_amount['amount_id']; ProductPlatformAmount::inc($params, 'stock', (float)$item['amount']); - // 回退服务包已使用药品数量 - if ($order_inquiry['inquiry_type'] == 1 && $order_inquiry['inquiry_mode'] == 8){ + // 获取患者家庭成员进行中的服务包订单-健康包 + $OrderServicePackageService = new OrderServicePackageService(); + $order_service_package = $OrderServicePackageService->getPatientFamilyInProgressServicePackage($order_inquiry['user_id'],$order_inquiry['family_id'],$order_inquiry['doctor_id'],1); + if (!empty($order_service_package)){ + // 回退服务包已使用药品数量 $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; $params['order_product_id'] = $item['order_product_id']; $params['product_item_id'] = $item['product_item_id']; $params['product_id'] = $item['product_id']; - OrderServicePackageProduct::deleteOrderServicePackageProduct($params); + $order_service_package_product = OrderServicePackageProduct::getOne($params); + if (!empty($order_service_package_product)){ + $params = array(); + $params['service_product_id'] = $order_service_package_product['service_product_id']; + + $data = array(); + $data['used_quantity'] = 0; + OrderServicePackageProduct::edit($params,$data); + } } } diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 6dbee40..c89206b 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -12,11 +12,13 @@ use App\Model\OrderInquiry; use App\Model\OrderInquiryCoupon; use App\Model\OrderInquiryRefund; use App\Model\OrderProduct; +use App\Model\OrderProductItem; use App\Model\OrderProductRefund; use App\Model\OrderRefund; use App\Model\OrderServicePackage; use App\Model\OrderServicePackageDetail; use App\Model\OrderServicePackageInquiry; +use App\Model\OrderServicePackageProduct; use App\Model\OrderServicePackageRefund; use App\Utils\Log; use Extend\Wechat\WechatPay; @@ -212,11 +214,6 @@ class OrderService extends BaseService $refund_id = $refund_result['refund_id']; } else { - // 药品订单不存在模拟退款 - if ($order['order_type'] == 2){ - throw new BusinessException("订单金额错误"); - } - // 模拟退款 $refund_status = 3; @@ -337,6 +334,45 @@ class OrderService extends BaseService $params['order_product_id'] = $order_product['order_product_id']; OrderProduct::edit($params,$data); + // 获取问诊订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_product['order_inquiry_id']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)){ + throw new BusinessException("未查询到对应问诊订单数据"); + } + + // 获取订单商品订单列表 + $params = array(); + $params['order_product_id'] = $order_product['order_product_id']; + $order_product_items = OrderProductItem::getList($params); + if (empty($order_product_items)){ + throw new BusinessException("未查询到对应订单商品订单列表"); + } + + // 获取患者家庭成员进行中的服务包订单-健康包 + $OrderServicePackageService = new OrderServicePackageService(); + $order_service_package = $OrderServicePackageService->getPatientFamilyInProgressServicePackage($order_product['user_id'],$order_inquiry['family_id'],$order_inquiry['doctor_id'],1); + if (!empty($order_service_package)){ + // 回退服务包已使用药品数量 + foreach ($order_product_items as $order_product_item){ + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $params['order_product_id'] = $order_product_item['order_product_id']; + $params['product_item_id'] = $order_product_item['product_item_id']; + $params['product_id'] = $order_product_item['product_id']; + $order_service_package_product = OrderServicePackageProduct::getOne($params); + if (!empty($order_service_package_product)){ + $params = array(); + $params['service_product_id'] = $order_service_package_product['service_product_id']; + + $data = array(); + $data['used_quantity'] = 0; + OrderServicePackageProduct::edit($params,$data); + } + } + } + break; case 3: // 检测订单 // 获取订单数据 From ad389c4fca96b98206d362bf27193b252c90d871 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 30 Apr 2024 11:47:34 +0800 Subject: [PATCH 208/274] 1 --- .../getPrescriptionOrderStatusCommand.php | 36 +++++++------------ 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/app/Command/getPrescriptionOrderStatusCommand.php b/app/Command/getPrescriptionOrderStatusCommand.php index 97e6014..04e12b8 100644 --- a/app/Command/getPrescriptionOrderStatusCommand.php +++ b/app/Command/getPrescriptionOrderStatusCommand.php @@ -45,20 +45,20 @@ class getPrescriptionOrderStatusCommand extends HyperfCommand try { // 获取可查询商品订单 - $order_product_ids = $this->getSearchableProductOrder(); - if (empty($order_product_ids)){ + $order_products = $this->getSearchableProductOrder(); + if (empty($order_products)){ $this->line("结束:无可执行的商品订单"); return; } - foreach ($order_product_ids as $item) { + foreach ($order_products as $order_product) { Db::beginTransaction(); - $this->line("本次请求订单号:" . $item['order_product_id']); + $this->line("本次请求订单号:" . $order_product['order_product_id']); // 获取药品订单处方数据 $params = array(); - $params['order_prescription_id'] = $item['order_prescription_id']; + $params['order_prescription_id'] = $order_product['order_prescription_id']; $order_prescription = OrderPrescription::getOne($params); if (empty($order_prescription)){ Db::rollBack(); @@ -68,7 +68,7 @@ class getPrescriptionOrderStatusCommand extends HyperfCommand try { $Prescription = new Prescription(); - $result = $Prescription->getPrescription($item['order_product_no'],$order_prescription['prescription_code']); + $result = $Prescription->getPrescription($order_product['order_product_no'],$order_prescription['prescription_code']); $this->line("处方平台数据:" . json_encode($result,JSON_UNESCAPED_UNICODE)); @@ -88,7 +88,7 @@ class getPrescriptionOrderStatusCommand extends HyperfCommand if ($result['status'] == "CFD03" || $result['status'] == "CFD04" || $result['status'] == "CFD06" || $result['status'] == "CFD07"){ // 药师审核未通过/库存不足/已取消/申请退款 // 检测药品订单数据 - $res = $this->checkPreFailedOrderStatus($item); + $res = $this->checkPreFailedOrderStatus($order_product); if (!$res){ Db::rollBack(); continue; @@ -96,22 +96,22 @@ class getPrescriptionOrderStatusCommand extends HyperfCommand // 修改失败时药品订单数据 if ($result['status'] == "CFD03"){ - $this->savePreFailedOrderStatus($item,"复核失败"); + $this->savePreFailedOrderStatus($order_product,"复核失败"); }elseif($result['status'] == "CFD04"){ - $this->savePreFailedOrderStatus($item,"库存不足"); + $this->savePreFailedOrderStatus($order_product,"库存不足"); }else{ - $this->savePreFailedOrderStatus($item,"订单取消"); + $this->savePreFailedOrderStatus($order_product,"订单取消"); } // 执行退款 $OrderService = new OrderService(); - $OrderService->orderRefund($item['order_product_no'],"订单退款"); + $OrderService->orderRefund($order_product['order_product_no'],"订单退款"); } if ($result['status'] == "CFD05"){ // 已发货/已取货 // 检测成功时药品订单数据 - $res = $this->checkPreSuccessOrderStatus($item); + $res = $this->checkPreSuccessOrderStatus($order_product); if (!$res){ Db::rollBack(); continue; @@ -198,17 +198,7 @@ class getPrescriptionOrderStatusCommand extends HyperfCommand $order_product_status = [2,3];// 订单状态(1:待支付 2:待发货 3:已发货 4:已签收 5:已取消) - $fields = [ - 'order_product_id', - 'order_product_no', - 'order_prescription_id', - 'patient_id', - 'order_product_status', - 'consignee_tel', - 'logistics_no', - ]; - - $order_product = OrderProduct::getStatusList($params,$order_product_status,$fields); + $order_product = OrderProduct::getStatusList($params,$order_product_status); if (empty($order_product)){ return []; } From d7ce7868bdce63837a7b1c3d0def4c1bc22bdedf Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 30 Apr 2024 11:50:06 +0800 Subject: [PATCH 209/274] 2 --- app/Services/OrderService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index c89206b..cdefd5f 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -352,7 +352,7 @@ class OrderService extends BaseService // 获取患者家庭成员进行中的服务包订单-健康包 $OrderServicePackageService = new OrderServicePackageService(); - $order_service_package = $OrderServicePackageService->getPatientFamilyInProgressServicePackage($order_product['user_id'],$order_inquiry['family_id'],$order_inquiry['doctor_id'],1); + $order_service_package = $OrderServicePackageService->getPatientFamilyInProgressServicePackage($order_inquiry['user_id'],$order_inquiry['family_id'],$order_inquiry['doctor_id'],1); if (!empty($order_service_package)){ // 回退服务包已使用药品数量 foreach ($order_product_items as $order_product_item){ From 13719c1fd5b407e72b24d81183f267da6a1b0a7f Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 30 Apr 2024 14:33:55 +0800 Subject: [PATCH 210/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E8=AF=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 4 ++-- app/Services/PatientOrderService.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 5bdff44..24dcf6c 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -106,7 +106,7 @@ class OrderServicePackageService extends BaseService $order_inquiry = $InquiryService->checkPatientDoctorProgressInquiry($user_info['client_user_id'], $doctor_id); if (!empty($order_inquiry)) { $result['status'] = 4; - $result['message'] = "您和当前医生存在问诊中订单,无法够买服务包"; + $result['message'] = "您和当前医生存在问诊中订单,无法购买服务包"; $result['data']['order_no'] = $order_inquiry['inquiry_no']; $result['data']['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; return success($result); @@ -249,7 +249,7 @@ class OrderServicePackageService extends BaseService $order_inquiry = $InquiryService->checkPatientDoctorProgressInquiry($user_info['client_user_id'], $request_params['doctor_id']); if (!empty($order_inquiry)) { $result['status'] = 4; - $result['message'] = "您和当前医生存在问诊中订单,无法够买服务包"; + $result['message'] = "您和当前医生存在问诊中订单,无法购买服务包"; $result['data']['order_no'] = $order_inquiry['order_inquiry_id']; return success($result); } diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 72ef003..2b4fb0f 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1130,7 +1130,7 @@ class PatientOrderService extends BaseService $InquiryService = new InquiryService(); $order_inquiry = $InquiryService->checkPatientDoctorProgressInquiry($user_info['client_user_id'], $order_service_package['doctor_id']); if (!empty($order_inquiry)) { - $return_result['message'] = "您和当前医生存在问诊中订单,无法够买服务包"; + $return_result['message'] = "您和当前医生存在问诊中订单,无法购买服务包"; $return_result['status'] = 3; $return_result['data'] = $result; $return_result['data']['order_no'] = $order_inquiry['inquiry_no']; From 1671fcac2fc56634045ee76069c85350c3c6a100 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 30 Apr 2024 15:32:09 +0800 Subject: [PATCH 211/274] 1 --- app/Services/PatientOrderService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 2b4fb0f..1790c4b 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1559,7 +1559,7 @@ class PatientOrderService extends BaseService $amount_total = bcadd( $amount_total, bcmul( - $product_data['product_price'], + $product_datas[$key]['product_price'], $product_data['product_num'], 2 ), From 7000436312cc588e618d73e207192c2638dacc14 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 30 Apr 2024 16:24:22 +0800 Subject: [PATCH 212/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E8=8D=AF=E5=93=81=E8=AE=A2=E5=8D=95+=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E9=A1=B5=E6=95=B0=E6=8D=AE=E7=9A=84=E8=8D=AF=E5=93=81=E4=BB=B7?= =?UTF-8?q?=E6=A0=BC=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 189 +++++++++++++++------------ 1 file changed, 105 insertions(+), 84 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 1790c4b..91d0e48 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -303,7 +303,7 @@ class PatientOrderService extends BaseService $params = array(); $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $order_inquiry_refund = OrderInquiryRefund::getList($params); - if (!empty($order_inquiry_refund)){ + if (!empty($order_inquiry_refund)) { $order_inquiry['order_inquiry_refund'] = $order_inquiry_refund; } @@ -471,9 +471,9 @@ class PatientOrderService extends BaseService Order::edit($params, $data); Db::commit(); - }catch (\Throwable $e){ + } catch (\Throwable $e) { Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR,$e->getMessage()); + return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage()); } return success(); @@ -504,7 +504,7 @@ class PatientOrderService extends BaseService } $OrderService = new OrderService(); - $result = $OrderService->cancelUnpayOrder($order_inquiry['inquiry_no'],2,"主动取消"); + $result = $OrderService->cancelUnpayOrder($order_inquiry['inquiry_no'], 2, "主动取消"); if ($result['status'] != 1) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, $result['message']); @@ -754,9 +754,9 @@ class PatientOrderService extends BaseService Order::edit($params, $data); Db::commit(); - }catch (\Throwable $e){ + } catch (\Throwable $e) { Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR,$e->getMessage()); + return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage()); } return success(); @@ -1092,9 +1092,9 @@ class PatientOrderService extends BaseService $result['created_at'] = $order_service_package['created_at']; $result['inquiry_type'] = 1; - if ($order_service_package['order_service_type'] == 1){ + if ($order_service_package['order_service_type'] == 1) { $inquiry_mode = 8; - }else{ + } else { $inquiry_mode = 9; } $result['inquiry_mode'] = $inquiry_mode; @@ -1240,7 +1240,7 @@ class PatientOrderService extends BaseService $params = array(); $params['order_no'] = $order_inquiry['inquiry_no']; - Order::edit($params,$data); + Order::edit($params, $data); // 加入分配医生队列-快速-购药 if ($order_inquiry['inquiry_type'] == 2 || $order_inquiry['inquiry_type'] == 4) { @@ -1338,27 +1338,27 @@ class PatientOrderService extends BaseService $params = array(); $params['order_no'] = $order_product['order_product_no']; - Order::edit($params,$data); + Order::edit($params, $data); try { - if ($order_product['coupon_amount_total'] > 0){ + if ($order_product['coupon_amount_total'] > 0) { // 获取药品订单优惠卷数据 $params = array(); $params['order_product_id'] = $order_product['order_product_id']; $order_product_coupons = OrderProductCoupon::getList($params); - if (!empty($order_product_coupons)){ - foreach ($order_product_coupons as $order_product_coupon){ + if (!empty($order_product_coupons)) { + foreach ($order_product_coupons as $order_product_coupon) { // 获取用户优惠卷数据 $params = array(); $params['user_coupon_id'] = $order_product_coupon['user_coupon_id']; $user_coupon = UserCoupon::getOne($params); - if (!empty($user_coupon)){ + if (!empty($user_coupon)) { // 获取优惠卷数据 $params = array(); $params['coupon_id'] = $user_coupon['coupon_id']; $coupon = Coupon::getOne($params); - if (!empty($coupon)){ - if ($coupon['reissue_interval_days'] > 0){ + if (!empty($coupon)) { + if ($coupon['reissue_interval_days'] > 0) { $data = array(); $data['coupon_id'] = $coupon['coupon_id']; $data['user_id'] = $user_coupon['user_id']; @@ -1379,7 +1379,7 @@ class PatientOrderService extends BaseService } } } - }catch (\Throwable $e){ + } catch (\Throwable $e) { // 此处异常不做处理 Log::getInstance("PatientOrderService-addPatientOrderPay")->error($e->getMessage()); } @@ -1402,7 +1402,7 @@ class PatientOrderService extends BaseService } Db::commit(); - }catch (\Throwable $e){ + } catch (\Throwable $e) { Db::rollBack(); return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage()); } @@ -1454,7 +1454,7 @@ class PatientOrderService extends BaseService $params = array(); $params['order_inquiry_id'] = $order_prescription['order_inquiry_id']; $order_inquiry = OrderInquiry::getOne($params); - if (empty($order_inquiry)){ + if (empty($order_inquiry)) { return fail(HttpEnumCode::HTTP_ERROR, "创建订单失败"); } @@ -1505,6 +1505,7 @@ class PatientOrderService extends BaseService // 商品数据 $product['product_num'] = $order_prescription_product['prescription_product_num']; $product['used_quantity'] = 0; // 健康包服务下已使用赠送药品的数量,默认赋0 + $product['actual_quantity'] = $order_prescription_product['prescription_product_num']; // 实际药品数量 = 处方数量 - 健康包可使用的赠送药品数量 $product_data = $product->toArray(); $product_datas[] = $product_data; } @@ -1520,14 +1521,14 @@ class PatientOrderService extends BaseService // 获取患者家庭成员进行中的服务包订单-健康包 $OrderServicePackageService = new OrderServicePackageService(); - $order_service_package = $OrderServicePackageService->getPatientFamilyInProgressServicePackage($order_inquiry['user_id'],$order_inquiry['family_id'],$order_inquiry['doctor_id'],1); - if (!empty($order_service_package)){ + $order_service_package = $OrderServicePackageService->getPatientFamilyInProgressServicePackage($order_inquiry['user_id'], $order_inquiry['family_id'], $order_inquiry['doctor_id'], 1); + if (!empty($order_service_package)) { // 处理健康包赠送商品-金额、数量 // 获取服务包订单详情 $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (empty($order_service_package_detail)){ + if (empty($order_service_package_detail)) { return fail(); } @@ -1536,23 +1537,29 @@ class PatientOrderService extends BaseService $OrderServicePackageService = new OrderServicePackageService(); $amount_total = 0; - foreach ($product_datas as $key => $product_data){ + foreach ($product_datas as $key => $product_data) { // 获取服务包内某一药品的总数量 - $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_detail['package_id'],$product_data['product_id']); + $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_detail['package_id'], $product_data['product_id']); // 获取服务包内某一药品的剩余数量 - $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$product_data['product_id'],$total_quantity); + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'], $product_data['product_id'], $total_quantity); // 可用数量大于处方商品数量 - if ($remaining_quantity >= $product_data['product_num']){ + if ($remaining_quantity >= $product_data['product_num']) { // 把商品价格置为0。金额按照0计算 $product_datas[$key]['product_price'] = 0; // 已使用数量 = 原数量+此次使用数量 $product_datas[$key]['used_quantity'] = $product_data['product_num']; - }else{ + + // 实际药品数量 = 处方数量 - 健康包可使用的赠送药品数量 + $product_data['actual_quantity'] = 0; + } else { // 已使用数量 = 最大可用数量;表示此服务包商品已使用完毕 $product_datas[$key]['used_quantity'] = $remaining_quantity; + + // 实际药品数量 = 处方数量 - 健康包可使用的赠送药品数量 + $product_data[$key]['actual_quantity'] = $product_data['product_num'] - $remaining_quantity; } // 此处重新计算药品总金额 @@ -1560,7 +1567,7 @@ class PatientOrderService extends BaseService $amount_total, bcmul( $product_datas[$key]['product_price'], - $product_data['product_num'], + $product_data['actual_quantity'], 2 ), 2 @@ -1594,7 +1601,7 @@ class PatientOrderService extends BaseService // 实际支付金额=商品总金额-优惠卷金额+运费金额 $payment_amount_total = bcadd( bcsub( - $amount_total , + $amount_total, $coupon_amount_total, 2 ), @@ -1602,12 +1609,12 @@ class PatientOrderService extends BaseService 2 ); if ($app_env == "dev") { - if ($payment_amount_total > 0){ + if ($payment_amount_total > 0) { $payment_amount_total = 0.01; } } - if ($payment_amount_total < 0){ + if ($payment_amount_total < 0) { return fail(HttpEnumCode::SERVER_ERROR); } @@ -1617,7 +1624,7 @@ class PatientOrderService extends BaseService $pay_channel = 1; } elseif ($client_type == 2) { $pay_channel = 2; - }else{ + } else { return fail(HttpEnumCode::HTTP_ERROR, "支付方式错误"); } @@ -1693,7 +1700,7 @@ class PatientOrderService extends BaseService $data['order_prescription_id'] = $order_prescription['order_prescription_id']; $data['product_id'] = $product_data['product_id']; $data['product_name'] = $product_data['product_name']; - $data['product_price'] = bcmul($product_data['product_price'],$product_data['product_num'],3); + $data['product_price'] = bcmul($product_data['product_price'], $product_data['actual_quantity'], 3); $data['product_platform_code'] = $product_data['product_platform_code']; $data['amount'] = $product_data['product_num']; $data['manufacturer'] = $product_data['manufacturer']; @@ -1706,7 +1713,7 @@ class PatientOrderService extends BaseService } // 存在已使用药品数量 - if ($product_data['used_quantity'] > 0){ + if ($product_data['used_quantity'] > 0) { $data = array(); $data['order_service_id'] = $order_service_package['order_service_id']; $data['order_product_id'] = $order_product['order_product_id']; @@ -1743,7 +1750,7 @@ class PatientOrderService extends BaseService // 处理优惠卷数据 if (!empty($user_coupons)) { - foreach ($user_coupons as $user_coupon){ + foreach ($user_coupons as $user_coupon) { // 增加订单优惠卷表 $data = array(); $data['order_id'] = $order['order_id'];// 订单id @@ -1781,7 +1788,7 @@ class PatientOrderService extends BaseService // 增加至未支付取消订单延迟队列 $time = 60 * 30; - if (\Hyperf\Config\config('app_env') == "dev"){ + if (\Hyperf\Config\config('app_env') == "dev") { $time = 60 * 5; } @@ -2009,7 +2016,7 @@ class PatientOrderService extends BaseService $params = array(); $params['order_inquiry_id'] = $order_prescription['order_inquiry_id']; $order_inquiry = OrderInquiry::getOne($params); - if (empty($order_inquiry)){ + if (empty($order_inquiry)) { return fail(); } @@ -2043,10 +2050,12 @@ class PatientOrderService extends BaseService } } - $amount_total = bcadd($amount_total,($product['product_price'] * $order_prescription_product['prescription_product_num']),2); + $amount_total = bcadd($amount_total, ($product['product_price'] * $order_prescription_product['prescription_product_num']), 2); // 处方药品数据 $product['product_num'] = $order_prescription_product['prescription_product_num']; + $product['used_quantity'] = 0; // 已使用数量 + $product['actual_quantity'] = $order_prescription_product['prescription_product_num']; // 实际药品数量 = 处方数量 - 健康包可使用的赠送药品数量 $product_data = $product->toArray(); $product_datas[] = $product_data; } @@ -2057,31 +2066,43 @@ class PatientOrderService extends BaseService // 获取患者家庭成员进行中的服务包订单 $OrderServicePackageService = new OrderServicePackageService(); - $order_service_package = $OrderServicePackageService->getPatientFamilyInProgressServicePackage($order_inquiry['user_id'],$order_inquiry['family_id'],$order_inquiry['doctor_id'],1); - if (!empty($order_service_package)){ + $order_service_package = $OrderServicePackageService->getPatientFamilyInProgressServicePackage($order_inquiry['user_id'], $order_inquiry['family_id'], $order_inquiry['doctor_id'], 1); + if (!empty($order_service_package)) { // 处理健康包赠送商品 // 获取服务包订单详情 $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (empty($order_service_package_detail)){ + if (empty($order_service_package_detail)) { return fail(); } // 此处不检测未支付的商品订单,在创建订单时会进行数量的扣减 // 处理商品数量、金额 $amount_total = 0; - foreach ($product_datas as &$product_data){ + foreach ($product_datas as &$product_data) { // 获取服务包内某一药品的总数量 - $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_detail['package_id'],$product_data['product_id']); + $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_detail['package_id'], $product_data['product_id']); // 获取服务包内某一药品的剩余数量 - $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$product_data['product_id'],$total_quantity); + $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'], $product_data['product_id'], $total_quantity); // 可用数量大于处方商品数量 - if ($remaining_quantity >= $product_data['product_num']){ + if ($remaining_quantity >= $product_data['product_num']) { // 把商品价格置为0。金额按照0计算 $product_data['product_price'] = 0; + + // 已使用数量 = 原数量+此次使用数量 + $product_data['used_quantity'] = $product_data['product_num']; + + // 实际药品数量 = 处方数量 - 健康包可使用的赠送药品数量 + $product_data['actual_quantity'] = 0; + } else { + // 已使用数量 = 最大可用数量;表示此服务包商品已使用完毕 + $product_data['used_quantity'] = $remaining_quantity; + + // 实际药品数量 = 处方数量 - 健康包可使用的赠送药品数量 + $product_data['actual_quantity'] = $product_data['product_num'] - $remaining_quantity; } // 此处重新计算药品总金额 @@ -2089,7 +2110,7 @@ class PatientOrderService extends BaseService $amount_total, bcmul( $product_data['product_price'], - $product_data['product_num'], + $product_data['actual_quantity'], 2 ), 2 @@ -2115,7 +2136,7 @@ class PatientOrderService extends BaseService } // 实际支付金额=商品总金额-优惠卷金额+运费金额 - $payment_amount_total = bcadd(bcsub($amount_total , $coupon_amount_total,2), $logistics_fee, 2); + $payment_amount_total = bcadd(bcsub($amount_total, $coupon_amount_total, 2), $logistics_fee, 2); // 获取收货地址 $params = array(); @@ -2450,9 +2471,9 @@ class PatientOrderService extends BaseService Order::edit($params, $data); Db::commit(); - }catch (\Throwable $e){ + } catch (\Throwable $e) { Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR,$e->getMessage()); + return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage()); } return success(); @@ -2535,7 +2556,7 @@ class PatientOrderService extends BaseService if ($order_detection['detection_pay_status'] == 2 && $order_detection['detection_refund_status'] != 3) { // 需退款 $OrderService = new OrderService(); - $OrderService->orderRefund($order_detection['detection_no'],"取消检测"); + $OrderService->orderRefund($order_detection['detection_no'], "取消检测"); } // 删除锁 @@ -2625,7 +2646,7 @@ class PatientOrderService extends BaseService } $OrderService = new OrderService(); - $result = $OrderService->cancelUnpayOrder($order_service_package['order_service_no'],2,"主动取消"); + $result = $OrderService->cancelUnpayOrder($order_service_package['order_service_no'], 2, "主动取消"); if ($result['status'] != 1) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, $result['message']); @@ -2658,13 +2679,13 @@ class PatientOrderService extends BaseService $params['patient_id'] = $user_info['client_user_id']; $params['order_no'] = $order_no; $order = Order::getOne($params); - if (empty($order)){ + if (empty($order)) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "非法订单"); } $OrderService = new OrderService(); - $result = $OrderService->cancelUnpayOrder($order['order_no'],2,"主动取消"); + $result = $OrderService->cancelUnpayOrder($order['order_no'], 2, "主动取消"); if ($result['status'] != 1) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, $result['message']); @@ -2742,7 +2763,7 @@ class PatientOrderService extends BaseService $order_detection = OrderDetection::getOne($params); if (!empty($order_detection)) { // 推送患者-订单取消成功通知 - $MessagePush = new MessagePush($order_detection['user_id'],$order_detection['detection_no']); + $MessagePush = new MessagePush($order_detection['user_id'], $order_detection['detection_no']); $MessagePush->patientCancelDetectionOrderSuccess($order_detection['order_detection_id']); } @@ -2763,7 +2784,7 @@ class PatientOrderService extends BaseService $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); - if (!empty($order_service_package_inquiry)){ + if (!empty($order_service_package_inquiry)) { // 获取医生数据 $params = array(); $params['doctor_id'] = $order_service_package['doctor_id']; @@ -2779,7 +2800,7 @@ class PatientOrderService extends BaseService default: // 错误不处理 } - }catch (\Throwable $e){ + } catch (\Throwable $e) { // 错误不处理 Log::getInstance("PatientOrderService-putCancelPatientOrder")->error($e->getMessage()); } @@ -2822,7 +2843,7 @@ class PatientOrderService extends BaseService } if ($order_service_status == 4) { - $order_service_status_params = [4,5]; + $order_service_status_params = [4, 5]; } } @@ -3023,17 +3044,17 @@ class PatientOrderService extends BaseService $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; $order_service_package_refund = OrderServicePackageRefund::getList($params); - if (!empty($order_service_package_refund)){ + if (!empty($order_service_package_refund)) { $order_service_package['order_service_package_refund'] = $order_service_package_refund; } $order_service_package['discount_product_total_amount'] = 0; - if ($order_service_package['order_service_type'] == 1){ + if ($order_service_package['order_service_type'] == 1) { // 获取健康包配置 $params = array(); $health_package = HealthPackage::getOne($params); - if (empty($health_package)){ + if (empty($health_package)) { return fail(); } @@ -3046,7 +3067,7 @@ class PatientOrderService extends BaseService $params = array(); $params['order_id'] = $order_service_package['order_id']; $order_refund = OrderRefund::getOne($params); - if (!empty($order_refund)){ + if (!empty($order_refund)) { $order_service_package['refund_total'] = $order_refund['refund_total']; } @@ -3056,7 +3077,7 @@ class PatientOrderService extends BaseService $params = array(); $params['order_id'] = $order_service_package['order_id']; $order_refund = OrderRefund::getList($params); - if (!empty($order_refund)){ + if (!empty($order_refund)) { $order_service_package['order_refund'] = $order_refund; } @@ -3091,17 +3112,17 @@ class PatientOrderService extends BaseService $params['patient_id'] = $user_info['client_user_id']; $params['order_service_no'] = $order_no; $params['is_delete'] = 0; - $order_service_package = OrderServicePackage::getOne($params,$fields); + $order_service_package = OrderServicePackage::getOne($params, $fields); if (empty($order_service_package)) { - return fail(HttpEnumCode::HTTP_ERROR,"非法订单"); + return fail(HttpEnumCode::HTTP_ERROR, "非法订单"); } // 获取订单详情数据 $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (empty($order_service_package_detail)){ - return fail(HttpEnumCode::HTTP_ERROR,"非法订单"); + if (empty($order_service_package_detail)) { + return fail(HttpEnumCode::HTTP_ERROR, "非法订单"); } // 定义返回数据 @@ -3116,12 +3137,12 @@ class PatientOrderService extends BaseService $OrderServicePackageService = new OrderServicePackageService(); // 获取问诊订单数据 - if (in_array($order_service_package['order_service_status'],[2,3,4,5])){ + if (in_array($order_service_package['order_service_status'], [2, 3, 4, 5])) { // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; $order_service_package_inquirys = OrderServicePackageInquiry::getList($params); - foreach ($order_service_package_inquirys as $key => $order_service_package_inquiry){ + foreach ($order_service_package_inquirys as $key => $order_service_package_inquiry) { // 获取问诊订单数据 $fields = [ 'order_inquiry_id', @@ -3131,32 +3152,32 @@ class PatientOrderService extends BaseService $params = array(); $params['order_inquiry_id'] = $order_service_package_inquiry['order_inquiry_id']; - $order_inquiry = OrderInquiry::getOne($params,$fields); - if (!empty($order_inquiry)){ + $order_inquiry = OrderInquiry::getOne($params, $fields); + if (!empty($order_inquiry)) { $result['order_inquiry'][$key] = $order_inquiry->toArray(); } } } - if (in_array($order_service_package['order_service_status'],[3,4,5])){ + if (in_array($order_service_package['order_service_status'], [3, 4, 5])) { // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) - if (!empty($order_service_package['start_time'])){ + if (!empty($order_service_package['start_time'])) { // 当月时间 $current_month_date = $OrderServicePackageService->getCurrentMonthDate($order_service_package['start_time']); $result['order_service_package']['current_month_start_date'] = $current_month_date['current_month_start_date']; $result['order_service_package']['current_month_finish_date'] = $current_month_date['current_month_finish_date']; // 获取服务包当月已问诊次数 - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$order_service_package['user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); // 获取服务包当月剩余问诊次数 if ($order_service_package_detail['monthly_frequency'] != 0) { // 获取服务包当月剩余问诊次数 $remaining_inquiry_count = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; - if ($remaining_inquiry_count < 0){ + if ($remaining_inquiry_count < 0) { $remaining_inquiry_count = 0; } - }else{ + } else { $remaining_inquiry_count = "不限"; } @@ -3166,27 +3187,27 @@ class PatientOrderService extends BaseService } // 健康包数据 - if ($order_service_package['order_service_type'] == 1){ + if ($order_service_package['order_service_type'] == 1) { // 健康包关联优惠卷数据 - if (in_array($order_service_package['order_service_status'],[3,4,5])){ + if (in_array($order_service_package['order_service_status'], [3, 4, 5])) { // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) // 获取患者某一类型下的全部优惠卷 - $coupon = UserCoupon::getUserAllObjectTypeCoupon($order_service_package['user_id'],7); - if (!empty($coupon)){ + $coupon = UserCoupon::getUserAllObjectTypeCoupon($order_service_package['user_id'], 7); + if (!empty($coupon)) { $result['order_service_package_coupon'] = $coupon->toArray(); } } // 健康包药品订单数据-周期内所有药品订单 - if (in_array($order_service_package['order_service_status'],[3,4,5])){ + if (in_array($order_service_package['order_service_status'], [3, 4, 5])) { $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; $order_service_package_products = OrderServicePackageProduct::getList($params); - foreach ($order_service_package_products as $order_service_package_product){ + foreach ($order_service_package_products as $order_service_package_product) { $params = array(); $params['order_product_id'] = $order_service_package_product['order_product_id']; $order_product = OrderProduct::getOne($params); - if (!empty($order_product)){ + if (!empty($order_product)) { $result['order_product'][] = $order_product->toArray(); } } @@ -3195,7 +3216,7 @@ class PatientOrderService extends BaseService $health_package_products = $OrderServicePackageService->getOrderServiceProduct($order_service_package_detail['package_id']); foreach ($health_package_products as $health_package_product) { // 获取服务包内某一药品的剩余数量 - $result['order_service_package_detail']['remaining_quantity'] = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'],$health_package_product['product_id'],$health_package_product['quantity']); + $result['order_service_package_detail']['remaining_quantity'] = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'], $health_package_product['product_id'], $health_package_product['quantity']); } } } @@ -3211,7 +3232,7 @@ class PatientOrderService extends BaseService * @param string $family_id * @return string */ - public function getNotFinishedOrderInquiry(string|int $inquiry_type,string|int $inquiry_mode, string $patient_id = '', string $family_id = ''): string + public function getNotFinishedOrderInquiry(string|int $inquiry_type, string|int $inquiry_mode, string $patient_id = '', string $family_id = ''): string { $params = array(); if (!empty($patient_id)) { From a5e8a3a6788e27bdb01b8b24f58ac438ecef7402 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 30 Apr 2024 16:29:34 +0800 Subject: [PATCH 213/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E8=8D=AF=E5=93=81=E8=AE=A2=E5=8D=95+=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E9=A1=B5=E6=95=B0=E6=8D=AE=E7=9A=84=E8=8D=AF=E5=93=81=E4=BB=B7?= =?UTF-8?q?=E6=A0=BC=E8=AE=A1=E7=AE=971?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 4 ++-- app/Services/UserCouponService.php | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 91d0e48..b918479 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1553,7 +1553,7 @@ class PatientOrderService extends BaseService $product_datas[$key]['used_quantity'] = $product_data['product_num']; // 实际药品数量 = 处方数量 - 健康包可使用的赠送药品数量 - $product_data['actual_quantity'] = 0; + $product_data[$key]['actual_quantity'] = 0; } else { // 已使用数量 = 最大可用数量;表示此服务包商品已使用完毕 $product_datas[$key]['used_quantity'] = $remaining_quantity; @@ -1567,7 +1567,7 @@ class PatientOrderService extends BaseService $amount_total, bcmul( $product_datas[$key]['product_price'], - $product_data['actual_quantity'], + $product_data[$key]['actual_quantity'], 2 ), 2 diff --git a/app/Services/UserCouponService.php b/app/Services/UserCouponService.php index 1e1f3f6..03e4664 100644 --- a/app/Services/UserCouponService.php +++ b/app/Services/UserCouponService.php @@ -326,7 +326,7 @@ class UserCouponService extends BaseService } // 判断商品数量是否满足 - if($coupon['min_usable_number'] > $coupon_product_data['product_num']){ + if($coupon['min_usable_number'] > $coupon_product_data['actual_quantity']){ continue; } @@ -340,13 +340,13 @@ class UserCouponService extends BaseService // 全场通用/全品类药品 if ($coupon['application_scope'] == 1 || $coupon['application_scope'] == 6){ // 获取总商品数量 - $product_num = 0; + $actual_quantity = 0; foreach ($coupon_product_datas as $coupon_product_data){ - $product_num = $product_num + $coupon_product_data['product_num']; + $actual_quantity = $actual_quantity + $coupon_product_data['actual_quantity']; } // 判断商品数量是否满足 - if($coupon['min_usable_number'] > $product_num){ + if($coupon['min_usable_number'] > $actual_quantity){ continue; } @@ -391,7 +391,7 @@ class UserCouponService extends BaseService $product_price = bcadd($product_price, bcmul( // 商品价格*数量 $coupon_product_data['product_price'], - $coupon_product_data['product_num'], + $coupon_product_data['actual_quantity'], 2 ), 2 @@ -406,7 +406,7 @@ class UserCouponService extends BaseService $product_price = bcadd($product_price, bcmul( // 商品价格*数量 $coupon_product_data['product_price'], - $coupon_product_data['product_num'], + $coupon_product_data['actual_quantity'], 2 ), 2 From 0144f1196a853cfd02df0a48bbcf1b9755cd502b Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 30 Apr 2024 17:15:41 +0800 Subject: [PATCH 214/274] 1 --- app/Services/PatientOrderService.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index b918479..c31911e 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1553,13 +1553,13 @@ class PatientOrderService extends BaseService $product_datas[$key]['used_quantity'] = $product_data['product_num']; // 实际药品数量 = 处方数量 - 健康包可使用的赠送药品数量 - $product_data[$key]['actual_quantity'] = 0; + $product_datas[$key]['actual_quantity'] = 0; } else { // 已使用数量 = 最大可用数量;表示此服务包商品已使用完毕 $product_datas[$key]['used_quantity'] = $remaining_quantity; // 实际药品数量 = 处方数量 - 健康包可使用的赠送药品数量 - $product_data[$key]['actual_quantity'] = $product_data['product_num'] - $remaining_quantity; + $product_datas[$key]['actual_quantity'] = $product_data['product_num'] - $remaining_quantity; } // 此处重新计算药品总金额 @@ -1567,7 +1567,7 @@ class PatientOrderService extends BaseService $amount_total, bcmul( $product_datas[$key]['product_price'], - $product_data[$key]['actual_quantity'], + $product_datas[$key]['actual_quantity'], 2 ), 2 From 51fa86fd4e5a79af8b4b816d25776ae12c7afc24 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 6 May 2024 13:54:49 +0800 Subject: [PATCH 215/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E8=AE=A2?= =?UTF-8?q?=E9=98=85=E6=B6=88=E6=81=AF=E6=8E=A8=E9=80=81=E6=96=87=E5=AD=97?= =?UTF-8?q?=E3=80=82=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=BE=85=E6=8E=A5=E8=AF=8A?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=9B=9E=E5=A4=8D=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/ImService.php | 40 ++++++++++++++++++++++++++++++ app/Services/MessagePush.php | 4 +-- app/Services/UserDoctorService.php | 9 +++++++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/app/Services/ImService.php b/app/Services/ImService.php index 79a2011..e02232a 100644 --- a/app/Services/ImService.php +++ b/app/Services/ImService.php @@ -1366,4 +1366,44 @@ class ImService extends BaseService throw new BusinessException($e->getMessage()); } } + + /** + * 多点医生接诊后,自动回复消息 + * @param array|object $order_inquiry 问诊订单数据 + * @param string $doctor_user_id 医生用户id + * @param string $patient_user_id 患者用户id + * @return void + */ + public function multiPointDoctorInquiryAutoReply(array|object $order_inquiry, string $doctor_user_id, string $patient_user_id): void + { + try { + // 发送消息 + $cloud_custom_data = array(); + $cloud_custom_data['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; + $cloud_custom_data['order_no'] = (string)$order_inquiry['inquiry_no']; + $cloud_custom_data['is_system'] = 1; + $cloud_custom_data['inquiry_type'] = $order_inquiry['inquiry_type']; + $cloud_custom_data['inquiry_mode'] = $order_inquiry['inquiry_mode']; + $cloud_custom_data['message_rounds'] = 0; + $cloud_custom_data['patient_family_data']['patient_name'] = $order_inquiry['patient_name']; + $cloud_custom_data['patient_family_data']['patient_sex'] = $order_inquiry['patient_sex']; + $cloud_custom_data['patient_family_data']['patient_age'] = $order_inquiry['patient_age']; + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 获取im消息推送中,服务包订单相关的自定义参数 + $OrderServicePackageService = new OrderServicePackageService(); + $result = $OrderServicePackageService->getImServicePackageCloudCustomData($order_inquiry['inquiry_no']); + if (!empty($result)){ + $cloud_custom_data = array_merge($cloud_custom_data,$result); + } + } + + $message_content = [ + 'Text' => "您好,已查看您提交的病情信息,您可以继续补充病情信息以便更好为您提供服务。如有购药需求,将按照病情及需要开具处方,需要您确认。", + ]; + + $this->sendMessage($doctor_user_id, $patient_user_id, $message_content, "TIMTextElem", $cloud_custom_data); + } catch (\Throwable $e) { + throw new BusinessException($e->getMessage()); + } + } } \ No newline at end of file diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index 2202369..0590447 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -2735,7 +2735,7 @@ class MessagePush extends BaseService "thing1" => "您有一个{$inquiry_mode}服务等待接诊",// 提醒内容 "name2" => (string)$this->order_inquiry['patient_name'],// 患者姓名 "thing4" => (string)$disease_desc,// 病情描述 - "thing6" => "72小时内未接诊,平台将自送取消服务",// 提示说明 + "thing6" => "72小时内未接诊,平台将自动取消服务",// 提示说明 "thing5" => "",// 咨询内容 ]; @@ -2839,7 +2839,7 @@ class MessagePush extends BaseService "thing1" => "发起{$inquiry_mode}服务中一次问诊",// 提醒内容 "name2" => (string)$this->order_inquiry['patient_name'],// 患者姓名 "thing4" => (string)$disease_desc,// 病情描述 - "thing6" => "24小时内未接诊,平台将自送取消问诊",// 提示说明 + "thing6" => "24小时内未接诊,平台将自动取消问诊",// 提示说明 "thing5" => "",// 咨询内容 ]; diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index db1aeda..73d639a 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -1996,6 +1996,15 @@ class UserDoctorService extends BaseService // 发送IM消息-患者病例 $imService->patientCase($order_inquiry,$user_doctor['user_id'],$order_inquiry_case['disease_desc']); + // 处理可处方字段 + $userDoctorService = new UserDoctorService(); + $multi_point_enable = $userDoctorService->getDoctorMultiPointEnable($user_doctor["doctor_id"]); + + // 多点医生接诊后,自动回复消息 + if ($user_doctor['multi_point_status'] == 1 && $multi_point_enable == 1){ + $imService->multiPointDoctorInquiryAutoReply($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']); + } + // 处理服务包情况 if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ $OrderServicePackageService = new OrderServicePackageService(); From dee389f10d6f2fe1bc696eb2d7ae6352d8ea06e5 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 6 May 2024 14:01:58 +0800 Subject: [PATCH 216/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=20=E6=9C=AA?= =?UTF-8?q?=E6=8E=A5=E8=AF=8A=E5=8F=96=E6=B6=88=E8=AE=A2=E5=8D=95=E5=BB=B6?= =?UTF-8?q?=E8=BF=9F=E9=98=9F=E5=88=97=E3=80=81=E5=8A=A0=E5=85=A5xx?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E6=9C=AA=E6=8E=A5=E8=AF=8A=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E9=98=9F=E5=88=97=E7=9A=84=E6=97=B6=E9=97=B4=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 37 +++++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 24dcf6c..e30fbb6 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -731,6 +731,10 @@ class OrderServicePackageService extends BaseService if (empty($system_inquiry_config)) { return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } + + // 检测问诊是否服务包首次问诊 + $OrderServicePackageService = new OrderServicePackageService(); + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_no); }catch (\Throwable $e){ return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); } @@ -925,9 +929,16 @@ class OrderServicePackageService extends BaseService } // 加入未接诊取消订单延迟队列 - $time = 60 * 60 * 72; - if (\Hyperf\Config\config('app_env') == "dev"){ - $time = 60 * 10; + if ($is_first){ + $time = 60 * 60 * 72; + if (\Hyperf\Config\config('app_env') == "dev"){ + $time = 60 * 10; + } + }else{ + $time = 60 * 60 * 24; + if (\Hyperf\Config\config('app_env') == "dev"){ + $time = 60 * 10; + } } $data = array(); @@ -964,25 +975,29 @@ class OrderServicePackageService extends BaseService // 等待医生接诊 $imService->waitDoctorInquiry($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id']); - // 检测问诊是否服务包首次问诊 - $OrderServicePackageService = new OrderServicePackageService(); - $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_no); if ($is_first){ // 首次 // 发送站内、订阅失败发送短信消息-医生有新服务包订单 $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); $MessagePush->doctorHaveNewServicePackage(); + + // 加入xx时间未接诊通知队列 + $data = array(); + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + + $time = 1000 * 60 * 60 * 24; }else{ // 发送站内、订阅失败-医生有新的服务包问诊订单 $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); $MessagePush->doctorHaveNewServicePackageInquiry(); + + // 加入xx时间未接诊通知队列 + $data = array(); + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + + $time = 1000 * 60 * 60 * 2; } - // 加入xx时间未接诊通知队列 - $data = array(); - $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - - $time = 1000 * 60 * 60 * 24; $message = new DoctorNotYetInquiryDelayDirectProducer($data); $message->setDelayMs($time); $producer = $this->container->get(Producer::class); From ad8e874170ba4bc32397dc645a571d3b229a9ce7 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 6 May 2024 14:09:36 +0800 Subject: [PATCH 217/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=20=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E6=82=A3=E8=80=85=E5=8C=BB=E7=94=9F=E5=B7=B2=E6=8E=A5?= =?UTF-8?q?=E8=AF=8A=E6=9C=8D=E5=8A=A1=E5=8C=85=E7=9B=B8=E5=85=B3=E9=97=AE?= =?UTF-8?q?=E8=AF=8A=E8=AE=A2=E5=8D=95=E7=9A=84=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/MessagePush.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index 0590447..4e9d502 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -3176,7 +3176,7 @@ class MessagePush extends BaseService // 获取服务包订单详情 $params = array(); - $params['order_service_no'] = $this->order['order_no']; + $params['order_service_no'] = $this->order_service_package['order_no']; $order_service_package_detail = OrderServicePackageDetail::getOne($params); if (empty($order_service_package_detail)){ Log::getInstance("MessagePush")->error("服务包订单数据为空"); @@ -3276,7 +3276,7 @@ class MessagePush extends BaseService // 获取服务包订单详情 $params = array(); - $params['order_service_no'] = $this->order['order_no']; + $params['order_service_no'] = $this->order_service_package['order_no']; $order_service_package_detail = OrderServicePackageDetail::getOne($params); if (empty($order_service_package_detail)){ Log::getInstance("MessagePush")->error("服务包订单数据为空"); From 5c53d032937e91cd5cc9601567214c74ac69064b Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 6 May 2024 14:37:33 +0800 Subject: [PATCH 218/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=20=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E6=82=A3=E8=80=85=E5=8C=BB=E7=94=9F=E5=B7=B2=E6=8E=A5?= =?UTF-8?q?=E8=AF=8A=E6=9C=8D=E5=8A=A1=E5=8C=85=E7=9B=B8=E5=85=B3=E9=97=AE?= =?UTF-8?q?=E8=AF=8A=E8=AE=A2=E5=8D=95=E7=9A=84=E5=88=A4=E6=96=AD1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/MessagePush.php | 99 +++++++++++------------------- app/Services/UserDoctorService.php | 2 +- 2 files changed, 37 insertions(+), 64 deletions(-) diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index 4e9d502..c5ae07a 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -90,6 +90,18 @@ class MessagePush extends BaseService $this->order_inquiry = $order_inquiry->toArray(); } + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); + if (!empty($order_service_package_inquiry)){ + $params = array(); + $params['order_service_no'] = $order_service_package_inquiry['order_service_no']; + $order_service_package = OrderServicePackage::getOne($params); + if (!empty($order_service_package)){ + $this->order_service_package = $order_service_package->toArray(); + } + } + break; case 2: // 药品订单 $params = array(); @@ -112,22 +124,10 @@ class MessagePush extends BaseService case 4: // 健康包订单 case 5: // 随访包订单 $params = array(); - $params['inquiry_no'] = $order_no; - $order_inquiry = OrderInquiry::getOne($params); - if (!empty($order_inquiry)) { - $this->order_inquiry = $order_inquiry->toArray(); - - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); - if (!empty($order_service_package_inquiry)){ - $params = array(); - $params['order_service_no'] = $order_service_package_inquiry['order_service_no']; - $order_service_package = OrderServicePackage::getOne($params); - if (!empty($order_service_package)){ - $this->order_service_package = $order_service_package->toArray(); - } - } + $params['order_service_no'] = $order['order_no']; + $order_service_package = OrderServicePackage::getOne($params); + if (!empty($order_service_package)){ + $this->order_service_package = $order_service_package->toArray(); } break; @@ -3014,7 +3014,7 @@ class MessagePush extends BaseService $sub_data['params']['data'] = [ "thing1" => "您好医生,有新的{$inquiry_mode}服务您还未接诊",// 提醒内容 "name2" => $this->order_inquiry['patient_name'],// 患者姓名 - "thing4" => mb_substr($order_inquiry_case['disease_desc'], 0, 18),// 病情描述 + "thing4" => $disease_desc,// 病情描述 "thing6" => "您还未接诊,请及时上线处理",// 提示说明 "thing5" => "",// 咨询内容 ]; @@ -3158,22 +3158,13 @@ class MessagePush extends BaseService try { // 获取医生数据 $params = array(); - $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $params['doctor_id'] = $this->order_service_package['doctor_id']; $user_doctor = UserDoctor::getOne($params); if (empty($user_doctor)) { Log::getInstance("MessagePush")->error("医生数据为空"); return; } - // 获取问诊订单关联病例 - $params = array(); - $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; - $order_inquiry_case = OrderInquiryCase::getOne($params); - if (empty($order_inquiry_case)) { - Log::getInstance("MessagePush")->error("病例数据为空"); - return; - } - // 获取服务包订单详情 $params = array(); $params['order_service_no'] = $this->order_service_package['order_no']; @@ -3192,12 +3183,18 @@ class MessagePush extends BaseService $start_time = date('Y年m月d日 H时i分',strtotime($this->order_service_package['start_time'])); $finish_time = date('Y年m月d日 H时i分',strtotime($this->order_service_package['finish_time'])); + if ($this->order_service_package['order_service_type'] == 1){ + $inquiry_mode = 8; + }else{ + $inquiry_mode = 9; + } + // 站内 $data = array(); $data['user_id'] = $this->user['user_id']; $data['notice_type'] = 3; $data['notice_system_type'] = 1; - $data['inquiry_mode'] = $this->order_inquiry['inquiry_mode']; // 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) + $data['inquiry_mode'] = $inquiry_mode; // 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包) $data['from_name'] = "肝胆小秘书"; $data['notice_brief_title'] = "您购买的{$order_type}服务,医生已接受,点击查看详情。"; $data['notice_title'] = "您购买的{$order_type}服务,医生已接受,点击查看详情。"; @@ -3205,11 +3202,10 @@ class MessagePush extends BaseService $data['link_type'] = 15;// 聊天详情页 $link_params = array(); - $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; $link_params['order_no'] = $this->order['order_no']; - $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; + $link_params['inquiry_type'] = 1; $link_params['doctor_user_id'] = $user_doctor['user_id']; - $link_params['patient_user_id'] = $this->order_inquiry['user_id']; + $link_params['patient_user_id'] = $this->order_service_package['user_id']; $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 $data['button_type'] = 4; @@ -3265,15 +3261,6 @@ class MessagePush extends BaseService return; } - // 获取问诊订单关联病例 - $params = array(); - $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; - $order_inquiry_case = OrderInquiryCase::getOne($params); - if (empty($order_inquiry_case)) { - Log::getInstance("MessagePush")->error("病例数据为空"); - return; - } - // 获取服务包订单详情 $params = array(); $params['order_service_no'] = $this->order_service_package['order_no']; @@ -3377,18 +3364,9 @@ class MessagePush extends BaseService public function patientServicePackageFinish(): void { try { - // 获取问诊订单关联病例 - $params = array(); - $params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; - $order_inquiry_case = OrderInquiryCase::getOne($params); - if (empty($order_inquiry_case)) { - Log::getInstance("MessagePush")->error("问诊病例为空"); - return; - } - // 获取医生数据 $params = array(); - $params['doctor_id'] = $this->order_inquiry['doctor_id']; + $params['doctor_id'] = $this->order_service_package['doctor_id']; $user_doctor = UserDoctor::getOne($params); if (empty($user_doctor)) { Log::getInstance("MessagePush")->error("医生数据为空"); @@ -3398,11 +3376,17 @@ class MessagePush extends BaseService // 转换服务包订单类型为汉字 $order_type = orderServiceTypeToString($this->order_service_package['order_service_type']); + if ($this->order_service_package['order_service_type'] == 1){ + $inquiry_mode = 8; + }else{ + $inquiry_mode = 9; + } + // 站内 $data = array(); $data['user_id'] = $this->user['user_id']; $data['notice_type'] = 1; - $data['inquiry_type'] = $this->order_inquiry['inquiry_type']; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + $data['inquiry_type'] = $inquiry_mode; // 问诊类型(医生端服务通知存在 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) $data['from_name'] = "肝胆小秘书"; $data['notice_brief_title'] = "您购买的{$order_type}服务已结束,点击查看详情。"; $data['notice_title'] = "您购买的{$order_type}服务已结束,点击查看详情。"; @@ -3411,6 +3395,7 @@ class MessagePush extends BaseService $link_params = array(); $link_params['order_no'] = $this->order['order_no']; + $link_params['inquiry_type'] = 1; $link_params['doctor_user_id'] = $user_doctor['user_id']; $link_params['patient_user_id'] = $this->order_service_package['user_id']; $data['link_params'] = json_encode($link_params, JSON_UNESCAPED_UNICODE);// 跳转参数 @@ -3424,18 +3409,6 @@ class MessagePush extends BaseService Log::getInstance("MessagePush")->error(json_encode($data, JSON_UNESCAPED_UNICODE)); } - // 订阅 - // 问诊内容-病情主诉 - $disease_desc = $order_inquiry_case['disease_desc']; - if (!empty($disease_desc)) { - if (strlen($disease_desc) > 15) { - $disease_desc = mb_substr($disease_desc, 0, 15); - if ($disease_desc) { - $disease_desc = $disease_desc . "..."; - } - } - } - // 订阅 $sub_data = array(); $sub_data['push_user_id'] = $this->user['user_id']; diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index 73d639a..4847a83 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -2034,7 +2034,7 @@ class UserDoctorService extends BaseService $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); if ($is_first){ // 患者-通知患者医生已接受服务包服务 - $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['inquiry_no']); + $MessagePush = new MessagePush($order_inquiry['user_id'],$order_service_package['order_service_no']); $MessagePush->patientAcceptedServicePackage(); }else{ // 患者-通知患者医生已接诊服务包相关问诊订单 From 1f22a656aec877669238be7082c37d0cb9c479a1 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 6 May 2024 14:49:35 +0800 Subject: [PATCH 219/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=20=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E6=82=A3=E8=80=85=E5=8C=BB=E7=94=9F=E5=B7=B2=E6=8E=A5?= =?UTF-8?q?=E8=AF=8A=E6=9C=8D=E5=8A=A1=E5=8C=85=E7=9B=B8=E5=85=B3=E9=97=AE?= =?UTF-8?q?=E8=AF=8A=E8=AE=A2=E5=8D=95=E7=9A=84=E5=88=A4=E6=96=AD2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/MessagePush.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index c5ae07a..f462448 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -3167,7 +3167,7 @@ class MessagePush extends BaseService // 获取服务包订单详情 $params = array(); - $params['order_service_no'] = $this->order_service_package['order_no']; + $params['order_service_no'] = $this->order_service_package['order_service_no']; $order_service_package_detail = OrderServicePackageDetail::getOne($params); if (empty($order_service_package_detail)){ Log::getInstance("MessagePush")->error("服务包订单数据为空"); From dce334826d07a50eab5201035dfa76c4fafed5a2 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 6 May 2024 14:52:06 +0800 Subject: [PATCH 220/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=20=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E6=82=A3=E8=80=85=E5=8C=BB=E7=94=9F=E5=B7=B2=E6=8E=A5?= =?UTF-8?q?=E8=AF=8A=E6=9C=8D=E5=8A=A1=E5=8C=85=E7=9B=B8=E5=85=B3=E9=97=AE?= =?UTF-8?q?=E8=AF=8A=E8=AE=A2=E5=8D=95=E7=9A=84=E5=88=A4=E6=96=AD3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/MessagePush.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index f462448..3fef58e 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -3263,7 +3263,7 @@ class MessagePush extends BaseService // 获取服务包订单详情 $params = array(); - $params['order_service_no'] = $this->order_service_package['order_no']; + $params['order_service_no'] = $this->order_service_package['order_service_no']; $order_service_package_detail = OrderServicePackageDetail::getOne($params); if (empty($order_service_package_detail)){ Log::getInstance("MessagePush")->error("服务包订单数据为空"); @@ -3501,7 +3501,7 @@ class MessagePush extends BaseService $link_params = array(); $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; - $link_params['order_no'] = $this->order_service_package['order_no']; + $link_params['order_no'] = $this->order_service_package['order_service_no']; $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; $link_params['doctor_user_id'] = $user_doctor['user_id']; $link_params['patient_user_id'] = $this->order_inquiry['user_id']; @@ -3553,7 +3553,7 @@ class MessagePush extends BaseService $link_params = array(); $link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id']; - $link_params['order_no'] = $this->order_service_package['order_no']; + $link_params['order_no'] = $this->order_service_package['order_service_no']; $link_params['inquiry_type'] = $this->order_inquiry['inquiry_type']; $link_params['doctor_user_id'] = $user_doctor['user_id']; $link_params['patient_user_id'] = $this->order_inquiry['user_id']; From 63a8f2ac62a892722a2878c48d8eed0e6b297c54 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 09:16:26 +0800 Subject: [PATCH 221/274] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=8E=AF=E5=A2=83=E4=B8=B4=E6=97=B6=E9=80=80=E6=AC=BE?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/TestController.php | 467 ++++++++++++++++++++++++++- app/Services/PatientOrderService.php | 1 + app/Utils/Auth.php | 2 +- config/routes.php | 2 +- 4 files changed, 462 insertions(+), 10 deletions(-) diff --git a/app/Controller/TestController.php b/app/Controller/TestController.php index c209ab5..8435533 100644 --- a/app/Controller/TestController.php +++ b/app/Controller/TestController.php @@ -20,11 +20,19 @@ use App\Model\DoctorConfigHealthPackage; use App\Model\DoctorInquiryTime; use App\Model\HospitalDepartmentCustom; use App\Model\Order; +use App\Model\OrderCoupon; +use App\Model\OrderDetection; +use App\Model\OrderDetectionRefund; use App\Model\OrderInquiryCase; use App\Model\OrderInquiryRefund; use App\Model\OrderPrescriptionProduct; use App\Model\OrderProduct; use App\Model\OrderProductItem; +use App\Model\OrderProductRefund; +use App\Model\OrderRefund; +use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageInquiry; +use App\Model\OrderServicePackageProduct; use App\Model\OrderServicePackageRefund; use App\Model\PatientFamily; use App\Model\ReportRegulatory; @@ -41,8 +49,10 @@ use App\Services\InquiryService; use App\Services\MessagePush; use App\Services\OrderPrescriptionService; use App\Services\OrderProductService; +use App\Services\OrderService; use App\Services\OrderServicePackageService; use App\Services\PatientOrderService; +use App\Services\UserCouponService; use App\Services\UserDoctorService; use App\Utils\Data; use App\Utils\Jwt; @@ -57,11 +67,13 @@ use Extend\RegulatoryPlatform\regulatoryPlatform; use Extend\TencentIm\RecentContact; use Extend\VerifyDun\IdCard; use Extend\Wechat\Wechat; +use Extend\Wechat\WechatPay; use GuzzleHttp\Client; use Hyperf\Amqp\Producer; use Hyperf\Cache\Cache; use Hyperf\DbConnection\Db; use Hyperf\Redis\Redis; +use Hyperf\Snowflake\IdGeneratorInterface; use Hyperf\Utils\ApplicationContext; use Hyperf\Utils\Coroutine\Concurrent; use Intervention\Image\ImageManager; @@ -176,15 +188,8 @@ class TestController extends AbstractController throw new BusinessException("处方药品数据错误4"); } - $OrderPrescriptionService = new OrderPrescriptionService(); - $result = $OrderPrescriptionService->reportPrescription( - $order_inquiry->toArray(), - $order_prescription->toArray(), - $order_prescription_product->toArray(), - $order_product->toArray() - ); - dump($result); + } // 上报监管平台 @@ -466,6 +471,452 @@ class TestController extends AbstractController // 退款 public function refund(){ + $order_no = $this->request->input('order_no'); + Db::beginTransaction(); + try { + // 获取订单数据 + $params = array(); + $params['order_no'] = $order_no; + $order = Order::getOne($params); + if (empty($order)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "未查询到对应订单数据"); + } + + // 修改订单为取消 + $data = array(); + $data['cancel_status'] = 1; + $data['cancel_time'] = date("Y-m-d H:i:s", time()); + $data['cancel_remarks'] = "主动取消"; // 取消订单备注 + $data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_no'] = $order_no; + Order::edit($params, $data); + + // 处理对应订单 + switch ($order['order_type']) { + case 1: // 问诊订单 + // 获取订单数据 + $params = array(); + $params['inquiry_no'] = $order_no; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "未查询到对应订单数据"); + } + + // 修改问诊订单为取消 + $data = array(); + $data['inquiry_status'] = 7; + $data['cancel_time'] = date("Y-m-d H:i:s", time()); + $data['cancel_reason'] = 2; // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) + $data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + OrderInquiry::edit($params, $data); + + break; + case 3: // 检测订单 + // 获取订单数据 + $params = array(); + $params['detection_no'] = $order_no; + $order_detection = OrderDetection::getOne($params); + if (empty($order_detection)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "未查询到对应订单数据"); + } + + // 修改检测订单为取消 + $data = array(); + $data['detection_status'] = 5; + $data['cancel_time'] = date("Y-m-d H:i:s", time()); + $data['cancel_reason'] = 1; // 取消订单原因(1:主动取消 2:客服取消 3:支付超时) + $data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_detection_id'] = $order_detection['order_detection_id']; + OrderDetection::editOrderDetection($params, $data); + + break; + case 4: // 健康包订单 + case 5: // 随访包订单 + // 获取订单数据 + $params = array(); + $params['order_service_no'] = $order_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "未查询到对应订单数据"); + } + + // 修改服务包订单为取消 + $data = array(); + $data['order_service_status'] = 5; + $data['cancel_time'] = date("Y-m-d H:i:s", time()); + $data['cancel_remarks'] = "主动取消"; + $data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + OrderServicePackage::edit($params, $data); + + // 获取问诊订单数据-此处只会存在一个 + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $order_service_package_inquirys = OrderServicePackageInquiry::getList($params); + if (empty($order_service_package_inquirys)){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "未查询到对应订单数据"); + } + + foreach ($order_service_package_inquirys as $order_service_package_inquiry){ + $params = array(); + $params['inquiry_no'] = $order_service_package_inquiry['inquiry_no']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "未查询到对应订单数据"); + } + + if (in_array($order_inquiry['inquiry_status'], [5, 6 , 7])) { + continue; + } + + if ($order_inquiry['inquiry_refund_status'] == 1) { + // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + continue; + } + + if ($order_inquiry['inquiry_refund_status'] == 2) { + // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + continue; + } + + // 修改问诊订单为取消 + $data = array(); + $data['inquiry_status'] = 7; + $data['cancel_time'] = date("Y-m-d H:i:s", time()); + $data['cancel_reason'] = 2; // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时) + $data['updated_at'] = date("Y-m-d H:i:s", time()); + + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + OrderInquiry::edit($params, $data); + } + + break; + default: + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "未查询到对应订单数据"); + } + + // 检测支付状态,判断是否需要退款处理 + if ($order['pay_status'] == 2 && $order['refund_status'] != 3) { + // 系统退款编号 + $generator = $this->container->get(IdGeneratorInterface::class); + $refund_no = $generator->generate(); + + // 检测订单金额 + if ($order['payment_amount_total'] > 0) { + // 发起退款 + $WechatPay = new WechatPay(1, $order['order_type']); + + $options = array(); + $options['transaction_id'] = $order['escrow_trade_no']; + $options['out_refund_no'] = (string)$refund_no; + $options['reason'] = "主动取消"; + $options['amount'] = [ + 'refund' => (int)round($order['payment_amount_total'] * 100), + 'total' => (int)round($order['payment_amount_total'] * 100), + 'currency' => "CNY", + ]; + + $refund_result = $WechatPay->refund($options); + + // 处理订单退款状态 + // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) + $success_time = ""; + if ($refund_result['status'] == "SUCCESS") { + // 退款成功 + $refund_status = 3; + $success_time = $refund_result['success_time']; + } elseif ($refund_result['status'] == "CLOSED") { + // 退款关闭 + $refund_status = 5; + } elseif ($refund_result['status'] == "PROCESSING") { + // 退款处理中 + $refund_status = 2; + } elseif ($refund_result['status'] == "ABNORMAL") { + // 退款异常,此情况不处理,进行短信通知 + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "订单退款状态异常"); + } else { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "订单退款状态异常"); + } + + $refund_id = $refund_result['refund_id']; + } else { + // 模拟退款 + $refund_status = 3; + + $generator = $this->container->get(IdGeneratorInterface::class); + $refund_id = "模拟退款:" . $generator->generate(); + $success_time = date("Y-m-d H:i:s", time()); + + // 模拟退款时手动退还优惠卷 + if (!empty($order['coupon_amount_total']) && $order['coupon_amount_total'] > 0) { + // 获取该订单全部优惠卷数据 + $params = array(); + $params['order_id'] = $order['order_id']; + $order_coupons = OrderCoupon::getList($params); + if (!empty($order_coupons)) { + $userCouponService = new UserCouponService(); + foreach ($order_coupons as $order_coupon) { + // 退还优惠卷 + $userCouponService->returnUserCoupon($order_coupon['user_coupon_id']); + + // 发送站内消息-优惠卷退还 + $MessagePush = new MessagePush($order_coupon['user_id']); + $MessagePush->patientRefundCoupon($order_coupon['coupon_name']); + } + } + } + } + + // 新增退款表 + $data = array(); + $data['order_id'] = $order['order_id']; + $data['patient_id'] = $order['patient_id']; + $data['order_no'] = $order['order_no']; + $data['refund_no'] = $refund_no; + $data['inquiry_refund_no'] = $refund_no; + $data['refund_id'] = $refund_id; + $data['refund_status'] = $refund_status; + $data['refund_total'] = $order['payment_amount_total']; + $data['refund_reason'] = "主动取消"; + if ($refund_status == 3 && !empty($success_time)) { + $data['success_time'] = date("Y-m-d H:i:s", strtotime($success_time)); // 退款成功时间 + } + $order_refund = OrderRefund::addOrderRefund($data); + if (empty($order_refund)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "添加退款表失败"); + } + + switch ($order['order_type']) { + case 1: // 问诊订单 + // 获取订单数据 + $params = array(); + $params['inquiry_no'] = $order_no; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "订单数据为空"); + } + + // 新增退款表 + $data = array(); + $data['patient_id'] = $order['patient_id']; + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $data['inquiry_no'] = $order_inquiry['inquiry_no']; + $data['inquiry_refund_no'] = $refund_no; + $data['refund_id'] = $refund_id; + $data['inquiry_refund_status'] = $refund_status; + $data['refund_total'] = $order_inquiry['payment_amount_total']; + $data['refund_reason'] = "主动取消"; + if ($refund_status == 3 && !empty($success_time)) { + $data['success_time'] = date("Y-m-d H:i:s", strtotime($success_time)); // 退款成功时间 + } + + $order_inquiry_refund = OrderInquiryRefund::addOrderInquiryRefund($data); + if (empty($order_inquiry_refund)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "添加退款表失败"); + } + + // 修改问诊订单表状态 + $data = array(); + $data['inquiry_refund_status'] = $refund_status; + + $params = array(); + $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + OrderInquiry::edit($params, $data); + + break; + case 2: // 药品订单 + // 获取药品订单数据 + $params = array(); + $params['order_product_no'] = $order['order_no']; + $order_product = OrderProduct::getOne($params); + if (empty($order_product)){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "订单数据为空"); + } + + $data = array(); + $data['patient_id'] = $order_product['patient_id']; + $data['order_product_id'] = $order_product['order_product_id']; + $data['order_product_no'] = $order_product['order_product_no']; + $data['product_refund_no'] = $refund_no; + $data['refund_id'] = $refund_id; + $data['product_refund_status'] = $refund_status; + $data['refund_total'] = $order_product['payment_amount_total']; + $data['refund_reason'] = "主动取消"; + + if ($refund_status == 3 && !empty($success_time)) { + $data['success_time'] = date("Y-m-d H:i:s", strtotime($success_time)); // 退款成功时间 + } + + $order_product_refund = OrderProductRefund::addOrderProductRefund($data); + if (empty($order_product_refund)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "添加退款表失败"); + } + + // 修改药品订单表状态 + $data = array(); + $data['refund_status'] = $refund_status; + + $params = array(); + $params['order_product_id'] = $order_product['order_product_id']; + OrderProduct::edit($params,$data); + + // 获取问诊订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_product['order_inquiry_id']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "订单数据为空"); + } + + // 获取订单商品订单列表 + $params = array(); + $params['order_product_id'] = $order_product['order_product_id']; + $order_product_items = OrderProductItem::getList($params); + if (empty($order_product_items)){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "订单数据为空"); + } + + // 获取患者家庭成员进行中的服务包订单-健康包 + $OrderServicePackageService = new OrderServicePackageService(); + $order_service_package = $OrderServicePackageService->getPatientFamilyInProgressServicePackage($order_inquiry['user_id'],$order_inquiry['family_id'],$order_inquiry['doctor_id'],1); + if (!empty($order_service_package)){ + // 回退服务包已使用药品数量 + foreach ($order_product_items as $order_product_item){ + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + $params['order_product_id'] = $order_product_item['order_product_id']; + $params['product_item_id'] = $order_product_item['product_item_id']; + $params['product_id'] = $order_product_item['product_id']; + $order_service_package_product = OrderServicePackageProduct::getOne($params); + if (!empty($order_service_package_product)){ + $params = array(); + $params['service_product_id'] = $order_service_package_product['service_product_id']; + + $data = array(); + $data['used_quantity'] = 0; + OrderServicePackageProduct::edit($params,$data); + } + } + } + + break; + case 3: // 检测订单 + // 获取订单数据 + $params = array(); + $params['detection_no'] = $order_no; + $order_detection = OrderDetection::getOne($params); + if (empty($order_detection)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "订单数据为空"); + } + + // 新增退款表 + $data = array(); + $data['patient_id'] = $order['patient_id']; + $data['order_detection_id'] = $order_detection['order_detection_id']; + $data['detection_no'] = $order_detection['detection_no']; + $data['detection_refund_no'] = $refund_no; + $data['refund_id'] = $refund_id; + $data['detection_refund_status'] = $refund_status; + $data['refund_total'] = $order_detection['payment_amount_total']; + $data['refund_reason'] = "主动取消"; + if ($refund_status == 3 && !empty($success_time)) { + $data['success_time'] = date("Y-m-d H:i:s", strtotime($success_time)); // 退款成功时间 + } + $order_detection_refund = OrderDetectionRefund::add($data); + if (empty($order_detection_refund)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "添加退款表失败"); + } + + // 修改问诊订单表状态 + $data = array(); + $data['detection_refund_status'] = $refund_status; + + $params = array(); + $params['order_detection_id'] = $order_detection['order_detection_id']; + OrderDetection::editOrderDetection($params, $data); + + break; + case 4: // 健康包订单 + case 5: // 随访包订单订单 + // 获取订单数据 + $params = array(); + $params['order_service_no'] = $order_no; + $order_service_package = OrderServicePackage::getOne($params); + if (empty($order_service_package)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "订单数据为空"); + } + + // 新增服务包退款表 + $data = array(); + $data['patient_id'] = $order['patient_id']; + $data['order_service_id'] = $order_service_package['order_service_id']; + $data['order_service_no'] = $order_service_package['order_service_no']; + $data['service_refund_no'] = $refund_no; + $data['refund_id'] = $refund_id; + $data['refund_status'] = $refund_status; + $data['refund_total'] = $order_service_package['payment_amount_total']; + $data['refund_reason'] = "主动取消"; + if ($refund_status == 3 && !empty($success_time)) { + $data['success_time'] = date("Y-m-d H:i:s", strtotime($success_time)); // 退款成功时间 + } + $order_service_package_refund = OrderServicePackageRefund::addOrderServicePackageRefund($data); + if (empty($order_service_package_refund)) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "添加退款表失败"); + } + + // 修改订单表状态 + $data = array(); + $data['refund_status'] = $refund_status; + + $params = array(); + $params['order_service_id'] = $order_service_package['order_service_id']; + OrderServicePackage::edit($params, $data); + + break; + default: + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "订单类型错误"); + } + } + + + Db::commit(); + }catch (\Throwable $e){ + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); + } + + return success(); } } \ No newline at end of file diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index c31911e..2818f40 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -2718,6 +2718,7 @@ class PatientOrderService extends BaseService $params['order_no'] = $order_no; $order = Order::getOne($params); if (empty($order)) { + Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, "非法订单"); } diff --git a/app/Utils/Auth.php b/app/Utils/Auth.php index f559945..0ddcb95 100644 --- a/app/Utils/Auth.php +++ b/app/Utils/Auth.php @@ -38,7 +38,7 @@ class Auth "/popup" => "get", // 获取弹窗数据 "/basic/keyword/search" => "get", // 获取热门搜索关键词 "/test/uninquiry" => "get", // 获取未接诊的医生 - "/test/refund" => "get", // 测试退款 + "/test/refund" => "post", // 测试退款 "/test" => "get", // 测试 "/callback/detection" => "post", // 检测所结果回调 "/callback/video/trtc" => "post", // 音视频回调 diff --git a/config/routes.php b/config/routes.php index 1261d9e..7eb22ce 100644 --- a/config/routes.php +++ b/config/routes.php @@ -897,7 +897,7 @@ Router::addGroup('/test', function () { // // Router::get('/uninquiry', [TestController::class, 'uninquiry']); // 模拟退款 - Router::get('/refund', [TestController::class, 'refund']); + Router::post('/refund', [TestController::class, 'refund']); }); From 2084a066035e0b01630bc0a0b4347c5941e5c54c Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 10:21:45 +0800 Subject: [PATCH 222/274] 1 --- app/Services/MessagePush.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index 3fef58e..4e7ee5b 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -2688,7 +2688,7 @@ class MessagePush extends BaseService } // 转换问诊订单订单接诊方式-字符串 - $inquiry_mode = orderServiceTypeToString($this->order_inquiry['inquiry_mode']); + $inquiry_mode = inquiryModeToString($this->order_inquiry['inquiry_mode']); // 站内 $data = array(); @@ -2792,7 +2792,7 @@ class MessagePush extends BaseService } // 转换问诊订单订单接诊方式-字符串 - $inquiry_mode = orderServiceTypeToString($this->order_inquiry['inquiry_mode']); + $inquiry_mode = inquiryModeToString($this->order_inquiry['inquiry_mode']); // 站内 $data = array(); @@ -2885,7 +2885,7 @@ class MessagePush extends BaseService } // 转换问诊订单订单接诊方式-字符串 - $inquiry_mode = orderServiceTypeToString($this->order_inquiry['inquiry_mode']); + $inquiry_mode = inquiryModeToString($this->order_inquiry['inquiry_mode']); // 站内 $data = array(); @@ -2968,7 +2968,7 @@ class MessagePush extends BaseService } // 转换问诊订单订单接诊方式-字符串 - $inquiry_mode = orderServiceTypeToString($this->order_inquiry['inquiry_mode']); + $inquiry_mode = inquiryModeToString($this->order_inquiry['inquiry_mode']); // 站内 $data = array(); @@ -3538,7 +3538,7 @@ class MessagePush extends BaseService } // 转换问诊订单订单接诊方式-字符串 - $inquiry_mode = orderServiceTypeToString($this->order_inquiry['inquiry_mode']); + $inquiry_mode = inquiryModeToString($this->order_inquiry['inquiry_mode']); // 站内 $data = array(); From 5e46798c24cc622fe54af5e04af8bf67e91445e4 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 10:33:05 +0800 Subject: [PATCH 223/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index e30fbb6..f796798 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -986,6 +986,9 @@ class OrderServicePackageService extends BaseService $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $time = 1000 * 60 * 60 * 24; + if (\Hyperf\Config\config('app_env') == "dev"){ + $time = 1000 * 60 * 5; + } }else{ // 发送站内、订阅失败-医生有新的服务包问诊订单 $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); @@ -996,6 +999,9 @@ class OrderServicePackageService extends BaseService $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $time = 1000 * 60 * 60 * 2; + if (\Hyperf\Config\config('app_env') == "dev"){ + $time = 1000 * 60 * 5; + } } $message = new DoctorNotYetInquiryDelayDirectProducer($data); From 1008c994d6e20cfe6fc1785fdb0e6029205dcc04 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 10:43:19 +0800 Subject: [PATCH 224/274] 1 --- .../CancelUnInquiryOrdersDelayDirectConsumer.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php index 053f7a1..eadebec 100644 --- a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php @@ -8,6 +8,7 @@ use App\Constants\HttpEnumCode; use App\Model\Order; use App\Model\OrderInquiry; use App\Model\OrderInquiryCoupon; +use App\Model\OrderServicePackage; use App\Model\OrderServicePackageInquiry; use App\Model\UserCoupon; use App\Model\UserDoctor; @@ -173,15 +174,15 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage Order::edit($params, $order_data); // 取消问诊订单 - $order_inquiry_data = array(); - $order_inquiry_data['order_service_status'] = 5; - $order_inquiry_data['cancel_time'] = date("Y-m-d H:i:s", time()); - $order_inquiry_data['cancel_remarks'] = "医生未接受服务"; // 取消订单备注 - $order_inquiry_data['updated_at'] = date("Y-m-d H:i:s", time()); + $order_service_package_data = array(); + $order_service_package_data['order_service_status'] = 5; + $order_service_package_data['cancel_time'] = date("Y-m-d H:i:s", time()); + $order_service_package_data['cancel_remarks'] = "医生未接受服务"; // 取消订单备注 + $order_service_package_data['updated_at'] = date("Y-m-d H:i:s", time()); $params = array(); $params['order_service_no'] = $order_service_no; - OrderInquiry::edit($params, $order_inquiry_data); + OrderServicePackage::edit($params, $order_service_package_data); // 如果是服务包的首单问诊订单即执行服务包退款 $OrderService = new OrderService(); From c582cd0b00baf7c2409561765adbb233bd64c2ea Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 11:15:15 +0800 Subject: [PATCH 225/274] 2 --- app/Controller/CallBackController.php | 3 +++ app/Services/OrderServicePackageService.php | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index 78c68c1..edb914d 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -2823,6 +2823,9 @@ class CallBackController extends AbstractController $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $time = 1000 * 60 * 60 * 24; + if (\Hyperf\Config\config('app_env') == "dev"){ + $time = 1000 * 30; + } $message = new DoctorNotYetInquiryDelayDirectProducer($data); $message->setDelayMs($time); $producer = $this->container->get(Producer::class); diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index f796798..6636f87 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1000,7 +1000,7 @@ class OrderServicePackageService extends BaseService $time = 1000 * 60 * 60 * 2; if (\Hyperf\Config\config('app_env') == "dev"){ - $time = 1000 * 60 * 5; + $time = 1000 * 30; } } From 11921ac352217d566f7ad1b372d0bc28c660b8d1 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 11:28:24 +0800 Subject: [PATCH 226/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E9=97=AE=E8=AF=8A=E8=AE=A2=E5=8D=95=E6=97=B6=20=E6=A3=80?= =?UTF-8?q?=E6=B5=8B=E9=97=AE=E8=AF=8A=E6=98=AF=E5=90=A6=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E9=A6=96=E6=AC=A1=E9=97=AE=E8=AF=8A=20=E7=9A=84?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E5=9C=BA=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 6636f87..8f45ecd 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -731,10 +731,6 @@ class OrderServicePackageService extends BaseService if (empty($system_inquiry_config)) { return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } - - // 检测问诊是否服务包首次问诊 - $OrderServicePackageService = new OrderServicePackageService(); - $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_no); }catch (\Throwable $e){ return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); } @@ -928,6 +924,10 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "订单创建失败"); } + // 检测问诊是否服务包首次问诊 + $OrderServicePackageService = new OrderServicePackageService(); + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_no); + // 加入未接诊取消订单延迟队列 if ($is_first){ $time = 60 * 60 * 72; From bed019df0d0eae0cee94292324c6067d989e7a82 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 11:30:07 +0800 Subject: [PATCH 227/274] 1 --- app/Controller/CallBackController.php | 2 +- app/Services/OrderServicePackageService.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index edb914d..763e21f 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -2824,7 +2824,7 @@ class CallBackController extends AbstractController $time = 1000 * 60 * 60 * 24; if (\Hyperf\Config\config('app_env') == "dev"){ - $time = 1000 * 30; + $time = 1000 * 60 * 5; } $message = new DoctorNotYetInquiryDelayDirectProducer($data); $message->setDelayMs($time); diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 8f45ecd..1f80407 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1000,7 +1000,7 @@ class OrderServicePackageService extends BaseService $time = 1000 * 60 * 60 * 2; if (\Hyperf\Config\config('app_env') == "dev"){ - $time = 1000 * 30; + $time = 1000 * 60 * 5; } } From 448180598d321ef4c0f159b59355fac22e9faf6c Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 11:39:58 +0800 Subject: [PATCH 228/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/MessagePush.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index 4e7ee5b..ec0f9a4 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -3185,8 +3185,10 @@ class MessagePush extends BaseService if ($this->order_service_package['order_service_type'] == 1){ $inquiry_mode = 8; + $notice_content = "您购买的{$order_type}服务,{$user_doctor['user_name']}医生已接受,服务包含:({$monthly_frequency}次问诊/月;30盒肝爽颗粒),服务有效期:{$start_time}~{$finish_time},每次问诊不限制沟通回合数,您可以点击【问诊详情】进行交流。"; }else{ $inquiry_mode = 9; + $notice_content = "您购买的{$order_type}服务,{$user_doctor['user_name']}医生已接受,服务包含:({$monthly_frequency}次问诊/月),服务有效期:{$start_time}~{$finish_time},每次问诊不限制沟通回合数,您可以点击【问诊详情】进行交流。"; } // 站内 @@ -3198,7 +3200,7 @@ class MessagePush extends BaseService $data['from_name'] = "肝胆小秘书"; $data['notice_brief_title'] = "您购买的{$order_type}服务,医生已接受,点击查看详情。"; $data['notice_title'] = "您购买的{$order_type}服务,医生已接受,点击查看详情。"; - $data['notice_content'] = "您购买的{$order_type}服务,{$user_doctor['user_name']}医生已接受,服务包含:({$monthly_frequency}次问诊/月;30盒肝爽颗粒),服务有效期:{$start_time}~{$finish_time},每次问诊不限制沟通回合数,您可以点击【问诊详情】进行交流。"; + $data['notice_content'] = $notice_content; $data['link_type'] = 15;// 聊天详情页 $link_params = array(); @@ -3297,6 +3299,10 @@ class MessagePush extends BaseService // 获取服务包内某一药品的剩余数量 $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($this->order_service_package['order_service_id'],$health_package_product['product_id'],$health_package_product['quantity']); } + + $notice_content = "您使用{$order_type}服务中问诊,{$user_doctor['user_name']}医生已接诊,服务剩余:({$remaining_inquiry_count}次问诊/月;{$remaining_quantity}盒肝爽颗粒),您可以点击【问诊详情】进行交流。"; + }else{ + $notice_content = "您使用{$order_type}服务中问诊,{$user_doctor['user_name']}医生已接诊,服务剩余:({$remaining_inquiry_count}次问诊/月),您可以点击【问诊详情】进行交流。"; } // 站内 @@ -3308,8 +3314,7 @@ class MessagePush extends BaseService $data['from_name'] = "肝胆小秘书"; $data['notice_brief_title'] = "您使用{$order_type}服务中问诊,医生已接诊,点击查看详情。"; $data['notice_title'] = "您使用{$order_type}服务中问诊,医生已接诊,点击查看详情。"; - $data['notice_content'] = "您使用{$order_type}服务中问诊,{$user_doctor['user_name']}医生已接诊,服务剩余:({$remaining_inquiry_count}次问诊/月;{$remaining_quantity}盒肝爽颗粒),您可以点击【问诊详情】进行交流。 -"; + $data['notice_content'] = $notice_content; $data['link_type'] = 1; $link_params = array(); From 5811ab949d13e72a91032318a4ac3bd2254bdef3 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 15:18:14 +0800 Subject: [PATCH 229/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=95=86=E5=93=81?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=87=91=E9=A2=9D=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 130 ++++++++++++++++++++++++--- app/Services/UserCouponService.php | 2 +- extend/Prescription/Prescription.php | 4 +- 3 files changed, 122 insertions(+), 14 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 2818f40..dba65b0 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1468,10 +1468,11 @@ class PatientOrderService extends BaseService } $not_enough_product_ids = []; - $amount_total = 0; - // 商品数据 - $product_datas = array(); + $amount_total = 0; // 总金额 + $product_datas = array(); // 商品数据 + $discount_amount = 0;// 优惠金额 + $freight_calculation_amount = 0; // 药品总金额-计算运费使用 foreach ($product_ids as $product_id) { // 检测药品是否存在于处方中 @@ -1506,6 +1507,8 @@ class PatientOrderService extends BaseService $product['product_num'] = $order_prescription_product['prescription_product_num']; $product['used_quantity'] = 0; // 健康包服务下已使用赠送药品的数量,默认赋0 $product['actual_quantity'] = $order_prescription_product['prescription_product_num']; // 实际药品数量 = 处方数量 - 健康包可使用的赠送药品数量 + $product['actual_product_price'] = $product['product_price']; // 实际药品价格 + $product['discount_amount'] = 0; // 药品优惠金额 $product_data = $product->toArray(); $product_datas[] = $product_data; } @@ -1536,7 +1539,12 @@ class PatientOrderService extends BaseService // 处理商品数量 $OrderServicePackageService = new OrderServicePackageService(); + // 处理商品数量、金额,重新赋0,上面已计算过 $amount_total = 0; + + // 药品总金额-计算运费使用,重新赋0,上面已计算过 + $freight_calculation_amount = 0; + foreach ($product_datas as $key => $product_data) { // 获取服务包内某一药品的总数量 $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_detail['package_id'], $product_data['product_id']); @@ -1544,30 +1552,71 @@ class PatientOrderService extends BaseService // 获取服务包内某一药品的剩余数量 $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'], $product_data['product_id'], $total_quantity); + // 实际药品价格 + $actual_product_price = 0; + // 可用数量大于处方商品数量 if ($remaining_quantity >= $product_data['product_num']) { - // 把商品价格置为0。金额按照0计算 - $product_datas[$key]['product_price'] = 0; + // 药品优惠金额 + $product_datas[$key]['discount_amount'] = $product_data['product_price'] - 35; // 已使用数量 = 原数量+此次使用数量 $product_datas[$key]['used_quantity'] = $product_data['product_num']; // 实际药品数量 = 处方数量 - 健康包可使用的赠送药品数量 $product_datas[$key]['actual_quantity'] = 0; + + // 实际药品价格 + $actual_product_price = 35 * $product_datas[$key]['used_quantity']; } else { // 已使用数量 = 最大可用数量;表示此服务包商品已使用完毕 $product_datas[$key]['used_quantity'] = $remaining_quantity; // 实际药品数量 = 处方数量 - 健康包可使用的赠送药品数量 $product_datas[$key]['actual_quantity'] = $product_data['product_num'] - $remaining_quantity; + + // 实际药品价格= 35 * 剩余免费药品数量 + 原价 * 实际药品数量 + $actual_product_price = bcadd( + bcmul( + 35, + $product_datas[$key]['used_quantity'], + 2 + ), + bcmul( + $product_datas[$key]['product_price'], + $product_datas[$key]['actual_quantity'], + 2 + ), + 2 + ); } // 此处重新计算药品总金额 $amount_total = bcadd( $amount_total, + $actual_product_price, + 2 + ); + + // 此处重新计算药品优惠金额 + if ($discount_amount > 0){ + $discount_amount = bcadd( + $discount_amount, + bcmul( + $product_datas[$key]['discount_amount'], + $product_datas[$key]['used_quantity'], + 2 + ), + 2 + ); + } + + // 此处计算药品总金额-计算运费使用 + $freight_calculation_amount = bcadd( + $freight_calculation_amount, bcmul( $product_datas[$key]['product_price'], - $product_datas[$key]['actual_quantity'], + $product_datas[$key]['product_num'], 2 ), 2 @@ -1589,7 +1638,7 @@ class PatientOrderService extends BaseService $Prescription = new Prescription(); $result = $Prescription->getLogisticsFee(); - if ($amount_total >= $result['drugCost']) { + if ($freight_calculation_amount >= $result['drugCost']) { $logistics_fee = 0; } else { $logistics_fee = $result['freight']; @@ -2031,6 +2080,8 @@ class PatientOrderService extends BaseService // 处理药品数据 $amount_total = 0; // 总金额 $product_datas = array(); // 商品数据 + $discount_amount = 0;// 优惠金额 + $freight_calculation_amount = 0; // 药品总金额-计算运费使用 foreach ($order_prescription_products as &$order_prescription_product) { $params = array(); @@ -2050,12 +2101,18 @@ class PatientOrderService extends BaseService } } + // 总金额 $amount_total = bcadd($amount_total, ($product['product_price'] * $order_prescription_product['prescription_product_num']), 2); + // 药品总金额-计算运费使用 + $freight_calculation_amount = $amount_total; + // 处方药品数据 $product['product_num'] = $order_prescription_product['prescription_product_num']; $product['used_quantity'] = 0; // 已使用数量 $product['actual_quantity'] = $order_prescription_product['prescription_product_num']; // 实际药品数量 = 处方数量 - 健康包可使用的赠送药品数量 + $product['actual_product_price'] = $product['product_price']; // 实际药品价格 + $product['discount_amount'] = 0; // 药品优惠金额 $product_data = $product->toArray(); $product_datas[] = $product_data; } @@ -2078,8 +2135,12 @@ class PatientOrderService extends BaseService } // 此处不检测未支付的商品订单,在创建订单时会进行数量的扣减 - // 处理商品数量、金额 + // 处理商品数量、金额,重新赋0,上面已计算过 $amount_total = 0; + + // 药品总金额-计算运费使用,重新赋0,上面已计算过 + $freight_calculation_amount = 0; + foreach ($product_datas as &$product_data) { // 获取服务包内某一药品的总数量 $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_detail['package_id'], $product_data['product_id']); @@ -2087,30 +2148,74 @@ class PatientOrderService extends BaseService // 获取服务包内某一药品的剩余数量 $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'], $product_data['product_id'], $total_quantity); + // 实际药品价格 + $actual_product_price = 0; + // 可用数量大于处方商品数量 if ($remaining_quantity >= $product_data['product_num']) { - // 把商品价格置为0。金额按照0计算 - $product_data['product_price'] = 0; + // 药品优惠金额 + $product_data['discount_amount'] = $product_data['product_price'] - 35; + + // 实际药品价格 + $actual_product_price = 35 * $product_data['product_num']; // 已使用数量 = 原数量+此次使用数量 $product_data['used_quantity'] = $product_data['product_num']; // 实际药品数量 = 处方数量 - 健康包可使用的赠送药品数量 $product_data['actual_quantity'] = 0; + + // 实际药品价格 + $actual_product_price = 35 * $product_data['used_quantity']; } else { // 已使用数量 = 最大可用数量;表示此服务包商品已使用完毕 $product_data['used_quantity'] = $remaining_quantity; // 实际药品数量 = 处方数量 - 健康包可使用的赠送药品数量 $product_data['actual_quantity'] = $product_data['product_num'] - $remaining_quantity; + + // 实际药品价格= 35 * 剩余免费药品数量 + 原价 * 实际药品数量 + $actual_product_price = bcadd( + bcmul( + 35, + $product_data['used_quantity'], + 2 + ), + bcmul( + $product_data['product_price'], + $product_data['actual_quantity'], + 2 + ), + 2 + ); } // 此处重新计算药品总金额 $amount_total = bcadd( $amount_total, + $actual_product_price, + 2 + ); + + // 此处重新计算药品优惠金额 + if ($discount_amount > 0){ + $discount_amount = bcadd( + $discount_amount, + bcmul( + $product_data['discount_amount'], + $product_data['used_quantity'], + 2 + ), + 2 + ); + } + + // 此处计算药品总金额-计算运费使用 + $freight_calculation_amount = bcadd( + $freight_calculation_amount, bcmul( $product_data['product_price'], - $product_data['actual_quantity'], + $product_data['product_num'], 2 ), 2 @@ -2130,7 +2235,7 @@ class PatientOrderService extends BaseService if (env("APP_ENV") == "prod") { $Prescription = new Prescription(); $result = $Prescription->getLogisticsFee(); - if ($amount_total < $result['drugCost']) { + if ($freight_calculation_amount < $result['drugCost']) { $logistics_fee = $result['freight']; } } @@ -2156,6 +2261,7 @@ class PatientOrderService extends BaseService $result = array(); $result['amount_total'] = $amount_total; + $result['discount_amount'] = $discount_amount; // 优惠金额 $result['coupon_amount_total'] = $coupon_amount_total; $result['payment_amount_total'] = $payment_amount_total; $result['logistics_fee'] = $logistics_fee; diff --git a/app/Services/UserCouponService.php b/app/Services/UserCouponService.php index 03e4664..1fe6831 100644 --- a/app/Services/UserCouponService.php +++ b/app/Services/UserCouponService.php @@ -389,7 +389,7 @@ class UserCouponService extends BaseService } $product_price = bcadd($product_price, - bcmul( // 商品价格*数量 + bcmul( // 商品价格*实际数量数量 $coupon_product_data['product_price'], $coupon_product_data['actual_quantity'], 2 diff --git a/extend/Prescription/Prescription.php b/extend/Prescription/Prescription.php index ba5bc6c..7c40750 100644 --- a/extend/Prescription/Prescription.php +++ b/extend/Prescription/Prescription.php @@ -180,7 +180,7 @@ class Prescription } return $response['data']; - } catch (GuzzleException $e) { + } catch (\Throwable $e) { throw new BusinessException($e->getMessage()); } } @@ -189,6 +189,8 @@ class Prescription * 上报处方 * @param array $arg * @return array + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface */ public function reportPrescription(array $arg): array { From 3470cd2aaab17c0547a1e14e5f4ee98aff314c31 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 15:44:06 +0800 Subject: [PATCH 230/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=95=86=E5=93=81?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=87=91=E9=A2=9D=E8=AE=A1=E7=AE=971?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 91 ++++++++++++++++++---------- 1 file changed, 59 insertions(+), 32 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index dba65b0..52feb64 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1473,6 +1473,7 @@ class PatientOrderService extends BaseService $product_datas = array(); // 商品数据 $discount_amount = 0;// 优惠金额 $freight_calculation_amount = 0; // 药品总金额-计算运费使用 + $payment_amount_total = 0; // 支付金额 foreach ($product_ids as $product_id) { // 检测药品是否存在于处方中 @@ -1503,6 +1504,12 @@ class PatientOrderService extends BaseService // 获取订单金额 $amount_total = bcadd($amount_total, ($product['product_price'] * $order_prescription_product['prescription_product_num']), 2); + // 药品总金额-计算运费使用 + $freight_calculation_amount = $amount_total; + + // 支付金额 + $payment_amount_total = $amount_total; + // 商品数据 $product['product_num'] = $order_prescription_product['prescription_product_num']; $product['used_quantity'] = 0; // 健康包服务下已使用赠送药品的数量,默认赋0 @@ -1539,12 +1546,15 @@ class PatientOrderService extends BaseService // 处理商品数量 $OrderServicePackageService = new OrderServicePackageService(); - // 处理商品数量、金额,重新赋0,上面已计算过 + // 商品金额,重新赋0,上面已计算过 $amount_total = 0; // 药品总金额-计算运费使用,重新赋0,上面已计算过 $freight_calculation_amount = 0; + // 支付金额 + $payment_amount_total = 0; + foreach ($product_datas as $key => $product_data) { // 获取服务包内某一药品的总数量 $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_detail['package_id'], $product_data['product_id']); @@ -1552,9 +1562,6 @@ class PatientOrderService extends BaseService // 获取服务包内某一药品的剩余数量 $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'], $product_data['product_id'], $total_quantity); - // 实际药品价格 - $actual_product_price = 0; - // 可用数量大于处方商品数量 if ($remaining_quantity >= $product_data['product_num']) { // 药品优惠金额 @@ -1589,6 +1596,17 @@ class PatientOrderService extends BaseService ), 2 ); + + // 此处重新计算药品支付金额 + $payment_amount_total = bcadd( + $payment_amount_total, + bcmul( + $product_datas[$key]['product_price'], + $product_datas[$key]['actual_quantity'], + 2 + ), + 2 + ); } // 此处重新计算药品总金额 @@ -1599,17 +1617,15 @@ class PatientOrderService extends BaseService ); // 此处重新计算药品优惠金额 - if ($discount_amount > 0){ - $discount_amount = bcadd( - $discount_amount, - bcmul( - $product_datas[$key]['discount_amount'], - $product_datas[$key]['used_quantity'], - 2 - ), + $discount_amount = bcadd( + $discount_amount, + bcmul( + $product_datas[$key]['discount_amount'], + $product_datas[$key]['used_quantity'], 2 - ); - } + ), + 2 + ); // 此处计算药品总金额-计算运费使用 $freight_calculation_amount = bcadd( @@ -1650,13 +1666,14 @@ class PatientOrderService extends BaseService // 实际支付金额=商品总金额-优惠卷金额+运费金额 $payment_amount_total = bcadd( bcsub( - $amount_total, + $payment_amount_total, $coupon_amount_total, 2 ), $logistics_fee, 2 ); + if ($app_env == "dev") { if ($payment_amount_total > 0) { $payment_amount_total = 0.01; @@ -2082,6 +2099,7 @@ class PatientOrderService extends BaseService $product_datas = array(); // 商品数据 $discount_amount = 0;// 优惠金额 $freight_calculation_amount = 0; // 药品总金额-计算运费使用 + $payment_amount_total = 0; // 支付金额 foreach ($order_prescription_products as &$order_prescription_product) { $params = array(); @@ -2107,6 +2125,9 @@ class PatientOrderService extends BaseService // 药品总金额-计算运费使用 $freight_calculation_amount = $amount_total; + // 支付金额 + $payment_amount_total = $amount_total; + // 处方药品数据 $product['product_num'] = $order_prescription_product['prescription_product_num']; $product['used_quantity'] = 0; // 已使用数量 @@ -2141,6 +2162,9 @@ class PatientOrderService extends BaseService // 药品总金额-计算运费使用,重新赋0,上面已计算过 $freight_calculation_amount = 0; + // 支付金额 + $payment_amount_total = 0; + foreach ($product_datas as &$product_data) { // 获取服务包内某一药品的总数量 $total_quantity = $OrderServicePackageService->getOrderServiceProductTotalQuantity($order_service_package_detail['package_id'], $product_data['product_id']); @@ -2148,17 +2172,11 @@ class PatientOrderService extends BaseService // 获取服务包内某一药品的剩余数量 $remaining_quantity = $OrderServicePackageService->getOrderServiceProductCanUseQuantity($order_service_package['order_service_id'], $product_data['product_id'], $total_quantity); - // 实际药品价格 - $actual_product_price = 0; - // 可用数量大于处方商品数量 if ($remaining_quantity >= $product_data['product_num']) { // 药品优惠金额 $product_data['discount_amount'] = $product_data['product_price'] - 35; - // 实际药品价格 - $actual_product_price = 35 * $product_data['product_num']; - // 已使用数量 = 原数量+此次使用数量 $product_data['used_quantity'] = $product_data['product_num']; @@ -2188,6 +2206,17 @@ class PatientOrderService extends BaseService ), 2 ); + + // 此处重新计算药品支付金额 + $payment_amount_total = bcadd( + $payment_amount_total, + bcmul( + $product_data['product_price'], + $product_data['actual_quantity'], + 2 + ), + 2 + ); } // 此处重新计算药品总金额 @@ -2198,17 +2227,15 @@ class PatientOrderService extends BaseService ); // 此处重新计算药品优惠金额 - if ($discount_amount > 0){ - $discount_amount = bcadd( - $discount_amount, - bcmul( - $product_data['discount_amount'], - $product_data['used_quantity'], - 2 - ), + $discount_amount = bcadd( + $discount_amount, + bcmul( + $product_data['discount_amount'], + $product_data['used_quantity'], 2 - ); - } + ), + 2 + ); // 此处计算药品总金额-计算运费使用 $freight_calculation_amount = bcadd( @@ -2241,7 +2268,7 @@ class PatientOrderService extends BaseService } // 实际支付金额=商品总金额-优惠卷金额+运费金额 - $payment_amount_total = bcadd(bcsub($amount_total, $coupon_amount_total, 2), $logistics_fee, 2); + $payment_amount_total = bcadd(bcsub($payment_amount_total, $coupon_amount_total, 2), $logistics_fee, 2); // 获取收货地址 $params = array(); From e200ca735e2cad6b294058632f0831c49acc67d7 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 16:00:51 +0800 Subject: [PATCH 231/274] =?UTF-8?q?=E5=8C=BB=E7=94=9F=E6=94=B6=E7=9B=8A?= =?UTF-8?q?=E6=98=8E=E7=BB=86=E4=B8=AA=E4=BA=BA=E8=B4=A6=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorAccountService.php | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index 63db476..901cad6 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -169,8 +169,9 @@ class DoctorAccountService extends BaseService // 获取订单可提现金额 $result['expected_amount_total'] = $OrderService->getOrderWithdrawalAmount($result,$result['refund_total']); - // 处理入账状态 + // 处理问诊订单状态 if (!empty($result['OrderInquiry'])) { + // 处理入账状态 if ($result['OrderInquiry']['inquiry_status'] == 4 || $result['OrderInquiry']['inquiry_status'] == 5) { $result['entry_status'] = 1;// 入账中 } elseif ($result['OrderInquiry']['inquiry_status'] == 6) { @@ -186,8 +187,12 @@ class DoctorAccountService extends BaseService } else { $result['entry_status'] = 0;// 未知 } + + // 处理入账金额 + $result['estimate_income'] = bcmul((string)$result['amount_total'],"0.75",2); } + // 处理服务包订单状态 if (!empty($result['OrderServicePackage'])) { if ($result['OrderServicePackage']['order_service_status'] == 3) { $result['entry_status'] = 1;// 入账中 @@ -202,6 +207,17 @@ class DoctorAccountService extends BaseService } else { $result['entry_status'] = 0;// 未知 } + + // 获取服务包详情表 + $params = array(); + $params['order_id'] = $result['order_id']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + return fail(); + } + + // 处理入账金额 + $result['estimate_income'] = bcmul((string)$order_service_package_detail['service_price'],"0.75",2); } unset($result['OrderInquiry']); @@ -270,7 +286,7 @@ class DoctorAccountService extends BaseService $params['doctor_id'] = $user_info['client_user_id']; $doctor_account = DoctorAccount::getOne($params); if (!empty($doctor_account)) { - $amount_total = $doctor_account['balance_account']; + $amount_total = floor($doctor_account['balance_account'] * 100) / 100; } // 获取可提现订单列表 From c2056666f1d9c0e59fda478a3557af9276d3879f Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 16:43:01 +0800 Subject: [PATCH 232/274] 1 --- app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php index a9c9519..2ab0eb6 100644 --- a/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AssignDoctorDelayDirectConsumer.php @@ -214,8 +214,14 @@ class AssignDoctorDelayDirectConsumer extends ConsumerMessage return Result::ACK; } - // 更改数据库 + $save_data = array(); + $save_data['doctor_id'] = $doctor_id; + + $params = array(); + $params['order_id'] = $order_inquiry['order_id']; + Order::edit($params, $save_data); + $save_data = array(); $save_data['doctor_id'] = $doctor_id; $save_data['inquiry_status'] = 3; // 待接诊 From cef772f53c233c71bcf8894a29c44c2594376478 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 17:11:41 +0800 Subject: [PATCH 233/274] =?UTF-8?q?=E5=A4=A7=E5=A4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/Order.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Model/Order.php b/app/Model/Order.php index cd83f02..6911d01 100644 --- a/app/Model/Order.php +++ b/app/Model/Order.php @@ -139,7 +139,7 @@ class Order extends Model } $subQuery->whereNotIn('inquiry_mode', [7,8,9]) - ->whereIn('inquiry_status', [4,5,6,7]) + ->whereIn('inquiry_status', [6,7]) ->whereBetween('reception_time', $date_params) ->whereRaw('gdxz_order.order_id = gdxz_order_inquiry.order_id'); }) From 1a164b7cea045eada33d36a9953ce2016f209f79 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 18:13:03 +0800 Subject: [PATCH 234/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=88=91=E7=9A=84?= =?UTF-8?q?=E8=B4=A6=E6=88=B7=E6=95=B0=E6=8D=AE-=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=8C=BB=E7=94=9F=E6=9C=8D=E5=8A=A1=E5=8C=85=E6=AF=8F=E6=9C=88?= =?UTF-8?q?=E8=B4=A6=E5=8D=95=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/Order.php | 37 +++++++------ app/Model/OrderInquiry.php | 26 +++++++++ app/Model/OrderServicePackage.php | 18 +++++++ app/Services/DoctorAccountService.php | 76 ++++++++++++++++++++------- 4 files changed, 123 insertions(+), 34 deletions(-) diff --git a/app/Model/Order.php b/app/Model/Order.php index 6911d01..1789018 100644 --- a/app/Model/Order.php +++ b/app/Model/Order.php @@ -116,7 +116,7 @@ class Order extends Model /** * 获取医生某一时间段收益明细分页数据 - * @param array $params + * @param string|int $doctor_id * @param array $date_params 时间区间 * @param string|int $is_platform_deep_cooperation * @param array $fields @@ -124,27 +124,34 @@ class Order extends Model * @param int|null $per_page * @return array */ - public static function getDoctorCreatedDateOrderInquiryPage(array $params, array $date_params,string|int $is_platform_deep_cooperation,array $fields = ["*"], int $page = null, ?int $per_page = 10): array + public static function getDoctorCreatedDateOrderInquiryPage(string|int $doctor_id, array $date_params,string|int $is_platform_deep_cooperation,array $fields = ["*"], int $page = null, ?int $per_page = 10): array { + $params = array(); + $params['doctor_id'] = $doctor_id; + $query = self::with(['OrderInquiry', 'OrderServicePackage']) ->whereIn('order_type',[1,4,5]) ->where($params); // 问诊订单 - $query = $query->where(function ($query) use ($date_params,$is_platform_deep_cooperation){ - $query->whereExists(function ($subQuery) use ($date_params,$is_platform_deep_cooperation){ - $subQuery->from('order_inquiry'); - if ($is_platform_deep_cooperation == 1){ - $subQuery->whereNotIn('inquiry_type', [2,4]); - } + $query = $query->where(function ($query) use ($date_params,$is_platform_deep_cooperation,$doctor_id){ + $query->whereExists(function ($subQuery) use ($date_params,$is_platform_deep_cooperation,$doctor_id){ + $subQuery->from('order_inquiry'); + if ($is_platform_deep_cooperation == 1){ + $subQuery->whereNotIn('inquiry_type', [2,4]); + } - $subQuery->whereNotIn('inquiry_mode', [7,8,9]) - ->whereIn('inquiry_status', [6,7]) - ->whereBetween('reception_time', $date_params) - ->whereRaw('gdxz_order.order_id = gdxz_order_inquiry.order_id'); - }) - ->orWhereExists(function ($subQuery) use ($date_params) { - $subQuery->from('order_service_package') + $subQuery->where('doctor_id', $doctor_id) + ->whereNotIn('inquiry_mode', [7,8,9]) + ->where('doctor_id', $doctor_id) + ->whereIn('inquiry_status', [6,7]) + ->whereBetween('reception_time', $date_params) + ->whereRaw('gdxz_order.order_id = gdxz_order_inquiry.order_id'); + }) + ->orWhereExists(function ($subQuery) use ($date_params,$doctor_id) { + $subQuery->from('order_service_package'); + + $subQuery->where('doctor_id', $doctor_id) ->whereRaw('gdxz_order.order_id = gdxz_order_service_package.order_id') ->whereIn('order_service_status', [4,5,6,7]) ->whereBetween('start_time', $date_params); diff --git a/app/Model/OrderInquiry.php b/app/Model/OrderInquiry.php index 5bc1425..9176d28 100644 --- a/app/Model/OrderInquiry.php +++ b/app/Model/OrderInquiry.php @@ -607,4 +607,30 @@ class OrderInquiry extends Model ->orderBy('created_at') ->get(); } + + /** + * 获取医生每月账单数据 + * @param array $params + * @param string $year + * @param string|int $is_platform_deep_cooperation + * @param array $fields + * @return \Hyperf\Collection\Collection + */ + public static function getMonthlyGroupBill(array $params, string $year,string|int $is_platform_deep_cooperation,array $fields = ["*"]): \Hyperf\Collection\Collection + { + $query = self::select([Db::raw('YEAR(reception_time) AS `year`') ,Db::raw('MONTH(reception_time) AS `month`')]) + ->where($params) + ->whereNotIn('inquiry_mode', [7,8,9]) + ->whereIn('inquiry_status', [6]) + ->where(Db::raw('YEAR(reception_time)'), $year); + + if ($is_platform_deep_cooperation == 1){ + $query->whereNotIn('inquiry_type', [2,4]); + } + + $result = $query->groupBy([Db::raw('YEAR(reception_time)'),Db::raw('MONTH(reception_time)')]) + ->get($fields); + + return $result; + } } diff --git a/app/Model/OrderServicePackage.php b/app/Model/OrderServicePackage.php index f070671..f2ca614 100644 --- a/app/Model/OrderServicePackage.php +++ b/app/Model/OrderServicePackage.php @@ -9,6 +9,7 @@ namespace App\Model; use Carbon\Carbon; use Hyperf\Database\Model\Collection; use Hyperf\Database\Model\Relations\HasOne; +use Hyperf\DbConnection\Db; use Hyperf\Snowflake\Concern\Snowflake; /** @@ -215,4 +216,21 @@ class OrderServicePackage extends Model ->orderBy('start_time') ->get(); } + + /** + * 获取医生每月账单数据 + * @param array $params + * @param string $year + * @param array $fields + * @return \Hyperf\Collection\Collection + */ + public static function getMonthlyGroupBill(array $params, string $year,array $fields = ["*"]): \Hyperf\Collection\Collection + { + return self::select([Db::raw('YEAR(start_time) AS `year`') ,Db::raw('MONTH(start_time) AS `month`')]) + ->where($params) + ->whereIn('order_service_status', [3,4,5]) + ->where(Db::raw('YEAR(start_time)'), $year) + ->groupBy([Db::raw('YEAR(start_time)'),Db::raw('MONTH(start_time)')]) + ->get($fields); + } } diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index 901cad6..3bc1f19 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -75,22 +75,26 @@ class DoctorAccountService extends BaseService $balance_account = $doctor_account['balance_account']; } - // 获取医生每月账单数据 - $bill = []; + // 获取医生问诊每月账单数据 +// $bill = []; +// +// $params = array(); +// $params['doctor_id'] = $user_info['client_user_id']; +// $params['year'] = $year; +// $doctor_account_days = DoctorAccountDay::getDoctorMonth($params); +// if (!empty($doctor_account_days)) { +// foreach ($doctor_account_days as $doctor_account_day) { +// $data = array(); +// $data['total_amount'] = bcmul((string)$doctor_account_day['total_amount'], 1, 2); +// $data['month'] = $doctor_account_day['month']; +// $bill[] = $data; +// } +// unset($doctor_account_days); +// } - $params = array(); - $params['doctor_id'] = $user_info['client_user_id']; - $params['year'] = $year; - $doctor_account_days = DoctorAccountDay::getDoctorMonth($params); - if (!empty($doctor_account_days)) { - foreach ($doctor_account_days as $doctor_account_day) { - $data = array(); - $data['total_amount'] = bcmul((string)$doctor_account_day['total_amount'], 1, 2); - $data['month'] = $doctor_account_day['month']; - $bill[] = $data; - } - unset($doctor_account_days); - } + // 获取医生服务包每月账单数据 + $year = date('Y',strtotime($year)); + $bill = $this->getDoctorMonthlyGroupBill($user_doctor,$year); $result = array(); $result['doctor_today_inquiry_total'] = bcmul((string)$doctor_today_total, "0.75", 2); // 今日预计收入 @@ -121,9 +125,6 @@ class DoctorAccountService extends BaseService return fail(); } - $params = array(); - $params['doctor_id'] = $user_doctor['doctor_id']; - // 获取当月开始时间 $start_date = date('Y-m-01 00:00:00', strtotime($date)); @@ -133,7 +134,7 @@ class DoctorAccountService extends BaseService $date_params = [$start_date, $end_date]; - $results = Order::getDoctorCreatedDateOrderInquiryPage($params, $date_params, $user_doctor['is_platform_deep_cooperation'], ['*'], $page, $per_page); + $results = Order::getDoctorCreatedDateOrderInquiryPage($user_doctor['doctor_id'], $date_params, $user_doctor['is_platform_deep_cooperation'], ['*'], $page, $per_page); if (!empty($results['data'])) { $OrderService = new OrderService(); @@ -865,4 +866,41 @@ class DoctorAccountService extends BaseService return $income_tax; } + + /** + * 获取医生每月账单数据 + * @param array|object $user_doctor + * @param string $year + * @return array + */ + public function getDoctorMonthlyGroupBill(array|object $user_doctor,string $year): array + { + // 获取医生服务包每月账单数据 + $params = array(); + $params['doctor_id'] = $user_doctor['doctor_id']; + $order_service_package = OrderServicePackage::getMonthlyGroupBill($params,$year); + if (!empty($order_service_package)){ + $order_service_package = $order_service_package->toArray(); + } + + // 获取医生问诊每月账单数据 + $params = array(); + $params['doctor_id'] = $user_doctor['doctor_id'];; + $order_inquiry = OrderInquiry::getMonthlyGroupBill($params,$year,$user_doctor['is_platform_deep_cooperation']); + if (!empty($order_inquiry)){ + $order_inquiry = $order_inquiry->toArray(); + } + + // 处理月账单数据 + // 合并两个数组 + $merged = array_merge($order_service_package, $order_inquiry); + + // 去除重复的元素 + $bill = array_unique($merged, SORT_REGULAR); + + // 重新索引数组 + $bill = array_values($bill); + + return $bill; + } } \ No newline at end of file From 2f8e6e73c7a46a515f67968186268fa564fe1bf1 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 18:14:45 +0800 Subject: [PATCH 235/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=88=91=E7=9A=84?= =?UTF-8?q?=E8=B4=A6=E6=88=B7=E6=95=B0=E6=8D=AE-=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=8C=BB=E7=94=9F=E6=9C=8D=E5=8A=A1=E5=8C=85=E6=AF=8F=E6=9C=88?= =?UTF-8?q?=E8=B4=A6=E5=8D=95=E6=95=B0=E6=8D=AE1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/Order.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Model/Order.php b/app/Model/Order.php index 1789018..54e29e0 100644 --- a/app/Model/Order.php +++ b/app/Model/Order.php @@ -144,7 +144,7 @@ class Order extends Model $subQuery->where('doctor_id', $doctor_id) ->whereNotIn('inquiry_mode', [7,8,9]) ->where('doctor_id', $doctor_id) - ->whereIn('inquiry_status', [6,7]) + ->whereIn('inquiry_status', [6]) ->whereBetween('reception_time', $date_params) ->whereRaw('gdxz_order.order_id = gdxz_order_inquiry.order_id'); }) @@ -153,7 +153,7 @@ class Order extends Model $subQuery->where('doctor_id', $doctor_id) ->whereRaw('gdxz_order.order_id = gdxz_order_service_package.order_id') - ->whereIn('order_service_status', [4,5,6,7]) + ->whereIn('order_service_status', [3,4,5]) ->whereBetween('start_time', $date_params); }); }); From d9b6d2e3b56974f67ad024ac01c7cdda9c179a44 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 18:46:59 +0800 Subject: [PATCH 236/274] 1 --- app/Services/OrderServicePackageService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 1f80407..25b359d 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -442,7 +442,7 @@ class OrderServicePackageService extends BaseService } if (\Hyperf\Config\config("app_env") == "dev"){ - $service_price = 0.01; + $service_price = 1; } Db::beginTransaction(); From ec0bec53254ddc4dbd80e1738a170eeec0b95b8d Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 19:07:18 +0800 Subject: [PATCH 237/274] 1 --- app/Services/OrderServicePackageService.php | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 25b359d..95ee677 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -378,7 +378,7 @@ class OrderServicePackageService extends BaseService $monthly_frequency = $health_package['monthly_frequency']; // 单次图文问诊价格 - $single_inquiry_price = $doctor_inquiry_config['inquiry_price']; + $single_inquiry_price = $doctor_inquiry_config['inquiry_price'] * $health_package['service_rate']; } // 随访包 @@ -413,9 +413,6 @@ class OrderServicePackageService extends BaseService // 每月次数(0表示不限次) $monthly_frequency = $doctor_config_follow_package['monthly_frequency']; - - // 单次图文问诊价格 - $single_inquiry_price = $doctor_inquiry_config['inquiry_price']; } // 判断数据 @@ -423,7 +420,7 @@ class OrderServicePackageService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "订单创建失败"); } - if ($service_period === null || $single_inquiry_price === null){ + if ($service_period === null){ return fail(HttpEnumCode::HTTP_ERROR, "订单创建失败"); } @@ -1476,9 +1473,9 @@ class OrderServicePackageService extends BaseService if (!empty($order_service_package_detail)){ // 计算本次问诊服务包问诊金额 $amount_total = bcmul( - (string)$order_service_package_detail['service_count'], - (string)$order_service_package_detail['single_inquiry_price'], - 3 + (string)$order_service_package_detail['service_price'], + 0.75, + 2 ); } } From 7e43eeff8e14f051b3b64f6141a747d821145e62 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 19:14:09 +0800 Subject: [PATCH 238/274] 1 --- app/Services/OrderServicePackageService.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 95ee677..879a0ae 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1472,9 +1472,9 @@ class OrderServicePackageService extends BaseService $order_service_package_detail = OrderServicePackageDetail::getOne($params); if (!empty($order_service_package_detail)){ // 计算本次问诊服务包问诊金额 - $amount_total = bcmul( + $amount_total = bcadd( + $amount_total, (string)$order_service_package_detail['service_price'], - 0.75, 2 ); } From 30aeb1de1050cb2206e8793f353ada5b0fc8928e Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 19:22:36 +0800 Subject: [PATCH 239/274] 2 --- app/Services/OrderServicePackageService.php | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 879a0ae..06e4205 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1472,11 +1472,22 @@ class OrderServicePackageService extends BaseService $order_service_package_detail = OrderServicePackageDetail::getOne($params); if (!empty($order_service_package_detail)){ // 计算本次问诊服务包问诊金额 - $amount_total = bcadd( - $amount_total, - (string)$order_service_package_detail['service_price'], - 2 - ); + if ($order_service_package['order_service_type'] == 1){ + $amount_total = bcadd( + $amount_total, + bcmul( + (string)$order_service_package_detail['single_inquiry_price'], + (string)$order_service_package_detail['service_count'], + ), + 2 + ); + }else{ + $amount_total = bcadd( + $amount_total, + (string)$order_service_package_detail['service_price'], + 2 + ); + } } } From 8530afb5ff181505b5157788a4b7249b40d84fdd Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 19:29:58 +0800 Subject: [PATCH 240/274] 3 --- app/Services/OrderServicePackageService.php | 2 +- app/Services/PatientOrderService.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 06e4205..c320e79 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -378,7 +378,7 @@ class OrderServicePackageService extends BaseService $monthly_frequency = $health_package['monthly_frequency']; // 单次图文问诊价格 - $single_inquiry_price = $doctor_inquiry_config['inquiry_price'] * $health_package['service_rate']; + $single_inquiry_price = $doctor_inquiry_config['inquiry_price'] * $health_package['service_rate'] / 100; } // 随访包 diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 52feb64..bcb39a0 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -2175,7 +2175,7 @@ class PatientOrderService extends BaseService // 可用数量大于处方商品数量 if ($remaining_quantity >= $product_data['product_num']) { // 药品优惠金额 - $product_data['discount_amount'] = $product_data['product_price'] - 35; + $product_data['discount_amount'] = 35 * $product_data['product_num']; // 已使用数量 = 原数量+此次使用数量 $product_data['used_quantity'] = $product_data['product_num']; From 73a23b8edb14ca0251e67bda44e9c8922ba74409 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 19:32:35 +0800 Subject: [PATCH 241/274] 23 --- app/Services/PatientOrderService.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index bcb39a0..724b65c 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -2192,6 +2192,9 @@ class PatientOrderService extends BaseService // 实际药品数量 = 处方数量 - 健康包可使用的赠送药品数量 $product_data['actual_quantity'] = $product_data['product_num'] - $remaining_quantity; + // 药品优惠金额 + $product_data['discount_amount'] = 35 * $product_data['used_quantity']; + // 实际药品价格= 35 * 剩余免费药品数量 + 原价 * 实际药品数量 $actual_product_price = bcadd( bcmul( @@ -2229,11 +2232,7 @@ class PatientOrderService extends BaseService // 此处重新计算药品优惠金额 $discount_amount = bcadd( $discount_amount, - bcmul( - $product_data['discount_amount'], - $product_data['used_quantity'], - 2 - ), + $product_data['discount_amount'], 2 ); From ae71b4cb28da8891bb9d766a54fd4597cb2634e1 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 19:43:19 +0800 Subject: [PATCH 242/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=88=91=E7=9A=84?= =?UTF-8?q?=E8=B4=A6=E6=88=B7=E6=9C=88=E8=B4=A6=E5=8D=95=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorAccountService.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index 3bc1f19..398e530 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -217,6 +217,17 @@ class DoctorAccountService extends BaseService return fail(); } + // 计算本次问诊服务包问诊金额 + if ($result['order_type'] == 4){ + $result['estimate_income'] = bcmul( + (string)$order_service_package_detail['single_inquiry_price'], + (string)$order_service_package_detail['service_count'], + 2 + ); + }else{ + $result['estimate_income'] = (string)$order_service_package_detail['service_price']; + } + // 处理入账金额 $result['estimate_income'] = bcmul((string)$order_service_package_detail['service_price'],"0.75",2); } From 7b106566ec72702d0c4d2f891a69ab9384fb94a1 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 19:45:38 +0800 Subject: [PATCH 243/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=88=91=E7=9A=84?= =?UTF-8?q?=E8=B4=A6=E6=88=B7=E6=9C=88=E8=B4=A6=E5=8D=95=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=95=B0=E6=8D=AE1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorAccountService.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index 398e530..fd5c223 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -217,7 +217,7 @@ class DoctorAccountService extends BaseService return fail(); } - // 计算本次问诊服务包问诊金额 + // 处理入账金额 if ($result['order_type'] == 4){ $result['estimate_income'] = bcmul( (string)$order_service_package_detail['single_inquiry_price'], @@ -227,9 +227,6 @@ class DoctorAccountService extends BaseService }else{ $result['estimate_income'] = (string)$order_service_package_detail['service_price']; } - - // 处理入账金额 - $result['estimate_income'] = bcmul((string)$order_service_package_detail['service_price'],"0.75",2); } unset($result['OrderInquiry']); From ce18ee635229f1a34cb5602a670dd0d78cdf9a6b Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 19:47:25 +0800 Subject: [PATCH 244/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=88=91=E7=9A=84?= =?UTF-8?q?=E8=B4=A6=E6=88=B7=E6=9C=88=E8=B4=A6=E5=8D=95=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=95=B0=E6=8D=AE2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorAccountService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index fd5c223..313e2bb 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -218,7 +218,7 @@ class DoctorAccountService extends BaseService } // 处理入账金额 - if ($result['order_type'] == 4){ + if ($result['order_type'] == 5){ $result['estimate_income'] = bcmul( (string)$order_service_package_detail['single_inquiry_price'], (string)$order_service_package_detail['service_count'], From cb54b4e3c170658c1b57a6e8701b16bc7baee3d5 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 08:34:54 +0800 Subject: [PATCH 245/274] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=88=91=E7=9A=84?= =?UTF-8?q?=E8=B4=A6=E6=88=B7=E6=9C=88=E8=B4=A6=E5=8D=95=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=95=B0=E6=8D=AE3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorAccountService.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index 313e2bb..e40fe8d 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -220,12 +220,20 @@ class DoctorAccountService extends BaseService // 处理入账金额 if ($result['order_type'] == 5){ $result['estimate_income'] = bcmul( - (string)$order_service_package_detail['single_inquiry_price'], - (string)$order_service_package_detail['service_count'], + bcmul( + (string)$order_service_package_detail['single_inquiry_price'], + (string)$order_service_package_detail['service_count'], + 2 + ), + 0.75, 2 ); }else{ - $result['estimate_income'] = (string)$order_service_package_detail['service_price']; + $result['estimate_income'] = bcmul( + (string)$order_service_package_detail['service_price'], + 0.75, + 2 + ); } } From 320aca8cfcdb7612c4cbe15a975af4efdada730a Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 08:53:28 +0800 Subject: [PATCH 246/274] =?UTF-8?q?=E5=A4=84=E7=90=86=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E9=87=91=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 724b65c..a6dd807 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -646,6 +646,13 @@ class PatientOrderService extends BaseService } } + // 处理优惠金额 + $order_product['discount_amount'] = bcsub( + (string)$order_product['amount_total'], + (string)$order_product['payment_amount_total'], + 2 + ); + $result = array(); $result['user_doctor'] = $user_doctor ?? []; $result['order_product'] = $order_product; @@ -2269,6 +2276,9 @@ class PatientOrderService extends BaseService // 实际支付金额=商品总金额-优惠卷金额+运费金额 $payment_amount_total = bcadd(bcsub($payment_amount_total, $coupon_amount_total, 2), $logistics_fee, 2); + // 药品优惠金额 + $discount_amount = $discount_amount + $coupon_amount_total; + // 获取收货地址 $params = array(); $params['user_id'] = $user_info['user_id']; From ecabe42b02372666fde2fb017aabd3961e0ccf63 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 09:36:21 +0800 Subject: [PATCH 247/274] 1 --- app/Services/UserDoctorService.php | 37 +++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index 4847a83..ae43155 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -1787,17 +1787,42 @@ class UserDoctorService extends BaseService $params =array(); $params['doctor_id'] = $user_info['client_user_id']; - $order_inquiry = OrderInquiry::getInList($params,$order_inquiry_ids,$fields); - if (empty($order_inquiry)){ + $order_inquirys = OrderInquiry::getInList($params,$order_inquiry_ids,$fields); + if (empty($order_inquirys)){ return success(); } - $result = []; - foreach ($order_inquiry as $value){ - $result[] = $value; + foreach ($order_inquirys as &$order_inquiry){ + // 处理未接诊取消时间 + if ($order_inquiry['inquiry_status'] == 3){ + if ($order_inquiry['inquiry_type'] == 1 || $order_inquiry['inquiry_type'] == 3){ + $order_inquiry['no_inquiry_cancel_time'] = 24 * 60; + + // 服务包特殊处理 + if ($order_inquiry['inquiry_mode'] == 8 || $order_inquiry['inquiry_mode'] == 9){ + // 检测问诊是否服务包首次问诊 + $OrderServicePackageService = new OrderServicePackageService(); + + // 获取服务包订单编号-通过问诊订单id + $order_service_no = $OrderServicePackageService->getOrderServiceNoByOrderInquiryId($order_inquiry['inquiry_no']); + + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); + if ($is_first){ + $order_inquiry['no_inquiry_cancel_time'] = 60 * 24 * 3; + }else{ + $order_inquiry['no_inquiry_cancel_time'] = 60 * 24; + } + + } + } + + if ($order_inquiry['inquiry_type'] == 1 || $order_inquiry['inquiry_type'] == 3){ + $order_inquiry['no_inquiry_cancel_time'] = 10; + } + } } - return success($result); + return success($order_inquirys->toArray()); } /** From ce244573238221f9a3d95ed5c6e9ace2a26643cd Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 09:38:29 +0800 Subject: [PATCH 248/274] 2 --- app/Services/UserDoctorService.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index ae43155..d57b3a6 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -1783,6 +1783,9 @@ class UserDoctorService extends BaseService 'patient_sex', 'patient_age', 'inquiry_status', + 'inquiry_type', + 'inquiry_mode', + 'inquiry_no', ]; $params =array(); From 39a71a53e4b3bf380ced4c03583635a5356deca2 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 09:40:39 +0800 Subject: [PATCH 249/274] 5 --- app/Services/UserDoctorService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index d57b3a6..1636fa2 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -1819,7 +1819,7 @@ class UserDoctorService extends BaseService } } - if ($order_inquiry['inquiry_type'] == 1 || $order_inquiry['inquiry_type'] == 3){ + if ($order_inquiry['inquiry_type'] == 2 || $order_inquiry['inquiry_type'] == 4){ $order_inquiry['no_inquiry_cancel_time'] = 10; } } From 3c22c9444b5b1090aed0839339e91fab64fa80d9 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 11:59:47 +0800 Subject: [PATCH 250/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=A7=91=E5=AD=A6?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E5=AD=97=E7=AC=A6=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...pleteServicePackageDelayDirectConsumer.php | 2 +- .../AddServicePackageCompleteQueueCommand.php | 11 +++- app/Services/DoctorAccountService.php | 10 ++-- app/Services/OrderService.php | 10 ++-- app/Services/PatientOrderService.php | 56 +++++++++---------- app/Services/UserCouponService.php | 14 +++-- 6 files changed, 55 insertions(+), 48 deletions(-) diff --git a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php index f3763c2..932d03b 100644 --- a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php @@ -128,7 +128,7 @@ class AutoCompleteServicePackageDelayDirectConsumer extends ConsumerMessage (string)$order_service_package_detail['service_count'], bcmul( (string)$order_service_package_detail['single_inquiry_price'], - 0.75, + "0.75", 3), 3 ); diff --git a/app/Command/AddServicePackageCompleteQueueCommand.php b/app/Command/AddServicePackageCompleteQueueCommand.php index 4870b8f..8f2145e 100644 --- a/app/Command/AddServicePackageCompleteQueueCommand.php +++ b/app/Command/AddServicePackageCompleteQueueCommand.php @@ -17,6 +17,7 @@ class AddServicePackageCompleteQueueCommand extends HyperfCommand { public function __construct(protected ContainerInterface $container) { + date_default_timezone_set('Asia/Shanghai'); parent::__construct('addServicePackageFinishQueue'); } @@ -50,9 +51,12 @@ class AddServicePackageCompleteQueueCommand extends HyperfCommand // 添加服务包订单完成延迟队列 $finish_time = strtotime($order_service_package['finish_time']); - $time = $finish_time - time(); + if (\Hyperf\Config\config('app_env') == "dev"){ + $time = 5; + } + $queue_data = array(); $queue_data['order_no'] = $order_service_package['order_service_no']; @@ -84,8 +88,9 @@ class AddServicePackageCompleteQueueCommand extends HyperfCommand public function getExecOrder(): array { // 获取三天后结束时间 - $three_day_finish_time = date('Y-m-d H:i:s',strtotime('+3 days', time())); - $finish_time_params = [date('Y-m-d H:i:s',time()),$three_day_finish_time]; + $three_day_start_time = date('Y-m-d 00:00:00',strtotime('+3 days', strtotime(date('Y-m-d',time())))); + $three_day_finish_time = date('Y-m-d 23:59:59',strtotime('+3 days', strtotime(date('Y-m-d',time())))); + $finish_time_params = [$three_day_start_time,$three_day_finish_time]; $params = array(); $params['order_service_status'] = 3; // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index e40fe8d..500256f 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -225,13 +225,13 @@ class DoctorAccountService extends BaseService (string)$order_service_package_detail['service_count'], 2 ), - 0.75, + "0.75", 2 ); }else{ $result['estimate_income'] = bcmul( (string)$order_service_package_detail['service_price'], - 0.75, + "0.75", 2 ); } @@ -344,9 +344,9 @@ class DoctorAccountService extends BaseService // 计算医生个人所得税 $income_tax = $this->computeIndividualIncomeTax($amount_total); - $withdrawal_amount = bcsub($amount_total, $income_tax, 2); + $withdrawal_amount = bcsub((string)$amount_total, (string)$income_tax, 2); - $income_tax = bcmul($income_tax, 1, 2); + $income_tax = bcmul((string)$income_tax, 1, 2); $result = array(); $result['bank'] = $bank; //银行数据 @@ -673,7 +673,7 @@ class DoctorAccountService extends BaseService } // 提现金额 - $amount_total = bcmul((string)$amount_total,0.75,2); + $amount_total = bcmul((string)$amount_total,"0.75",2); // 计算医生个人所得税 $income_tax = $this->computeIndividualIncomeTax($amount_total); diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index cdefd5f..c24fff2 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -1098,11 +1098,11 @@ class OrderService extends BaseService if ($order['order_type'] == 1){ $expected_amount_total = bcmul( bcsub( - $order['amount_total'], - $refund_total, + (string)$order['amount_total'], + (string)$refund_total, 3 ), - 0.75, + "0.75", 2 ); } @@ -1120,10 +1120,10 @@ class OrderService extends BaseService (string)$order_service_package_detail['single_inquiry_price'], 3 ), - $refund_total, + (string)$refund_total, 3 ), - 0.75, + "0.75", 2 ); } diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index a6dd807..d5ea2ab 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -1593,12 +1593,12 @@ class PatientOrderService extends BaseService $actual_product_price = bcadd( bcmul( 35, - $product_datas[$key]['used_quantity'], + (string)$product_datas[$key]['used_quantity'], 2 ), bcmul( - $product_datas[$key]['product_price'], - $product_datas[$key]['actual_quantity'], + (string)$product_datas[$key]['product_price'], + (string)$product_datas[$key]['actual_quantity'], 2 ), 2 @@ -1608,8 +1608,8 @@ class PatientOrderService extends BaseService $payment_amount_total = bcadd( $payment_amount_total, bcmul( - $product_datas[$key]['product_price'], - $product_datas[$key]['actual_quantity'], + (string)$product_datas[$key]['product_price'], + (string)$product_datas[$key]['actual_quantity'], 2 ), 2 @@ -1618,8 +1618,8 @@ class PatientOrderService extends BaseService // 此处重新计算药品总金额 $amount_total = bcadd( - $amount_total, - $actual_product_price, + (string)$amount_total, + (string)$actual_product_price, 2 ); @@ -1627,8 +1627,8 @@ class PatientOrderService extends BaseService $discount_amount = bcadd( $discount_amount, bcmul( - $product_datas[$key]['discount_amount'], - $product_datas[$key]['used_quantity'], + (string)$product_datas[$key]['discount_amount'], + (string)$product_datas[$key]['used_quantity'], 2 ), 2 @@ -1638,8 +1638,8 @@ class PatientOrderService extends BaseService $freight_calculation_amount = bcadd( $freight_calculation_amount, bcmul( - $product_datas[$key]['product_price'], - $product_datas[$key]['product_num'], + (string)$product_datas[$key]['product_price'], + (string)$product_datas[$key]['product_num'], 2 ), 2 @@ -1673,8 +1673,8 @@ class PatientOrderService extends BaseService // 实际支付金额=商品总金额-优惠卷金额+运费金额 $payment_amount_total = bcadd( bcsub( - $payment_amount_total, - $coupon_amount_total, + (string)$payment_amount_total, + (string)$coupon_amount_total, 2 ), $logistics_fee, @@ -1773,7 +1773,7 @@ class PatientOrderService extends BaseService $data['order_prescription_id'] = $order_prescription['order_prescription_id']; $data['product_id'] = $product_data['product_id']; $data['product_name'] = $product_data['product_name']; - $data['product_price'] = bcmul($product_data['product_price'], $product_data['actual_quantity'], 3); + $data['product_price'] = bcmul((string)$product_data['product_price'], (string)$product_data['actual_quantity'], 3); $data['product_platform_code'] = $product_data['product_platform_code']; $data['amount'] = $product_data['product_num']; $data['manufacturer'] = $product_data['manufacturer']; @@ -2206,12 +2206,12 @@ class PatientOrderService extends BaseService $actual_product_price = bcadd( bcmul( 35, - $product_data['used_quantity'], + (string)$product_data['used_quantity'], 2 ), bcmul( - $product_data['product_price'], - $product_data['actual_quantity'], + (string)$product_data['product_price'], + (string)$product_data['actual_quantity'], 2 ), 2 @@ -2219,10 +2219,10 @@ class PatientOrderService extends BaseService // 此处重新计算药品支付金额 $payment_amount_total = bcadd( - $payment_amount_total, + (string)$payment_amount_total, bcmul( - $product_data['product_price'], - $product_data['actual_quantity'], + (string)$product_data['product_price'], + (string)$product_data['actual_quantity'], 2 ), 2 @@ -2231,24 +2231,24 @@ class PatientOrderService extends BaseService // 此处重新计算药品总金额 $amount_total = bcadd( - $amount_total, - $actual_product_price, + (string)$amount_total, + (string)$actual_product_price, 2 ); // 此处重新计算药品优惠金额 $discount_amount = bcadd( - $discount_amount, - $product_data['discount_amount'], + (string)$discount_amount, + (string)$product_data['discount_amount'], 2 ); // 此处计算药品总金额-计算运费使用 $freight_calculation_amount = bcadd( - $freight_calculation_amount, + (string)$freight_calculation_amount, bcmul( - $product_data['product_price'], - $product_data['product_num'], + (string)$product_data['product_price'], + (string)$product_data['product_num'], 2 ), 2 @@ -2274,7 +2274,7 @@ class PatientOrderService extends BaseService } // 实际支付金额=商品总金额-优惠卷金额+运费金额 - $payment_amount_total = bcadd(bcsub($payment_amount_total, $coupon_amount_total, 2), $logistics_fee, 2); + $payment_amount_total = bcadd(bcsub((string)$payment_amount_total, (string)$coupon_amount_total, 2), (string)$logistics_fee, 2); // 药品优惠金额 $discount_amount = $discount_amount + $coupon_amount_total; diff --git a/app/Services/UserCouponService.php b/app/Services/UserCouponService.php index 1fe6831..9a74aea 100644 --- a/app/Services/UserCouponService.php +++ b/app/Services/UserCouponService.php @@ -388,10 +388,11 @@ class UserCouponService extends BaseService continue; } - $product_price = bcadd($product_price, + $product_price = bcadd( + (string)$product_price, bcmul( // 商品价格*实际数量数量 - $coupon_product_data['product_price'], - $coupon_product_data['actual_quantity'], + (string)$coupon_product_data['product_price'], + (string)$coupon_product_data['actual_quantity'], 2 ), 2 @@ -403,10 +404,11 @@ class UserCouponService extends BaseService if ($coupon['application_scope'] == 1 || $coupon['application_scope'] == 6){ foreach ($coupon_product_datas as $coupon_product_data){ // 计算商品总金额 - $product_price = bcadd($product_price, + $product_price = bcadd( + (string)$product_price, bcmul( // 商品价格*数量 - $coupon_product_data['product_price'], - $coupon_product_data['actual_quantity'], + (string)$coupon_product_data['product_price'], + (string)$coupon_product_data['actual_quantity'], 2 ), 2 From 6849f1c15bf3cc6a571e2b6ec91e00b1e311c76f Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 13:23:54 +0800 Subject: [PATCH 251/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=EF=BC=8C=E8=BF=9B=E5=85=A5=E8=B4=A6=E6=88=B7?= =?UTF-8?q?=E9=87=91=E9=A2=9D=E8=AE=A1=E7=AE=97=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...pleteServicePackageDelayDirectConsumer.php | 38 +++++++++---------- app/Services/MessagePush.php | 2 +- app/Services/OrderServicePackageService.php | 1 + 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php index 932d03b..70a61b6 100644 --- a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php @@ -121,31 +121,29 @@ class AutoCompleteServicePackageDelayDirectConsumer extends ConsumerMessage $params['order_service_id'] = $order_service_package['order_service_id']; OrderServicePackage::edit($params,$data); - // 处理统计问题 - if ($order_service_package['amount_total'] > 0) { - // 计算本次问诊服务包问诊金额 + // 计算本次问诊服务包问诊金额 + if ($order_service_package['order_service_type'] == 1){ $amount_total = bcmul( + (string)$order_service_package_detail['single_inquiry_price'], (string)$order_service_package_detail['service_count'], - bcmul( - (string)$order_service_package_detail['single_inquiry_price'], - "0.75", - 3), - 3 + 8 ); + }else{ + $amount_total = $order_service_package_detail['service_price']; + } - // 处理医生账户总表 - $res = $this->handleDoctorAccount($amount_total,$order_service_package['doctor_id']); - if (!$res) { - Db::rollBack(); - return Result::REQUEUE; - } + // 处理医生账户总表 + $res = $this->handleDoctorAccount($amount_total,$order_service_package['doctor_id']); + if (!$res) { + Db::rollBack(); + return Result::REQUEUE; + } - // 处理医生账户表-日 - $res = $this->handleDoctorAccountDay($amount_total,$order_service_package['doctor_id'],$order_service_package['start_time']); - if (!$res) { - Db::rollBack(); - return Result::REQUEUE; - } + // 处理医生账户表-日 + $res = $this->handleDoctorAccountDay($amount_total,$order_service_package['doctor_id'],$order_service_package['start_time']); + if (!$res) { + Db::rollBack(); + return Result::REQUEUE; } Db::commit(); diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index ec0f9a4..3c2a27d 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -3126,7 +3126,7 @@ class MessagePush extends BaseService $sub_data['params']['page'] = "Pages/yishi/wenzhen_v2/wenzhen"; $sub_data['params']['data'] = [ "thing1" => "{$order_service_type}服务已完成",// 提醒内容 - "name2" => $this->order_inquiry['patient_name'],// 患者姓名 + "name2" => $order_service_package['patient_name'],// 患者姓名 "thing4" => $disease_desc,// 病情描述 "thing6" => "您可以提醒患者进行续费",// 提示说明 "thing5" => "",// 咨询内容 diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index c320e79..7c5b867 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1478,6 +1478,7 @@ class OrderServicePackageService extends BaseService bcmul( (string)$order_service_package_detail['single_inquiry_price'], (string)$order_service_package_detail['service_count'], + 2 ), 2 ); From 86cc28ea13459c7a63b6110e81f0b690de37ffe4 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 14:17:11 +0800 Subject: [PATCH 252/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=88=86=E6=88=90=E9=87=91=E9=A2=9D=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...pleteServicePackageDelayDirectConsumer.php | 31 ++----- .../AddServicePackageCompleteQueueCommand.php | 6 +- app/Model/OrderServicePackage.php | 4 +- app/Services/OrderServicePackageService.php | 89 +++++++++++++++++++ 4 files changed, 100 insertions(+), 30 deletions(-) diff --git a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php index 70a61b6..32d20dd 100644 --- a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php @@ -12,6 +12,8 @@ use App\Model\OrderServicePackageDetail; use App\Model\OrderServicePackageInquiry; use App\Model\UserDoctor; use App\Services\MessagePush; +use App\Services\OrderPrescriptionService; +use App\Services\OrderServicePackageService; use App\Utils\Log; use App\Utils\Utils; use Hyperf\Amqp\Message\ConsumerDelayedMessageTrait; @@ -121,16 +123,10 @@ class AutoCompleteServicePackageDelayDirectConsumer extends ConsumerMessage $params['order_service_id'] = $order_service_package['order_service_id']; OrderServicePackage::edit($params,$data); - // 计算本次问诊服务包问诊金额 - if ($order_service_package['order_service_type'] == 1){ - $amount_total = bcmul( - (string)$order_service_package_detail['single_inquiry_price'], - (string)$order_service_package_detail['service_count'], - 8 - ); - }else{ - $amount_total = $order_service_package_detail['service_price']; - } + // 处理统计问题 + // 获取服务包订单中医生可分成的问诊金额 + $OrderServicePackageService = new OrderServicePackageService(); + $amount_total = $OrderServicePackageService->getServicePackageDoctorInquiryAmountTotal($order_service_package['order_service_no'],$order_service_package,$order_service_package_detail); // 处理医生账户总表 $res = $this->handleDoctorAccount($amount_total,$order_service_package['doctor_id']); @@ -215,17 +211,6 @@ class AutoCompleteServicePackageDelayDirectConsumer extends ConsumerMessage return false; } - if ($order_service_package['order_service_status'] == 5){ - Log::getInstance("queue-AutoCompleteServicePackage")->error("订单已取消" ); - return false; - } - - // 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) - if (!in_array($order_service_package['refund_status'],[0,4,5])){ - Log::getInstance("queue-AutoCompleteServicePackage")->error("订单退款中" ); - return false; - } - // 订单支付状态 if ($order_service_package['pay_status'] != 2){ Log::getInstance("queue-AutoCompleteServicePackage")->error("订单未支付" ); @@ -297,8 +282,6 @@ class AutoCompleteServicePackageDelayDirectConsumer extends ConsumerMessage */ protected function handleDoctorAccount(string|int $amount_total,string|int $doctor_id): bool { - $amount_total = bcmul((string)$amount_total,"0.75",8); - $params = array(); $params['doctor_id'] = $doctor_id; $doctor_account = DoctorAccount::getOne($params); @@ -338,8 +321,6 @@ class AutoCompleteServicePackageDelayDirectConsumer extends ConsumerMessage */ protected function handleDoctorAccountDay(string|int $amount_total,string|int $doctor_id,string $start_time): bool { - $amount_total = bcmul((string)$amount_total,"0.75",8); - $params = array(); $params['doctor_id'] = $doctor_id; $params['date'] = date('Y-m-d', strtotime($start_time)); diff --git a/app/Command/AddServicePackageCompleteQueueCommand.php b/app/Command/AddServicePackageCompleteQueueCommand.php index 8f2145e..424b881 100644 --- a/app/Command/AddServicePackageCompleteQueueCommand.php +++ b/app/Command/AddServicePackageCompleteQueueCommand.php @@ -93,13 +93,11 @@ class AddServicePackageCompleteQueueCommand extends HyperfCommand $finish_time_params = [$three_day_start_time,$three_day_finish_time]; $params = array(); - $params['order_service_status'] = 3; // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) $params['pay_status'] = 2; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - $params['refund_status'] = 0; // 商品订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) $params['add_finish_status'] = 0; // 添加完成订单延迟队列状态(0:未添加 1:已添加 2:添加失败) - - $order_service_packages = OrderServicePackage::getInquiryWithFinishTime($params,$finish_time_params); + $order_service_status_params = [3,5]; // 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) + $order_service_packages = OrderServicePackage::getInquiryWithFinishTime($params,$order_service_status_params,$finish_time_params); if (empty($order_service_packages)){ return []; } diff --git a/app/Model/OrderServicePackage.php b/app/Model/OrderServicePackage.php index f2ca614..74dd73d 100644 --- a/app/Model/OrderServicePackage.php +++ b/app/Model/OrderServicePackage.php @@ -172,12 +172,14 @@ class OrderServicePackage extends Model /** * 获取某一时间段服务包订单-结束时间 * @param array $params + * @param array $order_service_status_params * @param array $finish_time_params 结束时间区间 * @return Collection|array */ - public static function getInquiryWithFinishTime(array $params, array $finish_time_params): Collection|array + public static function getInquiryWithFinishTime(array $params, array $order_service_status_params, array $finish_time_params): Collection|array { return self::where($params) + ->whereIn('order_service_status',$order_service_status_params) ->whereBetween('finish_time', $finish_time_params) ->orderBy('finish_time') ->get(); diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 7c5b867..554efb9 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -25,6 +25,7 @@ use App\Model\OrderServicePackageCase; use App\Model\OrderServicePackageDetail; use App\Model\OrderServicePackageInquiry; use App\Model\OrderServicePackageProduct; +use App\Model\OrderServicePackageRefund; use App\Model\PatientFamily; use App\Model\PatientFamilyHealth; use App\Model\PatientFamilyPersonal; @@ -1656,4 +1657,92 @@ class OrderServicePackageService extends BaseService return $order_service_package->toArray(); } + + + /** + * 获取服务包退款金额 + * @param string|int $order_service_no + * @return string|int + */ + public function getServicePackageRefundTotal(string|int $order_service_no): string|int + { + // 获取退款数据 + $refund_total = 0; + + $params = array(); + $params['order_service_no'] = $order_service_no; + $order_service_package_refunds = OrderServicePackageRefund::getList($params); + if (!empty($order_service_package_refunds)) { + foreach ($order_service_package_refunds as $order_service_package_refund) { + $refund_total = bcadd( + (string)$refund_total, + (string)$order_service_package_refund['refund_total'], + 2 + ); + } + } + + return $refund_total; + } + + /** + * 获取服务包订单中医生可分成的问诊金额 + * @param string|int $order_service_no + * @param array|object $order_service_package + * @param array|object $order_service_package_detail + * @return string + */ + public function getServicePackageDoctorInquiryAmountTotal(string|int $order_service_no,array|object $order_service_package,array|object $order_service_package_detail): string + { + // 获取服务包退款金额 + $refund_total = $this->getServicePackageRefundTotal($order_service_no); + + if ($order_service_package['order_service_type'] == 1){ + // 健康包 + // 实际问诊数量 + $inquiry_count = 0; + + // 获取健康包关联问诊订单 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_inquirys = OrderServicePackageInquiry::getList($params); + foreach ($order_service_package_inquirys as $order_service_package_inquiry){ + // 获取订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_service_package_inquiry['order_inquiry_id']; + $order_inquiry = OrderInquiry::getOne($params); + if (!empty($order_inquiry)){ + if (in_array($order_inquiry['inquiry_status'],[4,5,6])){ + $inquiry_count = $inquiry_count + 1; + } + } + } + + $amount_total = bcmul( + (string)$inquiry_count, + bcmul( + (string)$order_service_package_detail['single_inquiry_price'], + "0.75", + 3), + 3 + ); + }else{ + // 随访包 + $amount_total = bcsub( + (string)$order_service_package['payment_amount_total'], + (string)$refund_total, + 3 + ); + } + + $amount_total = bcmul( + (string)$amount_total, + "0.75", + 8 + ); + return $amount_total; + } + + + } \ No newline at end of file From 4d4e6387c95654b70acd244351d36fd54ee6927d Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 14:22:15 +0800 Subject: [PATCH 253/274] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E9=87=91=E9=A2=9D=E4=BC=98=E6=83=A0=E5=8D=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index d5ea2ab..dcc9453 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -2276,9 +2276,6 @@ class PatientOrderService extends BaseService // 实际支付金额=商品总金额-优惠卷金额+运费金额 $payment_amount_total = bcadd(bcsub((string)$payment_amount_total, (string)$coupon_amount_total, 2), (string)$logistics_fee, 2); - // 药品优惠金额 - $discount_amount = $discount_amount + $coupon_amount_total; - // 获取收货地址 $params = array(); $params['user_id'] = $user_info['user_id']; From 57bb13148a94e81dd46e2f678b6d14e335ef220d Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 14:26:44 +0800 Subject: [PATCH 254/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E5=8D=B7=E9=80=80=E8=BF=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderService.php | 1 - app/Services/PatientOrderService.php | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index c24fff2..dd8522d 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -247,7 +247,6 @@ class OrderService extends BaseService $data['patient_id'] = $order['patient_id']; $data['order_no'] = $order['order_no']; $data['refund_no'] = $refund_no; - $data['inquiry_refund_no'] = $refund_no; $data['refund_id'] = $refund_id; $data['refund_status'] = $refund_status; $data['refund_total'] = $order['payment_amount_total']; diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index dcc9453..ab97418 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -397,7 +397,7 @@ class PatientOrderService extends BaseService $redis->del($redis_key); Db::commit(); - } catch (\Exception $e) { + } catch (\Throwable $e) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); } @@ -417,7 +417,7 @@ class PatientOrderService extends BaseService $MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['inquiry_no']); $MessagePush->patientCancelInquiryToDoctor(); } - } catch (\Exception $e) { + } catch (\Throwable $e) { return success(); } From f1555f5c8e1ca3d0071865f6c421c9df62fd0824 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 14:41:45 +0800 Subject: [PATCH 255/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=8F=AF=E6=8F=90=E7=8E=B0=E9=87=91=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/Order.php | 2 -- app/Services/OrderService.php | 31 +++++++++----------- app/Services/OrderServicePackageService.php | 32 ++------------------- 3 files changed, 16 insertions(+), 49 deletions(-) diff --git a/app/Model/Order.php b/app/Model/Order.php index 54e29e0..b3ba953 100644 --- a/app/Model/Order.php +++ b/app/Model/Order.php @@ -289,7 +289,6 @@ class Order extends Model ->whereRaw('gdxz_order.order_id = gdxz_order_service_package.order_id') ->whereIn('refund_status', [0,3]) ->where('pay_status', 2) - ->where('start_time', 2) ->whereIn('order_service_status', [4,5]) ->WhereExists(function ($subQuery){ $subQuery->from("order_service_package_inquiry") @@ -341,7 +340,6 @@ class Order extends Model ->whereRaw('gdxz_order.order_id = gdxz_order_service_package.order_id') ->whereIn('refund_status', [0,3]) ->where('pay_status', 2) - ->where('start_time', 2) ->whereIn('order_service_status', [4,5]) ->WhereExists(function ($subQuery){ $subQuery->from("order_service_package_inquiry") diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index dd8522d..b7d1060 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -1093,7 +1093,7 @@ class OrderService extends BaseService // 可提现金额 $expected_amount_total = 0; - // 计算可提现金额 + // 问诊订单 if ($order['order_type'] == 1){ $expected_amount_total = bcmul( bcsub( @@ -1106,25 +1106,22 @@ class OrderService extends BaseService ); } + // 服务包订单 if ($order['order_type'] == 4 || $order['order_type'] == 5){ - // 获取订单详情数据 + // 获取订单数据 $params = array(); $params['order_service_no'] = $order['order_no']; - $order_service_package_detail = OrderServicePackageDetail::getOne($params); - if (!empty($order_service_package_detail)){ - $expected_amount_total = bcmul( // 可提现费用 - bcsub( // 退款费用 - bcmul( // 问诊费用 - (string)$order_service_package_detail['service_count'], - (string)$order_service_package_detail['single_inquiry_price'], - 3 - ), - (string)$refund_total, - 3 - ), - "0.75", - 2 - ); + $order_service_package = OrderServicePackage::getOne($params); + if (!empty($order_service_package)){ + // 获取订单详情数据 + $params = array(); + $params['order_service_no'] = $order['order_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (!empty($order_service_package_detail)){ + // 获取服务包订单中医生可分成的问诊金额 + $OrderServicePackageService = new OrderServicePackageService(); + $expected_amount_total = $OrderServicePackageService->getServicePackageDoctorInquiryAmountTotal($order_service_package['order_service_no'],$order_service_package,$order_service_package_detail); + } } } diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 554efb9..2aa37bf 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1658,33 +1658,6 @@ class OrderServicePackageService extends BaseService return $order_service_package->toArray(); } - - /** - * 获取服务包退款金额 - * @param string|int $order_service_no - * @return string|int - */ - public function getServicePackageRefundTotal(string|int $order_service_no): string|int - { - // 获取退款数据 - $refund_total = 0; - - $params = array(); - $params['order_service_no'] = $order_service_no; - $order_service_package_refunds = OrderServicePackageRefund::getList($params); - if (!empty($order_service_package_refunds)) { - foreach ($order_service_package_refunds as $order_service_package_refund) { - $refund_total = bcadd( - (string)$refund_total, - (string)$order_service_package_refund['refund_total'], - 2 - ); - } - } - - return $refund_total; - } - /** * 获取服务包订单中医生可分成的问诊金额 * @param string|int $order_service_no @@ -1695,7 +1668,8 @@ class OrderServicePackageService extends BaseService public function getServicePackageDoctorInquiryAmountTotal(string|int $order_service_no,array|object $order_service_package,array|object $order_service_package_detail): string { // 获取服务包退款金额 - $refund_total = $this->getServicePackageRefundTotal($order_service_no); + $OrderService = new OrderService(); + $refund_total = $OrderService->getOrderRefundAmount($order_service_no); if ($order_service_package['order_service_type'] == 1){ // 健康包 @@ -1743,6 +1717,4 @@ class OrderServicePackageService extends BaseService return $amount_total; } - - } \ No newline at end of file From 416651ab1138d5fa83f5331e39d97dbadb042703 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 14:46:07 +0800 Subject: [PATCH 256/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=8F=90=E7=8E=B0=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorAccountService.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index 500256f..7f54f16 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -306,7 +306,7 @@ class DoctorAccountService extends BaseService $amount_total = floor($doctor_account['balance_account'] * 100) / 100; } - // 获取可提现订单列表 + /* // 获取可提现订单列表 $orders = Order:: getDoctorWithdrawalOrderList($params, $user_doctor['is_platform_deep_cooperation'], ['*']); if (empty($orders)){ // 无订单,账户余额强制赋0; @@ -339,7 +339,7 @@ class DoctorAccountService extends BaseService $diff_amount_total = abs($amount_total - $expected_amount_total); if ($diff_amount_total >= 1){ return fail(HttpEnumCode::HTTP_ERROR, "提现金额错误"); - } + }*/ // 计算医生个人所得税 $income_tax = $this->computeIndividualIncomeTax($amount_total); @@ -353,7 +353,6 @@ class DoctorAccountService extends BaseService $result['amount_total'] = $amount_total; // 账户余额 $result['withdrawal_amount'] = $withdrawal_amount; // 提现金额 $result['income_tax'] = $income_tax; // 个人所得税 - $result['order_nos'] = $order_nos; // 订单号 return success($result); } From 324ac2105df7a983e7093c6564b71e78b4e87efd Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 14:55:36 +0800 Subject: [PATCH 257/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E5=8D=B7=E9=80=80=E8=BF=98=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index b7d1060..119ce32 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -234,7 +234,7 @@ class OrderService extends BaseService $userCouponService->returnUserCoupon($order_coupon['user_coupon_id']); // 发送站内消息-优惠卷退还 - $MessagePush = new MessagePush($order_coupon['user_id']); + $MessagePush = new MessagePush($order['user_id']); $MessagePush->patientRefundCoupon($order_coupon['coupon_name']); } } From ceb65ad9890c2e4841733a77516854a469793b8c Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 15:22:27 +0800 Subject: [PATCH 258/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=88=91=E7=9A=84=E8=B4=A6=E6=88=B7=E6=9C=88=E8=B4=A6=E5=8D=95?= =?UTF-8?q?=E6=98=8E=E7=BB=86=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorAccountService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index 7f54f16..6868498 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -200,7 +200,7 @@ class DoctorAccountService extends BaseService } elseif ($result['OrderServicePackage']['order_service_status'] == 4) { $result['entry_status'] = 2;// 入账成功 } elseif ($result['OrderServicePackage']['order_service_status'] == 5) { - if (($result['OrderServicePackage']['amount_total'] - $result['refund_total']) > 0) { + if ($result['expected_amount_total'] > 0) { $result['entry_status'] = 2;// 入账成功 } else { $result['entry_status'] = 3;// 入账失败 From 0693adea49d30f93b0e4855b0e1d2664da182f26 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 15:33:44 +0800 Subject: [PATCH 259/274] =?UTF-8?q?=E5=A4=84=E7=90=86=E5=85=A5=E8=B4=A6?= =?UTF-8?q?=E9=87=91=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OrderServicePackageService.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 2aa37bf..4d3239d 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1694,10 +1694,7 @@ class OrderServicePackageService extends BaseService $amount_total = bcmul( (string)$inquiry_count, - bcmul( - (string)$order_service_package_detail['single_inquiry_price'], - "0.75", - 3), + (string)$order_service_package_detail['single_inquiry_price'], 3 ); }else{ From 7a627b761e08ed6fa7d2a82b743aacae716cc059 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 15:51:03 +0800 Subject: [PATCH 260/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=81=A5=E5=BA=B7?= =?UTF-8?q?=E5=8C=85=E8=AE=A2=E5=8D=95=E5=8F=91=E6=94=BE=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E5=8D=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/UserDoctorService.php | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index 1636fa2..8e3d7a4 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -1945,19 +1945,15 @@ class UserDoctorService extends BaseService // 健康包订单发放优惠卷 if ($order_inquiry['inquiry_mode'] == 8){ // 检测问诊次数 - // 检测逻辑:支付成功的回调中,记录服务包关联的订单id,此方法为医生接诊,所以如果是首次,应该只会存在一个关联订单id - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $order_service_package_inquiry = OrderServicePackageInquiry::getList($params); - if (!empty($order_service_package_inquiry)){ - if (count($order_service_package_inquiry) <= 1){ - // 发放优惠卷 - $CouponService = new CouponService(); - $res = $CouponService->GrantBuyOrderServicePackageCoupon($order_inquiry['user_id']); - if (!$res) { - Db::rollBack(); - return fail(HttpEnumCode::HTTP_ERROR, "接诊失败"); - } + $OrderServicePackageService = new OrderServicePackageService(); + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_package_inquiry['order_service_no']); + if ($is_first){ + // 发放优惠卷 + $CouponService = new CouponService(); + $res = $CouponService->GrantBuyOrderServicePackageCoupon($order_inquiry['user_id']); + if (!$res) { + Db::rollBack(); + return fail(HttpEnumCode::HTTP_ERROR, "接诊失败"); } } } From a1fc3c3015158a60b5871dece0bc572c12cceac3 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 16:23:23 +0800 Subject: [PATCH 261/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8C=85=E8=AE=A2=E5=8D=95=E4=B8=AD=E5=8C=BB?= =?UTF-8?q?=E7=94=9F=E5=8F=AF=E5=88=86=E6=88=90=E7=9A=84=E9=97=AE=E8=AF=8A?= =?UTF-8?q?=E9=87=91=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...pleteServicePackageDelayDirectConsumer.php | 24 ++++++++++--------- app/Model/OrderServicePackageRefund.php | 10 ++++---- app/Services/DoctorAccountService.php | 4 ++-- app/Services/OrderServicePackageService.php | 6 +++++ 4 files changed, 27 insertions(+), 17 deletions(-) diff --git a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php index 32d20dd..90e527c 100644 --- a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php @@ -128,18 +128,20 @@ class AutoCompleteServicePackageDelayDirectConsumer extends ConsumerMessage $OrderServicePackageService = new OrderServicePackageService(); $amount_total = $OrderServicePackageService->getServicePackageDoctorInquiryAmountTotal($order_service_package['order_service_no'],$order_service_package,$order_service_package_detail); - // 处理医生账户总表 - $res = $this->handleDoctorAccount($amount_total,$order_service_package['doctor_id']); - if (!$res) { - Db::rollBack(); - return Result::REQUEUE; - } + if ($amount_total > 0){ + // 处理医生账户总表 + $res = $this->handleDoctorAccount($amount_total,$order_service_package['doctor_id']); + if (!$res) { + Db::rollBack(); + return Result::REQUEUE; + } - // 处理医生账户表-日 - $res = $this->handleDoctorAccountDay($amount_total,$order_service_package['doctor_id'],$order_service_package['start_time']); - if (!$res) { - Db::rollBack(); - return Result::REQUEUE; + // 处理医生账户表-日 + $res = $this->handleDoctorAccountDay($amount_total,$order_service_package['doctor_id'],$order_service_package['start_time']); + if (!$res) { + Db::rollBack(); + return Result::REQUEUE; + } } Db::commit(); diff --git a/app/Model/OrderServicePackageRefund.php b/app/Model/OrderServicePackageRefund.php index 54a785c..9c2f709 100644 --- a/app/Model/OrderServicePackageRefund.php +++ b/app/Model/OrderServicePackageRefund.php @@ -17,12 +17,14 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property string $order_service_no 系统订单编号 * @property string $service_refund_no 系统退款编号 * @property string $refund_id 第三方退款单号 - * @property int $refund_status 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + * @property int $refund_status 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常 7:部分退款) * @property string $refund_total 退款金额 + * @property string $product_refund_total 药品退款金额 + * @property string $inquiry_refund_total 问诊退款金额 * @property string $refund_reason 退款原因 * @property string $success_time 退款成功时间 - * @property Carbon $created_at 创建时间 - * @property Carbon $updated_at 修改时间 + * @property \Carbon\Carbon $created_at 创建时间 + * @property \Carbon\Carbon $updated_at 修改时间 */ class OrderServicePackageRefund extends Model { @@ -36,7 +38,7 @@ class OrderServicePackageRefund extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['service_refund_id', 'patient_id', 'order_service_id', 'order_service_no', 'service_refund_no', 'refund_id', 'refund_status', 'refund_total', 'refund_reason', 'success_time', 'created_at', 'updated_at']; + protected array $fillable = ['service_refund_id', 'patient_id', 'order_service_id', 'order_service_no', 'service_refund_no', 'refund_id', 'refund_status', 'refund_total', 'product_refund_total', 'inquiry_refund_total', 'refund_reason', 'success_time', 'created_at', 'updated_at']; protected string $primaryKey = "service_refund_id"; diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index 6868498..f1cb7c6 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -200,9 +200,9 @@ class DoctorAccountService extends BaseService } elseif ($result['OrderServicePackage']['order_service_status'] == 4) { $result['entry_status'] = 2;// 入账成功 } elseif ($result['OrderServicePackage']['order_service_status'] == 5) { - if ($result['expected_amount_total'] > 0) { + if (($result['payment_amount_total'] - $result['refund_total']) > 0){ $result['entry_status'] = 2;// 入账成功 - } else { + }else{ $result['entry_status'] = 3;// 入账失败 } } else { diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 4d3239d..96ad26d 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1671,6 +1671,12 @@ class OrderServicePackageService extends BaseService $OrderService = new OrderService(); $refund_total = $OrderService->getOrderRefundAmount($order_service_no); + // 检测订单是否全部退款 + if (($order_service_package['payment_amount_total'] - $refund_total) <= 0){ + // 订单已全部退款,此处可分成问诊金额直接为0 + return 0; + } + if ($order_service_package['order_service_type'] == 1){ // 健康包 // 实际问诊数量 From 0a169c4ce1fffa9ed5318b8ffde0d8490e15c987 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 17:16:01 +0800 Subject: [PATCH 262/274] 1 --- app/Services/PatientOrderService.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index ab97418..2ebd71f 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -791,7 +791,8 @@ class PatientOrderService extends BaseService $result = array(); $result['amount_total'] = 0; // 订单总额 $result['payment_amount_total'] = 0; // 实际订单金额 - $result['coupon_amount_total'] = 0; // 优惠金额 + $result['coupon_amount_total'] = 0; // 优惠卷金额 + $result['discount_amount'] = 0; // 优惠金额 $result['order_no'] = $order_no; // 订单编号 $result['order_id'] = ""; // 订单主键id(问诊订单:order_inquiry_id 药品订单:order_product_id) $result['created_at'] = ""; // 创建时间 @@ -800,6 +801,7 @@ class PatientOrderService extends BaseService $result['pay_config'] = []; // 小程序支付配置 $result['cannot_use_coupon_reason'] = ""; // 不可使用优惠卷原因 + // 问诊订单 if ($order_type == 1) { $params = array(); @@ -852,13 +854,13 @@ class PatientOrderService extends BaseService // 获取订单金额 $result['amount_total'] = $order_inquiry['amount_total']; // 订单金额 $result['payment_amount_total'] = $order_inquiry['payment_amount_total']; // 实际订单金额 - $result['coupon_amount_total'] = $order_inquiry['coupon_amount_total'];; // 优惠金额 + $result['coupon_amount_total'] = $order_inquiry['coupon_amount_total']; // 优惠卷金额 + $result['discount_amount'] = 0; // 优惠金额 if ($order_inquiry['payment_amount_total'] > 0) { // 发起支付 $WechatPay = new WechatPay(1, 1); - // 获取预支付交易会话标识 $prepay = $WechatPay->getJsapiPrepayId($order_no, (int)round($order_inquiry['payment_amount_total'] * 100), $user_info['open_id'], "问诊服务"); if (empty($prepay)) { @@ -921,6 +923,7 @@ class PatientOrderService extends BaseService $result['amount_total'] = $order_product['amount_total']; // 订单金额 $result['payment_amount_total'] = $order_product['payment_amount_total']; // 实际订单金额 $result['coupon_amount_total'] = $order_product['coupon_amount_total']; // 优惠金额 + $result['discount_amount'] = $order_product['amount_total'] - $order_product['coupon_amount_total'] - $order_product['payment_amount_total']; // 优惠金额 // 获取优惠卷不可用原因。存在优惠卷,但是未使用-暂时废弃 /*if ($order_product['coupon_amount_total'] == 0){ @@ -1033,6 +1036,7 @@ class PatientOrderService extends BaseService $result['amount_total'] = $order_detection['amount_total']; // 订单金额 $result['payment_amount_total'] = $order_detection['amount_total'] - 0; // 实际订单金额 $result['coupon_amount_total'] = 0; // 优惠金额 + $result['discount_amount'] = 0; if ($order_detection['payment_amount_total'] > 0) { // 发起支付 @@ -1047,7 +1051,6 @@ class PatientOrderService extends BaseService // 获取小程序支付配置 $pay_config = $WechatPay->getAppletsPayConfig($prepay['prepay_id']); } - } // 服务包订单 @@ -1110,6 +1113,7 @@ class PatientOrderService extends BaseService $result['amount_total'] = $order_service_package['amount_total']; // 订单金额 $result['payment_amount_total'] = $order_service_package['amount_total'] - 0; // 实际订单金额 $result['coupon_amount_total'] = 0; // 优惠金额 + $result['discount_amount'] = 0; // 检测是否存在同类型未完成的问诊订单 $PatientOrderService = new PatientOrderService(); From af741e78b4ae3e56160da453d44aeea7b4c256bb Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 17:46:22 +0800 Subject: [PATCH 263/274] 3 --- app/Services/UserDoctorService.php | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index 8e3d7a4..8353d02 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -2463,16 +2463,14 @@ class UserDoctorService extends BaseService $params = array(); $params['doctor_id'] = $doctor_id; $doctor_config_difficult_consultation = DoctorConfigDifficultConsultation::getOne($params); - if (empty($doctor_config_difficult_consultation)){ - return fail(); + if (!empty($doctor_config_difficult_consultation)){ + $value['times_number'] = $doctor_config_difficult_consultation['service_rounds']; // 服务回合数(0表示不限次) + $value['duration'] = $doctor_config_difficult_consultation['service_period']; // 服务周期(天,不存在0的情况) + $value['service_content'] = $doctor_config_difficult_consultation['service_content'];// 服务内容 + $value['service_process'] = $doctor_config_difficult_consultation['service_process'];// 服务流程 + + unset($doctor_config_difficult_consultation); } - - $value['times_number'] = $doctor_config_difficult_consultation['service_rounds']; // 服务回合数(0表示不限次) - $value['duration'] = $doctor_config_difficult_consultation['service_period']; // 服务周期(天,不存在0的情况) - $value['service_content'] = $doctor_config_difficult_consultation['service_content'];// 服务内容 - $value['service_process'] = $doctor_config_difficult_consultation['service_process'];// 服务流程 - - unset($doctor_config_difficult_consultation); }else{ // 获取系统问诊配置 $fields = [ From 1882a0f3daa09a3ca982eb7d4a240944b1084da9 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 18:09:30 +0800 Subject: [PATCH 264/274] 3 --- app/Services/PatientOrderService.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 2ebd71f..10cdc0f 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -3072,6 +3072,11 @@ class PatientOrderService extends BaseService unset($hospital); unset($user_doctor); } + + if (in_array($item['order_service_status'],[3,4,5])){ + $item['start_time'] = date('Y-m-d H:i',strtotime($item['start_time'])); + $item['finish_time'] = date('Y-m-d H:i',strtotime($item['finish_time'])); + } } return success($order_service_package); From 5f123fdac7e5e24565d5006d4b5c56570954592c Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 18:21:16 +0800 Subject: [PATCH 265/274] 4 --- app/Services/DoctorInquiryService.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Services/DoctorInquiryService.php b/app/Services/DoctorInquiryService.php index eb885e9..bd7e679 100644 --- a/app/Services/DoctorInquiryService.php +++ b/app/Services/DoctorInquiryService.php @@ -897,6 +897,7 @@ class DoctorInquiryService extends BaseService $params['follow_package_id'] = $doctor_config_follow_package['follow_package_id']; $doctor_config_follow_package_item = DoctorConfigFollowPackageItem::getList($params); if (!empty($doctor_config_follow_package_item)) { + $doctor_config_follow_package_item['monthly_frequency'] = $doctor_config_follow_package['monthly_frequency']; $result = $doctor_config_follow_package_item->toArray(); } } From 2d74d0c64d1a9a968a3376561f1babd7fb3e46d4 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 18:25:51 +0800 Subject: [PATCH 266/274] 445 --- app/Services/DoctorInquiryService.php | 11 +++++++---- app/Services/ImService.php | 2 +- app/Services/MessagePush.php | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/Services/DoctorInquiryService.php b/app/Services/DoctorInquiryService.php index bd7e679..e32911d 100644 --- a/app/Services/DoctorInquiryService.php +++ b/app/Services/DoctorInquiryService.php @@ -895,10 +895,13 @@ class DoctorInquiryService extends BaseService if (!empty($doctor_config_follow_package)) { $params = array(); $params['follow_package_id'] = $doctor_config_follow_package['follow_package_id']; - $doctor_config_follow_package_item = DoctorConfigFollowPackageItem::getList($params); - if (!empty($doctor_config_follow_package_item)) { - $doctor_config_follow_package_item['monthly_frequency'] = $doctor_config_follow_package['monthly_frequency']; - $result = $doctor_config_follow_package_item->toArray(); + $doctor_config_follow_package_items = DoctorConfigFollowPackageItem::getList($params); + if (!empty($doctor_config_follow_package_items)) { + foreach ($doctor_config_follow_package_items as &$doctor_config_follow_package_item){ + $doctor_config_follow_package_item['monthly_frequency'] = $doctor_config_follow_package['monthly_frequency']; + $result[] = $doctor_config_follow_package_item->toArray(); + } + } } diff --git a/app/Services/ImService.php b/app/Services/ImService.php index e02232a..4cfdae0 100644 --- a/app/Services/ImService.php +++ b/app/Services/ImService.php @@ -461,7 +461,7 @@ class ImService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { $OrderServicePackageService = new OrderServicePackageService(); $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$order_service_package['user_id'], $order_service_package['doctor_id']); - $remaining_inquiry_count = $order_service_package_detail['monthly_frequencys'] - $month_inquiry_count; + $remaining_inquiry_count = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; if ($remaining_inquiry_count < 0){ $remaining_inquiry_count = 0; } diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index 3c2a27d..b168a25 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -3282,7 +3282,7 @@ class MessagePush extends BaseService $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($this->order_service_package['pay_time'],$this->order_service_package['order_service_type'],$this->order_service_package['user_id'], $this->order_service_package['doctor_id']); // 获取服务包当月剩余问诊次数 - $remaining_inquiry_count = $order_service_package_detail['monthly_frequencys'] - $month_inquiry_count; + $remaining_inquiry_count = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; if ($remaining_inquiry_count < 0){ $remaining_inquiry_count = 0; } From 7409abe741cc85f1b098b7899de66896f499b44a Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 8 May 2024 18:39:07 +0800 Subject: [PATCH 267/274] 43r2342 --- app/Model/DoctorConfigFollowPackageItem.php | 11 +++++++++++ app/Services/DoctorInquiryService.php | 3 +-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app/Model/DoctorConfigFollowPackageItem.php b/app/Model/DoctorConfigFollowPackageItem.php index 78015ef..ada1236 100644 --- a/app/Model/DoctorConfigFollowPackageItem.php +++ b/app/Model/DoctorConfigFollowPackageItem.php @@ -75,4 +75,15 @@ class DoctorConfigFollowPackageItem extends Model { return self::where($params)->delete(); } + + /** + * 多条 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getOrderServicePeriodList(array $params, array $fields = ['*']): Collection|array + { + return self::where($params)->orderBy('service_period')->get($fields); + } } diff --git a/app/Services/DoctorInquiryService.php b/app/Services/DoctorInquiryService.php index e32911d..f109ae7 100644 --- a/app/Services/DoctorInquiryService.php +++ b/app/Services/DoctorInquiryService.php @@ -895,13 +895,12 @@ class DoctorInquiryService extends BaseService if (!empty($doctor_config_follow_package)) { $params = array(); $params['follow_package_id'] = $doctor_config_follow_package['follow_package_id']; - $doctor_config_follow_package_items = DoctorConfigFollowPackageItem::getList($params); + $doctor_config_follow_package_items = DoctorConfigFollowPackageItem::getOrderServicePeriodList($params); if (!empty($doctor_config_follow_package_items)) { foreach ($doctor_config_follow_package_items as &$doctor_config_follow_package_item){ $doctor_config_follow_package_item['monthly_frequency'] = $doctor_config_follow_package['monthly_frequency']; $result[] = $doctor_config_follow_package_item->toArray(); } - } } From 726cb70bfcee1201f0893a58398faa85a214016a Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 9 May 2024 09:18:09 +0800 Subject: [PATCH 268/274] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E5=BD=93=E6=9C=88=E5=B7=B2=E9=97=AE=E8=AF=8A=E6=AC=A1?= =?UTF-8?q?=E6=95=B0=E8=8E=B7=E5=8F=96=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/ImService.php | 13 +++++-- app/Services/InquiryService.php | 10 +++++- app/Services/MessagePush.php | 11 ++++-- app/Services/OrderServicePackageService.php | 40 ++++++++++++++++++--- app/Services/PatientOrderService.php | 8 ++++- 5 files changed, 71 insertions(+), 11 deletions(-) diff --git a/app/Services/ImService.php b/app/Services/ImService.php index 4cfdae0..2808c0a 100644 --- a/app/Services/ImService.php +++ b/app/Services/ImService.php @@ -457,10 +457,18 @@ class ImService extends BaseService $start_time = date('Y年m月d日 H时i分',strtotime($order_service_package['start_time'])); $finish_time = date('Y年m月d日 H时i分',strtotime($order_service_package['finish_time'])); + // 检测问诊是否服务包首次问诊 + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); + // 获取服务包当月剩余问诊次数 if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { - $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$order_service_package['user_id'], $order_service_package['doctor_id']); + if ($is_first){ + // 首次必定只问诊了一次 + $month_inquiry_count = 1; + }else{ + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$order_service_package['user_id'], $order_service_package['doctor_id']); + } + $remaining_inquiry_count = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; if ($remaining_inquiry_count < 0){ $remaining_inquiry_count = 0; @@ -470,7 +478,6 @@ class ImService extends BaseService } // 检测问诊是否服务包首次问诊 - $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); if ($is_first){ $message_content_data['desc'] = "医生已接诊,{$order_type}服务开始,服务周期为:{$start_time}~{$finish_time},线上咨询不能代表面诊,医生的回复仅为建议。"; }else{ diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index c6f1ffc..3e3f7d0 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -1591,7 +1591,15 @@ class InquiryService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { // 获取服务包当月已问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + + // 检测问诊是否服务包首次问诊 + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_package['order_service_no']); + if ($is_first){ + // 首次必定只问诊了一次 + $month_inquiry_count = 1; + }else{ + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + } } // 处理剩余服务天数 diff --git a/app/Services/MessagePush.php b/app/Services/MessagePush.php index b168a25..07d0202 100644 --- a/app/Services/MessagePush.php +++ b/app/Services/MessagePush.php @@ -3278,8 +3278,15 @@ class MessagePush extends BaseService $OrderServicePackageService = new OrderServicePackageService(); if ($order_service_package_detail['monthly_frequency'] != 0) { - // 获取服务包当月已问诊次数 - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($this->order_service_package['pay_time'],$this->order_service_package['order_service_type'],$this->order_service_package['user_id'], $this->order_service_package['doctor_id']); + // 检测问诊是否服务包首次问诊 + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($this->order_service_package['order_service_no']); + if ($is_first){ + // 首次必定只问诊了一次 + $month_inquiry_count = 1; + }else{ + // 获取服务包当月已问诊次数 + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($this->order_service_package['pay_time'],$this->order_service_package['order_service_type'],$this->order_service_package['user_id'], $this->order_service_package['doctor_id']); + } // 获取服务包当月剩余问诊次数 $remaining_inquiry_count = $order_service_package_detail['monthly_frequency'] - $month_inquiry_count; diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 96ad26d..d0d7666 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -174,7 +174,15 @@ class OrderServicePackageService extends BaseService // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 if ($order_service_package_detail['monthly_frequency'] != 0) { // 获取服务包当月已问诊次数 - $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['pay_time'],$service_type,$user_info['user_id'], $doctor_id); + // 检测问诊是否服务包首次问诊 + $OrderServicePackageService = new OrderServicePackageService(); + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_package['order_service_no']); + if ($is_first){ + // 首次必定只问诊了一次 + $month_inquiry_count = 1; + }else{ + $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['pay_time'],$service_type,$user_info['user_id'], $doctor_id); + } if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']) { // 超出当月问诊次数 @@ -670,7 +678,14 @@ class OrderServicePackageService extends BaseService // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 if ($order_service_package_detail['monthly_frequency'] != 0) { // 获取服务包当月已问诊次数 - $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$user_info['user_id'], $order_service_package['doctor_id']); + $OrderServicePackageService = new OrderServicePackageService(); + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_package['order_service_no']); + if ($is_first){ + // 首次必定只问诊了一次 + $month_inquiry_count = 1; + }else{ + $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$user_info['user_id'], $order_service_package['doctor_id']); + } if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']) { return fail(HttpEnumCode::HTTP_ERROR, "超出服务包所包含的当月问诊次数"); @@ -1116,7 +1131,14 @@ class OrderServicePackageService extends BaseService // 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间 if ($order_service_package_detail['monthly_frequency'] != 0) { // 获取服务包当月已问诊次数 - $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$user_info['user_id'], $order_service_package['doctor_id']); + $OrderServicePackageService = new OrderServicePackageService(); + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_package['order_service_no']); + if ($is_first){ + // 首次必定只问诊了一次 + $month_inquiry_count = 1; + }else{ + $month_inquiry_count = $this->getCurrentMonthInquiryCount($order_service_package['pay_time'],$order_service_package['order_service_type'],$user_info['user_id'], $order_service_package['doctor_id']); + } if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']) { // 超出当月问诊次数 @@ -1559,13 +1581,23 @@ class OrderServicePackageService extends BaseService return []; } + + // 每月问诊次数(0表示不限次) $monthly_frequency = $order_service_package_detail['monthly_frequency']; // 获取服务包当月已问诊次数 $month_inquiry_count = 0; if ($order_service_package_detail['monthly_frequency'] != 0) { - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + // 检测问诊是否服务包首次问诊 + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_no); + + if ($is_first){ + // 首次必定只问诊了一次 + $month_inquiry_count = 1; + }else{ + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + } } // 服务包当月剩余问诊次数 diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 10cdc0f..6a7011a 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -3317,7 +3317,13 @@ class PatientOrderService extends BaseService $result['order_service_package']['current_month_finish_date'] = $current_month_date['current_month_finish_date']; // 获取服务包当月已问诊次数 - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_package['order_service_no']); + if ($is_first){ + // 首次必定只问诊了一次 + $month_inquiry_count = 1; + }else{ + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['pay_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); + } // 获取服务包当月剩余问诊次数 if ($order_service_package_detail['monthly_frequency'] != 0) { From b0e8bfc8dfb6a88edd8ad1567d456aa21b16c103 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 9 May 2024 09:32:37 +0800 Subject: [PATCH 269/274] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8C=85=E5=BD=93=E6=9C=88=E5=B7=B2=E9=97=AE=E8=AF=8A=E6=AC=A1?= =?UTF-8?q?=E6=95=B0=E8=8E=B7=E5=8F=96=E6=96=B9=E5=BC=8F1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/PatientOrderService.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 6a7011a..67dcfd6 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -3255,6 +3255,7 @@ class PatientOrderService extends BaseService "doctor_id", "user_id", "pay_time", + "order_service_no", ]; $params = array(); From 6b5aa36566e1882b01a9f89b8a797338692e61e6 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 9 May 2024 11:01:29 +0800 Subject: [PATCH 270/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E8=AF=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php | 6 +++--- app/Services/InquiryService.php | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php index eadebec..8370632 100644 --- a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php @@ -166,7 +166,7 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage $order_data = array(); $order_data['cancel_status'] = 1; $order_data['cancel_time'] = date("Y-m-d H:i:s", time()); - $order_data['cancel_remarks'] = "医生未接受服务"; + $order_data['cancel_remarks'] = "医生72小时内未接受服务,已进行退款处理,请注意查看账户信息。"; $order_data['updated_at'] = date("Y-m-d H:i:s", time()); $params = array(); @@ -177,7 +177,7 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage $order_service_package_data = array(); $order_service_package_data['order_service_status'] = 5; $order_service_package_data['cancel_time'] = date("Y-m-d H:i:s", time()); - $order_service_package_data['cancel_remarks'] = "医生未接受服务"; // 取消订单备注 + $order_service_package_data['cancel_remarks'] = "医生未接诊"; // 取消订单备注 $order_service_package_data['updated_at'] = date("Y-m-d H:i:s", time()); $params = array(); @@ -186,7 +186,7 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage // 如果是服务包的首单问诊订单即执行服务包退款 $OrderService = new OrderService(); - $OrderService->orderRefund($order_service_no, "医生未接受服务"); + $OrderService->orderRefund($order_service_no, "医生72小时内未接受服务,已进行退款处理,请注意查看账户信息。"); } } } diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 3e3f7d0..14379bd 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -1591,7 +1591,6 @@ class InquiryService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { // 获取服务包当月已问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - // 检测问诊是否服务包首次问诊 $is_first = $OrderServicePackageService->isFirstInquiryServicePackage($order_service_package['order_service_no']); if ($is_first){ From 3357a4b95e80fda6e92e60efe4851a5ac74ab97a Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 9 May 2024 11:17:40 +0800 Subject: [PATCH 271/274] =?UTF-8?q?=E5=9C=A8=E6=9C=AA=E6=8E=A5=E8=AF=8A?= =?UTF-8?q?=E3=80=81=E5=8F=96=E6=B6=88=E6=94=AF=E4=BB=98=E3=80=81=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E8=AE=A2=E5=8D=95=E3=80=81=E8=87=AA=E5=8A=A8=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E6=94=AF=E4=BB=98=E5=A2=9E=E5=8A=A0=20=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E5=8E=9F=E5=9B=A0=E5=AD=97=E6=AE=B5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CancelUnInquiryOrdersDelayDirectConsumer.php | 1 + app/Model/OrderServicePackage.php | 9 +++++---- app/Services/OrderService.php | 1 + app/Services/OrderServicePackageService.php | 1 + 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php index 8370632..41733c6 100644 --- a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php @@ -166,6 +166,7 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage $order_data = array(); $order_data['cancel_status'] = 1; $order_data['cancel_time'] = date("Y-m-d H:i:s", time()); + $data['cancel_reason'] = 1; // 取消订单原因(1:医生未接受服务 2:主动取消 4:客服取消 5:支付超时) $order_data['cancel_remarks'] = "医生72小时内未接受服务,已进行退款处理,请注意查看账户信息。"; $order_data['updated_at'] = date("Y-m-d H:i:s", time()); diff --git a/app/Model/OrderServicePackage.php b/app/Model/OrderServicePackage.php index 74dd73d..a29cba4 100644 --- a/app/Model/OrderServicePackage.php +++ b/app/Model/OrderServicePackage.php @@ -22,7 +22,7 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $order_service_type 服务包类型(1:健康包 2:随访包) * @property int $order_service_status 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消) * @property int $is_delete 删除状态(0:否 1:是) - * @property int $refund_status 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常) + * @property int $refund_status 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常 7:部分退款) * @property int $pay_channel 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付) * @property int $pay_status 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) * @property string $order_service_no 系统订单编号 @@ -34,6 +34,7 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property string $start_time 开始服务时间 * @property string $finish_time 结束服务时间 * @property string $cancel_time 订单取消时间 + * @property int $cancel_reason 取消订单原因(1:医生未接受服务 2:主动取消 4:客服取消 5:支付超时) * @property string $cancel_remarks 取消订单备注 * @property int $add_finish_status 添加完成订单延迟队列状态(0:未添加 1:已添加 2:添加失败) * @property string $add_finish_time 添加完成订单延迟队列时间 @@ -42,8 +43,8 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property string $patient_name_mask 患者姓名-就诊人(掩码) * @property int $patient_sex 患者性别-就诊人(0:未知 1:男 2:女) * @property int $patient_age 患者年龄-就诊人 - * @property Carbon $created_at 创建时间 - * @property Carbon $updated_at 修改时间 + * @property \Carbon\Carbon $created_at 创建时间 + * @property \Carbon\Carbon $updated_at 修改时间 * @property-read OrderServicePackageCase|null $OrderServicePackageCase */ class OrderServicePackage extends Model @@ -58,7 +59,7 @@ class OrderServicePackage extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['order_service_id', 'order_id', 'user_id', 'patient_id', 'doctor_id', 'family_id', 'order_service_type', 'order_service_status', 'is_delete', 'refund_status', 'pay_channel', 'pay_status', 'order_service_no', 'escrow_trade_no', 'amount_total', 'coupon_amount_total', 'payment_amount_total', 'pay_time', 'start_time', 'finish_time', 'cancel_time', 'cancel_remarks', 'add_finish_status', 'add_finish_time', 'add_finish_fail_reason', 'patient_name', 'patient_name_mask', 'patient_sex', 'patient_age', 'created_at', 'updated_at']; + protected array $fillable = ['order_service_id', 'order_id', 'user_id', 'patient_id', 'doctor_id', 'family_id', 'order_service_type', 'order_service_status', 'is_delete', 'refund_status', 'pay_channel', 'pay_status', 'order_service_no', 'escrow_trade_no', 'amount_total', 'coupon_amount_total', 'payment_amount_total', 'pay_time', 'start_time', 'finish_time', 'cancel_time', 'cancel_reason', 'cancel_remarks', 'add_finish_status', 'add_finish_time', 'add_finish_fail_reason', 'patient_name', 'patient_name_mask', 'patient_sex', 'patient_age', 'created_at', 'updated_at']; protected string $primaryKey = "order_service_id"; diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 119ce32..02db7cf 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -971,6 +971,7 @@ class OrderService extends BaseService $data = array(); $data['order_service_status'] = 5; $data['cancel_time'] = date("Y-m-d H:i:s", time()); + $data['cancel_reason'] = 2; // 取消订单原因(1:医生未接受服务 2:主动取消 4:客服取消 5:支付超时) $data['cancel_remarks'] = "主动取消"; $data['updated_at'] = date("Y-m-d H:i:s", time()); diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index d0d7666..cf39244 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1228,6 +1228,7 @@ class OrderServicePackageService extends BaseService } $data['cancel_time'] = date("Y-m-d H:i:s", time()); + $data['cancel_reason'] = $cancel_reason; // 取消订单原因(1:医生未接受服务 2:主动取消 4:客服取消 5:支付超时) $data['cancel_remarks'] = $cancel_remarks; // 取消订单备注 $data['updated_at'] = date("Y-m-d H:i:s", time()); From a9dbb67a3677faa1eb72ee20ce51800976246e5e Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 9 May 2024 11:51:39 +0800 Subject: [PATCH 272/274] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/Order.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/Model/Order.php b/app/Model/Order.php index b3ba953..6bed845 100644 --- a/app/Model/Order.php +++ b/app/Model/Order.php @@ -158,7 +158,7 @@ class Order extends Model }); }); - $result = $query->paginate($per_page, $fields, "page", $page); + $result = $query->orderBy('created_at')->paginate($per_page, $fields, "page", $page); $data = array(); $data['current_page'] = $result->currentPage();// 当前页码 @@ -297,7 +297,8 @@ class Order extends Model }); }); - $result = $query->paginate($per_page, $fields, "page", $page); + $result = $query->orderBy('created_at') + ->paginate($per_page, $fields, "page", $page); $data = array(); $data['current_page'] = $result->currentPage();// 当前页码 @@ -348,6 +349,6 @@ class Order extends Model }); }); - return $query->get($fields); + return $query->orderBy('created_at')->get($fields); } } From a263e713403f55504e870c76a75fb5d2b1798c8b Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 9 May 2024 13:35:09 +0800 Subject: [PATCH 273/274] 1 --- .../Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php | 4 ++-- app/Services/OrderServicePackageService.php | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php index 41733c6..893ba4d 100644 --- a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php @@ -174,11 +174,11 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage $params['order_no'] = $order_service_no; Order::edit($params, $order_data); - // 取消问诊订单 + // 取消服务包订单 $order_service_package_data = array(); $order_service_package_data['order_service_status'] = 5; $order_service_package_data['cancel_time'] = date("Y-m-d H:i:s", time()); - $order_service_package_data['cancel_remarks'] = "医生未接诊"; // 取消订单备注 + $order_service_package_data['cancel_remarks'] = "医生72小时内未接受服务,已进行退款处理,请注意查看账户信息。"; // 取消订单备注 $order_service_package_data['updated_at'] = date("Y-m-d H:i:s", time()); $params = array(); diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index cf39244..9062272 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1582,8 +1582,6 @@ class OrderServicePackageService extends BaseService return []; } - - // 每月问诊次数(0表示不限次) $monthly_frequency = $order_service_package_detail['monthly_frequency']; From 9c88db6339373046ae3f5e79d2471a0e169c5a0d Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 9 May 2024 16:14:49 +0800 Subject: [PATCH 274/274] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E6=B3=A8=E9=87=8A?= =?UTF-8?q?=EF=BC=8C=E6=B3=A8=E9=87=8A=E6=8E=89=E6=A8=A1=E6=8B=9F=E9=80=80?= =?UTF-8?q?=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Command/MoveOrderCommand.php | 18 +++++++++--------- config/routes.php | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/Command/MoveOrderCommand.php b/app/Command/MoveOrderCommand.php index 7b8900e..51c89bf 100644 --- a/app/Command/MoveOrderCommand.php +++ b/app/Command/MoveOrderCommand.php @@ -43,31 +43,31 @@ class MoveOrderCommand extends HyperfCommand $this->line("开始"); // 处理问诊订单 -// $this->handleOrderInquiry(); + $this->handleOrderInquiry(); // 处理问诊订单退款 -// $this->handleOrderInquiryRefund(); + $this->handleOrderInquiryRefund(); // 处理问诊订单优惠卷 -// $this->handleOrderInquiryCoupon(); + $this->handleOrderInquiryCoupon(); // 处理药品订单 -// $this->handleOrderProduct(); + $this->handleOrderProduct(); // 处理药品订单退款 -// $this->handleOrderProductRefund(); + $this->handleOrderProductRefund(); // 处理药品订单优惠卷 -// $this->handleOrderProductCoupon(); + $this->handleOrderProductCoupon(); // 处理检测订单 -// $this->handleOrderDetection(); + $this->handleOrderDetection(); // 处理检测订单退款 -// $this->handleOrderDetectionRefund(); + $this->handleOrderDetectionRefund(); // 修正医生提现关联订单表数据 -// $this->handleDoctorWithdrawalOrder(); + $this->handleDoctorWithdrawalOrder(); } /** diff --git a/config/routes.php b/config/routes.php index 7eb22ce..ba59963 100644 --- a/config/routes.php +++ b/config/routes.php @@ -897,7 +897,7 @@ Router::addGroup('/test', function () { // // Router::get('/uninquiry', [TestController::class, 'uninquiry']); // 模拟退款 - Router::post('/refund', [TestController::class, 'refund']); +// Router::post('/refund', [TestController::class, 'refund']); });