add(ems): 添加报警规则措施步骤及图片相关功能

- 新增 EmsAlarmActionStep 和 EmsAlarmActionStepImage 模型类
- 实现报警规则措施步骤的 CRUD 操作
- 添加措施步骤图片的 CRUD 操作
- 开发批量保存措施步骤的功能,包括删除现有步骤和图片并保存新的步骤和图片
- 提供根据报警规则 ID 和报警数据信息查询措施步骤列表的接口
boardTest
zch 4 weeks ago
parent 5fe810b279
commit 3ced9d3f2a

@ -0,0 +1,70 @@
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源
# master:
# url: jdbc:mysql://10.42.0.1:4000/tao_iot?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
# username: root
# password: haiwei@123
# 主库数据源
master:
url: jdbc:mysql://1.13.177.47:3306/tao_iot?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: Haiwei123456
# 从库数据源
slave:
# 从数据源开关/默认关闭
enabled: false
url:
username:
password:
# 初始连接数
initialSize: 10
# 最小连接池数量
minIdle: 20
# 最大连接池数量
maxActive: 200
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置连接超时时间
connectTimeout: 30000
# 配置网络超时时间
socketTimeout: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: true
testOnReturn: false
# 缓存游标默认false
poolPreparedStatements: true
# 缓存游标最大数量,默认-1不缓存
max-open-prepared-statements: 50
webStatFilter:
enabled: true
statViewServlet:
enabled: true
# 设置白名单,不填则允许所有访问
allow:
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username: ruoyi
login-password: 123456
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 2000
merge-sql: true
wall:
config:
multi-statement-allow: true

