request->get(); $good_name = $get['good_name']; $store = $get['store']; $doctor = $get['doctor']; $type=$get['type']; $admin = \Yii::$app->user->identity; $start_time=strtotime($get['start_time'].' '.'00:00:00'); $end_time=strtotime($get['end_time'].' '.'23:59:59'); if ($admin->role == UserRoleEnum::STORE_ADMIN) {//门店 $query = ProductOrder::find()->alias('pd')->where(['pd.store_id' => $admin->store_id])->orderBy(['pd.id' => SORT_DESC]); } elseif ($admin->role == UserRoleEnum::PROVINCE_DAI){//省代 $store_id = Store::find()->select(['id'])->where(['province_id' => $admin->province_id])->column(); $query = ProductOrder::find()->alias('pd')->where(['in','pd.store_id',$store_id])->orderBy(['pd.id' => SORT_DESC]); } elseif ($admin->role == UserRoleEnum::CITY_DAI){//市代 $store_id = Store::find()->select(['id'])->where(['city_id' => $admin->city_id])->column(); $query = ProductOrder::find()->alias('pd')->where(['in','pd.store_id',$store_id])->orderBy(['pd.id' => SORT_DESC]); } elseif ($admin->role == UserRoleEnum::SUPPLY){//业务员 $store_id = Store::find()->select(['id'])->where(['code' => $admin->code])->column(); $query = ProductOrder::find()->alias('pd')->where(['in','pd.store_id',$store_id])->orderBy(['pd.id' => SORT_DESC]); }else {//总后台 $query = ProductOrder::find()->alias('pd')->orderBy(['pd.id' => SORT_DESC]); } if (!empty($get['order_no'])) {//订单编号 $query->andWhere(['pd.order_no' => $get['order_no']]); } $query->joinWith(['prescription' => function ($p) use ($good_name) { $p->alias('p'); if (!empty($good_name)) {//商品名称 $p->where(['like', 'p.content', $good_name]); } }]); if (!empty($get['accept_name'])) {//收件人姓名 $query->where(['like', 'pd.express_name', $get['accept_name']]); } if (!empty($get['accept_tel'])) {//收件人电话 $query->where(['like', 'pd.express_mobile', $get['accept_tel']]); } $query->joinWith(['doctor' => function ($doc) use ($doctor) { $doc->alias('doc'); if (!empty($doctor)) {//医生搜索 $doc->andWhere(['like', 'doc.name', $doctor]); } }]); if (isset($get['status']) && is_numeric($get['status'])) {//产品订单状态 if ($get['status'] == 3) { $query->andWhere(['pd.status' => [3, 6, 7]]); } else { $query->andWhere(['pd.status' => $get['status']]); } } if (!empty($store)) {//门店 $query->andWhere(['pd.store_id' => $store]); } if (!empty($get['after_status'])) {//售后状态 $query->andWhere(['pd.refund_status' => $get['after_status']]); } if (!empty($type)) { $query->andWhere(['pd.prescription_type' => $type]); } if (!empty($start_time) && !empty($end_time)) { if ($start_time==$end_time){//筛选某一天 $time=FuncHelper::getDayBE($get['start_time']); $end_time=$time[1]; } $query->andWhere(['between', 'pd.created_at', $start_time,$end_time]); } $this->field = [ ProductOrder::class => [ 'id', 'store_id','prescription_type', 'user_id', 'up_id', 'p_id', 'status', 'cancel_status', 'order_type', 'order_no', 'total_pay_price', 'type', 'items_price','market_price', 'process_price', 'treatement_price','address_id', 'status', 'trans_expenses', 'free_ship', 'cancel_time' => function ($pd) { if($pd->cancel_time){ return date('Y-m-d H:i:s', $pd->cancel_time); } }, 'cancel_remark', 'refund_status', 'refund_time' => function ($pd) { if($pd->refund_time){ return date('Y-m-d H:i:s', $pd->refund_time); } }, 'store' => function ($d) { return Store::find()->select(['id','drugstore_id','erp_id','plate_id','name','shouzimu','contact','mobile','offical_seal','code','position'])->where([ 'id' => $d->store_id ])->one(); }, 'drugstore' => function ($d) { $drugstore_id = Store::find()->select(['drugstore_id'])->where([ 'id' => $d->store_id ])->column(); return DrugStore::find()->select(['name'])->where(['in', 'id', $drugstore_id])->all(); }, 'pay_time' => function ($m) { if($m->pay_time){ return date('Y-m-d H:i:s', $m->pay_time); } }, 'is_has' => function ($i) { return $i->p_id ? '有处方' : '无处方'; }, 'doctor' => 'doctor.name', // 'good' => function ($model) { // return $this->actionProductOrderDetail($model->id); // }, 'prescription' => function ($p) { if($p->p_id){ $prescription = Prescription::find()->where([ 'id' => $p->p_id, 'is_deleted' => 0 ])->with(['pharmacistInfo','doctorInfo.depart'])->asArray()->one(); $content = Json::decode($prescription['content']); $repice = $content['repice']; if($prescription['prescription_type'] == 2){ //西药 foreach($repice as $k => $v){ $repice[$k]['content'] = Json::decode($v['content']); } } else { $repiceContent = Json::decode($repice[0]['content']); // foreach($repiceContent as $k=>$v){ // $repiceContent[$k]['content'] = Json::decode($v['content']); // } $repice[0]['content'] = $repiceContent; } $content['repice'] = $repice; $prescription['content'] = $content; } return $prescription; }, 'address' => function ($m) { return json_decode($m->address); }, 'created_at' => function ($mo) { return date('Y-m-d H:i:s', $mo->created_at); }, 'express_name'=>function($e){ return $this->actionReceiveInfo($e->id,1); }, 'express_mobile'=>function($e){ return $this->actionReceiveInfo($e->id,2); }, 'express_region'=>function($e){ return $this->actionReceiveInfo($e->id,3); }, 'express_address'=>function($e){ return $this->actionReceiveInfo($e->id,4); }, 'patient' => 'userPatient.name', 'user' => 'user.nickname', 'product_order_items' => function ($m) { return $this->actionProductOrderItem($m->id); }, 'patient_sex' => 'userPatient.sex', 'patient_age' => 'userPatient.age', 'patient_mobile' => 'userPatient.mobile', 'category' => 'prescription.category', 'productOrderRefund_status' => 'productOrderRefund.status', 'productOrderRefund_id' => function($m){ return $this->actionProductOrderRefund($m->id); }, 'service_price'=>function($m){ return $this->actionDaijianFei($m->id); }, 'is_decoct','decoct_price','express_no_id', 'delivery_method', ] ]; return $this->create($query, $get); } /** * @doc-name 收获信息 * @doc-author huangyuling */ public function actionReceiveInfo($id,$type){ $info=ProductOrder::find()->where(['id'=>$id])->asArray()->one(); switch ($type){ case 1: if ($info['delivery_method']==0){ return $info['express_name']; }else{ $user_patient=UserPatient::find()->where(['id'=>$info['up_id']])->asArray()->one(); if (!$user_patient){ throw new Exception('患者信息不存在'); } return $user_patient['name']; } break; case 2: if ($info['delivery_method']==0){ return $info['express_name']; }else{ $user_patient=UserPatient::find()->where(['id'=>$info['up_id']])->asArray()->one(); if (!$user_patient){ throw new Exception('患者信息不存在'); } return $user_patient['mobile']; } break; case 3: if ($info['delivery_method']==0){ return $info['express_region']; }else{ $store=Store::find()->where(['id'=>$info['store_id']])->with(['province','city'])->asArray()->one(); if (!$store){ throw new Exception('门店信息不存在'); } return $store['province']['name'].$store['city']['name']; } break; case 4: if ($info['delivery_method']==0){ return $info['express_address']; }else{ $store=Store::find()->where(['id'=>$info['store_id']])->asArray()->one(); if (!$store){ throw new Exception('门店信息不存在'); } return $store['position']; } break; default: throw new Exception('类型错误'); } } /** * @doc-name 退款申请ID * @doc-return int id id */ public function actionProductOrderRefund($id) { $ProductOrderRefund=ProductOrderRefund::find()->select(['id','reason'])->where(['order_id'=>$id])->orderBy(['id'=>SORT_DESC])->one(); return $ProductOrderRefund; } /** * @doc-name 取消商品(或产品)订单 * @doc-param int order_id 商品(或产品)订单id * @doc-param int user_id 用户id */ public function actionGoodCancel() { $post = \Yii::$app->request->post(); $this->requestValidate($post, [ [['order_id', 'user_id'], 'required'] ]); $form = new ProductCancelForm(); return $form->cancel($post); } /** * @doc-name 商品订单退款 * @doc-param int order_id 商品(或产品)订单id * @doc-param int user_id 用户id * @doc-param string reason 退款原因 * @doc-param string refund_images 退款图片 / optional */ public function actionGoodRefund() { $post = \Yii::$app->request->post(); $this->requestValidate($post, [ [['order_id', 'user_id', 'reason'], 'required'] ]); $form = new ProductRefundForm(); return $form->refund($post); } /** * @doc-name 发货 * @doc-param int order_id 商品(或产品)订单id */ public function actionSendOperate() { $post = \Yii::$app->request->post(); $this->requestValidate($post, [ ['order_id', 'required'] ]); $user = \Yii::$app->user->identity; if ($user->role != UserRoleEnum::STORE_ADMIN) { throw new Exception('您没有该门店权限'); } $ProductOrder = ProductOrder::find()->where([ 'store_id' => $user->store_id, 'id' => $post['order_id'] ])->one(); if (!$ProductOrder) throw new Exception('产品订单不存在'); $Prescription=Prescription::find()->where(['id'=>$ProductOrder['p_id'],'is_deleted'=>0])->one(); if ($Prescription['status']!=1){ throw new Exception('处方未通过,不能发货'); } $ProductOrder->is_send = 1; $ProductOrder->send_time = date('Y-m-d H:i:s', time()); if (!$ProductOrder->saveOrFail()) { throw new Exception('发货失败'); } //订单发货3天后分账结算 // if($ProductOrder->type == 2){ //易票联支付的产品订单 // $config = \Yii::$app->params; // $orderAutoSettlementTime = isset($config['product_order']['settlement_time']) ? $config['product_order']['settlement_time'] : 72*3600; // $TIME=180; // \Yii::$app->queue->delay($TIME)->push(new ProductOrderSendJob([ // 'orderId' => $ProductOrder->id // ])); // } return ['发货成功']; } /** * @doc-name 产品订单详情 * @doc-param int product_id 产品订单id */ public function actionProductDetail() { $get = \Yii::$app->request->get(); $this->requestValidate($get, [ ['product_id', 'required'] ]); $ProductOrder = ProductOrder::find()->where([ 'id' => $get['product_id'] ])->with(['expressNos', 'prescription', 'orderItems'])->asArray()->one(); if (!$ProductOrder) throw new Exception('产品订单不存在'); if ($ProductOrder['prescription']['prescription_type'] == 1) { $SystemConfig = SystemConfig::findOne(['type' => 1]); $ProductOrder['daijianfei'] = $SystemConfig['value']; } return $ProductOrder; } /** * 订单物流详情 */ public function actionExpress(){ $get = \Yii::$app->request->get(); $this->requestValidate($get, [ ['order_id', 'required'] ]); $express = (new ExpressService())->detail($get['order_id']); return $express; } /** * @doc-name 处理处方快照 */ public function actionProductOrderDetail($id = null) { $p_id = ProductOrder::find()->select(['p_id'])->where(['id' => $id])->column(); $prescription_type = Prescription::find()->select(['prescription_type'])->where(['id' => $p_id, 'is_deleted' => 0])->column(); if ($prescription_type[0] == 1 || $prescription_type[0] == 3) {//中药 配方颗粒 $content = Prescription::find()->where(['id' => $p_id, 'is_deleted' => 0])->one(); $recipe = json_decode($content['content'], true)['repice']; $data['content'] = json_decode($recipe[0]['content']); $data['deployment'] = $recipe[0]['deployment']; $data['dosage'] = $recipe[0]['dosage']; $data['consumption'] = $recipe[0]['consumption']; $data['directions'] = $recipe[0]['directions']; $data['usage'] = $recipe[0]['usage']; $data['fufa_id'] = $recipe[0]['fufa_id']; $data['volume'] = $recipe[0]['volume']; $data['is_deepfry'] = $recipe[0]['is_deepfry']; $data['cm_id'] = $recipe[0]['cm_id']; $data['total_price'] = $recipe[0]['total_price']; $data['remark'] = $recipe[0]['remark']; return $data; } else {//西药 $Prescription = Prescription::find()->where(['id' => $p_id, 'is_deleted' => 0])->one(); if (!$Prescription) throw new Exception('处方不存在'); $repice = json_decode($Prescription['content'], true)['repice']; $data = []; foreach ($repice as $v) { $item = [ 'id' => $v['id'], 'content' => json_decode($v['content']), 'drug_name' => json_decode($v['content'])->drug_name, 'source' => json_decode($v['content'])->source, 'function' => json_decode($v['content'])->function, 'usage' => json_decode($v['content'])->usage, 'specification' => json_decode($v['content'])->specification, 'instruction' => json_decode($v['content'])->instruction, 'image' => json_decode($v['content'])->image, 'number' => $v['number'], 'available_days' => $v['available_days'], 'total_price' => $v['total_price'], 'created_at' => $v['created_at'], 'type_id' => json_decode($v['content'])->type_id, 'time_id' => json_decode($v['content'])->time_id, 'frequency_id' => json_decode($v['content'])->frequency_id, 'unit_id' => json_decode($v['content'])->unit_id, 'usetime' => $v['usetime']['name'], 'frequency' => $v['frequency']['name'], 'grain_number' => $v['grain_number'], 'westUnit' => $v['westUnit']['name'], 'types' => $v['usetype']['name'], //药的使用方式 ]; $data[] = $item; } return $data; } } //商品订单的商品明细 public function actionProductOrderItem($id = null) { return ProductOrderItems::find()->with('drug')->where(['product_order_id' => $id])->asArray()->all(); } /** * @doc-name 导出产品订单 */ public function actionExportProductOrder() { \Yii::$app->response->format = Response::FORMAT_RAW; $params = \Yii::$app->request->get(); $parameter['header'] = ['易票联订单号','订单号','诊所名称', '商品名称', '规格', '厂家', '单价', '加工费', '诊疗费', '销售价', '采购价','总价', '运费', '医生', '订单状态', '售后状态', '下单时间', '收件人姓名', '电话', '地址', '支付时间']; $parameter['data'] = ProductOrder::inventory($params,\Yii::$app->user->identity->store_id); ExportService::ExportByCors($parameter); } /** * @doc-name 代煎费 */ public function actionDaijianFei($id=null) { $ProductOrder=ProductOrder::find()->where(['id'=>$id])->one(); if (!$ProductOrder)throw new Exception('产品订单不存在'); $Prescription=Prescription::findOne(['id'=>$ProductOrder['p_id'],'is_deleted'=>0]); if ($Prescription['prescription_type'] == 1 || $Prescription['prescription_type']==3 ) { $SystemConfig = SystemConfig::findOne(['type' => 1]); return $SystemConfig['value']; }else{ return '无'; } } }