团队项目个人博客1.0

我今天建好了安全风险项点模块的数据库表:
CREATE TABLE risk_management (
id VARCHAR(20) PRIMARY KEY COMMENT '编号,主键',
responsible_department VARCHAR(50) NOT NULL COMMENT '责任部门/工区',
risk_code VARCHAR(30) NOT NULL COMMENT '风险编码',
professional_system VARCHAR(50) COMMENT '专业系统',
risk_category VARCHAR(50) NOT NULL COMMENT '风险类别',
risk_project VARCHAR(100) NOT NULL COMMENT '风险项目',
risk_point VARCHAR(200) NOT NULL COMMENT '风险项点',
risk_level VARCHAR(10) NOT NULL COMMENT '风险等级',
harm_degree TEXT COMMENT '危害程度描述',
control_measures TEXT NOT NULL COMMENT '管控措施',
control_position VARCHAR(50) COMMENT '管控岗位',
control_person VARCHAR(50) COMMENT '管控人员',
quantitative_requirements TEXT COMMENT '量化要求',
entry_date DATE NOT NULL COMMENT '录入日期',
audit_status VARCHAR(20) DEFAULT '待审核' COMMENT '审核状态(待审核/已审核/已驳回)',
audit_date DATE COMMENT '审核日期',

INDEX idx_department (responsible_department),
INDEX idx_risk_code (risk_code),
INDEX idx_risk_level (risk_level),
INDEX idx_audit_status (audit_status),
INDEX idx_entry_date (entry_date)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='风险管控信息表';

以及实现手动录入安全风险项点和部分增删改查功能:
package com.example.riskmanagement.controller;

import com.example.riskmanagement.entity.RiskManagement;
import com.example.riskmanagement.service.RiskManagementService;
import com.example.riskmanagement.vo.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/api/risk")
public class RiskManagementController {

@Autowired
private RiskManagementService riskService;

// 添加风险项
@PostMapping
public ResultVO<String> addRisk(@RequestBody RiskManagement risk) {
    String warning = riskService.addRiskWithCheck(risk);
    if (warning != null) {
        return ResultVO.success(warning);
    }
    return ResultVO.success("风险项添加成功");
}

// 多条件查询
@GetMapping
public ResultVO<List<RiskManagement>> queryRisks(
        @RequestParam(required = false) String department,
        @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
        @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate,
        @RequestParam(required = false) String system,
        @RequestParam(required = false) String category,
        @RequestParam(required = false) String level,
        @RequestParam(required = false) String harmDegree) {
    List<RiskManagement> risks = riskService.queryRisks(
            department, startDate, endDate, system, category, level, harmDegree);
    return ResultVO.success(risks);
}

// 获取风险统计
@GetMapping("/statistics/department")
public ResultVO<List<Map<String, Object>>> getDepartmentStatistics() {
    return ResultVO.success(riskService.getRiskStatisticsByDepartment());
}

// 获取风险趋势
@GetMapping("/statistics/trend")
public ResultVO<List<Map<String, Object>>> getRiskTrend() {
    return ResultVO.success(riskService.getRiskTrendAnalysis());
}

// 批量导入
@PostMapping("/import")
public ResultVO<Integer> importRisks(@RequestParam("file") MultipartFile file) {
    // 实际项目中需要解析Excel文件为RiskManagement列表
    // List<RiskManagement> risks = parseExcel(file);
    // int count = riskService.batchImport(risks);
    // return ResultVO.success(count);
    return ResultVO.success(0);
}

// 批量导出
@GetMapping("/export")
public void exportRisks(
        @RequestParam(required = false) String department,
        @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
        @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate,
        HttpServletResponse response) throws IOException {
    riskService.exportRisks(response, department, startDate, endDate);
}

// 审核风险项
@PutMapping("/{id}/audit")
public ResultVO<Boolean> auditRisk(
        @PathVariable String id,
        @RequestParam String status) {
    int result = riskService.auditRisk(id, status);
    return ResultVO.success(result > 0);
}

// 更新风险项
@PutMapping("/{id}")
public ResultVO<Boolean> updateRisk(
        @PathVariable String id,
        @RequestBody RiskManagement risk) {
    risk.setId(id);
    int result = riskService.updateRisk(risk);
    return ResultVO.success(result > 0);
}

// 删除风险项
@DeleteMapping("/{id}")
public ResultVO<Boolean> deleteRisk(@PathVariable String id) {
    int result = riskService.deleteRisk(id);
    return ResultVO.success(result > 0);
}

}

package com.example.riskmanagement.service.impl;

import com.example.riskmanagement.entity.RiskManagement;
import com.example.riskmanagement.mapper.RiskManagementMapper;
import com.example.riskmanagement.service.RiskManagementService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Service
public class RiskManagementServiceImpl implements RiskManagementService {

@Autowired
private RiskManagementMapper riskManagementMapper;

@Override
public String checkSimilarRisks(RiskManagement risk) {
    List<RiskManagement> similarRisks = riskManagementMapper.findSimilarRisks(
            risk.getRiskProject(), risk.getRiskPoint());

    if (!similarRisks.isEmpty()) {
        StringBuilder sb = new StringBuilder("本次录入内容与风险库中以下内容相似或接近,建议进行合并:");
        for (RiskManagement similar : similarRisks) {
            sb.append("\n编号 ").append(similar.getId())
                    .append(": ").append(similar.getRiskProject());
        }
        return sb.toString();
    }
    return null;
}

@Override
@Transactional
public String addRiskWithCheck(RiskManagement risk) {
    String warning = checkSimilarRisks(risk);
    risk.setEntryDate(new Date());
    risk.setAuditStatus("待审核");
    riskManagementMapper.insert(risk);
    return warning;
}

@Override
public List<RiskManagement> queryRisks(String department, Date startDate, Date endDate,
                                       String system, String category, String level,
                                       String harmDegree) {
    return riskManagementMapper.findByConditions(
            department, startDate, endDate, system, category, level, harmDegree);
}

@Override
public List<Map<String, Object>> getRisksNeedUpdate(int days, String riskLevel) {
    return riskManagementMapper.findRisksNeedUpdate(days, riskLevel);
}

@Override
@Transactional
public int batchImport(List<RiskManagement> risks) {
    int count = 0;
    for (RiskManagement risk : risks) {
        if (risk.getRiskProject() == null || risk.getRiskProject().isEmpty() ||
                risk.getRiskPoint() == null || risk.getRiskPoint().isEmpty()) {
            continue;
        }

        if (risk.getEntryDate() == null) {
            risk.setEntryDate(new Date());
        }
        if (risk.getAuditStatus() == null || risk.getAuditStatus().isEmpty()) {
            risk.setAuditStatus("待审核");
        }

        riskManagementMapper.insert(risk);
        count++;
    }
    return count;
}

@Override
public void exportRisks(HttpServletResponse response, String department,
                        Date startDate, Date endDate) throws IOException {
    List<RiskManagement> risks = riskManagementMapper.findByConditions(
            department, startDate, endDate, null, null, null, null);

    response.setContentType("application/vnd.ms-excel");
    response.setCharacterEncoding("utf-8");
    String fileName = URLEncoder.encode("风险数据导出", "UTF-8");
    response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".csv");

    try (PrintWriter writer = response.getWriter()) {
        writer.println("编号,责任部门,风险编码,专业系统,风险类别,风险项目,风险项点,风险等级,危害程度,管控措施,管控岗位,管控人员,量化要求,录入日期,审核状态,审核日期");

        for (RiskManagement risk : risks) {
            writer.println(String.join(",",
                    risk.getId(),
                    risk.getResponsibleDepartment(),
                    risk.getRiskCode(),
                    risk.getProfessionalSystem(),
                    risk.getRiskCategory(),
                    risk.getRiskProject(),
                    risk.getRiskPoint(),
                    risk.getRiskLevel(),
                    risk.getHarmDegree(),
                    risk.getControlMeasures(),
                    risk.getControlPosition(),
                    risk.getControlPerson(),
                    risk.getQuantitativeRequirements(),
                    new SimpleDateFormat("yyyy-MM-dd").format(risk.getEntryDate()),
                    risk.getAuditStatus(),
                    risk.getAuditDate() != null ? new SimpleDateFormat("yyyy-MM-dd").format(risk.getAuditDate()) : ""
            ));
        }
    }
}

@Override
public List<Map<String, Object>> getRiskStatisticsByDepartment() {
    return riskManagementMapper.countByDepartment();
}

@Override
public List<Map<String, Object>> getRiskTrendAnalysis() {
    return riskManagementMapper.trendAnalysis();
}

@Override
public RiskManagement getById(String id) {
    // 需要先在mapper中添加此方法
    return riskManagementMapper.selectById(id);
}

@Override
@Transactional
public int updateRisk(RiskManagement risk) {
    return riskManagementMapper.update(risk);
}

@Override
@Transactional
public int deleteRisk(String id) {
    return riskManagementMapper.delete(id);
}

@Override
@Transactional
public int auditRisk(String id, String status) {
    return riskManagementMapper.updateAuditStatus(id, status);
}

}

今天的总查询出了点问题,页面显示不出来数据库表中的数据,最后只能先把它这部分删掉了,明天再看看怎么个事,下面是删除总查询前的截图

posted @ 2025-04-14 19:44  鱼一直摸  阅读(26)  评论(0)    收藏  举报