删除自动开方时增加上报处方数据。增加自动结束时上报处方数据,修改上报处方脚本

This commit is contained in:
2023-12-13 17:08:36 +08:00
parent f697ce77b1
commit 2ce4aafb01
6 changed files with 557 additions and 532 deletions
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Amqp\Consumer;
use App\Amqp\Producer\AutoFinishInquiryDelayDirectProducer;
use App\Constants\HttpEnumCode;
use App\Model\DoctorAccount;
use App\Model\DoctorAccountDay;
use App\Model\OrderEvaluation;
@@ -17,11 +19,13 @@ use App\Model\UserDoctor;
use App\Model\UserPatient;
use App\Services\ImService;
use App\Services\MessagePush;
use App\Services\ReportRegulatoryService;
use App\Utils\Log;
use App\Utils\Mask;
use Hyperf\Amqp\Message\ConsumerDelayedMessageTrait;
use Hyperf\Amqp\Message\ProducerDelayedMessageTrait;
use Hyperf\Amqp\Message\Type;
use Hyperf\Amqp\Producer;
use Hyperf\Amqp\Result;
use Hyperf\Amqp\Annotation\Consumer;
use Hyperf\Amqp\Message\ConsumerMessage;
@@ -54,45 +58,55 @@ class AutoFinishInquiryDelayDirectConsumer extends ConsumerMessage
{
Log::getInstance("queue-AutoFinishInquiry")->info("开始:" . json_encode($data, JSON_UNESCAPED_UNICODE));
// 检测入参参数
if (empty($data['order_inquiry_id'])) {
Log::getInstance("queue-AutoFinishInquiry")->error("错误:入参错误");
return Result::DROP;
}
// 获取问诊订单数据
$params = array();
$params['order_inquiry_id'] = $data['order_inquiry_id'];
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)) {
Log::getInstance("queue-AutoFinishInquiry")->error("问诊订单数据为空");
return Result::DROP;
}
$order_inquiry = $order_inquiry->toArray();
// 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
if ($order_inquiry['inquiry_status'] != 5) {
Log::getInstance("queue-AutoFinishInquiry")->error("问诊订单未完成,无法结束");
return Result::DROP;
}
// 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常)
if (!in_array($order_inquiry['inquiry_refund_status'], [0, 4, 5])) {
Log::getInstance("queue-AutoFinishInquiry")->error("问诊订单正在申请退款");
return Result::DROP;
}
if (empty($order_inquiry['doctor_id'])) {
Log::getInstance("queue-AutoFinishInquiry")->error("医生id为空");
return Result::DROP;
}
Db::beginTransaction();
try {
// 检测入参参
if (empty($data['order_inquiry_id'])) {
// 检测执行次
$result = $this->checkExecutionCount($data['order_inquiry_id']);
if (empty($result)) {
Db::rollBack();
Log::getInstance("queue-AutoFinishInquiry")->error("错误:入参错误");
return Result::DROP;
Log::getInstance("queue-AutoFinishInquiry")->error("检测订单执行次数错误");
return Result::ACK;
}
// 获取问诊订单数据
$params = array();
$params['order_inquiry_id'] = $data['order_inquiry_id'];
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)) {
// 超出执行次数
if ($result['code'] == 2){
Db::rollBack();
Log::getInstance("queue-AutoFinishInquiry")->error("错误:问诊订单数据为空");
return Result::DROP;
}
$order_inquiry = $order_inquiry->toArray();
// 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
if ($order_inquiry['inquiry_status'] != 5) {
Db::rollBack();
Log::getInstance("queue-AutoFinishInquiry")->error("错误:问诊订单未完成,无法结束");
return Result::DROP;
}
// 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常)
if (!in_array($order_inquiry['inquiry_refund_status'], [0, 4, 5])) {
Db::rollBack();
Log::getInstance("queue-AutoFinishInquiry")->error("错误:问诊订单正在申请退款");
return Result::DROP;
}
if (empty($order_inquiry['doctor_id'])) {
Db::rollBack();
Log::getInstance("queue-AutoFinishInquiry")->error("错误:医生id为空");
return Result::DROP;
return Result::ACK;
}
// 处理统计问题
@@ -101,16 +115,16 @@ class AutoFinishInquiryDelayDirectConsumer extends ConsumerMessage
$res = $this->handleDoctorAccount($order_inquiry);
if (!$res) {
Db::rollBack();
Log::getInstance("queue-AutoFinishInquiry")->error("错误:处理医生账户总表失败");
return Result::DROP;
Log::getInstance("queue-AutoFinishInquiry")->error("处理医生账户总表失败");
return Result::REQUEUE;
}
// 处理医生账户表-日
$res = $this->handleDoctorAccountDay($order_inquiry);
if (!$res) {
Db::rollBack();
Log::getInstance("queue-AutoFinishInquiry")->error("错误:处理医生账户表-日失败");
return Result::DROP;
Log::getInstance("queue-AutoFinishInquiry")->error("处理医生账户表-日失败");
return Result::REQUEUE;
}
}
@@ -135,12 +149,22 @@ class AutoFinishInquiryDelayDirectConsumer extends ConsumerMessage
// 计算医生平均响应时间
$this->computeDoctorAvgPesponseTime($order_inquiry['doctor_id']);
// 新增上报监管平台数据
$reportRegulatoryService = new ReportRegulatoryService();
$res = $reportRegulatoryService->addReportRegulatory($order_inquiry['order_inquiry_id']);
if (!$res){
// 新增上报失败
Db::rollBack();
Log::getInstance("queue-AutoFinishInquiry")->error("新增上报监管平台数据失败");
return Result::REQUEUE;
}
Db::commit();
Log::getInstance("queue-AutoFinishInquiry")->info("成功");
} catch (\Exception $e) {
Db::rollBack();
Log::getInstance("queue-AutoFinishInquiry")->error("错误:" . $e->getMessage());
return Result::ACK; // 重回队列
return Result::REQUEUE; // 重回队列
}
// 推送消息
@@ -259,11 +283,6 @@ class AutoFinishInquiryDelayDirectConsumer extends ConsumerMessage
return true;
}
// 获取用户数据
$params = array();
$params['patient_id'] = $order_inquiry['patient_id'];
$user_patient = UserPatient::getOne($params);
// 未评价
$data = array();
$data['doctor_id'] = $order_inquiry['doctor_id'];
@@ -600,4 +619,53 @@ class AutoFinishInquiryDelayDirectConsumer extends ConsumerMessage
return true;
}
/**
* 检测执行次数
* @param string $redis_key
* @return array
*/
protected function checkExecutionCount(string $redis_key): array
{
// code:0:异常 1:正常 2:超出最大执行次数
$result = array();
$result['code'] = 0;
$result['message'] = "";
try {
$redis = $this->container->get(Redis::class);
}catch (\Throwable $e) {
Log::getInstance("queue-AutoFinishInquiry")->error($e->getMessage());
$result['message'] = $e->getMessage();
return $result;
}
try {
$redis_value = $redis->get($redis_key);
if (empty($redis_value)) {
$redis->set($redis_key, 1, 60 * 60 * 24 * 1);
$result['code'] = 1;
return $result;
}
// 执行次数超出4次
if ($redis_value > 4) {
Log::getInstance("queue-AutoFinishInquiry")->info("超出最大执行次数");
// 加入短信队列,通知管理员
$result['code'] = 2;
$result['message'] = "超出最大执行次数";
return $result;
}
$redis->incr($redis_key);
} catch (\Throwable $e) {
Log::getInstance("queue-AutoFinishInquiry")->error($e->getMessage());
$result['message'] = $e->getMessage();
return $result;
}
return $result;
}
}
@@ -257,14 +257,6 @@ class AutoPharmacistCaVerifyDelayDirectConsumer extends ConsumerMessage
// 修改处方表为通过
$this->modifyOrderPrescription($data['order_prescription_id'],1);
// 增加上报监管平台表
$res = $this->addReportRegulatory($order_inquiry['order_inquiry_id'],$order_prescription['order_prescription_id']);
if (!$res){
Db::rollBack();
Log::getInstance("queue-AutoPharmacistCaVerify")->error("错误:增加监管平台上报表失败");
return Result::REQUEUE;
}
Db::commit();
Log::getInstance("queue-AutoPharmacistCaVerify")->info("成功");
} catch (\Throwable $e) {
@@ -479,31 +471,4 @@ class AutoPharmacistCaVerifyDelayDirectConsumer extends ConsumerMessage
OrderPrescription::edit($params,$data);
}
/**
* 增加上报监管平台表
* @param string $order_inquiry_id
* @param string $order_prescription_id
* @return bool
*/
protected function addReportRegulatory(string $order_inquiry_id,string $order_prescription_id): bool
{
// 检测是否已添加
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
$report_regulatory = ReportRegulatory::getOne($params);
if (!empty($report_regulatory)) {
return true;
}
$data = array();
$data['order_inquiry_id'] = $order_inquiry_id;
$data['order_prescription_id'] = $order_prescription_id;
$report_regulatory = ReportRegulatory::addReportRegulatory($data);
if (empty($report_regulatory)){
return false;
}
return true;
}
}