我的账户数据修改-获取我的账户数据

This commit is contained in:
2024-04-22 14:30:46 +08:00
parent 155ce8d7aa
commit 5d79f4795b
9 changed files with 426 additions and 205 deletions
@@ -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;
}
}