@ -0,0 +1,139 @@
package com.os.ems.base.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.os.common.annotation.Log;
import com.os.common.core.controller.BaseController;
import com.os.common.core.domain.AjaxResult;
import com.os.common.enums.BusinessType;
import com.os.ems.base.domain.EmsAlarmActionStep;
import com.os.ems.base.service.IEmsAlarmActionStepService;
import com.os.common.utils.poi.ExcelUtil;
import com.os.common.core.page.TableDataInfo;
/**
* Controller
*
* @author zch
* @date 2025-05-29
*/
@RestController
@RequestMapping("/ems/base/emsAlarmActionStep")
public class EmsAlarmActionStepController extends BaseController
{
@Autowired
private IEmsAlarmActionStepService emsAlarmActionStepService;
/**
*
*/
@PreAuthorize("@ss.hasPermi('ems/base:emsAlarmActionStep:list')")
@GetMapping("/list")
public TableDataInfo list(EmsAlarmActionStep emsAlarmActionStep)
{
startPage();
List<EmsAlarmActionStep> list = emsAlarmActionStepService.selectEmsAlarmActionStepList(emsAlarmActionStep);
return getDataTable(list);
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('ems/base:emsAlarmActionStep:export')")
@Log(title = "报警规则具体措施步骤", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, EmsAlarmActionStep emsAlarmActionStep)
{
List<EmsAlarmActionStep> list = emsAlarmActionStepService.selectEmsAlarmActionStepList(emsAlarmActionStep);
ExcelUtil<EmsAlarmActionStep> util = new ExcelUtil<EmsAlarmActionStep>(EmsAlarmActionStep.class);
util.exportExcel(response, list, "报警规则具体措施步骤数据");
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('ems/base:emsAlarmActionStep:query')")
@GetMapping(value = "/{objId}")
public AjaxResult getInfo(@PathVariable("objId") String objId)
{
return success(emsAlarmActionStepService.selectEmsAlarmActionStepByObjId(objId));
}
/**
* ID
*/
@PreAuthorize("@ss.hasPermi('ems/base:emsAlarmActionStep:query')")
@GetMapping(value = "/rule/{ruleObjId}")
public AjaxResult getStepsByRuleId(@PathVariable("ruleObjId") String ruleObjId)
{
List<EmsAlarmActionStep> steps = emsAlarmActionStepService.selectEmsAlarmActionStepByRuleObjId(ruleObjId);
return success(steps);
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('ems/base:emsAlarmActionStep:add')")
@Log(title = "报警规则具体措施步骤", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody EmsAlarmActionStep emsAlarmActionStep)
{
emsAlarmActionStep.setCreateBy(getUsername());
return toAjax(emsAlarmActionStepService.insertEmsAlarmActionStep(emsAlarmActionStep));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('ems/base:emsAlarmActionStep:edit')")
@Log(title = "报警规则具体措施步骤", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody EmsAlarmActionStep emsAlarmActionStep)
{
emsAlarmActionStep.setUpdateBy(getUsername());
return toAjax(emsAlarmActionStepService.updateEmsAlarmActionStep(emsAlarmActionStep));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('ems/base:emsAlarmActionStep:remove')")
@Log(title = "报警规则具体措施步骤", businessType = BusinessType.DELETE)
@DeleteMapping("/{objIds}")
public AjaxResult remove(@PathVariable String[] objIds)
{
return toAjax(emsAlarmActionStepService.deleteEmsAlarmActionStepByObjIds(objIds));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('ems/base:emsAlarmActionStep:query')")
@GetMapping(value = "/alarm/{monitorId}/{cause}")
public AjaxResult getStepsByAlarmInfo(@PathVariable("monitorId") String monitorId, @PathVariable("cause") String cause)
{
List<EmsAlarmActionStep> steps = emsAlarmActionStepService.selectActionStepsByAlarmInfo(monitorId, cause);
return success(steps);
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('ems/base:emsAlarmActionStep:edit')")
@Log(title = "批量保存措施步骤", businessType = BusinessType.UPDATE)
@PostMapping(value = "/batchSave/{ruleObjId}")
public AjaxResult batchSaveActionSteps(@PathVariable("ruleObjId") String ruleObjId, @RequestBody List<EmsAlarmActionStep> stepList)
{
return toAjax(emsAlarmActionStepService.batchSaveActionSteps(ruleObjId, stepList));
}
}

@ -0,0 +1,106 @@
package com.os.ems.base.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.os.common.annotation.Log;
import com.os.common.core.controller.BaseController;
import com.os.common.core.domain.AjaxResult;
import com.os.common.enums.BusinessType;
import com.os.ems.base.domain.EmsAlarmActionStepImage;
import com.os.ems.base.service.IEmsAlarmActionStepImageService;
import com.os.common.utils.poi.ExcelUtil;
import com.os.common.core.page.TableDataInfo;
/**
* Controller
*
* @author zch
* @date 2025-05-29
*/
@RestController
@RequestMapping("/ems/base/emsAlarmActionStepImage")
public class EmsAlarmActionStepImageController extends BaseController
{
@Autowired
private IEmsAlarmActionStepImageService emsAlarmActionStepImageService;
/**
*
*/
@PreAuthorize("@ss.hasPermi('ems/base:emsAlarmActionStepImage:list')")
@GetMapping("/list")
public TableDataInfo list(EmsAlarmActionStepImage emsAlarmActionStepImage)
{
startPage();
List<EmsAlarmActionStepImage> list = emsAlarmActionStepImageService.selectEmsAlarmActionStepImageList(emsAlarmActionStepImage);
return getDataTable(list);
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('ems/base:emsAlarmActionStepImage:export')")
@Log(title = "报警措施步骤图片", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, EmsAlarmActionStepImage emsAlarmActionStepImage)
{
List<EmsAlarmActionStepImage> list = emsAlarmActionStepImageService.selectEmsAlarmActionStepImageList(emsAlarmActionStepImage);
ExcelUtil<EmsAlarmActionStepImage> util = new ExcelUtil<EmsAlarmActionStepImage>(EmsAlarmActionStepImage.class);
util.exportExcel(response, list, "报警措施步骤图片数据");
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('ems/base:emsAlarmActionStepImage:query')")
@GetMapping(value = "/{objId}")
public AjaxResult getInfo(@PathVariable("objId") String objId)
{
return success(emsAlarmActionStepImageService.selectEmsAlarmActionStepImageByObjId(objId));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('ems/base:emsAlarmActionStepImage:add')")
@Log(title = "报警措施步骤图片", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody EmsAlarmActionStepImage emsAlarmActionStepImage)
{
emsAlarmActionStepImage.setCreateBy(getUsername());
return toAjax(emsAlarmActionStepImageService.insertEmsAlarmActionStepImage(emsAlarmActionStepImage));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('ems/base:emsAlarmActionStepImage:edit')")
@Log(title = "报警措施步骤图片", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody EmsAlarmActionStepImage emsAlarmActionStepImage)
{
emsAlarmActionStepImage.setUpdateBy(getUsername());
return toAjax(emsAlarmActionStepImageService.updateEmsAlarmActionStepImage(emsAlarmActionStepImage));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('ems/base:emsAlarmActionStepImage:remove')")
@Log(title = "报警措施步骤图片", businessType = BusinessType.DELETE)
@DeleteMapping("/{objIds}")
public AjaxResult remove(@PathVariable String[] objIds)
{
return toAjax(emsAlarmActionStepImageService.deleteEmsAlarmActionStepImageByObjIds(objIds));
}
}

@ -0,0 +1,98 @@
package com.os.ems.base.domain;
import java.util.List;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.os.common.annotation.Excel;
import com.os.common.core.domain.BaseEntity;
/**
* ems_alarm_action_step
*
* @author zch
* @date 2025-05-29
*/
public class EmsAlarmActionStep extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键ID */
private String objId;
/** 关联的报警规则ID (逻辑关联 ems_record_alarm_rule.obj_id) */
@Excel(name = "关联的报警规则ID (逻辑关联 ems_record_alarm_rule.obj_id)")
private String ruleObjId;
/** 步骤顺序从1开始 */
@Excel(name = "步骤顺序从1开始")
private Long stepSequence;
/** 步骤文字描述 */
@Excel(name = "步骤文字描述")
private String description;
/** 步骤关联的图片列表 */
private List<EmsAlarmActionStepImage> stepImages;
public void setObjId(String objId)
{
this.objId = objId;
}
public String getObjId()
{
return objId;
}
public void setRuleObjId(String ruleObjId)
{
this.ruleObjId = ruleObjId;
}
public String getRuleObjId()
{
return ruleObjId;
}
public void setStepSequence(Long stepSequence)
{
this.stepSequence = stepSequence;
}
public Long getStepSequence()
{
return stepSequence;
}
public void setDescription(String description)
{
this.description = description;
}
public String getDescription()
{
return description;
}
public void setStepImages(List<EmsAlarmActionStepImage> stepImages)
{
this.stepImages = stepImages;
}
public List<EmsAlarmActionStepImage> getStepImages()
{
return stepImages;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("objId", getObjId())
.append("ruleObjId", getRuleObjId())
.append("stepSequence", getStepSequence())
.append("description", getDescription())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.toString();
}
}

@ -0,0 +1,102 @@
package com.os.ems.base.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.os.common.annotation.Excel;
import com.os.common.core.domain.BaseEntity;
/**
* ems_alarm_action_step_image
*
* @author zch
* @date 2025-05-29
*/
public class EmsAlarmActionStepImage extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键ID */
private String objId;
/** 关联的措施步骤ID */
@Excel(name = "关联的措施步骤ID")
private String actionStepObjId;
/** 图片URL */
@Excel(name = "图片URL")
private String imageUrl;
/** 图片顺序 */
@Excel(name = "图片顺序")
private Long imageSequence;
/** 图片描述 */
@Excel(name = "图片描述")
private String description;
public void setObjId(String objId)
{
this.objId = objId;
}
public String getObjId()
{
return objId;
}
public void setActionStepObjId(String actionStepObjId)
{
this.actionStepObjId = actionStepObjId;
}
public String getActionStepObjId()
{
return actionStepObjId;
}
public void setImageUrl(String imageUrl)
{
this.imageUrl = imageUrl;
}
public String getImageUrl()
{
return imageUrl;
}
public void setImageSequence(Long imageSequence)
{
this.imageSequence = imageSequence;
}
public Long getImageSequence()
{
return imageSequence;
}
public void setDescription(String description)
{
this.description = description;
}
public String getDescription()
{
return description;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("objId", getObjId())
.append("actionStepObjId", getActionStepObjId())
.append("imageUrl", getImageUrl())
.append("imageSequence", getImageSequence())
.append("description", getDescription())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.toString();
}
}

@ -0,0 +1,61 @@
package com.os.ems.base.mapper;
import java.util.List;
import com.os.ems.base.domain.EmsAlarmActionStepImage;
/**
* Mapper
*
* @author zch
* @date 2025-05-29
*/
public interface EmsAlarmActionStepImageMapper
{
/**
*
*
* @param objId
* @return
*/
public EmsAlarmActionStepImage selectEmsAlarmActionStepImageByObjId(String objId);
/**
*
*
* @param emsAlarmActionStepImage
* @return
*/
public List<EmsAlarmActionStepImage> selectEmsAlarmActionStepImageList(EmsAlarmActionStepImage emsAlarmActionStepImage);
/**
*
*
* @param emsAlarmActionStepImage
* @return
*/
public int insertEmsAlarmActionStepImage(EmsAlarmActionStepImage emsAlarmActionStepImage);
/**
*
*
* @param emsAlarmActionStepImage
* @return
*/
public int updateEmsAlarmActionStepImage(EmsAlarmActionStepImage emsAlarmActionStepImage);
/**
*
*
* @param objId
* @return
*/
public int deleteEmsAlarmActionStepImageByObjId(String objId);
/**
*
*
* @param objIds
* @return
*/
public int deleteEmsAlarmActionStepImageByObjIds(String[] objIds);
}

@ -0,0 +1,79 @@
package com.os.ems.base.mapper;
import java.util.List;
import com.os.ems.base.domain.EmsAlarmActionStep;
import org.apache.ibatis.annotations.Param;
/**
* Mapper
*
* @author zch
* @date 2025-05-29
*/
public interface EmsAlarmActionStepMapper
{
/**
*
*
* @param objId
* @return
*/
public EmsAlarmActionStep selectEmsAlarmActionStepByObjId(String objId);
/**
*
*
* @param emsAlarmActionStep
* @return
*/
public List<EmsAlarmActionStep> selectEmsAlarmActionStepList(EmsAlarmActionStep emsAlarmActionStep);
/**
*
*
* @param emsAlarmActionStep
* @return
*/
public int insertEmsAlarmActionStep(EmsAlarmActionStep emsAlarmActionStep);
/**
*
*
* @param emsAlarmActionStep
* @return
*/
public int updateEmsAlarmActionStep(EmsAlarmActionStep emsAlarmActionStep);
/**
*
*
* @param objId
* @return
*/
public int deleteEmsAlarmActionStepByObjId(String objId);
/**
*
*
* @param objIds
* @return
*/
public int deleteEmsAlarmActionStepByObjIds(String[] objIds);
/**
* ID
*
* @param ruleObjId ID
* @return
*/
public List<EmsAlarmActionStep> selectEmsAlarmActionStepByRuleObjId(String ruleObjId);
/**
*
*
* @param monitorId
* @param cause
* @return
*/
public List<EmsAlarmActionStep> selectActionStepsByAlarmInfo(@Param("monitorId") String monitorId, @Param("cause") String cause);
}

@ -0,0 +1,61 @@
package com.os.ems.base.service;
import java.util.List;
import com.os.ems.base.domain.EmsAlarmActionStepImage;
/**
* Service
*
* @author zch
* @date 2025-05-29
*/
public interface IEmsAlarmActionStepImageService
{
/**
*
*
* @param objId
* @return
*/
public EmsAlarmActionStepImage selectEmsAlarmActionStepImageByObjId(String objId);
/**
*
*
* @param emsAlarmActionStepImage
* @return
*/
public List<EmsAlarmActionStepImage> selectEmsAlarmActionStepImageList(EmsAlarmActionStepImage emsAlarmActionStepImage);
/**
*
*
* @param emsAlarmActionStepImage
* @return
*/
public int insertEmsAlarmActionStepImage(EmsAlarmActionStepImage emsAlarmActionStepImage);
/**
*
*
* @param emsAlarmActionStepImage
* @return
*/
public int updateEmsAlarmActionStepImage(EmsAlarmActionStepImage emsAlarmActionStepImage);
/**
*
*
* @param objIds
* @return
*/
public int deleteEmsAlarmActionStepImageByObjIds(String[] objIds);
/**
*
*
* @param objId
* @return
*/
public int deleteEmsAlarmActionStepImageByObjId(String objId);
}

@ -0,0 +1,87 @@
package com.os.ems.base.service;
import java.util.List;
import com.os.ems.base.domain.EmsAlarmActionStep;
/**
* Service
*
* @author zch
* @date 2025-05-29
*/
public interface IEmsAlarmActionStepService
{
/**
*
*
* @param objId
* @return
*/
public EmsAlarmActionStep selectEmsAlarmActionStepByObjId(String objId);
/**
*
*
* @param emsAlarmActionStep
* @return
*/
public List<EmsAlarmActionStep> selectEmsAlarmActionStepList(EmsAlarmActionStep emsAlarmActionStep);
/**
*
*
* @param emsAlarmActionStep
* @return
*/
public int insertEmsAlarmActionStep(EmsAlarmActionStep emsAlarmActionStep);
/**
*
*
* @param emsAlarmActionStep
* @return
*/
public int updateEmsAlarmActionStep(EmsAlarmActionStep emsAlarmActionStep);
/**
*
*
* @param objIds
* @return
*/
public int deleteEmsAlarmActionStepByObjIds(String[] objIds);
/**
*
*
* @param objId
* @return
*/
public int deleteEmsAlarmActionStepByObjId(String objId);
/**
* ID
*
* @param ruleObjId ID
* @return
*/
List<EmsAlarmActionStep> selectEmsAlarmActionStepByRuleObjId(String ruleObjId);
/**
*
*
* @param monitorId
* @param cause
* @return
*/
List<EmsAlarmActionStep> selectActionStepsByAlarmInfo(String monitorId, String cause);
/**
*
*
* @param ruleObjId ID
* @param stepList
* @return
*/
int batchSaveActionSteps(String ruleObjId, List<EmsAlarmActionStep> stepList);
}

@ -0,0 +1,96 @@
package com.os.ems.base.service.impl;
import java.util.List;
import com.os.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.os.ems.base.mapper.EmsAlarmActionStepImageMapper;
import com.os.ems.base.domain.EmsAlarmActionStepImage;
import com.os.ems.base.service.IEmsAlarmActionStepImageService;
/**
* Service
*
* @author zch
* @date 2025-05-29
*/
@Service
public class EmsAlarmActionStepImageServiceImpl implements IEmsAlarmActionStepImageService
{
@Autowired
private EmsAlarmActionStepImageMapper emsAlarmActionStepImageMapper;
/**
*
*
* @param objId
* @return
*/
@Override
public EmsAlarmActionStepImage selectEmsAlarmActionStepImageByObjId(String objId)
{
return emsAlarmActionStepImageMapper.selectEmsAlarmActionStepImageByObjId(objId);
}
/**
*
*
* @param emsAlarmActionStepImage
* @return
*/
@Override
public List<EmsAlarmActionStepImage> selectEmsAlarmActionStepImageList(EmsAlarmActionStepImage emsAlarmActionStepImage)
{
return emsAlarmActionStepImageMapper.selectEmsAlarmActionStepImageList(emsAlarmActionStepImage);
}
/**
*
*
* @param emsAlarmActionStepImage
* @return
*/
@Override
public int insertEmsAlarmActionStepImage(EmsAlarmActionStepImage emsAlarmActionStepImage)
{
emsAlarmActionStepImage.setCreateTime(DateUtils.getNowDate());
return emsAlarmActionStepImageMapper.insertEmsAlarmActionStepImage(emsAlarmActionStepImage);
}
/**
*
*
* @param emsAlarmActionStepImage
* @return
*/
@Override
public int updateEmsAlarmActionStepImage(EmsAlarmActionStepImage emsAlarmActionStepImage)
{
emsAlarmActionStepImage.setUpdateTime(DateUtils.getNowDate());
return emsAlarmActionStepImageMapper.updateEmsAlarmActionStepImage(emsAlarmActionStepImage);
}
/**
*
*
* @param objIds
* @return
*/
@Override
public int deleteEmsAlarmActionStepImageByObjIds(String[] objIds)
{
return emsAlarmActionStepImageMapper.deleteEmsAlarmActionStepImageByObjIds(objIds);
}
/**
*
*
* @param objId
* @return
*/
@Override
public int deleteEmsAlarmActionStepImageByObjId(String objId)
{
return emsAlarmActionStepImageMapper.deleteEmsAlarmActionStepImageByObjId(objId);
}
}

@ -0,0 +1,191 @@
package com.os.ems.base.service.impl;
import java.util.List;
import com.os.common.utils.DateUtils;
import com.os.common.utils.StringUtils;
import com.os.common.utils.uuid.IdUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.os.ems.base.mapper.EmsAlarmActionStepMapper;
import com.os.ems.base.mapper.EmsAlarmActionStepImageMapper;
import com.os.ems.base.domain.EmsAlarmActionStep;
import com.os.ems.base.domain.EmsAlarmActionStepImage;
import com.os.ems.base.service.IEmsAlarmActionStepService;
/**
* Service
*
* @author zch
* @date 2025-05-29
*/
@Service
public class EmsAlarmActionStepServiceImpl implements IEmsAlarmActionStepService
{
@Autowired
private EmsAlarmActionStepMapper emsAlarmActionStepMapper;
@Autowired
private EmsAlarmActionStepImageMapper emsAlarmActionStepImageMapper;
/**
*
*
* @param objId
* @return
*/
@Override
public EmsAlarmActionStep selectEmsAlarmActionStepByObjId(String objId)
{
return emsAlarmActionStepMapper.selectEmsAlarmActionStepByObjId(objId);
}
/**
*
*
* @param emsAlarmActionStep
* @return
*/
@Override
public List<EmsAlarmActionStep> selectEmsAlarmActionStepList(EmsAlarmActionStep emsAlarmActionStep)
{
return emsAlarmActionStepMapper.selectEmsAlarmActionStepList(emsAlarmActionStep);
}
/**
*
*
* @param emsAlarmActionStep
* @return
*/
@Override
public int insertEmsAlarmActionStep(EmsAlarmActionStep emsAlarmActionStep)
{
emsAlarmActionStep.setCreateTime(DateUtils.getNowDate());
return emsAlarmActionStepMapper.insertEmsAlarmActionStep(emsAlarmActionStep);
}
/**
*
*
* @param emsAlarmActionStep
* @return
*/
@Override
public int updateEmsAlarmActionStep(EmsAlarmActionStep emsAlarmActionStep)
{
emsAlarmActionStep.setUpdateTime(DateUtils.getNowDate());
return emsAlarmActionStepMapper.updateEmsAlarmActionStep(emsAlarmActionStep);
}
/**
*
*
* @param objIds
* @return
*/
@Override
public int deleteEmsAlarmActionStepByObjIds(String[] objIds)
{
return emsAlarmActionStepMapper.deleteEmsAlarmActionStepByObjIds(objIds);
}
/**
*
*
* @param objId
* @return
*/
@Override
public int deleteEmsAlarmActionStepByObjId(String objId)
{
return emsAlarmActionStepMapper.deleteEmsAlarmActionStepByObjId(objId);
}
/**
* ID
*
* @param ruleObjId ID
* @return
*/
@Override
public List<EmsAlarmActionStep> selectEmsAlarmActionStepByRuleObjId(String ruleObjId)
{
return emsAlarmActionStepMapper.selectEmsAlarmActionStepByRuleObjId(ruleObjId);
}
/**
*
*
* @param monitorId
* @param cause
* @return
*/
@Override
public List<EmsAlarmActionStep> selectActionStepsByAlarmInfo(String monitorId, String cause)
{
return emsAlarmActionStepMapper.selectActionStepsByAlarmInfo(monitorId, cause);
}
/**
*
*
* @param ruleObjId ID
* @param stepList
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public int batchSaveActionSteps(String ruleObjId, List<EmsAlarmActionStep> stepList)
{
if (StringUtils.isEmpty(ruleObjId) || stepList == null || stepList.isEmpty()) {
return 0;
}
try {
// 1. 先删除该规则下的所有现有步骤和图片
List<EmsAlarmActionStep> existingSteps = emsAlarmActionStepMapper.selectEmsAlarmActionStepByRuleObjId(ruleObjId);
for (EmsAlarmActionStep existingStep : existingSteps) {
// 删除步骤关联的图片
EmsAlarmActionStepImage imageQuery = new EmsAlarmActionStepImage();
imageQuery.setActionStepObjId(existingStep.getObjId());
List<EmsAlarmActionStepImage> existingImages = emsAlarmActionStepImageMapper.selectEmsAlarmActionStepImageList(imageQuery);
for (EmsAlarmActionStepImage image : existingImages) {
emsAlarmActionStepImageMapper.deleteEmsAlarmActionStepImageByObjId(image.getObjId());
}
// 删除步骤
emsAlarmActionStepMapper.deleteEmsAlarmActionStepByObjId(existingStep.getObjId());
}
// 2. 保存新的步骤和图片
int result = 0;
for (EmsAlarmActionStep step : stepList) {
// 生成步骤ID
if (StringUtils.isEmpty(step.getObjId())) {
step.setObjId(IdUtils.fastUUID());
}
step.setRuleObjId(ruleObjId);
step.setCreateTime(DateUtils.getNowDate());
// 保存步骤
result += emsAlarmActionStepMapper.insertEmsAlarmActionStep(step);
// 保存步骤关联的图片
if (step.getStepImages() != null && !step.getStepImages().isEmpty()) {
for (EmsAlarmActionStepImage image : step.getStepImages()) {
if (StringUtils.isEmpty(image.getObjId())) {
image.setObjId(IdUtils.fastUUID());
}
image.setActionStepObjId(step.getObjId());
image.setCreateTime(DateUtils.getNowDate());
emsAlarmActionStepImageMapper.insertEmsAlarmActionStepImage(image);
}
}
}
return result;
} catch (Exception e) {
throw new RuntimeException("批量保存措施步骤失败: " + e.getMessage(), e);
}
}
}

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.os.ems.base.mapper.EmsAlarmActionStepImageMapper">
<resultMap type="EmsAlarmActionStepImage" id="EmsAlarmActionStepImageResult">
<result property="objId" column="obj_id" />
<result property="actionStepObjId" column="action_step_obj_id" />
<result property="imageUrl" column="image_url" />
<result property="imageSequence" column="image_sequence" />
<result property="description" column="description" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
</resultMap>
<sql id="selectEmsAlarmActionStepImageVo">
select obj_id, action_step_obj_id, image_url, image_sequence, description, create_by, create_time, update_by, update_time, remark from ems_alarm_action_step_image
</sql>
<select id="selectEmsAlarmActionStepImageList" parameterType="EmsAlarmActionStepImage" resultMap="EmsAlarmActionStepImageResult">
<include refid="selectEmsAlarmActionStepImageVo"/>
<where>
<if test="actionStepObjId != null and actionStepObjId != ''"> and action_step_obj_id = #{actionStepObjId}</if>
<if test="imageUrl != null and imageUrl != ''"> and image_url = #{imageUrl}</if>
<if test="imageSequence != null "> and image_sequence = #{imageSequence}</if>
<if test="description != null and description != ''"> and description = #{description}</if>
</where>
</select>
<select id="selectEmsAlarmActionStepImageByObjId" parameterType="String" resultMap="EmsAlarmActionStepImageResult">
<include refid="selectEmsAlarmActionStepImageVo"/>
where obj_id = #{objId}
</select>
<insert id="insertEmsAlarmActionStepImage" parameterType="EmsAlarmActionStepImage" useGeneratedKeys="true" keyProperty="objId">
insert into ems_alarm_action_step_image
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="actionStepObjId != null and actionStepObjId != ''">action_step_obj_id,</if>
<if test="imageUrl != null and imageUrl != ''">image_url,</if>
<if test="imageSequence != null">image_sequence,</if>
<if test="description != null">description,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="remark != null">remark,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="actionStepObjId != null and actionStepObjId != ''">#{actionStepObjId},</if>
<if test="imageUrl != null and imageUrl != ''">#{imageUrl},</if>
<if test="imageSequence != null">#{imageSequence},</if>
<if test="description != null">#{description},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="remark != null">#{remark},</if>
</trim>
</insert>
<update id="updateEmsAlarmActionStepImage" parameterType="EmsAlarmActionStepImage">
update ems_alarm_action_step_image
<trim prefix="SET" suffixOverrides=",">
<if test="actionStepObjId != null and actionStepObjId != ''">action_step_obj_id = #{actionStepObjId},</if>
<if test="imageUrl != null and imageUrl != ''">image_url = #{imageUrl},</if>
<if test="imageSequence != null">image_sequence = #{imageSequence},</if>
<if test="description != null">description = #{description},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="remark != null">remark = #{remark},</if>
</trim>
where obj_id = #{objId}
</update>
<delete id="deleteEmsAlarmActionStepImageByObjId" parameterType="String">
delete from ems_alarm_action_step_image where obj_id = #{objId}
</delete>
<delete id="deleteEmsAlarmActionStepImageByObjIds" parameterType="String">
delete from ems_alarm_action_step_image where obj_id in
<foreach item="objId" collection="array" open="(" separator="," close=")">
#{objId}
</foreach>
</delete>
</mapper>

@ -0,0 +1,153 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.os.ems.base.mapper.EmsAlarmActionStepMapper">
<resultMap type="EmsAlarmActionStep" id="EmsAlarmActionStepResult">
<result property="objId" column="obj_id" />
<result property="ruleObjId" column="rule_obj_id" />
<result property="stepSequence" column="step_sequence" />
<result property="description" column="description" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
</resultMap>
<resultMap type="EmsAlarmActionStep" id="EmsAlarmActionStepWithImagesResult">
<result property="objId" column="obj_id" />
<result property="ruleObjId" column="rule_obj_id" />
<result property="stepSequence" column="step_sequence" />
<result property="description" column="description" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
<collection property="stepImages" ofType="EmsAlarmActionStepImage">
<result property="objId" column="img_obj_id" />
<result property="actionStepObjId" column="img_action_step_obj_id" />
<result property="imageUrl" column="img_image_url" />
<result property="imageSequence" column="img_image_sequence" />
<result property="description" column="img_description" />
<result property="remark" column="img_remark" />
</collection>
</resultMap>
<sql id="selectEmsAlarmActionStepVo">
select obj_id, rule_obj_id, step_sequence, description, create_by, create_time, update_by, update_time, remark from ems_alarm_action_step
</sql>
<select id="selectEmsAlarmActionStepList" parameterType="EmsAlarmActionStep" resultMap="EmsAlarmActionStepResult">
<include refid="selectEmsAlarmActionStepVo"/>
<where>
<if test="ruleObjId != null and ruleObjId != ''"> and rule_obj_id = #{ruleObjId}</if>
<if test="stepSequence != null "> and step_sequence = #{stepSequence}</if>
<if test="description != null and description != ''"> and description = #{description}</if>
</where>
</select>
<select id="selectEmsAlarmActionStepByObjId" parameterType="String" resultMap="EmsAlarmActionStepResult">
<include refid="selectEmsAlarmActionStepVo"/>
where obj_id = #{objId}
</select>
<select id="selectEmsAlarmActionStepByRuleObjId" parameterType="String" resultMap="EmsAlarmActionStepWithImagesResult">
SELECT
step.obj_id,
step.rule_obj_id,
step.step_sequence,
step.description,
step.create_by,
step.create_time,
step.update_by,
step.update_time,
step.remark,
img.obj_id as img_obj_id,
img.action_step_obj_id as img_action_step_obj_id,
img.image_url as img_image_url,
img.image_sequence as img_image_sequence,
img.description as img_description,
img.remark as img_remark
FROM ems_alarm_action_step step
LEFT JOIN ems_alarm_action_step_image img ON step.obj_id = img.action_step_obj_id
WHERE step.rule_obj_id = #{ruleObjId}
ORDER BY step.step_sequence ASC, img.image_sequence ASC
</select>
<select id="selectActionStepsByAlarmInfo" resultMap="EmsAlarmActionStepWithImagesResult">
SELECT
step.obj_id,
step.rule_obj_id,
step.step_sequence,
step.description,
step.create_by,
step.create_time,
step.update_by,
step.update_time,
step.remark,
img.obj_id as img_obj_id,
img.action_step_obj_id as img_action_step_obj_id,
img.image_url as img_image_url,
img.image_sequence as img_image_sequence,
img.description as img_description,
img.remark as img_remark
FROM ems_alarm_action_step step
LEFT JOIN ems_alarm_action_step_image img ON step.obj_id = img.action_step_obj_id
INNER JOIN ems_record_alarm_rule rule ON step.rule_obj_id = rule.obj_id
WHERE rule.monitor_id = #{monitorId} AND rule.cause = #{cause}
ORDER BY step.step_sequence ASC, img.image_sequence ASC
</select>
<insert id="insertEmsAlarmActionStep" parameterType="EmsAlarmActionStep" useGeneratedKeys="true" keyProperty="objId">
insert into ems_alarm_action_step
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="ruleObjId != null and ruleObjId != ''">rule_obj_id,</if>
<if test="stepSequence != null">step_sequence,</if>
<if test="description != null">description,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="remark != null">remark,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="ruleObjId != null and ruleObjId != ''">#{ruleObjId},</if>
<if test="stepSequence != null">#{stepSequence},</if>
<if test="description != null">#{description},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="remark != null">#{remark},</if>
</trim>
</insert>
<update id="updateEmsAlarmActionStep" parameterType="EmsAlarmActionStep">
update ems_alarm_action_step
<trim prefix="SET" suffixOverrides=",">
<if test="ruleObjId != null and ruleObjId != ''">rule_obj_id = #{ruleObjId},</if>
<if test="stepSequence != null">step_sequence = #{stepSequence},</if>
<if test="description != null">description = #{description},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="remark != null">remark = #{remark},</if>
</trim>
where obj_id = #{objId}
</update>
<delete id="deleteEmsAlarmActionStepByObjId" parameterType="String">
delete from ems_alarm_action_step where obj_id = #{objId}
</delete>
<delete id="deleteEmsAlarmActionStepByObjIds" parameterType="String">
delete from ems_alarm_action_step where obj_id in
<foreach item="objId" collection="array" open="(" separator="," close=")">
#{objId}
</foreach>
</delete>
</mapper>
Loading…
Cancel
Save