cqpCow 1 éve
szülő
commit
bbad0b0905

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

@@ -0,0 +1,74 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+use App\Service\ReturnExchangeOrderService;
+use Illuminate\Http\Request;
+
+class ReturnExchangeOrderController extends BaseController
+{
+    public function ReturnExchangeOrderAdd(Request $request)
+    {
+        $service = new ReturnExchangeOrderService();
+        $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 ReturnExchangeOrderEdit(Request $request)
+    {
+        $service = new ReturnExchangeOrderService();
+        $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 ReturnExchangeOrderDetail(Request $request)
+    {
+        $service = new ReturnExchangeOrderService();
+        $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 ReturnExchangeOrderDel(Request $request)
+    {
+        $service = new ReturnExchangeOrderService();
+        $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 ReturnExchangeOrderList(Request $request)
+    {
+        $service = new ReturnExchangeOrderService();
+        $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);
+        }
+    }
+}

+ 0 - 9
app/Model/InOutRecord.php

@@ -10,13 +10,4 @@ class InOutRecord extends Model
     const CREATED_AT = 'crt_time';
     const UPDATED_AT = 'upd_time';
     protected $dateFormat = 'U';
-    public static $order_type = [
-        MaterialOrder::prefix => '领料单',
-        Construction::prefix => '施工单',
-        Construction::prefix_reject => '施工单:红冲',
-        MaterialReturn::prefix => '退料单',
-        Transfer::prefix => '调拨单',
-        Inventory::prefix => '盘点单',
-        OpeningReceiptOrder::prefix => '期初单',
-    ];
 }

+ 1 - 1
app/Model/ProductInventory.php

@@ -8,6 +8,6 @@ class ProductInventory extends Model
 {
     protected $table = "product_inventory"; //指定表
     const CREATED_AT = 'crt_time';
-    const UPDATED_AT = 'upd_time';
+    const UPDATED_AT = null;
     protected $dateFormat = 'U';
 }

+ 6 - 0
app/Model/ReturnExchangeOrderProductInfo.php

@@ -10,4 +10,10 @@ class ReturnExchangeOrderProductInfo extends Model
     const CREATED_AT = 'crt_time';
     const UPDATED_AT = 'upd_time';
     protected $dateFormat = 'U';
+    const type_one = 1; // 退货
+    const type_two = 2; // 换货
+    public static $model_type = [
+        self::type_one,
+        self::type_one,
+    ];
 }

+ 5 - 6
app/Service/ConstructionService.php

@@ -44,11 +44,11 @@ class ConstructionService extends Service
             $model->handover_time = $data['handover_time'] ?? 0;
             $model->urgency = $data['urgency'] ?? 0;
             $model->mark = $data['mark'] ?? '';
-            $model->address1 = $data['address1'] ? json_encode($data['address1']) : '';
+            $model->address1 = ! empty($data['address1']) ? json_encode($data['address1']) : '';
             $model->address2 = $data['address2'] ?? '';
             $model->introduction = $data['introduction'] ?? '';
-            $model->depart_id = $data['depart_id'] ?? 0;
-            $model->top_depart_id = $data['top_depart_id'] ?? 0;
+//            $model->depart_id = $data['depart_id'] ?? 0;
+//            $model->top_depart_id = $data['top_depart_id'] ?? 0;
             $model->save();
             $time = time();
 
@@ -92,7 +92,6 @@ class ConstructionService extends Service
                     $insert[] = [
                         'construction_id' => $model->id,
                         'product_id' => $value['product_id'],
-                        'price' => $value['retail_price'],
                         'number' => $value['number'],
                         'title' => $value['title'],
                         'code' => $value['code'] ?? '',
@@ -149,7 +148,7 @@ class ConstructionService extends Service
             $model->handover_time = $data['handover_time'] ?? 0;
             $model->urgency = $data['urgency'] ?? 0;
             $model->mark = $data['mark'] ?? '';
-            $model->address1 = $data['address1'] ? json_encode($data['address1']) : '';
+            $model->address1 = ! empty($data['address1']) ? json_encode($data['address1']) : '';
             $model->address2 = $data['address2'] ?? '';
             $model->introduction = $data['introduction'] ?? '';
             $model->crt_id = $user['id'];
@@ -191,7 +190,6 @@ class ConstructionService extends Service
                     $insert[] = [
                         'construction_id' => $model->id,
                         'product_id' => $value['product_id'],
-                        'price' => $value['retail_price'],
                         'number' => $value['number'],
                         'title' => $value['title'],
                         'code' => $value['code'] ?? '',
@@ -473,6 +471,7 @@ class ConstructionService extends Service
             $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]['customer_contact_title'] = $emp[$value['customer_contact_id']] ?? '';
+            $data['data'][$key]['state_title'] = Construction::$name[$value['state']] ?? '';
         }
 
         return $data;

