| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381 | 
							- <?php
 
- namespace App\Service;
 
- use App\Model\Employee;
 
- use App\Model\Product;
 
- use Illuminate\Support\Facades\DB;
 
- /**
 
-  * 产品管理
 
-  */
 
- class ProductService extends Service
 
- {
 
-     /**
 
-      * 产品分类编辑
 
-      * @param $data
 
-      * @param $user
 
-      * @return array
 
-      */
 
-     public function productCategoryEdit($data,$user){
 
-         list($status,$msg) = $this->productCategoryRule($data,$user,false);
 
-         if(!$status) return [$status,$msg];
 
-         $update = $msg['data'][0];
 
-         $model = new ProductCategory();
 
-         $model->where('id',$data['id'])->update($update);
 
-         return [true,''];
 
-     }
 
-     /**
 
-      * 产品分类新增
 
-      * @param $data
 
-      * @param $user
 
-      * @return array
 
-      */
 
-     public function productCategoryAdd($data,$user){
 
-         list($status,$msg) = $this->productCategoryRule($data,$user);
 
-         if(!$status) return [$status,$msg];
 
-         ProductCategory::insert($msg['data']);
 
-         return [true,''];
 
-     }
 
-     /**
 
-      * 产品分类删除
 
-      * @param $data
 
-      * @return array
 
-      */
 
-     public function productCategoryDel($data){
 
-         if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
 
-         $bool = Product::where('del_time',0)
 
-             ->where('product_category_id',$data['id'])
 
-             ->exists();
 
-         if($bool) return [false,'产品分类下已添加产品,操作失败'];
 
-         try {
 
-             DB::beginTransaction();
 
-             ProductCategory::where('id',$data['id'])->update([
 
-                 'del_time' => time()
 
-             ]);
 
-             DB::commit();
 
-         }catch (\Exception $exception){
 
-             DB::rollBack();
 
-             return [false,$exception->getMessage()];
 
-         }
 
-         return [true,''];
 
-     }
 
-     /**
 
-      * 产品分类列表
 
-      * @param $data
 
-      * @param $user
 
-      * @return array
 
-      */
 
-     public function productCategoryList($data,$user){
 
-         $model = ProductCategory::leftJoin('product_category_orderby as a', function ($join) {
 
-                 $join->on('product_category.id', '=', 'a.category_id')
 
-                     ->where('a.del_time',0);
 
-             })
 
-             ->where('product_category.del_time',0)
 
-             ->select('product_category.title','product_category.id','product_category.parent_id','product_category.is_edit_unit_price')
 
-             ->orderByRaw('IF(a.sort IS NULL, product_category.id, a.sort) ASC'); // 排序逻辑:优先按 a.sort 排序,没有关联时按主表 id 排序
 
-         if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
 
-         if(isset($data['is_edit_unit_price'])) $model->where('is_edit_unit_price', $data['is_edit_unit_price']);
 
-         $list = $model->get()->toArray();
 
-         foreach ($list as $key => $value){
 
-             $list[$key]['is_edit_unit_price_title'] = ProductCategory::$is_edit_unit_price[$value['is_edit_unit_price']] ?? "";
 
-         }
 
-         $list_tree = $list;
 
-         if(! empty($list_tree)) {
 
-             $list_tree = $this->makeTree(0,$list_tree);
 
-             $list_tree = $this->set_sort_circle($list_tree);
 
-         }
 
-         return [200, ['data' => $list,'tree' => $list_tree]];
 
-     }
 
-     /**
 
-      * 产品分类参数规则
 
-      * @param $data
 
-      * @param $is_add
 
-      * @return array
 
-      */
 
-     public function productCategoryRule($data,$user, $is_add = true){
 
-         if($this->isEmpty($data,'data')) return [false,'数据不能为空!'];
 
-         $title = array_column($data['data'],'title');
 
-         $title = array_map(function($val) {
 
-             return $val !== null ? $val : 0;
 
-         }, $title);
 
-         $title_count = array_count_values($title);
 
-         foreach ($title as $value){
 
-             if(empty($value)) return [false,'名称不能为空!'];
 
-             if($title_count[$value] > 1) return [false,'名称不能重复'];
 
-         }
 
-         foreach ($data['data'] as $key => $value){
 
-             $data['data'][$key]['upd_time'] = time();
 
-             if($is_add){
 
-                 $parent_id = 0;
 
-                 if(! empty($value['parent_id'])) {
 
-                     $bool = Product::where('del_time',0)
 
-                         ->where('product_category_id',$value['parent_id'])
 
-                         ->exists();
 
-                     if($bool) {
 
-                         $title = ProductCategory::where('id',$value['parent_id'])->select('title')->value('title');
 
-                         return [false,'产品分类:'. $title .'下已添加产品,不允许添加子分类'];
 
-                     }
 
-                     $parent_id = $value['parent_id'];
 
-                 }
 
-                 $data['data'][$key]['parent_id'] = $parent_id;
 
-                 $data['data'][$key]['crt_time'] = time();
 
-                 $data['data'][$key]['depart_id'] = $data['depart_id'];
 
-                 $data['data'][$key]['top_depart_id'] = $data['top_depart_id'];
 
-                 $bool = ProductCategory::where('title',$value['title'])
 
-                     ->where('top_depart_id',$data['top_depart_id'])
 
-                     ->where('del_time',0)
 
-                     ->exists();
 
-             }else{
 
-                 if($this->isEmpty($data,'id')) return [false,'id不能为空!'];
 
-                 $top_depart_id = ProductCategory::where('id',$data['id'])->value('top_depart_id');
 
-                 $bool = ProductCategory::where('title',$value['title'])
 
-                     ->where('id','<>',$data['id'])
 
-                     ->where('del_time',0)
 
-                     ->exists();
 
-             }
 
-             if($bool) return [false,'分类名称不能重复'];
 
-         }
 
-         return [true, $data];
 
-     }
 
-     /**
 
-      * 产品编辑
 
-      * @param $data
 
-      * @param $user
 
-      * @return array
 
-      */
 
-     public function productEdit($data,$user){
 
-         list($status,$msg) = $this->productRule($data, $user, false);
 
-         if(!$status) return [$status,$msg];
 
-         try {
 
-             DB::beginTransaction();
 
-             $model = Product::where('id',$data['id'])->first();
 
-             $model->category = $data['category'] ?? '';
 
-             $model->title = $data['title'];
 
-             $model->code = $data['code'] ?? '';
 
-             $model->size = $data['size'] ?? '';
 
-             $model->unit = $data['unit'] ?? '';
 
-             $model->business_cost = $data['business_cost'] ?? 0;
 
-             $model->cost = $data['cost'] ?? 0;
 
-             $model->write_off_price = $data['write_off_price'] ?? 0;
 
-             $model->major_client_settlement_price = $data['major_client_settlement_price'] ?? 0;
 
-             $model->return_change_price = $data['return_change_price'] ?? 0;
 
-             $model->freight_price = $data['freight_price'] ?? 0;
 
-             $model->mark = $data['mark'] ?? '';
 
-             $model->save();
 
-             DB::commit();
 
-         }catch (\Exception $exception){
 
-             DB::rollBack();
 
-             return [false,$exception->getMessage()];
 
-         }
 
-         return [true, ''];
 
-     }
 
-     /**
 
-      * 产品新增
 
-      * @param $data
 
-      * @param $user
 
-      * @return array
 
-      */
 
-     public function productAdd($data,$user){
 
-         list($status,$msg) = $this->productRule($data, $user);
 
-         if(!$status) return [$status,$msg];
 
-         try {
 
-             DB::beginTransaction();
 
-             $model = new Product();
 
-             $model->category = $data['category'] ?? '';
 
-             $model->title = $data['title'];
 
-             $model->code = $data['code'] ?? '';
 
-             $model->size = $data['size'] ?? '';
 
-             $model->unit = $data['unit'] ?? '';
 
-             $model->business_cost = $data['business_cost'] ?? 0;
 
-             $model->cost = $data['cost'] ?? 0;
 
-             $model->write_off_price = $data['write_off_price'] ?? 0;
 
-             $model->major_client_settlement_price = $data['major_client_settlement_price'] ?? 0;
 
-             $model->return_change_price = $data['return_change_price'] ?? 0;
 
-             $model->freight_price = $data['freight_price'] ?? 0;
 
-             $model->mark = $data['mark'] ?? '';
 
-             $model->crt_id = $user['id'];
 
-             $model->save();
 
-             DB::commit();
 
-         }catch (\Exception $exception){
 
-             DB::rollBack();
 
-             return [false,$exception->getMessage()];
 
-         }
 
-         return [true, ''];
 
-     }
 
-     /**
 
-      * 产品删除
 
-      * @param $data
 
-      * @return array
 
-      */
 
-     public function productDel($data){
 
-         if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
 
-         try {
 
-             DB::beginTransaction();
 
-             $time = time();
 
-             Product::where('del_time',0)->whereIn('id',$data['id'])->update(['del_time' => $time]);
 
-             DB::commit();
 
-         }catch (\Exception $exception){
 
-             DB::rollBack();
 
-             return [false,$exception->getMessage()];
 
-         }
 
-         return [true, ''];
 
-     }
 
-     /**
 
-      * 产品详情
 
-      * @param $data
 
-      * @param $user
 
-      * @return array
 
-      */
 
-     public function productDetail($data,$user){
 
-         if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
 
-         $customer = Product::where('del_time',0)
 
-             ->where('id',$data['id'])
 
-             ->first();
 
-         if(empty($customer)) return [false,'产品不存在或已被删除'];
 
-         $customer = $customer->toArray();
 
-         $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']): '';
 
-         return [true, $customer];
 
-     }
 
-     public function productCommon($data,$user, $field = []){
 
-         if(empty($field)) $field = Product::$field;
 
-         $model = Product::where('del_time',0)
 
-             ->select($field)
 
-             ->orderby('code', 'asc');
 
-         if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
 
-         if(! empty($data['category'])) $model->where('category', 'LIKE', '%'.$data['category'].'%');
 
-         if(! empty($data['size'])) $model->where('size', 'LIKE', '%'.$data['size'].'%');
 
-         if(! empty($data['code'])) $model->where('code', 'LIKE', '%'.$data['code'].'%');
 
-         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]);
 
