邮件API

This commit is contained in:
2025-11-16 19:58:51 +08:00
parent 9d442b017a
commit 3b3d6dea66
91 changed files with 6017 additions and 413 deletions

View File

@@ -1,20 +1,80 @@
package com.mini.capi.biz;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mini.capi.biz.domain.BizHomeUser;
import com.mini.capi.biz.service.BizHomeUserService;
import com.mini.capi.model.auth.LoginRequest;
import com.mini.capi.model.info.TodoHandleDTO;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
@Controller
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/biz")
public class LoginController {
@GetMapping("/login")
public String showLoginPage() {
return "login";
@Resource
private BizHomeUserService userService;
/**
* 登录
*/
@PostMapping("/userLogin")
public Map<String, Object> userLogin(@RequestBody LoginRequest loginRequest, HttpServletRequest request, HttpServletResponse response) {
Map<String, Object> result = new HashMap<>();
try {
String username = loginRequest.getUsername();
String password = loginRequest.getPassword();
QueryWrapper<BizHomeUser> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_name", username).eq("password", password);
BizHomeUser user = userService.getOne(queryWrapper);
if (user != null) {
request.getSession().setAttribute("currentUser", user);
// 3.3 返回成功响应
result.put("success", true);
result.put("message", "登录成功");
} else {
result.put("success", false);
result.put("message", "账号或密码错误");
}
} catch (Exception e) {
result.put("success", false);
result.put("message", "服务器内部错误," + e.getMessage());
}
return result;
}
@GetMapping("/swagger")
public String redirectToSwagger() {
return "redirect:/swagger-ui/index.html";
/**
* 处理退出登录请求
* 对应前端 fetch('/logout', {method: 'POST'})
*/
@PostMapping("/logout")
public ResponseEntity<Void> logout(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
try {
// 3. 清除Session中的用户信息
if (session != null) {
session.removeAttribute("currentUser"); // 清除之前存入的currentUser
session.invalidate(); // 使Session失效
}
// 5. 返回成功响应200 OK
return ResponseEntity.ok().build();
} catch (Exception e) {
// 处理异常情况
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
}

View File

@@ -0,0 +1,18 @@
package com.mini.capi.biz.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 设备存储信息表 前端控制器
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@RestController
@RequestMapping("/biz/bizDeviceInfo")
public class BizDeviceInfoController {
}

View File

@@ -0,0 +1,18 @@
package com.mini.capi.biz.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 文件夹信息表 前端控制器
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@RestController
@RequestMapping("/biz/bizFileFolders")
public class BizFileFoldersController {
}

View File

@@ -0,0 +1,18 @@
package com.mini.capi.biz.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 文件信息表 前端控制器
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@RestController
@RequestMapping("/biz/bizFiles")
public class BizFilesController {
}

View File

@@ -0,0 +1,18 @@
package com.mini.capi.biz.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 前端控制器
* </p>
*
* @author gaoxq
* @since 2025-11-14
*/
@RestController
@RequestMapping("/biz/bizHomeUser")
public class BizHomeUserController {
}

View File

@@ -0,0 +1,18 @@
package com.mini.capi.biz.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 快捷登录系统信息表 前端控制器
* </p>
*
* @author gaoxq
* @since 2025-11-15
*/
@RestController
@RequestMapping("/biz/bizQuickLogin")
public class BizQuickLoginController {
}

View File

@@ -0,0 +1,18 @@
package com.mini.capi.biz.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 服务器信息表 前端控制器
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@RestController
@RequestMapping("/biz/bizServerInfo")
public class BizServerInfoController {
}

View File

@@ -0,0 +1,18 @@
package com.mini.capi.biz.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 待办任务子表(关联主任务) 前端控制器
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@RestController
@RequestMapping("/biz/bizSubTask")
public class BizSubTaskController {
}

View File

@@ -0,0 +1,18 @@
package com.mini.capi.biz.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* VIEW 前端控制器
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@RestController
@RequestMapping("/biz/bizTodoTaskView")
public class BizTodoTaskViewController {
}

View File

@@ -0,0 +1,18 @@
package com.mini.capi.biz.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 数据表字段信息表 前端控制器
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@RestController
@RequestMapping("/biz/dataTableField")
public class DataTableFieldController {
}

View File

@@ -0,0 +1,18 @@
package com.mini.capi.biz.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 数据表基础信息表 前端控制器
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@RestController
@RequestMapping("/biz/dataTableInfo")
public class DataTableInfoController {
}

View File

@@ -0,0 +1,83 @@
package com.mini.capi.biz.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 设备存储信息表
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@Getter
@Setter
@TableName("biz_device_info")
public class BizDeviceInfo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 记录时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.AUTO)
private String id;
/**
* 设备
*/
@TableField("device")
private String device;
/**
* 挂载点
*/
@TableField("mount_point")
private String mountPoint;
/**
* 总容量
*/
@TableField("total_size")
private String totalSize;
/**
* 已使用容量
*/
@TableField("used_size")
private String usedSize;
/**
* 使用率(%)
*/
@TableField("usage_rate")
private double usageRate;
/**
* 最后一次检测到在线的时间
*/
@TableField("last_online_time")
private LocalDateTime lastOnlineTime;
/**
* 主机唯一标识
*/
@TableField("host_id")
private String hostId;
}

View File

@@ -0,0 +1,74 @@
package com.mini.capi.biz.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 文件夹信息表
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@Getter
@Setter
@TableName("biz_file_folders")
public class BizFileFolders implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 文件夹ID
*/
@TableId(value = "folder_id", type = IdType.AUTO)
private String folderId;
/**
* 文件夹名称
*/
@TableField("folder_name")
private String folderName;
/**
* 父文件夹ID0表示根目录
*/
@TableField("parent_id")
private Integer parentId;
/**
* 创建人ID关联用户表
*/
@TableField("creator_id")
private Integer creatorId;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
/**
* 是否删除0-未删除1-已删除)
*/
@TableField("is_deleted")
private Byte isDeleted;
/**
* 文件夹描述
*/
@TableField("description")
private String description;
}

View File

@@ -0,0 +1,98 @@
package com.mini.capi.biz.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 文件信息表
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@Getter
@Setter
@TableName("biz_files")
public class BizFiles implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 文件ID
*/
@TableId(value = "file_id", type = IdType.AUTO)
private String fileId;
/**
* 文件名称(含扩展名)
*/
@TableField("file_name")
private String fileName;
/**
* 所属文件夹ID关联folders表
*/
@TableField("folder_id")
private String folderId;
/**
* 文件大小(字节)
*/
@TableField("file_size")
private Long fileSize;
/**
* 文件类型image/jpeg、application/pdf
*/
@TableField("file_type")
private String fileType;
/**
* 文件存储路径物理路径或云存储URL
*/
@TableField("file_path")
private String filePath;
/**
* 上传人ID关联用户表
*/
@TableField("creator_id")
private Integer creatorId;
/**
* 上传时间
*/
@TableField("upload_time")
private LocalDateTime uploadTime;
/**
* 更新时间(如修改名称)
*/
@TableField("update_time")
private LocalDateTime updateTime;
/**
* 是否删除0-未删除1-已删除)
*/
@TableField("is_deleted")
private Byte isDeleted;
/**
* 文件版本号(用于版本控制)
*/
@TableField("version")
private Integer version;
/**
* 文件MD5值用于去重校验
*/
@TableField("md5")
private String md5;
}

