cqpCow hace 1 año
padre
commit
d252865dc8

+ 1 - 1
app/Http/Controllers/Api/LoginController.php

@@ -20,6 +20,6 @@ class LoginController extends BaseController
         //生成token
         $jwtToken = TokenService::getToken($return['id']);
 
-        return $this->json_return(200,'', ['token' => $jwtToken, 'emp_name'=>$return['name'],'is_main'=>$return['is_main'],'top_depart_title'=>$return['top_depart_title']]);
+        return $this->json_return(200,'', ['token' => $jwtToken, 'emp_name'=>$return['name'],'is_main'=>$return['is_main'],'top_depart_id'=>$return['top_depart_id'],'top_depart_title'=>$return['top_depart_title']]);
     }
 }

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

@@ -0,0 +1,74 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+use App\Service\SportsBagService;
+use Illuminate\Http\Request;
+
+class SportsBagController extends BaseController
+{
+    public function add(Request $request)
+    {
+        $service = new SportsBagService();
+        $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 edit(Request $request)
+    {
+        $service = new SportsBagService();
+        $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 detail(Request $request)
+    {
+        $service = new SportsBagService();
+        $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 del(Request $request)
+    {
+        $service = new SportsBagService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->del($request->all(),$userData);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function orderList(Request $request)
+    {
+        $service = new SportsBagService();
+        $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);
+        }
+    }
+}

+ 39 - 0
app/Model/SportsBag.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace App\Model;
+
+use App\Scopes\DepartmentScope;
+use Illuminate\Database\Eloquent\Model;
+
+class SportsBag extends Model
+{
+//    protected $fillable = ['userData'];
+    protected $guarded = [];
+    protected $table = "sports_bag"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+    public static $user = [];
+    public static $search = [];
+    public static $is_search = false;
+    const range_function = 'sportsBagRange';
+
+    public function __construct(array $attributes = [])
+    {
+        if(! empty($attributes['userData'])) {
+            self::$user = $attributes['userData'];
+            self::$user['range_function'] = self::range_function;
+            self::$search = $attributes['search'];
+            self::$is_search = true;
+        }
+        parent::__construct($attributes);
+    }
+
+    protected static function boot(){
+        parent::boot();
+        if(self::$is_search){
+            static::addGlobalScope(new DepartmentScope(self::$user, self::$search));
+        }
+    }
+}

+ 13 - 0
app/Model/SportsBagProductInfo.php

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

+ 19 - 0
app/Model/SportsBagRange.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+class SportsBagRange extends Model
+{
+    protected $table = "sports_bag_range"; //指定表
+    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,
+    ];
+}

+ 5 - 4
app/Service/EmployeeService.php

@@ -10,7 +10,7 @@ use App\Model\EmployeeManagerDepart;
 use App\Model\EmployeeMenuPermission;
 use App\Model\EmployeeRole;
 use App\Model\EmployeeTeamPermission;
-use App\Model\ProductInventorySettings;
+use App\Model\ProductInventorySet;
 use App\Model\Role;
 use App\Model\RoleMenu;
 use App\Model\RoleMenuButton;
@@ -579,7 +579,7 @@ class EmployeeService extends Service
                     }
 
                     //公司是否校验锁定库存
-                    ProductInventorySettings::insert(['top_depart_id' => $depart_id, 'param_one' => 1, 'crt_time' => time()]);
+                    ProductInventorySet::insert(['top_depart_id' => $depart_id, 'param_one' => 1, 'crt_time' => time()]);
                 }
             }
 
@@ -1043,7 +1043,8 @@ class EmployeeService extends Service
         $is_main = $return[4] ?? 0;
         $depart_top_title = $return[1] ?? [];
         $depart_top_title = $depart_top_title[0]['title'] ?? "";
