DrugReportInfo.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. namespace App\Models;
  3. use App\Traits\Filterable;
  4. use Illuminate\Database\Eloquent\Factories\HasFactory;
  5. use Illuminate\Database\Eloquent\Model;
  6. use Illuminate\Support\Facades\DB;
  7. /**
  8. * App\Models\DrugReportInfo
  9. *
  10. * @property int $id
  11. * @property string $drug_report_v2_id 药检报告ID(来源于querysealdrugreport)
  12. * @property string $drug_report_id 报告ID(来源于querydrugreport)
  13. * @property string $report_id 报告ID(来源于querysealdrugreport)
  14. * @property string $report_name 报告名称
  15. * @property string $report_no 报告编号
  16. * @property string $report_date 报告日期
  17. * @property string $batch_no 批次号
  18. * @property string $drug_id 药品ID
  19. * @property string $drug_name 药品名称
  20. * @property string $prod_code 药品子类编码
  21. * @property string $pkg_spec 包装规格
  22. * @property string $prepn_spec 制剂规格
  23. * @property string $prepn_type_desc 剂型
  24. * @property array|null $pkg_ratio_list 包装比例
  25. * @property int $bill_type 单据类型
  26. * @property string $bill_id 单据ID
  27. * @property string $bill_detail_id 单据明细ID
  28. * @property string $bill_time 单据时间
  29. * @property string $bill_code 单据编码
  30. * @property string $produce_date 生产日期
  31. * @property string $produce_ent_id 生产企业ID
  32. * @property string $produce_ent_name 生产企业
  33. * @property string $ass_ref_ent_id 委托企业ID
  34. * @property string $from_ref_ent_id 发货企业ID
  35. * @property string $from_ent_name 发货企业
  36. * @property string $sealed_report_url 盖章报告URL
  37. * @property array|null $raw_data 待签收原始数据(来源于querydrugreport)
  38. * @property array|null $seal_raw_data 已签收原始数据(来源于querysealdrugreport)
  39. * @property int $is_sign 是否签收(1-未签收、2-已签收)——定制
  40. * @property int $is_seal 是否盖章(1-未盖章、2-已盖章)——定制
  41. * @property \Illuminate\Support\Carbon $create_time 创建时间
  42. * @property \Illuminate\Support\Carbon $update_time 更新时间
  43. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo applyFilters(array $filters = [], array $options = [])
  44. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo newModelQuery()
  45. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo newQuery()
  46. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo query()
  47. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereAssRefEntId($value)
  48. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereBatchNo($value)
  49. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereBillCode($value)
  50. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereBillDetailId($value)
  51. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereBillId($value)
  52. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereBillTime($value)
  53. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereBillType($value)
  54. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereCreateTime($value)
  55. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereDrugId($value)
  56. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereDrugName($value)
  57. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereDrugReportId($value)
  58. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereDrugReportV2Id($value)
  59. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereFromEntName($value)
  60. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereFromRefEntId($value)
  61. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereId($value)
  62. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereIsSeal($value)
  63. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereIsSign($value)
  64. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo wherePkgRatioList($value)
  65. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo wherePkgSpec($value)
  66. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo wherePrepnSpec($value)
  67. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo wherePrepnTypeDesc($value)
  68. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereProdCode($value)
  69. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereProduceDate($value)
  70. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereProduceEntId($value)
  71. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereProduceEntName($value)
  72. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereRawData($value)
  73. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereReportDate($value)
  74. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereReportId($value)
  75. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereReportName($value)
  76. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereReportNo($value)
  77. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereSealRawData($value)
  78. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereSealedReportUrl($value)
  79. * @method static \Illuminate\Database\Eloquent\Builder|DrugReportInfo whereUpdateTime($value)
  80. * @mixin \Eloquent
  81. */
  82. class DrugReportInfo extends Model
  83. {
  84. use HasFactory, Filterable;
  85. protected $table = 'drug_report_info';
  86. protected $guarded = [];
  87. const CREATED_AT = 'create_time';
  88. const UPDATED_AT = 'update_time';
  89. protected $casts = [
  90. 'pkg_ratio_list' => 'array',
  91. 'raw_data' => 'array',
  92. 'seal_raw_data' => 'array',
  93. ];
  94. /**
  95. * @var array|string[] 定义可搜索字段(可选,可在调用时覆盖)
  96. */
  97. public static $searchable = ['id'];
  98. /**
  99. * 批量更新或插入
  100. * @param array $data
  101. * @param array $uniqueKeys
  102. * @return int
  103. * @throws \Throwable
  104. */
  105. public static function bulkUpsert(array $data, array $uniqueKeys = ['batch_no', 'drug_id']): int
  106. {
  107. if (empty($data)) {
  108. return 0;
  109. }
  110. return DB::transaction(function () use ($data, $uniqueKeys) {
  111. $count = 0;
  112. foreach (array_chunk($data, 100) as $chunk) {
  113. self::upsert(
  114. $chunk,
  115. $uniqueKeys, // 组合唯一键
  116. array_keys($data[0]) // 要更新的字段
  117. );
  118. $count += count($chunk);
  119. }
  120. return $count;
  121. });
  122. }
  123. }