View File

@@ -0,0 +1,41 @@
package com.mini.capi.biz.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
*
* </p>
*
* @author gaoxq
* @since 2025-11-14
*/
@Getter
@Setter
@TableName("biz_home_user")
public class BizHomeUser implements Serializable {
private static final long serialVersionUID = 1L;
@TableField("create_time")
private LocalDateTime createTime;
@TableId(value = "user_id", type = IdType.AUTO)
private String userId;
@TableField("user_name")
private String userName;
@TableField("password")
private String password;
@TableField("uname")
private String uname;
}

View File

@@ -0,0 +1,104 @@
package com.mini.capi.biz.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 快捷登录系统信息表
* </p>
*
* @author gaoxq
* @since 2025-11-15
*/
@Getter
@Setter
@TableName("biz_quick_login")
public class BizQuickLogin implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 自增主键
*/
@TableId(value = "id", type = IdType.AUTO)
private String id;
/**
* 系统名称
*/
@TableField("system_name")
private String systemName;
/**
* 首页地址
*/
@TableField("homepage_url")
private String homepageUrl;
/**
* 图标类名(Font Awesome)
*/
@TableField("icon_class")
private String iconClass;
/**
* 图标颜色(关联Tailwind配置)
*/
@TableField("icon_color")
private String iconColor;
/**
* 排序序号(升序排列)
*/
@TableField("sort_order")
private Integer sortOrder;
/**
* 是否启用(1:启用 0:禁用)
*/
@TableField("is_enabled")
private Integer isEnabled;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
/**
* 租户id
*/
@TableField("f_tenant_id")
private String fTenantId;
/**
* 流程id
*/
@TableField("f_flow_id")
private String fFlowId;
/**
* 流程任务主键
*/
@TableField("f_flow_task_id")
private String fFlowTaskId;
/**
* 流程任务状态
*/
@TableField("f_flow_state")
private Integer fFlowState;
}

