喷淋修改

This commit is contained in:
guoshengxiong 2025-12-08 10:23:59 +08:00
parent 2902ea6a45
commit 00a832dc4f
6 changed files with 177 additions and 3 deletions

View File

@ -175,4 +175,17 @@ public class EnvironmentDevController {
environmentDevService.updateEnvironmentDevSprayStatus(map);
return Result.ok();
}
@ApiOperation(value = "开关喷淋", notes = "开关喷淋", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "deviceId", value = "设备Id", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "sprayStatus", value = "喷淋状态1投运2未投运", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "durationMin", value = "持续时间(分钟)", paramType = "body", required = true, dataType = "String"),
})
@PostMapping(value = "/optSpray")
public Result optSpray(@RequestBody Map<String, Object> map) {
environmentDevService.optSpray(map);
return Result.ok();
}
}

View File

@ -37,4 +37,7 @@ public interface IEnvironmentDevService extends IService<EnvironmentDev> {
EnvironmentDevAlaramCountListVo selectEnvironmentDevAlaramCountList(Map<String, Object> map);
void updateEnvironmentDevSprayStatus(Map<String, Object> map);
void optSpray(Map<String, Object> map);
}

View File

@ -1,8 +1,14 @@
package com.zhgd.xmgl.modules.environment.service.impl;
import java.util.Date;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.xmgl.async.AsyncEnvironment;
@ -15,9 +21,15 @@ import com.zhgd.xmgl.modules.environment.entity.vo.EnvironmentAlarmCountTotalVo;
import com.zhgd.xmgl.modules.environment.entity.vo.EnvironmentDevAlaramCountListVo;
import com.zhgd.xmgl.modules.environment.mapper.*;
import com.zhgd.xmgl.modules.environment.service.IEnvironmentDevService;
import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.service.IProjectService;
import com.zhgd.xmgl.modules.sprayrt.entity.SprayRtData;
import com.zhgd.xmgl.modules.sprayrt.service.ISprayRtDataService;
import com.zhgd.xmgl.util.MessageUtil;
import com.zhgd.xmgl.util.RenZhiUtil;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
@ -50,6 +62,15 @@ public class EnvironmentDevServiceImpl extends ServiceImpl<EnvironmentDevMapper,
private BigDeviceVideoMapper bigDeviceVideoMapper;
@Autowired
private AsyncEnvironment asyncEnvironment;
@Lazy
@Autowired
private IProjectService projectService;
@Lazy
@Autowired
private ISprayRtDataService sprayRtDataService;
@Lazy
@Autowired
private IEnvironmentDevService environmentDevService;
@Override
public void saveEnvironmentDev(EnvironmentDev environmentDev) {
@ -248,4 +269,44 @@ public class EnvironmentDevServiceImpl extends ServiceImpl<EnvironmentDevMapper,
environmentDev.setSprayStatus(sprayStatus);
environmentDevMapper.updateById(environmentDev);
}
@Override
public void optSpray(Map<String, Object> map) {
String deviceId = MapUtils.getString(map, "deviceId");
Integer sprayStatus = MapUtils.getInteger(map, "sprayStatus");
Integer durationMin = MapUtils.getInteger(map, "durationMin");
EnvironmentDev environmentDev = environmentDevMapper.selectOne(new LambdaQueryWrapper<EnvironmentDev>()
.eq(EnvironmentDev::getDeviceId, deviceId));
if (environmentDev == null) {
throw new OpenAlertException("设备编号不正确");
}
Project project = projectService.getOne(new LambdaQueryWrapper<Project>()
.eq(Project::getProjectSn, environmentDev.getProjectSn()));
environmentDevService.update(null, new LambdaUpdateWrapper<EnvironmentDev>()
.set(EnvironmentDev::getSprayStatus, sprayStatus)
.eq(EnvironmentDev::getId, environmentDev.getId())
);
if (Objects.equals(sprayStatus, 1)) {
//打开
SprayRtData data = new SprayRtData();
data.setDevSn(deviceId);
data.setDevName(environmentDev.getDeviceName());
Date date = new Date();
data.setBeginTime(date);
data.setEndTime(DateUtil.offsetMinute(date, durationMin));
data.setSprayStatus(1);
data.setDevType(1);
data.setProjectSn(environmentDev.getProjectSn());
sprayRtDataService.save(data);
} else {
sprayRtDataService.update(null, new LambdaUpdateWrapper<SprayRtData>()
.set(SprayRtData::getSprayStatus, 2)
.eq(SprayRtData::getSprayStatus, 1)
.eq(SprayRtData::getDevType, 1)
.eq(SprayRtData::getDevSn, deviceId)
);
}
RenZhiUtil.httpOptSpray(deviceId, sprayStatus, project.getJnrzckAccount(), project.getJnrzckPw());
}
}

