412 lines
18 KiB
PHP
412 lines
18 KiB
PHP
|
|
<?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);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|