+ 2 - 2
app/Service/EmployeeService.php

@@ -387,8 +387,8 @@ class EmployeeService extends Service
 
         DB::beginTransaction();
         try {
-            RoleMenu::where('role_id',$data['role_id'])->update(['del_time' => time()]);
-            RoleMenuButton::where('role_id',$data['role_id'])->update(['del_time' => time()]);
+            RoleMenu::where('del_time',0)->where('role_id',$data['role_id'])->update(['del_time' => time()]);
+            RoleMenuButton::where('del_time',0)->where('role_id',$data['role_id'])->update(['del_time' => time()]);
 
             $insert = $insert2 = [];
             foreach ($data['menu'] as $t){

+ 5 - 0
app/Service/OrderNoService.php

@@ -59,4 +59,9 @@ class OrderNoService extends Service
 
         return $number;
     }
+
+    //采购 收货 发货 单号生成
+    public function createReturnExchangeOrderNumber($prefix){
+        return $prefix . date('Ymd') . time() . rand(1000,9999);
+    }
 }

+ 1 - 1
app/Service/ProductService.php

@@ -374,7 +374,7 @@ class ProductService extends Service
             DB::beginTransaction();
             $time = time();
 
-            Product::where('id',$data['id'])->update(['del_time' => $time]);
+            Product::where('del_time',0)->where('id',$data['id'])->update(['del_time' => $time]);
 
             ProductIntroduction::where('product_id',$data['id'])
                 ->where('del_time',0)

+ 345 - 0
app/Service/ReturnExchangeOrderService.php