View File

@ -59,6 +59,16 @@ public class SprayRtData implements Serializable {
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "结束时间")
private java.util.Date endTime;
/**
* 喷淋状态1投运2未投运
*/
@ApiModelProperty(value = "喷淋状态1投运2未投运")
private java.lang.Integer sprayStatus;
/**
* 设备类型1仁智测控
*/
@ApiModelProperty(value = "设备类型1仁智测控")
private java.lang.Integer devType;
/**
* 项目sn
*/

View File

@ -1,5 +1,7 @@
package com.zhgd.xmgl.task;
import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.google.common.collect.Lists;
import cn.hutool.core.bean.BeanUtil;
@ -21,8 +23,11 @@ import com.zhgd.xmgl.modules.environment.service.IDustNoiseDataService;
import com.zhgd.xmgl.modules.environment.service.IEnvironmentDevService;
import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
import com.zhgd.xmgl.modules.project.service.IProjectService;
import com.zhgd.xmgl.modules.sprayrt.entity.SprayRtData;
import com.zhgd.xmgl.modules.sprayrt.entity.SprayRtDev;
import com.zhgd.xmgl.modules.sprayrt.mapper.SprayRtDevMapper;
import com.zhgd.xmgl.modules.sprayrt.service.ISprayRtDataService;
import com.zhgd.xmgl.modules.sprayrt.service.ISprayRtDevService;
import com.zhgd.xmgl.modules.sprayrt.service.impl.SprayRtDevServiceImpl;
import com.zhgd.xmgl.task.dto.EnvironmentDustDataDto;
@ -44,6 +49,7 @@ import javax.annotation.Resource;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@ -56,6 +62,9 @@ import java.util.stream.Collectors;
@RestController
@RequestMapping("/xmgl/task")
public class EnvironmentDevTask {
@Lazy
@Autowired
IProjectService projectService;
@Autowired
private EnvironmentDevMapper environmentDevMapper;
@Autowired
@ -70,7 +79,6 @@ public class EnvironmentDevTask {
private boolean isGetEnvironmentData;
@Autowired
private ProjectMapper projectMapper;
@Resource
private XiwonUtil xiwonUtil;
@Lazy
@ -82,6 +90,9 @@ public class EnvironmentDevTask {
@Lazy
@Autowired
private EnvironmentUtil environmentUtil;
@Lazy
@Autowired
private ISprayRtDataService sprayRtDataService;
/**
* 定时调用外部接口拉取设备实时数据
@ -264,6 +275,36 @@ public class EnvironmentDevTask {
}
}
/**
* 喷淋自动关闭RenZhi测控
*/
@SchedulerLock(name = "sprayAutoCloseByRzck", lockAtMostFor = 1000 * 60 * 5, lockAtLeastFor = 1000 * 60 * 3)
@Scheduled(cron = "0 0/2 * * * ?")
@RequestMapping("sprayAutoCloseByRzck")
public void sprayAutoCloseByRzck() {
List<SprayRtData> sprayDatas = sprayRtDataService.list(new LambdaQueryWrapper<SprayRtData>()
.eq(SprayRtData::getDevType, 1)
.eq(SprayRtData::getSprayStatus, 1)
.le(SprayRtData::getEndTime, DateUtil.formatDateTime(new Date()))
);
Map<String, List<SprayRtData>> dustDevMap = sprayDatas.stream().collect(Collectors.groupingBy(SprayRtData::getDevSn));
Map<String, Project> projectMap = projectService.list(null).stream().collect(Collectors.toMap(Project::getProjectSn, Function.identity(), (o1, o2) -> o1));
for (Map.Entry<String, List<SprayRtData>> entry : dustDevMap.entrySet()) {
try {
List<SprayRtData> datas = entry.getValue();
Project project = projectMap.get(datas.get(0).getProjectSn());
RenZhiUtil.httpOptSpray(entry.getKey(), 2, project.getJnrzckAccount(), project.getJnrzckPw());
sprayRtDataService.update(null, new LambdaUpdateWrapper<SprayRtData>()
.set(SprayRtData::getSprayStatus, 2)
.in(SprayRtData::getId, datas.stream().map(SprayRtData::getId).collect(Collectors.toList()))
);
} catch (Exception e) {
log.debug("", e);
log.error("喷淋自动关闭RenZhi测控错误{}", e.getMessage());
}
}
}
/**
* 机场项目推送扬尘
*/
@ -282,8 +323,8 @@ public class EnvironmentDevTask {
for (EnvironmentDev dev : devs) {
DustNoiseData data = dustNoiseDataService.getOne(new LambdaQueryWrapper<DustNoiseData>()
.eq(DustNoiseData::getDeviceId, dev.getDeviceId())
.ge(DustNoiseData::getUploadDate,DateUtil.formatDateTime(offsetHour))
.le(DustNoiseData::getUploadDate,DateUtil.formatDateTime(now))
.ge(DustNoiseData::getUploadDate, DateUtil.formatDateTime(offsetHour))
.le(DustNoiseData::getUploadDate, DateUtil.formatDateTime(now))
.orderByDesc(DustNoiseData::getUploadDate).last("limit 1"));
if (data != null) {
JcHttpUtil.SmartDustDataForm e = new JcHttpUtil.SmartDustDataForm();

View File

@ -1,12 +1,20 @@
package com.zhgd.xmgl.util;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.URLUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.gexin.fastjson.JSON;
import com.zhgd.jeecg.common.execption.OpenAlertException;
import lombok.extern.slf4j.Slf4j;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
@Slf4j
public class RenZhiUtil {
public static final String host = "http://www.0531yun.com";
@ -79,5 +87,43 @@ public class RenZhiUtil {
}
}
/**
* 继电器操作喷淋
*
* @param deviceId
* @param opt 设备操作 0闭合 1断开
* @param token
* @return
*/
public static JSONObject setRelay(String deviceId, Integer opt, String token) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("deviceAddr", deviceId);
paramMap.put("opt", opt);
paramMap.put("relayNo", "1");//继电器编号
String url = "http://www.0531yun.com/api/device/setRelay";
log.info("继电器操作(喷淋),url:{},body:{}", url, JSON.toJSONString(paramMap));
String result = HttpRequest.post(url).form(paramMap).header("authorization", token).execute().body();
log.info("继电器操作(喷淋),rs:{}", result);
return JSONObject.parseObject(result);
}
/**
* http操作喷淋
*
* @param deviceId
* @param sprayStatus 喷淋状态1投运2未投运
* @param jnrzckAccount
* @param jnrzckPw
*/
public static void httpOptSpray(String deviceId, Integer sprayStatus, String jnrzckAccount, String jnrzckPw) {
String token = RenZhiUtil.getToken(jnrzckAccount, jnrzckPw);
if (StrUtil.isBlank(token)) {
throw new OpenAlertException("token获取失败");
}
Integer opt = Objects.equals(sprayStatus, 1) ? 0 : 1;
JSONObject jsonObject = RenZhiUtil.setRelay(deviceId, opt, token);
if (!Objects.equals(jsonObject.getInteger("code"), 1000)) {
throw new OpenAlertException("喷淋失败:" + jsonObject.getString("message"));
}
}
}