View File

@@ -0,0 +1,106 @@
package com.mini.capi.biz.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 服务器信息表
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@Getter
@Setter
@TableName("biz_server_info")
public class BizServerInfo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 记录时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.AUTO)
private String id;
/**
* 主机运行时间
*/
@TableField("uptime")
private String uptime;
/**
* 操作系统
*/
@TableField("os")
private String os;
/**
* 内核版本
*/
@TableField("kernel_version")
private String kernelVersion;
/**
* 主机名
*/
@TableField("hostname")
private String hostname;
/**
* IP地址
*/
@TableField("ip_address")
private String ipAddress;
/**
* CPU型号
*/
@TableField("cpu_model")
private String cpuModel;
/**
* 内存总量
*/
@TableField("memory_total")
private String memoryTotal;
/**
* CPU使用率(%)
*/
@TableField("cpu_usage")
private Double cpuUsage;
/**
* 内存使用率(%)
*/
@TableField("memory_usage")
private Double memoryUsage;
/**
* 最后一次检测到在线的时间
*/
@TableField("last_online_time")
private LocalDateTime lastOnlineTime;
/**
* 主机唯一标识
*/
@TableField("host_id")
private String hostId;
}

View File

@@ -0,0 +1,95 @@
package com.mini.capi.biz.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 待办任务子表(关联主任务)
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@Getter
@Setter
@TableName("biz_sub_task")
public class BizSubTask implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 记录时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 唯一标识
*/
@TableId(value = "sub_task_id", type = IdType.AUTO)
private String subTaskId;
/**
* 关联的主任务ID外键
*/
@TableField("parent_task_id")
private String parentTaskId;
/**
* 子任务详明细
*/
@TableField("sub_task_name")
private String subTaskName;
/**
* 子任务优先级
*/
@TableField("priority")
private String priority;
/**
* 任务状态
*/
@TableField("ustatus")
private String ustatus;
/**
* 完成时间
*/
@TableField("finish_time")
private LocalDateTime finishTime;
@TableField("remark")
private String remark;
/**
* 租户id
*/
@TableField("f_tenant_id")
private String fTenantId;
/**
* 流程id
*/
@TableField("f_flow_id")
private String fFlowId;
/**
* 流程任务主键
*/
@TableField("f_flow_task_id")
private String fFlowTaskId;
/**
* 流程任务状态
*/
@TableField("f_flow_state")
private Integer fFlowState;
}

View File

