SchoolPhysicalExamination/application/admin/controller/Demo.php

412 lines
18 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\admin\controller;
use think\Db;
use think\Log;
use PHPExcel;
use PHPExcel_Cell_DataType;
use PHPExcel_IOFactory;
use PHPExcel_Style_NumberFormat;
class Demo extends Base{
public function get_class_xuesheng(){
// dump('0932');
// die;
// 图片文件所在的目录
// $imageDir = ROOT_PATH . 'public' . DS . 'tsf' . DS . 'demo' . DS . 'class1'; // 假设图片在public/uploads/images目录下
// $imageDir = ROOT_PATH . 'public' . DS . 'tsf' . DS . 'demo' . DS . 'class2'; // 假设图片在public/uploads/images目录下
$imageDir = ROOT_PATH . 'public' . DS . 'tsf' . DS . 'demo' . DS . 'class3'; // 假设图片在public/uploads/images目录下
vendor('PHPExcel.PHPExcel');
// 创建PHPExcel对象
$objPHPExcel = new PHPExcel();
// 设置活动的工作表
$sheet = $objPHPExcel->getActiveSheet();
// 设置表头
$sheet->setCellValue('A1', '原文件名');
$sheet->setCellValue('B1', '新序号');
$sheet->setCellValue('C1', '电话');
$sheet->setCellValue('D1', '姓名');
// 序号起始值
// $startNumber = 24101;
// $startNumber = 24201;
$startNumber = 24301;
$row = 2; // 从第二行开始写入数据
$mingzi_str = '';
// 遍历目录中的图片文件
if ($handle = opendir($imageDir)) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != ".." && preg_match('/\.(jpg|jpeg|png|gif)$/i', $entry)) {
// dump($entry);
$mingzi_str = $this->str_jiequ($entry);
// dump($mingzi_str);
// dump($mingzi_str);
// 写入原文件名
$sheet->setCellValue('A' . $row, $entry);
// 生成新序号(注意:这里的序号示例是连续的,如果需要跳号,请调整逻辑)
$newNumber = $startNumber + ($row - 2);
$sheet->setCellValue('B' . $row, $newNumber);
if($mingzi_str != false){
$sheet->setCellValue('C' . $row, $mingzi_str[0]);
$sheet->setCellValue('D' . $row, $mingzi_str[1]);
}
// 实际文件路径和新文件名
$oldFilePath = $imageDir . DS . $entry;
$newFilePath = $imageDir . DS . $newNumber . '.' . pathinfo($entry, PATHINFO_EXTENSION);
// 重命名图片文件
if (rename($oldFilePath, $newFilePath)) {
// 重命名成功
} else {
// 重命名失败,记录错误或抛出异常
throw new \Exception("Failed to rename file: " . $entry);
}
$row++;
}
}
closedir($handle);
}
// die;
// 写入Excel文件到服务器
$fileName = 'image_rename_log_' . date('YmdHis') . '.xlsx';
$filePath = $imageDir . DS . $fileName;
// 使用PHPExcel_IOFactory保存Excel文件
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save($filePath);
dump('完事');
}
// 截取字符串
public function str_jiequ($str){
// $str = "余航13838799761.jpg";
$banPos = strpos($str, '班');
$banPos = $banPos + 3;
// $str = substr($str, $banPos+1);
$str = substr($str, $banPos);
// dump($banPos);
// dump($str);
// 查找“.jpg”的位置
$dotPos = strpos($str, '.jpg');
if ($dotPos !== false) {
// 去除“.jpg”扩展名
$strWithoutExt = substr($str, 0, $dotPos);
// 假设电话号码是11位数字
$phoneLength = 11;
// 检查电话号码长度是否合法
if (strlen($strWithoutExt) >= $phoneLength && ctype_digit(substr($strWithoutExt, -$phoneLength))) {
// 提取电话号码
$phone = substr($strWithoutExt, -$phoneLength);
// 提取中文名字(即去掉电话号码和“.jpg”之前的部分
$name = substr($strWithoutExt, 0, strlen($strWithoutExt) - $phoneLength);
// echo "名字: $name\n";
// echo "电话号码: $phone\n";
return [$name,$phone];
} else {
return false;
// echo "字符串格式不正确,无法提取名字和电话号码。\n";
}
} else {
return false;
// echo "字符串中未找到“.jpg”扩展名。\n";
}
}
################################################################业务接口################################################################
################################################################业务接口################################################################
################################################获取execl中数组
public function submit_rule(){
// $file = request()->file('file');
$file = request()->file('execl');
$name = request()->param();
$address_data = explode(',',$name['address']);
// dump($name);
// die;
if($name['type'] == 'create'){
$rule_is_true = Db::table('admin_estimate')->where(['province'=>$address_data[0],'city'=>$address_data[1]==''?'无':$address_data[1]])->count();
if($rule_is_true > 0){
return $this->msg(10007);
}
}
if($file){
// 移动到框架应用根目录/public/uploads/ 目录下
$file_name_new = date('YmdHis').'_ceshi.xlsx';
$info = $file->validate(['size' => 2048000, 'ext' => 'xlsx'])->move(ROOT_PATH . 'public' . DS . 'estimate',$file_name_new);
if($info){
$original_data = $this->excelToArray(ROOT_PATH . 'public' . DS . 'estimate' . DS . $info->getSaveName());
$handle_data = $this->transformation_data($original_data,$address_data,$name['type']);
// die;
// dump($handle_data);
// die;
if($name['type'] == 'create'){
$result = Db::table('admin_estimate')->insert($handle_data);
}else{
$result = Db::table('admin_estimate')->where(['id'=>$name['update_id']])->update($handle_data);
}
// return $this->msg(10002);
// 成功上传后 获取上传信息
// 输出 jpg
// echo $info->getExtension();
// // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
// echo $info->getSaveName();
// // 输出 42a79759f284b767dfcb2a0197904287.jpg
// echo $info->getFilename();
if($result){
return $this->msg([]);
}else{
return $this->msg(10002);
}
}else{
// 上传失败获取错误信息
return $this->msg(10001, $file->getError());
// echo $file->getError();
}
}else{
return $this->msg(10001, '文件缺失');
}
}
// 读取execl文件数据
private function excelToArray($filename){
vendor('PHPExcel.PHPExcel');
$objPHPExcelReader = \PHPExcel_IOFactory::load($filename);
$sheet = $objPHPExcelReader->getSheet(0); // 读取第一个工作表(编号从 0 开始)
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = \PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn()); // 取得总列数
// 一次读取一列
$res_arr = array();
for ($row = 2; $row <= $highestRow; $row++) {
$row_arr = array();
for ($column = 0; $column < $highestColumn; $column++) {
//判断单元格是否包含公式
if ($sheet->getCellByColumnAndRow($column, $row)->isFormula()) {
$val = $sheet->getCellByColumnAndRow($column, $row)->getFormattedValue();
} else {
$val = $sheet->getCellByColumnAndRow($column, $row)->getValue();
}
$row_arr[] = $val;
}
if (count($row_arr) > 0) {
$res_arr[] = $row_arr;
}
}
return $res_arr;
}
//处理估分数据格式
private function transformation_data($data,$daaress,$type='create'){
// dump($daaress);
$temporary_daaress = $daaress;
// dump($temporary_daaress);
// die;
if($type == 'create'){
$return_result = [
'province'=>$temporary_daaress[0] == ''?'无':$temporary_daaress[0],
'city'=>$temporary_daaress[1] == ''?'无':$temporary_daaress[1],
'area'=>'无',
'create_time'=>date('Y-m-d H:i:s'),
'update_time'=>date('Y-m-d H:i:s'),
'content'=>[]
];
}else{
$return_result = [
'update_time'=>date('Y-m-d H:i:s'),
'content'=>[]
];
}
$temporary_array = [];
$gender = [];
$rule_c = [];
foreach ($data as $key => $value) {
$gender = explode(',',$value[5]);
if($value[6] == '无' || $value[7] == '无' || $value[8] == '无'){
$rule_c = [];
}else{
$rule_c = [[$value[6],$value[7],$value[8]]];
}
foreach ($gender as $gk => $gv) {
if(!array_key_exists($gv,$temporary_array)){
// 如果性别不存在
// $temporary_array[$gv][$value[0]][$value[1]]['score'] = $value[2];
$temporary_array[$gv][$value[0]][$value[1]]['choose_num'] = $value[9];
$temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]] = [
'unit_data'=>$value[4],
'proportion'=>$value[10],
'value'=>$value[11],
'type'=>$value[12],
'describe'=>$value[13],
'score'=>$value[2],
];
$temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = $rule_c;
// if($value[6] == null){
// $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [];
// }else{
// $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [[$value[6],$value[7],$value[8]]];
// }
}else{
// 如果性别已经存在
if(!array_key_exists($value[0],$temporary_array[$gv])){
// 如果第一分类不存在
// $temporary_array[$gv][$value[0]][$value[1]]['score'] = $value[2];
$temporary_array[$gv][$value[0]][$value[1]]['choose_num'] = $value[9];
$temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]] = [
'unit_data'=>$value[4],
'proportion'=>$value[10],
'value'=>$value[11],
'type'=>$value[12],
'describe'=>$value[13],
'score'=>$value[2],
];
$temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = $rule_c;
// if($value[6] == null){
// $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [];
// }else{
// $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [[$value[6],$value[7],$value[8]]];
// }
}else{
// 第一分类存在
if(!array_key_exists($value[1],$temporary_array[$gv][$value[0]])){
// 如果第二分类不存在
// array_push($temporary_array[$value[0]]);
// $temporary_array[$gv][$value[0]][$value[1]]['score'] = $value[2];
$temporary_array[$gv][$value[0]][$value[1]]['choose_num'] = $value[9];
$temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]] = [
'unit_data'=>$value[4],
'proportion'=>$value[10],
'value'=>$value[11],
'type'=>$value[12],
'describe'=>$value[13],
'score'=>$value[2],
];
$temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = $rule_c;
// if($value[6] == null){
// $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [];
// }else{
// $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [[$value[6],$value[7],$value[8]]];
// }
}else{
// 第二分类存在
if(!array_key_exists($value[3],$temporary_array[$gv][$value[0]][$value[1]]['list'])){
// 如果项目名不存在
// $temporary_array[$gv][$value[0]][$value[1]]['score'] = $value[2];
$temporary_array[$gv][$value[0]][$value[1]]['choose_num'] = $value[9];
$temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]] = [
'unit_data'=>$value[4],
'proportion'=>$value[10],
'value'=>$value[11],
'type'=>$value[12],
'describe'=>$value[13],
'score'=>$value[2],
];
$temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = $rule_c;
// if($value[6] == null){
// $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [];
// }else{
// $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [[$value[6],$value[7],$value[8]]];
// }
}else{
array_push($temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'],[$value[6],$value[7],$value[8]]);
}
}
}
}
}
}
// return $temporary_array;
$temporary_array = json_encode($temporary_array);
$return_result['content'] = $temporary_array;
return $return_result;
}
################################################################其他接口################################################################
################################################################其他接口################################################################
// 查看所有地市卡片项目种类
public function cards_select_all(){
$data = Db::table('admin_estimate')->where(['type'=>1])->field('id,province,city,area,content')->select();
$card_arr = [];
$exception_arr = ['7年级','8年级','9年级','七年级','八年级','九年级','七年级下学期','八年级上学期','八年级下学期','九年级上学期','BMI','肺活量','机考','体质健康达标','体育课','《国家学生体质健康标准》','体育综合知识测试成绩','体育课考评','一小时阳光体育活动',''];
foreach ($data as $key => $value) {
$data[$key]['content'] = json_decode($value['content'],true);
// dump($data[$key]['city']);
if(!array_key_exists($data[$key]['city'], $card_arr)){
$card_arr[$data[$key]['city']] = [];
}
// 开始遍历内容
foreach ($data[$key]['content'] as $k1 => $v1) {
// 遍历男女
foreach ($v1 as $k2 => $v2) {
// 遍历现场还是日常
foreach ($v2 as $k3 => $v3) {
// 遍历大分支(第一类目)
foreach ($v3['list'] as $k4 => $v4) {
// 遍历项目名
// dump($k4);
// dump($v4);
// if($k4 == '轮滑过桩'){
// dump($data[$key]['province']);
// dump($data[$key]['city']);
// }
if(!in_array($k4, $exception_arr)){
if(!in_array($k4.'-----------'.$v4['unit_data'], $card_arr[$data[$key]['city']])){
// if(!in_array($k4, $card_arr[$data[$key]['city']])){
// array_push($card_arr[$data[$key]['city']],$k4.'-------'.($k1 == 1?'男':'女').'-----------'.$v4['unit_data']);
array_push($card_arr[$data[$key]['city']],$k4.'-----------'.$v4['unit_data']);
// array_push($card_arr[$data[$key]['city']],$k4);
}
}
}
}
}
}
}
dump($card_arr);
}
}