团队项目计划会议博客1.0
团队计划backlog:
Backlog:安全管理子系统
- 安全风险项点模块
• 任务 1.1:支持手动录入安全风险项点
o 描述:实现手动录入安全风险项点功能,支持录入字段包括编号、责任部门/工区、风险编码等。
o 优先级:高
o 开发阶段:需求分析 → 设计 → 开发 → 测试
• 任务 1.2:支持批量导入安全风险项点
o 描述:实现批量导入功能,支持从文件中导入安全风险项点数据。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试
• 任务 1.3:自动判断风险库中相似内容
o 描述:在录入过程中,自动判断风险库中是否有相似内容,并提示合并。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试
• 任务 1.4:支持数据筛选功能
o 描述:支持通过责任部门/工区、录入日期等字段进行数据筛选。
o 优先级:高
o 开发阶段:需求分析 → 设计 → 开发 → 测试
• 任务 1.5:支持查询、编辑、删除、审核、导出功能
o 描述:实现查询、添加、编辑、删除、审核、导出等基础功能。
o 优先级:高
o 开发阶段:需求分析 → 设计 → 开发 → 测试 - 安全风险维护模块
• 任务 2.1:支持风险项历史版本追溯与对比
o 描述:实现历史版本的记录与对比功能,记录更新人、更新时间、原值/新值等信息。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试 - 安全风险统计模块
• 任务 3.1:从公司、部门、工区、班组四个层面展示风险数据
o 描述:实现从不同层面展示风险总数、重大安全风险数等数据。
o 优先级:高
o 开发阶段:需求分析 → 设计 → 开发 → 测试
• 任务 3.2:按多维度展示相关数据
o 描述:支持按“风险等级”、“管控进度”等维度展示数据。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试
• 任务 3.3:定期自动生成《安全风险分级管控态势分析报告》
o 描述:实现定期生成报告功能,包含同比、环比分析。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试 - 安全隐患项点模块
• 任务 4.1:支持手动录入安全隐患项点
o 描述:实现手动录入安全隐患项点功能,支持录入字段包括编号、责任部门/工区、隐患类别等。
o 优先级:高
o 开发阶段:需求分析 → 设计 → 开发 → 测试
• 任务 4.2:支持批量导入安全隐患项点
o 描述:实现批量导入功能,支持从文件中导入安全隐患项点数据。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试
• 任务 4.3:自动判断隐患库中相似内容
o 描述:在录入过程中,自动判断隐患库中是否有相似内容,并提示合并。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试
• 任务 4.4:支持数据筛选功能
o 描述:支持通过责任部门/工区、录入日期等字段进行数据筛选。
o 优先级:高
o 开发阶段:需求分析 → 设计 → 开发 → 测试
• 任务 4.5:支持查询、编辑、删除、审核、销号、导出功能
o 描述:实现查询、添加、编辑、删除、审核、销号、导出等基础功能。
o 优先级:高
o 开发阶段:需求分析 → 设计 → 开发 → 测试 - 安全隐患维护模块
• 任务 5.1:支持隐患项历史版本追溯与对比 -述 :实现历史版本的记录与对比功能,记录更新人、更新时间、原值/新值等信息。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试 - 安全隐患统计模块
• 任务 6.1:从公司、部门、工区、班组四个层面展示隐患数据
o 描述:实现从不同层面展示隐患总数、一般安全隐患数等数据。
o 优先级:高
o 开发阶段:需求分析 → 设计 → 开发 → 测试
• 任务 6.2:按多维度展示相关数据
o 描述:支持按“隐患类别”、“隐患等级”、“销号状态”等维度展示数据。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试
• 任务 6.3:定期自动生成《安全隐患排查治理态势分析报告》
o 描述:实现定期生成报告功能,包含同比、环比分析。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试 - 上级安全检查模块
• 任务 7.1:支持手动录入检查信息
o 描述:实现检查人手动录入检查日期、陪同人员、检查地点等内容。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试
• 任务 7.2:支持办理人录入整改信息
o 描述:实现办理人手动录入完成日期、整改措施及整改照片等内容。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试 - 公司安全检查模块
• 任务 8.1:支持定期发送现场安全检查任务
o 描述:实现定期发送检查任务功能。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试
• 任务 8.2:支持手动录入检查信息
o 描述:实现检查人手动录入检查日期、陪同人员、检查地点等内容。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试
• 任务 8.3:支持办理人录入整改信息
o 描述:实现办理人手动录入完成日期、整改措施及整改照片等内容。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试 - 星级评估管理模块
• 任务 9.1:支持员工查看星级评估结果
o 描述:实现员工查看每季度星级评估考核结果功能。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试
• 任务 9.2:支持历史成绩对比
o 描述:实现员工历史成绩对比功能,包含同比、环比分析。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试 - 安全管理考核模块
• 任务 10.1:支持创建、编辑员工考核信息
o 描述:实现创建、编辑员工考核信息功能。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试
• 任务 10.2:支持记录加、减分考核信息
o 描述:实现记录员工加、减分考核信息功能。
o 优先级:中
o 开发阶段:需求分析 → 设计 → 开发 → 测试
以下是任务看板照片



会议照片:

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);
}
}

浙公网安备 33010602011771号