新增消息推送,新增处方平台查询处方状态

This commit is contained in:
wucongxing 2023-04-04 19:54:33 +08:00
parent ecbd558c22
commit 4bd15135c7
4 changed files with 99 additions and 71 deletions

View File

@ -10,6 +10,7 @@ use App\Model\UserCoupon;
use App\Model\UserDoctor;
use App\Services\ImService;
use App\Services\InquiryService;
use App\Services\MessagePush;
use App\Utils\Log;
use Hyperf\Amqp\Message\ConsumerDelayedMessageTrait;
use Hyperf\Amqp\Message\ProducerDelayedMessageTrait;
@ -164,10 +165,14 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage
// 发送IM消息-问诊退款
$imService->inquiryRefund($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']);
Log::getInstance()->info("取消未接诊问诊订单成功,发送IM消息成功");
// 发送站内消息-医生未接诊
$MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['order_inquiry_id']);
$MessagePush->patientNoInquiry();
Log::getInstance()->info("取消未接诊问诊订单成功,发送消息成功");
} catch (\Exception $e) {
// 验证失败
Log::getInstance()->error("取消未接诊问诊订单成功,发送IM消息失败:" . $e->getMessage());
Log::getInstance()->error("取消未接诊问诊订单成功,发送消息失败:" . $e->getMessage());
}
return Result::ACK;

View File

