HistoryDrugReportService.php 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. namespace App\Servers;
  3. use App\Models\DrugReportInfo;
  4. use App\Models\DrugReportAss;
  5. use App\Servers\Aliyun\Oss;
  6. use App\Servers\QueryDrugReportService;
  7. use Carbon\Carbon;
  8. use App\Facades\Servers\Logs\Log;
  9. use GuzzleHttp\Client;
  10. class HistoryDrugReportService
  11. {
  12. public function syncDrugReport(string $startTime, string $endTime = '', int $page = 1, int $pageSize = 20, $lastTime=0): int
  13. {
  14. $total = 0;
  15. $QueryDrugReportService = new QueryDrugReportService();
  16. $DrugReportAss = new DrugReportAss();
  17. do {
  18. try {
  19. // 分批次拉取数据
  20. $data = $QueryDrugReportService->drugReportOptHistory($startTime, $endTime, $page, $pageSize);
  21. $total_num = $data['total_num'];
  22. $data = $data['data'];
  23. if (empty($data)) {
  24. break;
  25. }
  26. var_dump($total_num,$startTime, $endTime, $page);
  27. $queryAssData = [];
  28. foreach ($data as $item){
  29. if ($lastTime <= strtotime($item['opt_time'])){
  30. $reportAssList = $DrugReportAss->where([
  31. 'batch_no' => $item['batch_no'],
  32. 'drug_id' => $item['drug_id'],
  33. ])->get(['id', 'batch_no', 'drug_id', 'bill_code', 'bill_detail_id', 'crt_date']);
  34. foreach ($reportAssList as $info){
  35. $assBeginTime = date('Y-m-d H:i:s',($info['crt_date'] - 10));
  36. $assEndTime = date('Y-m-d H:i:s',($info['crt_date'] + 10));
  37. $queryAssList = $QueryDrugReportService->querydrugreportass($assBeginTime, $assEndTime, $page, $pageSize, 0,'1', $info['bill_code'], $info['batch_no'], $info['drug_id']);
  38. if ($queryAssList['total_num'] > 0) {
  39. $queryAssData[] = $queryAssList['data'][0];
  40. }
  41. sleep(1);
  42. }
  43. }
  44. }
  45. // 处理并保存数据
  46. $saveCount = $this->saveDrugReport($queryAssData);
  47. Log::info('drug-report-history','成功同步更新:'.$saveCount);
  48. $total += $saveCount;
  49. // 检查是否还有更多数据
  50. if (count($data) <> $pageSize) {
  51. break;
  52. }
  53. $page++;
  54. } catch (\Exception $e) {
  55. Log::info('drug-report-history','操作历史同步错误', ['err'=>$e->getMessage()]);
  56. break;
  57. }
  58. } while (true);
  59. return $total;
  60. }
  61. /**
  62. * 处理并保存批次数据
  63. * @param string $source
  64. * @param array $data
  65. * @return int
  66. */
  67. protected function saveDrugReport(array $data): int
  68. {
  69. try {
  70. $SyncDrugReportService = new SyncDrugReportService();
  71. $data = $SyncDrugReportService->correctDrugReportAss($data);
  72. return DrugReportAss::bulkUpsert($data);
  73. } catch (\Throwable $e) {
  74. Log::info('history_drug_report', '处理数据异常', ['data'=>$data, 'err'=>$e->getMessage()]);
  75. return 0;
  76. }
  77. }
  78. }