fix some bugs 3
This commit is contained in:
@@ -160,18 +160,70 @@ class PargarInboundWalletService
|
||||
}
|
||||
|
||||
// حتی اگر همه skip شدند، دسته را مصرفشده علامت بزن تا دوباره نیاید
|
||||
$data['wallet_batch_applied'] = true;
|
||||
$data['wallet_batch_applied_at'] = now()->toDateTimeString();
|
||||
$batch->data = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
|
||||
if (is_string($batch->desc) && ! str_contains($batch->desc, '[اعمالشده]')) {
|
||||
$batch->desc = '[اعمالشده] '.$batch->desc;
|
||||
// خطای ذخیره نباید کل sync را بشکند (mande باید بعداً اجرا شود)
|
||||
try {
|
||||
$this->markDocumentBatchApplied($batch, $data);
|
||||
} catch (\Throwable $e) {
|
||||
$result['errors'][] = 'علامت دسته #'.$batch->id.' ناموفق: '.$e->getMessage();
|
||||
Log::error('Pargar markDocumentBatchApplied failed', [
|
||||
'log_id' => $batch->id,
|
||||
'customer_id' => $customer->id,
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
$batch->save();
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* علامت مصرف دسته — بدون Pretty-Print؛ در صورت بزرگ بودن payload فشردهسازی میکند.
|
||||
*
|
||||
* @param array<string, mixed> $data
|
||||
*/
|
||||
private function markDocumentBatchApplied(PargarSyncLog $batch, array $data): void
|
||||
{
|
||||
$data['wallet_batch_applied'] = true;
|
||||
$data['wallet_batch_applied_at'] = now()->toDateTimeString();
|
||||
|
||||
if (is_string($batch->desc) && ! str_contains($batch->desc, '[اعمالشده]')) {
|
||||
$batch->desc = mb_substr('[اعمالشده] '.$batch->desc, 0, 250);
|
||||
}
|
||||
|
||||
$encoded = json_encode($data, JSON_UNESCAPED_UNICODE);
|
||||
if ($encoded === false) {
|
||||
throw new \RuntimeException('json_encode failed for pargar batch #'.$batch->id);
|
||||
}
|
||||
|
||||
$batch->data = $encoded;
|
||||
|
||||
try {
|
||||
$batch->save();
|
||||
} catch (\Throwable $e) {
|
||||
// ستون هنوز TEXT باشد یا payload خیلی بزرگ — stub کوچک تا دسته دوباره نیاید
|
||||
$batch->data = $this->encodeAppliedBatchCompact($data);
|
||||
$batch->save();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, mixed> $data
|
||||
*/
|
||||
private function encodeAppliedBatchCompact(array $data): string
|
||||
{
|
||||
$transactions = is_array($data['transactions'] ?? null) ? $data['transactions'] : [];
|
||||
|
||||
return (string) json_encode([
|
||||
'accountName' => $data['accountName'] ?? null,
|
||||
'accountId' => $data['accountId'] ?? null,
|
||||
'transactions_count' => count($transactions),
|
||||
'transactions_fp' => hash('sha256', (string) json_encode($transactions, JSON_UNESCAPED_UNICODE)),
|
||||
'wallet_batch_applied' => true,
|
||||
'wallet_batch_applied_at' => $data['wallet_batch_applied_at'] ?? now()->toDateTimeString(),
|
||||
'payload_compacted' => true,
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, mixed> $tx
|
||||
* @return 'applied'|'skipped'|string error
|
||||
@@ -256,7 +308,7 @@ class PargarInboundWalletService
|
||||
|
||||
if (abs($goldDiff) < 0.01 && abs($rialDiff) < 1) {
|
||||
$data['wallet_applied_from_mande'] = true;
|
||||
$log->data = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
|
||||
$log->data = json_encode($data, JSON_UNESCAPED_UNICODE);
|
||||
$log->save();
|
||||
|
||||
return ['applied' => false, 'message' => 'مانده با پرگار یکسان است'];
|
||||
@@ -287,7 +339,7 @@ class PargarInboundWalletService
|
||||
$data['applied_gold_delta'] = $goldDiff;
|
||||
$data['applied_rial_delta'] = $rialDiff;
|
||||
$data['applied_at'] = now()->toDateTimeString();
|
||||
$log->data = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
|
||||
$log->data = json_encode($data, JSON_UNESCAPED_UNICODE);
|
||||
$log->desc = 'اعمال ماندهٔ پرگار روی کیف اپ';
|
||||
$log->save();
|
||||
|
||||
@@ -368,7 +420,7 @@ class PargarInboundWalletService
|
||||
'skip_reason' => $skipReason,
|
||||
'gold_delta' => $goldDelta,
|
||||
'rial_delta' => $rialDelta,
|
||||
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT),
|
||||
], JSON_UNESCAPED_UNICODE),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user