testExport(); $mqtt = new MqttClient('47.111.77.194', 1883, 'web_publisher'); $mqtt->connect((new ConnectionSettings)->setUsername('yonglidev1')->setPassword('tZjUw0kQ')); $mqtt->publish('/wy/119/RealtimeData/DT5/yonglidev1', json_encode(['cmd' => 'reset']), 0); $mqtt->disconnect(); return response()->json(['status' => '指令已下发']); } public function itemSalary(){ // 1. 定义动态项目 $projects = ['RD01', 'RD02', 'RD03', 'RD04', 'RD03', 'RD04' , 'RD03', 'RD04', 'RD03', 'RD04', 'RD03', 'RD04', 'RD03']; // 2. 构造导出数据 (从第5行开始的内容) $exportData = [ // 第一行数据:2024年1月 [ '2024年1月', // 年月 (A列) '20', '5000', // RD01 天数, 工资 '15', '4000', // RD02 '10', '3000', // RD03 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '13000' // 合计 (最后一列) ], // 第二行数据:2024年2月 [ '2024年2月', '20', '5000', // RD01 天数, 工资 '15', '4000', // RD02 '10', '3000', // RD03 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '11300' ], [ '2024年3月', '20', '5000', // RD01 天数, 工资 '15', '4000', // RD02 '10', '3000', // RD03 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '11300' ], [ '2024年4月', '20', '5000', // RD01 天数, 工资 '15', '4000', // RD02 '10', '3000', // RD03 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '5', '1000', // RD04 '11300' ], [ '合计', ], ]; if(empty($file_name)) $file_name = date("Y-m-d") . "_". rand(1000,9999); $filename = $file_name . '.' . 'xlsx'; $bool = Excel::store(new ItemSalarySheetExport($projects, $exportData),"/public/export/{$filename}", null, 'Xlsx', []); return $filename; } public function manActivityTimeCard(){ $allProjectsData = [ 'RD01无人机研发' => [ ['1月', '研究人员', '张三', 192, 192, '100%', 8000, 1000, 500, 8000, 1000, 500, 8000, 1000, 500, 0, 0, 0], ['小计:', '', '', 192, 192, '100%', 8000, 1000, 500, 8000, 1000, 500, 8000, 1000, 500, 0, 0, 0], ['2月', '研究人员', '张三', 192, 192, '100%', 8000, 1000, 500, 8000, 1000, 500, 8000, 1000, 500, 0, 0, 0], ['小计:', '', '', 192, 192, '100%', 8000, 1000, 500, 8000, 1000, 500, 8000, 1000, 500, 0, 0, 0], ['合计', '', '', 192, 192, '', 8000, 1000, 500, 8000, 1000, 500, 8000, 1000, 500, 0, 0, 0], ], 'RD02自动化系统' => [ ['1月', '技术人员', '李四', 160, 160, '100%', 7000, 800, 400, 7000, 800, 400, 7000, 800, 400, 0, 0, 0], ['小计:', '', '', 160, 160, '100%', 7000, 800, 400, 7000, 800, 400, 7000, 800, 400, 0, 0, 0], ['2月', '技术人员', '李四', 160, 160, '100%', 7000, 800, 400, 7000, 800, 400, 7000, 800, 400, 0, 0, 0], ['小计:', '', '', 160, 160, '100%', 7000, 800, 400, 7000, 800, 400, 7000, 800, 400, 0, 0, 0], ['合计', '', '', 160, 160, '', 7000, 800, 400, 7000, 800, 400, 7000, 800, 400, 0, 0, 0], ] ]; if(empty($file_name)) $file_name = date("Y-m-d") . "_". rand(1000,9999); $filename = $file_name . '.' . 'xlsx'; $bool = Excel::store(new ManActivityTimeCardMultipleSheetExport($allProjectsData), "/public/export/{$filename}", null, 'Xlsx', []); return $filename; } public function itemSalaryFT(){ $monthsData = [ '2024年4月' => [ 'projects' => ['RD01', 'RD02', 'RD03',"aa"], // 4月有3个项目 'data' => [ [1, '蔡1', 3165.00, 22, '', 8, 7, 7, 22, 0.00, 1150.91, 1007.05, 1007.04, 3165.00], [2, '蔡2', 4714.50, 22, '', 2, 8, 12, 22, 0.00, 428.59, 1714.36, 2571.55, 4714.50], ['合计', '', 30438.50, 110, 18, 14, 32, 46, 110, 6473.95, 2444.05, 7804.91, 13715.59, 30438.50] ] ], '2024年5月' => [ 'projects' => ['RD01', 'RD02', 'RD03',"cs"], // 4月有3个项目 'data' => [ [1, '蔡1', 3165.00, 22, '', 8, 7, 7, 22, 0.00, 1150.91, 1007.05, 1007.04, 3165.00], [2, '蔡2', 4714.50, 22, '', 2, 8, 12, 22, 0.00, 428.59, 1714.36, 2571.55, 4714.50], ['合计', '', 30438.50, 110, 18, 14, 32, 46, 110, 6473.95, 2444.05, 7804.91, 13715.59, 30438.50] ] ], '2024年6月' => [ 'projects' => ['RD01', 'RD02', 'RD03'], // 4月有3个项目 'data' => [ [1, '蔡1', 3165.00, 22, '', 8, 7, 7, 22, 0.00, 1150.91, 1007.05], [2, '蔡2', 4714.50, 22, '', 2, 8, 12, 22, 0.00, 428.59, 1714.36], ['合计', '', 30438.50, 110, 18, 14, 32, 46, 110, 6473.95, 2444.05, 7804.91] ] ] ]; if(empty($file_name)) $file_name = date("Y-m-d") . "_". rand(1000,9999); $filename = $file_name . '.' . 'xlsx'; $bool = Excel::store(new ItemSalaryFTMultipleSheetExport($monthsData), "/public/export/{$filename}", null, 'Xlsx', []); return $filename; } public function manMonthlyWorkHour(){ $monthsData = [ '2024年4月' => [ 'days' => 30, 'data' => [ // 项目, 姓名, 1日, 2日, 3日, 4日... (空字符串代表没工时) ['RD02', '蔡1', 1, '', '', 1, '', '', 1, '', '', 1, '', '', 1, '', '', 1, '', '', 1, '', '', 1], ['RD03', '蔡2', '', 1, '', '', 1, '', '', 1, '', '', 1, '', '', 1, '', '', 1, '', '', 1, '', ''], ['RD05', '蔡3', '', '', 1, '', '', 1, '', '', 1, '', '', 1, '', '', 1, '', '', 1, '', '', 1, ''], ] ] ]; if(empty($file_name)) $file_name = date("Y-m-d") . "_". rand(1000,9999); $filename = $file_name . '.' . 'xlsx'; $bool = Excel::store(new ManMonthlyWorkHourMultipleSheetExport($monthsData), "/public/export/{$filename}", null, 'Xlsx', []); return $filename; } public function deviceZj(){ $monthsData = [ // 第一个 Sheet: 2025年-RD01项目 '2025-RD01' => [ 'project_name' => '智能AI语音助手开发项目', 'months' => $this->generateTwelveMonthsData() // 生成1-12月模拟数据 ], // 第二个 Sheet: 2025年-RD02项目 '2025-RD02' => [ 'project_name' => '云端大数据分析平台', 'months' => $this->generateTwelveMonthsData() ], ]; if(empty($file_name)) $file_name = date("Y-m-d") . "_". rand(1000,9999); $filename = $file_name . '.' . 'xlsx'; $bool = Excel::store(new ProjectDepreciationMultipleSheetExport($monthsData), "/public/export/{$filename}", null, 'Xlsx', []); return $filename; } private function generateTwelveMonthsData() { $yearData = []; for ($m = 1; $m <= 12; $m++) { $yearData[$m] = [ [ 'name' => '青爻APC-110自动扫码枪', 'total_hours' => 160, 'project_hours' => 80, 'ratio' => 50, 'original_value' => 213675.21, 'depreciation' => 1691.60, 'confirmed_depreciation' => 338.32, 'adjust_amount' => -338.32, ], [ 'name' => '自动美式三插端子系统', 'total_hours' => 160, 'project_hours' => 40, 'ratio' => 25, 'original_value' => 30769.23, 'depreciation' => 243.59, 'confirmed_depreciation' => 48.72, 'adjust_amount' => -48.72, ] ]; } return $yearData; } public function exportSummary() { // 定义你的动态科目(前 N 项) // 注意:这里的顺序决定了 Excel 中 F 列往后的顺序 $dynamicHeaders = ['人员人工费用', '直接投入费用', '折旧费用', '无形资产摊销', '新产品设计费等']; $items = []; for ($i = 1; $i <= 10; $i++) { $type = $i <= 5 ? '资本化支出' : '费用化支出'; $items[] = [ 'no' => 'RD0' . $i, 'name' => '研发项目名称测试_' . $i, 'status' => rand(2, 3), 'type' => $type, // 【重要】将明细金额放入 values 数组,顺序必须对应 $dynamicHeaders 'values' => [ 1 * $i, // 人员人工 2 * $i, // 直接投入 3 * $i, // 折旧 4 * $i, // 无形资产 5 * $i // 新产品 ], 'val7_1' => 6, // 其他相关费用合计 (7.1) 'val8_1' => 7, // 委托境内 (8.1) 'val8_3' => 8, // 委托境外 (8.3) -> 原代码写 8.4 是不对的,公式会自动算 8.4 ]; } $monthsData = [ '2026' => [ 'tax_id' => '91330101MA28XXXXXX', 'company_name' => '杭州青艾科技有限公司', 'items' => $items, 'dynamic_headers' => $dynamicHeaders // 将配置也放入 payload 方便后面读取 ] ]; $file_name = "研发支出汇总表_" . date("YmdHis"); $filename = $file_name . '.xlsx'; // 传入 $dynamicHeaders 到构造函数 Excel::store( new ResearchExpenseSummaryMultipleSheetExport($monthsData), "public/export/{$filename}" ); return $filename; } public function exportResearchExpense() { $sheetsData = [ '2025-RD01' => [ 'project' => ['code' => '2025RD01', 'name' => '自动化设备研发'], // 这里定义除了 人员人工和折旧 之外的其他科目 'dynamic_headers' => ['直接投入费用', '无形资产摊销', '其他相关费用'], 'data' => [ // 每一行数据的长度必须与:基础(6列) + 固定明细(2列) + 动态明细(N列) + 委托(2列) 的总长度一致 ['2025/01/31', '记账', '33', '原材料领用', 1000, 1000, 0, 0, 1000, 0, 0, 0, 0], ['合计', '', '', '', 1000, 1000, 0, 0, 1000, 0, 0, 0, 0] ] ], '2025-RD02' => [ 'project' => ['code' => '2025RD02', 'name' => '简易项目'], 'dynamic_headers' => ['其他相关费用'], // 这个Sheet只有1个动态列 'data' => [ ['2025/02/15', '记账', '12', '技术服务费', 500, 500, 0, 0, 500, 0, 0], ['合计', '', '', '', 500, 500, 0, 0, 500, 0, 0] ] ] ]; $file_name = date("YmdHis"); $filename = $file_name . '.xlsx'; Excel::store( new ResearchExpenseMultipleSheetExport($sheetsData), "public/export/{$filename}" ); return $filename; } //最长的报表 public function rdB(){ // 示例数据准备 (通常从数据库查询得出) $year = 2026; $taxInfo = [ 'tax_id' => '91330101MA28XXXXXX', 'tax_name' => '杭州青艾科技有限公司' ]; $projects = [ [ 'project_no' => 'RD01', 'details' => [ [ // A-J (10个) 'p_name'=>'AI项目', 'id'=>1, 'rd_name'=>'智能识别', 'rd_code'=>'RD01', 'form'=>'自主研发', 'opt'=>'费用化', 'status'=>'已完成', 'rel'=>'否', 'os'=>'否', 'res'=>'软著', 'res_no' => '2026SR123456', // K-M (3个) 'v1_1'=>8000, 'v1_2'=>1200, 'v1_3'=>0, // N-U (8个) 'v2_1'=>1500, 'v2_2'=>100, 'v2_3'=>50, 'v2_4'=>0, 'v2_5'=>0, 'v2_6'=>200, 'v2_7'=>0, 'v2_8'=>0, // V-W (2个) 'v3_1'=>400, 'v3_2'=>0, // X-Z (3个) 'v4_1'=>300, 'v4_2'=>0, 'v4_3'=>0, // AA-AD (4个) 'v5_1'=>500, 'v5_2'=>0, 'v5_3'=>0, 'v5_4'=>0, // AE-AI (5个) 'v6_1'=>100, 'v6_2'=>0, 'v6_3'=>200, 'v6_4'=>0, 'v6_5'=>150, // AJ-AN (汇总) 'v7'=>0, 'v7_1'=>0, 'v8'=>10200, // 栏次 8:前五项合计 'v8_1'=>1133.33, // 栏次 8.1:限额 'v9' => 11333.33 // 九、总额 ] ] ] ]; $file_name = "研发支出汇总表_" . date("YmdHis"); $filename = $file_name . '.xlsx'; // 传入 $dynamicHeaders 到构造函数 Excel::store( new ResearchProjectDetailMultiExport($year, $projects, $taxInfo), "public/export/{$filename}" ); return $filename; } //企业研究开发活动汇总表 public function exportRdSummary() { // 模拟从数据库获取的研发活动列表数据 $rdData = [ [ 'activity_name' => '智能AI图像识别算法研发项目', 'time_range' => '2025.01-2025.12', 'budget' => 500000.00, 'actual_spending' => 485000.50, 'tech_area' => '人工智能', 'remark' => '核心算法已申请软著', ], [ 'activity_name' => '高并发云原生架构优化', 'time_range' => '2025.03-2025.10', 'budget' => 300000.00, 'actual_spending' => 310000.00, 'tech_area' => '云计算', 'remark' => '超出预算部分已通过审批', ], ]; $file_name = "企业研发活动汇总表_" . date("YmdHis"); $filename = $file_name . '.xlsx'; // 触发导出 Excel::store( new CompanyRdActivityExport($rdData), "public/export/{$filename}" ); return $filename; } // 企业研究开发科技人员情况表 public function exportTechnicalStaff() { // 模拟测试数据,对应图片中的示例内容 $testData = [ [ 'name' => '张三', 'id_card' => '33010119900101XXXX', 'education' => '本科', 'major' => '计算机科学', 'title_level' => '高级工程师', 'department_job' => "技术部/\n系统集成工程师", 'employment_type' => '在职', ], [ 'name' => '李四', 'id_card' => '33010119920202XXXX', 'education' => '硕士', 'major' => '机械工程', 'title_level' => "工程师/\n注册电气工程师", 'department_job' => "生产部/\n模具制作师", 'employment_type' => '在职', ], [ 'name' => '王五', 'id_card' => '33010119950505XXXX', 'education' => '大专', 'major' => '自动化', 'title_level' => '助理工程师', 'department_job' => "生产部/\n产品试制研发辅助员", 'employment_type' => '临聘', ], [ 'name' => '赵六', 'id_card' => '33010119800808XXXX', 'education' => '博士', 'major' => '电子工程', 'title_level' => '教授/电工证', 'department_job' => '研发部/技术顾问', 'employment_type' => '兼职', ] ]; $filename = '企业研究开发科技人员情况表_' . date('Ymd') . '.xlsx'; Excel::store(new TechnicalStaffExport($testData), "public/export/{$filename}"); return $filename; } //项目研发活动人员情况表 public function testExport() { // 模拟数据:对应图片中的角色定义示例 $data = [ [ 'name' => '张技术', 'education' => '本科', 'major' => '机械设计', 'title' => '高级工程师', 'role_desc' => '项目负责人', 'role_name' => '总指挥', 'dept' => '研发部', 'duty' => '负责项目整体进度把控与技术架构设计', ], [ 'name' => '李研发', 'education' => '硕士', 'major' => '自动化', 'title' => '工程师', 'role_desc' => '技术负责人', 'role_name' => '核心研发', 'dept' => '技术部', 'duty' => '负责核心算法编写与系统集成', ], [ 'name' => '王测试', 'education' => '大专', 'major' => '电子信息', 'title' => '助工', 'role_desc' => '测试工程师', 'role_name' => '质量检测', 'dept' => '质检部', 'duty' => '负责产品试制阶段的可靠性测试', ] ]; $filename = '项目研发活动人员情况表' . date('Ymd') . '.xlsx'; Excel::store(new ProjectStaffExport($data), "public/export/{$filename}"); return $filename; } }