|
@@ -3,9 +3,9 @@
|
|
|
namespace App\Service;
|
|
|
|
|
|
use App\Import\Import;
|
|
|
-use App\Model\Employee;
|
|
|
use App\Model\Finance;
|
|
|
use App\Model\FinanceDetail;
|
|
|
+use Illuminate\Support\Facades\Redis;
|
|
|
|
|
|
class FinanceService extends Service
|
|
|
{
|
|
@@ -41,16 +41,20 @@ class FinanceService extends Service
|
|
|
}
|
|
|
|
|
|
public function financeList($data){
|
|
|
- $model = Finance::where('del_time',0)
|
|
|
- ->select('id','finance_account_name','account','ifsc','amount','crt_id','crt_time')
|
|
|
- ->orderBy('id','desc');
|
|
|
-
|
|
|
- if(! empty($data['finance_account_name'])) $model->where('finance_account_name', 'LIKE', '%'.$data['finance_account_name'].'%');
|
|
|
- if(! empty($data['account'])) $model->where('account', 'LIKE', '%'.$data['account'].'%');
|
|
|
- if(! empty($data['ifsc'])) $model->where('ifsc', 'LIKE', '%'.$data['ifsc'].'%');
|
|
|
- if(! empty($data['amount'])) $model->where('amount', $data['amount']);
|
|
|
- if(! empty($data['crt_id'])) $model->where('crt_id', $data['crt_id']);
|
|
|
- if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) $model->whereBetween('crt_time',[$data['crt_time'][0],$data['crt_time'][1]]);
|
|
|
+ $model = Finance::from('finance as a')
|
|
|
+ ->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('b.id','desc');
|
|
|
+
|
|
|
+ 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'].'%');
|
|
|
+ if(! empty($data['ifsc'])) $model->where('a.ifsc', 'LIKE', '%'.$data['ifsc'].'%');
|
|
|
+ if(! empty($data['amount'])) $model->where('b.amount', $data['amount']);
|
|
|
+ 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']);
|
|
|
|
|
|
$list = $this->limit($model,'',$data);
|
|
|
$list = $this->fillFinanceList($list);
|
|
@@ -61,40 +65,66 @@ class FinanceService extends Service
|
|
|
public function fillFinanceList($data){
|
|
|
if(empty($data['data'])) return $data;
|
|
|
|
|
|
- $map = Employee::whereIn('id',array_unique(array_column($data['data'],'crt_id')))
|
|
|
- ->pluck('emp_name','id')
|
|
|
- ->toArray();
|
|
|
-
|
|
|
date_default_timezone_set('PRC');
|
|
|
foreach ($data['data'] as $key => $value){
|
|
|
- $data['data'][$key]['crt_name'] = $map[$value['crt_id']] ?? '';
|
|
|
+ $data['data'][$key]['confirm_time'] = $value['confirm_time'] ? date("Y-m-d",$value['confirm_time']) : '';
|
|
|
$data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d",$value['crt_time']) : '';
|
|
|
+ $data['data'][$key]['status_name'] = FinanceDetail::$status[$value['status']] ?? '';
|
|
|
}
|
|
|
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
+// public function financeList($data){
|
|
|
+// $model = Finance::where('del_time',0)
|
|
|
+// ->select('id','finance_account_name','account','ifsc','amount','crt_id','crt_time','confirm_time')
|
|
|
+// ->orderBy('id','desc');
|
|
|
+//
|
|
|
+// if(! empty($data['finance_account_name'])) $model->where('finance_account_name', 'LIKE', '%'.$data['finance_account_name'].'%');
|
|
|
+// if(! empty($data['account'])) $model->where('account', 'LIKE', '%'.$data['account'].'%');
|
|
|
+// if(! empty($data['ifsc'])) $model->where('ifsc', 'LIKE', '%'.$data['ifsc'].'%');
|
|
|
+// if(! empty($data['amount'])) $model->where('amount', $data['amount']);
|
|
|
+// if(! empty($data['crt_id'])) $model->where('crt_id', $data['crt_id']);
|
|
|
+// if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) $model->whereBetween('crt_time',[$data['crt_time'][0],$data['crt_time'][1]]);
|
|
|
+// if(! empty($data['confirm_time'][0]) && ! empty($data['confirm_time'][1])) $model->whereBetween('confirm_time',[$data['confirm_time'][0],$data['confirm_time'][1]]);
|
|
|
+//
|
|
|
+// $list = $this->limit($model,'',$data);
|
|
|
+// $list = $this->fillFinanceList($list);
|
|
|
+//
|
|
|
+// return [200,$list];
|
|
|
+// }
|
|
|
+//
|
|
|
+// public function fillFinanceList($data){
|
|
|
+// if(empty($data['data'])) return $data;
|
|
|
+//
|
|
|
+// $financeDetailMap = FinanceDetail::where('del_time',0)
|
|
|
+// ->whereIn('finance_id',array_column($data['data'],'id'))
|
|
|
+// ->select('finance_id','status')
|
|
|
+// ->groupBy('finance_id')
|
|
|
+// ->pluck('status','finance_id')->toArray();
|
|
|
+// $map = Employee::whereIn('id',array_unique(array_column($data['data'],'crt_id')))
|
|
|
+// ->pluck('emp_name','id')
|
|
|
+// ->toArray();
|
|
|
+//
|
|
|
+// date_default_timezone_set('PRC');
|
|
|
+// foreach ($data['data'] as $key => $value){
|
|
|
+// $data['data'][$key]['crt_name'] = $map[$value['crt_id']] ?? '';
|
|
|
+// $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d",$value['crt_time']) : '';
|
|
|
+// $data['data'][$key]['status'] = FinanceDetail::$status[$financeDetailMap[$value['id']]] ?? '';
|
|
|
+// }
|
|
|
+//
|
|
|
+// return $data;
|
|
|
+// }
|
|
|
+
|
|
|
public function financeDetailList($data){
|
|
|
$model = FinanceDetail::where('del_time',0)
|
|
|
- ->select('id','finance_id','amount','crt_time')
|
|
|
+ ->select('id','finance_id','amount','crt_time','confirm_time','status','order_number')
|
|
|
->orderBy('id','desc');
|
|
|
|
|
|
- if(! empty($data['finance_account_name']) || ! empty($data['account']) || ! empty($data['ifsc']) || ! empty($data['crt_id']) || ! empty($data['total_amount'])){
|
|
|
- $search = '';
|
|
|
- if(! empty($data['finance_account_name'])) $search .= "(finance_account_name LIKE '%" . $data['finance_account_name'] . "%') AND ";
|
|
|
- if(! empty($data['account'])) $search .= "(account LIKE '%" . $data['account'] . "%') AND ";
|
|
|
- if(! empty($data['ifsc'])) $search .= "(ifsc LIKE '%" . $data['ifsc'] . "%') AND ";
|
|
|
- if(! empty($data['crt_id'])) $search .= "(crt_id = {$data['crt_id']}) AND ";
|
|
|
- if(! empty($data['total_amount'])) $search .= "(amount = {$data['total_amount']}) AND ";
|
|
|
- $search = rtrim($search,'AND ');
|
|
|
- $search = "({$search})";
|
|
|
- $result = Finance::where('del_time',0)
|
|
|
- ->whereRaw($search)
|
|
|
- ->select('id')
|
|
|
- ->get()->toArray();
|
|
|
- $model->whereIn('finance_id', array_column($result,'id'));
|
|
|
- }
|
|
|
+ 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(! 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);
|
|
@@ -106,24 +136,11 @@ class FinanceService extends Service
|
|
|
public function fillFinanceDetailList($data){
|
|
|
if(empty($data['data'])) return $data;
|
|
|
|
|
|
- //主表信息
|
|
|
- $finance = Finance::whereIn('id',array_unique(array_column($data['data'],'finance_id')))
|
|
|
- ->select('id','finance_account_name','account','ifsc','amount as total_amount','crt_id')
|
|
|
- ->get()->toArray();
|
|
|
- $finance_map = array_column($finance,null,'id');
|
|
|
-
|
|
|
- $map = Employee::whereIn('id',array_unique(array_column($finance,'crt_id')))
|
|
|
- ->pluck('emp_name','id')
|
|
|
- ->toArray();
|
|
|
-
|
|
|
date_default_timezone_set('PRC');
|
|
|
foreach ($data['data'] as $key => $value){
|
|
|
- $tmp = $finance_map[$value['finance_id']] ?? [];
|
|
|
- unset($tmp['id']);
|
|
|
-
|
|
|
- $data['data'][$key]['crt_name'] = $map[$tmp['crt_id']] ?? '';
|
|
|
+ $data['data'][$key]['status_name'] = FinanceDetail::$status[$value['status']] ?? '';
|
|
|
+ $data['data'][$key]['confirm_time'] = $value['confirm_time'] ? date("Y-m-d",$value['confirm_time']) : '';
|
|
|
$data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d",$value['crt_time']) : '';
|
|
|
- $data['data'][$key] = array_merge_recursive($data['data'][$key],$tmp);
|
|
|
}
|
|
|
|
|
|
return $data;
|
|
@@ -141,18 +158,74 @@ class FinanceService extends Service
|
|
|
return [true, ''];
|
|
|
}
|
|
|
|
|
|
- public function financeChangeStatus($data){
|
|
|
+ protected function getData($id){
|
|
|
+ if(empty($id)) return [];
|
|
|
+
|
|
|
+ $model = FinanceDetail::from('finance_detail as a')
|
|
|
+ ->leftJoin('finance as b','b.id','a.finance_id')
|
|
|
+ ->where('a.del_time',0)
|
|
|
+ ->where('a.id',$id)
|
|
|
+ ->select('a.id','a.amount','a.status','b.finance_account_name','b.account','b.ifsc')
|
|
|
+ ->first();
|
|
|
+ if(! $model) return [];
|
|
|
+ return $model->toArray();
|
|
|
+ }
|
|
|
+
|
|
|
+ public function financeConfirm($data){
|
|
|
if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
|
|
|
+ //获取数据
|
|
|
+ $detail = $this->getData($data['id']);
|
|
|
+ if(empty($detail)) return [false,'确认数据不存在!'];
|
|
|
+ //是否已确认
|
|
|
+ if($detail['status'] == 2) return [false,'已确认,请勿重复操作!'];
|
|
|
+
|
|
|
+ //验证验证码
|
|
|
if($this->isEmpty($data,'code')) return [false,'验证码不能为空!'];
|
|
|
+ list($status,$msg) = (new CodeService())->ConfirmCodeRule($data);
|
|
|
+ if(! $status) return [false,$msg];
|
|
|
+
|
|
|
+ //限制请求 发送支付申请
|
|
|
+ list($status,$return) = $this->limitingRequest(0, $detail);
|
|
|
+ if(! $status) return [false, $return];
|
|
|
+
|
|
|
+ //订单号
|
|
|
+ $order_number = $return;
|
|
|
+ FinanceDetail::where('id',$data['id'])->update([
|
|
|
+ 'order_number' => $order_number,
|
|
|
+ 'status' => 2,
|
|
|
+ 'confirm_time' => time()
|
|
|
+ ]);
|
|
|
+
|
|
|
+ return [true,''];
|
|
|
+ }
|
|
|
|
|
|
- //校验验证码 TODO
|
|
|
+ public function limitingRequest($a = 0, $data){
|
|
|
+ $key = "limitingRequest" . $data['id'];
|
|
|
+ $value = Redis::get($key);
|
|
|
|
|
|
- //校验通过删除 会话中的令牌 或者等待自己过期
|
|
|
+ if ($a == 5) return [false,'意外错误!'];//避免潜在的无限递归问题
|
|
|
|
|
|
- //更新状态
|
|
|
- Finance::whereIn('id',$data['id'])
|
|
|
- ->update(['status' => 1]);
|
|
|
+ if ($value == 1) {
|
|
|
+ sleep(1);
|
|
|
+ $a++;
|
|
|
|
|
|
- return [true,''];
|
|
|
+ if ($a > 3) return [false, '重复操作同一数据!'];
|
|
|
+
|
|
|
+ return $this->limitingRequest($a, $data);
|
|
|
+ }
|
|
|
+
|
|
|
+ Redis::setnx($key, 1);
|
|
|
+ Redis::expire($key, 5); //五秒后过期
|
|
|
+
|
|
|
+ // 发送支付 TODO
|
|
|
+ list($status, $msg, $orderNumber) = $this->paymentRequest($data);
|
|
|
+ if($status == 201) return [false, $msg];
|
|
|
+
|
|
|
+ return [true, $orderNumber];
|
|
|
+ }
|
|
|
+
|
|
|
+ //发送支付请求返回 TODO
|
|
|
+ public function paymentRequest($data){
|
|
|
+ return [200,'成功','测试订单号222222'];
|
|
|
}
|
|
|
}
|