风险点、危险源、月度、隐患排查、排查执行bug修复

This commit is contained in:
guoshengxiong 2025-06-17 10:53:42 +08:00
parent 783232ca11
commit 62f4aa4096
6 changed files with 74 additions and 21 deletions

View File

@ -23,6 +23,7 @@ import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore; import springfox.documentation.annotations.ApiIgnore;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -146,4 +147,20 @@ public class RiskListMonthlyController {
return Result.ok(); return Result.ok();
} }
@ApiOperation(value = "批量删除月度清单", notes = "批量删除月度清单", httpMethod = "POST")
@ApiImplicitParam(name = "ids", value = "月度清单ID字符串多个以,分割)", paramType = "body", required = true, dataType = "String")
@PostMapping(value = "/deleteBatch")
public Result deleteBatch(@ApiIgnore @RequestBody HashMap<String, Object> paramMap) {
String ids = MapUtils.getString(paramMap, "ids");
Result result = new Result<>();
if (ids == null || "".equals(ids.trim())) {
result.error500("参数不识别!");
} else {
riskListMonthlyService.removeByIds(Arrays.asList(ids.split(",")));
Result.success("删除成功!");
}
return result;
}
} }

View File

@ -319,10 +319,13 @@ public class RiskListPointController {
.eq(StrUtil.isNotBlank(monthlyId), RiskListPoint::getMonthlyId, monthlyId) .eq(StrUtil.isNotBlank(monthlyId), RiskListPoint::getMonthlyId, monthlyId)
).stream().map(RiskListPoint::getId).collect(Collectors.toList()); ).stream().map(RiskListPoint::getId).collect(Collectors.toList());
int pointCount = (int) pointIds.size(); int pointCount = (int) pointIds.size();
int sourceCount = riskListSourceService.count(new LambdaQueryWrapper<RiskListSource>() int sourceCount = 0;
.eq(RiskListSource::getProjectSn, projectSn) if (CollUtil.isNotEmpty(pointIds)) {
.in(StrUtil.isNotBlank(monthlyId), RiskListSource::getPointId, pointIds) sourceCount = riskListSourceService.count(new LambdaQueryWrapper<RiskListSource>()
); .eq(RiskListSource::getProjectSn, projectSn)
.in(StrUtil.isNotBlank(monthlyId), RiskListSource::getPointId, pointIds)
);
}
CountRiskNumVo vo = new CountRiskNumVo(); CountRiskNumVo vo = new CountRiskNumVo();
vo.setRiskPointNum(pointCount); vo.setRiskPointNum(pointCount);
vo.setHazardSourceNum(sourceCount); vo.setHazardSourceNum(sourceCount);

View File

