mirror of
http://124.126.16.154:8888/singularity/hdk-pay.git
synced 2026-01-15 05:55:08 +08:00
feat(account): 增加积分日志详情查询功能并支持发票信息
- 新增 InvoiceRecord 类用于存储发票信息 - 在 PointLog 类中添加发票相关字段和方法 - 在 PointLogRepo 中实现积分日志详情查询接口 - 更新单元测试以覆盖新功能
This commit is contained in:
@@ -12,6 +12,7 @@ declare(strict_types=1);
|
|||||||
namespace Singularity\HDK\Pay\Domain\Account\Aggregate\PointLog;
|
namespace Singularity\HDK\Pay\Domain\Account\Aggregate\PointLog;
|
||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
use Singularity\HDK\Pay\Domain\Account\Aggregate\PointLog\ValueObject\InvoiceRecord;
|
||||||
use Singularity\HDK\Pay\Domain\AggregateRoot;
|
use Singularity\HDK\Pay\Domain\AggregateRoot;
|
||||||
|
|
||||||
final class PointLog extends AggregateRoot
|
final class PointLog extends AggregateRoot
|
||||||
@@ -25,6 +26,8 @@ final class PointLog extends AggregateRoot
|
|||||||
private readonly string $operator,
|
private readonly string $operator,
|
||||||
private readonly string $description,
|
private readonly string $description,
|
||||||
private readonly Carbon $date,
|
private readonly Carbon $date,
|
||||||
|
private readonly bool $invoiceable,
|
||||||
|
private readonly ?InvoiceRecord $invoiceRecord,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
public function getDescription(): string
|
public function getDescription(): string
|
||||||
@@ -67,4 +70,19 @@ final class PointLog extends AggregateRoot
|
|||||||
{
|
{
|
||||||
return $this->id;
|
return $this->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getInvoiceNo(): ?string
|
||||||
|
{
|
||||||
|
return $this->invoiceRecord?->invoiceNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getInvoiceReceiver(): ?string
|
||||||
|
{
|
||||||
|
return $this->invoiceRecord?->receiver;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getInvoiceable(): bool
|
||||||
|
{
|
||||||
|
return $this->invoiceable;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* InvoiceRecord.php@Pay
|
||||||
|
*
|
||||||
|
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
|
||||||
|
* Powered by PhpStorm
|
||||||
|
* Created on 2025/9/4
|
||||||
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Singularity\HDK\Pay\Domain\Account\Aggregate\PointLog\ValueObject;
|
||||||
|
|
||||||
|
final class InvoiceRecord
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
public string $invoiceNo,
|
||||||
|
public string $receiver,
|
||||||
|
) {}
|
||||||
|
}
|
||||||
@@ -19,4 +19,9 @@ interface PointLogRepoInterface
|
|||||||
*/
|
*/
|
||||||
public function getList(string $uid): array;
|
public function getList(string $uid): array;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $caseId
|
||||||
|
* @return PointLog
|
||||||
|
*/
|
||||||
|
public function getDetail(string $caseId): PointLog;
|
||||||
}
|
}
|
||||||
@@ -12,16 +12,24 @@ declare(strict_types=1);
|
|||||||
namespace Singularity\HDK\Pay\Infrastructure\Repository;
|
namespace Singularity\HDK\Pay\Infrastructure\Repository;
|
||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
use GuzzleHttp\Exception\GuzzleException;
|
||||||
use Hyperf\Codec\Json;
|
use Hyperf\Codec\Json;
|
||||||
use Singularity\HDK\Pay\Domain\Account\Aggregate\PointLog\PointLog;
|
use Singularity\HDK\Pay\Domain\Account\Aggregate\PointLog\PointLog;
|
||||||
|
use Singularity\HDK\Pay\Domain\Account\Aggregate\PointLog\ValueObject\InvoiceRecord;
|
||||||
use Singularity\HDK\Pay\Domain\Account\Enum\PointType;
|
use Singularity\HDK\Pay\Domain\Account\Enum\PointType;
|
||||||
use Singularity\HDK\Pay\Domain\Account\Repository\PointLogRepoInterface;
|
use Singularity\HDK\Pay\Domain\Account\Repository\PointLogRepoInterface;
|
||||||
|
|
||||||
final class PointLogRepo extends AbstractRepo implements PointLogRepoInterface
|
final class PointLogRepo extends AbstractRepo implements PointLogRepoInterface
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @param string $uid
|
||||||
|
* @param PointType|null $type
|
||||||
|
* @return array{}|PointLog[]
|
||||||
|
* @throws GuzzleException
|
||||||
|
*/
|
||||||
public function getList(string $uid, ?PointType $type = null): array
|
public function getList(string $uid, ?PointType $type = null): array
|
||||||
{
|
{
|
||||||
$type = isset($type) ? $type->value: 'all';
|
$type = isset($type) ? $type->value : 'all';
|
||||||
$response = $this->requestService->requestGet(url: "/rpc/v2/account/$uid/balance/$type/logs");
|
$response = $this->requestService->requestGet(url: "/rpc/v2/account/$uid/balance/$type/logs");
|
||||||
|
|
||||||
$content = $response->getBody()->getContents();
|
$content = $response->getBody()->getContents();
|
||||||
@@ -37,7 +45,43 @@ final class PointLogRepo extends AbstractRepo implements PointLogRepoInterface
|
|||||||
operator: $item['operator'],
|
operator: $item['operator'],
|
||||||
description: $item['description'],
|
description: $item['description'],
|
||||||
date: new Carbon($item['date']),
|
date: new Carbon($item['date']),
|
||||||
|
invoiceable: $item['invoiceable'],
|
||||||
|
invoiceRecord: isset($item['invoice_record'])
|
||||||
|
? new InvoiceRecord(
|
||||||
|
invoiceNo: $item['invoice_record']['invoice_no'],
|
||||||
|
receiver: $item['invoice_record']['receiver'],
|
||||||
|
)
|
||||||
|
: null,
|
||||||
);
|
);
|
||||||
}, $result);
|
}, $result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function getDetail(string $caseId): PointLog
|
||||||
|
{
|
||||||
|
$response = $this->requestService->requestGet(url: "/rpc/v2/account/logs/points/$caseId");
|
||||||
|
|
||||||
|
$content = $response->getBody()->getContents();
|
||||||
|
$result = Json::decode($content);
|
||||||
|
|
||||||
|
return new PointLog(
|
||||||
|
id: $result['id'],
|
||||||
|
caseId: $result['case_id'],
|
||||||
|
uid: $result['uid'],
|
||||||
|
credits: $result['credits'],
|
||||||
|
source: $result['source'],
|
||||||
|
operator: $result['operator'],
|
||||||
|
description: $result['description'],
|
||||||
|
date: new Carbon($result['date']),
|
||||||
|
invoiceable: $result['invoiceable'],
|
||||||
|
invoiceRecord: isset($result['invoice_record'])
|
||||||
|
? new InvoiceRecord(
|
||||||
|
$result['invoice_record']['invoice_no'],
|
||||||
|
$result['invoice_record']['receiver'],
|
||||||
|
)
|
||||||
|
: null,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* QueryPointLogListTest.php@Pay
|
* QueryPointLogTest.php@Pay
|
||||||
*
|
*
|
||||||
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
|
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
|
||||||
* Powered by PhpStorm
|
* Powered by PhpStorm
|
||||||
@@ -23,3 +23,12 @@ it('should can query point log list', function () {
|
|||||||
->each
|
->each
|
||||||
->toBeInstanceOf(PointLog::class);
|
->toBeInstanceOf(PointLog::class);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should can query a point log', function () {
|
||||||
|
$case_id = '68b6ac37a6440';
|
||||||
|
|
||||||
|
$repo = make(PointLogRepo::class);
|
||||||
|
$log = $repo->getDetail($case_id);
|
||||||
|
expect($log)
|
||||||
|
->toBeInstanceOf(PointLog::class);
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user