修复部分对账统计

This commit is contained in:
2024-09-30 17:04:41 +08:00
parent 81976f4d1b
commit bede834355

View File

@@ -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,
];
}