@ -12,17 +12,16 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.ZipUtil; import cn.hutool.core.util.ZipUtil;
import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig; import cn.hutool.extra.qrcode.QrConfig;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gexin.fastjson.serializer.SerializerFeature; import com.gexin.fastjson.serializer.SerializerFeature;
import com.zhgd.annotation.OperLog; import com.zhgd.annotation.OperLog;
import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.jeecg.common.execption.OpenAlertException; import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.xmgl.modules.risk.entity.RiskListDetail;
import com.zhgd.xmgl.modules.risk.entity.RiskListPoint; import com.zhgd.xmgl.modules.risk.entity.RiskListPoint;
import com.zhgd.xmgl.modules.risk.entity.RiskListSource; import com.zhgd.xmgl.modules.risk.entity.RiskListSource;
import com.zhgd.xmgl.modules.risk.entity.vo.RegionV2Vo; import com.zhgd.xmgl.modules.risk.entity.vo.RegionV2Vo;
import com.zhgd.xmgl.modules.risk.entity.vo.RiskListDetailVo;
import com.zhgd.xmgl.modules.risk.entity.vo.RiskListSourceVo; import com.zhgd.xmgl.modules.risk.entity.vo.RiskListSourceVo;
import com.zhgd.xmgl.modules.risk.entity.vo.RiskUndoneVo; import com.zhgd.xmgl.modules.risk.entity.vo.RiskUndoneVo;
import com.zhgd.xmgl.modules.risk.service.*; import com.zhgd.xmgl.modules.risk.service.*;
@ -283,7 +282,7 @@ public class RiskListSourceController {
* @param param * @param param
* @param dir * @param dir
*/ */
public void generateRegionQrCode(HashMap<String, Object> param, String dir) { private void generateRegionQrCode(HashMap<String, Object> param, String dir) {
String projectSn = MapUtils.getString(param, "projectSn"); String projectSn = MapUtils.getString(param, "projectSn");
List<String> regionIds = StrUtil.split(MapUtils.getString(param, "regionIds"), ","); List<String> regionIds = StrUtil.split(MapUtils.getString(param, "regionIds"), ",");
List<RegionV2Vo> regionV2Vos = regionV2Service.queryList(new MapBuilder<String, Object>() List<RegionV2Vo> regionV2Vos = regionV2Service.queryList(new MapBuilder<String, Object>()
@ -291,8 +290,8 @@ public class RiskListSourceController {
.build()); .build());
regionV2Vos.stream().filter(regionV2Vo -> regionIds.contains(regionV2Vo.getId() + "")).forEach(regionV2Vo -> { regionV2Vos.stream().filter(regionV2Vo -> regionIds.contains(regionV2Vo.getId() + "")).forEach(regionV2Vo -> {
// 1. 创建空白图片 (白底) // 1. 创建空白图片 (白底)
int width = 600; int width = 1200;
int height = 800; int height = 1067;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics(); Graphics2D g = image.createGraphics();
@ -308,7 +307,7 @@ public class RiskListSourceController {
String title = "" + regionV2Vo.getRegionName() + "】风险分级管控清单"; String title = "" + regionV2Vo.getRegionName() + "】风险分级管控清单";
Font titleFont = new Font("微软雅黑", Font.BOLD, 48); Font titleFont = new Font("微软雅黑", Font.BOLD, 48);
g.setFont(titleFont); g.setFont(titleFont);
g.setColor(Color.BLACK); g.setColor(Color.BLACK); // 标题保持黑色
// 计算标题居中位置 // 计算标题居中位置
int titleWidth = g.getFontMetrics().stringWidth(title); int titleWidth = g.getFontMetrics().stringWidth(title);
@ -318,8 +317,9 @@ public class RiskListSourceController {
// 3. 绘制小号字体居中说明文字 // 3. 绘制小号字体居中说明文字
String description = "区域:" + regionV2Vo.getFullPath(); String description = "区域:" + regionV2Vo.getFullPath();
Font descFont = new Font("宋体", Font.PLAIN, 28); Font descFont = new Font("宋体", Font.BOLD, 32);
g.setFont(descFont); g.setFont(descFont);
g.setColor(Color.BLACK); // 说明文字保持黑色
// 处理多行文本 // 处理多行文本
String[] lines = description.split("\n"); String[] lines = description.split("\n");
@ -333,9 +333,27 @@ public class RiskListSourceController {
} }
// 4. 生成并绘制居中二维码 // 4. 生成并绘制居中二维码
int qrSize = 200; // 二维码尺寸 int qrSize = 600; // 二维码尺寸
int qrX = (width - qrSize) / 2; int qrX = (width - qrSize) / 2;
int qrY = startY + (lines.length * lineHeight) + 50; int qrY = startY + (lines.length * lineHeight) + 100;
// 计算虚线位置在描述文字和二维码之间
int dashY = startY + (lines.length * lineHeight) + 25; // 位于文字和二维码中间位置
// --- 虚线颜色修改在这里 ---
g.setColor(Color.GRAY); // 将绘制颜色设置为灰色
// --- 虚线颜色修改结束 ---
// 设置虚线样式10像素实线 + 10像素空白
Stroke dashed = new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL,
0, new float[]{10, 10}, 0);
g.setStroke(dashed);
g.drawLine(0, dashY, width, dashY);
// 恢复实线样式和黑色避免影响后续绘制如二维码如果还有边框等
g.setStroke(new BasicStroke());
g.setColor(Color.BLACK); // 恢复黑色因为二维码默认是黑色的
// --- 虚线绘制结束 ---
// 使用Hutool生成二维码图片 // 使用Hutool生成二维码图片
QrConfig config = new QrConfig(qrSize, qrSize); QrConfig config = new QrConfig(qrSize, qrSize);
@ -349,9 +367,15 @@ public class RiskListSourceController {
g.drawImage(qrImage, qrX, qrY, null); g.drawImage(qrImage, qrX, qrY, null);
// 6. 保存图片 // 6. 保存图片
File outputFile = new File(dir, description + ".png"); // 确保目录存在否则可能报错
File outputDir = new File(dir);
if (!outputDir.exists()) {
outputDir.mkdirs(); // 创建所有不存在的父目录
}
File outputFile = new File(outputDir, regionV2Vo.getFullPath() + ".png");
ImgUtil.write(image, outputFile); ImgUtil.write(image, outputFile);
// 释放资源 // 释放资源
g.dispose(); g.dispose();
System.out.println("模板图片已生成: " + outputFile.getAbsolutePath()); System.out.println("模板图片已生成: " + outputFile.getAbsolutePath());
@ -367,14 +391,15 @@ public class RiskListSourceController {
@PostMapping(value = "/identifySource") @PostMapping(value = "/identifySource")
public Result identifySource(@RequestBody @Validate HashMap<String, Object> param) { public Result identifySource(@RequestBody @Validate HashMap<String, Object> param) {
List<RiskListSource> addList = new ArrayList<>(); List<RiskListSource> addList = new ArrayList<>();
List<RiskListDetail> details = riskListDetailService.list(new LambdaQueryWrapper<RiskListDetail>() List<RiskListDetailVo> details = riskListDetailService.queryList(new MapBuilder<String, Object>()
.in(RiskListDetail::getId, StrUtil.split(MapUtils.getString(param, "detailIds"), ","))); .put("detailIds", MapUtils.getString(param, "detailIds"))
.build());
Long pointId = MapUtils.getLong(param, "pointId"); Long pointId = MapUtils.getLong(param, "pointId");
RiskListPoint point = riskListPointService.getById(pointId); RiskListPoint point = riskListPointService.getById(pointId);
if (point == null) { if (point == null) {
throw new OpenAlertException("管控清单风险点不存在"); throw new OpenAlertException("管控清单风险点不存在");
} }
for (RiskListDetail detail : details) { for (RiskListDetailVo detail : details) {
RiskListSource source = new RiskListSource(); RiskListSource source = new RiskListSource();
BeanUtils.copyProperties(detail, source); BeanUtils.copyProperties(detail, source);
source.setId(null); source.setId(null);
@ -386,6 +411,11 @@ public class RiskListSourceController {
source.setEffectiveTimeEnd(source.getEffectiveTimeEnd()); source.setEffectiveTimeEnd(source.getEffectiveTimeEnd());
source.setIdentificationTime(new Date()); source.setIdentificationTime(new Date());
source.setProjectSn(point.getProjectSn()); source.setProjectSn(point.getProjectSn());
String[] pathSplit = detail.getFullPath().split("/");
if (pathSplit.length >= 4) {
source.setSubProjectWorkTask(pathSplit[3]);
}
source.setWorkNameContent(StrUtils.getLastSegments(detail.getFullPath(), 4));
addList.add(source); addList.add(source);
} }
if (CollUtil.isNotEmpty(addList)) { if (CollUtil.isNotEmpty(addList)) {

View File

@ -236,14 +236,14 @@ public class RiskListSource implements Serializable {
@ApiModelProperty(value = "规格型号") @ApiModelProperty(value = "规格型号")
private java.lang.String specificationsModel; private java.lang.String specificationsModel;
/** /**
* 分部分项工程/作业任务 * 分部分项工程/作业任务第4项
*/ */
@ApiModelProperty(value = "分部分项工程/作业任务") @ApiModelProperty(value = "分部分项工程/作业任务第4项")
private java.lang.String subProjectWorkTask; private java.lang.String subProjectWorkTask;
/** /**
* 作业活动名称及内容 * 作业活动名称及内容第5项及以后
*/ */
@ApiModelProperty(value = "作业活动名称及内容") @ApiModelProperty(value = "作业活动名称及内容第5项及以后")
private java.lang.String workNameContent; private java.lang.String workNameContent;
/** /**
* 辨识人名称 * 辨识人名称

View File

@ -12,6 +12,9 @@
and t.library_id in (select id from risk_list_library where find_in_set(#{param.containLibraryId},ancestors) and t.library_id in (select id from risk_list_library where find_in_set(#{param.containLibraryId},ancestors)
or id=#{param.containLibraryId}) or id=#{param.containLibraryId})
</if> </if>
<if test="param.detailIds != null and param.detailIds != ''">
and find_in_set(t.id , #{param.detailIds})
</if>
)t )t
${ew.customSqlSegment} ${ew.customSqlSegment}
</select> </select>