历史遗留的代码问题,上传了测试代码

This commit is contained in:
2024-12-12 15:39:51 +08:00
parent c51cd26fe9
commit f3dbe97ac2

View File

@@ -1084,7 +1084,7 @@ class PrescriptionController extends BaseAppController
if($repice[0]['dosage'] > 7){
$doctor_order[] = '患者需长期使用此药,开具超七天用量';
}
if($param['doctor_second_sign'] == 1){
if($param['doctor_second_sign']?? 0 == 1){
$prescription->doctor_second_sign = 1;
}
$doctor_order[] = $param['doctor_order'];
@@ -1250,6 +1250,48 @@ class PrescriptionController extends BaseAppController
return $drug;
}
/**
* @doc-name 产品服务包列表
* @doc-param string name 药名
*/
public function actionServerList()
{
// TODO 正在搞这个
$name = \Yii::$app->request->post('name');
$store_id =\Yii::$app->request->post('store_id');
if(!$name){
$name = '';
}
$drug = Drug::find()->alias('d')->select('d.*')->where([
'd.type' => 5
])->andWhere([
'or',
['like', 'd.drug_name', '%' . $name . "%", false],
['like', 'd.pinyin_simple', '%' . $name . "%", false],
['like', 'd.drug_alias', '%' . $name . "%", false]
])->with('unit')->joinWith(['drugStoreDrug dsd' => function($q){
$q->andWhere(['dsd.status' => 2]);
}])->joinWith(['drugStoreRelation dsr' => function ($q) use ($store_id){
$q->andWhere(['dsr.store_id' => $store_id]);
$q->andWhere(['dsr.status' => 2]);
}])->asArray()->all();
if (!$drug) {
throw new Exception('没有找到您要搜索的药品');
}
foreach($drug as $k=>$v){
$drug[$k]['buy_price'] = $v['drugStoreRelation']['buy_price'];
$drug[$k]['price'] = $v['drugStoreRelation']['price'];
$drug[$k]['stock'] = $v['drugStoreDrug']['stock'];
unset($drug[$k]['drugStoreRelation']);
unset($drug[$k]['drugStoreDrug']);
}
return $drug;
}
/**
* @doc-name 一次添加一个中药
* @doc-param int drug_id 药id
@@ -1667,6 +1709,268 @@ class PrescriptionController extends BaseAppController
}
}
/**
* @doc-name 产品服务包开方
* @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 actionAddPrescriptionProductServicePackage()
{
// TODO 该功能未完成
$id = \Yii::$app->user->identity->id;
$param = \Yii::$app->request->post();
$this->requestValidate($param, [
['store_id', 'required'],
['register_id', 'required'],
['clinical_diagnose', 'required'],
['up_id', 'required'],
['category', 'required'],
['doctor_order', 'required'],
['gr_ids', 'required'],
['treatement_price', 'number']
]);
$transaction = \Yii::$app->db->beginTransaction();
try {
$store_id = $param['store_id'];
/* @var UserPatient $userPatient */
$userPatient = UserPatient::find()->select('id,name,sex,id_card,user_id,mobile')->where(['id' => $param['up_id']])->one();
if(!$userPatient){
throw new Exception('就诊人不存在');
}
$register = Register::find()->where([
'id' => $param['register_id'],
'user_patient_id' => $param['up_id'],
'store_id' => $store_id
])->with('healthInquery')->one();
if(!$register){
throw new Exception('挂号订单不存在');
}
$prescription_no = 'GY' . rand(111111, 999999) . time();
$marketPrice = '0';
$priceTotal = 0;
$processTotal = 0;
$ids = explode(',', $param['gr_ids']);
for ($i = 0; $i < sizeof($ids); $i++) {
$recipe = GranularRepice::find()->where(['id' => $ids[$i]])->asArray()->one();
if(!$recipe){
throw new Exception('药方数据错误');
}
$priceTotal += $recipe['total_price'];
$processTotal += $recipe['process_price'];
$content = Json::decode($recipe['content']);
for ($j = 0; $j < sizeof($content); $j++) {
$drug = Drug::find()->alias('d')->select('d.*')->where([
'd.id' => $content[$j]['drug_id']
])->joinWith(['drugStoreDrug dsd' => function($q){
$q->andWhere(['dsd.status' => 2]);
}])->joinWith(['drugStoreRelation dsr' => function ($q) use ($store_id){
$q->andWhere(['dsr.store_id' => $store_id]);
$q->andWhere(['dsr.status' => 2]);
}])->asArray()->one();
if(!$drug){
throw new Exception('药品库存数据错误');
}
$drugNumber = (int) $content[$j]['number'] * (int) $recipe['dosage'];
if($drug['drugStoreDrug']['stock']<$drugNumber){
throw new Exception($content['name'].'库存数量不足');
}
\Yii::$app->db->createCommand()->update('yii_drug_store_relations', [
'sale_number' => $drug['drugStoreRelation']['sale_number'] + $drugNumber
], ['id' => $drug['drugStoreRelation']['id']])->execute();
\Yii::$app->db->createCommand()->update('yii_drugstore_drug', [
'stock' => $drug['drugStoreDrug']['stock'] - $drugNumber,
'frozen_number' => $drug['drugStoreDrug']['frozen_number'] + $drugNumber
], ['id' => $drug['drugStoreDrug']['id']])->execute();
$drug['number'] = $drugNumber;
$drugStoreDrugs[] = $drug;
$itemMarketPrice = bcmul($drugNumber,$drug['drugStoreRelation']['buy_price'],2);
$marketPrice = bcadd($marketPrice,$itemMarketPrice,2);
}
}
$priceTotal = round($priceTotal, 2); //对药品总价进行四舍五入
//组装处方快照
$repice = GranularRepice::find()->where(['in', 'id', $ids])->asArray()->all();
$prescription_content['prescription_no'] = $prescription_no;
$prescription_content['repice'] = $repice;
$prescription_content['created_at'] = date('Y-m-d',time());
$prescription_content['doctor_order'] = $param['doctor_order'];
$prescription_content['clinical_diagnose'] = $param['clinical_diagnose'];
$prescription_content['category'] = $param['category']==1?'自费':'医保';
$prescription_content['patient'] = $userPatient;
$prescription_content['patient']['age'] = FuncHelper::getAgeFromIdNo($userPatient->id_card);
$prescription_content['doctor'] = DoctorInfo::find()->select('su_id,name,depart_id,title_id')->where(['su_id' => $id])->with(['depart','title'])->asArray()->one();
$prescription_content['total_pay_price'] = $priceTotal;
$prescriptionGranular = new PrescriptionGranular();
$prescriptionGranular->store_id = $store_id;
$prescriptionGranular->prescription_no = $prescription_no;
$prescriptionGranular->su_id = $id;
$prescriptionGranular->user_id = $userPatient->user_id;
$prescriptionGranular->up_id = $param['up_id'];
$prescriptionGranular->status = 1;
$prescriptionGranular->type = 1;//普通方
$prescriptionGranular->content = Json::encode($prescription_content);
$prescriptionGranular->category = $param['category'];
$prescriptionGranular->doctor_order = $param['doctor_order'];
$prescriptionGranular->clinical_diagnose = $param['clinical_diagnose'];
$prescriptionGranular->gr_ids = $param['gr_ids'];
$prescriptionGranular->saveOrFail();
$prescription = new Prescription();
$prescription->store_id = $store_id;
$prescription->register_id = $param['register_id'];
$prescription->prescription_no = $prescription_no;
$prescription->su_id = $id;
$prescription->user_id = $userPatient->user_id;
$prescription->up_id = $param['up_id'];
$prescription->status = 0;
$prescription->type = 1;//普通方
$prescription->is_online = 0;
$prescription->content = Json::encode($prescription_content);
$prescription->prescription_type = 3; // 颗粒药
$prescription->category = $param['category'];
$prescription->process_price = $processTotal;
$prescription->process_rule_id = $repice[0]['process_rule_id'];
$prescription->process_rule = $repice[0]['process_rule'];
$prescription->process_rule_note = $repice[0]['process_rule_note'];
$over_time = \Yii::$app->params['prescription']['over_time'];
$doctor_order = [];
if(date('H')>=16){
$doctor_order[] = '该处方有效期延长为三天内有效';
$over_time = 72*3600;
}
if($repice[0]['dosage'] > 7){
$doctor_order[] = '患者需长期使用此药,开具超七天用量';
}
$doctor_order[] = $param['doctor_order'];
$prescription->valid_hours = $over_time/3600;
$prescription->doctor_order = implode('|',$doctor_order);
$prescription->clinical_diagnose = $param['clinical_diagnose'];
$prescription->gr_ids = $param['gr_ids'];
$prescription->total_pay_price = $priceTotal;
$prescription->saveOrFail();
//获取支付方式配置
$payConfig = PayConfig::findOne(['status' => 1, 'current_use' => 1]);
// 生成商品订单
$productOrder = new ProductOrder();
$productOrder->store_id = $store_id;
$productOrder->su_id = $id;
$productOrder->user_id = $userPatient->user_id;
$productOrder->up_id = $userPatient->id;
$productOrder->order_no = Carbon::now()->format('YmdHis') . rand(10000, 99999) . rand(10000, 99999);
$productOrder->p_id = $prescription->id;
$productOrder->dosage = $repice[0]['dosage'];
$productOrder->order_type = 1;
$productOrder->prescription_type = 3;//颗粒药处方
$productOrder->type = $payConfig->pay_type??2;//1微信 2易票联
$productOrder->is_pay = 0;
$productOrder->trans_expenses = 0;
$productOrder->items_price = $priceTotal;
$productOrder->market_price = $marketPrice;
$productOrder->process_price = $processTotal;
$treatementPrice = 0;
if($param['treatement_price']){
$treatementPrice = $param['treatement_price'];
}
$productOrder->treatement_price = $treatementPrice;
$productOrder->status = ProductOrderEnum::UNPAY;
$userAddress = Address::find()->select('id,name,mobile,province,region,detail_address')->where(['user_id' => $prescription->user_id])->orderBy('is_default DESC')->asArray()->all();
if(count($userAddress)>0){
$productOrder->address_id = $userAddress[0]['id'];
$productOrder->address = Json::encode($userAddress[0]);
$productOrder->express_name = $userAddress[0]['name'];
$productOrder->express_mobile = $userAddress[0]['mobile'];
$productOrder->express_region = $userAddress[0]['region'];
$productOrder->express_address = $userAddress[0]['detail_address'];
$region = Region::find()->where(['name' => $userAddress[0]['province']])->one();
$productOrder->trans_expenses = $region->express_fee;
$priceTotal = $priceTotal + $region->express_fee;
}
$productOrder->total_pay_price = $priceTotal + $processTotal + $treatementPrice;
$productOrder->pay_method = 1;
$productOrder->free_ship = 1;
$productOrder->sync_order_no = $param['sync_order_no']??'';
$productOrder->saveOrFail();
$productOrderItem = new ProductOrderItems();
foreach ($drugStoreDrugs as $v) {
$item = clone $productOrderItem;
$item->product_order_id = $productOrder->id;
$item->drug_id = $v['id'];
$item->drug_image = $v['image'];
$item->drug_no = $v['drug_number'];
$item->number = $v['number'];
$item->type = $v['type'];
$item->price = $v['drugStoreRelation']['price'];
$item->buy_price = $v['drugStoreRelation']['buy_price'];
$item->drug_name = $v['drug_name'];
$item->small_info = $v['small_info'];
$item->saveOrFail();
}
//触发处方自动失效事件
$prescriptionEvent = new PrescriptionEvent();
$prescriptionEvent->prescription = $prescription;
$prescriptionEvent->sender = $this;
\Yii::$app->trigger(Prescription::AUTO_EXPIRE, $prescriptionEvent);
//触发订单自动取消事件
$event = new ProductOrderEvent();
$event->order = $productOrder;
$event->sender = $this;
\Yii::$app->trigger(ProductOrder::EVENT_CREATED, $event);
//处方开具待支付订阅消息通知
\Yii::$app->queue->push(new PrescriptionCreated([
'orderId' => $prescription->id,
]));
//发送处方系统通知
$systemNotice = new SystemNotice();
$systemNotice->data = $prescription_no;
$systemNotice->store_id = $store_id;
$systemNotice->content = '医生已为您开具处方,请及时查看!';
$systemNotice->base_type = 4;//处方通知
$systemNotice->scene_type = 1;
$systemNotice->user_id = $userPatient->user_id;
$systemNotice->notice_at = date('Y-m-d H:i:s',time());
$systemNotice->saveOrFail();
$transaction->commit();
return [
'id' => $prescription->id,
'product_order_id' => $productOrder->id,
'prescription_no' => $prescription_no,
'issue_time' => time(),
'clinical_diagnose' => $param['clinical_diagnose']
];
} catch (Exception $e) {
$transaction->rollBack();
throw $e;
}
}
/**
* 常用诊断
*/