1. 浇花器命令调整
This commit is contained in:
parent
de808f9c16
commit
b8d0c9acb9
|
@ -59,7 +59,7 @@ public class DatapointValue {
|
||||||
private int hour;
|
private int hour;
|
||||||
private int min;
|
private int min;
|
||||||
private int sec;
|
private int sec;
|
||||||
private Boolean sw;//开关
|
private Boolean sw;//定时总开关,先根据总开关判断定时功能是否关闭,如果打开,再判断定时数组中有没有有效的定时器
|
||||||
private int week;//周转成二进制 bit0位开始为周一 0110 (week&1<<0) 1<<1 1<<2 00000110
|
private int week;//周转成二进制 bit0位开始为周一 0110 (week&1<<0) 1<<1 1<<2 00000110
|
||||||
private String date;//日期
|
private String date;//日期
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,6 +134,7 @@ public class AppController extends BaseController
|
||||||
@PutMapping("/device")
|
@PutMapping("/device")
|
||||||
public AjaxResult edit(@RequestBody AsDevice asDevice)
|
public AjaxResult edit(@RequestBody AsDevice asDevice)
|
||||||
{
|
{
|
||||||
|
logger.info("接收到修改设备参数请求:【{}】",JSON.toJSON(asDevice));
|
||||||
return toAjax(asDeviceService.updateAsDevice(asDevice));
|
return toAjax(asDeviceService.updateAsDevice(asDevice));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.ruoyi.device.domain;
|
package com.ruoyi.device.domain;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
@ -143,4 +144,12 @@ public class AsDevice extends BaseEntity
|
||||||
/** 是否配网,0-未配网,1-已配网 */
|
/** 是否配网,0-未配网,1-已配网 */
|
||||||
@Excel(name = "是否配网")
|
@Excel(name = "是否配网")
|
||||||
private String isNetwork;
|
private String isNetwork;
|
||||||
|
|
||||||
|
/** 浇水模式:1-定时;2-智能土壤湿度;3-手动 */
|
||||||
|
@Excel(name = "浇水模式")
|
||||||
|
private List<String> mode;
|
||||||
|
|
||||||
|
/** 浇水模式:1-定时;2-智能土壤湿度;3-手动 */
|
||||||
|
@Excel(name = "浇水模式")
|
||||||
|
private String modeStr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package com.ruoyi.device.service;
|
package com.ruoyi.device.service;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.ruoyi.common.core.domain.onenet.DatapointValue;
|
||||||
import com.ruoyi.device.domain.AsTimer;
|
import com.ruoyi.device.domain.AsTimer;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
|
||||||
|
@ -68,4 +70,12 @@ public interface IAsTimerService
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
public Boolean isSwitch(AsTimer asTimer);
|
public Boolean isSwitch(AsTimer asTimer);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清除无效定时器
|
||||||
|
*
|
||||||
|
* @param dsArray 定时器数组
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
public List<DatapointValue.Ds> cleanInvalidDs(List<DatapointValue.Ds> dsArray);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,8 @@ import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import static com.ruoyi.common.utils.SecurityUtils.getUsername;
|
import static com.ruoyi.common.utils.SecurityUtils.getUsername;
|
||||||
|
|
||||||
|
@ -195,12 +197,6 @@ public class AsDeviceServiceImpl extends ServiceImpl<AsDeviceMapper, AsDevice> i
|
||||||
|
|
||||||
|
|
||||||
private String getCommand(AsDevice asDevice) {
|
private String getCommand(AsDevice asDevice) {
|
||||||
String regularWateringSwitch = "true".equals(asDevice.getRegularWatering()) ? "1" : "0";//定时浇水开关
|
|
||||||
|
|
||||||
JSONObject regularWateringJsonObj = JSON.parseObject(asDevice.getRegularWateringJson());
|
|
||||||
String startHour = regularWateringJsonObj.getString("startHour");//启动时间-小时
|
|
||||||
String startMin = regularWateringJsonObj.getString("startMin");//启动时间-分钟
|
|
||||||
String sprayTime = regularWateringJsonObj.getString("sprayTime");//喷洒时间
|
|
||||||
|
|
||||||
String soilMoistureSwitch = "true".equals(asDevice.getSoilMoisture()) ? "1" : "0";//土壤湿度开关
|
String soilMoistureSwitch = "true".equals(asDevice.getSoilMoisture()) ? "1" : "0";//土壤湿度开关
|
||||||
Integer soilMoistureOpen = asDevice.getSoilMoistureOpen();//启动土壤湿度
|
Integer soilMoistureOpen = asDevice.getSoilMoistureOpen();//启动土壤湿度
|
||||||
|
@ -208,34 +204,53 @@ public class AsDeviceServiceImpl extends ServiceImpl<AsDeviceMapper, AsDevice> i
|
||||||
|
|
||||||
String pulseModeSwitch = "true".equals(asDevice.getPulseMode()) ? "1" : "0";//脉冲模式开关
|
String pulseModeSwitch = "true".equals(asDevice.getPulseMode()) ? "1" : "0";//脉冲模式开关
|
||||||
JSONObject pulseModeParamObj = JSON.parseObject(asDevice.getPulseModeParam());
|
JSONObject pulseModeParamObj = JSON.parseObject(asDevice.getPulseModeParam());
|
||||||
String sprayTime1 = pulseModeParamObj.getString("sprayTime");//喷洒时间
|
//将‘0分3秒’这样的字符串转换成秒
|
||||||
String intervalTime = pulseModeParamObj.getString("intervalTime");//间隔时间
|
int sprayTime1 = convertStringToSeconds(pulseModeParamObj.getString("sprayTime"));//喷洒时间
|
||||||
|
int intervalTime = convertStringToSeconds(pulseModeParamObj.getString("intervalTime"));//间隔时间
|
||||||
|
|
||||||
Integer waterIntensity = asDevice.getWaterIntensity();
|
Integer waterIntensity = asDevice.getWaterIntensity();
|
||||||
|
|
||||||
String min = asDevice.getScreenRestTime().replace("min", "");//息屏时间转换成分钟数
|
String min = asDevice.getScreenRestTime().replace("min", "");//息屏时间转换成秒
|
||||||
Integer minNum = Integer.parseInt(min.replace("hour", "")) * 60;
|
Integer minNum = Integer.parseInt(min) * 60;
|
||||||
String screenRestTime = min.contains("hour") ? minNum.toString() : min;
|
Integer hourNum = Integer.parseInt(min.replace("hour", "")) * 60 * 60;
|
||||||
|
String screenRestTime = min.contains("hour") ? hourNum.toString() : minNum.toString();
|
||||||
String screenRestTimeSwitch = "99".equals(asDevice.getScreenRestTime()) ? "0" : "1";//息屏开关
|
String screenRestTimeSwitch = "99".equals(asDevice.getScreenRestTime()) ? "0" : "1";//息屏开关
|
||||||
|
|
||||||
StringBuilder command = new StringBuilder()
|
StringBuilder command = new StringBuilder()
|
||||||
.append("dsjs_sec").append(sprayTime).append(IotConstants.COMMAND_SEPARATOR)
|
.append("qiangdu").append(waterIntensity).append(IotConstants.COMMAND_SEPARATOR)
|
||||||
.append("dskaiguan").append(regularWateringSwitch).append(IotConstants.COMMAND_SEPARATOR)
|
|
||||||
.append("dsstart_hour").append(startHour).append(IotConstants.COMMAND_SEPARATOR)
|
|
||||||
.append("dsstart_min").append(startMin).append(IotConstants.COMMAND_SEPARATOR)
|
|
||||||
.append("jiaoshui_qiangdu").append(waterIntensity).append(IotConstants.COMMAND_SEPARATOR)
|
|
||||||
.append("mckaiguan").append(pulseModeSwitch).append(IotConstants.COMMAND_SEPARATOR)
|
.append("mckaiguan").append(pulseModeSwitch).append(IotConstants.COMMAND_SEPARATOR)
|
||||||
.append("mcjg_sec").append(intervalTime).append(IotConstants.COMMAND_SEPARATOR)
|
.append("jg_sec").append(intervalTime).append(IotConstants.COMMAND_SEPARATOR)
|
||||||
.append("mcjs_sec").append(sprayTime1).append(IotConstants.COMMAND_SEPARATOR)
|
.append("js_sec").append(sprayTime1).append(IotConstants.COMMAND_SEPARATOR)
|
||||||
.append("setkaiguan").append(screenRestTimeSwitch).append(IotConstants.COMMAND_SEPARATOR)
|
.append("setkaiguan").append(screenRestTimeSwitch).append(IotConstants.COMMAND_SEPARATOR)
|
||||||
.append("setxp_min").append(screenRestTime).append(IotConstants.COMMAND_SEPARATOR)
|
.append("xp_min").append(screenRestTime).append(IotConstants.COMMAND_SEPARATOR)
|
||||||
.append("trkaiguan").append(soilMoistureSwitch).append(IotConstants.COMMAND_SEPARATOR)
|
.append("trkaiguan").append(soilMoistureSwitch).append(IotConstants.COMMAND_SEPARATOR)
|
||||||
.append("trstart_sd").append(soilMoistureOpen).append(IotConstants.COMMAND_SEPARATOR)
|
.append("start_sd").append(soilMoistureOpen).append(IotConstants.COMMAND_SEPARATOR)
|
||||||
.append("trend_sd").append(soilMoistureClose).append(IotConstants.COMMAND_SEPARATOR);
|
.append("end_sd").append(soilMoistureClose).append(IotConstants.COMMAND_SEPARATOR);
|
||||||
|
|
||||||
return command.toString();
|
return command.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int convertStringToSeconds(String timeString) {
|
||||||
|
// 定义正则表达式,用于匹配分钟和秒数
|
||||||
|
String regex = "(\\d+)分(\\d+)秒";
|
||||||
|
|
||||||
|
// 使用 Pattern 和 Matcher 对象进行匹配
|
||||||
|
Pattern pattern = Pattern.compile(regex);
|
||||||
|
Matcher matcher = pattern.matcher(timeString);
|
||||||
|
|
||||||
|
// 确保字符串匹配预期格式
|
||||||
|
if (!matcher.matches()) {
|
||||||
|
throw new IllegalArgumentException("Invalid time string format. Expected format: '<minutes>分<seconds>秒'");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 提取分钟和秒数
|
||||||
|
int minutes = Integer.parseInt(matcher.group(1));
|
||||||
|
int seconds = Integer.parseInt(matcher.group(2));
|
||||||
|
|
||||||
|
// 计算总秒数
|
||||||
|
int totalSeconds = minutes * 60 + seconds;
|
||||||
|
|
||||||
|
return totalSeconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量删除设备列表
|
* 批量删除设备列表
|
||||||
|
|
|
@ -329,7 +329,7 @@ public class AsTimerServiceImpl implements IAsTimerService
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
private List<DatapointValue.Ds> cleanInvalidDs(List<DatapointValue.Ds> dsArray) {
|
public List<DatapointValue.Ds> cleanInvalidDs(List<DatapointValue.Ds> dsArray) {
|
||||||
List<DatapointValue.Ds> filteredDsList = dsArray.stream()
|
List<DatapointValue.Ds> filteredDsList = dsArray.stream()
|
||||||
.filter(ds -> ds.getSw())
|
.filter(ds -> ds.getSw())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
|
@ -21,11 +21,12 @@ import com.ruoyi.common.core.domain.entity.AsUser;
|
||||||
import com.ruoyi.device.domain.AsWateringRecord;
|
import com.ruoyi.device.domain.AsWateringRecord;
|
||||||
import com.ruoyi.device.mapper.AsDeviceMapper;
|
import com.ruoyi.device.mapper.AsDeviceMapper;
|
||||||
import com.ruoyi.device.mapper.AsUserMapper;
|
import com.ruoyi.device.mapper.AsUserMapper;
|
||||||
|
import com.ruoyi.device.service.IAsDeviceService;
|
||||||
|
import com.ruoyi.device.service.IAsTimerService;
|
||||||
import com.ruoyi.device.service.IAsUserService;
|
import com.ruoyi.device.service.IAsUserService;
|
||||||
import com.ruoyi.device.service.IAsWateringRecordService;
|
import com.ruoyi.device.service.IAsWateringRecordService;
|
||||||
import com.ruoyi.system.service.ISysConfigService;
|
import com.ruoyi.system.service.ISysConfigService;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
@ -37,10 +38,7 @@ import javax.annotation.Resource;
|
||||||
import javax.validation.Validator;
|
import javax.validation.Validator;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.Calendar;
|
import java.util.*;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户 业务层处理
|
* 用户 业务层处理
|
||||||
|
@ -61,6 +59,12 @@ public class AsUserServiceImpl implements IAsUserService
|
||||||
@Resource
|
@Resource
|
||||||
private AsDeviceMapper asDeviceMapper;
|
private AsDeviceMapper asDeviceMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IAsDeviceService asDeviceService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IAsTimerService asTimerService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private IAsWateringRecordService asWateringRecordService;
|
private IAsWateringRecordService asWateringRecordService;
|
||||||
|
|
||||||
|
@ -437,10 +441,10 @@ public class AsUserServiceImpl implements IAsUserService
|
||||||
JSONObject paramsObj = JSON.parseObject(result);
|
JSONObject paramsObj = JSON.parseObject(result);
|
||||||
String code = paramsObj.getString("code");
|
String code = paramsObj.getString("code");
|
||||||
if (!HttpStatus.IOT_SUCCESS.equals(code)) {
|
if (!HttpStatus.IOT_SUCCESS.equals(code)) {
|
||||||
asDevice1.setOnlineStatus("不在线");
|
asDevice1.setOnlineStatus("0");//在线状态:0-不在线;1-在线
|
||||||
return asDevices;
|
return asDevices;
|
||||||
}else{
|
}else{
|
||||||
asDevice1.setOnlineStatus("在线");
|
asDevice1.setOnlineStatus("1");
|
||||||
// 查询onenet设备参数
|
// 查询onenet设备参数
|
||||||
String datapointsUrl = iotUrl+ IotConstants.ADDS_HISTORY_DATAPOINTS + "?"+param;
|
String datapointsUrl = iotUrl+ IotConstants.ADDS_HISTORY_DATAPOINTS + "?"+param;
|
||||||
log.info("IOT获取到Authorization:【{}】", token);
|
log.info("IOT获取到Authorization:【{}】", token);
|
||||||
|
@ -462,12 +466,32 @@ public class AsUserServiceImpl implements IAsUserService
|
||||||
DatapointValue.nextDs next_ds = value.getNext_ds();
|
DatapointValue.nextDs next_ds = value.getNext_ds();
|
||||||
/**设置下次浇水时间日期*/
|
/**设置下次浇水时间日期*/
|
||||||
setNextDs(asDevice1, next_ds);
|
setNextDs(asDevice1, next_ds);
|
||||||
|
/**设置浇水模式*/
|
||||||
|
List<String> modeList = new ArrayList<>();
|
||||||
|
Boolean sw = next_ds.getSw();
|
||||||
|
List<DatapointValue.Ds> dsArray = value.getDsArray();
|
||||||
|
//清除无效定时器
|
||||||
|
List<DatapointValue.Ds> ds = asTimerService.cleanInvalidDs(dsArray);
|
||||||
|
if(sw && ds.size()>0){//如果定时器开启且定时器列表不为空
|
||||||
|
modeList.add("1");
|
||||||
|
}
|
||||||
|
Boolean kaiguan = tr.getKaiguan();
|
||||||
|
if(kaiguan){//土壤模式开关
|
||||||
|
modeList.add("2");
|
||||||
|
}
|
||||||
|
asDevice1.setMode(modeList);
|
||||||
|
asDevice1.setModeStr(JSON.toJSONString(modeList));
|
||||||
asDevice1.setCurrentSoilMoisture(value.getTuran_show());
|
asDevice1.setCurrentSoilMoisture(value.getTuran_show());
|
||||||
List<AsWateringRecord> asWateringRecords = asWateringRecordService.selectAsWateringRecordList(AsWateringRecord.builder().deviceId(asDevice1.getDeviceId()).build());
|
List<AsWateringRecord> asWateringRecords = asWateringRecordService.selectAsWateringRecordList(AsWateringRecord.builder().deviceId(asDevice1.getDeviceId()).build());
|
||||||
// 根据asWateringRecords查询最后一次浇水时间
|
// 根据asWateringRecords查询最后一次浇水时间
|
||||||
if(asWateringRecords.size()>0){
|
if(asWateringRecords.size()>0){
|
||||||
asDevice1.setLastWatering(asWateringRecords.get(0).getWaterTime());
|
asDevice1.setLastWatering(asWateringRecords.get(0).getWaterTime());
|
||||||
}
|
}
|
||||||
|
/**将value转成device对象并保存到数据库*/
|
||||||
|
int i = asDeviceMapper.updateAsDevice(asDevice1);
|
||||||
|
if(i>0){
|
||||||
|
log.info("保存设备参数成功:【{}】", JSON.toJSONString(asDevice1));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,10 +36,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<result property="soilMoisture" column="soil_moisture" />
|
<result property="soilMoisture" column="soil_moisture" />
|
||||||
<result property="waterIntensitySwitch" column="water_intensity_switch" />
|
<result property="waterIntensitySwitch" column="water_intensity_switch" />
|
||||||
<result property="isNetwork" column="is_network" />
|
<result property="isNetwork" column="is_network" />
|
||||||
|
<result property="modeStr" column="mode_str" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<sql id="selectAsDeviceVo">
|
<sql id="selectAsDeviceVo">
|
||||||
select device_id, picture, device_name, classify_id, classify_name, model_id, model, mac, activation_time, online_status, user_id, user_name, nick_name, regular_watering, soil_moisture_open, soil_moisture_close, water_intensity, pulse_mode, pulse_mode_param, screen_rest_time, version, version_id, create_by, create_time, update_by, update_time, remark, regular_watering_json, soil_moisture, water_intensity_switch,is_network from as_device
|
select device_id, picture, device_name, classify_id, classify_name, model_id, model, mac, activation_time, online_status, user_id, user_name, nick_name, regular_watering, soil_moisture_open, soil_moisture_close, water_intensity, pulse_mode, pulse_mode_param, screen_rest_time, version, version_id, create_by, create_time, update_by, update_time, remark, regular_watering_json, soil_moisture, water_intensity_switch,is_network,mode_str from as_device
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<select id="selectAsDeviceList" parameterType="AsDevice" resultMap="AsDeviceResult">
|
<select id="selectAsDeviceList" parameterType="AsDevice" resultMap="AsDeviceResult">
|
||||||
|
@ -171,7 +172,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<if test="soilMoisture != null">soil_moisture = #{soilMoisture},</if>
|
<if test="soilMoisture != null">soil_moisture = #{soilMoisture},</if>
|
||||||
<if test="waterIntensitySwitch != null">water_intensity_switch = #{waterIntensitySwitch},</if>
|
<if test="waterIntensitySwitch != null">water_intensity_switch = #{waterIntensitySwitch},</if>
|
||||||
<if test="status != null">status = #{status},</if>
|
<if test="status != null">status = #{status},</if>
|
||||||
<if test="isNetwork != null">is_network = #{isNetwork}</if>
|
<if test="isNetwork != null">is_network = #{isNetwork},</if>
|
||||||
|
<if test="modeStr != null">mode_str = #{modeStr}</if>
|
||||||
</trim>
|
</trim>
|
||||||
where device_id = #{deviceId}
|
where device_id = #{deviceId}
|
||||||
</update>
|
</update>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user