diff --git a/agri-framework/src/main/java/com/agri/framework/interceptor/DeviceStatusHandler.java b/agri-framework/src/main/java/com/agri/framework/interceptor/DeviceStatusHandler.java index c4d8e30..24d43eb 100644 --- a/agri-framework/src/main/java/com/agri/framework/interceptor/DeviceStatusHandler.java +++ b/agri-framework/src/main/java/com/agri/framework/interceptor/DeviceStatusHandler.java @@ -24,6 +24,7 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.TimeUnit; @@ -174,7 +175,8 @@ public class DeviceStatusHandler { List msgList = new ArrayList<>(); // 仅当up且所有key为数字时,才更新最新状态缓存 for (String key : payloadObj.keySet()) { - BigDecimal value = payloadObj.getBigDecimal(key); + BigDecimal value = payloadObj.getBigDecimal(key) + .divide(new BigDecimal(10),1, RoundingMode.HALF_UP); String valueIndex = key.substring(2); SysAgriInfo sysAgriInfo = new SysAgriInfo(); BeanUtils.copyProperties(agriInfo, sysAgriInfo); diff --git a/agri-framework/src/main/java/com/agri/framework/interceptor/FrontendControlHandler.java b/agri-framework/src/main/java/com/agri/framework/interceptor/FrontendControlHandler.java index ed088b7..8341705 100644 --- a/agri-framework/src/main/java/com/agri/framework/interceptor/FrontendControlHandler.java +++ b/agri-framework/src/main/java/com/agri/framework/interceptor/FrontendControlHandler.java @@ -269,10 +269,9 @@ public class FrontendControlHandler { } for (SysMessage message : messages) { Map alarmMsg = new HashMap<>(); - alarmMsg.put("msg",message.getContent()); - alarmMsg.put("time", LocalDateTime.now().format(DATE_TIME_FORMATTER)); + alarmMsg.put("msgType", message); String alarmMessage = objectMapper.writeValueAsString(alarmMsg); - mqttMessageSender.publish("frontend/" + message.getImei() + "/alarm", alarmMessage); + mqttMessageSender.publish("device/" + message.getImei() + "/alarm", alarmMessage); } } } \ No newline at end of file diff --git a/agri-system/src/main/java/com/agri/system/controller/SysMessageController.java b/agri-system/src/main/java/com/agri/system/controller/SysMessageController.java index a62c419..0379f5b 100644 --- a/agri-system/src/main/java/com/agri/system/controller/SysMessageController.java +++ b/agri-system/src/main/java/com/agri/system/controller/SysMessageController.java @@ -1,7 +1,12 @@ package com.agri.system.controller; import java.util.List; +import java.util.Queue; import javax.servlet.http.HttpServletResponse; + +import com.agri.common.utils.SecurityUtils; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.apache.commons.lang3.StringUtils; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -109,4 +114,51 @@ public class SysMessageController extends BaseController { return toAjax(sysMessageService.deleteSysMessageByIds(ids)); } + + + /** + * 查询系统消息中心列表 + */ + @PreAuthorize("@ss.hasPermi('warn:message:list')") + @GetMapping("/getNewMessage") + public AjaxResult getNewMessage(SysMessage sysMessage) + { + List list = sysMessageService.selectSysMessageList(sysMessage); + return success(list); + } + + @PreAuthorize("@ss.hasPermi('warn:message:edit')") + @Log(title = "系统消息中心", businessType = BusinessType.UPDATE) + @PutMapping("/updateRead") + public AjaxResult updateRead(@RequestBody SysMessage sysMessage) + { + if (SecurityUtils.isAdmin()) return success(); + sysMessageService.lambdaUpdate() + .eq(SysMessage::getReceiver, SecurityUtils.getUserId()) + .eq(SysMessage::getReadStatus, 0) + .eq(StringUtils.isNotBlank(sysMessage.getMsgType()), + SysMessage::getMsgType, sysMessage.getMsgType()) + .set(SysMessage::getReadStatus, 1) + .update(); + return success(); + } + @PreAuthorize("@ss.hasPermi('warn:message:remove')") + @Log(title = "排量删除历史记录", businessType = BusinessType.DELETE) + @DeleteMapping("/removeBatch") + public AjaxResult removeBatch(@RequestBody SysMessage sysMessage) + { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("receiver", SecurityUtils.getUserId()); + wrapper.eq("msg_type", sysMessage.getMsgType()); + sysMessageService.remove(wrapper); + return success(); + } + + @PreAuthorize("@ss.hasPermi('warn:message:list')") + @GetMapping("/getMsgOverview") + public AjaxResult getMsgOverview(SysMessage sysMessage) + { + List list = sysMessageService.getMsgOverview(sysMessage); + return success(list); + } } diff --git a/agri-system/src/main/java/com/agri/system/domain/SysMessage.java b/agri-system/src/main/java/com/agri/system/domain/SysMessage.java index 56dcb9a..7457b23 100644 --- a/agri-system/src/main/java/com/agri/system/domain/SysMessage.java +++ b/agri-system/src/main/java/com/agri/system/domain/SysMessage.java @@ -36,6 +36,7 @@ public class SysMessage extends BaseEntity private String imei; /** 接收人:all=全体用户,其他=用户ID */ @Excel(name = "接收人:all=全体用户,其他=用户ID") + @JsonSerialize(using = ToStringSerializer.class) private Long receiver; /** 消息标题 */ @@ -70,5 +71,15 @@ public class SysMessage extends BaseEntity @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") private LocalDate monitorDate; + @TableField(exist = false) private List imeiList; + + @TableField(exist = false) + @JsonSerialize(using = ToStringSerializer.class) + private Long sortOldId; + + @TableField(exist = false) + @JsonSerialize(using = ToStringSerializer.class) + private Long sortNewId; + } diff --git a/agri-system/src/main/java/com/agri/system/mapper/SysMessageMapper.java b/agri-system/src/main/java/com/agri/system/mapper/SysMessageMapper.java index 28bcc93..ae57d69 100644 --- a/agri-system/src/main/java/com/agri/system/mapper/SysMessageMapper.java +++ b/agri-system/src/main/java/com/agri/system/mapper/SysMessageMapper.java @@ -28,6 +28,8 @@ public interface SysMessageMapper extends BaseMapper */ public List selectSysMessageList(SysMessage sysMessage); + + /** * 新增系统消息中心 * @@ -59,4 +61,11 @@ public interface SysMessageMapper extends BaseMapper * @return 结果 */ public int deleteSysMessageByIds(Long[] ids); + + /** + * 获取消息概览 + * @param sysMessage + * @return + */ + List getMsgOverview(SysMessage sysMessage); } diff --git a/agri-system/src/main/java/com/agri/system/service/ISysMessageService.java b/agri-system/src/main/java/com/agri/system/service/ISysMessageService.java index 62d37a5..5cfeb0a 100644 --- a/agri-system/src/main/java/com/agri/system/service/ISysMessageService.java +++ b/agri-system/src/main/java/com/agri/system/service/ISysMessageService.java @@ -58,4 +58,6 @@ public interface ISysMessageService extends IService { * @return 结果 */ public int deleteSysMessageById(Long id); + + List getMsgOverview(SysMessage sysMessage); } diff --git a/agri-system/src/main/java/com/agri/system/service/impl/AgriServiceImpl.java b/agri-system/src/main/java/com/agri/system/service/impl/AgriServiceImpl.java index 91b381e..4ac966e 100644 --- a/agri-system/src/main/java/com/agri/system/service/impl/AgriServiceImpl.java +++ b/agri-system/src/main/java/com/agri/system/service/impl/AgriServiceImpl.java @@ -47,6 +47,9 @@ public class AgriServiceImpl implements AgriService { List msgList = new ArrayList<>(); for (SysAgriInfo agriInfo : offlineList) { + if (Objects.equals(agriInfo.getImei(), "864865085003722")) { + continue; + } SysMessage message = new SysMessage(); message.setImei(agriInfo.getImei()); message.setTitle(agriInfo.getTitle()); diff --git a/agri-system/src/main/java/com/agri/system/service/impl/SysMessageServiceImpl.java b/agri-system/src/main/java/com/agri/system/service/impl/SysMessageServiceImpl.java index 6c23d87..126843d 100644 --- a/agri-system/src/main/java/com/agri/system/service/impl/SysMessageServiceImpl.java +++ b/agri-system/src/main/java/com/agri/system/service/impl/SysMessageServiceImpl.java @@ -97,4 +97,10 @@ public class SysMessageServiceImpl extends ServiceImpl getMsgOverview(SysMessage sysMessage) { + return baseMapper.getMsgOverview(sysMessage); + } } diff --git a/agri-system/src/main/java/com/agri/system/util/UrlEncodeUtil.java b/agri-system/src/main/java/com/agri/system/util/UrlEncodeUtil.java index 8684f32..02a7ad1 100644 --- a/agri-system/src/main/java/com/agri/system/util/UrlEncodeUtil.java +++ b/agri-system/src/main/java/com/agri/system/util/UrlEncodeUtil.java @@ -25,7 +25,6 @@ public class UrlEncodeUtil { agriObj.put("imei", agriInfo.getImei()); agriObj.put("agriName", agriInfo.getAgriName()); agriObj.put("agriId", agriInfo.getId().toString()); - log.info("agriInfo:{}", agriInfo); agriObj.put("workMode", agriInfo.getWorkMode()); // 2. JSON.stringify diff --git a/agri-system/src/main/resources/mapper/system/SysMessageMapper.xml b/agri-system/src/main/resources/mapper/system/SysMessageMapper.xml index 6b81168..f805a23 100644 --- a/agri-system/src/main/resources/mapper/system/SysMessageMapper.xml +++ b/agri-system/src/main/resources/mapper/system/SysMessageMapper.xml @@ -22,7 +22,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, receiver, title, msg_type, read_status, content, rich_content, img_url, link_url, create_by, create_time, update_by, update_time, remark from sys_message + select id, imei, receiver, title, msg_type, read_status, content, rich_content, img_url, link_url, create_by, create_time, update_by, update_time, remark from sys_message + SELECT + * + FROM + ( + SELECT + `imei`, + `receiver`, + `title`, + `msg_type`, + `read_status`, + `content`, + `rich_content`, + `img_url`, + `link_url`, + `create_time`, -- 必须加 + `id`, -- 必须加 + ROW_NUMBER() OVER (PARTITION BY msg_type ORDER BY create_time DESC, id DESC) AS rn + FROM + sys_message d + WHERE + -- 正确写法:包含今天所有时间 + d.create_time >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) + AND d.create_time < DATE_ADD(CURDATE(), INTERVAL 1 DAY) + ) t + WHERE + t.rn = 1; + \ No newline at end of file