DrugReportInfoService.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. namespace App\Services;
  3. use App\Models\DrugReportInfo;
  4. use Illuminate\Support\Arr;
  5. use Illuminate\Support\Facades\DB;
  6. class DrugReportInfoService
  7. {
  8. /*public function bulkUpsert(array $data, array $uniqueKeys = ['key1', 'key2'])
  9. {
  10. return DB::transaction(function () use ($data, $uniqueKeys) {
  11. foreach (array_chunk($data, 100) as $chunk) {
  12. DrugReportInfo::upsert(
  13. $chunk,
  14. $uniqueKeys, // 组合唯一键
  15. array_keys($data[0]) // 要更新的字段
  16. );
  17. }
  18. return true;
  19. });
  20. }*/
  21. public function bulkInsert(array $data): bool
  22. {
  23. $data = self::correct($data);
  24. return DrugReportInfo::insert($data);
  25. }
  26. public static function correct(array $data): array
  27. {
  28. return array_map(function ($item) {
  29. return [
  30. 'drug_report_v2_id' => $item['drug_report_v2_id'] ?? '',
  31. 'report_id' => $item['report_id'] ?? '',
  32. 'report_name' => $item['drug_report_name'] ?? '',
  33. 'report_no' => $item['report_no'] ?? '',
  34. 'report_date' => $item['report_date'] ?? '',
  35. 'batch_no' => $item['batch_no'] ?? '',
  36. 'drug_id' => $item['drug_ent_base_info_id'] ?? '',
  37. 'drug_name' => $item['drug_name'] ?? '',
  38. 'prod_code' => $item['prod_code'] ?? '',
  39. 'pkg_spec' => $item['pkg_spec'] ?? '',
  40. 'prepn_spec' => $item['prepn_spec'] ?? '',
  41. 'pkg_ratio_list' => json_encode($item['pkg_ratio_list'] ?? [], JSON_UNESCAPED_UNICODE),
  42. 'sealed_report_url' => $item['sealed_report_url'] ?? '',
  43. 'seal_raw_data' => json_encode($data ?? [], JSON_UNESCAPED_UNICODE),
  44. ];
  45. }, $data);
  46. }
  47. public function getList(array $filters, string $search, array $sort, int $perPage) {
  48. $options = array_merge([
  49. 'search' => $search,
  50. 'searchable' => DrugReportInfo::$searchable,
  51. ], $sort);
  52. $query = DrugReportInfo::query()
  53. ->applyFilters(
  54. $filters,
  55. $options,
  56. );
  57. return $query->paginate($perPage);
  58. }
  59. }