-        return [true, ['id'=>$res['id'], 'name'=>$res['emp_name'], 'is_main' => $is_main, 'top_depart_title' => $depart_top_title]];
+        $depart_top_id = $depart_top_title[0]['depart_id'] ?? "";
+        return [true, ['id'=>$res['id'], 'name'=>$res['emp_name'], 'is_main' => $is_main, 'top_depart_id' => $depart_top_id,'top_depart_title' => $depart_top_title]];
     }
 
     /**
@@ -1206,7 +1207,7 @@ class EmployeeService extends Service
         $is_all_depart = 0;
         if(! empty($depart)){
             //库存校验
-            $set_map = ProductInventorySettings::where('param_one','>',0)->pluck('param_one','top_depart_id')->toArray();
+            $set_map = ProductInventorySet::where('del_time',0)->pluck('param_one','top_depart_id')->toArray();
             //所有部门
             $list = Depart::where('del_time',0)->get()->toArray();
             $depart_map = array_column($list,null,'id');

+ 18 - 13
app/Service/ProductInventoryService.php

@@ -13,7 +13,6 @@ use App\Model\Product;
 use App\Model\ProductCategory;
 use App\Model\ProductInventory;
 use App\Model\ProductInventorySet;
-use App\Model\ProductInventorySettings;
 use App\Model\PurchaseOrder;
 use App\Model\ReturnExchangeOrder;
 use App\Model\SalesOrder;
@@ -102,7 +101,7 @@ class ProductInventoryService extends Service
         //是否使用锁定库存校验  默认使用
         $depart = array_shift($user['rule_depart']);
         $is_stock = empty($depart['is_stock']) ? 1 : $depart['is_stock'];
-        if($is_stock == ProductInventorySettings::type_two) return;
+        if($is_stock == ProductInventorySet::type_two) return;
 
         //产品数扣减
         if(! empty($save_total)){
@@ -155,7 +154,7 @@ class ProductInventoryService extends Service
             if(! isset($stock[$key])) return [false,'产品:'. $pro_title .'库存不存在'];
             $stock_product = $stock[$key];
 
-            if($is_stock == ProductInventorySettings::type_one){
+            if($is_stock == ProductInventorySet::type_one){
                 //校验锁定库存
                 $save_data = $product_save[$key] ?? 0;//已保存数量
                 $tmp_lock = ($stock_product['lock_number'] > 0 ? $stock_product['lock_number'] : 0) - $save_data;
@@ -339,12 +338,11 @@ class ProductInventoryService extends Service
         return $array;
     }
 
-    //库存设置列表
-    public function productInventorySetList($data, $user){
+    //系统设置列表
+    public function productInventorySetList2($data, $user){
         $model = new ProductInventorySet(['userData' => $user, 'search' => $data]);
         $model = $model->where('del_time',0)
-            ->where('param_one','>',0)
-            ->select('id','top_depart_id','param_one')
+            ->select('id','top_depart_id','param_one','param_two')
             ->orderby('id', 'desc');
 
         $list = $model->get()->toArray();
@@ -355,12 +353,12 @@ class ProductInventoryService extends Service
         return [true, $list];
     }
 
-    //库存设置列表
-    public function productInventorySetList2($data, $user){return;
-        $model = new ProductInventorySettings();
+    //系统设置列表
+    public function productInventorySetList($data, $user){
+        $model = new ProductInventorySet();
         $model = $model->where('del_time',0)
             ->where('param_one','>',0)
-            ->select('id','top_depart_id','param_one');
+            ->select('id','top_depart_id','param_one','param_two');
 
         if(empty($data['top_depart_id'])){
             //默认进来 只显示自己公司下的 自己权限范围下的部门数据
@@ -384,8 +382,15 @@ class ProductInventoryService extends Service
     public function productInventorySet($data, $user){
         if(empty($data['id'])) return [false, 'ID不能为空'];
 
-        ProductInventorySettings::where('id',$data['id'])
-            ->update(['param_one' => $data['param_one']]);
+        if(isset($data['param_one'])){
+            ProductInventorySet::where('id',$data['id'])
+                ->update(['param_one' => $data['param_one']]);
+        }
+
+        if(isset($data['param_two'])){
+            ProductInventorySet::where('id',$data['id'])
+                ->update(['param_two' => $data['param_two']]);
+        }
 
         return [true, ''];
     }

+ 14 - 0
app/Service/RangeService.php

@@ -8,6 +8,7 @@ use App\Model\ProductRange;
 use App\Model\ReturnExchangeOrderRange;
 use App\Model\SalesOrderInfo;
 use App\Model\SalesOrderRange;
+use App\Model\SportsBagRange;
 use App\Model\SupplierInfo;
 
 class RangeService extends Service
@@ -101,4 +102,17 @@ class RangeService extends Service
             ->toArray();
         return array_unique(array_column($return_exchange_id,'return_exchange_id'));
     }
+
+    //获取活动包可见数据
+    public static function sportsBagRange($user){
+        $user_id = $user['id'];
+        $depart_id = $user['depart_range'];
+        $return_exchange_id = SportsBagRange::where('del_time',0)
+            ->where(function ($query) use($user_id, $depart_id) {
+                $query->where('employee_id',$user_id)
+                    ->orWhereIn('depart_id', $depart_id);
+            })->select('sports_bag_id')->get()
+            ->toArray();
+        return array_unique(array_column($return_exchange_id,'sports_bag_id'));
+    }
 }

+ 314 - 0
app/Service/SportsBagService.php

@@ -0,0 +1,314 @@
+<?php
+
+namespace App\Service;
+
+use App\Model\BasicType;
+use App\Model\Depart;
+use App\Model\Employee;
+use App\Model\ReturnExchangeOrder;
+use App\Model\ReturnExchangeOrderProductInfo;
+use App\Model\ReturnExchangeOrderRange;
+use App\Model\SalesOrder;
+use App\Model\SalesOrderProductInfo;
+use App\Model\SportsBag;
+use App\Model\SportsBagProductInfo;
+use App\Model\SportsBagRange;
+use App\Model\Storehouse;
+use Illuminate\Support\Facades\DB;
+
+class SportsBagService 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 = SportsBag::where('id',$data['id'])->first();
+            $material_model->title = $data['title'];
+            $material_model->mark = $data['mark'];
+            $material_model->number = $data['number'];
+            $material_model->start_time = $data['start_time'] ?? 0;
+            $material_model->end_time = $data['end_time'] ?? 0;
+            $material_model->save();
+            $time = time();
+
+            SportsBagProductInfo::where('del_time',0)
+                ->where('sports_bag_id',$data['id'])
+                ->update(['del_time' => $time]);
+            if(!empty($data['product'])){
+                $sub = [];
+                foreach ($data['product'] as $value){
+                    $sub[] = [
+                        'sports_bag_id' => $material_model->id,
+                        'product_id' => $value['product_id'],
+                        'number' => $value['number'],
+                        'mark' => $value['mark'] ?? '',
+                        'cost' => $value['cost'] ?? 0,
+                        'retail_price' => $value['retail_price'] ?? 0,
+                        'crt_time' => $time,
+                        'basic_type_id' => $value['basic_type_id'],
+                        'price' => $value['price'],
+                    ];
+                }
+                SportsBagProductInfo::insert($sub);
+            }
+
+            SportsBagRange::where('del_time',0)
+                ->where('sports_bag_id',$data['id'])
+                ->update(['del_time' => $time]);
+
+            if(! empty($data['depart'])){
+                $insert = [];
+                foreach ($data['depart'] as $value){
+                    $insert[] = [
+                        'sports_bag_id' => $material_model->id,
+                        'depart_id' => $value,
+                        'type' => SportsBagRange::type_one,
+                        'crt_time' => $time,
+                    ];
+                }
+                SportsBagRange::insert($insert);
+            }
+
+            if(! empty($data['employee'])){
+                $insert = [];
+                foreach ($data['employee'] as $value){
+                    $insert[] = [
+                        'sports_bag_id' => $material_model->id,
+                        'employee_id' => $value,
+                        'type' => SportsBagRange::type_two,
+                        'crt_time' => $time,
+                    ];
+                }
+                SportsBagRange::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->title = $data['title'];
+            $material_model->mark = $data['mark'];
+            $material_model->number = $data['number'];
+            $material_model->start_time = $data['start_time'] ?? 0;
+            $material_model->end_time = $data['end_time'] ?? 0;
+            $material_model->crt_id = $user['id'];
+            $material_model->depart_id = $data['depart_id'] ?? 0;
+            $material_model->top_depart_id = $data['top_depart_id'] ?? 0;
+            $material_model->save();
+            $time = time();
+
+            if(!empty($data['product'])){
+                $sub = [];
+                foreach ($data['product'] as $value){
+                    $sub[] = [
+                        'sports_bag_id' => $material_model->id,
+                        'product_id' => $value['product_id'],
+                        'number' => $value['number'],
+                        'mark' => $value['mark'] ?? '',
+                        'cost' => $value['cost'] ?? 0,
+                        'retail_price' => $value['retail_price'] ?? 0,
+                        'crt_time' => $time,
+                        'basic_type_id' => $value['basic_type_id'],
+                        'price' => $value['price'],
+                    ];
+                }
+                SportsBagProductInfo::insert($sub);
+            }
+
+            if(! empty($data['depart'])){
+                $insert = [];
+                foreach ($data['depart'] as $value){
+                    $insert[] = [
+                        'sports_bag_id' => $material_model->id,
+                        'depart_id' => $value,
+                        'type' => SportsBagRange::type_one,
+                        'crt_time' => $time,
+                    ];
+                }
+                SportsBagRange::insert($insert);
+            }
+
+            if(! empty($data['employee'])){
+                $insert = [];
+                foreach ($data['employee'] as $value){
+                    $insert[] = [
+                        'sports_bag_id' => $material_model->id,
+                        'employee_id' => $value,
+                        'type' => SportsBagRange::type_two,
+                        'crt_time' => $time,
+                    ];
+                }
+                SportsBagRange::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 = SportsBag::where('id',$data['id'])
+            ->where('del_time',0)
+            ->first();
+        if(empty($order)) return [false, '活动包不存在或已被删除'];
+        $order = $order->toArray();
+        $start_time = $order['start_time'] ? date("Y-m-d H:i",$order['start_time']) : '';
+        $end_time = $order['end_time'] ? date("Y-m-d H:i",$order['end_time']) : '';
+        $order['sports_bag_time'] = $start_time . '——' . $end_time;
+
+        $order['product'] = $order['depart'] = $order['employee'] = [];
+        $info = SportsBagProductInfo::where('del_time',0)
+            ->where('sports_bag_id',$data['id'])
+            ->get()->toArray();
+        $map = (new ProductService())->getProductDetail(array_column($info,'product_id'));
+        foreach ($info as $value){
+            $tmp = $map[$value['product_id']] ?? [];
+            $value['title'] = $tmp['title'] ?? "";
+            $value['code'] = $tmp['code'] ?? "";
+            $value['size'] = $tmp['size'] ?? "";
+            $value['unit'] = $tmp['unit'] ?? "";
+            $value['bar_code'] = $tmp['bar_code'] ?? "";
+            $order['product'][] = $value;
+        }
+
+        $range = SportsBagRange::where('del_time',0)
+            ->where('sports_bag_id',$order['id'])
+            ->select('id','sports_bag_id','depart_id','type','employee_id')
+            ->get()->toArray();
+        $emp_map = Employee::whereIn('id',array_unique(array_merge_recursive([$order['crt_id']],array_column($range,'employee_id'))))
+            ->pluck('emp_name','id')
+            ->toArray();
+        $depart_map = Depart::whereIn('id',array_unique(array_column($range,'depart_id')))
+            ->pluck('title','id')
+            ->toArray();
+        foreach ($range as $value){
+            if($value['type'] == SportsBagRange::type_one){
+                $tmp = [
+                    'id' => $value['depart_id'],
+                    'name' => $depart_map[$value['depart_id']],
+                ];
+                $order['depart'][] = $tmp;
+            }elseif ($value['type'] == SportsBagRange::type_two){
+                $tmp = [
+                    'id' => $value['employee_id'],
+                    'name' => $emp_map[$value['employee_id']] ?? '',
+                ];
+                $order['employee'][] = $tmp;
+            }
+        }
+        $order['crt_name'] = $emp_map[$order['crt_id']] ?? '';
+        $order['crt_time'] = $order['crt_time'] ? date("Y-m-d H:i:s",$order['crt_time']): '';
+
+        return [true, $order];
+    }
+
+    public function del($data,$user){
+        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
+        $order = ReturnExchangeOrder::where('del_time',0)->where('id',$data['id'])->first();
+        if(empty($order)) return [false,'活动单不存在或已被删除'];
+
+        try{
+            DB::beginTransaction();
+            SportsBag::where('id',$data['id'])->update([
+                'del_time'=>time()
+            ]);
+            SportsBagProductInfo::where('sports_bag_id',$data['id'])->update([
+                'del_time'=>time()
+            ]);
+            SportsBagRange::where('sports_bag_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 = new SportsBag(['userData' => $user,'search' => $data]);
+        $model = $model->where('del_time',0)
+            ->select('id','title','number','start_time','end_time','crt_time','crt_id','mark')
+            ->orderby('id', 'desc');
+
+        if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
+        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]]);
+        }
+        if(! empty($data['sports_bag_time'][0]) && ! empty($data['sports_bag_time'][1])) {
+            $return = $this->changeDateToTimeStampAboutRange($data['sports_bag_time']);
+            $model->where('start_time','>=',$return[0]);
+            $model->where('end_time','<=',$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){
+            $start_time = $value['start_time'] ? date("Y-m-d H:i",$value['start_time']) : '';
+            $end_time = $value['end_time'] ? date("Y-m-d H:i",$value['end_time']) : '';
+            $data['data'][$key]['sports_bag_time'] = $start_time . '——' . $end_time;
+            $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']] ?? '';
+        }
+
+        return $data;
+    }
+
+    public function orderRule(&$data, $user, $is_check = true){
+        if(empty($data['title'])) return [false,'请填写活动名称'];
+        if($this->isEmpty($data,'sales_order_id')) return [false,'合同不能为空!'];
+        if(empty($data['sports_bag_time'][0]) || empty($data['sports_bag_time'][1])) return [false,'请填写活动时间范围'];
+        $data['start_time'] = $this->changeDateToDateMin($data['sports_bag_time'][0]);
+        $data['end_time'] = $this->changeDateToDateMin($data['sports_bag_time'][1]);
+        if(empty($data['number'])) return [false,'必选产品种数不能为空'];
+        $res = $this->checkNumber($data['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){
+
+        }else{
+            if($this->isEmpty($data,'id')) return [false,'活动包ID不能为空!'];
+        }
+
+        return [true, ''];
+    }
+}

+ 7 - 0
routes/api.php

@@ -171,6 +171,13 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('ReturnExchangeOrderAdd', 'Api\ReturnExchangeOrderController@ReturnExchangeOrderAdd');
     $route->any('ReturnExchangeOrderDel', 'Api\ReturnExchangeOrderController@ReturnExchangeOrderDel');
 
+    //活动包
+    $route->any('sportsBagOrderList', 'Api\SportsBagController@orderList');
+    $route->any('sportsBagEdit', 'Api\SportsBagController@edit');
+    $route->any('sportsBagDetail', 'Api\SportsBagController@detail');
+    $route->any('sportsBagAdd', 'Api\SportsBagController@add');
+    $route->any('sportsBagDel', 'Api\SportsBagController@del');
+
     //现存量
     $route->any('productInventoryList', 'Api\ProductInventoryController@productInventoryList');
     //收发存汇总