diff --git a/app/Amqp/Consumer/AutoFinishInquiryDelayDirectConsumer.php b/app/Amqp/Consumer/AutoFinishInquiryDelayDirectConsumer.php new file mode 100644 index 0000000..f626855 --- /dev/null +++ b/app/Amqp/Consumer/AutoFinishInquiryDelayDirectConsumer.php @@ -0,0 +1,70 @@ +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; // 重回队列 + } + } +} diff --git a/app/Amqp/Producer/AutoFinishInquiryDelayDirectProducer.php b/app/Amqp/Producer/AutoFinishInquiryDelayDirectProducer.php new file mode 100644 index 0000000..9ce7b48 --- /dev/null +++ b/app/Amqp/Producer/AutoFinishInquiryDelayDirectProducer.php @@ -0,0 +1,31 @@ +payload = $data; + } +} diff --git a/app/Listener/QueueHandleListener.php b/app/Listener/QueueHandleListener.php deleted file mode 100644 index d81c3bd..0000000 --- a/app/Listener/QueueHandleListener.php +++ /dev/null @@ -1,73 +0,0 @@ -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; - } - } - } -} diff --git a/app/Middleware/Auth/AuthMiddleware.php b/app/Middleware/Auth/AuthMiddleware.php index c1ae850..1959694 100644 --- a/app/Middleware/Auth/AuthMiddleware.php +++ b/app/Middleware/Auth/AuthMiddleware.php @@ -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; diff --git a/app/Model/MessageNotice.php b/app/Model/MessageNotice.php index 6aac4f7..9d0a251 100644 --- a/app/Model/MessageNotice.php +++ b/app/Model/MessageNotice.php @@ -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(); diff --git a/app/Model/OrderInquiry.php b/app/Model/OrderInquiry.php index 471e4bb..7e389a4 100644 --- a/app/Model/OrderInquiry.php +++ b/app/Model/OrderInquiry.php @@ -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 diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index dd9ccb8..53089ce 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -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); } diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 16bfd1e..057f4f7 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -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 diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index e5c2aa3..166c237 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -2162,4 +2162,7 @@ class UserDoctorService extends BaseService $inquiry_status_params = [1,3,4]; return OrderInquiry::getInquiryStatusCount($params,$inquiry_status_params); } + + // 获取医生已完成订单总额 + } \ No newline at end of file diff --git a/config/autoload/logger.php b/config/autoload/logger.php index 54ee317..a62c35e 100644 --- a/config/autoload/logger.php +++ b/config/autoload/logger.php @@ -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, - ] + ], ];