diff --git a/src/main/java/com/zhgd/xmgl/modules/environment/controller/EnvironmentDevController.java b/src/main/java/com/zhgd/xmgl/modules/environment/controller/EnvironmentDevController.java index 98596ea88..d7972d885 100644 --- a/src/main/java/com/zhgd/xmgl/modules/environment/controller/EnvironmentDevController.java +++ b/src/main/java/com/zhgd/xmgl/modules/environment/controller/EnvironmentDevController.java @@ -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 map) { + environmentDevService.optSpray(map); + return Result.ok(); + } + } diff --git a/src/main/java/com/zhgd/xmgl/modules/environment/service/IEnvironmentDevService.java b/src/main/java/com/zhgd/xmgl/modules/environment/service/IEnvironmentDevService.java index 44bc1f42c..709a7a29c 100644 --- a/src/main/java/com/zhgd/xmgl/modules/environment/service/IEnvironmentDevService.java +++ b/src/main/java/com/zhgd/xmgl/modules/environment/service/IEnvironmentDevService.java @@ -37,4 +37,7 @@ public interface IEnvironmentDevService extends IService { EnvironmentDevAlaramCountListVo selectEnvironmentDevAlaramCountList(Map map); void updateEnvironmentDevSprayStatus(Map map); + + void optSpray(Map map); + } diff --git a/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/EnvironmentDevServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/EnvironmentDevServiceImpl.java index e23824e61..a31ecf598 100644 --- a/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/EnvironmentDevServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/EnvironmentDevServiceImpl.java @@ -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 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() + .eq(EnvironmentDev::getDeviceId, deviceId)); + if (environmentDev == null) { + throw new OpenAlertException("设备编号不正确"); + } + Project project = projectService.getOne(new LambdaQueryWrapper() + .eq(Project::getProjectSn, environmentDev.getProjectSn())); + environmentDevService.update(null, new LambdaUpdateWrapper() + .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() + .set(SprayRtData::getSprayStatus, 2) + .eq(SprayRtData::getSprayStatus, 1) + .eq(SprayRtData::getDevType, 1) + .eq(SprayRtData::getDevSn, deviceId) + ); + } + RenZhiUtil.httpOptSpray(deviceId, sprayStatus, project.getJnrzckAccount(), project.getJnrzckPw()); + } + } diff --git a/src/main/java/com/zhgd/xmgl/modules/sprayrt/entity/SprayRtData.java b/src/main/java/com/zhgd/xmgl/modules/sprayrt/entity/SprayRtData.java index 9118d32e2..46a1228ad 100644 --- a/src/main/java/com/zhgd/xmgl/modules/sprayrt/entity/SprayRtData.java +++ b/src/main/java/com/zhgd/xmgl/modules/sprayrt/entity/SprayRtData.java @@ -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 */ diff --git a/src/main/java/com/zhgd/xmgl/task/EnvironmentDevTask.java b/src/main/java/com/zhgd/xmgl/task/EnvironmentDevTask.java index 8c5da987f..57b10b28c 100644 --- a/src/main/java/com/zhgd/xmgl/task/EnvironmentDevTask.java +++ b/src/main/java/com/zhgd/xmgl/task/EnvironmentDevTask.java @@ -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 sprayDatas = sprayRtDataService.list(new LambdaQueryWrapper() + .eq(SprayRtData::getDevType, 1) + .eq(SprayRtData::getSprayStatus, 1) + .le(SprayRtData::getEndTime, DateUtil.formatDateTime(new Date())) + ); + Map> dustDevMap = sprayDatas.stream().collect(Collectors.groupingBy(SprayRtData::getDevSn)); + Map projectMap = projectService.list(null).stream().collect(Collectors.toMap(Project::getProjectSn, Function.identity(), (o1, o2) -> o1)); + for (Map.Entry> entry : dustDevMap.entrySet()) { + try { + List 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() + .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() .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(); diff --git a/src/main/java/com/zhgd/xmgl/util/RenZhiUtil.java b/src/main/java/com/zhgd/xmgl/util/RenZhiUtil.java index 8dee90060..bedb1baf3 100644 --- a/src/main/java/com/zhgd/xmgl/util/RenZhiUtil.java +++ b/src/main/java/com/zhgd/xmgl/util/RenZhiUtil.java @@ -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 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")); + } + } }