Prescription.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <?php
  2. namespace App\Repositories\Models\TCM;
  3. use App\Repositories\Models\Model;
  4. use App\Services\CombinationService;
  5. use Prettus\Repository\Contracts\Transformable;
  6. use Prettus\Repository\Traits\TransformableTrait;
  7. /**
  8. * Class Prescription.
  9. *
  10. * @package namespace App\Repositories\Models\TCM;
  11. */
  12. class Prescription extends Model implements Transformable
  13. {
  14. use TransformableTrait;
  15. protected $casts = ['drugs' => 'json'];
  16. protected static function booted()
  17. {
  18. self::language();
  19. static::saved(function (Prescription $prescription) {
  20. Recipels::query()->where('prescription_id', $prescription->id)->delete();
  21. $data = [];
  22. $prescription->load(['patient', 'medical_record']);
  23. foreach ($prescription->drugs as $drug) {
  24. $d = [
  25. 'patient_id' => $prescription->patient_id,
  26. 'name' => $prescription->patient->name,
  27. 'sex' => $prescription->patient->sex,
  28. 'age' => $prescription->patient->age,
  29. 'medical_record_id' => $prescription->medical_record_id,
  30. 'chinese_tra_diagnosis' => $prescription->medical_record ? $prescription->medical_record->chinese_tra_diagnosis : '--',
  31. 'prescription_id' => $prescription->id,
  32. 'drug_id' => isset($drug['drug']) ? $drug['drug']['id'] : 0,
  33. 'drug' => $drug['name'],
  34. 'dose' => $drug['dose'],
  35. 'unit' => $drug['unit'],
  36. 'use' => isset($drug['use']) ? (int)$drug['use'] : 0,
  37. 'use_name' => isset($drug['use_name']) ? $drug['use_name'] : '',
  38. 'admin_id' => $prescription->admin_id
  39. ];
  40. $data[] = $d;
  41. }
  42. Recipels::query()->insert($data);
  43. //组合分析
  44. Combinations::query()->where('prescription_id', $prescription->id)->delete();
  45. $names = array_column($prescription->drugs, 'name');
  46. $combinations = CombinationService::combinationALL($names);
  47. $cd = [];
  48. foreach ($combinations as $combination) {
  49. $cd[] = [
  50. 'name' => '-' . arr2str($combination, '-') . '-',
  51. 'count' => count($combination),
  52. 'prescription_id' => $prescription->id,
  53. 'admin_id' => $prescription->admin_id
  54. ];
  55. }
  56. Combinations::query()->insert($cd);
  57. });
  58. static::deleted(function (Prescription $prescription) {
  59. Recipels::query()->where('prescription_id', $prescription->id)->delete();
  60. Combinations::query()->where('prescription_id', $prescription->id)->delete();
  61. });
  62. }
  63. const EAT_TJ = 0;
  64. const EAT_WJ = 1;
  65. public static $eatMap = [
  66. self::EAT_TJ => '汤剂',
  67. self::EAT_WJ => '丸剂'
  68. ];
  69. const USE_XJ = 0;
  70. const USE_HX = 1;
  71. const USE_BJ = 2;
  72. const USE_LJ = 3;
  73. const USE_BK = 4;
  74. const USE_DS = 5;
  75. const USE_YH = 6;
  76. const USE_PF = 7;
  77. const USE_CF = 8;
  78. const USE_JTDS = 9;
  79. const USE_WY = 10;
  80. const USE_DSXJ = 11;
  81. const USE_YMCF = 12;
  82. const USE_BXJ = 13;
  83. const USE_BHX = 14;
  84. const USE_D = 15;
  85. const USE_TJ = 16;
  86. const USE_SX = 17;
  87. const USE_JX = 18;
  88. const USE_Z = 19;
  89. const USE_XX = 20;
  90. const USE_ZY = 21;
  91. const USE_JF = 22;
  92. const USE_GC = 23;
  93. const USE_SXHF = 24;
  94. const USE_SQF = 25;
  95. public static $useMap = [
  96. self::USE_XJ => '先煎',
  97. self::USE_HX => '后下',
  98. self::USE_BJ => '包煎',
  99. self::USE_LJ => '另煎',
  100. self::USE_BK => '避开',
  101. self::USE_DS => '打碎',
  102. self::USE_YH => '烊化',
  103. self::USE_PF => '泡服',
  104. self::USE_CF => '冲服',
  105. self::USE_JTDS => '煎汤代水',
  106. self::USE_WY => '外用',
  107. self::USE_DSXJ => '打碎先煎',
  108. self::USE_YMCF => '研磨冲服',
  109. self::USE_BXJ => '包先煎',
  110. self::USE_BHX => '包后下',
  111. self::USE_D => '捣',
  112. self::USE_TJ => '同煎',
  113. self::USE_SX => '水洗',
  114. self::USE_JX => '酒洗',
  115. self::USE_Z => '炙',
  116. self::USE_XX => '熏洗',
  117. self::USE_ZY => '坐浴',
  118. self::USE_JF => '嚼服',
  119. self::USE_GC => '灌肠',
  120. self::USE_SXHF => '舌下含服',
  121. self::USE_SQF => '睡前服',
  122. ];
  123. const DRUG_TYPE_YP = 0;
  124. const DRUG_TYPE_KL = 1;
  125. public static $drugTypeMap = [
  126. self::DRUG_TYPE_YP => '饮片',
  127. self::DRUG_TYPE_KL => "颗粒"
  128. ];
  129. const ADVICE_TYPE_NF = 0;
  130. const ADVICE_TYPE_WF = 1;
  131. const ADVICE_TYPE_GC = 2;
  132. public static $adviceTypeMap = [
  133. self::ADVICE_TYPE_NF => '内服',
  134. self::ADVICE_TYPE_WF => '外付',
  135. self::ADVICE_TYPE_GC => '灌肠',
  136. ];
  137. const FREQUENCY_d1_1 = 0;
  138. const FREQUENCY_d1_2 = 1;
  139. const FREQUENCY_d1_3 = 2;
  140. const FREQUENCY_gd1_1 = 3;
  141. const FREQUENCY_w1_1 = 4;
  142. const FREQUENCY_b = 5;
  143. const FREQUENCY_gw1_1 = 6;
  144. const FREQUENCY_mw_1 = 7;
  145. const FREQUENCY_lj = 8;
  146. const FREQUENCY_h6_1 = 9;
  147. const FREQUENCY_h8_1 = 10;
  148. const FREQUENCY_h12_1 = 11;
  149. const FREQUENCY_d1_6 = 12;
  150. const FREQUENCY_z1_1 = 13;
  151. public static $frequencyMap = [
  152. self::FREQUENCY_d1_1 => '每天一次',
  153. self::FREQUENCY_d1_2 => '每天二次',
  154. self::FREQUENCY_d1_3 => '每天三次',
  155. self::FREQUENCY_gd1_1 => '隔日一次',
  156. self::FREQUENCY_w1_1 => '每周一次',
  157. self::FREQUENCY_b => '必要时',
  158. self::FREQUENCY_gw1_1 => '隔周一次',
  159. self::FREQUENCY_mw_1 => '每晚一次',
  160. self::FREQUENCY_lj => '立即',
  161. self::FREQUENCY_h6_1 => '每6小时一次',
  162. self::FREQUENCY_h8_1 => '每8小时一次',
  163. self::FREQUENCY_h12_1 => '每12小时一次',
  164. self::FREQUENCY_d1_6 => '每天六次',
  165. self::FREQUENCY_z1_1 => '每早一次',
  166. ];
  167. const USE_UNIT_ML = 0;
  168. const USE_UNIT_G = 1;
  169. public static $useUnitMap = [
  170. self::USE_UNIT_ML => 'ml',
  171. self::USE_UNIT_G => 'g'
  172. ];
  173. protected $table = 'tcm_prescriptions';
  174. /**
  175. * The attributes that are mass assignable.
  176. *
  177. * @var array
  178. */
  179. protected $guarded = [];
  180. public function medical_record()
  181. {
  182. return $this->belongsTo(MedicalRecord::class);
  183. }
  184. public function patient()
  185. {
  186. return $this->belongsTo(Patient::class);
  187. }
  188. }