-         }
 
-         return $model;
 
-     }
 
-     /**
 
-      * 产品列表
 
-      * @param $data
 
-      * @param $user
 
-      * @return array
 
-      */
 
-     public function productList($data,$user){
 
-         $model = $this->productCommon($data, $user);
 
-         $list = $this->limit($model,'',$data);
 
-         $list = $this->fillData($list,$user,$data);
 
-         return [true, $list];
 
-     }
 
-     /**
 
-      * 产品参数规则
 
-      * @param $data
 
-      * @param $is_add
 
-      * @return array
 
-      */
 
-     public function productRule(&$data, $user, $is_add = true){
 
-         if(empty($data['code'])) return [false,'产品编码不能为空'];
 
-         if(empty($data['title'])) return [false,'产品名称不能为空'];
 
-         if(! isset($data['cost'])) return [false, '请填写成本'];
 
-         if(! isset($data['business_cost'])) return [false, '请填写业务成本'];
 
-         $res = $this->checkNumber($data['cost']);
 
-         if(! $res['valid']) return [false,'成本:' . $res['error']];
 
-         $res = $this->checkNumber($data['business_cost']);
 
-         if(! $res['valid']) return [false,'业务成本:' . $res['error']];
 
-         if(! empty($data['write_off_price'])){
 
-             $res = $this->checkNumber($data['write_off_price']);
 
-             if(! $res['valid']) return [false,'核销单价:' . $res['error']];
 
-         }
 
-         if(! empty($data['major_client_settlement_price'])){
 
-             $res = $this->checkNumber($data['major_client_settlement_price']);
 
-             if(! $res['valid']) return [false,'大客户结算单价:' . $res['error']];
 
-         }
 
-         if(! empty($data['return_change_price'])){
 
-             $res = $this->checkNumber($data['return_change_price']);
 
-             if(! $res['valid']) return [false,'退货损耗单价:' . $res['error']];
 
-         }
 
-         if(! empty($data['freight_price'])){
 
-             $res = $this->checkNumber($data['freight_price']);
 
-             if(! $res['valid']) return [false,'运费单价:' . $res['error']];
 
-         }
 
-         if($is_add){
 
-             $bool = Product::where('code', $data['code'])
 
-                 ->where('del_time',0)
 
-                 ->exists();
 
-         }else{
 
-             if(empty($data['id'])) return [false,'ID不能为空'];
 
-             $bool = Product::where('code', $data['code'])
 
-                 ->where('id','<>',$data['id'])
 
-                 ->where('del_time',0)
 
-                 ->exists();
 
-         }
 
-         if($bool) return [false,'产品编码不能重复'];
 
-         return [true, $data];
 
-     }
 
-     /**
 
-      * 拼接数据
 
-      * @param $data
 
-      * @return array
 
-      */
 
-     public function fillData($data, $user, $search){
 
-         if(empty($data['data'])) return $data;
 
-         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']] ?? '';
 
-         }
 
-         return $data;
 
-     }
 
- }
 
 
  |