收付款统计
This commit is contained in:
@@ -3,7 +3,9 @@
|
||||
namespace app\admin\controller\dashboard;
|
||||
|
||||
use app\common\controller\BaseController;
|
||||
use app\common\model\FinPaymentApply;
|
||||
use app\common\model\FinReceipt;
|
||||
use app\common\model\SysCurrency;
|
||||
use support\Request;
|
||||
|
||||
class FinStatisticsController extends BaseController
|
||||
@@ -16,33 +18,100 @@ class FinStatisticsController extends BaseController
|
||||
public function statistics(Request $request)
|
||||
{
|
||||
try {
|
||||
$currency = SysCurrency::where('status',1)->get();
|
||||
$query = FinReceipt::where('payment_apply_id','>',0);
|
||||
|
||||
$result = [];
|
||||
//已认领数量
|
||||
$result['claimed_num'] = $query->count();
|
||||
//已认领金额
|
||||
$result['claimed_amount'] = $query->sum('amount');
|
||||
// $result['claimed_amount'] = $query->sum('amount');
|
||||
$result['claimed_amount'] = array_values($this->receiptStatisticsSum($query, $currency)); //各币种的已认领金额
|
||||
$result['claimed_amount_sum'] =$this->amountSum($result['claimed_amount']); //已认领的人民币总金额
|
||||
|
||||
//未入账数量
|
||||
$result['unreceived_num'] = FinReceipt::whereNull('received_at')->count();
|
||||
$query2 = FinReceipt::whereNull('received_at');
|
||||
$result['unreceived_num'] = $query2->count();
|
||||
//未入账金额
|
||||
$result['unreceived_amount'] = FinReceipt::whereNull('received_at')->sum('amount');
|
||||
// $result['unreceived_amount'] = $query2->sum('amount');
|
||||
$result['unreceived_amount'] = array_values($this->receiptStatisticsSum($query2, $currency)); //各币种的未入账金额
|
||||
$result['unreceived_amount_sum'] = $this->amountSum($result['unreceived_amount']); //未入账的已认领的人民币总金额
|
||||
|
||||
$query = FinReceipt::whereNull('payment_apply_id');
|
||||
$query3 = FinReceipt::whereNull('payment_apply_id');
|
||||
|
||||
//未认领数量
|
||||
$result['unclaimed_num'] = $query->count();
|
||||
$result['unclaimed_num'] = $query3->count();
|
||||
//未认领金额
|
||||
$result['unclaimed_amount'] = $query->sum('amount');
|
||||
// $result['unclaimed_amount'] = $query3->sum('amount');
|
||||
$result['unclaimed_amount'] = $this->receiptStatisticsSum($query3, $currency); //各币种的未认领金额
|
||||
$result['unclaimed_amount_sum'] = $this->amountSum($result['unclaimed_amount']); //未认领的已认领的人民币总金额
|
||||
|
||||
//已超时未认领数量
|
||||
$result['timeout'] = $query->where('created_at','<',time()-24*3600)->count();
|
||||
$query4 = $query3->where('created_at','<',time()-24*3600);
|
||||
$result['timeout'] = $query4->count();
|
||||
|
||||
//在途资金
|
||||
//1、没有认领的付款资金
|
||||
$query5 = FinPaymentApply::where('receipt_id', '=', 0);
|
||||
$unclaimed_payment_amount = $this->receiptStatisticsSum($query5, $currency);
|
||||
foreach ($unclaimed_payment_amount as $key => &$value) {
|
||||
$value['amount'] = $value['amount'] - $result['unclaimed_amount'][$key]['amount'];
|
||||
}
|
||||
$result['unclaimed_payment_amount'] = array_values($result['unclaimed_payment_amount']);
|
||||
$result['unclaimed_payment_amount_sum'] = $this->amountSum($result['unclaimed_payment_amount']);
|
||||
//在途资金 = 没有认领的付款资金-未认领的收款资金
|
||||
$result['intransit_amount'] = $result['unclaimed_payment_amount_sum'] - $result['unclaimed_amount_sum'];
|
||||
|
||||
//在途数量 = 没有认领的付款数量-未认领的收款数量
|
||||
$result['intransit_count'] = count($result['unclaimed_payment_amount']) - count($result['unclaimed_amount']);
|
||||
|
||||
//未认领金额重新组织索引
|
||||
$result['unclaimed_amount'] = array_values($result['unclaimed_amount']);
|
||||
return $this->success($result);
|
||||
} catch (\Throwable $e) {
|
||||
return $this->error($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据不同条件查询收款金额
|
||||
* @param $query
|
||||
* @param $currency
|
||||
* @return array
|
||||
*/
|
||||
public function receiptStatisticsSum($query, $currency)
|
||||
{
|
||||
$amount = [];
|
||||
foreach ($currency as $k => $v) {
|
||||
$amount[$v->currency_code] = [
|
||||
'currency_code' => $v->currency_code,
|
||||
'exchange_rate' => $v->exchange_rate,
|
||||
'amount' => $query->where('currency_id',$v->id)->sum('amount'),
|
||||
];
|
||||
}
|
||||
return $amount;
|
||||
}
|
||||
|
||||
/**
|
||||
* 不同币种汇率换算之后求和
|
||||
* @param $query
|
||||
* @param $currency
|
||||
*/
|
||||
public function amountSum($amount)
|
||||
{
|
||||
$amountSum = 0;
|
||||
foreach ($amount as $v) {
|
||||
// 转换为整数(乘以100避免浮点数问题)
|
||||
$v['amount'] = (int) round($v['amount'] * 100);
|
||||
$v['exchange_rate'] = (int) round($v['exchange_rate'] * 10000); // 汇率保留4位小数
|
||||
$amountSum += $v['amount'] * $v['exchange_rate'];
|
||||
}
|
||||
|
||||
// 转换回金额(除以1000000,因为汇率乘了10000)
|
||||
$result = $amountSum / 1000000;
|
||||
|
||||
// 四舍五入到2位小数
|
||||
return round($amountSum, 2);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user