@@ -0,0 +1,120 @@
package com.mini.capi.biz.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* VIEW
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@Getter
@Setter
@TableName("biz_todo_task_view")
public class BizTodoTaskView implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 记录时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 唯一标识
*/
@TableField("task_id")
private String taskId;
/**
* 任务名称
*/
@TableField("task_name")
private String taskName;
/**
* 任务详细描述
*/
@TableField("task_desc")
private String taskDesc;
/**
* 任务截止时间
*/
@TableField("deadline")
private LocalDateTime deadline;
/**
* 待办人员
*/
@TableField("todo_user")
private String todoUser;
/**
* 创建人员
*/
@TableField("login_user")
private String loginUser;
/**
* 租户id
*/
@TableField("f_tenant_id")
private String fTenantId;
/**
* 流程id
*/
@TableField("f_flow_id")
private String fFlowId;
/**
* 流程任务主键
*/
@TableField("f_flow_task_id")
private String fFlowTaskId;
/**
* 流程任务状态
*/
@TableField("f_flow_state")
private Integer fFlowState;
/**
* 唯一标识
*/
@TableField("sub_task_id")
private String subTaskId;
/**
* 子任务详明细
*/
@TableField("sub_task_name")
private String subTaskName;
/**
* 子任务优先级
*/
@TableField("priority")
private String priority;
/**
* 任务状态
*/
@TableField("ustatus")
private String ustatus;
/**
* 完成时间
*/
@TableField("finish_time")
private LocalDateTime finishTime;
}

View File

@@ -0,0 +1,98 @@
package com.mini.capi.biz.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 数据表字段信息表
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@Getter
@Setter
@TableName("data_table_field")
public class DataTableField implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 字段唯一标识(主键)
*/
@TableId(value = "field_id", type = IdType.AUTO)
private String fieldId;
/**
* 关联的数据表ID外键关联data_table_info.table_id
*/
@TableField("table_id")
private String tableId;
/**
* 字段序号(表示字段在表中的顺序)
*/
@TableField("field_order")
private Integer fieldOrder;
/**
* 字段类型int、varchar、datetime等
*/
@TableField("field_type")
private String fieldType;
/**
* 字段名称
*/
@TableField("field_name")
private String fieldName;
/**
* 字段长度如varchar(50)中的50数值型可表示精度
*/
@TableField("field_length")
private Integer fieldLength;
/**
* 字段说明
*/
@TableField("field_remark")
private String fieldRemark;
/**
* 租户id
*/
@TableField("f_tenant_id")
private String fTenantId;
/**
* 流程id
*/
@TableField("f_flow_id")
private String fFlowId;
/**
* 流程任务主键
*/
@TableField("f_flow_task_id")
private String fFlowTaskId;
/**
* 流程任务状态
*/
@TableField("f_flow_state")
private Integer fFlowState;
}

View File

@@ -0,0 +1,111 @@
package com.mini.capi.biz.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 数据表基础信息表
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@Getter
@Setter
@TableName("data_table_info")
public class DataTableInfo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 数据表唯一标识(主键)
*/
@TableId(value = "table_id", type = IdType.AUTO)
private String tableId;
/**
* 数据表名称
*/
@TableField("table_name")
private String tableName;
/**
* 数据表描述
*/
@TableField("table_comment")
private String tableComment;
/**
* 数据表大小单位MB
*/
@TableField("table_size")
private BigDecimal tableSize;
/**
* 数据来源(如:业务系统、文件导入等)
*/
@TableField("data_source")
private String dataSource;
/**
* 创建人
*/
@TableField("creator")
private String creator;
/**
* 记录条数
*/
@TableField("data_rows")
private Long dataRows;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
/**
* 租户id
*/
@TableField("f_tenant_id")
private String fTenantId;
/**
* 流程id
*/
@TableField("f_flow_id")
private String fFlowId;
/**
* 流程任务主键
*/
@TableField("f_flow_task_id")
private String fFlowTaskId;
/**
* 流程任务状态
*/
@TableField("f_flow_state")
private Integer fFlowState;
/**
* 备注信息
*/
@TableField("remarks")
private String remarks;
}

