752 lines
29 KiB
PHP
752 lines
29 KiB
PHP
<?php
|
|
|
|
namespace service\modules\v1\controllers;
|
|
|
|
use common\core\BaseAppController;
|
|
use common\helpers\FuncHelper;
|
|
use common\models\oldDb\PackageMethod;
|
|
use common\models\oldDb\ChineseRepice;
|
|
use common\models\oldDb\Drug;
|
|
use common\models\oldDb\GranularRepice;
|
|
use common\models\oldDb\ProcessRule;
|
|
use common\models\oldDb\ProcessRuleNote;
|
|
use common\models\oldDb\Prescription;
|
|
use common\models\oldDb\PrescriptionChinese;
|
|
use common\models\oldDb\PrescriptionGranular;
|
|
use common\models\oldDb\PrescriptionWest;
|
|
use common\models\oldDb\WestRepice;
|
|
use common\modelsgii\oldDb\ChineseMedicine;
|
|
use common\services\PrescriptionService;
|
|
use yii\base\Exception;
|
|
use yii\helpers\Json;
|
|
|
|
/**
|
|
* @doc-module 处方详情
|
|
*/
|
|
class PrescripDetailController extends BaseAppController
|
|
{
|
|
/**
|
|
* 处方列表
|
|
*/
|
|
public function actionList(){
|
|
$post = \YII::$app->request->post();
|
|
$query = Prescription::find()->alias('p')->with('userPatient')->where([
|
|
'p.su_id' => \Yii::$app->user->identity->id,
|
|
'p.is_deleted' => 0,
|
|
'p.store_id' => $post['store_id']
|
|
])->orderBy('p.created_at DESC');
|
|
$this->field = [
|
|
Prescription::class => [
|
|
'id','up_id','prescription_type', 'type','is_pay','refund_status','prescription_no','status','created_at',
|
|
'patient' => function ($model) {
|
|
return [
|
|
'id' => $model->userPatient['id'],
|
|
'name' =>$model->userPatient['name'],
|
|
'sex' => $model->userPatient['sex'],
|
|
'age' => FuncHelper::getAgeFromIdNo($model->userPatient['id_card']),
|
|
];
|
|
}
|
|
]
|
|
];
|
|
|
|
$patient_name = $post['patient_name']?? '';
|
|
$query->joinWith(['userPatient' => function ($q) use ($patient_name) {
|
|
$q->alias('up');
|
|
//搜索就诊人姓名
|
|
if (!empty($patient_name)) {
|
|
$q->andWhere(['like', 'up.name', $patient_name]);
|
|
}
|
|
}]);
|
|
|
|
if($post['prescription_no']?? false){
|
|
$query->andWhere(['p.prescription_no'=> $post['prescription_no']]);
|
|
}
|
|
if($post['status']?? false ){
|
|
$query->andWhere(['p.status'=> $post['status']]);
|
|
}elseif($post['status']==='0'){
|
|
$query->andWhere(['p.status'=> $post['status']]);
|
|
}else{
|
|
$query->andWhere(['p.status'=> [0,1,2]]);
|
|
}
|
|
if($post['type']?? false){
|
|
$query->andWhere(['p.type'=>$post['type']]);
|
|
}
|
|
if($post['prescription_type']?? false){
|
|
$query->andWhere(['p.prescription_type'=>$post['prescription_type']]);
|
|
}
|
|
|
|
$post['start_time'] = $post['start_time']?? false;
|
|
$post['end_time'] = $post['end_time']?? false;
|
|
if($post['start_time']&&!$post['end_time']){
|
|
$query->andWhere(['>=','p.created_at',strtotime($post['start_time'])]);
|
|
}
|
|
|
|
if(!$post['start_time']&&$post['end_time']){
|
|
$query->andWhere(['<=','p.created_at',strtotime($post['end_time'])]);
|
|
}
|
|
|
|
if($post['start_time']&&$post['end_time']){
|
|
$query->andWhere(['between','p.created_at',strtotime($post['start_time']),strtotime($post['end_time'])]);
|
|
}
|
|
|
|
return $this->create($query, \Yii::$app->request->post());
|
|
}
|
|
|
|
/**
|
|
* 处方详情
|
|
*/
|
|
public function actionDetail(){
|
|
$post = \Yii::$app->request->post();
|
|
$this->requestValidate($post, [
|
|
['prescription_id','required'],
|
|
['store_id', 'required']
|
|
]);
|
|
return (new PrescriptionService())->detail('', $post['prescription_id']);
|
|
}
|
|
|
|
|
|
/**
|
|
* 开处方-常用方
|
|
*/
|
|
public function actionCommonUse()
|
|
{
|
|
return $this->commonUseResponseLikeXkApi(\Yii::$app->request->post());
|
|
}
|
|
|
|
/**
|
|
* @doc-name 开处方-常用方详情(中药)
|
|
* @doc-param int id 处方id
|
|
*/
|
|
public function actionCommonChinese()
|
|
{
|
|
return $this->commonChineseDetailLikeXkApi(\Yii::$app->request->post());
|
|
}
|
|
|
|
/**
|
|
* @doc-name 开处方-常用方详情(颗粒药)
|
|
* @doc-param int id 处方id
|
|
*/
|
|
public function actionCommonGranular()
|
|
{
|
|
return $this->commonGranularDetailLikeXkApi(\Yii::$app->request->post());
|
|
}
|
|
|
|
|
|
/**
|
|
* @doc-name 开处方-常用方详情(西药)
|
|
* @doc-param int id 处方id
|
|
*/
|
|
public function actionCommonWest()
|
|
{
|
|
return $this->commonWestDetailLikeXkApi(\Yii::$app->request->post());
|
|
}
|
|
|
|
protected function commonUseResponseLikeXkApi(array $post): array
|
|
{
|
|
$this->requestValidate($post, [
|
|
['store_id', 'required'],
|
|
]);
|
|
$storeId = (int) $post['store_id'];
|
|
// $checkPrice = !isset($post['check_price']) || (int) $post['check_price'] === 1;
|
|
$checkPrice = 1;
|
|
|
|
$chinese = PrescriptionChinese::find()->where([
|
|
'type' => 2,
|
|
'store_id' => $storeId,
|
|
])->andWhere(['su_id' => \Yii::$app->user->identity->id])->asArray()->all();
|
|
$west = PrescriptionWest::find()->where([
|
|
'type' => 2,
|
|
'store_id' => $storeId,
|
|
])->andWhere(['su_id' => \Yii::$app->user->identity->id])->asArray()->all();
|
|
$granular = PrescriptionGranular::find()->where([
|
|
'type' => 2,
|
|
'store_id' => $storeId,
|
|
])->andWhere(['su_id' => \Yii::$app->user->identity->id])->asArray()->all();
|
|
if (!$chinese && !$west && !$granular) {
|
|
throw new Exception('没有常用方');
|
|
}
|
|
|
|
$chineseRepice = [];
|
|
foreach ($chinese as &$chineseRow) {
|
|
$ids = array_filter(explode(',', (string) $chineseRow['cr_ids']));
|
|
$recipes = ChineseRepice::find()->where(['in', 'id', $ids])->asArray()->all();
|
|
$syncResult = $this->syncChineseCommonRecipesWithStorePrices($storeId, $chineseRow, $recipes, $checkPrice);
|
|
$recipes = $syncResult['recipes'];
|
|
$chineseRow['price_adjusted'] = $syncResult['price_adjusted'] ? 1 : 0;
|
|
if (!empty($recipes[0])) {
|
|
$this->attachChineseMetaForList($chineseRow, $recipes[0]);
|
|
}
|
|
foreach ($recipes as &$recipeRow) {
|
|
$recipeRow = $this->normalizeChineseRecipeRow($recipeRow);
|
|
}
|
|
unset($recipeRow);
|
|
$chineseRepice[] = $recipes;
|
|
}
|
|
unset($chineseRow);
|
|
|
|
$westRepice = [];
|
|
foreach ($west as $westRow) {
|
|
$ids = array_filter(explode(',', (string) $westRow['wr_ids']));
|
|
$recipes = WestRepice::find()->where(['in', 'id', $ids])
|
|
->with(['usetime', 'usetype', 'frequency', 'westUnit'])
|
|
->asArray()->all();
|
|
$westRepice[] = $this->buildCommonWestRecipeRowsLikeXkApi($recipes);
|
|
}
|
|
|
|
$granularRepice = [];
|
|
foreach ($granular as $granularRow) {
|
|
$ids = array_filter(explode(',', (string) $granularRow['gr_ids']));
|
|
$recipes = GranularRepice::find()->where(['in', 'id', $ids])->asArray()->all();
|
|
$granularRepice[] = $this->buildCommonGranularRecipeRowsLikeXkApi($recipes);
|
|
}
|
|
|
|
return [
|
|
'chin_prescription' => $chinese,
|
|
'chinese' => $chineseRepice,
|
|
'west_prescription' => $west,
|
|
'west' => $westRepice,
|
|
'granular_prescription' => $granular,
|
|
'granular' => $granularRepice,
|
|
];
|
|
}
|
|
|
|
protected function commonChineseDetailLikeXkApi(array $post): array
|
|
{
|
|
$this->requestValidate($post, [
|
|
['id', 'required'],
|
|
['store_id', 'required'],
|
|
]);
|
|
$chinese = PrescriptionChinese::find()->where([
|
|
'id' => $post['id'],
|
|
'store_id' => $post['store_id'],
|
|
])->andWhere(['type' => 2])->asArray()->one();
|
|
if (!$chinese) {
|
|
throw new Exception('没有该处方');
|
|
}
|
|
|
|
$ids = array_filter(explode(',', (string) $chinese['cr_ids']));
|
|
$recipes = ChineseRepice::find()->where(['in', 'id', $ids])->asArray()->all();
|
|
$syncResult = $this->syncChineseCommonRecipesWithStorePrices((int) $chinese['store_id'], $chinese, $recipes, true);
|
|
$recipes = $syncResult['recipes'];
|
|
foreach ($recipes as &$recipeRow) {
|
|
$recipeRow = $this->normalizeChineseRecipeRow($recipeRow);
|
|
}
|
|
unset($recipeRow);
|
|
|
|
return $recipes;
|
|
}
|
|
|
|
protected function commonGranularDetailLikeXkApi(array $post): array
|
|
{
|
|
$this->requestValidate($post, [
|
|
['id', 'required'],
|
|
['store_id', 'required'],
|
|
]);
|
|
$granular = PrescriptionGranular::find()->where([
|
|
'id' => $post['id'],
|
|
'store_id' => $post['store_id'],
|
|
])->andWhere(['type' => 2])->asArray()->one();
|
|
if (!$granular) {
|
|
throw new Exception('没有该处方');
|
|
}
|
|
$ids = array_filter(explode(',', (string) $granular['gr_ids']));
|
|
$recipes = GranularRepice::find()->where(['in', 'id', $ids])->asArray()->all();
|
|
return $this->buildCommonGranularRecipeRowsLikeXkApi($recipes);
|
|
}
|
|
|
|
protected function commonWestDetailLikeXkApi(array $post): array
|
|
{
|
|
$this->requestValidate($post, [
|
|
['id', 'required'],
|
|
['store_id', 'required'],
|
|
]);
|
|
$west = PrescriptionWest::find()->where([
|
|
'id' => $post['id'],
|
|
'store_id' => $post['store_id'],
|
|
])->andWhere(['type' => 2])->asArray()->one();
|
|
if (!$west) {
|
|
throw new Exception('没有该处方');
|
|
}
|
|
$ids = array_filter(explode(',', (string) $west['wr_ids']));
|
|
$recipes = WestRepice::find()->where(['in', 'id', $ids])
|
|
->with(['usetime', 'usetype', 'frequency', 'westUnit'])
|
|
->asArray()->all();
|
|
return $this->buildCommonWestRecipeRowsLikeXkApi($recipes);
|
|
}
|
|
|
|
protected function syncChineseCommonRecipesWithStorePrices(int $storeId, array $prescriptionRow, array $recipeRows, bool $persist): array
|
|
{
|
|
$priceAdjusted = false;
|
|
if (empty($recipeRows)) {
|
|
return ['recipes' => $recipeRows, 'price_adjusted' => false];
|
|
}
|
|
|
|
$time = time();
|
|
$transaction = \Yii::$app->db->beginTransaction();
|
|
try {
|
|
foreach ($recipeRows as &$recipeRow) {
|
|
$contentList = Json::decode($recipeRow['content'] ?? '', true);
|
|
if (!is_array($contentList)) {
|
|
continue;
|
|
}
|
|
$cmIds = array_values(array_filter(explode(',', (string) ($recipeRow['cm_id'] ?? ''))));
|
|
$dosage = max(1, (int) ($recipeRow['dosage'] ?? 1));
|
|
$drugTotal = 0.0;
|
|
$recipeChanged = false;
|
|
foreach ($contentList as $idx => &$drugRow) {
|
|
$drugRow = $this->normalizeChineseDrugRow($drugRow);
|
|
$drugId = (int) ($drugRow['drug_id'] ?? $drugRow['id'] ?? 0);
|
|
$price = (float) ($drugRow['price'] ?? 0);
|
|
$buyPrice = (float) ($drugRow['buy_price'] ?? 0);
|
|
if ($drugId > 0) {
|
|
$drug = Drug::find()->alias('d')->select('d.*')->where([
|
|
'd.id' => $drugId,
|
|
])->joinWith(['drugStoreDrug dsd' => function ($q) {
|
|
$q->andWhere(['dsd.status' => 2]);
|
|
}])->joinWith(['drugStoreRelation dsr' => function ($q) use ($storeId) {
|
|
$q->andWhere(['dsr.store_id' => $storeId]);
|
|
$q->andWhere(['dsr.status' => 2]);
|
|
}])->asArray()->one();
|
|
if ($drug && !empty($drug['drugStoreRelation'])) {
|
|
$latestPrice = (float) $drug['drugStoreRelation']['price'];
|
|
$latestBuyPrice = (float) $drug['drugStoreRelation']['buy_price'];
|
|
if ($latestPrice !== $price || $latestBuyPrice !== $buyPrice) {
|
|
$priceAdjusted = true;
|
|
$recipeChanged = true;
|
|
}
|
|
$price = $latestPrice;
|
|
$buyPrice = $latestBuyPrice;
|
|
$drugRow['price'] = $latestPrice;
|
|
$drugRow['buy_price'] = $latestBuyPrice;
|
|
if ($persist && isset($cmIds[$idx]) && is_numeric($cmIds[$idx])) {
|
|
ChineseMedicine::updateAll([
|
|
'price' => $latestPrice,
|
|
'buy_price' => $latestBuyPrice,
|
|
'updated_at' => $time,
|
|
], ['id' => (int) $cmIds[$idx]]);
|
|
}
|
|
}
|
|
}
|
|
$drugTotal += (float) ($drugRow['number'] ?? 0) * $price * $dosage;
|
|
}
|
|
unset($drugRow);
|
|
|
|
if ($persist && $recipeChanged) {
|
|
$recipeRow['content'] = Json::encode($contentList);
|
|
$recipeRow['total_price'] = round($drugTotal, 4);
|
|
ChineseRepice::updateAll([
|
|
'content' => $recipeRow['content'],
|
|
'total_price' => $recipeRow['total_price'],
|
|
'updated_at' => $time,
|
|
], ['id' => $recipeRow['id']]);
|
|
} else {
|
|
$recipeRow['content'] = Json::encode($contentList);
|
|
$recipeRow['total_price'] = round($drugTotal, 4);
|
|
}
|
|
}
|
|
unset($recipeRow);
|
|
|
|
if ($persist && $priceAdjusted && !empty($prescriptionRow['id'])) {
|
|
PrescriptionChinese::updateAll(['updated_at' => $time], ['id' => $prescriptionRow['id']]);
|
|
}
|
|
$transaction->commit();
|
|
return ['recipes' => $recipeRows, 'price_adjusted' => $priceAdjusted];
|
|
} catch (\Throwable $e) {
|
|
$transaction->rollBack();
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
protected function normalizeChineseRecipeRow(array $recipeRow): array
|
|
{
|
|
$contentList = Json::decode($recipeRow['content'] ?? '', true);
|
|
if (is_array($contentList)) {
|
|
foreach ($contentList as &$drugRow) {
|
|
$drugRow = $this->normalizeChineseDrugRow($drugRow);
|
|
}
|
|
unset($drugRow);
|
|
$recipeRow['content'] = Json::encode($contentList);
|
|
}
|
|
return $recipeRow;
|
|
}
|
|
|
|
protected function normalizeChineseDrugRow(array $drugRow): array
|
|
{
|
|
$name = $drugRow['drug_name'] ?? ($drugRow['name'] ?? '');
|
|
$drugRow['name'] = $name;
|
|
$drugRow['drug_name'] = $name;
|
|
if (isset($drugRow['way_id']) && !isset($drugRow['order'])) {
|
|
$drugRow['order'] = $drugRow['way_id'];
|
|
}
|
|
if (isset($drugRow['order']) && !isset($drugRow['way_id'])) {
|
|
$drugRow['way_id'] = $drugRow['order'];
|
|
}
|
|
if (!isset($drugRow['unit']) || empty($drugRow['unit'])) {
|
|
$drugRow['unit'] = ['name' => 'g'];
|
|
}
|
|
return $drugRow;
|
|
}
|
|
|
|
protected function attachChineseMetaForList(array &$prescriptionRow, array $firstRecipeRow): void
|
|
{
|
|
$prescriptionRow['rule_type'] = (int) ($firstRecipeRow['deployment'] ?? 1);
|
|
$prescriptionRow['dosage'] = (int) ($firstRecipeRow['dosage'] ?? 7);
|
|
$prescriptionRow['day_dosage'] = (int) ($firstRecipeRow['consumption'] ?? 2);
|
|
$prescriptionRow['process_rule_id'] = (int) ($firstRecipeRow['process_rule_id'] ?? 0);
|
|
$prescriptionRow['process_rule_note'] = $firstRecipeRow['process_rule_note'] ?? '';
|
|
$prescriptionRow['package_method_id'] = (int) ($firstRecipeRow['package_method_id'] ?? 0);
|
|
|
|
if ($prescriptionRow['process_rule_id']) {
|
|
$processRule = ProcessRule::findOne($prescriptionRow['process_rule_id']);
|
|
$prescriptionRow['process_rule_name'] = $processRule ? $processRule->name : '';
|
|
}
|
|
if ($prescriptionRow['process_rule_note']) {
|
|
$processRuleNote = ProcessRuleNote::find()->where(['note' => $prescriptionRow['process_rule_note']])->one();
|
|
$prescriptionRow['process_rule_note_name'] = $processRuleNote ? $processRuleNote->note : $prescriptionRow['process_rule_note'];
|
|
}
|
|
if ($prescriptionRow['package_method_id']) {
|
|
$packageMethod = PackageMethod::findOne($prescriptionRow['package_method_id']);
|
|
$prescriptionRow['package_method_name'] = $packageMethod ? $packageMethod->name : '';
|
|
}
|
|
}
|
|
|
|
protected function buildCommonWestRecipeRowsLikeXkApi(array $recipeRows): array
|
|
{
|
|
foreach ($recipeRows as &$recipeRow) {
|
|
$content = Json::decode($recipeRow['content'] ?? '', true);
|
|
if (is_array($content)) {
|
|
$recipeRow['drug_name'] = $content['drug_name'] ?? '';
|
|
$recipeRow['drug_id'] = $content['id'] ?? 0;
|
|
$recipeRow['image'] = $content['image'] ?? '';
|
|
$recipeRow['price'] = $content['price'] ?? ($recipeRow['total_price'] ?? 0);
|
|
}
|
|
$recipeRow['frequency_id'] = $recipeRow['f_id'] ?? 0;
|
|
$recipeRow['unit_id'] = $recipeRow['wu_id'] ?? 0;
|
|
$recipeRow['number'] = $recipeRow['grain_number'] ?? ($recipeRow['number'] ?? 1);
|
|
}
|
|
unset($recipeRow);
|
|
return $recipeRows;
|
|
}
|
|
|
|
protected function buildCommonGranularRecipeRowsLikeXkApi(array $recipeRows): array
|
|
{
|
|
foreach ($recipeRows as &$recipeRow) {
|
|
$contentList = Json::decode($recipeRow['content'] ?? '', true);
|
|
if (!is_array($contentList)) {
|
|
continue;
|
|
}
|
|
foreach ($contentList as &$drugRow) {
|
|
$name = $drugRow['drug_name'] ?? ($drugRow['name'] ?? '');
|
|
$drugRow['name'] = $name;
|
|
$drugRow['drug_name'] = $name;
|
|
if (isset($drugRow['way_id']) && !isset($drugRow['order'])) {
|
|
$drugRow['order'] = $drugRow['way_id'];
|
|
}
|
|
if (isset($drugRow['order']) && !isset($drugRow['way_id'])) {
|
|
$drugRow['way_id'] = $drugRow['order'];
|
|
}
|
|
if (!isset($drugRow['unit']) || empty($drugRow['unit'])) {
|
|
$drugRow['unit'] = ['name' => 'g'];
|
|
}
|
|
}
|
|
unset($drugRow);
|
|
$recipeRow['content'] = Json::encode($contentList);
|
|
}
|
|
unset($recipeRow);
|
|
return $recipeRows;
|
|
}
|
|
|
|
protected function actionCommonUseLegacy()
|
|
{
|
|
$post = \YII::$app->request->post();
|
|
|
|
$chinese = PrescriptionChinese::find()->where([
|
|
'type' => 2,
|
|
'store_id' => $post['store_id']
|
|
])->andWhere(['su_id' => \Yii::$app->user->identity->id])->all();
|
|
$west = PrescriptionWest::find()->where([
|
|
'type' => 2,
|
|
'store_id' => $post['store_id']
|
|
])->andWhere(['su_id' => \Yii::$app->user->identity->id])->all();
|
|
$granular = PrescriptionGranular::find()->where([
|
|
'type' => 2,
|
|
'store_id' => $post['store_id']
|
|
])->andWhere(['su_id' => \Yii::$app->user->identity->id])->all();
|
|
if (!$chinese && !$west && !$granular) throw new Exception('没有常用方');
|
|
|
|
$chineseRepice = $westRepice = $granularRepice = [];
|
|
if($chinese){
|
|
foreach ($chinese as $value) {
|
|
$ids = explode(',', $value['cr_ids']);
|
|
$chineseRepice[] = ChineseRepice::find()->where(['in', 'id', $ids])->asArray()->all();
|
|
}
|
|
}
|
|
|
|
if($west){
|
|
foreach ($west as $value) {
|
|
$ids = explode(',', $value['wr_ids']);
|
|
$westRepice[] = WestRepice::find()->where(['in', 'id', $ids])->with(['usetime', 'usetype', 'frequency', 'westUnit'])->asArray()->all();
|
|
}
|
|
}
|
|
|
|
if($granular){
|
|
foreach ($granular as $value) {
|
|
$ids = explode(',', $value['gr_ids']);
|
|
$granularRepice[] = GranularRepice::find()->where(['in', 'id', $ids])->asArray()->all();
|
|
}
|
|
}
|
|
|
|
return [
|
|
'chin_prescription' => $chinese,
|
|
'chinese' => $chineseRepice,
|
|
'west_prescription' => $west,
|
|
'west' => $westRepice,
|
|
'granular_prescription' => $granular,
|
|
'granular' => $granularRepice
|
|
];
|
|
}
|
|
|
|
protected function actionCommonChineseLegacy()
|
|
{
|
|
$post = \Yii::$app->request->post();
|
|
$this->requestValidate($post,[
|
|
['id','required']
|
|
]);
|
|
$chinese = PrescriptionChinese::find()->where([
|
|
'id' => $post['id'],
|
|
'store_id' => $post['store_id']
|
|
])->andWhere(['type' => 2])->one();
|
|
if (!$chinese) {
|
|
throw new Exception('没有该处方');
|
|
}
|
|
$ids = explode(',', $chinese['cr_ids']);
|
|
return ChineseRepice::find()->where(['in', 'id', $ids])->asArray()->all();
|
|
}
|
|
|
|
protected function actionCommonGranularLegacy()
|
|
{
|
|
$post = \Yii::$app->request->post();
|
|
$this->requestValidate($post,[
|
|
['id','required']
|
|
]);
|
|
$granular = PrescriptionGranular::find()->where([
|
|
'id' => $post['id'],
|
|
'store_id' => $post['store_id']
|
|
])->andWhere(['type' => 2])->one();
|
|
if (!$granular) {
|
|
throw new Exception('没有该处方');
|
|
}
|
|
$ids = explode(',', $granular['gr_ids']);
|
|
return GranularRepice::find()->where(['in', 'id', $ids])->asArray()->all();
|
|
}
|
|
|
|
protected function actionCommonWestLegacy()
|
|
{
|
|
$post = \Yii::$app->request->post();
|
|
$this->requestValidate($post,[
|
|
['id','required']
|
|
]);
|
|
$west = PrescriptionWest::find()->where([
|
|
'id' => $post['id'],
|
|
'store_id' => $post['store_id']
|
|
])->andWhere(['type' => 2])->one();
|
|
if (!$west) {
|
|
throw new Exception('没有该处方');
|
|
}
|
|
$ids = explode(',', $west['wr_ids']);
|
|
return WestRepice::find()->where(['in', 'id', $ids])->with(['usetime', 'usetype', 'frequency', 'westUnit'])->asArray()->all();
|
|
}
|
|
|
|
/**
|
|
* 开处方-中药常用方
|
|
* @doc-param string clinical_diagnose 临床诊断
|
|
* @doc-param int up_id 就诊人id
|
|
* @doc-param string doctor_order 医嘱
|
|
* @doc-param int category 类别1自费2医保
|
|
* @doc-param string cr_ids 拼接药方id
|
|
*/
|
|
public function actionSaveChinCommon()
|
|
{
|
|
$id = \Yii::$app->user->identity->id;
|
|
$request = \Yii::$app->request;
|
|
$param = $request->post();
|
|
$this->requestValidate($param, [
|
|
['name', 'required'],
|
|
['store_id', 'required'],
|
|
//['clinical_diagnose', 'required'],
|
|
//['category', 'required'],
|
|
//['doctor_order', 'required'],
|
|
['cr_ids', 'required'],
|
|
]);
|
|
|
|
$store_id = $param['store_id'];
|
|
|
|
try {
|
|
$chineseRepice = new PrescriptionChinese();
|
|
$chineseRepice->su_id = $id;
|
|
$chineseRepice->name = $param['name'];
|
|
$chineseRepice->clinical_diagnose = $param['clinical_diagnose']??'';
|
|
$chineseRepice->prescription_no = 'ZY'.rand(111111, 999999) . time();
|
|
$chineseRepice->up_id = 0;
|
|
$chineseRepice->store_id = $store_id;
|
|
$chineseRepice->status = 0;
|
|
$chineseRepice->category = $param['category']??'';
|
|
$chineseRepice->doctor_order = $param['doctor_order']??'';
|
|
$chineseRepice->cr_ids = $param['cr_ids'];
|
|
$chineseRepice->type = 2;
|
|
$chineseRepice->saveOrFail();
|
|
|
|
return [
|
|
'id' => $chineseRepice->id,
|
|
'issue_time' => time(),
|
|
'clinical_diagnose' => $param['clinical_diagnose']
|
|
];
|
|
} catch (Exception $e) {
|
|
throw new Exception($e->getMessage());
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 开处方-中药常用方
|
|
* @doc-param string clinical_diagnose 临床诊断
|
|
* @doc-param int up_id 就诊人id
|
|
* @doc-param string doctor_order 医嘱
|
|
* @doc-param int category 类别1自费2医保
|
|
* @doc-param string cr_ids 拼接药方id
|
|
*/
|
|
public function actionSaveGranularCommon()
|
|
{
|
|
$id = \Yii::$app->user->identity->id;
|
|
$request = \Yii::$app->request;
|
|
$param = $request->post();
|
|
$this->requestValidate($param, [
|
|
['store_id', 'required'],
|
|
['name', 'required'],
|
|
//['clinical_diagnose', 'required'],
|
|
//['category', 'required'],
|
|
//['doctor_order', 'required'],
|
|
['gr_ids', 'required'],
|
|
]);
|
|
|
|
$store_id = $param['store_id'];
|
|
|
|
try {
|
|
$granularRepice = new PrescriptionGranular();
|
|
$granularRepice->su_id = $id;
|
|
$granularRepice->name = $param['name'];
|
|
$granularRepice->clinical_diagnose = $param['clinical_diagnose']??'';
|
|
$granularRepice->prescription_no = 'ZY'.rand(111111, 999999) . time();
|
|
$granularRepice->up_id = 0;
|
|
$granularRepice->store_id = $store_id;
|
|
$granularRepice->status = 0;
|
|
$granularRepice->category = $param['category']??'';
|
|
$granularRepice->doctor_order = $param['doctor_order']??'';
|
|
$granularRepice->gr_ids = $param['gr_ids'];
|
|
$granularRepice->type = 2;
|
|
$granularRepice->saveOrFail();
|
|
|
|
return [
|
|
'id' => $granularRepice->id,
|
|
'issue_time' => time(),
|
|
'clinical_diagnose' => $param['clinical_diagnose']
|
|
];
|
|
} catch (Exception $e) {
|
|
throw new Exception($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @doc-name 开处方-西药常用方
|
|
* @doc-param string doctor_order 医嘱
|
|
* @doc-param string clinical_diagnose 临床诊断
|
|
* @doc-param int up_id 就诊人id
|
|
* @doc-param int category 类别1自费2医保
|
|
* @doc-param string wr_ids 关联西药药方表
|
|
* @doc-return string aa bb
|
|
*/
|
|
public function actionSaveWestCommon()
|
|
{
|
|
$id = \Yii::$app->user->identity->id;
|
|
$param = \Yii::$app->request->post();
|
|
try {
|
|
$this->requestValidate($param, [
|
|
['store_id', 'required'],
|
|
['name', 'required'],
|
|
//['doctor_order', 'required'],
|
|
//['clinical_diagnose', 'required'],
|
|
//['category', 'required'],
|
|
['wr_ids', 'required'],
|
|
]);
|
|
$store_id = $param['store_id'];
|
|
|
|
$westRepice = new PrescriptionWest();
|
|
$westRepice->su_id = $id;
|
|
$westRepice->name = $param['name'];
|
|
$westRepice->clinical_diagnose = $param['clinical_diagnose']??'';
|
|
$westRepice->prescription_no = 'XY'.rand(111111, 999999) . time();
|
|
$westRepice->up_id = 0;
|
|
$westRepice->store_id = $store_id;
|
|
$westRepice->status = 0;
|
|
$westRepice->category = $param['category']??'';
|
|
$westRepice->doctor_order = $param['doctor_order']??'';
|
|
$westRepice->wr_ids = $param['wr_ids'];
|
|
$westRepice->type = 2;
|
|
$westRepice->saveOrFail();
|
|
|
|
return [
|
|
'id' => $westRepice->id,
|
|
'issue_time' => time(),
|
|
'clinical_diagnose' => $param['clinical_diagnose']
|
|
];
|
|
} catch (Exception $e) {
|
|
throw new Exception($e->getMessage());
|
|
}
|
|
}
|
|
|
|
public function actionDeleteCommon(){
|
|
$param = \Yii::$app->request->post();
|
|
$this->requestValidate($param, [
|
|
['id', 'required'],
|
|
['type', 'required']
|
|
]);
|
|
try {
|
|
switch ($param['type']) {
|
|
case 'west':
|
|
# code...
|
|
$prescription = PrescriptionWest::findOne([
|
|
'id' => $param['id'],
|
|
'su_id' => \Yii::$app->user->identity->id,
|
|
'type' => 2
|
|
]);
|
|
break;
|
|
case 'chinese':
|
|
# code...
|
|
$prescription = PrescriptionChinese::findOne([
|
|
'id' => $param['id'],
|
|
'su_id' => \Yii::$app->user->identity->id,
|
|
'type' => 2
|
|
]);
|
|
break;
|
|
case 'granular':
|
|
# code...
|
|
$prescription = PrescriptionGranular::findOne([
|
|
'id' => $param['id'],
|
|
'su_id' => \Yii::$app->user->identity->id,
|
|
'type' => 2
|
|
]);
|
|
break;
|
|
|
|
default:
|
|
throw new Exception('错误的type');
|
|
break;
|
|
}
|
|
if(!$prescription) throw new Exception('常用方不存在');
|
|
$prescription->delete();
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
return ['删除成功'];
|
|
}
|
|
|
|
} |