|
@@ -3,6 +3,7 @@
|
|
|
namespace App\Services;
|
|
namespace App\Services;
|
|
|
|
|
|
|
|
use App\Models\DrugReportInfo;
|
|
use App\Models\DrugReportInfo;
|
|
|
|
|
+use Carbon\Carbon;
|
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
|
|
|
|
class SyncSealDrugReportService
|
|
class SyncSealDrugReportService
|
|
@@ -11,20 +12,22 @@ class SyncSealDrugReportService
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 分批次同步数据
|
|
* 分批次同步数据
|
|
|
|
|
+ * @param bool $isFull
|
|
|
* @param string $startTime
|
|
* @param string $startTime
|
|
|
* @param string $endTime
|
|
* @param string $endTime
|
|
|
* @param int $page
|
|
* @param int $page
|
|
|
* @param int $pageSize
|
|
* @param int $pageSize
|
|
|
* @return int
|
|
* @return int
|
|
|
*/
|
|
*/
|
|
|
- public function syncSealDrugReport(string $startTime, string $endTime, int $page, int $pageSize): int
|
|
|
|
|
|
|
+ public function syncSealDrugReport(bool $isFull, string $startTime, string $endTime = '', int $page = 1, int $pageSize = 20): int
|
|
|
{
|
|
{
|
|
|
$hasMore = true;
|
|
$hasMore = true;
|
|
|
$total = 0;
|
|
$total = 0;
|
|
|
|
|
|
|
|
- Log::channel('sync')->warning("开始全量同步", [
|
|
|
|
|
|
|
+ Log::channel('sync')->warning($isFull ? "开始全量同步" : "开始增量同步", [
|
|
|
'source' => $this->source,
|
|
'source' => $this->source,
|
|
|
'params' => [
|
|
'params' => [
|
|
|
|
|
+ 'is_full' => $isFull,
|
|
|
'start_time' => $startTime,
|
|
'start_time' => $startTime,
|
|
|
'end_time' => $endTime,
|
|
'end_time' => $endTime,
|
|
|
'page' => $page,
|
|
'page' => $page,
|
|
@@ -32,14 +35,61 @@ class SyncSealDrugReportService
|
|
|
],
|
|
],
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
|
|
+ if (empty($endTime)) {
|
|
|
|
|
+ $endTime = Carbon::parse($startTime)->copy()->endOfMonth()->toDateTimeString();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
$queryDrugReportService = app(QueryDrugReportService::class);
|
|
$queryDrugReportService = app(QueryDrugReportService::class);
|
|
|
|
|
|
|
|
while ($hasMore) {
|
|
while ($hasMore) {
|
|
|
try {
|
|
try {
|
|
|
|
|
+ if (Carbon::parse($startTime)->isFuture()) {
|
|
|
|
|
+ Log::channel('sync')->warning("时间大于当前时间,同步终止", [
|
|
|
|
|
+ 'source' => $this->source,
|
|
|
|
|
+ 'params' => [
|
|
|
|
|
+ 'is_full' => $isFull,
|
|
|
|
|
+ 'start_time' => $startTime,
|
|
|
|
|
+ 'end_time' => $endTime,
|
|
|
|
|
+ 'page' => $page,
|
|
|
|
|
+ 'page_size' => $pageSize,
|
|
|
|
|
+ ]
|
|
|
|
|
+ ]);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Log::channel('sync')->info("批次 {$page} 开始处理", [
|
|
|
|
|
+ 'source' => $this->source,
|
|
|
|
|
+ 'params' => [
|
|
|
|
|
+ 'is_full' => $isFull,
|
|
|
|
|
+ 'start_time' => $startTime,
|
|
|
|
|
+ 'end_time' => $endTime,
|
|
|
|
|
+ 'page' => $page,
|
|
|
|
|
+ 'page_size' => $pageSize,
|
|
|
|
|
+ ]
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
// 分批次拉取数据
|
|
// 分批次拉取数据
|
|
|
$data = $queryDrugReportService->querySealDrugReport($startTime, $endTime, $page, $pageSize);
|
|
$data = $queryDrugReportService->querySealDrugReport($startTime, $endTime, $page, $pageSize);
|
|
|
if (empty($data)) {
|
|
if (empty($data)) {
|
|
|
- $hasMore = false;
|
|
|
|
|
|
|
+ Log::channel('sync')->warning("批次 {$page} 没有数据", [
|
|
|
|
|
+ 'source' => $this->source,
|
|
|
|
|
+ 'params' => [
|
|
|
|
|
+ 'is_full' => $isFull,
|
|
|
|
|
+ 'start_time' => $startTime,
|
|
|
|
|
+ 'end_time' => $endTime,
|
|
|
|
|
+ 'page' => $page,
|
|
|
|
|
+ 'page_size' => $pageSize,
|
|
|
|
|
+ ]
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
|
|
+ if ($isFull) {
|
|
|
|
|
+ $startTime = Carbon::parse($startTime)->copy()->addMonth()->startOfMonth()->toDateTimeString();
|
|
|
|
|
+ $endTime = Carbon::parse($endTime)->copy()->addMonth()->endOfMonth()->toDateTimeString();
|
|
|
|
|
+ $page = 1;
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+// $hasMore = false;
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -51,14 +101,13 @@ class SyncSealDrugReportService
|
|
|
'source' => $this->source,
|
|
'source' => $this->source,
|
|
|
'fetch_count' => count($data),
|
|
'fetch_count' => count($data),
|
|
|
'save_count' => $saveCount,
|
|
'save_count' => $saveCount,
|
|
|
- 'total' => $total
|
|
|
|
|
|
|
+ 'total' => $total,
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
// 检查是否还有更多数据
|
|
// 检查是否还有更多数据
|
|
|
$hasMore = (count($data) === $pageSize);
|
|
$hasMore = (count($data) === $pageSize);
|
|
|
|
|
|
|
|
$page++;
|
|
$page++;
|
|
|
- break;
|
|
|
|
|
|
|
|
|
|
// 避免请求过于频繁
|
|
// 避免请求过于频繁
|
|
|
sleep(1);
|
|
sleep(1);
|
|
@@ -67,6 +116,7 @@ class SyncSealDrugReportService
|
|
|
Log::channel('sync')->error('获取批次数据失败', [
|
|
Log::channel('sync')->error('获取批次数据失败', [
|
|
|
'source' => $this->source,
|
|
'source' => $this->source,
|
|
|
'params' => [
|
|
'params' => [
|
|
|
|
|
+ 'is_full' => $isFull,
|
|
|
'start_time' => $startTime,
|
|
'start_time' => $startTime,
|
|
|
'end_time' => $endTime,
|
|
'end_time' => $endTime,
|
|
|
'page' => $page,
|
|
'page' => $page,
|
|
@@ -78,7 +128,7 @@ class SyncSealDrugReportService
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- Log::channel('sync')->warning("全量同步完成", [
|
|
|
|
|
|
|
+ Log::channel('sync')->warning($isFull ? "全量同步完成" : "增量同步完成", [
|
|
|
'source' => $this->source,
|
|
'source' => $this->source,
|
|
|
'total' => $total
|
|
'total' => $total
|
|
|
]);
|
|
]);
|