View File

@@ -2,6 +2,7 @@ package com.mini.capi.biz.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
@@ -41,4 +42,18 @@ public class ErpSummaryAllView implements Serializable {
@TableField("f_cycle")
private String fCycle;
public BigDecimal getThisValue() {
return thisValue != null ? thisValue : BigDecimal.ZERO;
}
public BigDecimal getPrevValue() {
return prevValue != null ? prevValue : BigDecimal.ZERO;
}
public BigDecimal getMomRate() {
return momRate != null ? momRate : BigDecimal.ZERO;
}
}

View File

@@ -2,6 +2,7 @@ package com.mini.capi.biz.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.mapper;
import com.mini.capi.biz.domain.BizDeviceInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 设备存储信息表 Mapper 接口
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
public interface BizDeviceInfoMapper extends BaseMapper<BizDeviceInfo> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.mapper;
import com.mini.capi.biz.domain.BizFileFolders;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 文件夹信息表 Mapper 接口
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
public interface BizFileFoldersMapper extends BaseMapper<BizFileFolders> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.mapper;
import com.mini.capi.biz.domain.BizFiles;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 文件信息表 Mapper 接口
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
public interface BizFilesMapper extends BaseMapper<BizFiles> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.mapper;
import com.mini.capi.biz.domain.BizHomeUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author gaoxq
* @since 2025-11-14
*/
public interface BizHomeUserMapper extends BaseMapper<BizHomeUser> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.mapper;
import com.mini.capi.biz.domain.BizQuickLogin;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 快捷登录系统信息表 Mapper 接口
* </p>
*
* @author gaoxq
* @since 2025-11-15
*/
public interface BizQuickLoginMapper extends BaseMapper<BizQuickLogin> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.mapper;
import com.mini.capi.biz.domain.BizServerInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 服务器信息表 Mapper 接口
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
public interface BizServerInfoMapper extends BaseMapper<BizServerInfo> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.mapper;
import com.mini.capi.biz.domain.BizSubTask;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 待办任务子表(关联主任务) Mapper 接口
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
public interface BizSubTaskMapper extends BaseMapper<BizSubTask> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.mapper;
import com.mini.capi.biz.domain.BizTodoTaskView;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* VIEW Mapper 接口
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
public interface BizTodoTaskViewMapper extends BaseMapper<BizTodoTaskView> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.mapper;
import com.mini.capi.biz.domain.DataTableField;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 数据表字段信息表 Mapper 接口
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
public interface DataTableFieldMapper extends BaseMapper<DataTableField> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.mapper;
import com.mini.capi.biz.domain.DataTableInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 数据表基础信息表 Mapper 接口
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
public interface DataTableInfoMapper extends BaseMapper<DataTableInfo> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.service;
import com.mini.capi.biz.domain.BizDeviceInfo;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 设备存储信息表 服务类
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
public interface BizDeviceInfoService extends IService<BizDeviceInfo> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.service;
import com.mini.capi.biz.domain.BizFileFolders;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 文件夹信息表 服务类
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
public interface BizFileFoldersService extends IService<BizFileFolders> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.service;
import com.mini.capi.biz.domain.BizFiles;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 文件信息表 服务类
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
public interface BizFilesService extends IService<BizFiles> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.service;
import com.mini.capi.biz.domain.BizHomeUser;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author gaoxq
* @since 2025-11-14
*/
public interface BizHomeUserService extends IService<BizHomeUser> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.service;
import com.mini.capi.biz.domain.BizQuickLogin;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 快捷登录系统信息表 服务类
* </p>
*
* @author gaoxq
* @since 2025-11-15
*/
public interface BizQuickLoginService extends IService<BizQuickLogin> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.service;
import com.mini.capi.biz.domain.BizServerInfo;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务器信息表 服务类
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
public interface BizServerInfoService extends IService<BizServerInfo> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.service;
import com.mini.capi.biz.domain.BizSubTask;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 待办任务子表(关联主任务) 服务类
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
public interface BizSubTaskService extends IService<BizSubTask> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.service;
import com.mini.capi.biz.domain.BizTodoTaskView;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* VIEW 服务类
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
public interface BizTodoTaskViewService extends IService<BizTodoTaskView> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.service;
import com.mini.capi.biz.domain.DataTableField;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 数据表字段信息表 服务类
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
public interface DataTableFieldService extends IService<DataTableField> {
}

