cqpCow hace 2 años
padre
commit
383ca16573

+ 21 - 0
app/Http/Controllers/Api/CallBackController.php

@@ -0,0 +1,21 @@
+<?php
+namespace App\Http\Controllers\Api;
+
+use App\Service\CallBackService;
+use Illuminate\Http\Request;
+
+//回调
+class CallBackController extends BaseController
+{
+    //确认金额回调
+    public function confirmMoneyCallBack(Request $request){
+        $service = new CallBackService();
+        list($status,$data) = $service->confirmMoneyCallBack($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+}

+ 2 - 1
app/Import/Import.php

@@ -57,6 +57,7 @@ class Import implements ToArray {
                 $this->setMsg('数据必须完整填写!');
                 return ;
             }else{
+                $value[3] = trim($value[3]);
                 if(! is_numeric($value[3])){
                     $this->setMsg('请输入正确的金额!');
                     return ;
@@ -87,7 +88,7 @@ class Import implements ToArray {
                 'finance_account_name' => $value[0],
                 'account' => $value[1],
                 'ifsc' => $value[2],
-                'amount' => $value[3],
+                'amount' => trim($value[3]),
                 'crt_id' => $this->crt_id,
                 'crt_time' => $crt_time
             ];

+ 12 - 0
app/Model/FinanceDetail.php

@@ -16,4 +16,16 @@ class FinanceDetail extends Model
         1 => '确认中',
         2 => '已确认',
     ];
+
+    const Payment_one = -1;
+    const Payment_two = 0;
+    const Payment_three = 1;
+    const Payment_four = 2;
+
+    public static $payment_status = [
+        -1 => 'FAILED',
+        0 => 'DEFAULT',
+        1 => 'PENDING',
+        2 => 'SUCCESS',
+    ];
 }

+ 41 - 0
app/Service/CallBackService.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace App\Service;
+
+use App\Model\FinanceDetail;
+use Illuminate\Support\Facades\DB;
+use Mockery\Exception;
+
+class CallBackService extends Service
+{
+    const SUCCESS = 'PAY_SUCCESS';
+    const FAILED = 'PAY_FAIL';
+
+    public function confirmMoneyCallBack($data){
+        try {
+            $data = json_decode($data,true);
+            if(empty($data)) return;
+
+            if($data['status'] == self::FAILED || $data['status'] == self::SUCCESS){
+                DB::beginTransaction();
+
+                $obj = FinanceDetail::where('order_number',$data['platOrderId'])->first();
+                if(! $obj) return;
+                $obj->utr = $data['utr'] ?? '';
+                $obj->msg = $data['msg'] ?? '';
+
+                if($data['status'] == self::FAILED){
+                    $obj->payment_status = -1;
+                }else{
+                    $obj->payment_status = 2;
+                }
+                $obj->save();
+
+                DB::commit();
+            }
+        }catch (Exception $exception){
+            DB::rollBack();
+            return;
+        }
+    }
+}

+ 0 - 215
app/Service/CheckService.php

@@ -1,215 +0,0 @@
-<?php
-
-namespace App\Service;
-
-use App\Model\Construction;
-use App\Model\ConstructionOrderSub;
-use App\Model\InOutRecord;
-use App\Model\Inventory;
-use App\Model\InventoryInSub;
-use App\Model\InventoryOutSub;
-use App\Model\MaterialCharge;
-use App\Model\MaterialOrder;
-use App\Model\MaterialOrderInSub;
-use App\Model\MaterialReturn;
-use App\Model\RollFilmInventory;
-use App\Model\Setting;
-use App\Model\Transfer;
-use App\Model\TransferInSub;
-use App\Model\TransferOutSub;
-use App\Model\Warranty;
-use App\Service\Oa\OaService;
-use Illuminate\Support\Facades\DB;
-
-/**
- * 所有审批相关与流水
- * @package App\Models
- */
-class CheckService extends Service
-{
-    //审批操作对应的数值
-    const one = 1; //领料单申领区域审批
-    const two = 2; //领料单发货区域审批
-    const three = 3; //领料单收货区域审批
-    const four = 4; //领料单入库区域审批
-    const five = 5; //施工单审核
-    const six = 6; //退料单审核
-    const seven = 7; //调拨单详情审核
-    const eight = 8; //调拨单入库审核
-    const nine = 9; //调拨单出库审核
-    const ten = 10; //盘点单详情审核
-    const eleven = 11; //盘点单入库审核
-    const twl = 12; //盘点单出库审核
-    const thirteen = 13; //计费领料单审核
-
-    //中文对照
-    public $map = [
-        self::one => '领料单申领区域审批',
-        self::two => '领料单发货区域审批',
-        self::three => '领料单收货区域审批',
-        self::four => '领料单入库区域审批',
-        self::five => '施工单审核',
-        self::six => '退料单审核',
-        self::seven => '调拨单详情审核',
-        self::eight => '调拨单入库审核',
-        self::nine => '调拨单出库审核',
-        self::ten => '盘点单详情审核',
-        self::eleven => '盘点单入库审核',
-        self::twl => '盘点单出库审核',
-        self::thirteen => '计费领料单审核',
-    ];
-
-    const TYPE_ONE = 1;//通过
-    const TYPE_TWO = 2;//不通过
-
-    //对应具体单子的具体操作数值(将待审批改为通过或者未审批)
-    public static $opt_case = [
-        self::one => 'check_material_order_apply', //领料单申领区域审批
-        self::two => 'check_material_order_send', //领料单发货区域审批
-        self::three => 'check_material_order_take', //领料单收货区域审批
-        self::four => 'check_material_order_In', //领料单入库区域审批 审批通过后有入库流水
-        self::five => 'check_construction', //施工单审核  审批通过后有出库流水
-        self::six => 'check_material_return', //退料单审核  审批通过后有出库流水
-        self::seven => 'check_transfer_sub', //调拨单详情审核
-        self::eight => 'check_transfer_in_sub', //调拨单入库审核  审批通过后有入库流水
-        self::nine => 'check_transfer_out_sub', //调拨单出库审核  审批通过后有出库流水
-        self::ten => 'check_inventory_sub', //盘点单详情审核
-        self::eleven => 'check_inventory_in_sub', //盘点单入库审核   审批通过后有入库流水
-        self::twl => 'check_inventory_out_sub', //盘点单出库审核  审批通过后有出库流水
-        self::thirteen => 'check_material_charge', //计费领料单审核
-    ];
-
-    //单子审批通过后产生流水
-    public static $record = [
-        self::four => 'record_material_order_In',
-        self::five => 'record_construction',
-        self::six => 'record_material_return',
-        self::eight => 'record_transfer_in_sub',
-        self::nine => 'record_transfer_out_sub',
-        self::eleven => 'record_inventory_in_sub',
-        self::twl => 'record_inventory_out_sub',
-    ];
-
-    //将状态改为待审核
-    public static $opt_case2 = [
-        self::one => 'set_status_to_one',
-        self::two => '',
-        self::three => '',
-        self::four => '',
-        self::five => '',
-        self::six => '',
-        self::seven => '',
-        self::eight => '',
-        self::nine => '',
-        self::ten => '',
-        self::eleven => '',
-        self::twl => '',
-        self::thirteen => '',
-    ];
-
-    //将状态改为待审核
-    public function set_status_to_one($data){
-        return [true,''];
-    }
-
-    /**
-     * order_number 单据名称
-     * opt_case 审核单据的区域 有已经定义的方法
-     */
-    public function checkAll($data,$user){
-        if(empty($data['order_number']) || empty($data['opt_case']) || ! isset(self::$opt_case2[$data['opt_case']])) return [false,'必传参数不能为空或者参数值错误!'];
-
-        //具体方法
-        $function = self::$opt_case2[$data['opt_case']];
-
-        try{
-            DB::beginTransaction();
-
-            //更新单据的状态 从待审变成已审核
-            list($bool,$msg) = $this->$function($data);
-
-            if(! $bool){
-                DB::rollBack();
-                return [false, $msg];
-            }
-
-            //创建审批流
-            $args = [
-                'order_no' => $data['order_number'],
-                'menu_id' => $data['menu_id'] ?? 0,
-                'type' => $data['opt_case']
-            ];
-            $oa = new OaService();
-            $bool = $oa->createOaOrder($args);
-
-            DB::commit();
-            return [true, ''];
-        }catch (\Throwable $exception){
-            DB::rollBack();
-            return [false, $exception->getMessage()];
-        }
-
-    }
-    //创建审批流 将状态改为待审核  结束
-
-    //将待审核状态改为审批通过或者驳回
-    public function check_status($data){
-        return true;
-    }
-
-    //产生流水
-    public function record_create($data){
-        $result = [];
-
-        //写入流水
-        InOutRecord::insert($result);
-
-        return true;
-    }
-
-    /**
-     * 业务单据审核统一入库
-     * order_number 订单编号
-     * type 1 =》 通过  2  =》 驳回
-     * opt_case 具体审核类型 已定义同名静态变量
-     */
-    public function createRecordAndInventory($data = []){
-        if(empty($data['order_number']) || empty($data['type']) || empty($data['opt_case']) || ! isset(self::$opt_case[$data['opt_case']])) return [false,300];
-
-        //具体方法
-        $function = self::$opt_case[$data['opt_case']];
-
-        try{
-            DB::beginTransaction();
-
-            //更新单据的状态
-            $bool = $this->$function($data);
-
-            if($bool && $data['type'] == self::TYPE_ONE && isset(self::$record[$data['opt_case']])){
-                //审批通过 创建流水
-                $function_record = self::$record[$data['opt_case']];
-
-                $boolean = $this->$function_record($data);
-
-                if(! $boolean) { //创建流水失败 数据库回滚
-                    DB::rollBack();
-                    return [false, 300];
-                }
-
-                //更新库存
-                $inventory = new InventoryService();
-                $boole = $inventory->changeInventory($data);
-                if(! $boole){
-                    DB::rollBack();
-                    return [false, 300];
-                }
-            }
-
-            DB::commit();
-            return [true, 200];
-        }catch (\Throwable $exception){
-            DB::rollBack();
-            return [false, 201];
-        }
-    }
-}

+ 5 - 17
app/Service/CodeService.php

@@ -43,7 +43,7 @@ class CodeService extends Service
             "account" => $data['account'],
             "ip" => $this->getIP()
         ];
-        $send['sign'] = $this->sign($send);
+        $send['sign'] = EncryptService::sign($send);
 
         //发送验证码到手机
         list($status,$msg) = $this->sendCode($send);
@@ -75,13 +75,13 @@ class CodeService extends Service
         $send = [
             "code"=> $code,
             "type"=> 2,
-            "account" => $finance['account'],
-            "bankAccount" => $finance['finance_account_name'],
+            "account" => $finance['finance_account_name'],
+            "bankAccount" => $finance['account'],
             "ifsc" => $finance['ifsc'],
-            "amount" => $finance['amount'],
+            "amount" => (string)$finance['amount'],
             "ip" => $this->getIP()
         ];
-        $send['sign'] = $this->sign($send);
+        $send['sign'] = EncryptService::sign($send);
 
         //发送验证码到
         list($status,$msg) = $this->sendCode($send);
@@ -93,18 +93,6 @@ class CodeService extends Service
         return [true,''];
     }
 
