学习进度条

今日学习时间:1小时
今日代码量:100行
今日博客:1篇

核心功能实现

1. 维修工单管理

维修工单实体设计

@Data
public class RepairManager {
    private String planId;          // 工单编号
    private String name;            // 设备名称
    private String code;            // 设备编号
    private String faultCode;       // 故障编号
    private String faultType;      // 故障类型
    private String description;     // 故障描述
    private Integer status;         // 状态(0-待处理,1-处理中,2-已完成,3-已关闭)
    private String image;           // 故障图片
    // 其他字段...
}

工单提交接口

@PostMapping("/submit")
public Map<String, Object> submitRepair(@RequestBody Map<String, Object> repairData) {
    RepairManager repairManager = new RepairManager();
    // 设置前端传过来的字段
    repairManager.setName((String) repairData.get("deviceName"));
    repairManager.setCode((String) repairData.get("deviceCode"));
    // 设置默认状态为待处理
    repairManager.setStatus(0);
    
    int result = repairManagerMapper.insertRepair(repairManager);
    if (result > 0) {
        return Map.of("success", true, "message", "报修提交成功");
    } else {
        return Map.of("success", false, "message", "报修提交失败");
    }
}

技术亮点

  • 使用@RequestBody接收JSON格式请求数据
  • 灵活处理前端传入的动态字段
  • 明确的业务状态管理

分页查询实现

@GetMapping
public Result<PageBean<RepairManager>> getRepairList(
        @RequestParam Integer pageNum, 
        @RequestParam Integer pageSize,
        @RequestParam(required = false) String deviceType,
        @RequestParam(required = false) String deviceName,
        @RequestParam(required = false) String status) {
    
    PageBean<RepairManager> pb = repairManagerMapper.list(
        pageNum, pageSize, deviceType, deviceName, status);
    return Result.success(pb);
}

分页核心逻辑

default PageBean<RepairManager> list(Integer pageNum, Integer pageSize,
                                   String deviceType, String deviceName, String status) {
    PageBean<RepairManager> pb = new PageBean<>();
    int offset = (pageNum - 1) * pageSize;
    
    // 查询当前页数据
    List<RepairManager> items = selectByCondition(deviceType, deviceName, status, offset, pageSize);
    pb.setItems(items);
    
    // 查询总数
    long total = countByCondition(deviceType, deviceName, status);
    pb.setTotal(total);
    
    return pb;
}

2. 文件上传功能

文件上传接口

@PostMapping("/upload")
public Result<String> upload(MultipartFile file) throws Exception {
    String originalFilename = file.getOriginalFilename();
    // 生成唯一文件名
    String filename = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
    // 上传到阿里云OSS
    String url = AliOssUtils.uploadFile(filename, file.getInputStream());
    return Result.success(url);
}

技术要点

  • MultipartFile处理文件上传
  • UUID生成唯一文件名防止冲突
  • 阿里云OSS SDK实现云端存储
  • 返回文件访问URL

阿里云OSS工具类

public class AliOssUtils {
    private static String endpoint = "your-oss-endpoint";
    private static String accessKeyId = "your-access-key";
    private static String accessKeySecret = "your-secret-key";
    private static String bucketName = "your-bucket-name";

    public static String uploadFile(String objectName, InputStream inputStream) {
        // 创建OSSClient实例
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        
        try {
            // 上传文件
            ossClient.putObject(bucketName, objectName, inputStream);
            // 生成访问URL
            return "https://" + bucketName + "." + endpoint + "/" + objectName;
        } finally {
            ossClient.shutdown();
        }
    }
}

3. MyBatis动态SQL应用

SQL提供类实现复杂查询

class RepairManagerSqlProvider {
    public String selectByCondition(...) {
        return new SQL() {{
            SELECT("planId, name, code, fault_code as faultCode...");
            FROM("repairmanager");
            if (deviceType != null) {
                WHERE("type LIKE CONCAT('%', #{deviceType}, '%')");
            }
            if (status != null) {
                WHERE("status = #{status}");
            }
            ORDER_BY("create_time DESC");
        }}.toString() + " LIMIT #{offset}, #{pageSize}";
    }
}

优势

  • 动态生成SQL语句
  • 避免SQL注入风险
  • 灵活的查询条件组合

关键技术点总结

  1. RESTful API设计

    • 合理使用HTTP方法(POST/PUT/GET/DELETE)
    • 规范的URL命名(/api/repair)
    • 一致的响应格式(Result)
  2. 分页查询优化

    • 计算总数和分页数据分离
    • 使用LIMIT实现物理分页
    • 支持多条件筛选
  3. 文件上传方案

    • 本地存储与云存储结合
    • 文件名唯一性处理
    • 大文件上传优化(分片上传)
  4. 状态管理

    • 明确的工单状态流转(0-待处理→1-处理中→2-已完成)
    • 状态字段的规范化设计
  5. 异常处理

    • 统一的错误响应格式
    • 详细的错误信息提示
    • 事务管理关键操作

学习收获

通过这个模块的开发,我深入掌握了以下技术:

  1. Spring MVC文件处理机制

    • MultipartFile接口的使用
    • 文件上传大小配置
    • 文件类型校验
  2. 云存储集成

    • 阿里云OSS SDK的使用
    • 访问权限控制
    • 文件URL生成策略
  3. 复杂查询实现

    • MyBatis动态SQL构建
    • 分页查询性能优化
    • 多表关联查询技巧
  4. API设计原则

    • RESTful最佳实践
    • 版本控制考虑
    • 文档化(Swagger集成)

性能优化建议

  1. 分页查询

    • 添加合适索引提高查询效率
    • 考虑使用PageHelper等成熟分页插件
  2. 文件上传

    • 实现断点续传功能
    • 添加文件MD5校验
    • 限制上传文件类型和大小
  3. 缓存策略

    • 高频访问数据加入Redis缓存
    • 合理设置缓存过期时间

这个维修管理模块的开发,让我对Spring Boot在企业级应用中的使用有了更深入的理解,特别是在文件处理和复杂业务逻辑实现方面积累了宝贵经验。

posted @ 2025-05-13 22:05  haoyinuo  阅读(13)  评论(0)    收藏  举报