View File

@@ -0,0 +1,16 @@
package com.mini.capi.biz.service;
import com.mini.capi.biz.domain.DataTableInfo;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 数据表基础信息表 服务类
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
public interface DataTableInfoService extends IService<DataTableInfo> {
}

View File

@@ -0,0 +1,20 @@
package com.mini.capi.biz.service.impl;
import com.mini.capi.biz.domain.BizDeviceInfo;
import com.mini.capi.biz.mapper.BizDeviceInfoMapper;
import com.mini.capi.biz.service.BizDeviceInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 设备存储信息表 服务实现类
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@Service
public class BizDeviceInfoServiceImpl extends ServiceImpl<BizDeviceInfoMapper, BizDeviceInfo> implements BizDeviceInfoService {
}

View File

@@ -0,0 +1,20 @@
package com.mini.capi.biz.service.impl;
import com.mini.capi.biz.domain.BizFileFolders;
import com.mini.capi.biz.mapper.BizFileFoldersMapper;
import com.mini.capi.biz.service.BizFileFoldersService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 文件夹信息表 服务实现类
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@Service
public class BizFileFoldersServiceImpl extends ServiceImpl<BizFileFoldersMapper, BizFileFolders> implements BizFileFoldersService {
}

View File

@@ -0,0 +1,20 @@
package com.mini.capi.biz.service.impl;
import com.mini.capi.biz.domain.BizFiles;
import com.mini.capi.biz.mapper.BizFilesMapper;
import com.mini.capi.biz.service.BizFilesService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 文件信息表 服务实现类
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@Service
public class BizFilesServiceImpl extends ServiceImpl<BizFilesMapper, BizFiles> implements BizFilesService {
}

View File

@@ -0,0 +1,20 @@
package com.mini.capi.biz.service.impl;
import com.mini.capi.biz.domain.BizHomeUser;
import com.mini.capi.biz.mapper.BizHomeUserMapper;
import com.mini.capi.biz.service.BizHomeUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author gaoxq
* @since 2025-11-14
*/
@Service
public class BizHomeUserServiceImpl extends ServiceImpl<BizHomeUserMapper, BizHomeUser> implements BizHomeUserService {
}

View File

@@ -0,0 +1,20 @@
package com.mini.capi.biz.service.impl;
import com.mini.capi.biz.domain.BizQuickLogin;
import com.mini.capi.biz.mapper.BizQuickLoginMapper;
import com.mini.capi.biz.service.BizQuickLoginService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 快捷登录系统信息表 服务实现类
* </p>
*
* @author gaoxq
* @since 2025-11-15
*/
@Service
public class BizQuickLoginServiceImpl extends ServiceImpl<BizQuickLoginMapper, BizQuickLogin> implements BizQuickLoginService {
}

View File

@@ -0,0 +1,20 @@
package com.mini.capi.biz.service.impl;
import com.mini.capi.biz.domain.BizServerInfo;
import com.mini.capi.biz.mapper.BizServerInfoMapper;
import com.mini.capi.biz.service.BizServerInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务器信息表 服务实现类
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@Service
public class BizServerInfoServiceImpl extends ServiceImpl<BizServerInfoMapper, BizServerInfo> implements BizServerInfoService {
}

View File

