cqpCow 1 an în urmă
părinte
comite
db555c7b19

+ 85 - 0
app/Http/Controllers/Api/PaymentReceiptController.php

@@ -0,0 +1,85 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+use App\Service\PaymentReceiptService;
+use Illuminate\Http\Request;
+
+class PaymentReceiptController extends BaseController
+{
+    public function paymentReceiptGet(Request $request){
+        $service = new PaymentReceiptService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->paymentReceiptGet($request->all(),$userData);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function customerAdd(Request $request)
+    {
+        $service = new PaymentReceiptService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->customerAdd($request->all(),$userData);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function customerEdit(Request $request)
+    {
+        $service = new PaymentReceiptService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->customerEdit($request->all(),$userData);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function customerDel(Request $request)
+    {
+        $service = new PaymentReceiptService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->customerDel($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function customerList(Request $request)
+    {
+        $service = new PaymentReceiptService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->customerList($request->all(),$userData);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function customerDetail(Request $request)
+    {
+        $service = new PaymentReceiptService();
+        list($status,$data) = $service->customerDetail($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+}

+ 35 - 0
app/Model/PaymentReceipt.php

@@ -0,0 +1,35 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+class PaymentReceipt extends UseScopeBaseModel
+{
+    protected $table = "payment_receipt"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+    const STATE_ZERO = 0;//未确认
+    const STATE_ONE = 1;//待确认
+    const STATE_TWO = 2;//已确认
+    public static $name = [
+        self::STATE_ZERO => '未确认',
+        self::STATE_ONE => '待确认',
+        self::STATE_TWO => '已确认',
+    ];
+
+    const type_one = 1; // 收款
+    const type_two = 2; // 付款
+    public static $model_type = [
+        self::type_one => '收款',
+        self::type_two => '付款',
+    ];
+
+    const data_type_one = 1; // 合同
+    const data_type_two = 2; // 采购
+    public static $data_type = [
+        self::data_type_one => '合同',
+        self::data_type_two => '采购',
+    ];
+}

+ 22 - 0
app/Model/PaymentReceiptInfo.php

@@ -0,0 +1,22 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+class PaymentReceiptInfo extends Model
+{
+    protected $table = "payment_receipt_info"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+    const type_one = 1; // 文件/图片
+    const type_two = 2; // 归属人
+    public static $type = [
+        self::type_one,
+        self::type_two,
+    ];
+    public static $man = [
+        self::type_two,
+    ];
+}

+ 292 - 0
app/Service/PaymentReceiptService.php

@@ -0,0 +1,292 @@
+<?php
+
+namespace App\Service;
+
+use App\Model\BasicType;
+use App\Model\Employee;
+use App\Model\PaymentReceipt;
+use App\Model\PaymentReceiptInfo;
+use Illuminate\Support\Facades\DB;
+
+class PaymentReceiptService extends Service
+{
+    public function paymentReceiptGet($data,$user){
+        $prefix = "T9RMO.";
+        $order_number = OrderNoService::createOrderNumber($prefix);
+        if(! $order_number) return [false,'工单编号生成失败!'];
+
+        return [true,['order_number' => $order_number]];
+    }
+
+    public function customerEdit($data,$user){
+        list($status,$msg) = $this->customerRule($data,$user, false);
+        if(!$status) return [$status,$msg];
+
+        try {
+            DB::beginTransaction();
+
+            $model = PaymentReceipt::where('id',$data['id'])->first();
+            $model->data_order_no = $data['data_order_no'];
+            $model->data_type = $data['data_type'];
+            $model->type = $data['type'];
+            $model->amount = $data['amount'] ?? 0;
+            $model->mark = $data['mark'] ?? '';
+            $model->save();
+
+            $time = time();
+            PaymentReceiptInfo::where('del_time',0)
+                ->where('payment_receipt_id',$data['id'])
+                ->update(['del_time' => $time]);
+            if(! empty($data['file'])){
+                $insert = [];
+                foreach ($data['file'] as $value){
+                    $insert[] = [
+                        'payment_receipt_id' => $model->id,
+                        'file' => $value['url'],
+                        'type' => PaymentReceiptInfo::type_one,
+                        'name' => $value['name'],
+                        'crt_time' => $time,
+                    ];
+                }
+                PaymentReceiptInfo::insert($insert);
+            }
+            if(! empty($data['employee_one'])){
+                $insert = [];
+                foreach ($data['employee_one'] as $value){
+                    $insert[] = [
+                        'payment_receipt_id' => $model->id,
+                        'data_id' => $value,
+                        'type' => PaymentReceiptInfo::type_two,
+                        'crt_time' => $time,
+                    ];
+                }
+                PaymentReceiptInfo::insert($insert);
+            }
+
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
+
+        return [true,''];
+    }
+
+    public function customerAdd($data,$user){
+        list($status,$msg) = $this->customerRule($data,$user);
+        if(!$status) return [$status,$msg];
+
+        try {
+            DB::beginTransaction();
+
+            $model = new PaymentReceipt();
+            $model->order_number = $data['order_number'];
+            $model->data_order_no = $data['data_order_no'];
+            $model->data_type = $data['data_type'];
+            $model->type = $data['type'];
+            $model->amount = $data['amount'] ?? 0;
+            $model->mark = $data['mark'] ?? '';
+            $model->crt_id = $user['id'];
+            $model->depart_id = $data['depart_id'];
+            $model->top_depart_id = $data['top_depart_id'];
+            $model->save();
+
+            $time = time();
+            if(! empty($data['file'])){
+                $insert = [];
+                foreach ($data['file'] as $value){
+                    $insert[] = [
+                        'payment_receipt_id' => $model->id,
+                        'file' => $value['url'],
+                        'type' => PaymentReceiptInfo::type_one,
+                        'name' => $value['name'],
+                        'crt_time' => $time,
+                    ];
+                }
+                PaymentReceiptInfo::insert($insert);
+            }
+            if(! empty($data['employee_one'])){
+                $insert = [];
+                foreach ($data['employee_one'] as $value){
+                    $insert[] = [
+                        'payment_receipt_id' => $model->id,
+                        'data_id' => $value,
+                        'type' => PaymentReceiptInfo::type_two,
+                        'crt_time' => $time,
+                    ];
+                }
+                PaymentReceiptInfo::insert($insert);
+            }
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
+
+        return [true,''];
+    }
+
+    public function customerDel($data){
+        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
+        $booking = PaymentReceipt::where('del_time',0)->where('id',$data['id'])->first();
+        if(empty($booking)) return [false,'记录不存在或已被删除'];
+        $booking = $booking->toArray();
+        if($booking['state'] != PaymentReceipt::STATE_ZERO) return [false,'请确认收付款单状态,删除失败'];
+
+        try {
+            DB::beginTransaction();
+
+            $time = time();
+            PaymentReceipt::where('id',$data['id'])->update([
+                'del_time'=> $time
+            ]);
+            PaymentReceiptInfo::where('del_time',0)
+                ->where('payment_receipt_id',$data['id'])
+                ->update(['del_time' => $time]);
+
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
+
+        return [true,''];
+    }
+
+    public function customerDetail($data){
+        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
+
+        $customer = PaymentReceipt::where('del_time',0)
+            ->where('id',$data['id'])
+            ->first();
+        if(empty($customer)) return [false,'记录不存在或已被删除'];
+        $customer = $customer->toArray();
+        $customer['state_title'] = PaymentReceipt::$name[$customer['state']] ?? "";
+        $customer['type_title'] = PaymentReceipt::$model_type[$customer['type']] ?? "";
+        $customer['crt_name'] = Employee::where('id',$customer['crt_id'])->value('emp_name');
+        $customer['crt_time'] = $customer['crt_time'] ? date("Y-m-d H:i:s",$customer['crt_time']): '';
+
+        $file = PaymentReceiptInfo::where('del_time',0)
+            ->where('payment_receipt_id',$data['id'])
+            ->get()->toArray();
+        $emp_id = [];
+        foreach ($file as $value){
+            if(in_array($value['type'],PaymentReceiptInfo::$man)){
+                $emp_id[] = $value['data_id'];
+            }
+        }
+        $emp_map = Employee::whereIn('id',array_unique($emp_id))
+            ->where('del_time',0)
+            ->pluck('emp_name','id')
+            ->toArray();
+
+        $customer['file'] = $customer['employee_one'] = [];
+        foreach ($file as $value){
+            if($value['type'] == PaymentReceiptInfo::type_one){
+                $tmp = [
+                    'url' => $value['file'],
+                    'name' => $value['name'],
+                ];
+                $customer['file'][] = $tmp;
+            }elseif (in_array($value['type'],PaymentReceiptInfo::$man)){
+                $tt = $emp_map[$value['data_id']] ?? '';
+                if(! empty($tt)){
+                    $tmp = [
+                        'id' => $value['data_id'],
+                        'name' => $emp_map[$value['data_id']] ?? '',
+                    ];
+                    if($value['type'] == PaymentReceiptInfo::type_two){
+                        $customer['employee_one'][] = $tmp;
+                    }
+                }
+            }
+        }
+
+        return [true, $customer];
+    }
+
+    public function customerList($data,$user){
+        $model = PaymentReceipt::Clear($user,$data);
+        $model = $model->where('del_time',0)
+            ->select('type','id','data_type','order_number','data_order_no','amount','account','pay_way','crt_id','crt_time','mark','state')
+            ->orderby('id', 'desc');
+
+        if(isset($data['state'])) $model->where('state', $data['state']);
+        if(! empty($data['data_order_no'])) $model->where('data_order_no',  'LIKE', '%'.$data['data_order_no'].'%');
+        if(! empty($data['order_number'])) $model->where('order_number',  'LIKE', '%'.$data['order_number'].'%');
+        if(! empty($data['data_type'])) $model->where('data_type', $data['data_type']);
+        if(! empty($data['type'])) $model->where('type', $data['type']);
+        if(! empty($data['account'])) $model->where('account',$data['account']);
+        if(! empty($data['pay_way'])) $model->where('pay_way',$data['pay_way']);
+        if(! empty($data['mark'])) $model->where('mark', 'LIKE', '%'.$data['mark'].'%');
+        if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
+            $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
+            $model->where('crt_time','>=',$return[0]);
+            $model->where('crt_time','<=',$return[1]);
+        }
+        if(! empty($data['belong'])){
+            $id = (new RangeService())->paymentReceiptSearch($data);
+            $model->whereIn('id',$id);
+        }
+
+        $list = $this->limit($model,'',$data);
+        $list = $this->fillData($list);
+
+        return [true, $list];
+    }
+
+    public function customerRule(&$data, $user, $is_add = true){
+        if(empty($data['order_number'])) return [false,'收付款单编号不能为空'];
+        if(empty($data['data_order_no'])) return [false,'关联单号不能为空'];
+        if(empty($data['data_type'])) return [false,'单号类型不能为空'];
+        if(empty($data['type'])) return [false,'金额类型不能为空'];
+        if(empty($data['amount'])) return [false,'金额不能为空'];
+        $res = $this->checkNumber($data['amount']);
+        if(! $res) return [false, '金额请输入不超过两位小数并且大于0的数值'];
+
+        //所属部门 以及  顶级部门
+        if(empty($data['depart_id'])) {
+            $data['depart_id'] = $this->getDepart($user);
+            $data['top_depart_id'] = $user['depart_map'][$data['depart_id']] ?? 0;
+        }
+
+        if($is_add){
+            $bool = PaymentReceipt::where('del_time',0)
+                ->where('order_number',$data['order_number'])
+                ->exists();
+            if($bool) return [false,'收付款单编号已存在,请重新获取'];
+        }else{
+            if(empty($data['id'])) return [false,'ID不能为空'];
+            $booking = PaymentReceipt::where('del_time',0)->where('id',$data['id'])->first();
+            if(empty($booking)) return [false,'收付款单不存在或已被删除'];
+            $booking = $booking->toArray();
+            if($booking['state'] != PaymentReceipt::STATE_ZERO) return [false,'请确认收付款单状态,编辑失败'];
+        }
+
+        return [true, ''];
+    }
+
+    public function fillData($data){
+        if(empty($data['data'])) return $data;
+
+        $emp = Employee::whereIn('id',array_unique(array_column($data['data'],'crt_id')))
+            ->pluck('emp_name','id')
+            ->toArray();
+        $array = array_unique(array_merge_recursive(array_column($data['data'],'account'),array_column($data['data'],'pay_way')));
+        $basic_map = BasicType::whereIn('id',$array)
+            ->pluck('title','id')
+            ->toArray();
+
+        foreach ($data['data'] as $key => $value){
+            $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
+            $data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? '';
+            $data['data'][$key]['state_title'] = PaymentReceipt::$name[$value['state']] ?? '';
+            $data['data'][$key]['type_title'] = PaymentReceipt::$model_type[$value['type']] ?? '';
+            $data['data'][$key]['data_type_title'] = PaymentReceipt::$data_type[$value['data_type']] ?? '';
+            $data['data'][$key]['account_title'] = $basic_map[$value['account']] ?? '';
+            $data['data'][$key]['pay_way_title'] = $basic_map[$value['pay_way']] ?? '';
+        }
+
+        return $data;
+    }
+}

+ 8 - 0
routes/api.php

@@ -231,6 +231,14 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('BookingDetail', 'Api\BookingListController@customerDetail');
     $route->any('BookingConfirm', 'Api\BookingListController@customerConfirm');
 
+    //收付款
+    $route->any('paymentReceiptGet', 'Api\PaymentReceiptController@paymentReceiptGet');
+    $route->any('paymentReceiptList', 'Api\PaymentReceiptController@paymentReceiptList');
+    $route->any('paymentReceiptAdd', 'Api\PaymentReceiptController@paymentReceiptAdd');
+    $route->any('paymentReceiptEdit', 'Api\PaymentReceiptController@paymentReceiptEdit');
+    $route->any('paymentReceiptDel', 'Api\PaymentReceiptController@paymentReceiptDel');
+    $route->any('paymentReceiptDetail', 'Api\PaymentReceiptController@paymentReceiptDetail');
+
     //排班设置
     $route->any('scheduleList', 'Api\ScheduleController@getList');
     $route->any('scheduleEdit', 'Api\ScheduleController@edit');