浏览代码

发货单

cqpCow 1 年之前
父节点
当前提交
362b2a8fdb

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

@@ -0,0 +1,74 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+use App\Service\InvoiceOrderService;
+use Illuminate\Http\Request;
+
+class InvoiceOrderController extends BaseController
+{
+    public function invoiceOrderAdd(Request $request)
+    {
+        $service = new InvoiceOrderService();
+        $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 InvoiceOrderService();
+        $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 InvoiceOrderService();
+        $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 InvoiceOrderService();
+        $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 InvoiceOrderService();
+        $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/InvoiceOrder.php

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

+ 13 - 0
app/Model/InvoiceOrderInfo.php

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

+ 210 - 0
app/Service/InvoiceOrderService.php

@@ -0,0 +1,210 @@
+<?php
+
+namespace App\Service;
+
+use App\Model\Depart;
+use App\Model\Employee;
+use App\Model\InvoiceOrder;
+use App\Model\InvoiceOrderInfo;
+use Illuminate\Support\Facades\DB;
+
+class InvoiceOrderService extends Service
+{
+    public function edit($data,$user){
+        list($status,$msg) = $this->orderRule($data,false);
+        if(!$status) return [$status,$msg];
+
+        try{
+            DB::beginTransaction();
+            $material_model = InvoiceOrder::where('order_number',$data['order_number'])->first();
+            $material_model->contact_order_number = $data['contact_order_number'];
+            $material_model->send = $data['send'];
+            $material_model->send_time = $data['send_time'];
+            $material_model->take = $data['take'];
+            $material_model->take_address = $data['take_address'];
+            $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->mark = $data['mark'];
+            $material_model->save();
+
+            InvoiceOrderInfo::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'] ?? '',
+                    ];
+                }
+                InvoiceOrderInfo::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 InvoiceOrder();
+            $material_model->order_number = $data['order_number'];
+            $material_model->contact_order_number = $data['contact_order_number'];
+            $material_model->send = $data['send'];
+            $material_model->send_time = $data['send_time'];
+            $material_model->take = $data['take'];
+            $material_model->take_address = $data['take_address'];
+            $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->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'] ?? '',
+                    ];
+                }
+                InvoiceOrderInfo::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 = InvoiceOrder::where('order_number',$data['order_number'])
+            ->where('del_time',0)
+            ->select('id','order_number','contact_order_number','depart_id','send','send_time','take','take_address','take_phone','logistics_company','logistics_number','crt_id','mark','state')
+            ->first();
+        if(empty($order)) return [false, '发货订单不存在或已被删除'];
+
+        $info = InvoiceOrderInfo::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 = InvoiceOrder::where('order_number',$data['order_number'])
+            ->where('state','>',InvoiceOrder::STATE_ZERO)->exists();
+        if($bool) return [false,'发货订单已确认,删除失败!'];
+
+        try{
+            DB::beginTransaction();
+            InvoiceOrder::where('order_number',$data['order_number'])->update([
+                'del_time'=>time()
+            ]);
+            InvoiceOrderInfo::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 = InvoiceOrder::where('del_time',0)
+            ->select('id','order_number','contact_order_number','depart_id','send','send_time','take','take_address','take_phone','logistics_company','logistics_number','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'],'send')));
+        $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]['send_name'] = $emp_map[$value['send']] ?? '';
+        }
+
+        return $data;
+    }
+
+    public function orderRule(&$data, $is_check = true){
+        if($this->isEmpty($data,'depart_id')) return [false,'部门不能为空!'];
+        if($this->isEmpty($data,'send')) return [false,'发货人不能为空!'];
+        if($this->isEmpty($data,'product')) return [false,'产品不能为空!'];
+        if(! empty($data['send_time'])) $data['send_time'] = $this->changeDateToDateMin($data['send_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(InvoiceOrder::prefix);
+            if(empty($order_number)) return [false,'发货单号生成失败!'];
+            $data['order_number'] = $order_number;
+        }else{
+            if($this->isEmpty($data,'order_number')) return [false,'发货单号不能为空!'];
+        }
+
+        return [true, ''];
+    }
+}

+ 0 - 15
app/Service/PurchaseOrderService.php

@@ -2,25 +2,10 @@
 
 namespace App\Service;
 
-
-use App\Model\Company;
 use App\Model\Depart;
 use App\Model\Employee;
-use App\Model\FoursShop;
-use App\Model\FoursShopStorehouse;
-use App\Model\InOutRecord;
-use App\Model\MaterialOrder;
-use App\Model\MaterialOrderApply;
-use App\Model\MaterialOrderApplySub;
-use App\Model\MaterialOrderIn;
-use App\Model\MaterialOrderInSub;
-use App\Model\MaterialOrderSend;
-use App\Model\MaterialOrderSendSub;
-use App\Model\MaterialOrderTake;
-use App\Model\MaterialOrderTakeSub;
 use App\Model\PurchaseOrder;
 use App\Model\PurchaseOrderInfo;
-use App\Model\RollFilmCompare;
 use Illuminate\Support\Facades\DB;
 
 class PurchaseOrderService extends Service

+ 7 - 0
routes/api.php

@@ -109,4 +109,11 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('purchaseOrderDetail', 'Api\PurchaseOrderController@purchaseOrderDetail');
     $route->any('purchaseOrderAdd', 'Api\PurchaseOrderController@purchaseOrderAdd');
     $route->any('purchaseOrderDel', 'Api\PurchaseOrderController@purchaseOrderDel');
+
+    //发货单
+    $route->any('invoiceOrderList', 'Api\InvoiceOrderController@invoiceOrderList');
+    $route->any('invoiceOrderEdit', 'Api\InvoiceOrderController@invoiceOrderEdit');
+    $route->any('invoiceOrderDetail', 'Api\InvoiceOrderController@invoiceOrderDetail');
+    $route->any('invoiceOrderAdd', 'Api\InvoiceOrderController@invoiceOrderAdd');
+    $route->any('invoiceOrderDel', 'Api\InvoiceOrderController@invoiceOrderDel');
 });