@@ -0,0 +1,20 @@
package com.mini.capi.biz.service.impl;
import com.mini.capi.biz.domain.BizSubTask;
import com.mini.capi.biz.mapper.BizSubTaskMapper;
import com.mini.capi.biz.service.BizSubTaskService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 待办任务子表(关联主任务) 服务实现类
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@Service
public class BizSubTaskServiceImpl extends ServiceImpl<BizSubTaskMapper, BizSubTask> implements BizSubTaskService {
}

View File

@@ -0,0 +1,20 @@
package com.mini.capi.biz.service.impl;
import com.mini.capi.biz.domain.BizTodoTaskView;
import com.mini.capi.biz.mapper.BizTodoTaskViewMapper;
import com.mini.capi.biz.service.BizTodoTaskViewService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* VIEW 服务实现类
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@Service
public class BizTodoTaskViewServiceImpl extends ServiceImpl<BizTodoTaskViewMapper, BizTodoTaskView> implements BizTodoTaskViewService {
}

View File

@@ -0,0 +1,20 @@
package com.mini.capi.biz.service.impl;
import com.mini.capi.biz.domain.DataTableField;
import com.mini.capi.biz.mapper.DataTableFieldMapper;
import com.mini.capi.biz.service.DataTableFieldService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 数据表字段信息表 服务实现类
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@Service
public class DataTableFieldServiceImpl extends ServiceImpl<DataTableFieldMapper, DataTableField> implements DataTableFieldService {
}

View File

@@ -0,0 +1,20 @@
package com.mini.capi.biz.service.impl;
import com.mini.capi.biz.domain.DataTableInfo;
import com.mini.capi.biz.mapper.DataTableInfoMapper;
import com.mini.capi.biz.service.DataTableInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 数据表基础信息表 服务实现类
* </p>
*
* @author gaoxq
* @since 2025-11-16
*/
@Service
public class DataTableInfoServiceImpl extends ServiceImpl<DataTableInfoMapper, DataTableInfo> implements DataTableInfoService {
}

View File