@ -24,6 +24,7 @@ use App\Services\UserDoctorService;
use App\Utils\Log;
use Extend\Alibaba\Oss;
use Extend\Ca\Ca;
use Extend\Prescription\Prescription;
use Hyperf\Amqp\Producer;
use Hyperf\DbConnection\Db;
use Hyperf\Utils\ApplicationContext;
@ -581,6 +582,11 @@ class TestController extends AbstractController
}
public function test_11(){
$Prescription = new Prescription();
$result = $Prescription->getPrescription();
dump($result);
die;
$order_prescription_id = "501751534291394561";
// 获取处方数据

View File

@ -27,9 +27,6 @@ use Psr\Container\NotFoundExceptionInterface;
*/
class MessagePush extends BaseService
{
// 推送类型 1站内 2订阅 3短信
public int $push_type;
// 用户数据(存在被推送者时存在,否则为空)
public array $user = [];
@ -37,17 +34,11 @@ class MessagePush extends BaseService
public array $order_inquiry = [];
/**
* @param int $push_type 推送类型 1:站内 2:订阅 3:短信
* @param string $to_user_id 用户id存在被推送者时存在,否则为空)
* @param string $order_inquiry_id 问诊订单id
*/
public function __construct(int $push_type, string $to_user_id = "", string $order_inquiry_id = "")
public function __construct(string $to_user_id = "", string $order_inquiry_id = "")
{
if (!in_array($push_type, [1, 2, 3])) {
throw new BusinessException("推送类型错误:" . $push_type);
}
$this->push_type = $push_type;
if (!empty($to_user_id)) {
$params = array();
$params['user_id'] = $to_user_id;
@ -79,74 +70,71 @@ class MessagePush extends BaseService
public function patientNoInquiry(): bool
{
try {
if ($this->push_type == 1) {
// 站内
// 服务消息
$data = array();
$data['user_id'] = $this->user['user_id'];
$data['notice_type'] = 3;
$data['notice_system_type'] = 1;
$data['from_name'] = "肝胆小秘书";
if ($this->order_inquiry['inquiry_type'] == 1 || $this->order_inquiry['inquiry_type'] == 3) {
// 专家-公益
$data['notice_brief_title'] = "您咨询的服务暂无医生接诊,点击查看详情。";
$data['notice_title'] = "您咨询的服务暂无医生接诊,点击查看详情。";
$data['notice_content'] = "您咨询的服务当前排队人较多暂无空闲医生接诊。给您带来不便敬请谅解平台会在24小时内进行退款您可以点击订单详情查看退款详情。";
// 站内
// 服务消息
$data = array();
$data['user_id'] = $this->user['user_id'];
$data['notice_type'] = 3;
$data['notice_system_type'] = 1;
$data['from_name'] = "肝胆小秘书";
if ($this->order_inquiry['inquiry_type'] == 1 || $this->order_inquiry['inquiry_type'] == 3) {
// 专家-公益
$data['notice_brief_title'] = "您咨询的服务暂无医生接诊,点击查看详情。";
$data['notice_title'] = "您咨询的服务暂无医生接诊,点击查看详情。";
$data['notice_content'] = "您咨询的服务当前排队人较多暂无空闲医生接诊。给您带来不便敬请谅解平台会在24小时内进行退款您可以点击订单详情查看退款详情。";
} elseif ($this->order_inquiry['inquiry_type'] == 1 || $this->order_inquiry['inquiry_type'] == 4) {
// 快速-购药
$data['notice_brief_title'] = "您咨询的医生因工作繁忙没有时间接诊,点击查看详情。";
$data['notice_title'] = "您咨询的医生因工作繁忙没有时间接诊,点击查看详情。";
$data['notice_content'] = "您咨询的医生因工作繁忙暂无空闲时间接诊。给您带来不便敬请谅解平台会在24小时内进行退款您可以点击订单详情查看退款详情。";
}
} elseif ($this->order_inquiry['inquiry_type'] == 1 || $this->order_inquiry['inquiry_type'] == 4) {
// 快速-购药
$data['notice_brief_title'] = "您咨询的医生因工作繁忙没有时间接诊,点击查看详情。";
$data['notice_title'] = "您咨询的医生因工作繁忙没有时间接诊,点击查看详情。";
$data['notice_content'] = "您咨询的医生因工作繁忙暂无空闲时间接诊。给您带来不便敬请谅解平台会在24小时内进行退款您可以点击订单详情查看退款详情。";
}
$data['link_type'] = 10;// 问诊订单详情
$data['link_type'] = 10;// 问诊订单详情
$link_params = array();
$link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_id'];
$data['link_params'] = json_encode($link_params,JSON_UNESCAPED_UNICODE);// 跳转参数
$link_params = array();
$link_params['order_inquiry_id'] = $this->order_inquiry['order_inquiry_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);
$result = $producer->produce($message);
if (!$result) {
throw new BusinessException("加入推送队列失败" . json_encode($data,JSON_UNESCAPED_UNICODE));
}
} elseif ($this->push_type == 2) {
// 订阅
// 获取医生数据
$params = array();
$params['doctor_id'] = $this->order_inquiry['doctor_id'];
$user_doctor = UserDoctor::getOne($params);
if (empty($user_doctor)){
throw new BusinessException("加入推送队列失败:医生数据为空");
}
$message = new SendStationMessageProducer($data);
$producer = ApplicationContext::getContainer()->get(Producer::class);
$result = $producer->produce($message);
if (!$result) {
throw new BusinessException("加入推送队列失败" . json_encode($data,JSON_UNESCAPED_UNICODE));
}
$sub_data = array();
$sub_data['push_user_id'] = $this->user['user_id'];
$sub_data['wx_template_id'] = "UOMww1S30Oq7rErJrqO8wN6lNEVKRo2fgcXnb0tBwHI";//问诊异常通知
$sub_data['params']['page'] = "pages/orderDetail/orderDetail?order_inquiry_id={$this->order_inquiry['order_inquiry_id']}";
$sub_data['params']['data'] = [
"character_string1" => $this->order_inquiry['inquiry_no'],// 订单ID
"name2" => (string)$user_doctor['user_name'],// 问诊医生
"date3" => $this->order_inquiry['created_at'],// 问诊时间
"thing4" => inquiryCancelReasonToString($this->order_inquiry['cancel_reason']),// 取消原因
"thing5" => "点击详情更换医生问诊",// 提示说明
];
// 订阅
// 获取医生数据
$params = array();
$params['doctor_id'] = $this->order_inquiry['doctor_id'];
$user_doctor = UserDoctor::getOne($params);
if (empty($user_doctor)){
throw new BusinessException("加入推送队列失败:医生数据为空");
}
$data = array();
$data['sub_data'] = $sub_data;
$data['sms_data'] = array();
$sub_data = array();
$sub_data['push_user_id'] = $this->user['user_id'];
$sub_data['wx_template_id'] = "UOMww1S30Oq7rErJrqO8wN6lNEVKRo2fgcXnb0tBwHI";//问诊异常通知
$sub_data['params']['page'] = "pages/orderDetail/orderDetail?order_inquiry_id={$this->order_inquiry['order_inquiry_id']}";
$sub_data['params']['data'] = [
"character_string1" => (string)$this->order_inquiry['inquiry_no'],// 订单ID
"name2" => (string)$user_doctor['user_name'],// 问诊医生
"date3" => $this->order_inquiry['created_at'],// 问诊时间
"thing4" => inquiryCancelReasonToString($this->order_inquiry['cancel_reason']),// 取消原因
"thing5" => "点击详情更换医生问诊",// 提示说明
];
$message = new SendSubMessageProducer($data);
$producer = ApplicationContext::getContainer()->get(Producer::class);
$result = $producer->produce($message);
if (!$result) {
throw new BusinessException("加入推送队列失败" . json_encode($data,JSON_UNESCAPED_UNICODE));
}
$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) {
throw new BusinessException("加入推送队列失败" . json_encode($data,JSON_UNESCAPED_UNICODE));
}
} catch (\Exception $e) {
throw new BusinessException("加入推送队列失败" . $e->getMessage());

View File

@ -202,6 +202,35 @@ class Prescription
}
}
/**
* 获取处方订单
* @param string $order_product_no 商品订单号
* @param string $prescription_code 处方单号
* @return array
*/
public function getPrescription(string $order_product_no,string $prescription_code): array
{
$option = [
"json" => [
"terminalCode" => "ZD-10003",
"orderNo" => $order_product_no,
"prescriptionNo" => $prescription_code,
]
];
try {
$response = $this->httpRequest($this->api_url . $this->version . '/prescription/searchPresStatus', $option);
if (empty($response)){
// 返回值错误为空
throw new BusinessException(HttpEnumCode::getMessage(HttpEnumCode::SERVER_ERROR));
}
return $response;
} catch (GuzzleException $e) {
throw new BusinessException($e->getMessage());
}
}
/**
* 请求封装
* @param string $path