Function bodies 46 total
GlobalExceptionHandler class · java · L13-L39 (27 LOC)src/main/java/com/slow/excel_tools_backend/common/GlobalExceptionHandler.java
public class GlobalExceptionHandler {
@ExceptionHandler(IllegalArgumentException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Result<Void> handleBizException(IllegalArgumentException e) {
return Result.fail(e.getMessage());
}
@ExceptionHandler(MissingServletRequestParameterException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Result<Void> handleMissingParam(MissingServletRequestParameterException e) {
return Result.fail("缺少参数: " + e.getParameterName());
}
@ExceptionHandler(MethodArgumentTypeMismatchException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Result<Void> handleTypeMismatch(MethodArgumentTypeMismatchException e) {
return Result.fail("参数类型错误: " + e.getName());
}
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public Result<Void> handleException(Exception e) {
log.error("系统异常", e);
return Result.fail("系统异常,请稍后重试handleBizException method · java · L17-L19 (3 LOC)src/main/java/com/slow/excel_tools_backend/common/GlobalExceptionHandler.java
public Result<Void> handleBizException(IllegalArgumentException e) {
return Result.fail(e.getMessage());
}handleMissingParam method · java · L23-L25 (3 LOC)src/main/java/com/slow/excel_tools_backend/common/GlobalExceptionHandler.java
public Result<Void> handleMissingParam(MissingServletRequestParameterException e) {
return Result.fail("缺少参数: " + e.getParameterName());
}handleTypeMismatch method · java · L29-L31 (3 LOC)src/main/java/com/slow/excel_tools_backend/common/GlobalExceptionHandler.java
public Result<Void> handleTypeMismatch(MethodArgumentTypeMismatchException e) {
return Result.fail("参数类型错误: " + e.getName());
}handleException method · java · L35-L38 (4 LOC)src/main/java/com/slow/excel_tools_backend/common/GlobalExceptionHandler.java
public Result<Void> handleException(Exception e) {
log.error("系统异常", e);
return Result.fail("系统异常,请稍后重试");
}Result class · java · L6-L36 (31 LOC)src/main/java/com/slow/excel_tools_backend/common/Result.java
public class Result<T> {
private int code;
private String msg;
private T data;
private Result() {}
public static <T> Result<T> ok() {
return ok(null);
}
public static <T> Result<T> ok(T data) {
Result<T> r = new Result<>();
r.setCode(0);
r.setMsg("success");
r.setData(data);
return r;
}
public static <T> Result<T> fail(String msg) {
return fail(1, msg);
}
public static <T> Result<T> fail(int code, String msg) {
Result<T> r = new Result<>();
r.setCode(code);
r.setMsg(msg);
return r;
}
}ok method · java · L14-L16 (3 LOC)src/main/java/com/slow/excel_tools_backend/common/Result.java
public static <T> Result<T> ok() {
return ok(null);
}Repobility · code-quality intelligence platform · https://repobility.com
ok method · java · L18-L24 (7 LOC)src/main/java/com/slow/excel_tools_backend/common/Result.java
public static <T> Result<T> ok(T data) {
Result<T> r = new Result<>();
r.setCode(0);
r.setMsg("success");
r.setData(data);
return r;
}fail method · java · L26-L28 (3 LOC)src/main/java/com/slow/excel_tools_backend/common/Result.java
public static <T> Result<T> fail(String msg) {
return fail(1, msg);
}fail method · java · L30-L35 (6 LOC)src/main/java/com/slow/excel_tools_backend/common/Result.java
public static <T> Result<T> fail(int code, String msg) {
Result<T> r = new Result<>();
r.setCode(code);
r.setMsg(msg);
return r;
}MybatisPlusConfig class · java · L10-L18 (9 LOC)src/main/java/com/slow/excel_tools_backend/config/MybatisPlusConfig.java
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}mybatisPlusInterceptor method · java · L13-L17 (5 LOC)src/main/java/com/slow/excel_tools_backend/config/MybatisPlusConfig.java
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}AuthController class · java · L18-L39 (22 LOC)src/main/java/com/slow/excel_tools_backend/controller/AuthController.java
public class AuthController {
private final UserService userService;
@PostMapping("/login")
public Result<Map<String, Object>> login(@RequestBody Map<String, String> body) {
String code = body.get("code");
if (code == null || code.isEmpty()) {
return Result.fail("code不能为空");
}
// TODO: 调用微信 API 用 code 换取 openid,暂时用 code 作为 openid
String openid = code;
User user = userService.loginOrRegister(openid);
Map<String, Object> data = new HashMap<>();
data.put("userId", user.getId());
data.put("openid", user.getOpenid());
return Result.ok(data);
}
}login method · java · L23-L38 (16 LOC)src/main/java/com/slow/excel_tools_backend/controller/AuthController.java
public Result<Map<String, Object>> login(@RequestBody Map<String, String> body) {
String code = body.get("code");
if (code == null || code.isEmpty()) {
return Result.fail("code不能为空");
}
// TODO: 调用微信 API 用 code 换取 openid,暂时用 code 作为 openid
String openid = code;
User user = userService.loginOrRegister(openid);
Map<String, Object> data = new HashMap<>();
data.put("userId", user.getId());
data.put("openid", user.getOpenid());
return Result.ok(data);
}HealthController class · java · L8-L14 (7 LOC)src/main/java/com/slow/excel_tools_backend/controller/HealthController.java
public class HealthController {
@GetMapping("/health")
public Result<String> health() {
return Result.ok("ok");
}
}Repobility — same analyzer, your code, free for public repos · /scan/
health method · java · L11-L13 (3 LOC)src/main/java/com/slow/excel_tools_backend/controller/HealthController.java
public Result<String> health() {
return Result.ok("ok");
}ParseController class · java · L17-L27 (11 LOC)src/main/java/com/slow/excel_tools_backend/controller/ParseController.java
public class ParseController {
private final ParseService parseService;
@PostMapping("/text")
public Result<Task> parseText(@RequestBody Map<String, String> body) {
String text = body.get("text");
Task task = parseService.parseText(text);
return Result.ok(task);
}
}parseText method · java · L22-L26 (5 LOC)src/main/java/com/slow/excel_tools_backend/controller/ParseController.java
public Result<Task> parseText(@RequestBody Map<String, String> body) {
String text = body.get("text");
Task task = parseService.parseText(text);
return Result.ok(task);
}TaskController class · java · L17-L62 (46 LOC)src/main/java/com/slow/excel_tools_backend/controller/TaskController.java
public class TaskController {
private final TaskService taskService;
// TODO: 从请求头 token 中解析 userId,暂时通过请求参数传递
private Long getUserId() {
return 1L;
}
@GetMapping
public Result<List<Task>> list() {
return Result.ok(taskService.listByUserId(getUserId()));
}
@PostMapping
public Result<Task> create(@RequestBody Task task) {
task.setUserId(getUserId());
return Result.ok(taskService.create(task));
}
@GetMapping("/{id}")
public Result<Task> detail(@PathVariable Long id) {
return Result.ok(taskService.getById(id, getUserId()));
}
@PutMapping("/{id}")
public Result<Task> update(@PathVariable Long id, @RequestBody Task task) {
return Result.ok(taskService.update(id, getUserId(), task));
}
@DeleteMapping("/{id}")
public Result<Void> delete(@PathVariable Long id) {
taskService.delete(id, getUserId());
return Result.ok();
}
@GetMapping("/{id}/statsgetUserId method · java · L22-L24 (3 LOC)src/main/java/com/slow/excel_tools_backend/controller/TaskController.java
private Long getUserId() {
return 1L;
}list method · java · L27-L29 (3 LOC)src/main/java/com/slow/excel_tools_backend/controller/TaskController.java
public Result<List<Task>> list() {
return Result.ok(taskService.listByUserId(getUserId()));
}create method · java · L32-L35 (4 LOC)src/main/java/com/slow/excel_tools_backend/controller/TaskController.java
public Result<Task> create(@RequestBody Task task) {
task.setUserId(getUserId());
return Result.ok(taskService.create(task));
}detail method · java · L38-L40 (3 LOC)src/main/java/com/slow/excel_tools_backend/controller/TaskController.java
public Result<Task> detail(@PathVariable Long id) {
return Result.ok(taskService.getById(id, getUserId()));
}Repobility · MCP-ready · https://repobility.com
update method · java · L43-L45 (3 LOC)src/main/java/com/slow/excel_tools_backend/controller/TaskController.java
public Result<Task> update(@PathVariable Long id, @RequestBody Task task) {
return Result.ok(taskService.update(id, getUserId(), task));
}delete method · java · L48-L51 (4 LOC)src/main/java/com/slow/excel_tools_backend/controller/TaskController.java
public Result<Void> delete(@PathVariable Long id) {
taskService.delete(id, getUserId());
return Result.ok();
}stats method · java · L54-L56 (3 LOC)src/main/java/com/slow/excel_tools_backend/controller/TaskController.java
public Result<Map<String, Object>> stats(@PathVariable Long id) {
return Result.ok(taskService.stats(id, getUserId()));
}export method · java · L59-L61 (3 LOC)src/main/java/com/slow/excel_tools_backend/controller/TaskController.java
public void export(@PathVariable Long id, HttpServletResponse response) throws IOException {
taskService.exportExcel(id, getUserId(), response);
}ColumnDefine class · java · L6-L9 (4 LOC)src/main/java/com/slow/excel_tools_backend/entity/ColumnDefine.java
public class ColumnDefine {
private String name;
private String type;
}Task class · java · L16-L34 (19 LOC)src/main/java/com/slow/excel_tools_backend/entity/Task.java
public class Task {
@TableId(type = IdType.AUTO)
private Long id;
private Long userId;
private String title;
@TableField(typeHandler = JacksonTypeHandler.class)
private List<ColumnDefine> columns;
@TableField(typeHandler = JacksonTypeHandler.class)
private List<Map<String, Object>> rows;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}User class · java · L12-L26 (15 LOC)src/main/java/com/slow/excel_tools_backend/entity/User.java
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String openid;
private String nickname;
private String avatar;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}ExcelToolsBackendApplication class · java · L9-L15 (7 LOC)src/main/java/com/slow/excel_tools_backend/ExcelToolsBackendApplication.java
public class ExcelToolsBackendApplication {
public static void main(String[] args) {
SpringApplication.run(ExcelToolsBackendApplication.class, args);
}
}Citation: Repobility (2026). State of AI-Generated Code. https://repobility.com/research/
main method · java · L11-L13 (3 LOC)src/main/java/com/slow/excel_tools_backend/ExcelToolsBackendApplication.java
public static void main(String[] args) {
SpringApplication.run(ExcelToolsBackendApplication.class, args);
}ParseServiceImpl class · java · L14-L86 (73 LOC)src/main/java/com/slow/excel_tools_backend/service/impl/ParseServiceImpl.java
public class ParseServiceImpl implements ParseService {
@Override
public Task parseText(String text) {
if (text == null || text.trim().isEmpty()) {
throw new IllegalArgumentException("文本内容不能为空");
}
String[] lines = text.split("\n");
List<String[]> parsedLines = new ArrayList<>();
int maxCols = 0;
for (String line : lines) {
line = line.trim();
if (line.isEmpty()) {
continue;
}
String[] cols = splitLine(line);
if (cols.length > maxCols) {
maxCols = cols.length;
}
parsedLines.add(cols);
}
if (parsedLines.isEmpty()) {
throw new IllegalArgumentException("未解析到有效数据");
}
List<ColumnDefine> columns = new ArrayList<>();
if (maxCols == 1) {
ColumnDefine col = new ColumnDefine();
col.setName("姓名");
col.setType("text");
parseText method · java · L17-L72 (56 LOC)src/main/java/com/slow/excel_tools_backend/service/impl/ParseServiceImpl.java
public Task parseText(String text) {
if (text == null || text.trim().isEmpty()) {
throw new IllegalArgumentException("文本内容不能为空");
}
String[] lines = text.split("\n");
List<String[]> parsedLines = new ArrayList<>();
int maxCols = 0;
for (String line : lines) {
line = line.trim();
if (line.isEmpty()) {
continue;
}
String[] cols = splitLine(line);
if (cols.length > maxCols) {
maxCols = cols.length;
}
parsedLines.add(cols);
}
if (parsedLines.isEmpty()) {
throw new IllegalArgumentException("未解析到有效数据");
}
List<ColumnDefine> columns = new ArrayList<>();
if (maxCols == 1) {
ColumnDefine col = new ColumnDefine();
col.setName("姓名");
col.setType("text");
columns.add(col);
} else {
String[] headerLisplitLine method · java · L74-L85 (12 LOC)src/main/java/com/slow/excel_tools_backend/service/impl/ParseServiceImpl.java
private String[] splitLine(String line) {
if (line.contains("\t")) {
return line.split("\t");
}
if (line.contains(",")) {
return line.split(",");
}
if (line.contains(" ")) {
return line.split("\\s{2,}");
}
return line.split("\\s+");
}TaskServiceImpl class · java · L23-L122 (100 LOC)src/main/java/com/slow/excel_tools_backend/service/impl/TaskServiceImpl.java
public class TaskServiceImpl implements TaskService {
private final TaskMapper taskMapper;
@Override
public List<Task> listByUserId(Long userId) {
LambdaQueryWrapper<Task> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Task::getUserId, userId)
.orderByDesc(Task::getCreatedAt);
return taskMapper.selectList(wrapper);
}
@Override
public Task getById(Long id, Long userId) {
Task task = taskMapper.selectById(id);
if (task == null || !task.getUserId().equals(userId)) {
throw new IllegalArgumentException("任务不存在或无权访问");
}
return task;
}
@Override
public Task create(Task task) {
taskMapper.insert(task);
return task;
}
@Override
public Task update(Long id, Long userId, Task update) {
Task existing = getById(id, userId);
existing.setTitle(update.getTitle());
existing.setColumns(update.getColumns());
existing.setRolistByUserId method · java · L28-L33 (6 LOC)src/main/java/com/slow/excel_tools_backend/service/impl/TaskServiceImpl.java
public List<Task> listByUserId(Long userId) {
LambdaQueryWrapper<Task> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Task::getUserId, userId)
.orderByDesc(Task::getCreatedAt);
return taskMapper.selectList(wrapper);
}getById method · java · L36-L42 (7 LOC)src/main/java/com/slow/excel_tools_backend/service/impl/TaskServiceImpl.java
public Task getById(Long id, Long userId) {
Task task = taskMapper.selectById(id);
if (task == null || !task.getUserId().equals(userId)) {
throw new IllegalArgumentException("任务不存在或无权访问");
}
return task;
}create method · java · L45-L48 (4 LOC)src/main/java/com/slow/excel_tools_backend/service/impl/TaskServiceImpl.java
public Task create(Task task) {
taskMapper.insert(task);
return task;
}Repobility · code-quality intelligence platform · https://repobility.com
update method · java · L51-L58 (8 LOC)src/main/java/com/slow/excel_tools_backend/service/impl/TaskServiceImpl.java
public Task update(Long id, Long userId, Task update) {
Task existing = getById(id, userId);
existing.setTitle(update.getTitle());
existing.setColumns(update.getColumns());
existing.setRows(update.getRows());
taskMapper.updateById(existing);
return existing;
}delete method · java · L61-L64 (4 LOC)src/main/java/com/slow/excel_tools_backend/service/impl/TaskServiceImpl.java
public void delete(Long id, Long userId) {
Task existing = getById(id, userId);
taskMapper.deleteById(existing.getId());
}stats method · java · L67-L84 (18 LOC)src/main/java/com/slow/excel_tools_backend/service/impl/TaskServiceImpl.java
public Map<String, Object> stats(Long id, Long userId) {
Task task = getById(id, userId);
Map<String, Object> result = new LinkedHashMap<>();
result.put("total", task.getRows() != null ? task.getRows().size() : 0);
if (task.getColumns() != null && task.getRows() != null) {
for (ColumnDefine col : task.getColumns()) {
Map<String, Integer> countMap = new LinkedHashMap<>();
for (Map<String, Object> row : task.getRows()) {
Object val = row.get(col.getName());
String key = val != null ? val.toString() : "空";
countMap.merge(key, 1, Integer::sum);
}
result.put(col.getName(), countMap);
}
}
return result;
}exportExcel method · java · L87-L121 (35 LOC)src/main/java/com/slow/excel_tools_backend/service/impl/TaskServiceImpl.java
public void exportExcel(Long id, Long userId, HttpServletResponse response) throws IOException {
Task task = getById(id, userId);
String fileName = (task.getTitle() != null ? task.getTitle() : "export") + ".xlsx";
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition",
"attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
List<String> headers = new ArrayList<>();
if (task.getColumns() != null) {
for (ColumnDefine col : task.getColumns()) {
headers.add(col.getName());
}
}
List<List<Object>> dataList = new ArrayList<>();
if (task.getRows() != null) {
for (Map<String, Object> row : task.getRows()) {
List<Object> rowData = new ArrayList<>();
for (String header : headers) {
rowData.add(row.getOrDefault(headUserServiceImpl class · java · L12-L33 (22 LOC)src/main/java/com/slow/excel_tools_backend/service/impl/UserServiceImpl.java
public class UserServiceImpl implements UserService {
private final UserMapper userMapper;
@Override
public User loginOrRegister(String openid) {
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getOpenid, openid);
User user = userMapper.selectOne(wrapper);
if (user == null) {
user = new User();
user.setOpenid(openid);
userMapper.insert(user);
}
return user;
}
@Override
public User getById(Long id) {
return userMapper.selectById(id);
}
}loginOrRegister method · java · L17-L27 (11 LOC)src/main/java/com/slow/excel_tools_backend/service/impl/UserServiceImpl.java
public User loginOrRegister(String openid) {
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getOpenid, openid);
User user = userMapper.selectOne(wrapper);
if (user == null) {
user = new User();
user.setOpenid(openid);
userMapper.insert(user);
}
return user;
}getById method · java · L30-L32 (3 LOC)src/main/java/com/slow/excel_tools_backend/service/impl/UserServiceImpl.java
public User getById(Long id) {
return userMapper.selectById(id);
}