@@ -0,0 +1,345 @@
+<?php
+
+namespace App\Service;
+
+use App\Model\Depart;
+use App\Model\Employee;
+use App\Model\InvoiceOrder;
+use App\Model\InvoiceOrderInfo;
+use App\Model\ProductRange;
+use App\Model\ReturnExchangeOrder;
+use App\Model\ReturnExchangeOrderProductInfo;
+use App\Model\ReturnExchangeOrderRange;
+use App\Model\SalesOrder;
+use App\Model\TakeOrder;
+use App\Model\TakeOrderInfo;
+use Illuminate\Support\Facades\DB;
+
+class ReturnExchangeOrderService extends Service
+{
+    public function edit($data,$user){
+        list($status,$msg) = $this->orderRule($data,$user,false);
+        if(!$status) return [$status,$msg];
+
+        try{
+            DB::beginTransaction();
+            $material_model = ReturnExchangeOrder::where('order_number',$data['order_number'])->first();
+            $material_model->sales_order_id = $data['sales_order_id'];
+            $material_model->difference_amount = $data['difference_amount'];
+            $material_model->mark = $data['mark'];
+            $material_model->save();
+            $time = time();
+
+            ReturnExchangeOrderProductInfo::where('del_time',0)
+                ->where('return_exchange_id',$data['id'])
+                ->update(['del_time' => $time]);
+            if(!empty($data['product_one'])){
+                $sub = [];
+                foreach ($data['product_one'] as $value){
+                    $sub[] = [
+                        'return_exchange_id' => $material_model->id,
+                        'depart_id' => $data['depart_id'] ?? 0,
+                        'product_id' => $value['product_id'],
+                        'number' => $value['number'],
+                        'mark' => $value['mark'] ?? '',
+                        'title' => $value['title'],
+                        'code' => $value['code'] ?? '',
+                        'size' => $value['size'] ?? '',
+                        'unit' => $value['unit'] ?? 0,
+                        'bar_code' => $value['bar_code'] ?? '',
+                        'cost' => $value['cost'] ?? 0,
+                        'depart_price' => $value['depart_price'] ?? 0,
+                        'retail_price' => $value['retail_price'] ?? 0,
+                        'return_or_exchange' => ReturnExchangeOrderProductInfo::type_one
+                    ];
+                }
+                ReturnExchangeOrderProductInfo::insert($sub);
+            }
+
+            if(!empty($data['product_two'])){
+                $sub = [];
+                foreach ($data['product_two'] as $value){
+                    $sub[] = [
+                        'return_exchange_id' => $material_model->id,
+                        'depart_id' => $data['depart_id'] ?? 0,
+                        'product_id' => $value['product_id'],
+                        'number' => $value['number'],
+                        'mark' => $value['mark'] ?? '',
+                        'title' => $value['title'],
+                        'code' => $value['code'] ?? '',
+                        'size' => $value['size'] ?? '',
+                        'unit' => $value['unit'] ?? 0,
+                        'bar_code' => $value['bar_code'] ?? '',
+                        'cost' => $value['cost'] ?? 0,
+                        'depart_price' => $value['depart_price'] ?? 0,
+                        'retail_price' => $value['retail_price'] ?? 0,
+                        'return_or_exchange' => ReturnExchangeOrderProductInfo::type_two
+                    ];
+                }
+                ReturnExchangeOrderProductInfo::insert($sub);
+            }
+
+            ReturnExchangeOrderRange::where('del_time',0)
+                ->where('return_exchange_id',$data['id'])
+                ->update(['del_time' => $time]);
+
+            if(! empty($data['depart'])){
+                $insert = [];
+                foreach ($data['depart'] as $value){
+                    $insert[] = [
+                        'return_exchange_id' => $data['id'],
+                        'depart_id' => $value,
+                        'type' => ReturnExchangeOrderRange::type_one,
+                        'crt_time' => $time,
+                    ];
+                }
+                ReturnExchangeOrderRange::insert($insert);
+            }
+
+            if(! empty($data['employee'])){
+                $insert = [];
+                foreach ($data['employee'] as $value){
+                    $insert[] = [
+                        'return_exchange_id' => $data['id'],
+                        'employee_id' => $value,
+                        'type' => ReturnExchangeOrderRange::type_two,
+                        'crt_time' => $time,
+                    ];
+                }
+                ReturnExchangeOrderRange::insert($insert);
+            }
+
+            DB::commit();
+        }catch (\Throwable $e){
+            DB::rollBack();
+            return [false,$e->getMessage()];
+        }
+
+        return [true,''];
+    }
+
+    public function add($data,$user){
+        list($status,$msg) = $this->orderRule($data,$user);
+        if(!$status) return [$status,$msg];
+
+        try{
+            DB::beginTransaction();
+            $material_model = new ReturnExchangeOrder();
+            $material_model->model_type = $data['model_type'];
+            $material_model->order_number = $data['order_number'];
+            $material_model->sales_order_id = $data['sales_order_id'];
+            $material_model->difference_amount = $data['difference_amount'];
+            $material_model->mark = $data['mark'];
+            $material_model->depart_id = $data['depart_id'] ?? 0;
+            $material_model->top_depart_id = $data['top_depart_id'] ?? 0;
+            $material_model->crt_id = $user['id'];
+            $material_model->save();
+            $time = time();
+
+            if(!empty($data['product_one'])){
+                $sub = [];
+                foreach ($data['product_one'] as $value){
+                    $sub[] = [
+                        'return_exchange_id' => $material_model->id,
+                        'depart_id' => $data['depart_id'] ?? 0,
+                        'product_id' => $value['product_id'],
+                        'number' => $value['number'],
+                        'mark' => $value['mark'] ?? '',
+                        'title' => $value['title'],
+                        'code' => $value['code'] ?? '',
+                        'size' => $value['size'] ?? '',
+                        'unit' => $value['unit'] ?? 0,
+                        'bar_code' => $value['bar_code'] ?? '',
+                        'cost' => $value['cost'] ?? 0,
+                        'depart_price' => $value['depart_price'] ?? 0,
+                        'retail_price' => $value['retail_price'] ?? 0,
+                        'return_or_exchange' => ReturnExchangeOrderProductInfo::type_one
+                    ];
+                }
+                ReturnExchangeOrderProductInfo::insert($sub);
+            }
+
+            if(!empty($data['product_two'])){
+                $sub = [];
+                foreach ($data['product_two'] as $value){
+                    $sub[] = [
+                        'return_exchange_id' => $material_model->id,
+                        'depart_id' => $data['depart_id'] ?? 0,
+                        'product_id' => $value['product_id'],
+                        'number' => $value['number'],
+                        'mark' => $value['mark'] ?? '',
+                        'title' => $value['title'],
+                        'code' => $value['code'] ?? '',
+                        'size' => $value['size'] ?? '',
+                        'unit' => $value['unit'] ?? 0,
+                        'bar_code' => $value['bar_code'] ?? '',
+                        'cost' => $value['cost'] ?? 0,
+                        'depart_price' => $value['depart_price'] ?? 0,
+                        'retail_price' => $value['retail_price'] ?? 0,
+                        'return_or_exchange' => ReturnExchangeOrderProductInfo::type_two
+                    ];
+                }
+                ReturnExchangeOrderProductInfo::insert($sub);
+            }
+
+            if(! empty($data['depart'])){
+                $insert = [];
+                foreach ($data['depart'] as $value){
+                    $insert[] = [
+                        'return_exchange_id' => $data['id'],
+                        'depart_id' => $value,
+                        'type' => ReturnExchangeOrderRange::type_one,
+                        'crt_time' => $time,
+                    ];
+                }
+                ReturnExchangeOrderRange::insert($insert);
+            }
+
+            if(! empty($data['employee'])){
+                $insert = [];
+                foreach ($data['employee'] as $value){
+                    $insert[] = [
+                        'return_exchange_id' => $data['id'],
+                        'employee_id' => $value,
+                        'type' => ReturnExchangeOrderRange::type_two,
+                        'crt_time' => $time,
+                    ];
+                }
+                ReturnExchangeOrderRange::insert($insert);
+            }
+
+            DB::commit();
+        }catch (\Throwable $e){
+            DB::rollBack();
+            return [false,$e->getMessage()];
+        }
+
+        return [true,''];
+    }
+
+    public function detail($data){
+        if($this->isEmpty($data,'id')) return [false,'请选择数据'];
+
+        $order = ReturnExchangeOrder::where('id',$data['id'])
+            ->where('del_time',0)
+            ->select('id','order_number','model_type','sales_order_id','difference_amount','crt_id','mark','state')
+            ->first();
+        if(empty($order)) return [false, '退换货订单不存在或已被删除'];
+        $order = $order->toArray();
+
+        $order['product_one'] = $order['product_two'] = [];
+        $info = ReturnExchangeOrderProductInfo::where('del_time',0)
+            ->where('return_exchange_id',$data['id'])
+            ->select('id','return_exchange_id','product_id','product_id','number','mark','title','code','size','unit','bar_code','cost','depart_price','retail_price','return_or_exchange')
+            ->get()->toArray();
+        foreach ($info as $value){
+            if($value['return_or_exchange'] == ReturnExchangeOrderProductInfo::type_one){
+                $order['product_one'][] = $value;
+            }else{
+                $order['product_two'][] = $value;
+            }
+        }
+
+        return [true, $order];
+    }
+
+    public function del($data){
+        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
+
+        $bool = ReturnExchangeOrder::where('id',$data['id'])
+            ->where('state','>',ReturnExchangeOrder::State_zero)->exists();
+        if($bool) return [false,'退换货单已确认,删除失败!'];
+
+        try{
+            DB::beginTransaction();
+            ReturnExchangeOrder::where('id',$data['id'])->update([
+                'del_time'=>time()
+            ]);
+            ReturnExchangeOrderProductInfo::where('return_exchange_id',$data['id'])->update([
+                'del_time'=>time()
+            ]);
+            ReturnExchangeOrderRange::where('return_exchange_id',$data['id'])->update([
+                'del_time'=>time()
+            ]);
+
+            DB::commit();
+        }catch (\Throwable $e){
+            DB::rollBack();
+            return [false,$e->getMessage()];
+        }
+
+        return [true,''];
+    }
+
+    public function getList($data,$user){
+        $model = ReturnExchangeOrder::where('del_time',0)
+            ->select('id','order_number','sales_order_id','difference_amount','state','crt_time','crt_id','mark')
+            ->orderby('id', 'desc');
+        if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
+        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;
+
+        $emp_id = array_unique(array_merge_recursive(array_column($data['data'],'crt_id')));
+        $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]['crt_name'] = $emp_map[$value['crt_id']] ?? '';
+            $data['data'][$key]['state_title'] = ReturnExchangeOrder::$state[$value['state']] ?? '';
+        }
+
+        return $data;
+    }
+
+    public function orderRule(&$data, $user, $is_check = true){
+        if($this->isEmpty($data,'model_type')) return [false,'单据类型不能为空!'];
+        if(! isset(ReturnExchangeOrder::$model_type[$data['model_type']])) return [false,'单据类型不存在'];
+        if($this->isEmpty($data,'sales_order_id')) return [false,'合同不能为空!'];
+        if(empty($data['sales_order_id'])) return [false,'请选择合同'];
+        $sale = SalesOrder::where('del_time',0)->where('id',$data['sales_order_id'])->first();
+        if(empty($sale)) return [false,'合同不存在或已被删除'];
+        if($sale['state'] < SalesOrder::State_two) return [false,'合同未施工,不能进行退换货操作'];
+
+        foreach ($data['product_one'] as $value){
+            if(empty($value['number'])) return [false,'产品数量不能为空'];
+            $res = $this->checkNumber($value['number']);
+            if(! $res) return [false,'请输入正确的退货产品数量'];
+        }
+        if($data['model_type'] == ReturnExchangeOrder::Model_type_two){
+            foreach ($data['product_two'] as $value){
+                if(empty($value['number'])) return [false,'产品数量不能为空'];
+                $res = $this->checkNumber($value['number']);
+                if(! $res) return [false,'请输入正确的换货产品数量'];
+            }
+        }
+
+        //所属部门 以及  顶级部门
+        if(empty($data['depart_id'])) $data['depart_id'] = $this->getDepart($user);
+        $data['top_depart_id'] = $user['depart_map'][$data['depart_id']] ?? 0;
+
+        if($is_check){
+            $prefix = ReturnExchangeOrder::$prefix[$data['model_type']] ?? "";
+            $order_number = (new OrderNoService())->createReturnExchangeOrderNumber($prefix);
+            if(empty($order_number)) return [false,'退换货单号生成失败!'];
+            $data['order_number'] = $order_number;
+        }else{
+            if($this->isEmpty($data,'order_number')) return [false,'退换货单号不能为空!'];
+        }
+
+        return [true, ''];
+    }
+}

