|
|
@@ -9,10 +9,14 @@ use Illuminate\Support\Facades\Redis;
|
|
|
|
|
|
class FinanceService extends Service
|
|
|
{
|
|
|
- public function financeEdit($data,$user){
|
|
|
+ public function financeEdit($data){
|
|
|
list($status,$msg) = $this->financeRule($data,false);
|
|
|
if(!$status) return [$status,$msg];
|
|
|
|
|
|
+ FinanceDetail::where('id',$data['id'])->update([
|
|
|
+ 'remark' => $data['remark'] ?? ''
|
|
|
+ ]);
|
|
|
+
|
|
|
return [true,'保存成功!'];
|
|
|
}
|
|
|
|
|
|
@@ -24,6 +28,10 @@ class FinanceService extends Service
|
|
|
}
|
|
|
|
|
|
public function financeRule($data,$is_add = true){
|
|
|
+ if(! $is_add){
|
|
|
+ if(empty($data['id'])) return [false,'ID不能为空!'];
|
|
|
+ }
|
|
|
+
|
|
|
return [true,''];
|
|
|
}
|
|
|
|
|
|
@@ -45,9 +53,8 @@ class FinanceService extends Service
|
|
|
->leftJoin('finance_detail as b','b.finance_id','a.id')
|
|
|
->where('a.del_time',0)
|
|
|
->where('b.del_time',0)
|
|
|
- ->select('a.finance_account_name','a.account','a.ifsc','a.crt_time','b.id','b.amount','b.status','b.confirm_time')
|
|
|
- ->orderBy('a.id','asc')
|
|
|
- ->orderBy('b.status','asc');
|
|
|
+ ->select('a.finance_account_name','a.account','a.ifsc','a.crt_time','b.id','b.amount','b.status','b.confirm_time','b.remark','b.utr')
|
|
|
+ ->orderBy('a.id','asc');
|
|
|
|
|
|
if(! empty($data['finance_account_name'])) $model->where('a.finance_account_name', 'LIKE', '%'.$data['finance_account_name'].'%');
|
|
|
if(! empty($data['account'])) $model->where('a.account', 'LIKE', '%'.$data['account'].'%');
|
|
|
@@ -56,6 +63,7 @@ class FinanceService extends Service
|
|
|
if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) $model->whereBetween('a.crt_time',[$data['crt_time'][0],$data['crt_time'][1]]);
|
|
|
if(! empty($data['confirm_time'][0]) && ! empty($data['confirm_time'][1])) $model->whereBetween('b.confirm_time',[$data['confirm_time'][0],$data['confirm_time'][1]]);
|
|
|
if(isset($data['status'])) $model->where('b.status',$data['status']);
|
|
|
+ if(! empty($data['utr'])) $model->where('b.utr',$data['utr']);
|
|
|
|
|
|
$list = $this->limit($model,'',$data);
|
|
|
$list = $this->fillFinanceList($list);
|
|
|
@@ -118,14 +126,35 @@ class FinanceService extends Service
|
|
|
// }
|
|
|
|
|
|
public function financeDetailList($data){
|
|
|
- $model = FinanceDetail::where('del_time',0)
|
|
|
- ->select('id','finance_id','amount','crt_time','confirm_time','status','order_number')
|
|
|
- ->orderBy('id','desc');
|
|
|
+ $model = Finance::where('del_time',0)
|
|
|
+ ->select('id','finance_account_name','account','ifsc','amount','crt_time')
|
|
|
+ ->orderBy('id','asc');
|
|
|
|
|
|
- if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
|
|
|
if(! empty($data['amount'])) $model->where('amount', $data['amount']);
|
|
|
- if(isset($data['status'])) $model->where('status',$data['status']);
|
|
|
- if(! empty($data['confirm_time'][0]) && ! empty($data['confirm_time'][1])) $model->whereBetween('confirm_time',[$data['confirm_time'][0],$data['confirm_time'][1]]);
|
|
|
+ if(isset($data['status'])) {
|
|
|
+ if($data['status'] == 0 || $data['status'] == 2){
|
|
|
+ if($data['status'] == 0){
|
|
|
+ $k1 = 0;$k2 = 2;
|
|
|
+ }else{
|
|
|
+ $k1 = 2; $k2 = 0;
|
|
|
+ }
|
|
|
+ $return = FinanceDetail::whereHas('finance_detail', function ($query) use ($k1) {
|
|
|
+ $query->where('status', $k1);
|
|
|
+ })->whereDoesntHave('finance_detail', function ($query) use ($k2) {
|
|
|
+ $query->where('status', '!=', $k2);
|
|
|
+ })->select('finance_id')->distinct()->get()->toArray();
|
|
|
+ }elseif ($data['status'] == 1){
|
|
|
+ $k1 = 0;$k2 = 2;
|
|
|
+ $return = FinanceDetail::whereIn('status', [$k1, $k2])
|
|
|
+ ->select('finance_id')
|
|
|
+ ->groupBy('finance_id')
|
|
|
+ ->havingRaw('COUNT(DISTINCT status) = 2')
|
|
|
+ ->get()
|
|
|
+ ->toArray();
|
|
|
+ }
|
|
|
+
|
|
|
+ $model->whereIn('id',array_column($return,'finance_id'));
|
|
|
+ }
|
|
|
if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) $model->whereBetween('crt_time',[$data['crt_time'][0],$data['crt_time'][1]]);
|
|
|
|
|
|
$list = $this->limit($model,'',$data);
|
|
|
@@ -137,10 +166,48 @@ class FinanceService extends Service
|
|
|
public function fillFinanceDetailList($data){
|
|
|
if(empty($data['data'])) return $data;
|
|
|
|
|
|
+ $detail = FinanceDetail::where('del_time',0)
|
|
|
+ ->whereIn('finance_id',array_column($data['data'],'id'))
|
|
|
+ ->select('finance_id','status','payment_status','amount')
|
|
|
+ ->get()->toArray();
|
|
|
+ $status_map = $money_map = [];
|
|
|
+ if(! empty($detail)) {
|
|
|
+ foreach ($detail as $value){
|
|
|
+ if(isset($status_map[$value['finance_id']])){
|
|
|
+ if(! in_array($value['status'], $status_map[$value['finance_id']])) $status_map[$value['finance_id']][] = $value['status'];
|
|
|
+ }else{
|
|
|
+ $status_map[$value['finance_id']][] = $value['status'];
|
|
|
+ }
|
|
|
+
|
|
|
+ if(isset($money_map[$value['finance_id']])){
|
|
|
+ $money_map[$value['finance_id']][$value['payment_status']] += $value['amount'];
|
|
|
+ }else{
|
|
|
+ $money_map[$value['finance_id']][$value['payment_status']] = $value['amount'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
date_default_timezone_set('PRC');
|
|
|
foreach ($data['data'] as $key => $value){
|
|
|
- $data['data'][$key]['status_name'] = FinanceDetail::$status[$value['status']] ?? '';
|
|
|
- $data['data'][$key]['confirm_time'] = $value['confirm_time'] ? date("Y-m-d",$value['confirm_time']) : '';
|
|
|
+ //状态
|
|
|
+ $status = $status_map[$value['id']] ?? [];
|
|
|
+ $status_count = count($status);
|
|
|
+ $status_val = isset($status[0]) ? $status[0] : 0;
|
|
|
+ if($status_count > 1){
|
|
|
+ $data['data'][$key]['status_name'] = FinanceDetail::$status[1];
|
|
|
+ }else{
|
|
|
+ $data['data'][$key]['status_name'] = FinanceDetail::$status[$status_val];
|
|
|
+ }
|
|
|
+
|
|
|
+ //金额
|
|
|
+ $m = $money_map[$value['id']] ?? [];
|
|
|
+ $success_money = $m[FinanceDetail::Payment_four] ?? 0;
|
|
|
+ $pending_money = $m[FinanceDetail::Payment_three] ?? 0;
|
|
|
+ $not_success_money = ($m[FinanceDetail::Payment_one] ?? 0) + ($m[FinanceDetail::Payment_two] ?? 0);
|
|
|
+ $data['data'][$key]['success_money'] = $success_money;
|
|
|
+ $data['data'][$key]['pending_money'] = $pending_money;
|
|
|
+ $data['data'][$key]['not_success_money'] = $not_success_money;
|
|
|
+
|
|
|
$data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d",$value['crt_time']) : '';
|
|
|
}
|
|
|
|
|
|
@@ -194,12 +261,14 @@ class FinanceService extends Service
|
|
|
FinanceDetail::where('id',$data['id'])->update([
|
|
|
'order_number' => $order_number,
|
|
|
'status' => 2,
|
|
|
+ 'payment_status' => 1,
|
|
|
'confirm_time' => time()
|
|
|
]);
|
|
|
|
|
|
return [true,''];
|
|
|
}
|
|
|
|
|
|
+ //加原子锁
|
|
|
public function limitingRequest($a = 0, $data){
|
|
|
$key = "limitingRequest" . $data['id'];
|
|
|
$value = Redis::get($key);
|
|
|
@@ -225,25 +294,13 @@ class FinanceService extends Service
|
|
|
"ifsc" => $data['ifsc'],
|
|
|
"amount" => $data['amount'],
|
|
|
];
|
|
|
- $send['sign'] = $this->sign($send);
|
|
|
+ $send['sign'] = EncryptService::sign($send);
|
|
|
list($status, $msg) = $this->paymentRequest($send);
|
|
|
if(! $status) return [false, $msg];
|
|
|
|
|
|
return [true, $msg];
|
|
|
}
|
|
|
|
|
|
- //加密
|
|
|
- public function sign($data){
|
|
|
- $str = [];
|
|
|
- sort($data);
|
|
|
- foreach ($data as $k=>$v){
|
|
|
- $str[] = $k.'='.$v;
|
|
|
- }
|
|
|
-
|
|
|
- $vaild = implode(',',$str).'doTAKtnpiG';
|
|
|
- return md5($vaild);
|
|
|
- }
|
|
|
-
|
|
|
//发送支付请求返回
|
|
|
public function paymentRequest($send){
|
|
|
$url = "https://api2.indiacashpayment.in/chargeMoney9321";
|