Files
xk-api-yii/service/modules/v1/controllers/RecipeController.php

289 lines
9.8 KiB
PHP

<?php
namespace service\modules\v1\controllers;
use common\core\BaseAppController;
use common\models\oldDb\ChineseRepice;
use common\models\oldDb\DoctorInfo;
use common\models\oldDb\DrugStoreDrug;
use common\models\oldDb\GranularRepice;
use common\models\oldDb\WestRepice;
use common\modelsgii\oldDb\ChineseMedicine;
use common\modelsgii\oldDb\GranularMedicine;
use yii\base\Exception;
use yii\helpers\Json;
/**
* @doc-module 药方
*/
class RecipeController extends BaseAppController
{
public $doctorInfo;
public function beforeAction($action){
$ret = parent::beforeAction($action);
//验证是否拥有权限
$this->doctorInfo = DoctorInfo::findOne(['su_id' => \Yii::$app->user->identity->id]);
if(!$this->doctorInfo){
throw new Exception('无权限进行该操作');
}
return $ret;
}
/**
* @doc-name 查看西药药方
* @doc-param int recipe_id 药方id
* @doc-param int prescription_id 处方id
*/
public function actionQueryWest()
{
$recipe_id = \Yii::$app->request->post('recipe_id');
if (!$recipe_id) throw new Exception('药方id不能为空');
$recipe = WestRepice::find()->where(['id' => $recipe_id])->one();
if (!$recipe) throw new Exception('药方不存在');
return $recipe;
}
/**
* @doc-name 修改西药药方
* @doc-param int recipe_id 药方id
* @doc-param int number 数量
* @doc-param string instruction 说明书
* @doc-param int time_id 使用时间id
* @doc-param int type_id 使用类型id
* @doc-param int grain_number 粒数
* @doc-param int f_id 频率
* @doc-param int wu_id 西药单位id
* @doc-param int available_days 可用天数
*/
public function actionChangeWest()
{
$request=\Yii::$app->request;
$param = $request->post();
if (!$param['recipe_id']) throw new Exception('药方id不能为空');
$this->requestValidate($param,[
['store_id', 'required'],
['number', 'required'],
// ['instruction', 'required'],
['type_id', 'required'],
['grain_number', 'required'],
['wu_id', 'required'],
['available_days', 'required'],
['f_id', 'required']
]);
$store_id = $param['store_id'];
$recipe = WestRepice::find()->where(['id' => $param['recipe_id']])->one();
if (!$recipe) throw new Exception('药方不存在');
$content = Json::decode($recipe['content']);
$drug = DrugStoreDrug::find()->alias('dsd')->where(['dsd.drug_id' => $content['id']])->joinWith(['store s' => function ($q) use ($store_id){
$q->andWhere(['s.id' => $store_id]);
}])->asArray()->one();
if(!$drug){
throw new Exception('药品库存数据错误');
}
if($drug['stock'] < $param['number']){
throw new Exception('药品库存数量不足');
}
$recipe->number = $param['number'];
$recipe->instruction = $param['instruction']??'';
$recipe->time_id = $param['time_id']??0;
$recipe->type_id = $param['type_id'];
$recipe->grain_number = $param['grain_number'];
$recipe->wu_id = $param['wu_id'];
$recipe->available_days = $param['available_days'];
$recipe->f_id = $param['f_id'];
$recipe->save();
return ['修改成功'];
}
public function actionChangeOneChinese(){
$post = \Yii::$app->request->post();
$this->requestValidate($post,[
['id','required'],
['number','required'],
[['id','number','order'],'integer']
]);
$chineseMedicine = ChineseMedicine::findOne(['id' => $post['id']]);
if(!$chineseMedicine){
throw new Exception('药品不存在');
}
$chineseMedicine->order = $post['order']??0;
$chineseMedicine->number = $post['number'];
$chineseMedicine->save();
return ['修改成功'];
}
/**
* @doc-name 修改中药药方
* @doc-param int recipe_id 药方id
* @doc-param int deployment 调配1煎煮 2外配
* @doc-param int dosage 剂数
* @doc-param int consumption 用量id
* @doc-param int usage 用法id
* @doc-param int fufa_id 服法id
* @doc-param string remark 备注
* @doc-param int is_deepfry 是否浓煎0否1是
*/
public function actionChangeChinese()
{
$request=\Yii::$app->request;
$param = $request->post();
if (!$param['recipe_id']) throw new Exception('药方id不能为空');
$this->requestValidate($param,[
['store_id', 'required'],
['deployment', 'required'],
['dosage', 'required'],
['consumption', 'required'],
['cm_id', 'required'],
]);
$store_id = $param['store_id'];
$recipe = ChineseRepice::find()->where(['id' => $param['recipe_id']])->one();
if (!$recipe) throw new Exception('药方不存在');
$ids = explode(',', $param['cm_id']);
$price = 0;
$medicine = ChineseMedicine::find()->where(['in', 'id', $ids])->all();
foreach ($medicine as $value){
$drug = DrugStoreDrug::find()->alias('dsd')->where(['dsd.drug_id' => $value['drug_id']])->joinWith(['store s' => function ($q) use ($store_id){
$q->andWhere(['s.id' => $store_id]);
}])->asArray()->one();
if(!$drug){
throw new Exception('药品库存数据错误');
}
$drugNumber = $value['number'] * $param['dosage'];
if($drug['stock'] < $drugNumber){
throw new Exception($value['name'].'库存数量不足');
}
$price+=$drugNumber * $value['price'];
}
$encode = Json::encode($medicine);
$recipe->content = $encode;
$recipe->deployment = $param['deployment'];
$recipe->dosage = $param['dosage'];
$recipe->consumption = $param['consumption'];
$recipe->is_deepfry = $param['is_deepfry']?0:1;
$recipe->volume = $param['volume']??0;
$recipe->cm_id = $param['cm_id'];
$recipe->total_price = $price;
$recipe->saveOrFail();
return [$param['recipe_id']];
}
public function actionChangeOneGranular(){
$post = \Yii::$app->request->post();
$this->requestValidate($post,[
['id','required'],
['number','required'],
[['id','number'],'integer']
]);
$GranularMedicine = GranularMedicine::findOne(['id' => $post['id']]);
if(!$GranularMedicine){
throw new Exception('药品不存在');
}
$GranularMedicine->number = $post['number'];
$GranularMedicine->save();
return ['修改成功'];
}
/**
* @doc-name 修改颗粒药药方
* @doc-param int recipe_id 药方id
* @doc-param int deployment 调配1煎煮2外配
* @doc-param int dosage 剂数id
* @doc-param int consumption 用量id
* @doc-param int usage 用法id
* @doc-param int fufa_id 服法id
* @doc-param string remark 备注
* @doc-param int is_deepfry 是否浓煎0否1是
*/
public function actionChangeGranular()
{
$request=\Yii::$app->request;
$param = $request->post();
if (!$param['recipe_id']) throw new Exception('药方id不能为空');
$this->requestValidate($param,[
['store_id', 'required'],
['deployment', 'required'],
['dosage', 'required'],
['consumption', 'required'],
['gm_id', 'required'],
]);
$store_id = $param['store_id'];
$recipe = GranularRepice::find()->where(['id' => $param['recipe_id']])->one();
if (!$recipe) throw new Exception('药方不存在');
$ids = explode(',', $param['cm_id']);
$price = 0;
$medicine = GranularMedicine::find()->where(['in', 'id', $ids])->all();
foreach ($medicine as $value){
$drug = DrugStoreDrug::find()->alias('dsd')->where(['dsd.drug_id' => $value['drug_id']])->joinWith(['store s' => function ($q) use ($store_id){
$q->andWhere(['s.id' => $store_id]);
}])->asArray()->one();
if(!$drug){
throw new Exception('药品库存数据错误');
}
$drugNumber = $value['number'] * $param['dosage'];
if($drug['stock'] < $drugNumber){
throw new Exception($value['name'].'库存数量不足');
}
$price+=$drugNumber * $value['price'];
}
$encode = Json::encode($medicine);
$recipe->content = $encode;
$recipe->deployment = $param['deployment'];
$recipe->dosage = $param['dosage'];
$recipe->consumption = $param['consumption'];
$recipe->is_deepfry = $param['is_deepfry']?0:1;
$recipe->volume = $param['volume']??0;
$recipe->gm_id = $param['gm_id'];
$recipe->total_price = $price;
$recipe->saveOrFail();
return [$param['recipe_id']];
}
/**
* @doc-name 删除西药药方
* @doc-param int recipe_id 药方id
* @doc-param int prescription_id 处方id
*/
public function actionDelWest()
{
try {
$request=\Yii::$app->request;
$recipe_id = $request->post('recipe_id');
if (!$recipe_id) throw new Exception('药方id不能为空');
$transaction = \Yii::$app->db->beginTransaction();
$recipe = WestRepice::find()->where(['id' => $recipe_id])->one();
if (!$recipe) throw new Exception('药方不存在');
$recipe->delete();
$transaction->commit();
} catch (\Exception $exception) {
$transaction->rollBack();
return $exception;
}
}
}