Merge branch 'develop' into feature/mzl_dev

This commit is contained in:
mzl
2025-11-04 10:32:22 +08:00
9 changed files with 210 additions and 19 deletions
+27 -1
View File
@@ -127,6 +127,13 @@ class FinPaymentApplyService
return $data;
}
public function afterServiceUpdate($res, Request $request)
{
if($res->submit_files != '' && $res->receipt_id != 0)
FinReceipt::where('id', $res->receipt_id)->update(['submit_files' => $res->submit_files]);
}
/**
* 生成唯一的付款申请编码
* 格式:PA + 日期 + 6位字母数字组合
@@ -207,7 +214,19 @@ class FinPaymentApplyService
$query->whereDoesntHave('receipt');
}
if ((isset($param['scene']) && $param['scene'] == 'list') || empty($param['receipt_id'])) {
if(isset($param['scene']) && $param['scene'] == 'pending'){ //待入账列表
$query->where('receipt_id', '>' ,'0');
$query->where('submit_files','!=','');
$query->whereNull('received_at');
}
if($param['scene'] == 'delete'){ //查询作废数据
$query->onlyTrashed();
}elseif ($param['scene'] == 'all'){ //查询包含作废数据的全量数据
$query->withTrashed();
}
if ((isset($param['scene']) && ($param['scene'] == 'list' || $param['scene'] == 'pending'))|| empty($param['receipt_id']) ) {
return $query->orderBy('id','desc')->paginate($limit, ['*'], 'page', $page);
}
@@ -264,4 +283,11 @@ class FinPaymentApplyService
return $query->paginate($limit, ['*'], 'page', $page);
}
public function delete($id)
{
$res = FinPaymentApply::where('id', $id)->delete();
return $res;
}
}
+24 -4
View File
@@ -10,6 +10,7 @@ use app\common\validate\FinReceiptValidate;
use app\common\traits\crud\CrudServiceTrait;
use app\common\model\FinReceipt;
use support\exception\BusinessException;
use support\Redis;
use support\Request;
class FinReceiptService
@@ -194,6 +195,10 @@ class FinReceiptService
$page = (int)$request->get('current', 1);
$param = $request->all();
if(isset($param['voucher_no_timeout_hour'])){
redis::set('voucher_no_timeout_hour', $param['voucher_no_timeout_hour'], 'EX', 30);
}
$where = [];
// 汇款国家
@@ -218,7 +223,7 @@ class FinReceiptService
// 构建查询
$query = $this->modelClass::where($where);
// 没有付款记录的收款记录
// 收款记录绑定情况
if (isset($param['payment_apply']) && $param['payment_apply'] == 'not') {
$query->where('payment_apply_id', 0);
} elseif (isset($param['payment_apply']) && $param['payment_apply'] == 'already') {
@@ -228,7 +233,12 @@ class FinReceiptService
$query->where('created_at', '<' ,time() - 24*60*60);
}
if (isset($param['scene']) && $param['scene'] == 'list') {
if(isset($param['scene']) && $param['scene'] == 'pending'){ //待入账列表
$query->where('payment_apply_id', '>' ,'0');
$query->where('submit_files','!=','');
}
if (isset($param['scene']) && ($param['scene'] == 'list' ||$param['scene'] == 'pending')) {
return $query->paginate($limit, ['*'], 'page', $page);
}
@@ -277,13 +287,20 @@ class FinReceiptService
return $query->paginate($limit, ['*'], 'page', $page);
}
public function credit($id)
public function credit($id, $exchange_rate)
{
$finReceipt = FinReceipt::find($id);
if(!empty($finReceipt->received_at)){
throw new BusinessException('该记录已将确认入账');
}
$res = $this->logic->credit($id);
$data = [
'received_at' => time(),
'exchange_rate' => $exchange_rate,
'total_amount_cny' => round($finReceipt['amount']*$exchange_rate,2),
];
$res = $this->logic->credit($id,$data);
FinPaymentApply::where('id', $finReceipt->payment_apply_id)->update(['received_at' => $data['received_at']]);
$this->afterServiceUpdate(['id'=>$id]);
return $res;
}
@@ -298,6 +315,7 @@ class FinReceiptService
public function serviceUpdatePayment(Request $request, array $data = [], string $scene = 'payment')
{
$payment_apply_id = $request->input('payment_apply_id');
$id = $request->input('id');
$data = $this->preProcess(ucfirst($scene), $data, $request);
$config = $this->buildQueryConfig($request, $scene);
@@ -308,8 +326,10 @@ class FinReceiptService
$payment = FinPaymentApply::where('id', $payment_apply_id)->first();
$receipt = FinReceipt::find($id);
$data['discount_amount'] = $payment->amount - $receipt->amount ?? 0;
$data['submit_files'] = $payment->submit_files ?? '';
$updated = $this->logicUpdateBy($config, $data);
return $this->postProcess(ucfirst($scene), $data);
}
}