对账功能修改(修复历史遗留问题:中药对账没有按照贴数*克数计算)
This commit is contained in:
@@ -132,47 +132,59 @@ class StatementAccountController extends BaseAdminController
|
||||
*/
|
||||
public function actionDuiZhangDan()
|
||||
{
|
||||
// TODO 这里有问题,中药完全没有兼容
|
||||
// 获取GET请求参数
|
||||
$get = \Yii::$app->request->get();
|
||||
|
||||
// 验证请求参数中是否包含必要的字段
|
||||
$this->requestValidate($get, [
|
||||
['type', 'required']
|
||||
]);
|
||||
|
||||
// 获取当前用户信息
|
||||
$user = \Yii::$app->user->identity;
|
||||
|
||||
// 如果请求参数中包含开始时间和结束时间,则转换为时间戳
|
||||
if (!empty($get['start_time']) && !empty($get['end_time'])) {
|
||||
$start_time = strtotime($get['start_time'] . ' ' . '00:00:00');
|
||||
$end_time = strtotime($get['end_time'] . ' ' . '23:59:59');
|
||||
}
|
||||
|
||||
//诊所
|
||||
// 根据请求参数中的type值判断查询类型
|
||||
if ($get['type'] == 1) {
|
||||
// 如果type为1,则查询门店信息
|
||||
$query = Store::find()->alias('s');
|
||||
|
||||
// 如果用户角色为门店管理员,则只查询该用户所属的门店
|
||||
if ($user->role == UserRoleEnum::STORE_ADMIN) {
|
||||
$query->andWhere(['s.id' => $user->store_id]);
|
||||
}
|
||||
|
||||
// 如果请求参数中包含门店名称,则按门店名称模糊查询
|
||||
$store_name = $get['store_name'];
|
||||
if (!empty($store_name)) {
|
||||
$query->where(['like', 's.name', $store_name]);
|
||||
}
|
||||
|
||||
// 如果请求参数中包含开始时间和结束时间,则按时间范围查询
|
||||
if (!empty($start_time) && !empty($end_time)) {
|
||||
|
||||
if ($start_time == $end_time) {//筛选某一天
|
||||
if ($start_time == $end_time) {
|
||||
// 如果开始时间和结束时间相同,则筛选某一天的记录
|
||||
$time = FuncHelper::getDayBE($get['start_time']);
|
||||
|
||||
$end_time = $time[1];
|
||||
}
|
||||
|
||||
//按照下单时按筛选
|
||||
// 按下单时间筛选
|
||||
$query->with(['reconciliation' => function ($r) use ($start_time, $end_time) {
|
||||
$r->alias('re');
|
||||
$r->andWhere(['between', 're.xd_time', $start_time, $end_time]);
|
||||
}]);
|
||||
|
||||
//挂号搜索
|
||||
// 挂号搜索
|
||||
$register_data = ['between', 'r.xd_time', $start_time, $end_time];
|
||||
}
|
||||
|
||||
// 定义门店查询结果需要的字段及计算逻辑
|
||||
$this->field = [
|
||||
Store::class => [
|
||||
'id', 'name', 'shouzimu', 'position', 'pic', 'contact', 'mobile', 'offical_seal', 'see_rate',
|
||||
@@ -190,30 +202,29 @@ class StatementAccountController extends BaseAdminController
|
||||
},
|
||||
'register_price' => function ($m) use ($register_data) {
|
||||
$price = Ledger::find()->alias('r')->where(['user_id' => $m->id, 'status' => 1, 'user_type' => 1, 'order_type' => 2])->andWhere($register_data ?? '')->sum('money');
|
||||
// return $this->actionRegister($m->id,$register_data);
|
||||
return $price ?? 0;
|
||||
}
|
||||
]
|
||||
];
|
||||
} else {//药品
|
||||
} else {
|
||||
// 如果type不为1,则查询药品对账记录
|
||||
// 设置查询条件,查找状态为1的对账记录,按ID降序排序
|
||||
$query = Reconciliation::find()->alias('r')->where(['r.status' => 1]);
|
||||
|
||||
// 获取搜索参数:和药品名称
|
||||
// 获取搜索参数:药品名称
|
||||
$drug_name = $get['drug_name'];
|
||||
|
||||
|
||||
// 根据药品名称过滤药品
|
||||
$query->joinWith(['drug' => function ($d) use ($drug_name) {
|
||||
$d->alias('d');
|
||||
if (!empty($drug_name)) {
|
||||
$query->joinWith(['drug' => function ($d) use ($drug_name) {
|
||||
$d->alias('d');
|
||||
if (!empty($drug_name)) {
|
||||
$d->andWhere([
|
||||
'or',
|
||||
['like', 'd.drug_name', $drug_name],
|
||||
['like', 'd.pinyin_simple', $drug_name],
|
||||
]);
|
||||
}
|
||||
}]);
|
||||
}
|
||||
}]);
|
||||
|
||||
// 根据门店ID过滤对账记录
|
||||
if (!empty($get['store_id'])) {
|
||||
@@ -236,21 +247,14 @@ class StatementAccountController extends BaseAdminController
|
||||
|
||||
// 根据开始时间和结束时间过滤对账记录
|
||||
if (!empty($start_time) && !empty($end_time)) {
|
||||
|
||||
if ($start_time == $end_time) {//筛选当天
|
||||
if ($start_time == $end_time) {
|
||||
// 如果开始时间和结束时间相同,则筛选当天的记录
|
||||
$time = FuncHelper::getDayBE($get['start_time']);
|
||||
|
||||
$end_time = $time[1];
|
||||
}
|
||||
|
||||
$query->andWhere(['between', 'r.xd_time', $start_time, $end_time]);
|
||||
}
|
||||
|
||||
|
||||
// 按药品ID分组
|
||||
// $query->groupBy('drug_id');
|
||||
|
||||
// TODO 这里有问题
|
||||
// 定义查询字段及格式化函数
|
||||
$this->field = [
|
||||
Reconciliation::class => [
|
||||
@@ -272,20 +276,19 @@ class StatementAccountController extends BaseAdminController
|
||||
'treatement_fee' => 'productOrder.treatement_price'
|
||||
]
|
||||
];
|
||||
// $list = $this->create($query, $get)->getModels();
|
||||
|
||||
// 执行查询并处理结果
|
||||
$list = $query->asArray()->all();
|
||||
// 总销量 sale_number
|
||||
// 单个销量 number 不知道要这个干嘛
|
||||
// 总价 total_price
|
||||
// 总供货价 total_buy_price
|
||||
$result = [];
|
||||
foreach ($list as $value) {
|
||||
if (!empty($result[$value['drug_id']])) {
|
||||
// 如果结果中已存在该药品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 {
|
||||
// 如果结果中不存在该药品ID的记录,则添加新的记录
|
||||
$result[$value['drug_id']] = [
|
||||
'id' => $value['drug_id'],
|
||||
'drug_number' => $value['drug']['drug_number'],
|
||||
@@ -300,6 +303,8 @@ class StatementAccountController extends BaseAdminController
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// 返回处理后的结果
|
||||
return [
|
||||
'list' => array_values($result),
|
||||
'pageSize' => 1000,
|
||||
@@ -308,7 +313,9 @@ class StatementAccountController extends BaseAdminController
|
||||
];
|
||||
}
|
||||
|
||||
// 执行查询并返回结果
|
||||
return $this->create($query, $get);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -856,7 +863,7 @@ class StatementAccountController extends BaseAdminController
|
||||
// 计算门店收入
|
||||
$store_income = bcadd($treatement_price, bcsub(bcadd($drug_sale_price, $register_price, 4), $drug_give_price, 4), 2);
|
||||
// 总金额
|
||||
$all_sum = bcadd($drug_sale_price, $register_price, 4);
|
||||
$all_sum = bcadd($drug_sale_price, $register_price, 2);
|
||||
|
||||
// 返回统计结果
|
||||
return [
|
||||
@@ -888,43 +895,56 @@ class StatementAccountController extends BaseAdminController
|
||||
*/
|
||||
public function actionDrugStatistic()
|
||||
{
|
||||
// TODO 这里有问题(统计金额-药品)
|
||||
// 获取GET请求参数
|
||||
$get = \Yii::$app->request->get();
|
||||
// 获取当前用户信息
|
||||
$admin = \Yii::$app->user->identity;
|
||||
|
||||
// 检查是否存在开始时间和结束时间参数
|
||||
if (!empty($get['start_time']) && !empty($get['end_time'])) {
|
||||
// 将开始时间和结束时间转换为时间戳
|
||||
$start_time = strtotime($get['start_time'] . ' ' . '00:00:00');
|
||||
$end_time = strtotime($get['end_time'] . ' ' . '23:59:59');
|
||||
}
|
||||
|
||||
// 如果开始时间和结束时间都已定义
|
||||
if (!empty($start_time) && !empty($end_time)) {
|
||||
if ($start_time == $end_time) {//筛选某一天
|
||||
// 检查开始时间是否等于结束时间,即筛选某一天的数据
|
||||
if ($start_time == $end_time) {
|
||||
$time = FuncHelper::getDayBE($get['start_time']);
|
||||
$start_time = $get['start_time'];
|
||||
$end_time = $time[1];
|
||||
}
|
||||
// 构建时间条件数组
|
||||
$data = ['between', 'xd_time', $start_time, $end_time];
|
||||
}
|
||||
|
||||
// 根据用户角色查询数据
|
||||
if ($admin->role == UserRoleEnum::STORE_ADMIN) {
|
||||
// 店铺管理员查询时添加店铺ID条件
|
||||
$resData = Reconciliation::find()
|
||||
->andWhere(['status' => 1, 'store_id' => $admin->store_id])
|
||||
->andWhere($data ?? '')
|
||||
->all();
|
||||
->andWhere($data ?? '');
|
||||
} else {
|
||||
// 非店铺管理员查询时不添加店铺ID条件
|
||||
$resData = Reconciliation::find()
|
||||
->andWhere(['status' => 1])
|
||||
->andWhere($data ?? '')
|
||||
->all();
|
||||
->andWhere($data ?? '');
|
||||
}
|
||||
|
||||
// 初始化统计变量
|
||||
$allSale = 0;
|
||||
$totalPrice = 0;
|
||||
ds($resData->asArray()->all());
|
||||
// 遍历查询结果进行统计
|
||||
foreach ($resData as $key => $value) {
|
||||
// 累加销售数量
|
||||
$allSale += $value->number;
|
||||
// 累加总价格,使用bcadd函数进行高精度计算
|
||||
$totalPrice = bcadd($totalPrice, $value->total_price, 3);
|
||||
}
|
||||
|
||||
|
||||
// 返回统计结果
|
||||
return [
|
||||
'all_sale' => $allSale ?? 0,
|
||||
'all_total_price' => $totalPrice ?? 0,
|
||||
|
||||
Reference in New Issue
Block a user