浏览代码

收货单

cqpCow 1 年之前
父节点
当前提交
d9d4ad7059

+ 74 - 0
app/Http/Controllers/Api/TakeOrderController.php

@@ -0,0 +1,74 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+use App\Service\TakeOrderService;
+use Illuminate\Http\Request;
+
+class TakeOrderController extends BaseController
+{
+    public function invoiceOrderAdd(Request $request)
+    {
+        $service = new TakeOrderService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->add($request->all(),$userData);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function invoiceOrderEdit(Request $request)
+    {
+        $service = new TakeOrderService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->edit($request->all(),$userData);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function invoiceOrderDetail(Request $request)
+    {
+        $service = new TakeOrderService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->detail($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function invoiceOrderDel(Request $request)
+    {
+        $service = new TakeOrderService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->del($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function invoiceOrderList(Request $request)
+    {
+        $service = new TakeOrderService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->getList($request->all(),$userData);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+}

+ 20 - 0
app/Model/TakeOrder.php

@@ -0,0 +1,20 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+class TakeOrder extends Model
+{
+    protected $table = "take_order"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+    const STATE_ZERO = 0;//未确认
+    const STATE_ONE = 1;//已确认
+    const prefix = 'SH';
+    public static $name = [
+        0 => '未确认',
+        1 => '已确认',
+    ];
+}

+ 13 - 0
app/Model/TakeOrderInfo.php

@@ -0,0 +1,13 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+class TakeOrderInfo extends Model
+{
+    protected $table = "take_order_info"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+}

+ 2 - 2
app/Service/InvoiceOrderService.php

@@ -25,7 +25,7 @@ class InvoiceOrderService extends Service
             $material_model->take_phone = $data['take_phone'];
             $material_model->logistics_company = $data['logistics_company'];
             $material_model->logistics_number = $data['logistics_number'];
-            $material_model->mark = $data['depart_id'];
+            $material_model->depart_id = $data['depart_id'];
             $material_model->mark = $data['mark'];
             $material_model->save();
 
@@ -71,7 +71,7 @@ class InvoiceOrderService extends Service
             $material_model->take_phone = $data['take_phone'];
             $material_model->logistics_company = $data['logistics_company'];
             $material_model->logistics_number = $data['logistics_number'];
-            $material_model->mark = $data['depart_id'];
+            $material_model->depart_id = $data['depart_id'];
             $material_model->mark = $data['mark'];
             $material_model->crt_id = $user['id'];
             $material_model->save();

+ 202 - 0
app/Service/TakeOrderService.php

@@ -0,0 +1,202 @@
+<?php
+
+namespace App\Service;
+
+use App\Model\Depart;
+use App\Model\Employee;
+use App\Model\InvoiceOrder;
+use App\Model\InvoiceOrderInfo;
+use App\Model\TakeOrder;
+use App\Model\TakeOrderInfo;
+use Illuminate\Support\Facades\DB;
+
+class TakeOrderService extends Service
+{
+    public function edit($data,$user){
+        list($status,$msg) = $this->orderRule($data,false);
+        if(!$status) return [$status,$msg];
+
+        try{
+            DB::beginTransaction();
+            $material_model = TakeOrder::where('order_number',$data['order_number'])->first();
+            $material_model->contact_order_number = $data['contact_order_number'];
+            $material_model->depart_id = $data['depart_id'];
+            $material_model->take = $data['take'];
+            $material_model->take_time = $data['take_time'];
+            $material_model->mark = $data['mark'];
+            $material_model->save();
+
+            TakeOrderInfo::where('order_number',$data['order_number'])
+                ->where('del_time',0)
+                ->update(['del_time' => time()]);
+            if(!empty($data['product'])){
+                $sub = [];
+                foreach ($data['product'] as $value){
+                    $sub[] = [
+                        'order_number' => $data['order_number'],
+                        'depart_id' => $data['depart_id'],
+                        'product_id' => $value['product_id'],
+                        'number' => $value['number'],
+                        'mark' => $value['mark'] ?? '',
+                    ];
+                }
+                TakeOrderInfo::insert($sub);
+            }
+
+            DB::commit();
+        }catch (\Throwable $e){
+            DB::rollBack();
+            return [false,$e->getMessage()];
+        }
+
+        return [true,''];
+    }
+
+    public function add($data,$user){
+        list($status,$msg) = $this->orderRule($data);
+        if(!$status) return [$status,$msg];
+
+        try{
+            DB::beginTransaction();
+            $material_model = new TakeOrder();
+            $material_model->order_number = $data['order_number'];
+            $material_model->contact_order_number = $data['contact_order_number'];
+            $material_model->take = $data['take'];
+            $material_model->take_time = $data['take_time'];
+            $material_model->depart_id = $data['depart_id'];
+            $material_model->mark = $data['mark'];
+            $material_model->crt_id = $user['id'];
+            $material_model->save();
+
+            if(!empty($data['product'])){
+                $sub = [];
+                foreach ($data['product'] as $value){
+                    $sub[] = [
+                        'order_number' => $data['order_number'],
+                        'depart_id' => $data['depart_id'],
+                        'product_id' => $value['product_id'],
+                        'number' => $value['number'],
+                        'mark' => $value['mark'] ?? '',
+                    ];
+                }
+                TakeOrderInfo::insert($sub);
+            }
+
+            DB::commit();
+        }catch (\Throwable $e){
+            DB::rollBack();
+            return [false,$e->getMessage()];
+        }
+
+        return [true,''];
+    }
+
+    public function detail($data){
+        if($this->isEmpty($data,'order_number')) return [false,'请选择数据'];
+
+        $order = TakeOrder::where('order_number',$data['order_number'])
+            ->where('del_time',0)
+            ->select('id','order_number','contact_order_number','depart_id','take_time','take','crt_id','mark','state')
+            ->first();
+        if(empty($order)) return [false, '收货订单不存在或已被删除'];
+
+        $info = TakeOrderInfo::where('del_time',0)
+            ->where('order_number',$data['order_number'])
+            ->select('id','order_number','depart_id','product_id','number','mark')
+            ->get()->toArray();
+        $order['product'] = $info;
+
+        return [true, $order];
+    }
+
+    public function del($data){
+        if($this->isEmpty($data,'order_number')) return [false,'请选择数据!'];
+
+        $bool = TakeOrder::where('order_number',$data['order_number'])
+            ->where('state','>',TakeOrder::STATE_ZERO)->exists();
+        if($bool) return [false,'收货订单已确认,删除失败!'];
+
+        try{
+            DB::beginTransaction();
+            TakeOrder::where('order_number',$data['order_number'])->update([
+                'del_time'=>time()
+            ]);
+            TakeOrderInfo::where('order_number',$data['order_number'])->update([
+                'del_time'=>time()
+            ]);
+
+            DB::commit();
+        }catch (\Throwable $e){
+            DB::rollBack();
+            return [false,$e->getMessage()];
+        }
+
+        return [true,''];
+    }
+
+    public function getList($data,$user){
+        $model = TakeOrder::where('del_time',0)
+            ->select('id','order_number','contact_order_number','depart_id','take','take_time','crt_id','mark','state')
+            ->orderby('id', 'desc');
+        if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
+        if(! empty($data['contact_order_number'])) $model->where('contact_order_number', 'LIKE', '%'.$data['contact_order_number'].'%');
+        if(! empty($data['depart_id'])) $model->where('depart_id', $data['depart_id']);
+        if(isset($data['state'])) $model->where('state',$data['state']);
+        if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
+            $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
+            $model->whereBetween('crt_time',[$return[0],$return[1]]);
+        }
+
+        $list = $this->limit($model,'',$data);
+        $list = $this->fillListData($list);
+
+        return [true, $list];
+    }
+
+    public function fillListData($data){
+        if(empty($data['data'])) return $data;
+
+        $depart_id = array_unique(array_column($data['data'],'depart_id'));
+        $depart_map = Depart::whereIn('id',$depart_id)
+            ->pluck('title','id')
+            ->toArray();
+
+        $emp_id = array_unique(array_merge_recursive(array_column($data['data'],'crt_id'),array_column($data['data'],'take')));
+        $emp_map = Employee::whereIn('id',$emp_id)
+                    ->pluck('emp_name','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]['depart_name'] = $depart_map[$value['depart_id']] ?? '';
+            $data['data'][$key]['crt_name'] = $emp_map[$value['crt_id']] ?? '';
+            $data['data'][$key]['take_name'] = $emp_map[$value['take']] ?? '';
+        }
+
+        return $data;
+    }
+
+    public function orderRule(&$data, $is_check = true){
+        if($this->isEmpty($data,'depart_id')) return [false,'部门不能为空!'];
+        if($this->isEmpty($data,'take_time')) return [false,'收货时间不能为空!'];
+        if($this->isEmpty($data,'product')) return [false,'产品不能为空!'];
+        $data['take_time'] = $this->changeDateToDateMin($data['take_time']);
+
+        foreach ($data['product'] as $value){
+            if(empty($value['number'])) return [false,'产品数量不能为空'];
+            if(! is_numeric($value['number']) || $value['number'] < 0)  return [false,'产品数量不正确'];
+            $formattedNumber = number_format($value['number'], 2, '.', '');
+            if($formattedNumber != $value['number']) return [false,'产品数量请不要超过两位小数'];
+        }
+
+        if($is_check){
+            $order_number = (new OrderNoService())->createOrderNumber(TakeOrder::prefix);
+            if(empty($order_number)) return [false,'收货单号生成失败!'];
+            $data['order_number'] = $order_number;
+        }else{
+            if($this->isEmpty($data,'order_number')) return [false,'收货单号不能为空!'];
+        }
+
+        return [true, ''];
+    }
+}

+ 7 - 0
routes/api.php

@@ -117,4 +117,11 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('invoiceOrderDetail', 'Api\InvoiceOrderController@invoiceOrderDetail');
     $route->any('invoiceOrderAdd', 'Api\InvoiceOrderController@invoiceOrderAdd');
     $route->any('invoiceOrderDel', 'Api\InvoiceOrderController@invoiceOrderDel');
+
+    //收货单
+    $route->any('takeOrderList', 'Api\TakeOrderController@takeOrderList');
+    $route->any('takeOrderEdit', 'Api\TakeOrderController@takeOrderEdit');
+    $route->any('takeOrderDetail', 'Api\TakeOrderController@takeOrderDetail');
+    $route->any('takeOrderAdd', 'Api\TakeOrderController@takeOrderAdd');
+    $route->any('takeOrderDel', 'Api\TakeOrderController@takeOrderDel');
 });