From de808f9c16d6b4847689417d92cf270add14b997 Mon Sep 17 00:00:00 2001 From: 18650502300 <18650502300@163.com> Date: Tue, 9 Apr 2024 19:50:53 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E4=B8=8B=E6=AC=A1=E6=B5=87=E6=B0=B4?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 4 +- .../core/domain/onenet/DatapointValue.java | 2 + .../service/impl/AsUserServiceImpl.java | 62 ++++++++++++++++++- 3 files changed, 65 insertions(+), 3 deletions(-) diff --git a/AutoSprout-admin/src/main/resources/application.yml b/AutoSprout-admin/src/main/resources/application.yml index 6e9ef25..512e31f 100644 --- a/AutoSprout-admin/src/main/resources/application.yml +++ b/AutoSprout-admin/src/main/resources/application.yml @@ -103,13 +103,13 @@ spring: enabled: false # 是否使能mqtt功能 redis: # 地址 - host: 117.50.189.165 + host: localhost # 端口,默认为6379 port: 6379 # 数据库索引 database: 1 # 密码 - password: YgUIGNudqOQaRxHZ + password: # 连接超时时间 timeout: 10s lettuce: diff --git a/AutoSprout-common/src/main/java/com/ruoyi/common/core/domain/onenet/DatapointValue.java b/AutoSprout-common/src/main/java/com/ruoyi/common/core/domain/onenet/DatapointValue.java index 700eaa3..abfa1be 100644 --- a/AutoSprout-common/src/main/java/com/ruoyi/common/core/domain/onenet/DatapointValue.java +++ b/AutoSprout-common/src/main/java/com/ruoyi/common/core/domain/onenet/DatapointValue.java @@ -60,5 +60,7 @@ public class DatapointValue { private int min; private int sec; private Boolean sw;//开关 + private int week;//周转成二进制 bit0位开始为周一 0110 (week&1<<0) 1<<1 1<<2 00000110 + private String date;//日期 } } diff --git a/AutoSprout-watering/src/main/java/com/ruoyi/device/service/impl/AsUserServiceImpl.java b/AutoSprout-watering/src/main/java/com/ruoyi/device/service/impl/AsUserServiceImpl.java index e036bf4..01db596 100644 --- a/AutoSprout-watering/src/main/java/com/ruoyi/device/service/impl/AsUserServiceImpl.java +++ b/AutoSprout-watering/src/main/java/com/ruoyi/device/service/impl/AsUserServiceImpl.java @@ -10,6 +10,7 @@ import com.ruoyi.common.constant.IotConstants; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.onenet.*; import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanValidators; @@ -34,6 +35,11 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.validation.Validator; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Calendar; +import java.util.Collections; +import java.util.Date; import java.util.List; /** @@ -451,8 +457,11 @@ public class AsUserServiceImpl implements IAsUserService DatapointValue.Tr tr = value.getTr(); asDevice1.setSoilMoistureClose(tr.getEnd_sd()); asDevice1.setSoilMoistureOpen(tr.getStart_sd()); + asDevice1.setSoilMoisture(tr.getKaiguan().toString()); asDevice1.setPulseModeParam(JSON.toJSONString(value.getMc())); - asDevice1.setNextDs(JSON.toJSONString(value.getNext_ds())); + DatapointValue.nextDs next_ds = value.getNext_ds(); + /**设置下次浇水时间日期*/ + setNextDs(asDevice1, next_ds); asDevice1.setCurrentSoilMoisture(value.getTuran_show()); List asWateringRecords = asWateringRecordService.selectAsWateringRecordList(AsWateringRecord.builder().deviceId(asDevice1.getDeviceId()).build()); // 根据asWateringRecords查询最后一次浇水时间 @@ -465,4 +474,55 @@ public class AsUserServiceImpl implements IAsUserService } return asDevices; } + + private void setNextDs(AsDevice asDevice1, DatapointValue.nextDs next_ds) { + //将week将10进制转成2进制 + String week = Integer.toBinaryString(next_ds.getWeek()); + if(StringUtils.isNotEmpty(week)){ + int requiredZeroes = 7 - week.length(); + String zeroes = String.join("", Collections.nCopies(requiredZeroes, "0")); + week = zeroes + week;//0001110 + //将week字符串反转 + week = new StringBuilder(week).reverse().toString();//0111000 234 + String date = DateUtils.getDate();//获取当前日期格式为yyyy-MM-dd + //获取今天是星期几 + Calendar calendar = Calendar.getInstance(); + int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); + // Calendar中周日对应的值为1,需要将其转换为周一对应的值为1 + int weekDay = (dayOfWeek == 1) ? 7 : dayOfWeek - 1; + System.out.println("今天是周" + weekDay); + //week从weekDay开始截取 + week = week.substring(weekDay-1);//111000 + //将week切割成字符 + String[] weekArr = week.split(""); + for (int i = 0; i < weekArr.length; i++) { + if(i==0 && "1".equals(weekArr[i])){ + //今天的浇水时间是否已经过了 + String wateringDate = date+" "+ next_ds.getHour()+":"+ next_ds.getMin()+":00"; + //将wateringDate转成Date类型并与当前时间进行比较 + long time = DateUtils.parseDate(wateringDate).getTime(); + long time1 = new Date().getTime(); + if(time >time1){ + System.out.println("浇水时间大于当前时间,浇水时间未过"); + next_ds.setDate(date); + asDevice1.setNextDs(JSON.toJSONString(next_ds)); + }else{ + System.out.println("浇水时间小于当前时间,浇水时间已过"); + } + } + if(i>0 && "1".equals(weekArr[i])){ + //当前日期加上i1天 + LocalDate currentDate = LocalDate.now(); // 获取当前日期 + LocalDate futureDate = currentDate.plusDays(i); // 当前日期加上i天 + // 格式化日期以便输出(可选,根据实际需求选择合适的格式) + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String formattedFutureDate = futureDate.format(formatter); + System.out.println("当前日期加 " + i + " 天后是: " + formattedFutureDate); + next_ds.setDate(formattedFutureDate); + asDevice1.setNextDs(JSON.toJSONString(next_ds)); + break; + } + } + } + } }