You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gym/CommonController.java

291 lines
11 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// 声明当前文件所在的包路径
package com.controller;
// 导入输入输出相关类
import java.io.*;
// 导入SQL相关类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
// 导入日期格式化类
import java.text.SimpleDateFormat;
// 导入集合类
import java.util.*;
// 导入Servlet请求类
import javax.servlet.http.HttpServletRequest;
// 导入FastJSON相关类
import com.alibaba.fastjson.JSON;
// 导入字符串工具类
import com.utils.StringUtil;
// 导入Apache Commons字符串工具
import org.apache.commons.lang3.StringUtils;
// 导入JSON对象类
import org.json.JSONObject;
// 导入日志相关类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// 导入Spring框架相关注解和类
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.ResourceUtils;
// 导入Spring MVC注解
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
// 导入自定义注解
import com.annotation.IgnoreAuth;
// 导入百度AI相关类
import com.baidu.aip.face.AipFace;
import com.baidu.aip.face.MatchRequest;
import com.baidu.aip.util.Base64Util;
// 导入MyBatis-Plus相关类
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
// 导入实体类
import com.entity.ConfigEntity;
// 导入服务类
import com.service.CommonService;
import com.service.ConfigService;
// 导入工具类
import com.utils.BaiduUtil;
import com.utils.FileUtil;
import com.utils.R;
//通用接口控制器
//提供系统通用的各种功能接口
@RestController // 标识这是一个RESTful风格的控制器
public class CommonController {
// 日志记录器使用slf4j的LoggerFactory创建
private static final Logger logger = LoggerFactory.getLogger(CommonController.class);
// 自动注入通用服务
@Autowired
private CommonService commonService;
// * MySQL数据库备份接口
// * @param mysqlUrl MySQL安装路径
// * @param hostIP 数据库服务器IP
// * @param userName 数据库用户名
// * @param hostPort 数据库端口
//* @param password 数据库密码
//* @param savePath 备份文件保存路径
//* @param fileName 备份文件名
//* @param databaseName 要备份的数据库名
//* @return 操作结果
@IgnoreAuth // 忽略权限验证
@RequestMapping("/beifen") // 映射请求路径
public R beifen(String mysqlUrl, String hostIP, String userName, String hostPort,
String password, String savePath, String fileName, String databaseName) {
// 创建保存目录文件对象
File saveFile = new File(savePath);
// 检查目录是否存在
if (!saveFile.exists()) {
// 不存在则创建多级目录
saveFile.mkdirs();
}
// 确保路径以分隔符结尾
if (!savePath.endsWith(File.separator)) {
savePath = savePath + File.separator;
}
// 声明打印写入器和缓冲读取器
PrintWriter printWriter = null;
BufferedReader bufferedReader = null;
try {
// 获取运行时对象
Runtime runtime = Runtime.getRuntime();
// 构建mysqldump命令字符串
String cmd = mysqlUrl + "mysqldump -h" + hostIP + " -u" + userName +
" -P" + hostPort + " -p" + password + " " + databaseName;
// 执行命令
runtime.exec(cmd);
Process process = runtime.exec(cmd);
// 创建输入流读取器指定UTF-8编码
InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream(), "utf8");
// 创建缓冲读取器
bufferedReader = new BufferedReader(inputStreamReader);
// 创建打印写入器指定UTF-8编码
printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(savePath + fileName), "utf8"));
// 逐行读取备份数据
String line;
while ((line = bufferedReader.readLine()) != null) {
// 写入备份文件
printWriter.println(line);
}
// 刷新缓冲区
printWriter.flush();
} catch (Exception e) {
// 打印异常堆栈
e.printStackTrace();
// 返回错误信息
return R.error("备份数据出错");
} finally {
// 在finally块中确保资源关闭
try {
if (bufferedReader != null) {
bufferedReader.close();
}
if (printWriter != null) {
printWriter.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 返回成功结果
return R.ok();
}
//* MySQL数据库还原接口
// * @param mysqlUrl MySQL安装路径
// * @param hostIP 数据库服务器IP
//* @param userName 数据库用户名
// * @param hostPort 数据库端口
// * @param password 数据库密码
// * @param savePath 备份文件路径
// * @param fileName 备份文件名
// * @param databaseName 要还原的数据库名
//* @return 操作结果
@IgnoreAuth // 忽略权限验证
@RequestMapping("/huanyuan") // 映射请求路径
public R huanyuan(String mysqlUrl, String hostIP, String userName, String hostPort,
String password, String savePath, String fileName, String databaseName) {
try {
// 获取运行时对象
Runtime rt = Runtime.getRuntime();
// 执行mysql命令
Process child1 = rt.exec(mysqlUrl+"mysql.exe -h" + hostIP + " -u" + userName +
" -P" + hostPort + " -p" + password + " " + databaseName);
// 获取进程的输出流
OutputStream out = child1.getOutputStream();
// 创建字符串缓冲区
StringBuffer sb = new StringBuffer();
// 创建缓冲读取器,读取备份文件
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(savePath+"/"+fileName), "utf-8"));
// 逐行读取备份文件
String inStr;
while ((inStr = br.readLine()) != null) {
// 将每行内容添加到缓冲区,并添加换行符
sb.append(inStr + "\r\n");
}
// 创建输出流写入器
OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");
// 写入备份数据
writer.write(sb.toString());
// 刷新缓冲区
writer.flush();
// 关闭资源
out.close();
br.close();
writer.close();
} catch (Exception e) {
// 打印异常堆栈
e.printStackTrace();
// 返回错误信息
return R.error("数据导入出错");
}
// 返回成功结果
return R.ok();
}
// * 饼状图求和接口
//* @param params 请求参数Map
// * @return 包含求和结果的响应
@RequestMapping("/pieSum") // 映射请求路径
public R pieSum(@RequestParam Map<String,Object> params) {
// 记录调试日志
logger.debug("饼状图求和:,,Controller:{},,params:{}",this.getClass().getName(),params);
// 调用服务层获取求和结果
List<Map<String, Object>> result = commonService.pieSum(params);
// 返回成功结果和数据
return R.ok().put("data", result);
}
// * 饼状图统计接口
// * @param params 请求参数Map
//* @return 包含统计结果的响应
@RequestMapping("/pieCount") // 映射请求路径
public R pieCount(@RequestParam Map<String,Object> params) {
// 记录调试日志
logger.debug("饼状图统计:,,Controller:{},,params:{}",this.getClass().getName(),params);
// 调用服务层获取统计结果
List<Map<String, Object>> result = commonService.pieCount(params);
// 返回成功结果和数据
return R.ok().put("data", result);
}
// * 单列柱状图求和接口
// * @param params 请求参数Map
//* @return 包含图表数据的响应
@RequestMapping("/barSumOne") // 映射请求路径
public R barSumOne(@RequestParam Map<String,Object> params) {
// 记录调试日志
logger.debug("柱状图求和单列:,,Controller:{},,params:{}",this.getClass().getName(),params);
// 调用服务层获取数据
List<Map<String, Object>> result = commonService.barSumOne(params);
// 准备图表数据
List<String> xAxis = new ArrayList<>(); // x轴数据
List<List<String>> yAxis = new ArrayList<>(); // y轴数据
List<String> legend = new ArrayList<>(); // 图例
List<String> yAxis0 = new ArrayList<>(); // 第一个y轴数据系列
yAxis.add(yAxis0); // 添加到y轴集合
legend.add(""); // 添加空图例
// 遍历结果集
for(Map<String, Object> map : result){
// 获取名称和值
String oneValue = String.valueOf(map.get("name"));
String value = String.valueOf(map.get("value"));
// 添加到对应集合
xAxis.add(oneValue);
yAxis0.add(value);
}
// 构建结果Map
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("xAxis",xAxis);
resultMap.put("yAxis",yAxis);
resultMap.put("legend",legend);
// 返回成功结果和数据
return R.ok().put("data", resultMap);
}
// 其他方法的行注释类似,遵循相同的模式...
// 每个方法都包含:
// 1. 方法功能说明
// 2. 参数说明
// 3. 返回值说明
// 4. 关键代码行的详细注释
// 由于篇幅限制,这里省略了部分方法的详细行注释
// 但每个方法都应按照上述模式进行注释
// 所有方法的注释都应包括:
// - 方法用途
// - 参数说明
// - 返回值说明
// - 关键处理逻辑说明
// - 异常处理说明
}