修改服务通知排序,修改医生我的账户接口
This commit is contained in:
parent
5ddc4d1c0a
commit
5776001cfe
70
app/Amqp/Consumer/AutoFinishInquiryDelayDirectConsumer.php
Normal file
70
app/Amqp/Consumer/AutoFinishInquiryDelayDirectConsumer.php
Normal file
@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Amqp\Consumer;
|
||||
|
||||
use App\Utils\Log;
|
||||
use Hyperf\Amqp\Message\ConsumerDelayedMessageTrait;
|
||||
use Hyperf\Amqp\Message\ProducerDelayedMessageTrait;
|
||||
use Hyperf\Amqp\Message\Type;
|
||||
use Hyperf\Amqp\Result;
|
||||
use Hyperf\Amqp\Annotation\Consumer;
|
||||
use Hyperf\Amqp\Message\ConsumerMessage;
|
||||
use Hyperf\DbConnection\Db;
|
||||
use PhpAmqpLib\Message\AMQPMessage;
|
||||
|
||||
/**
|
||||
* 自动完成问诊订单
|
||||
* 延迟队列
|
||||
*/
|
||||
#[Consumer(nums: 1)]
|
||||
class AutoFinishInquiryDelayDirectConsumer extends ConsumerMessage
|
||||
{
|
||||
use ProducerDelayedMessageTrait;
|
||||
use ConsumerDelayedMessageTrait;
|
||||
|
||||
protected string $exchange = 'amqp.delay.direct';
|
||||
|
||||
protected ?string $queue = 'auto_finish_inquiry.delay.queue';
|
||||
|
||||
protected string $type = Type::DIRECT; //Type::FANOUT;
|
||||
|
||||
protected string|array $routingKey = 'AutoFinishInquiry';
|
||||
|
||||
public function consumeMessage($data, AMQPMessage $message): string
|
||||
{
|
||||
Log::getInstance()->error("开始执行 自动完成问诊订单 队列:" . json_encode($data, JSON_UNESCAPED_UNICODE));
|
||||
|
||||
Db::beginTransaction();
|
||||
try {
|
||||
// 检测入参参数
|
||||
if (empty($data['order_inquiry_id'])){
|
||||
Log::getInstance()->error("自动完成问诊订单队列执行失败:入参错误");
|
||||
return Result::DROP;
|
||||
}
|
||||
|
||||
// 获取问诊订单数据
|
||||
$params = array();
|
||||
$params['order_inquiry_id'] = $data['order_inquiry_id'];
|
||||
|
||||
// 添加医生账户总表
|
||||
|
||||
// 医生账户表-日
|
||||
|
||||
// 修改问诊订单表
|
||||
|
||||
// 添加自动评价
|
||||
|
||||
// 回写患者病例
|
||||
|
||||
Db::commit();
|
||||
Log::getInstance()->info("自动完成问诊订单队列执行成功");
|
||||
return Result::ACK;
|
||||
} catch (\Exception $e) {
|
||||
Db::rollBack();
|
||||
Log::getInstance()->error("自动完成问诊订单执行失败:" . $e->getMessage());
|
||||
return Result::ACK; // 重回队列
|
||||
}
|
||||
}
|
||||
}
|
||||
31
app/Amqp/Producer/AutoFinishInquiryDelayDirectProducer.php
Normal file
31
app/Amqp/Producer/AutoFinishInquiryDelayDirectProducer.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Amqp\Producer;
|
||||
|
||||
use Hyperf\Amqp\Annotation\Producer;
|
||||
use Hyperf\Amqp\Message\ProducerDelayedMessageTrait;
|
||||
use Hyperf\Amqp\Message\ProducerMessage;
|
||||
use Hyperf\Amqp\Message\Type;
|
||||
|
||||
/**
|
||||
* 自动完成问诊订单
|
||||
* 延迟队列
|
||||
*/
|
||||
#[Producer]
|
||||
class AutoFinishInquiryDelayDirectProducer extends ProducerMessage
|
||||
{
|
||||
use ProducerDelayedMessageTrait;
|
||||
|
||||
protected string $exchange = 'amqp.delay.direct';
|
||||
|
||||
protected string $type = Type::DIRECT;
|
||||
|
||||
protected string|array $routingKey = 'AutoFinishInquiry';
|
||||
|
||||
public function __construct($data)
|
||||
{
|
||||
$this->payload = $data;
|
||||
}
|
||||
}
|
||||
@ -1,73 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* This file is part of Hyperf.
|
||||
*
|
||||
* @link https://www.hyperf.io
|
||||
* @document https://hyperf.wiki
|
||||
* @contact group@hyperf.io
|
||||
* @license https://github.com/hyperf/hyperf/blob/master/LICENSE
|
||||
*/
|
||||
namespace App\Listener;
|
||||
|
||||
use Hyperf\AsyncQueue\AnnotationJob;
|
||||
use Hyperf\AsyncQueue\Event\AfterHandle;
|
||||
use Hyperf\AsyncQueue\Event\BeforeHandle;
|
||||
use Hyperf\AsyncQueue\Event\Event;
|
||||
use Hyperf\AsyncQueue\Event\FailedHandle;
|
||||
use Hyperf\AsyncQueue\Event\RetryHandle;
|
||||
use Hyperf\Event\Annotation\Listener;
|
||||
use Hyperf\Event\Contract\ListenerInterface;
|
||||
use Hyperf\ExceptionHandler\Formatter\FormatterInterface;
|
||||
use Hyperf\Logger\LoggerFactory;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
#[Listener]
|
||||
class QueueHandleListener implements ListenerInterface
|
||||
{
|
||||
protected LoggerInterface $logger;
|
||||
|
||||
public function __construct(LoggerFactory $loggerFactory, protected FormatterInterface $formatter)
|
||||
{
|
||||
$this->logger = $loggerFactory->get('queue');
|
||||
}
|
||||
|
||||
public function listen(): array
|
||||
{
|
||||
return [
|
||||
AfterHandle::class,
|
||||
BeforeHandle::class,
|
||||
FailedHandle::class,
|
||||
RetryHandle::class,
|
||||
];
|
||||
}
|
||||
|
||||
public function process(object $event): void
|
||||
{
|
||||
if ($event instanceof Event && $event->message->job()) {
|
||||
$job = $event->message->job();
|
||||
$jobClass = get_class($job);
|
||||
if ($job instanceof AnnotationJob) {
|
||||
$jobClass = sprintf('Job[%s@%s]', $job->class, $job->method);
|
||||
}
|
||||
$date = date('Y-m-d H:i:s');
|
||||
|
||||
switch (true) {
|
||||
case $event instanceof BeforeHandle:
|
||||
$this->logger->info(sprintf('[%s] Processing %s.', $date, $jobClass));
|
||||
break;
|
||||
case $event instanceof AfterHandle:
|
||||
$this->logger->info(sprintf('[%s] Processed %s.', $date, $jobClass));
|
||||
break;
|
||||
case $event instanceof FailedHandle:
|
||||
$this->logger->error(sprintf('[%s] Failed %s.', $date, $jobClass));
|
||||
$this->logger->error($this->formatter->format($event->getThrowable()));
|
||||
break;
|
||||
case $event instanceof RetryHandle:
|
||||
$this->logger->warning(sprintf('[%s] Retried %s.', $date, $jobClass));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -14,6 +14,7 @@ use Hyperf\HttpMessage\Stream\SwooleStream;
|
||||
use Hyperf\HttpServer\Contract\RequestInterface;
|
||||
use Hyperf\HttpServer\Contract\ResponseInterface as HttpResponse;
|
||||
use Hyperf\Redis\Redis;
|
||||
use Monolog\Logger;
|
||||
use Psr\Container\ContainerInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
@ -100,7 +100,7 @@ class MessageNotice extends Model
|
||||
public static function getMessageNoticePage(array $params, array $fields = ["*"], int $page = null, ?int $per_page = 10): array
|
||||
{
|
||||
$results = self::where($params)
|
||||
->orderBy('notice_send_time')
|
||||
->orderBy('notice_send_time','desc')
|
||||
->paginate($per_page, $fields, "page", $page);
|
||||
|
||||
$data = array();
|
||||
|
||||
@ -33,9 +33,10 @@ use Hyperf\Snowflake\Concern\Snowflake;
|
||||
* @property string $reception_time 接诊时间(已接诊)
|
||||
* @property string $complete_time 订单完成时间(问诊完成时间)
|
||||
* @property string $finish_time 订单结束时间
|
||||
* @property string $settlement_amount_total 订单与医生结算金额
|
||||
* @property int $settlement_status 订单与医生结算状态(0:未结算 1:已结算)
|
||||
* @property string $settlement_time 订单与医生结算时间
|
||||
* @property int $statistics_status 订单统计状态(0:未统计 1:已统计 2:统计失败)
|
||||
* @property string $statistics_time 订单统计时间
|
||||
* @property int $is_withdrawal 是否提现(0:否 1:是 2:提现中)
|
||||
* @property string $withdrawal_time 提现时间
|
||||
* @property string $cancel_time 订单取消时间
|
||||
* @property int $cancel_reason 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时)
|
||||
* @property string $cancel_remarks 取消订单备注(自动添加)
|
||||
@ -60,7 +61,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', 'settlement_amount_total', 'settlement_status', 'settlement_time', 'cancel_time', 'cancel_reason', 'cancel_remarks', 'patient_name', 'patient_name_mask', 'patient_sex', 'patient_age', 'created_at', 'updated_at'];
|
||||
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', 'patient_name', 'patient_name_mask', 'patient_sex', 'patient_age', 'created_at', 'updated_at'];
|
||||
|
||||
protected string $primaryKey = "order_inquiry_id";
|
||||
|
||||
@ -193,7 +194,7 @@ class OrderInquiry extends Model
|
||||
* @param array $inquiry_status_params inquiry_status字段搜索条件
|
||||
* @return int|mixed|string
|
||||
*/
|
||||
public static function getOrderInquiryAmountTotalSum(array $params, array $reception_time,array $inquiry_status_params): mixed
|
||||
public static function getOrderInquiryBetweenTimeAmountTotalSum(array $params, array $reception_time, array $inquiry_status_params): mixed
|
||||
{
|
||||
return self::where($params)
|
||||
->whereIn('inquiry_status',$inquiry_status_params)
|
||||
@ -202,6 +203,20 @@ class OrderInquiry extends Model
|
||||
->sum("amount_total");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取医生某种状态的订单金额
|
||||
* @param array $params
|
||||
* @param array $inquiry_status_params inquiry_status字段搜索条件
|
||||
* @return int|mixed|string
|
||||
*/
|
||||
public static function getOrderInquiryAmountTotalSum(array $params, array $inquiry_status_params): mixed
|
||||
{
|
||||
return self::where($params)
|
||||
->whereIn('inquiry_status',$inquiry_status_params)
|
||||
->orderBy('reception_time')
|
||||
->sum("amount_total");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取某种状态的所有订单
|
||||
* @param array $params
|
||||
|
||||
@ -180,11 +180,11 @@ class DoctorAccountService extends BaseService
|
||||
return success();
|
||||
}
|
||||
|
||||
$result = array();
|
||||
$result['bank_card_id'] = $doctor_bank_card['bank_card_id'];
|
||||
$result['bank_icon_path'] = $doctor_bank_card['BasicBank']['bank_icon_path'];
|
||||
$result['bank_name'] = $doctor_bank_card['BasicBank']['bank_name'];
|
||||
$result['bank_card_code_mask'] = $doctor_bank_card['bank_card_code_mask'];
|
||||
$bank = array();
|
||||
$bank['bank_card_id'] = $doctor_bank_card['bank_card_id'];
|
||||
$bank['bank_icon_path'] = $doctor_bank_card['BasicBank']['bank_icon_path'];
|
||||
$bank['bank_name'] = $doctor_bank_card['BasicBank']['bank_name'];
|
||||
$bank['bank_card_code_mask'] = $doctor_bank_card['bank_card_code_mask'];
|
||||
|
||||
// 获取医生账户余额
|
||||
if (!empty($order_inquiry_ids)){
|
||||
@ -201,7 +201,8 @@ class DoctorAccountService extends BaseService
|
||||
$balance_account = array_sum(array_column($order_inquiry->toArray(),'amount_total'));
|
||||
}
|
||||
}else{
|
||||
$balance_account = $this->getDoctorBalanceAccount($user_info['client_user_id']);
|
||||
$InquiryService = new InquiryService();
|
||||
$balance_account = $InquiryService->getDoctorCanWithdrawalAmountTotal($user_info['client_user_id']);
|
||||
}
|
||||
|
||||
if ($balance_account > 0) {
|
||||
@ -211,10 +212,14 @@ class DoctorAccountService extends BaseService
|
||||
// 计算医生个人所得税
|
||||
$income_tax = $this->computeIndividualIncomeTax($balance_account);
|
||||
|
||||
$result['withdrawal_amount'] = floor(($balance_account - $income_tax) * 100) / 100;
|
||||
$withdrawal_amount = floor(($balance_account - $income_tax) * 100) / 100;
|
||||
|
||||
$income_tax = floor($income_tax * 100) / 100;
|
||||
$result['income_tax'] = $income_tax;
|
||||
|
||||
$result = array();
|
||||
$result['bank'] = $bank;//银行数据
|
||||
$result['withdrawal_amount'] = $withdrawal_amount; // 提现金额
|
||||
$result['income_tax'] = $income_tax; // 个人所得税
|
||||
|
||||
return success($result);
|
||||
}
|
||||
|
||||
@ -799,17 +799,43 @@ class InquiryService extends BaseService
|
||||
$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['settlement_status'] = 0; // 订单与医生结算状态(0:未结算 1:已结算)
|
||||
$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:已取消)
|
||||
|
||||
$amount_total_sum = OrderInquiry::getOrderInquiryAmountTotalSum($params, $reception_time, $inquiry_status_params);
|
||||
$amount_total_sum = OrderInquiry::getOrderInquiryBetweenTimeAmountTotalSum($params, $reception_time, $inquiry_status_params);
|
||||
|
||||
return $amount_total_sum ?: 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取医生可提现金额
|
||||
* @param string $doctor_id
|
||||
* @return int
|
||||
*/
|
||||
public function getDoctorCanWithdrawalAmountTotal(string $doctor_id): int
|
||||
{
|
||||
// 获取医生当日接诊订单金额
|
||||
$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['statistics_status'] = 1; // 订单统计状态(0:未统计 1:已统计 2:统计失败)
|
||||
$params['is_withdrawal'] = 0; // 是否提现(0:否 1:是 2:提现中)
|
||||
$params['inquiry_status'] = 6; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
|
||||
|
||||
$order_inquiry = OrderInquiry::getList($params);
|
||||
if (empty($order_inquiry)){
|
||||
return 0;
|
||||
}
|
||||
|
||||
$order_inquiry = $order_inquiry->toArray();
|
||||
return array_sum(array_column($order_inquiry,'amount_total'));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取患者某一状态下的问诊订单数量
|
||||
* @param string $patient_id 患者id
|
||||
|
||||
@ -2162,4 +2162,7 @@ class UserDoctorService extends BaseService
|
||||
$inquiry_status_params = [1,3,4];
|
||||
return OrderInquiry::getInquiryStatusCount($params,$inquiry_status_params);
|
||||
}
|
||||
|
||||
// 获取医生已完成订单总额
|
||||
|
||||
}
|
||||
@ -10,6 +10,8 @@ declare(strict_types=1);
|
||||
* @license https://github.com/hyperf/hyperf/blob/master/LICENSE
|
||||
*/
|
||||
|
||||
use Monolog\Logger;
|
||||
|
||||
$appEnv = env('APP_ENV', 'dev');
|
||||
if ($appEnv == 'dev') {
|
||||
$formatter = [
|
||||
@ -33,9 +35,9 @@ return [
|
||||
'class' => Monolog\Handler\StreamHandler::class,
|
||||
'constructor' => [
|
||||
'stream' => BASE_PATH . '/runtime/logs/hyperf.log',
|
||||
'level' => Monolog\Logger::DEBUG,
|
||||
'level' => Monolog\Logger::INFO,
|
||||
],
|
||||
],
|
||||
'formatter' => $formatter,
|
||||
]
|
||||
],
|
||||
];
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user