@@ -0,0 +1,155 @@
package com.mini.capi.biz;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mini.capi.api.sys.sysService;
import com.mini.capi.biz.domain.*;
import com.mini.capi.biz.service.*;
import com.mini.capi.model.info.CpuInfo;
import com.mini.capi.model.info.DiskInfo;
import com.mini.capi.model.info.RunInfo;
import com.mini.capi.model.info.ServerInfo;
import com.mini.capi.utils.SqlUtils;
import com.mini.capi.utils.SystemInfoUtil;
import com.mini.capi.utils.vDate;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
@Controller
public class viewController {
@Resource
private BizMonitorHostService hostService;
@Resource
private BizQuickLoginService loginService;
@Resource
private BizFilesService filesService;
@Resource
private BizFileFoldersService foldersService;
@Resource
private sysService service;
@Resource
private BizServerInfoService bizServerInfoService;
@Resource
private BizDeviceInfoService bizDeviceInfoService;
@Resource
private DataTableInfoService dataTableInfoService;
@Resource
private DataTableFieldService dataTableFieldService;
@Resource
private BizTodoTaskViewService bizTodoTaskViewService;
@GetMapping("/login")
public String showLoginPage() {
return "login";
}
@GetMapping("/swagger")
public String redirectToSwagger() {
return "redirect:/swagger-ui/index.html";
}
@GetMapping("/biz/index")
public String getUserHome(Model model, HttpSession session) throws Exception {
RunInfo runInfo = service.getRunInfo();
List<BizMonitorHost> hosts = hostService.list();
List<BizQuickLogin> storages = loginService.list();
BizHomeUser user = (BizHomeUser) session.getAttribute("currentUser");
QueryWrapper<BizTodoTaskView> taskViewQueryWrapper = new QueryWrapper<>();
taskViewQueryWrapper.notIn("ustatus", "CPT");
List<BizTodoTaskView> todoViews = bizTodoTaskViewService.list(taskViewQueryWrapper);
model.addAttribute("hosts", hosts);
model.addAttribute("storages", storages);
model.addAttribute("uname", user.getUname());
model.addAttribute("todoViews", todoViews);
model.addAttribute("times", vDate.getRunTimes(runInfo.getProcessInfo().getUptime()));
return "index";
}
@GetMapping("/biz/getServerInfo")
public String getServerInfo(Model model, String hostId) {
// 1. 查询服务器信息确保不为null
QueryWrapper<BizServerInfo> infoQueryWrapper = new QueryWrapper<>();
infoQueryWrapper.eq("host_id", hostId);
BizServerInfo info = bizServerInfoService.getOne(infoQueryWrapper);
// 若查询不到数据创建空对象避免前端null指针
model.addAttribute("info", info != null ? info : new BizServerInfo());
// 2. 查询设备列表,确保集合始终存在
QueryWrapper<BizDeviceInfo> deviceQueryWrapper = new QueryWrapper<>();
deviceQueryWrapper.eq("host_id", hostId);
List<BizDeviceInfo> devices = bizDeviceInfoService.list(deviceQueryWrapper);
// 若查询不到数据返回空集合而非null
model.addAttribute("devices", devices != null ? devices : Collections.emptyList());
return "server";
}
@GetMapping("/biz/getFieldDetail")
public String getFieldDetail(Model model, String tableId) {
DataTableInfo tableInfo = dataTableInfoService.getById(tableId);
QueryWrapper<DataTableField> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("table_id", tableId);
queryWrapper.orderByAsc("field_order");
List<DataTableField> fields = dataTableFieldService.list(queryWrapper);
String createSql = SqlUtils.CreateTableSql(tableInfo, fields);
String selectSql = SqlUtils.SelectSqlComments(tableInfo, fields);
model.addAttribute("createSql", createSql != null ? createSql : null);
model.addAttribute("selectSql", selectSql != null ? selectSql : null);
model.addAttribute("tableInfo", tableInfo != null ? tableInfo : new DataTableInfo());
model.addAttribute("fields", fields != null ? fields : Collections.emptyList());
return "field";
}
/**
* 数据地图
*/
@GetMapping("/biz/dataMap")
public String getDataMap(Model model) {
List<DataTableInfo> tables = dataTableInfoService.list();
Collections.sort(tables,
Comparator.nullsLast(Comparator.comparing(DataTableInfo::getCreateTime)).reversed()
);
model.addAttribute("tables", tables);
return "data";
}
/**
* 文档中心
*/
@GetMapping("/biz/dataDoc")
public String getDataDox(Model model) {
List<BizFiles> files = filesService.list();
List<BizFileFolders> folders = foldersService.list();
model.addAttribute("files", files);
model.addAttribute("folders", folders);
return "file";
}
}

View File

@@ -0,0 +1,48 @@
package com.mini.capi.biz;
import com.mini.capi.biz.domain.BizSubTask;
import com.mini.capi.biz.service.BizSubTaskService;
import com.mini.capi.model.info.TodoHandleDTO;
import jakarta.annotation.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
@RestController
@RequestMapping("/biz")
public class workController {
@Resource
private BizSubTaskService bizSubTaskService;
/**
* 完成待办
*
* @return
*/
@PostMapping("/finishTodoSub")
public ResponseEntity<Void> finishTodoSub(@RequestBody TodoHandleDTO handleDTO) {
// 验证参数
if (handleDTO.getTaskId() == null || handleDTO.getOpinion() == null || handleDTO.getOpinion().trim().isEmpty()) {
return ResponseEntity.badRequest().build();
}
try {
// 调用服务层处理任务
BizSubTask bizSubTask = bizSubTaskService.getById(handleDTO.getTaskId());
bizSubTask.setUstatus("CPT");
bizSubTask.setFinishTime(LocalDateTime.now());
bizSubTask.setRemark(handleDTO.getOpinion());
bizSubTaskService.updateById(bizSubTask);
return ResponseEntity.ok().build();
} catch (Exception e) {
// 处理异常(如任务不存在、数据库错误等)
return ResponseEntity.status(500).build();
}
}
}