+ 5 - 5
app/Service/SalesOrderService.php

@@ -65,8 +65,8 @@ class SalesOrderService extends Service
             $model->color = $data['color'] ?? '';
             $model->original_set = $data['original_set'] ?? '';
             $model->processing = $data['processing'] ?? '';
-            $model->depart_id = $data['depart_id'] ?? 0;
-            $model->top_depart_id = $data['top_depart_id'] ?? 0;
+//            $model->depart_id = $data['depart_id'] ?? 0;
+//            $model->top_depart_id = $data['top_depart_id'] ?? 0;
             $model->save();
             $time = time();
 
@@ -774,11 +774,11 @@ class SalesOrderService extends Service
         $bool = Construction::where('del_time',0)
             ->where('sales_order_id',$data['id'])
             ->exists();
-        if(! $bool) return [false,'合同已下施工,操作失败'];
+        if($bool) return [false,'合同已下施工,操作失败'];
 
         if(empty($data['dispatch_depart_two'])) return [false, '请指派总社或分社'];
-        if(empty($value['other_fee_1'])) return [false,'价格不能为空'];
-        $res = $this->checkNumber($value['other_fee_1']);
+        if(empty($data['other_fee_1'])) return [false,'价格不能为空'];
+        $res = $this->checkNumber($data['other_fee_1']);
         if(! $res) return [false,'价格请输入不超过两位小数并且大于0的数值'];
 
         return [true, $sale];

+ 7 - 0
routes/api.php

@@ -148,6 +148,13 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('constructionAdd', 'Api\ConstructionController@constructionAdd');
     $route->any('constructionDel', 'Api\ConstructionController@constructionDel');
 
+    //退换货
+    $route->any('ReturnExchangeOrderList', 'Api\ReturnExchangeOrderController@ReturnExchangeOrderList');
+    $route->any('ReturnExchangeOrderEdit', 'Api\ReturnExchangeOrderController@ReturnExchangeOrderEdit');
+    $route->any('ReturnExchangeOrderDetail', 'Api\ReturnExchangeOrderController@ReturnExchangeOrderDetail');
+    $route->any('ReturnExchangeOrderAdd', 'Api\ReturnExchangeOrderController@ReturnExchangeOrderAdd');
+    $route->any('ReturnExchangeOrderDel', 'Api\ReturnExchangeOrderController@ReturnExchangeOrderDel');
+
     //现存量
     $route->any('productInventoryList', 'Api\ProductInventoryController@productInventoryList');
     //收发存汇总