-    //加密
-    public function sign($data){
-        $str = [];
-        sort($data);
-        foreach ($data as $k=>$v){
-            $str[] = $k.'='.$v;
-        }
-
-        $vaild = implode(',',$str).'doTAKtnpiG';
-        return md5($vaild);
-    }
-
     //发送验证码
     public function sendCode($send){
         $url = "https://api2.indiacashpayment.in/sendTelegramCode";

+ 21 - 0
app/Service/EncryptService.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace App\Service;
+
+class EncryptService extends Service{
+
+    //加密
+    public static function sign($data){
+        $str = [];
+        ksort($data);
+        foreach ($data as $k=>$v){
+            $str[] = $k.'='.trim($v);
+        }
+
+        $vaild = implode(',',$str).'doTAKtnpiG';
+        file_put_contents('sign.txt',$vaild.PHP_EOL,8);
+        file_put_contents('sign.txt',md5($vaild).PHP_EOL,8);
+
+        return md5($vaild);
+    }
+}

+ 82 - 25
app/Service/FinanceService.php

@@ -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";

+ 5 - 1
routes/api.php

@@ -19,13 +19,17 @@ Route::middleware('auth:api')->get('/user', function (Request $request) {
 
 Route::any('login', 'Api\LoginController@login');//登录
 Route::any('sendLoginCode', 'Api\CodeController@sendLoginCode');//发送登录验证码
+Route::any('confirmMoneyCallBack', 'Api\CallBackController@confirmMoneyCallBack');//发送登录验证码
+Route::any('financeDetailList', 'Api\FinanceController@financeDetailList');//出款明细
+
 Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('sendConfirmCode', 'Api\CodeController@sendConfirmCode');//发送确认验证码
 
     $route->any('financeList', 'Api\FinanceController@financeList');//财务出款
-    $route->any('financeDetailList', 'Api\FinanceController@financeDetailList');//出款明细
+//    $route->any('financeDetailList', 'Api\FinanceController@financeDetailList');//出款明细
     $route->any('financeImport', 'Api\FinanceController@financeImport');//财务出款导入
     $route->any('financeConfirm', 'Api\FinanceController@financeConfirm');//确认
+    $route->any('financeEdit', 'Api\FinanceController@financeEdit');//确认
 
     $route->any('menuAdd', 'Api\SysMenuController@add');
     $route->any('menuEdit', 'Api\SysMenuController@edit');