diff --git a/admin/controllers/base/StatementAccountController.php b/admin/controllers/base/StatementAccountController.php index de33831..c1271a1 100644 --- a/admin/controllers/base/StatementAccountController.php +++ b/admin/controllers/base/StatementAccountController.php @@ -200,11 +200,15 @@ class StatementAccountController extends BaseAdminController ]; } else {//药品 + // TODO 对账问题 + // 设置查询条件,查找状态为1的对账记录,按ID降序排序 $query = Reconciliation::find()->alias('r')->where(['r.status' => 1])->orderBy(['id' => SORT_DESC]); + // 获取搜索参数:门店名称和药品名称 $store_name = $get['store_name']; $drug_name = $get['drug_name']; + // 根据门店名称过滤门店 $query->joinWith(['store' => function ($s) use ($store_name) { $s->alias('s'); if (!empty($store_name)) { @@ -216,6 +220,7 @@ class StatementAccountController extends BaseAdminController } }]); + // 根据药品名称过滤药品 $query->joinWith(['drug' => function ($d) use ($drug_name) { $d->alias('d'); if (!empty($drug_name)) { @@ -226,13 +231,18 @@ class StatementAccountController extends BaseAdminController ]); } }]); - //门店搜索 + + // 根据门店ID过滤对账记录 if (!empty($get['store_id'])) { $query->andWhere(['r.store_id' => $get['store_id']]); } + + // 如果用户是门店管理员,只查询该门店的对账记录 if ($user->role == UserRoleEnum::STORE_ADMIN) { $query->andWhere(['r.store_id' => $user->store_id]); } + + // 根据药品类型过滤对账记录 if (!empty($get['drug_type'])) { if ($get['drug_type'] == 1) { $query->andWhere(['r.drug_type' => [1, 3]]); @@ -241,6 +251,7 @@ class StatementAccountController extends BaseAdminController } } + // 根据开始时间和结束时间过滤对账记录 if (!empty($start_time) && !empty($end_time)) { if ($start_time==$end_time){//筛选当天 @@ -252,11 +263,16 @@ class StatementAccountController extends BaseAdminController $query->andWhere(['between', 'r.xd_time',$start_time, $end_time]); } - $query->groupBy('drug_id'); + // 按药品ID分组 +// $query->groupBy('drug_id'); + + // TODO 这里有问题 + // 定义查询字段及格式化函数 $this->field = [ Reconciliation::class => [ - 'id', 'order_id', 'store_id', 'pay_time' => function ($m) { + 'id', 'order_id', 'store_id', + 'pay_time' => function ($m) { return date('Y-m-d H:i:s', $m->pay_time); }, 'drug_id', 'drug_type', 'total_buy_price', 'status', @@ -264,23 +280,77 @@ class StatementAccountController extends BaseAdminController 'drug_name' => 'drug.drug_name', 'store_number' => 'productOrder.store.id', 'store' => 'store.name', - 'number' => function ($model) use ($start_time, $end_time) { - return $this->calculateSum($model, 'number', $start_time, $end_time); - }, - 'total_buy_price' => function ($model) use ($start_time, $end_time) { - return $this->calculateSum($model, 'total_buy_price', $start_time, $end_time); - }, - 'total_price' => function ($model) use ($start_time, $end_time) { - return $this->calculateSum($model, 'total_price', $start_time, $end_time); - }, - 'sale_number' => function ($s)use($start_time,$end_time) { - return $this->actionEverySaleNumber($s->order_id, $s->drug_id,$start_time,$end_time); - }, + 'number', + 'total_buy_price', + 'total_price', + 'sale_number' => 0, 'trans_fee'=>'productOrder.trans_expenses', 'work_fee' => 'productOrder.process_price', 'treatement_fee' => 'productOrder.treatement_price' ] ]; + $list = $this->create($query, $get)->getModels(); + // 总销量 sale_number + // 单个销量 number 不知道要这个干嘛 + // 总价 total_price + // 总供货价 total_buy_price + $result = []; + foreach ($list as $value) { + if (!empty($result[$value['drug_id']])) { + $result[$value['drug_id']]['number'] = bcadd($result[$value['drug_id']]['sale_number'], $value['number'], 0); + $result[$value['drug_id']]['sale_number'] = bcadd($result[$value['drug_id']]['sale_number'], $value['number'], 2); + $result[$value['drug_id']]['total_buy_price'] = bcadd($result[$value['drug_id']]['total_buy_price'], $value['total_buy_price'], 2); + $result[$value['drug_id']]['total_price'] = bcadd($result[$value['drug_id']]['total_price'], $value['total_price'], 2); + } else { + $result[$value['drug_id']] = [ + 'id' => $value['drug_id'], + 'drug_number' => $value['drug']['drug_number'], + 'drug_name' => $value['drug']['drug_name'], + 'number' => $value['number'], + 'sale_number' => $value['number'], + 'total_price' => $value['total_price'], + 'total_buy_price' => $value['total_buy_price'], + 'drug_type' => $value['drug_type'], + 'drug_id' => $value['drug_id'], + 'status' => $value['status'], + ]; + } + } + return [ + 'list' => array_values($result), + 'pageSize' => 10, + 'page' => 1, + 'total' => count($result) + ]; + // 定义查询字段及格式化函数 +// $this->field = [ +// Reconciliation::class => [ +// 'id', 'order_id', 'store_id', +// 'pay_time' => function ($m) { +// return date('Y-m-d H:i:s', $m->pay_time); +// }, +// 'drug_id', 'drug_type', 'total_buy_price', 'status', +// 'drug_number' => 'drug.drug_number', +// 'drug_name' => 'drug.drug_name', +// 'store_number' => 'productOrder.store.id', +// 'store' => 'store.name', +// 'number' => function ($model) use ($start_time, $end_time) { +// return $this->calculateSum($model, 'number', $start_time, $end_time); +// }, +// 'total_buy_price' => function ($model) use ($start_time, $end_time) { +// return $this->calculateSum($model, 'total_buy_price', $start_time, $end_time); +// }, +// 'total_price' => function ($model) use ($start_time, $end_time) { +// return $this->calculateSum($model, 'total_price', $start_time, $end_time); +// }, +// 'sale_number' => function ($s)use($start_time,$end_time) { +// return $this->actionEverySaleNumber($s->order_id, $s->drug_id,$start_time,$end_time); +// }, +// 'trans_fee'=>'productOrder.trans_expenses', +// 'work_fee' => 'productOrder.process_price', +// 'treatement_fee' => 'productOrder.treatement_price' +// ] +// ]; } return $this->create($query, $get); @@ -613,6 +683,7 @@ class StatementAccountController extends BaseAdminController */ public function actionStoreStatistic() { + // TODO 这里有问题(统计金额-诊所)需要重构 $get = \Yii::$app->request->get(); $admin=\Yii::$app->user->identity; @@ -770,6 +841,7 @@ class StatementAccountController extends BaseAdminController */ public function actionDrugStatistic() { + // TODO 这里有问题(统计金额-药品) $get = \Yii::$app->request->get(); $admin=\Yii::$app->user->identity; @@ -784,21 +856,31 @@ class StatementAccountController extends BaseAdminController $start_time=$get['start_time']; $end_time=$time[1]; } - $data=['between', 'r.xd_time', $start_time, $end_time]; + $data=['between', 'xd_time', $start_time, $end_time]; } if ($admin->role==UserRoleEnum::STORE_ADMIN){ - $all_sale= Reconciliation::find()->alias('r')->andWhere(['r.status' => 1,'r.store_id'=>$admin->store_id])->andWhere($data??'')->groupBy('r.drug_id')->sum('number'); - $all_total_price= Reconciliation::find()->alias('r')->andWhere(['r.status' => 1,'r.store_id'=>$admin->store_id])->andWhere($data??'')->groupBy('r.drug_id')->sum('total_price'); + $resData= Reconciliation::find() + ->andWhere(['status' => 1,'store_id'=>$admin->store_id]) + ->andWhere($data??'') + ->all(); }else{ - $all_sale= Reconciliation::find()->alias('r')->andWhere(['r.status' => 1])->andWhere($data??'')->groupBy('r.drug_id')->sum('number'); - $all_total_price= Reconciliation::find()->alias('r')->andWhere(['r.status' => 1])->andWhere($data??'')->groupBy('r.drug_id')->sum('total_price'); + $resData= Reconciliation::find() + ->andWhere(['status' => 1]) + ->andWhere($data??'') + ->all(); + } + $allSale = 0; + $totalPrice = 0; + foreach ($resData as $key=>$value) { + $allSale = bcadd($allSale, $value->number, 0); + $totalPrice = bcadd($totalPrice, $value->total_price, 0); } return [ - 'all_sale'=>$all_sale??0, - 'all_total_price'=>$all_total_price??0, + 'all_sale'=>$allSale??0, + 'all_total_price'=>$totalPrice??0, ]; }