scene('list')->validate(); $admin_company_id = request('admin_company_id', '0'); $company_id = request('access_token.company_id', '0'); $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否 // 查询条件 $map = []; $limit = request('limit', config('page_num', 10)); $status = request('status', ''); $start_time = request('start_time', ''); $end_time = request('end_time', ''); $product_name = request('product_name', ''); $platform = request('platform', ''); $store_scope = request('store_scope', ''); $company_scope = request('company_scope', ''); $category_id = request('category_id', ''); // 时间条件 if ($start_time) $map[] = ['insert_time', '>=', strtotime($start_time)]; if ($end_time) $map[] = ['insert_time', '<=', strtotime($end_time)]; // 其他条件 if (is_numeric($status)) $map[] = ['status', '=', $status]; if ($product_name) $map[] = ['product_name', 'like', "%$product_name%"]; if ($platform) $map[] = ['platform', 'like', "%$platform%"]; if ($store_scope) $map[] = ['store_scope', '=', $store_scope]; if ($company_scope) $map[] = ['company_scope', '=', $company_scope]; if ($category_id) $map[] = ['category_id', '=', $category_id]; // 查询数据 if ($is_admin != 1 && $company_id != 0) { $map[] = ['company_id', '=', $company_id]; } else { $map[] = ['company_id', '=', $admin_company_id]; } $result = $LowPriceGoodsModel->query() ->where($map) ->orderByDesc('id') ->paginate($limit)->toarray(); // 分配数据 if (!$result) return json_send(['code' => 'success', 'msg' => '获取成功', 'data' => []]); if (isset($result['data']) && count($result['data']) > 0) { foreach ($result['data'] as $key => $value) { $result['data'][$key]['platform'] = isset($value['platform']) ? explode(',', $value['platform']) : ''; $category_name = $value['category_id'] > 0 ? $ProductCategoryModel->where('id', $value['category_id'])->value('name') : ''; $result['data'][$key]['category_name'] = $category_name; //查询店铺名称 if ($value['store_scope'] == '1') { $result['data'][$key]['store_name'] = ['全部店铺']; } else { $result['data'][$key]['store_name'] = ''; } //查询公司名称 if ($value['company_scope'] == '1') { $result['data'][$key]['company_name'] = ['全部公司']; } else { $company_data = $LowPriceGoodsCompanyModel->where('lowprice_product_logid', $value['id']) ->join('washconfig_violation_store', 'washconfig_violation_store.id', '=', 'washconfig_lowprice_product_company.company_id') ->select(['washconfig_violation_store.id', 'washconfig_violation_store.company_name', 'washconfig_lowprice_product_company.company_id'])->get()->toArray(); $result['data'][$key]['company_name'] = !empty($company_data) ? array_column($company_data, 'company_name') : ''; } } } // 加载模板 return json_send(['code' => 'success', 'msg' => '获取成功', 'data' => $result]); } /** * 详情 * @author 唐远望 * @version 1.0 * @date 2025-12-02 */ public function detail(Request $request, LowPriceGoodsModel $LowPriceGoodsModel, LowPriceGoodsCompanyModel $LowPriceGoodsCompanyModel, ProductCategoryModel $ProductCategoryModel) { $request->scene('detail')->validate(); $admin_company_id = request('admin_company_id', '0'); $company_id = request('access_token.company_id', '0'); $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否 // 接收参数 $id = request('id', 0); $map = ['id' => $id]; if ($is_admin != 1 && $company_id != 0) { $map['company_id'] = $company_id; } else { $map['company_id'] = $admin_company_id; } $data = $LowPriceGoodsModel->where($map)->first(); if (!$data) return json_send(['code' => 'error', 'msg' => '记录不存在']); //查询店铺名称 if (trim($data['store_scope']) == '') { $data['store_name'] = ['全部店铺']; } else { $data['store_name'] = ''; } //查询公司名称 if ($data->company_scope == '1') { $data->company_name = ['全部公司']; $data->company_ids = ''; } else { $company_data = $LowPriceGoodsCompanyModel->where('lowprice_product_logid', $data->id) ->join('washconfig_violation_store', 'washconfig_violation_store.id', '=', 'washconfig_lowprice_product_company.company_id') ->select(['washconfig_violation_store.id', 'washconfig_violation_store.company_name', 'washconfig_lowprice_product_company.company_id'])->get()->toArray(); $data->company_name = !empty($company_data) ? array_column($company_data, 'company_name') : ''; $data->company_ids = !empty($company_data) ? array_column($company_data, 'company_id') : ''; } $data->platform = isset($data->platform) ? explode(',', $data->platform) : ''; $data->category_name = $data->category_id > 0 ? $ProductCategoryModel->where('id', $data->category_id)->value('name') : ''; // 加载模板 return json_send(['code' => 'success', 'msg' => '获取成功', 'data' => $data]); } /** * 添加 * @author 唐远望 * @version 1.0 * @date 2025-12-02 * */ public function add(Request $request, LowPriceGoodsModel $LowPriceGoodsModel, ViolationProductModel $ViolationProductModel) { $request->scene('add')->validate(); $admin_company_id = request('admin_company_id', '0'); $company_id = request('access_token.company_id', '0'); $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否 //获取禁止商品启动数量 $violation_product_count = $ViolationProductModel->where('status', 0)->count(); //获取低价挂网商品启用数量 $lowprice_product_count = $LowPriceGoodsModel->where('status', 0)->count(); //计算总数量 $product_totle = $violation_product_count + $lowprice_product_count; //判断是否超过限制 if ($product_totle >= 50) { return json_send(['code' => 'error', 'msg' => '启用数量超过限制,低价挂网和禁止商品不能超过50条']); } // 接收数据 $all_data = request()->all(); $store_scope = request('store_scope', ''); $all_data['store_scope'] = $store_scope; $company_scope = request('company_scope', ''); $all_data['company_scope'] = $company_scope; $category_id = request('category_id', '0'); $all_data['category_id'] = $category_id; $specify_responsible_person = request('specify_responsible_person', '0'); $all_data['specify_responsible_person'] = $specify_responsible_person; //查询是否存在 $map = ['product_name' => $all_data['product_name'], 'product_specs' => $all_data['product_specs'], 'platform' => $all_data['platform']]; if ($is_admin != 1 && $company_id != 0) { $map['company_id'] = $company_id; $all_data['company_id'] = $company_id; } else { $map['company_id'] = $admin_company_id; $all_data['company_id'] = $admin_company_id; } $data = $LowPriceGoodsModel->where($map)->first(); if ($data) return json_send(['code' => 'error', 'msg' => '记录已存在']); // 写入数据表 $result = $LowPriceGoodsModel->addLowProduct($all_data); // 如果操作失败 if (!$result) return json_send(['code' => 'error', 'msg' => '新增失败']); // 记录行为 $admin_id = request('access_token.uid', 0); //用户ID $is_admin = request('access_token.is_admin'); //是否管理员操作 0=是1=否 $table_name = $LowPriceGoodsModel->getTable(); $notes_type = 1; //操作类型,1添加,2修改,3=删除 $this->addAdminHistory('清洗配置-低价商品管理', $company_id, $admin_id, $is_admin, $table_name, $notes_type, [], $all_data, '新增了低价商品' . $all_data['product_name'] . '信息'); // 告知结果 return json_send(['code' => 'success', 'msg' => '新增成功']); } /** * 修改 * @author 唐远望 * @version 1.0 * @date 2025-12-02 * */ public function edit(Request $request, LowPriceGoodsModel $LowPriceGoodsModel) { $request->scene('edit')->validate(); $admin_company_id = request('admin_company_id', '0'); $company_id = request('access_token.company_id', '0'); $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否 // 接收参数 $id = request('id', 0); // 接收数据 $all_data = request()->all(); $store_scope = request('store_scope', ''); $all_data['store_scope'] = $store_scope; $company_scope = request('company_scope', ''); $all_data['company_scope'] = $company_scope; $category_id = request('category_id', '0'); $all_data['category_id'] = $category_id; $specify_responsible_person = request('specify_responsible_person', '0'); $all_data['specify_responsible_person'] = $specify_responsible_person; //查询是否存在 $map = ['product_name' => $all_data['product_name'], 'product_specs' => $all_data['product_specs'], 'platform' => $all_data['platform']]; if ($is_admin != 1 && $company_id != 0) { $map['company_id'] = $company_id; } else { $map['company_id'] = $admin_company_id; } $data = $LowPriceGoodsModel->where($map)->where('id', '!=', $id)->first(); if ($data) return json_send(['code' => 'error', 'msg' => '记录已存在']); // 更新数据表 $where = ['id' => $id]; if ($is_admin != 1 && $company_id != 0) { $where['company_id'] = $company_id; $all_data['company_id'] = $company_id; } else { $where['company_id'] = $admin_company_id; $all_data['company_id'] = $admin_company_id; } $LowProduct = $LowPriceGoodsModel->where($where)->first(); if (!$LowProduct) return json_send(['code' => 'error', 'msg' => '记录不存在']); $oldData = $LowProduct->toarray(); $result = $LowPriceGoodsModel->editLowProduct_content($LowProduct, $all_data); // 如果操作失败 if (!$result) return json_send(['code' => 'error', 'msg' => '修改失败']); // 记录行为 $admin_id = request('access_token.uid', 0); //用户ID $table_name = $LowPriceGoodsModel->getTable(); $notes_type = 2; //操作类型,1添加,2修改,3=删除 $this->addAdminHistory('清洗配置-低价商品管理', $company_id, $admin_id, $is_admin, $table_name, $notes_type, $oldData, $all_data, '修改了低价商品' . $oldData['product_name'] . '信息'); // 告知结果 return json_send(['code' => 'success', 'msg' => '修改成功']); } /** * 修改状态 * @author 唐远望 * @version 1.0 * @date 2025-12-02 * */ public function set_status(Request $request, LowPriceGoodsModel $LowPriceGoodsModel, ViolationProductModel $ViolationProductModel) { // 验证参数 $request->scene('set_status')->validate(); $admin_company_id = request('admin_company_id', '0'); $company_id = request('access_token.company_id', '0'); $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否 // 接收数据 $id = request('id', 0); $status = request('status', 0); if ($status == 0) { //获取禁止商品启动数量 $status_where = ['status' => 0]; if ($is_admin != 1 && $company_id != 0) { $status_where['company_id'] = $company_id; } else { $status_where['company_id'] = $admin_company_id; } $violation_product_count = $ViolationProductModel->where($status_where)->count(); //获取低价挂网商品启用数量 $lowprice_product_count = $LowPriceGoodsModel->where($status_where)->count(); //计算总数量 $product_totle = $violation_product_count + $lowprice_product_count; //判断是否超过限制 if ($product_totle >= 50) { return json_send(['code' => 'error', 'msg' => '启用数量超过限制,低价挂网和禁止商品不能超过50条']); } } // 查询用户 $where = ['id' => $id]; if ($is_admin != 1 && $company_id != 0) { $where['company_id'] = $company_id; } else { $where['company_id'] = $admin_company_id; } $LowProduct = $LowPriceGoodsModel->where($where)->first(); if (!$LowProduct) return json_send(['code' => 'error', 'msg' => '记录不存在']); // 执行修改 $result = $LowPriceGoodsModel->changeStatus($LowProduct, $status); // 提示新增失败 if (!$result) return json_send(['code' => 'error', 'msg' => '设置失败']); // 记录行为 $admin_id = request('access_token.uid', 0); //用户ID $table_name = $LowPriceGoodsModel->getTable(); $notes_type = 2; //操作类型,1添加,2修改,3=删除 $this->addAdminHistory('清洗配置-低价商品管理', $company_id, $admin_id, $is_admin, $table_name, $notes_type, [], ['status' => $status], '修改了低价商品' . $LowProduct->product_name . '状态'); // 告知结果 return json_send(['code' => 'success', 'msg' => '设置成功']); } /** * 删除 * @author 唐远望 * @version 1.0 * @date 2025-12-02 * */ public function delete(Request $request, LowPriceGoodsModel $LowPriceGoodsModel) { // 验证参数 $request->scene('delete')->validate(); $admin_company_id = request('admin_company_id', '0'); $company_id = request('access_token.company_id', '0'); $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否 // 接收数据 $id = request('id', 0); // 查询用户 $where = ['id' => $id]; if ($is_admin != 1 && $company_id != 0) { $where['company_id'] = $company_id; } else { $where['company_id'] = $admin_company_id; } // 执行删除 $LowProduct = $LowPriceGoodsModel->where($where)->first(); if (!$LowProduct) { return json_send(['code' => 'error', 'msg' => '记录不存在']); } DB::beginTransaction(); try { $LowPriceGoodsCompanyModel = new LowPriceGoodsCompanyModel(); $company_id_log = $LowPriceGoodsCompanyModel->where('lowprice_product_logid', $LowProduct->id)->get(); if (!empty($company_id_log)) { $LowPriceGoodsCompanyModel->where('lowprice_product_logid', $LowProduct->id)->delete(); } $LowProduct->delete(); // 记录行为 $admin_id = request('access_token.uid', 0); //用户ID $is_admin = request('access_token.is_admin'); //是否管理员操作 0=是1=否 $table_name = $LowPriceGoodsModel->getTable(); $notes_type = 3; //操作类型,1添加,2修改,3=删除 $this->addAdminHistory('清洗配置-低价商品管理', $company_id, $admin_id, $is_admin, $table_name, $notes_type, $LowProduct->toarray(), [], '删除了低价商品' . $LowProduct->product_name . '信息'); DB::commit(); // 告知结果 return json_send(['code' => 'success', 'msg' => '删除成功']); // 成功处理... } catch (\Exception $e) { DB::rollBack(); // 错误处理... return json_send(['code' => 'error', 'msg' => '删除失败']); } } /** * 下载导入模板 * @author 唐远望 * @version 1.0 * @date 2026-02-28 * */ public function download_template() { // 创建一个新的 Spreadsheet 对象 $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); //合并单元格 $sheet->mergeCells('A1:R1'); $sheet->setCellValue('A1', '低价挂网商品清洗导入模板'); // 设置合并后的单元格内容 // 获取合并后的单元格样式对象 $style = $sheet->getStyle('A1'); // 设置水平居中和垂直居中 $style->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER)->setVertical(Alignment::VERTICAL_CENTER); // 然后设置行高以适应两行文本 $sheet->getRowDimension(1)->setRowHeight(40); // 设置行高,单位是磅(point) // 设置表头 $sheet->setCellValue('A2', '商品名称*'); $sheet->setCellValue('B2', '商品分类名称'); $sheet->setCellValue('C2', '商品规格*'); $sheet->setCellValue('D2', '监控价格*'); $sheet->setCellValue('E2', '平台名称(多个逗号隔开,为空全部)*'); $sheet->setCellValue('F2', '指定公司(多个逗号隔开,为空全部)'); $sheet->setCellValue('G2', '指派责任人(是/否)'); // 生成 Excel 文件 $writer = new Xlsx($spreadsheet); // 直接输出到浏览器(下载) $filename = '低价挂网商品清洗导入模板.xlsx'; header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="' . $filename . '"'); header('Cache-Control: max-age=0'); $writer->save('php://output'); exit; } /** * 导入Excel数据 * @author 唐远望 * @version 1.0 * @date 2026-02-28 * */ public function import_data(Request $request, LowPriceGoodsModel $LowPriceGoodsModel, ViolationStoreModel $ViolationStoreModel, ProductCategoryModel $ProductCategoryModel) { $request->scene('import_data')->validate(); $admin_company_id = request('admin_company_id', '0'); $company_id = request('access_token.company_id', '0'); $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否 $file = $request->file('file'); // 加载Excel文件 $spreadsheet = IOFactory::load($file->getPathname()); $sheet = $spreadsheet->getActiveSheet(); // 获取所有数据 $data = $sheet->toArray(); if (empty($data) || count($data) < 2) return json_send(['code' => 'error', 'msg' => '导入数据为空']); $platform_data = $LowPriceGoodsModel->platform_data(); DB::beginTransaction(); try { foreach ($data as $key => $item) { if ($key < 2) continue; //强制必传参数校验 $res_data = $this->import_data_check($key, $item); if ($res_data) return json_send($res_data); $category_id = '0'; if (isset($item[1])) { $category_data = $ProductCategoryModel->where('name', $item[1])->first(); $category_id = $category_data ? $category_data->id : '0'; } $platform_text = isset($item[4]) ? explode(',', $item[4]) : '0'; // 平台 $platform_id_text = ''; if (!empty($platform_text)) { foreach ($platform_text as $key => $value) { if (isset($platform_data[$value])) { $platform_id_text = $platform_data[$value] . ',' . $platform_id_text; } } } $company_scope = isset($item[5]) ? explode(',', $item[5]) : '0'; // 公司范围 $company_id_text = ''; if (!empty($company_scope)) { //查询所有公司ID逗号隔开 $company_id_text = $ViolationStoreModel->whereIn('company_name', $company_scope)->pluck('id')->implode(','); } // 权限判断 if ($is_admin != 1 && $company_id != 0) { $insert_product_data['company_id'] = $company_id; } else { $insert_product_data['company_id'] = $admin_company_id; } $insert_product_data['product_name'] = $item[0]; // 商品名称 $insert_product_data['category_id'] =$category_id; // 商品分类 $insert_product_data['product_specs'] = $item[2]; // 商品规格 $insert_product_data['suggested_price'] = $item[3]; // 指导价格 $insert_product_data['platform'] = $platform_id_text != '' ? substr($platform_id_text, 0, -1) : '0'; // 平台:0=全部,1=淘宝,2=京东,3=拼多多,4=美团,5=药师帮,6=1药城,7=药久久 $insert_product_data['store_scope'] = ''; // 店铺范围(为空时全部,指定时为店铺ID多个逗号隔开) $insert_product_data['company_scope'] = $company_id_text; // 公司范围(为空时全部,指定时为公司ID多个逗号隔开) $insert_product_data['specify_responsible_person'] = trim($item[6]) == '是' ? 0 : 1; // 指派责任人 0=开启 1=关闭 //插入数据 $LowPriceGoodsModel->addLowProduct($insert_product_data); } DB::commit(); return json_send(['code' => 'success', 'msg' => '导入成功']); // 成功处理... } catch (\Exception $e) { DB::rollBack(); // 错误处理... return json_send(['code' => 'error', 'msg' => '导入失败', 'data' => $e->getMessage()]); } } /** * 导入Excel数据必传参数校验 * @author 唐远望 * @version 1.0 * @date 2025-12-31 * */ private function import_data_check($key, $item) { $key = $key + 1; if (!$item[0]) { return ['code' => 'error', 'msg' => "第{$key}行商品名称不能为空", 'data' => $item]; } if (!$item[2]) { return ['code' => 'error', 'msg' => "第{$key}行商品规格不能为空", 'data' => $item]; } if (!$item[3]) { return ['code' => 'error', 'msg' => "第{$key}行监控价格不能为空", 'data' => $item]; } } }