when($request->filled('id'), fn ($q) => $q->where('id', $request->id)) ->when($request->filled('name'), fn ($q) => $q->where('name', 'like', "%$request->name%")) ->when($request->has('rebate_type'), fn ($q) => $q->where('rebate_type', $request->rebate_type)) ->when($request->has('is_upload'), fn ($q) => $q->where('is_upload', $request->is_upload)) ->when($request->filled('operator_id'), fn ($q) => $q->where('operator_id', $request->operator_id)); } // 查询列表 public function select(Request $request,$selectFields = []) { if(empty($selectFields)){ $selectFields = Packages::$selectFields; } $page = new Pages($request, Packages::query()); $page->withRelations(['suppliers','package_member_level_royalty']); $page->before(function ($query) use ($request, $selectFields) { $query->select($selectFields); return $this->whens($query, $request) ->orderBy('is_upload', 'desc') ->orderby("weight", "desc") ->orderBy(DB::raw('CAST(yj AS UNSIGNED)'), 'desc') ->orderBy('created_at', 'desc'); }); $result = $page->paginate(); return $result; } // 导出 public function export(Request $request) { $query = Packages::select(Packages::$selectFields); $query = $this->whens($query, $request); $query->orderBy('created_at', 'desc'); $header = [ '名称' => 'name', '简介' => 'mini_text', '主图' => 'image', '详情' => 'details', '运营商' => 'operator_id', '佣金政策' => 'yjzc', '套餐类型' => 'type_id', '月租' => 'monthly_rent', '权重' => 'weight', '上游套餐编码' => 'upstream_code', '生产方式' => 'production_type_id', '是否上架' => 'is_upload', '是否需要身份证号' => 'need_idcard', '是否需要上传身份证照片' => 'is_upload_idcard', '状态' => 'status', '外部产品编码' => 'out_package_id', '归属地' => 'belonging_place', '流量额度' => 'data_quota', '通话时长' => 'call_duration', '是否可选号' => 'is_choose_number', '首充金额' => 'first_recharge_amount', '直接提交局方,0表示不提,1表示提' => 'direct_send_status', '线上或本地号库切换,默认为0:无号库,1:本地号库,2:线上号库' => 'uporlocal', '颜色' => 'color', '最小年龄' => 'min_age', '最大年龄' => 'max_age', '亲情号' => 'family_number', '靓号' => 'beautiful_number', '可否自选归属地' => 'ownership_change', '优惠有效期,单位月' => 'discount_month', '套餐月租' => 'month_rent', '通用流量' => 'general_traffic', '定向流量' => 'directional_traffic', '长期资费/短期资费' => 'long_short_tariff', '附带权益' => 'interest', '原月租' => 'original_month_rent', '封面图' => 'cover_img', '注意事项' => 'attention', '只发货地区' => 'noly_delivery_area', '亮点' => 'bright', '返佣类型 1:次月返 2:秒返' => 'rebate_type', '知识库' => 'knowledge_base', '是否选号' => 'select_status', '是否校验' => 'is_valid', '前置校验编码' => 'valid_req_code', '套餐标签' => 'tag_ids', '小店套餐标签' => 'shop_tag_ids', '定向流量' => 'data_orientation', '通用流量' => 'data_usual', '是否允许直播 0:不允许 1:允许' => 'is_live', '删除时间' => 'deleted_at', '运营商标识图' => 'ident_image', '下架时间' => 'delist_time', '产品类型 0号卡 1宽带' => 'product_type', '网速' => 'internet_speed', '供货商id' => 'supplier_id', '结佣条件' => 'commission_terms', ]; $getEnValue = $this->getEnValue(); $excel = new SpoutExport($header); $excel->setData($query->get()); $result = $excel->setEnum($getEnValue)->spoutToExcel('excel_out'); return $result ? success($result['url']) : error(); } // 导入 public function import(Request $request) { $header = [ '名称' => 'name', '简介' => 'mini_text', '主图' => 'image', '详情' => 'details', '运营商' => 'operator_id', '佣金政策' => 'yjzc', '套餐类型' => 'type_id', '月租' => 'monthly_rent', '权重' => 'weight', '上游套餐编码' => 'upstream_code', '生产方式' => 'production_type_id', '是否上架' => 'is_upload', '是否需要身份证号' => 'need_idcard', '是否需要上传身份证照片' => 'is_upload_idcard', '状态' => 'status', '外部产品编码' => 'out_package_id', '归属地' => 'belonging_place', '流量额度' => 'data_quota', '通话时长' => 'call_duration', '是否可选号' => 'is_choose_number', '首充金额' => 'first_recharge_amount', '直接提交局方,0表示不提,1表示提' => 'direct_send_status', '线上或本地号库切换,默认为0:无号库,1:本地号库,2:线上号库' => 'uporlocal', '颜色' => 'color', '最小年龄' => 'min_age', '最大年龄' => 'max_age', '亲情号' => 'family_number', '靓号' => 'beautiful_number', '可否自选归属地' => 'ownership_change', '优惠有效期,单位月' => 'discount_month', '套餐月租' => 'month_rent', '通用流量' => 'general_traffic', '定向流量' => 'directional_traffic', '长期资费/短期资费' => 'long_short_tariff', '附带权益' => 'interest', '原月租' => 'original_month_rent', '封面图' => 'cover_img', '注意事项' => 'attention', '只发货地区' => 'noly_delivery_area', '亮点' => 'bright', '返佣类型 1:次月返 2:秒返' => 'rebate_type', '知识库' => 'knowledge_base', '是否选号' => 'select_status', '是否校验' => 'is_valid', '前置校验编码' => 'valid_req_code', '套餐标签' => 'tag_ids', '小店套餐标签' => 'shop_tag_ids', '定向流量' => 'data_orientation', '通用流量' => 'data_usual', '是否允许直播 0:不允许 1:允许' => 'is_live', '删除时间' => 'deleted_at', '运营商标识图' => 'ident_image', '下架时间' => 'delist_time', '产品类型 0号卡 1宽带' => 'product_type', '网速' => 'internet_speed', '供货商id' => 'supplier_id', '结佣条件' => 'commission_terms', ]; $getEnValue = $this->getEnValue(); $SpoutImport = new SpoutImport($header); $dataList = $SpoutImport->setRequest($request)->getExcelData(); return $dataList; } // 获取枚举值 public function getEnValue() { $data = [ 'open_status' => [ 0 => "待开卡", 1 => "开卡中", ] ]; return $data; } // 查询一条 public function find(Request $request) { $request->validate([ 'id' => 'required|integer', ]); $result = Packages::where(['id' => $request->id])->select(Packages::$selectFields)->first(); return success($result); } // 添加 public function insert(Request $request) { $request->validate([ 'name' => 'required', 'cover_img' => 'required', 'out_package_id' => 'required', 'yj' => 'required', ]); sys_log($request, '添加套餐', '号卡套餐'); $result = Packages::create($request->all()); if ($result) { // 生成套餐秘钥 Packages::where('id',$result->id)->update(['package_key'=>Hashids::encode($result->id)]); // 重置套餐提成 $package_member_level_royalty = json_decode($request->input('package_member_level_royalty','{}'), true); PackageMemberLevelRoyalty::resetRoyalty($result->id, $package_member_level_royalty); return success(); } else { return error(); } } // 修改 public function update(Request $request) { $request->validate([ 'id' => 'required|integer', ]); sys_log($request, '修改套餐', '号卡套餐'); $result = Packages::where(['id' => $request->id])->update($request->except(['package_member_level_royalty'])); if ($result) { // 重置套餐提成 $package_member_level_royalty = json_decode($request->input('package_member_level_royalty','{}'), true); PackageMemberLevelRoyalty::resetRoyalty($request->id, $package_member_level_royalty); return success(); } else { return error(); } } // 删除 public function delete(Request $request) { $request->validate([ 'ids' => 'required', ]); sys_log($request, '删除套餐', '号卡套餐'); $id_str = $request->ids; $arr = explode(",", $id_str); // 查询是否存在子数据 // $count = Shop::whereIn('tm_id',$arr)->count(); // if($count > 0){ // return ['code'=>0,'msg'=>"存在子数据,禁止删除"]; // } $result = Packages::whereIn('id', $arr)->delete(); if ($result) { PackageMemberLevelRoyalty::whereIn('package_id', $arr)->delete(); return success(); } else { return error(); } } }